From 3b0e69d23249a757e8eacfc4a5cc228e5b7938fe Mon Sep 17 00:00:00 2001 From: Youngjae Cho Date: Wed, 15 Feb 2023 17:37:17 +0900 Subject: [PATCH] resource-manager: Add get API for INSTANCE_TYPE_NORMAL Resource instance type of INSTANCE_TYPE_NORMAL fetches its attribute value by calling attribute_ops.get(). - syscommon_resman_get_resource_attr_int() - syscommon_resman_get_resource_attr_int64() - syscommon_resman_get_resource_attr_uint() - syscommon_resman_get_resource_attr_uint64() - syscommon_resman_get_resource_attr_double() - syscommon_resman_get_resource_attr_string() - syscommon_resman_get_resource_attr_array() - syscommon_resman_get_resource_attr_ptr() Change-Id: Ib3482ff685b0c3e4783cd8a3ce7dc5e6ab1e9699 Signed-off-by: Youngjae Cho --- src/resource-manager/resource-manager.c | 156 +++++++++++++++++++++++- src/resource-manager/resource-manager.h | 9 ++ 2 files changed, 163 insertions(+), 2 deletions(-) diff --git a/src/resource-manager/resource-manager.c b/src/resource-manager/resource-manager.c index d100e8e..00c1dca 100644 --- a/src/resource-manager/resource-manager.c +++ b/src/resource-manager/resource-manager.c @@ -364,8 +364,32 @@ syscommon_resman_get_resource_control_name(int resource_id, u_int64_t ctrl_id) } static int -monitor_update_resource_attr(struct syscommon_resman_resource *resource, - u_int64_t attr_id) +update_resource_attr(struct syscommon_resman_resource *resource, u_int64_t attr_id) +{ + int attr_index = RESOURCE_ATTR_INDEX(attr_id); + const struct syscommon_resman_resource_attribute *attr = NULL; + struct syscommon_resman_resource_attribute_value *attr_value = NULL; + int ret; + + if (!resource || attr_index < 0 || attr_index >= resource->num_attrs) + return -EINVAL; + + attr = &resource->attrs[attr_index]; + + if (!attr->ops.get) + return -EINVAL; + + attr_value = &resource->attrs_value[attr_index]; + + ret = attr->ops.get(resource->id, attr, attr_value->data); + if (ret < 0) + return ret; + + return 0; +} + +static int +monitor_update_resource_attr(struct syscommon_resman_resource *resource, u_int64_t attr_id) { int attr_index = RESOURCE_ATTR_INDEX(attr_id); const struct syscommon_resman_resource_attribute *attr = NULL; @@ -933,6 +957,134 @@ get_resource_attr_value_data(struct syscommon_resman_resource *resource, u_int64 return 0; } +int +syscommon_resman_get_resource_attr_int(int resource_id, u_int64_t attr_id, int32_t *data) +{ + struct syscommon_resman_resource *resource = find_resource(resource_id); + int ret; + + if (!is_valid_resource(resource, INSTANCE_TYPE_NORMAL)) + return -EINVAL; + + ret = update_resource_attr(resource, attr_id); + if (ret < 0) + return ret; + + return get_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_INT, data); +} + +int +syscommon_resman_get_resource_attr_int64(int resource_id, u_int64_t attr_id, int64_t *data) +{ + struct syscommon_resman_resource *resource = find_resource(resource_id); + int ret; + + if (!is_valid_resource(resource, INSTANCE_TYPE_NORMAL)) + return -EINVAL; + + ret = update_resource_attr(resource, attr_id); + if (ret < 0) + return ret; + + return get_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_INT64, data); +} + +int +syscommon_resman_get_resource_attr_uint(int resource_id, u_int64_t attr_id, u_int32_t *data) +{ + struct syscommon_resman_resource *resource = find_resource(resource_id); + int ret; + + if (!is_valid_resource(resource, INSTANCE_TYPE_NORMAL)) + return -EINVAL; + + ret = update_resource_attr(resource, attr_id); + if (ret < 0) + return ret; + + return get_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_UINT, data); +} + +int +syscommon_resman_get_resource_attr_uint64(int resource_id, u_int64_t attr_id, u_int64_t *data) +{ + struct syscommon_resman_resource *resource = find_resource(resource_id); + int ret; + + if (!is_valid_resource(resource, INSTANCE_TYPE_NORMAL)) + return -EINVAL; + + ret = update_resource_attr(resource, attr_id); + if (ret < 0) + return ret; + + return get_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_UINT64, data); +} + +int +syscommon_resman_get_resource_attr_double(int resource_id, u_int64_t attr_id, double *data) +{ + struct syscommon_resman_resource *resource = find_resource(resource_id); + int ret; + + if (!is_valid_resource(resource, INSTANCE_TYPE_NORMAL)) + return -EINVAL; + + ret = update_resource_attr(resource, attr_id); + if (ret < 0) + return ret; + + return get_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_DOUBLE, data); +} + +int +syscommon_resman_get_resource_attr_string(int resource_id, u_int64_t attr_id, char *data) +{ + struct syscommon_resman_resource *resource = find_resource(resource_id); + int ret; + + if (!is_valid_resource(resource, INSTANCE_TYPE_NORMAL)) + return -EINVAL; + + ret = update_resource_attr(resource, attr_id); + if (ret < 0) + return ret; + + return get_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_STRING, data); +} + +int +syscommon_resman_get_resource_attr_array(int resource_id, u_int64_t attr_id, struct syscommon_resman_array_value **data) +{ + struct syscommon_resman_resource *resource = find_resource(resource_id); + int ret; + + if (!is_valid_resource(resource, INSTANCE_TYPE_NORMAL)) + return -EINVAL; + + ret = update_resource_attr(resource, attr_id); + if (ret < 0) + return ret; + + return get_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_ARRAY, data); +} + +int +syscommon_resman_get_resource_attr_ptr(int resource_id, u_int64_t attr_id, void **data) +{ + struct syscommon_resman_resource *resource = find_resource(resource_id); + int ret; + + if (!is_valid_resource(resource, INSTANCE_TYPE_NORMAL)) + return -EINVAL; + + ret = update_resource_attr(resource, attr_id); + if (ret < 0) + return ret; + + return get_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_PTR, data); +} + int syscommon_resman_monitor_get_resource_attr_int(int resource_id, u_int64_t attr_id, int32_t *data) { diff --git a/src/resource-manager/resource-manager.h b/src/resource-manager/resource-manager.h index cc6d886..045d980 100644 --- a/src/resource-manager/resource-manager.h +++ b/src/resource-manager/resource-manager.h @@ -178,6 +178,15 @@ int syscommon_resman_monitor_get_resource_attrs_json(int resource_id, char **jso int syscommon_resman_monitor_get_resource_attr_json(int resource_id, u_int64_t attr_id, char **json_string); int syscommon_resman_get_resource_list_json(char **json_string); +int syscommon_resman_get_resource_attr_int(int resource_id, u_int64_t attr_id, int32_t *data); +int syscommon_resman_get_resource_attr_int64(int resource_id, u_int64_t attr_id, int64_t *data); +int syscommon_resman_get_resource_attr_uint(int resource_id, u_int64_t attr_id, u_int32_t *data); +int syscommon_resman_get_resource_attr_uint64(int resource_id, u_int64_t attr_id, u_int64_t *data); +int syscommon_resman_get_resource_attr_double(int resource_id, u_int64_t attr_id, double *data); +int syscommon_resman_get_resource_attr_string(int resource_id, u_int64_t attr_id, char *data); +int syscommon_resman_get_resource_attr_array(int resource_id, u_int64_t attr_id, struct syscommon_resman_array_value **data); +int syscommon_resman_get_resource_attr_ptr(int resource_id, u_int64_t attr_id, void **data); + int syscommon_resman_monitor_get_resource_attr_int(int resource_id, u_int64_t attr_id, int32_t *data); int syscommon_resman_monitor_get_resource_attr_int64(int resource_id, u_int64_t attr_id, int64_t *data); int syscommon_resman_monitor_get_resource_attr_uint(int resource_id, u_int64_t attr_id, u_int32_t *data); -- 2.34.1