int (*get)(int resource_id,
const struct syscommon_resman_resource_attribute *attr,
void *data);
+ int (*get_with_1_user_data)(int resource_id,
+ const struct syscommon_resman_resource_attribute *attr,
+ void *user_data1, int user_count1, void *data);
+ int (*get_with_2_user_data)(int resource_id,
+ const struct syscommon_resman_resource_attribute *attr,
+ void *user_data1, void *user_data2,
+ int user_count1, int user_count2, void *data);
/*
* If .is_supported ops is not implemented, use .get ops in order to
* check whether the resource attribute is supported or not.
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_uint64_with_1_user_data(int resource_id, u_int64_t attr_id,
+ u_int64_t *user_data1, u_int64_t *data);
+int syscommon_resman_get_resource_attr_uint64_with_2_user_data(int resource_id, u_int64_t attr_id,
+ u_int64_t *user_data1, u_int64_t *user_data2, 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);
return 0;
}
+static int
+update_resource_attr_with_1_user_data(struct syscommon_resman_resource *resource, u_int64_t attr_id,
+ u_int64_t *user_data1, int user_count1)
+{
+ int attr_index;
+ const struct syscommon_resman_resource_attribute *attr = NULL;
+ struct syscommon_resman_resource_attribute_value *attr_value = NULL;
+ int ret;
+
+ if (!resource || attr_id == 0)
+ return -EINVAL;
+
+ attr_index = RESOURCE_ATTR_INDEX(attr_id);
+ if (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_with_1_user_data(resource->id, attr,
+ user_data1, user_count1, attr_value->data);
+ if (ret < 0)
+ return ret;
+
+ return 0;
+}
+
+static int
+update_resource_attr_with_2_user_data(struct syscommon_resman_resource *resource, u_int64_t attr_id,
+ u_int64_t *user_data1, u_int64_t *user_data2,
+ int user_count1, int user_count2)
+{
+ int attr_index;
+ const struct syscommon_resman_resource_attribute *attr = NULL;
+ struct syscommon_resman_resource_attribute_value *attr_value = NULL;
+ int ret;
+
+ if (!resource || attr_id == 0)
+ return -EINVAL;
+
+ attr_index = RESOURCE_ATTR_INDEX(attr_id);
+ if (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_with_2_user_data(resource->id, attr,
+ user_data1, user_data2,
+ user_count1, user_count2, 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)
{
*(u_int32_t *) data = *((u_int32_t *)attr_value->data);
break;
case SYSCOMMON_RESMAN_DATA_TYPE_UINT64:
+ case SYSCOMMON_RESMAN_DATA_TYPE_UINT64_WITH_1_USER_DATA:
+ case SYSCOMMON_RESMAN_DATA_TYPE_UINT64_WITH_2_USER_DATA:
*(u_int64_t *) data = *((u_int64_t *)attr_value->data);
break;
case SYSCOMMON_RESMAN_DATA_TYPE_DOUBLE:
return get_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_UINT64, data);
}
+int
+syscommon_resman_get_resource_attr_uint64_with_1_user_data(int resource_id, u_int64_t attr_id, u_int64_t *user_data1, 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_with_1_user_data(resource, attr_id, user_data1, 1);
+ if (ret < 0)
+ return ret;
+
+ return get_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_UINT64_WITH_1_USER_DATA, data);
+}
+
+int
+syscommon_resman_get_resource_attr_uint64_with_2_user_data(int resource_id, u_int64_t attr_id, u_int64_t *user_data1, u_int64_t *user_data2, 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_with_2_user_data(resource, attr_id, user_data1, user_data2, 1, 1);
+ if (ret < 0)
+ return ret;
+
+ return get_resource_attr_value_data(resource, attr_id, SYSCOMMON_RESMAN_DATA_TYPE_UINT64_WITH_2_USER_DATA, data);
+}
+
int
syscommon_resman_get_resource_attr_double(int resource_id, u_int64_t attr_id, double *data)
{
attr_value->data = calloc(1, sizeof(u_int32_t));
break;
case SYSCOMMON_RESMAN_DATA_TYPE_UINT64:
+ case SYSCOMMON_RESMAN_DATA_TYPE_UINT64_WITH_1_USER_DATA:
+ case SYSCOMMON_RESMAN_DATA_TYPE_UINT64_WITH_2_USER_DATA:
attr_value->data = calloc(1, sizeof(u_int64_t));
break;
case SYSCOMMON_RESMAN_DATA_TYPE_DOUBLE: