resource-manager: Add get API for INSTANCE_TYPE_NORMAL 33/288333/15
authorYoungjae Cho <y0.cho@samsung.com>
Wed, 15 Feb 2023 08:37:17 +0000 (17:37 +0900)
committerYoungjae Cho <y0.cho@samsung.com>
Wed, 8 Mar 2023 01:15:21 +0000 (10:15 +0900)
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 <y0.cho@samsung.com>
src/resource-manager/resource-manager.c
src/resource-manager/resource-manager.h

index d100e8e7dfc89a9be52bc6054cd12d0adf90e0d0..00c1dca2718b0d57e68a683cb9cb9e33ccdbc61e 100644 (file)
@@ -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)
 {
index cc6d8867b0f91059e94305e4bf6a57951b0d8b58..045d980479b73f1a046251f9e58bb05f88cdbee2 100644 (file)
@@ -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);