From: Youngjae Cho Date: Thu, 16 Feb 2023 04:44:03 +0000 (+0900) Subject: resource-manager: Introduce attribute setter X-Git-Tag: accepted/tizen/unified/20230310.062652~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F82%2F288382%2F6;p=platform%2Fcore%2Fsystem%2Flibsyscommon.git resource-manager: Introduce attribute setter The setter is only allowed for resource type of INSTANCE_TYPE_NORMAL. - syscommon_resman_set_resource_attr_int() - syscommon_resman_set_resource_attr_int64() - syscommon_resman_set_resource_attr_uint() - syscommon_resman_set_resource_attr_uint64() - syscommon_resman_set_resource_attr_double() - syscommon_resman_set_resource_attr_string() - syscommon_resman_set_resource_attr_array() - syscommon_resman_set_resource_attr_ptr() Change-Id: I0e30425c35ec6df9660ef3c57a5ecd6a5769e1dd Signed-off-by: Youngjae Cho --- diff --git a/src/resource-manager/resource-manager.c b/src/resource-manager/resource-manager.c index 00c1dca..b3f3b9d 100644 --- a/src/resource-manager/resource-manager.c +++ b/src/resource-manager/resource-manager.c @@ -1173,6 +1173,155 @@ syscommon_resman_monitor_get_resource_attr_ptr(int resource_id, u_int64_t attr_i return get_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_PTR, data); } +static int +set_resource_attr_value_data(struct syscommon_resman_resource *resource, + u_int64_t attr_id, enum syscommon_resman_data_type type, const void *data, int count) +{ + const struct syscommon_resman_resource_attribute *attr = NULL; + struct syscommon_resman_resource_attribute_value *attr_value = NULL; + int ret; + + if (!data) + return -EINVAL; + + if (!check_attr_validate(resource, attr_id, type)) + return -EINVAL; + + attr = get_resource_attr(resource, attr_id); + if (!attr || !attr->ops.get) + return -EINVAL; + + attr_value = get_resource_attr_value(resource, attr_id); + if (!attr_value) + return -EINVAL; + + ret = attr->ops.set(resource->id, attr, data, count); + if (ret < 0) + return ret; + + /* TODO: We need to discuss about updating attr_value->data after ops.set() */ + switch (type) { + case SYSCOMMON_RESMAN_DATA_TYPE_INT: + *((int32_t *) attr_value->data) = *(int32_t *) data; + break; + case SYSCOMMON_RESMAN_DATA_TYPE_INT64: + *((int64_t *) attr_value->data) = *(int64_t *) data; + break; + case SYSCOMMON_RESMAN_DATA_TYPE_UINT: + *((u_int32_t *) attr_value->data) = *(u_int32_t *) data; + break; + case SYSCOMMON_RESMAN_DATA_TYPE_UINT64: + *((u_int64_t *) attr_value->data) = *(u_int64_t *) data; + break; + case SYSCOMMON_RESMAN_DATA_TYPE_DOUBLE: + *((double *) attr_value->data) = *(double *) data; + break; + case SYSCOMMON_RESMAN_DATA_TYPE_STRING: + strncpy((char *) attr_value->data, data, SYSCOMMON_RESMAN_BUFF_MAX); + break; + case SYSCOMMON_RESMAN_DATA_TYPE_ARRAY: + attr_value->data = *(struct syscommon_resman_array_value **) data; + break; + case SYSCOMMON_RESMAN_DATA_TYPE_PTR: + attr_value->data = *(void **) data; + break; + case SYSCOMMON_RESMAN_DATA_TYPE_BOOLEAN: + case SYSCOMMON_RESMAN_DATA_TYPE_NUM: + default: + return -EINVAL; + } + + return 0; +} + +int +syscommon_resman_set_resource_attr_int(int resource_id, u_int64_t attr_id, int32_t data) +{ + struct syscommon_resman_resource *resource = find_resource(resource_id); + + if (!is_valid_resource(resource, INSTANCE_TYPE_NORMAL)) + return -EINVAL; + + return set_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_INT, &data, 1); +} + +int +syscommon_resman_set_resource_attr_int64(int resource_id, u_int64_t attr_id, int64_t data) +{ + struct syscommon_resman_resource *resource = find_resource(resource_id); + + if (!is_valid_resource(resource, INSTANCE_TYPE_NORMAL)) + return -EINVAL; + + return set_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_INT64, &data, 1); +} + +int +syscommon_resman_set_resource_attr_uint(int resource_id, u_int64_t attr_id, u_int32_t data) +{ + struct syscommon_resman_resource *resource = find_resource(resource_id); + + if (!is_valid_resource(resource, INSTANCE_TYPE_NORMAL)) + return -EINVAL; + + return set_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_UINT, &data, 1); +} + +int +syscommon_resman_set_resource_attr_uint64(int resource_id, u_int64_t attr_id, u_int64_t data) +{ + struct syscommon_resman_resource *resource = find_resource(resource_id); + + if (!is_valid_resource(resource, INSTANCE_TYPE_NORMAL)) + return -EINVAL; + + return set_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_UINT64, &data, 1); +} + +int +syscommon_resman_set_resource_attr_double(int resource_id, u_int64_t attr_id, double data) +{ + struct syscommon_resman_resource *resource = find_resource(resource_id); + + if (!is_valid_resource(resource, INSTANCE_TYPE_NORMAL)) + return -EINVAL; + + return set_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_DOUBLE, &data, 1); +} + +int +syscommon_resman_set_resource_attr_string(int resource_id, u_int64_t attr_id, char data) +{ + struct syscommon_resman_resource *resource = find_resource(resource_id); + + if (!is_valid_resource(resource, INSTANCE_TYPE_NORMAL)) + return -EINVAL; + + return set_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_STRING, &data, 1); +} + +int +syscommon_resman_set_resource_attr_array(int resource_id, u_int64_t attr_id, void *data, int count) +{ + struct syscommon_resman_resource *resource = find_resource(resource_id); + + if (!is_valid_resource(resource, INSTANCE_TYPE_NORMAL)) + return -EINVAL; + + return set_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_ARRAY, &data, count); +} + +int +syscommon_resman_set_resource_attr_ptr(int resource_id, u_int64_t attr_id, void *data) +{ + struct syscommon_resman_resource *resource = find_resource(resource_id); + + if (!is_valid_resource(resource, INSTANCE_TYPE_NORMAL)) + return -EINVAL; + + return set_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_PTR, &data, 1); +} + static inline bool is_resource_attr_visible(struct syscommon_resman_resource *resource, const struct syscommon_resman_resource_attribute *attr) diff --git a/src/resource-manager/resource-manager.h b/src/resource-manager/resource-manager.h index 045d980..d89f08b 100644 --- a/src/resource-manager/resource-manager.h +++ b/src/resource-manager/resource-manager.h @@ -196,6 +196,15 @@ int syscommon_resman_monitor_get_resource_attr_string(int resource_id, u_int64_t int syscommon_resman_monitor_get_resource_attr_array(int resource_id, u_int64_t attr_id, struct syscommon_resman_array_value **data); int syscommon_resman_monitor_get_resource_attr_ptr(int resource_id, u_int64_t attr_id, void **data); +int syscommon_resman_set_resource_attr_int(int resource_id, u_int64_t attr_id, int32_t data); +int syscommon_resman_set_resource_attr_int64(int resource_id, u_int64_t attr_id, int64_t data); +int syscommon_resman_set_resource_attr_uint(int resource_id, u_int64_t attr_id, u_int32_t data); +int syscommon_resman_set_resource_attr_uint64(int resource_id, u_int64_t attr_id, u_int64_t data); +int syscommon_resman_set_resource_attr_double(int resource_id, u_int64_t attr_id, double data); +int syscommon_resman_set_resource_attr_string(int resource_id, u_int64_t attr_id, char data); +int syscommon_resman_set_resource_attr_array(int resource_id, u_int64_t attr_id, void *data, int count); +int syscommon_resman_set_resource_attr_ptr(int resource_id, u_int64_t attr_id, void *data); + int syscommon_resman_set_resource_attr_interest(int resource_id, u_int64_t interest_mask); int syscommon_resman_unset_resource_attr_interest(int resource_id, u_int64_t interest_mask); bool syscommon_resman_is_resource_attr_interested(int resource_id, u_int64_t interest_mask);