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);
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);
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)
{
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)
struct syscommon_resman_resource_attribute_value *attr_value;
int i, ret;
bool supported;
+ bool setter_only = false;
if (!resource)
return -EINVAL;
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;
}