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)
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);