*/
int hal_common_check_backend_compatibility_all(enum hal_common_backend_compatibility **arr_compatibility, int *len);
+/**
+ * @brief Check compatibility of the given module
+ * @param[in] module HAL module for checking compatibility
+ * @param[out] compatibility Address for storing compatibility result
+ * @return @c 0 on success, otherwise a negative error value
+ */
+int hal_common_check_backend_compatibility(enum hal_module module,
+ enum hal_common_backend_compatibility *compatibility);
+
#ifdef __cplusplus
}
#endif
return 0;
}
-EXPORT
-int hal_common_check_backend_compatibility_all(enum hal_common_backend_compatibility **arr_compatibility, int *len)
+static int load_backend_compatibility(void)
{
- enum hal_common_backend_compatibility *arr = NULL;
-
if (g_compatibility_info_loaded)
- goto load_success;
+ return 0;
load_backend_compatibility_from_storage();
if (g_compatibility_info_loaded)
- goto load_success;
+ return 0;
load_backend_compatibility_from_manifest();
if (g_compatibility_info_loaded)
- goto load_success;
+ return 0;
return -ENODATA;
+}
+
+EXPORT
+int hal_common_check_backend_compatibility_all(enum hal_common_backend_compatibility **arr_compatibility, int *len)
+{
+ int ret;
+ enum hal_common_backend_compatibility *arr = NULL;
+
+ ret = load_backend_compatibility();
+ if (ret != 0)
+ return ret;
-load_success:
if (access(HAL_COMMON_DEFAULT_BACKEND_COMPATIBILITY_PATH, F_OK) != 0)
store_backend_compatibility_to_storage();
return 0;
}
+
+EXPORT
+int hal_common_check_backend_compatibility(enum hal_module module,
+ enum hal_common_backend_compatibility *compatibility)
+{
+ int ret;
+
+ if (module < HAL_MODULE_UNKNOWN || module >= HAL_MODULE_END)
+ return -EINVAL;
+
+ if (!compatibility)
+ return -EINVAL;
+
+ ret = load_backend_compatibility();
+ if (ret != 0)
+ return ret;
+
+ if (access(HAL_COMMON_DEFAULT_BACKEND_COMPATIBILITY_PATH, F_OK) != 0)
+ store_backend_compatibility_to_storage();
+
+ *compatibility = g_compatibility_info[module].compat;
+
+ return 0;
+}