3 * Copyright (c) 2023 Samsung Electronics Co., Ltd.
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
6 * of this software and associated documentation files (the "Software"), to deal
7 * in the Software without restriction, including without limitation the rights
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 * copies of the Software, and to permit persons to whom the Software is furnished
10 * to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice shall be included in all
13 * copies or substantial portions of the Software.
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 #ifndef __RESOURCE_MANAGER_H__
24 #define __RESOURCE_MANAGER_H__
33 #define SYSCOMMON_RESMAN_BUFF_MAX 255
35 enum syscommon_resman_listener_type;
37 struct syscommon_resman_resource_attribute;
38 struct syscommon_resman_resource_control;
40 struct syscommon_resman_array_value {
46 struct syscommon_resman_resource_attribute_value {
51 struct syscommon_resman_resource_attribute_ops {
52 int (*set)(int resource_id,
53 const struct syscommon_resman_resource_attribute *attr,
54 const void *data, int count);
55 int (*set_2_tuple)(int resource_id,
56 const struct syscommon_resman_resource_attribute *attr,
57 const void *data1, const void *data2,
58 int count1, int count2);
59 int (*set_3_tuple)(int resource_id,
60 const struct syscommon_resman_resource_attribute *attr,
61 const void *data1, const void *data2, const void *data3,
62 int count1, int count2, int count3);
63 int (*set_4_tuple)(int resource_id,
64 const struct syscommon_resman_resource_attribute *attr,
65 const void *data1, const void *data2, const void *data3, const void *data4,
66 int count1, int count2, int count3, int count4);
67 int (*get)(int resource_id,
68 const struct syscommon_resman_resource_attribute *attr,
70 int (*get_with_1_user_data)(int resource_id,
71 const struct syscommon_resman_resource_attribute *attr,
72 void *user_data1, int user_count1, void *data);
73 int (*get_with_2_user_data)(int resource_id,
74 const struct syscommon_resman_resource_attribute *attr,
75 void *user_data1, void *user_data2,
76 int user_count1, int user_count2, void *data);
78 * If .is_supported ops is not implemented, use .get ops in order to
79 * check whether the resource attribute is supported or not.
81 bool (*is_supported)(int resource_id,
82 const struct syscommon_resman_resource_attribute *attr);
85 struct syscommon_resman_resource_attribute_monitor_ops {
86 int (*get)(int resource_id,
87 const struct syscommon_resman_resource_attribute *attr,
90 * If .is_supported ops is not implemented, use .get ops in order to
91 * check whether the resource attribute is supported or not.
93 bool (*is_supported)(int resource_id,
94 const struct syscommon_resman_resource_attribute *attr);
97 struct syscommon_resman_resource_attribute_listener_ops {
98 int (*init)(int resource_id, const struct syscommon_resman_resource_attribute *attr);
99 void (*exit)(int resource_id, const struct syscommon_resman_resource_attribute *attr);
100 void (*action)(int resource_id, const struct syscommon_resman_resource_attribute *attr,
101 void *param, enum syscommon_resman_listener_type listener_type);
104 struct syscommon_resman_resource_attribute {
105 const char name[SYSCOMMON_RESMAN_BUFF_MAX];
108 const u_int64_t flag;
109 const struct syscommon_resman_resource_attribute_ops ops;
110 const struct syscommon_resman_resource_attribute_monitor_ops monitor_ops;
111 const struct syscommon_resman_resource_attribute_listener_ops listener_ops;
114 struct syscommon_resman_resource_control_ops {
115 const int (*set)(int resource_id,
116 const struct syscommon_resman_resource_control *ctrl,
118 const int (*get)(int resource_id,
119 const struct syscommon_resman_resource_control *ctrl,
123 struct syscommon_resman_resource_control {
124 const char name[SYSCOMMON_RESMAN_BUFF_MAX];
126 const struct syscommon_resman_resource_control_ops ops;
129 struct syscommon_resman_resource_driver_ops {
132 int (*create)(int resource_id);
133 void (*delete)(int resource_id);
135 * If prepare_update is specified, it will be called
136 * at every update_resource_attrs().
138 int (*prepare_update)(int resource_id);
141 struct syscommon_resman_resource_driver {
144 const u_int64_t flag;
146 const struct syscommon_resman_resource_attribute *attrs;
148 const struct syscommon_resman_resource_control *ctrls;
149 const struct syscommon_resman_resource_driver_ops ops;
152 #define SYSCOMMON_RESMAN_RESOURCE_DRIVER_REGISTER(resource_driver) \
153 static void __attribute__((constructor)) __syscommon_resman_module_init(void) \
155 syscommon_resman_add_resource_driver(resource_driver); \
157 static void __attribute__((destructor)) __syscommon_resman_module_exit(void) \
159 syscommon_resman_remove_resource_driver(resource_driver); \
162 /* Add/remove resource driver and device */
163 const struct syscommon_resman_resource_driver *
164 syscommon_resman_find_resource_driver(int resource_type);
165 void syscommon_resman_add_resource_driver(const struct syscommon_resman_resource_driver *resource_driver);
166 void syscommon_resman_remove_resource_driver(const struct syscommon_resman_resource_driver *resource_driver);
168 /* Create/delete resource instance */
169 int syscommon_resman_create_resource(int *resource_id, int resource_type);
170 int syscommon_resman_monitor_create_resource(int *resource_id, int resource_type);
171 void syscommon_resman_delete_resource(int resource_id);
173 /* Set flag of the resource to given flag mask */
174 int syscommon_resman_set_resource_flag(int resource_id, u_int64_t flag_mask);
176 /* Handle resource control */
177 int syscommon_resman_set_resource_control(int resource_id, u_int64_t ctrl_id, const void *data);
178 const char *syscommon_resman_get_resource_control_name(int resource_id, u_int64_t ctrl_id);
180 /* Handle resource attribute */
181 int syscommon_resman_monitor_update_resource_attrs(int resource_id);
182 const struct syscommon_resman_resource_attribute *
183 syscommon_resman_get_resource_attr(int resource_id, u_int64_t attr_id);
184 struct syscommon_resman_resource_attribute_value *
185 syscommon_resman_get_resource_attr_value(int resource_id, u_int64_t attr_id);
186 int syscommon_resman_is_resource_attr_supported(int resource_id, u_int64_t attr_id, bool *supported);
187 int syscommon_resman_monitor_is_resource_attr_supported(int resource_id, u_int64_t attr_id, bool *supported);
190 syscommon_resman_resource_attr_supported_always(int resource_id,
191 const struct syscommon_resman_resource_attribute *attr)
196 int syscommon_resman_monitor_get_resource_attrs_json(int resource_id, char **json_string);
197 int syscommon_resman_monitor_get_resource_attr_json(int resource_id, u_int64_t attr_id, char **json_string);
198 int syscommon_resman_get_resource_list_json(char **json_string);
199 int syscommon_resman_get_number_of_resource_instance(int resource_type, int *n_instance);
200 int syscommon_resman_get_resource_id(int resource_type, int *resource_id);
201 #define SYSCOMMON_RESOURCE_ID(resource_type) ({ \
204 if (syscommon_resman_get_resource_id(resource_type, &_id) >= 0) \
211 int syscommon_resman_get_resource_attr_int(int resource_id, u_int64_t attr_id, int32_t *data);
212 int syscommon_resman_get_resource_attr_int64(int resource_id, u_int64_t attr_id, int64_t *data);
213 int syscommon_resman_get_resource_attr_uint(int resource_id, u_int64_t attr_id, u_int32_t *data);
214 int syscommon_resman_get_resource_attr_uint64(int resource_id, u_int64_t attr_id, u_int64_t *data);
215 int syscommon_resman_get_resource_attr_uint64_with_1_user_data(int resource_id, u_int64_t attr_id,
216 u_int64_t *user_data1, u_int64_t *data);
217 int syscommon_resman_get_resource_attr_uint64_with_2_user_data(int resource_id, u_int64_t attr_id,
218 u_int64_t *user_data1, u_int64_t *user_data2, u_int64_t *data);
219 int syscommon_resman_get_resource_attr_double(int resource_id, u_int64_t attr_id, double *data);
220 int syscommon_resman_get_resource_attr_string(int resource_id, u_int64_t attr_id, char *data);
221 int syscommon_resman_get_resource_attr_array(int resource_id, u_int64_t attr_id, struct syscommon_resman_array_value **data);
222 int syscommon_resman_get_resource_attr_ptr(int resource_id, u_int64_t attr_id, void **data);
224 int syscommon_resman_monitor_get_resource_attr_int(int resource_id, u_int64_t attr_id, int32_t *data);
225 int syscommon_resman_monitor_get_resource_attr_int64(int resource_id, u_int64_t attr_id, int64_t *data);
226 int syscommon_resman_monitor_get_resource_attr_uint(int resource_id, u_int64_t attr_id, u_int32_t *data);
227 int syscommon_resman_monitor_get_resource_attr_uint64(int resource_id, u_int64_t attr_id, u_int64_t *data);
228 int syscommon_resman_monitor_get_resource_attr_double(int resource_id, u_int64_t attr_id, double *data);
229 int syscommon_resman_monitor_get_resource_attr_string(int resource_id, u_int64_t attr_id, char *data);
230 int syscommon_resman_monitor_get_resource_attr_array(int resource_id, u_int64_t attr_id, struct syscommon_resman_array_value **data);
231 int syscommon_resman_monitor_get_resource_attr_ptr(int resource_id, u_int64_t attr_id, void **data);
233 int syscommon_resman_set_resource_attr_int(int resource_id, u_int64_t attr_id, int32_t data);
234 int syscommon_resman_set_resource_attr_int64(int resource_id, u_int64_t attr_id, int64_t data);
235 int syscommon_resman_set_resource_attr_uint(int resource_id, u_int64_t attr_id, u_int32_t data);
236 int syscommon_resman_set_resource_attr_uint64(int resource_id, u_int64_t attr_id, u_int64_t data);
237 int syscommon_resman_set_resource_attr_uint64_2(int resource_id, u_int64_t attr_id,
238 u_int64_t data1, u_int64_t data2);
239 int syscommon_resman_set_resource_attr_uint64_3(int resource_id, u_int64_t attr_id,
240 u_int64_t data1, u_int64_t data2, u_int64_t data3);
241 int syscommon_resman_set_resource_attr_uint64_4(int resource_id, u_int64_t attr_id,
242 u_int64_t data1, u_int64_t data2, u_int64_t data3, u_int64_t data4);
243 int syscommon_resman_set_resource_attr_double(int resource_id, u_int64_t attr_id, double data);
244 int syscommon_resman_set_resource_attr_string(int resource_id, u_int64_t attr_id, char data);
245 int syscommon_resman_set_resource_attr_array(int resource_id, u_int64_t attr_id, void *data, int count);
246 int syscommon_resman_set_resource_attr_ptr(int resource_id, u_int64_t attr_id, void *data);
248 int syscommon_resman_set_resource_attr_interest(int resource_id, u_int64_t interest_mask);
249 int syscommon_resman_unset_resource_attr_interest(int resource_id, u_int64_t interest_mask);
250 bool syscommon_resman_is_resource_attr_interested(int resource_id, u_int64_t interest_mask);
252 typedef void (*syscommon_resman_resource_event_cb) (int resource_type,
253 int resource_id, int attr_id, const void *data, void *user_data, int count);
255 int syscommon_resman_subscribe_resource_attribute_event(int resource_type,
256 u_int64_t attr_mask, syscommon_resman_resource_event_cb callback, void *user_data, int *id);
257 int syscommon_resman_subscribe_resource_event(int resource_type,
258 syscommon_resman_resource_event_cb callback, void *user_data, int *id);
259 int syscommon_resman_subscribe_event(syscommon_resman_resource_event_cb callback,
260 void *user_data, int *id);
261 void syscommon_resman_unsubscribe_event(int id);
263 const char *syscommon_resman_get_resource_attr_name(int resource_id, u_int64_t attr_id);
264 const char *syscommon_resman_get_resource_name(int resource_id);
265 void *syscommon_resman_get_resource_privdata(int resource_id);
266 int syscommon_resman_get_resource_type(int resource_id);
268 int syscommon_resman_set_resource_privdata(int resource_id, void *priv);
270 void syscommon_resman_init_resource_drivers(void);
271 void syscommon_resman_exit_resource_drivers(void);