From 210cb09166ffc5e09db400dd1e7d8da919ab750a Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Sun, 13 Jan 2019 18:53:15 +0000 Subject: [PATCH] Add optional OID id validators. You can pre-validate your OID ids prior to any other calls to your module. If onlp__id_validate() returns ONLP_STATUS_OK then the ID will be passed to your implementation. If onlp__id_validate() returns ONLP_STATUS_E_INVALID then it will not be passed to your implementation. The goal here is to avoid all of the boilerplate ID bounds checking in all of the platform implemenations that use static OID info arrays. Instead of validating in each function you should provide a single onlp__id_validate() and assume the ID is valid in all other functions. The default implementation returns ONLP_STATUS_OK for backwards compatibility. --- .../base/any/onlp/src/onlp/module/inc/onlp/platformi/psui.h | 6 ++++++ .../any/onlp/src/onlp/module/inc/onlp/platformi/thermali.h | 6 ++++++ .../any/onlp/src/onlp_platform_defaults/module/src/ledi.c | 2 ++ .../any/onlp/src/onlp_platform_defaults/module/src/psui.c | 1 + .../onlp/src/onlp_platform_defaults/module/src/thermali.c | 2 ++ 5 files changed, 17 insertions(+) diff --git a/packages/base/any/onlp/src/onlp/module/inc/onlp/platformi/psui.h b/packages/base/any/onlp/src/onlp/module/inc/onlp/platformi/psui.h index d3203e9f..6567c7ad 100644 --- a/packages/base/any/onlp/src/onlp/module/inc/onlp/platformi/psui.h +++ b/packages/base/any/onlp/src/onlp/module/inc/onlp/platformi/psui.h @@ -49,6 +49,12 @@ int onlp_psui_hw_init(uint32_t flags); */ int onlp_psui_sw_denit(void); +/** + * @brief Validate a PSU OID. + * @param id The id. + */ +int onlp_psui_id_validate(onlp_oid_id_t id); + /** * @brief Get the PSU's oid header. * @param id The PSU OID. diff --git a/packages/base/any/onlp/src/onlp/module/inc/onlp/platformi/thermali.h b/packages/base/any/onlp/src/onlp/module/inc/onlp/platformi/thermali.h index 83183b33..1929ae53 100644 --- a/packages/base/any/onlp/src/onlp/module/inc/onlp/platformi/thermali.h +++ b/packages/base/any/onlp/src/onlp/module/inc/onlp/platformi/thermali.h @@ -49,6 +49,12 @@ int onlp_thermali_hw_init(uint32_t flags); */ int onlp_thermali_sw_denit(void); +/** + * @brief Validate a thermal oid. + * @param id The thermal id. + */ +int onlp_thermali_id_validate(onlp_oid_id_t id); + /** * @brief Retrieve the thermal's oid header. * @param id The thermal oid. diff --git a/packages/base/any/onlp/src/onlp_platform_defaults/module/src/ledi.c b/packages/base/any/onlp/src/onlp_platform_defaults/module/src/ledi.c index b42cc040..29a3078e 100644 --- a/packages/base/any/onlp/src/onlp_platform_defaults/module/src/ledi.c +++ b/packages/base/any/onlp/src/onlp_platform_defaults/module/src/ledi.c @@ -28,6 +28,8 @@ __ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_ledi_sw_init(void)); __ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_ledi_hw_init(uint32_t flags)); __ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_ledi_sw_denit(void)); +__ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_ledi_id_validate(onlp_oid_id_t id)); + __ONLP_DEFAULTI_IMPLEMENTATION(onlp_ledi_info_get(onlp_oid_id_t id, onlp_led_info_t* rv)); /** diff --git a/packages/base/any/onlp/src/onlp_platform_defaults/module/src/psui.c b/packages/base/any/onlp/src/onlp_platform_defaults/module/src/psui.c index ae5193e4..a929e179 100644 --- a/packages/base/any/onlp/src/onlp_platform_defaults/module/src/psui.c +++ b/packages/base/any/onlp/src/onlp_platform_defaults/module/src/psui.c @@ -29,6 +29,7 @@ __ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_psui_sw_init(void)); __ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_psui_hw_init(uint32_t flags)); __ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_psui_sw_denit(void)); +__ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_psui_id_validate(onlp_oid_id_t id)); /** * simulate hdr_get for older platforms which don't support it. diff --git a/packages/base/any/onlp/src/onlp_platform_defaults/module/src/thermali.c b/packages/base/any/onlp/src/onlp_platform_defaults/module/src/thermali.c index c8d273dc..c87075f7 100644 --- a/packages/base/any/onlp/src/onlp_platform_defaults/module/src/thermali.c +++ b/packages/base/any/onlp/src/onlp_platform_defaults/module/src/thermali.c @@ -29,6 +29,8 @@ __ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_thermali_sw_init(void)); __ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_thermali_hw_init(uint32_t flags)); __ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_thermali_sw_denit(void)); +__ONLP_DEFAULTI_IMPLEMENTATION_OPTIONAL(onlp_thermali_id_validate(onlp_oid_id_t id)); + __ONLP_DEFAULTI_IMPLEMENTATION(onlp_thermali_info_get(onlp_oid_id_t id, onlp_thermal_info_t* rv)); /**