From: Chanwoo Choi Date: Wed, 2 Aug 2023 08:26:17 +0000 (+0900) Subject: resource-manager: Add N-tuple setter to pass multiple parameter X-Git-Tag: accepted/tizen/unified/20230803.174812^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F28%2F296628%2F6;p=platform%2Fcore%2Fsystem%2Flibsyscommon.git resource-manager: Add N-tuple setter to pass multiple parameter Add N-tuple setter function of resource manager to support the case of when some attribute requires the multi paramters as setter. [Newly added setter of resource-manager] - int syscommon_resman_set_resource_attr_uint64_2( int resource_id, u_int64_t attr_id, u_int64_t data1, u_int64_t data2) : It pass the two parameter to the specific attribute which requires the two parameter as setter. - int syscommon_resman_set_resource_attr_uint64_3( int resource_id, u_int64_t attr_id, u_int64_t data1, u_int64_t data2, u_int64_t data3) : It pass the three parameter to the specific attribute which requires the three parameter as setter. - int syscommon_resman_set_resource_attr_uint64_4( int resource_id, u_int64_t attr_id, u_int64_t data1, u_int64_t data2, u_int64_t data3, u_int64_t data4) : It pass the four parameter to the specific attribute which requires the four parameter as setter. [Newly added data type of resource manager] - SYSCOMMON_RESMAN_DATA_TYPE_UINT64_UINT64 : This data type include the two of u_int64 data type - SYSCOMMON_RESMAN_DATA_TYPE_UINT64_UINT64_UINT64 : This data type include the three of u_int64 data type - SYSCOMMON_RESMAN_DATA_TYPE_UINT64_UINT64_UINT64_UINT64 : This data type include the four of u_int64 data type Change-Id: I8c659e5a9f5447e7aecb17c71005e5fa939960e8 Signed-off-by: Chanwoo Choi Signed-off-by: Youngjae Cho --- diff --git a/include/libsyscommon/resource-manager.h b/include/libsyscommon/resource-manager.h index 1df9244..ddf70b4 100644 --- a/include/libsyscommon/resource-manager.h +++ b/include/libsyscommon/resource-manager.h @@ -52,6 +52,18 @@ struct syscommon_resman_resource_attribute_ops { int (*set)(int resource_id, const struct syscommon_resman_resource_attribute *attr, const void *data, int count); + int (*set_2_tuple)(int resource_id, + const struct syscommon_resman_resource_attribute *attr, + const void *data1, const void *data2, + int count1, int count2); + int (*set_3_tuple)(int resource_id, + const struct syscommon_resman_resource_attribute *attr, + const void *data1, const void *data2, const void *data3, + int count1, int count2, int count3); + int (*set_4_tuple)(int resource_id, + const struct syscommon_resman_resource_attribute *attr, + const void *data1, const void *data2, const void *data3, const void *data4, + int count1, int count2, int count3, int count4); int (*get)(int resource_id, const struct syscommon_resman_resource_attribute *attr, void *data); @@ -207,6 +219,13 @@ int syscommon_resman_set_resource_attr_string(int resource_id, u_int64_t attr_id 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_uint64_2(int resource_id, u_int64_t attr_id, + u_int64_t data1, u_int64_t data2); +int syscommon_resman_set_resource_attr_uint64_3(int resource_id, u_int64_t attr_id, + u_int64_t data1, u_int64_t data2, u_int64_t data3); +int syscommon_resman_set_resource_attr_uint64_4(int resource_id, u_int64_t attr_id, + u_int64_t data1, u_int64_t data2, u_int64_t data3, u_int64_t data4); + 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); diff --git a/include/libsyscommon/resource-type.h b/include/libsyscommon/resource-type.h index 5aa3608..abb460a 100644 --- a/include/libsyscommon/resource-type.h +++ b/include/libsyscommon/resource-type.h @@ -35,6 +35,10 @@ enum syscommon_resman_data_type { SYSCOMMON_RESMAN_DATA_TYPE_ARRAY, SYSCOMMON_RESMAN_DATA_TYPE_PTR, SYSCOMMON_RESMAN_DATA_TYPE_BOOLEAN, + + SYSCOMMON_RESMAN_DATA_TYPE_UINT64_UINT64, + SYSCOMMON_RESMAN_DATA_TYPE_UINT64_UINT64_UINT64, + SYSCOMMON_RESMAN_DATA_TYPE_UINT64_UINT64_UINT64_UINT64, SYSCOMMON_RESMAN_DATA_TYPE_NUM }; diff --git a/src/resource-manager/resource-manager.c b/src/resource-manager/resource-manager.c index c1662d6..79c1daa 100644 --- a/src/resource-manager/resource-manager.c +++ b/src/resource-manager/resource-manager.c @@ -1302,6 +1302,116 @@ set_resource_attr_value_data(struct syscommon_resman_resource *resource, return 0; } +static int +set_resource_attr_value_data_2_tuple(struct syscommon_resman_resource *resource, + u_int64_t attr_id, enum syscommon_resman_data_type type, + const void *data1, const void *data2, + int count1, int count2) +{ + const struct syscommon_resman_resource_attribute *attr = NULL; + int ret; + + if (!data1 || !data2) + return -EINVAL; + + if (!check_attr_validate(resource, attr_id, type)) + return -EINVAL; + + attr = get_resource_attr(resource, attr_id); + if (!attr) + return -EINVAL; + + if (!attr->ops.set_2_tuple) + return -ENOTSUP; + + ret = attr->ops.set_2_tuple(resource->id, attr, + data1, data2, count1, count2); + if (ret < 0) + return ret; + + /** + * FIXME: N-tuple data doesn't support the getter temporarily. + * So that don't store the passed data to attr_value. + * I will be implemented for getter on later. + */ + + return 0; +} + +static int +set_resource_attr_value_data_3_tuple(struct syscommon_resman_resource *resource, + u_int64_t attr_id, enum syscommon_resman_data_type type, + const void *data1, const void *data2, const void *data3, + int count1, int count2, int count3) +{ + const struct syscommon_resman_resource_attribute *attr = NULL; + int ret; + + if (!data1 || !data2 || !data3) + return -EINVAL; + + if (!check_attr_validate(resource, attr_id, type)) + return -EINVAL; + + attr = get_resource_attr(resource, attr_id); + if (!attr) + return -EINVAL; + + if (!attr->ops.set_3_tuple) + return -ENOTSUP; + + ret = attr->ops.set_3_tuple(resource->id, attr, + data1, data2, data3, + count1, count2, count3); + if (ret < 0) + return ret; + + /** + * FIXME: N-tuple data doesn't support the getter temporarily. + * So that don't store the passed data to attr_value. + * I will be implemented for getter on later. + */ + + return 0; +} + +static int +set_resource_attr_value_data_4_tuple(struct syscommon_resman_resource *resource, + u_int64_t attr_id, enum syscommon_resman_data_type type, + const void *data1, const void *data2, const void *data3, const void *data4, + int count1, int count2, int count3, int count4) +{ + const struct syscommon_resman_resource_attribute *attr = NULL; + int ret; + + if (!data1 || !data2 || !data3 || !data4) + return -EINVAL; + + if (!check_attr_validate(resource, attr_id, type)) + return -EINVAL; + + attr = get_resource_attr(resource, attr_id); + if (!attr) + return -EINVAL; + + if (!attr->ops.set_4_tuple) + return -ENOTSUP; + + ret = attr->ops.set_4_tuple(resource->id, attr, + data1, data2, data3, data4, + count1, count2, count3, count4); + if (ret < 0) + return ret; + + /** + * FIXME: N-tuple data doesn't support the getter temporarily. + * So that don't store the passed data to attr_value. + * I will be implemented for getter on later. + */ + + return 0; +} + int syscommon_resman_set_resource_attr_int(int resource_id, u_int64_t attr_id, int32_t data) { @@ -1390,6 +1500,48 @@ syscommon_resman_set_resource_attr_ptr(int resource_id, u_int64_t attr_id, void return set_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_PTR, &data, 1); } +int +syscommon_resman_set_resource_attr_uint64_2(int resource_id, u_int64_t attr_id, + u_int64_t data1, u_int64_t data2) +{ + 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_2_tuple(resource, attr_id, + SYSCOMMON_RESMAN_DATA_TYPE_UINT64_UINT64, + &data1, &data2, 1, 1); +} + +int +syscommon_resman_set_resource_attr_uint64_3(int resource_id, u_int64_t attr_id, + u_int64_t data1, u_int64_t data2, u_int64_t data3) +{ + 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_3_tuple(resource, attr_id, + SYSCOMMON_RESMAN_DATA_TYPE_UINT64_UINT64_UINT64, + &data1, &data2, &data3, 1, 1, 1); +} + +int +syscommon_resman_set_resource_attr_uint64_4(int resource_id, u_int64_t attr_id, + u_int64_t data1, u_int64_t data2, u_int64_t data3, u_int64_t data4) +{ + 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_4_tuple(resource, attr_id, + SYSCOMMON_RESMAN_DATA_TYPE_UINT64_UINT64_UINT64_UINT64, + &data1, &data2, &data3, &data4, 1, 1, 1, 1); +} + static inline bool is_resource_attr_visible(struct syscommon_resman_resource *resource, const struct syscommon_resman_resource_attribute *attr) @@ -1412,6 +1564,7 @@ set_resource_attr_interest(struct syscommon_resman_resource *resource, u_int64_t struct syscommon_resman_resource_attribute_value *attr_value; int i, ret; bool supported; + bool setter_only = false; if (!resource) return -EINVAL; @@ -1474,12 +1627,23 @@ set_resource_attr_interest(struct syscommon_resman_resource *resource, u_int64_t case SYSCOMMON_RESMAN_DATA_TYPE_ARRAY: attr_value->data = calloc(1, sizeof(struct syscommon_resman_array_value)); break; + case SYSCOMMON_RESMAN_DATA_TYPE_UINT64_UINT64: + case SYSCOMMON_RESMAN_DATA_TYPE_UINT64_UINT64_UINT64: + case SYSCOMMON_RESMAN_DATA_TYPE_UINT64_UINT64_UINT64_UINT64: + /** + * FIXME: N-tuple data doesn't support the getter temporarily. + * Don't store the passed data to attr_value. + * So that don't allocate the memory for attr_value->data. + * I will be implemented on later. + */ + setter_only = true; + break; default: ret = -EINVAL; goto err; } - if (!attr_value->data) { + if (!setter_only && !attr_value->data) { ret = -ENOMEM; goto err; }