@@ -26,6 +26,7 @@ struct devlink {
26
26
struct list_head port_list ;
27
27
struct list_head sb_list ;
28
28
struct list_head dpipe_table_list ;
29
+ struct list_head resource_list ;
29
30
struct devlink_dpipe_headers * dpipe_headers ;
30
31
const struct devlink_ops * ops ;
31
32
struct device * dev ;
@@ -224,6 +225,61 @@ struct devlink_dpipe_headers {
224
225
unsigned int headers_count ;
225
226
};
226
227
228
+ /**
229
+ * struct devlink_resource_ops - resource ops
230
+ * @occ_get: get the occupied size
231
+ * @size_validate: validate the size of the resource before update, reload
232
+ * is needed for changes to take place
233
+ */
234
+ struct devlink_resource_ops {
235
+ u64 (* occ_get )(struct devlink * devlink );
236
+ int (* size_validate )(struct devlink * devlink , u64 size ,
237
+ struct netlink_ext_ack * extack );
238
+ };
239
+
240
+ /**
241
+ * struct devlink_resource_size_params - resource's size parameters
242
+ * @size_min: minimum size which can be set
243
+ * @size_max: maximum size which can be set
244
+ * @size_granularity: size granularity
245
+ * @size_unit: resource's basic unit
246
+ */
247
+ struct devlink_resource_size_params {
248
+ u64 size_min ;
249
+ u64 size_max ;
250
+ u64 size_granularity ;
251
+ enum devlink_resource_unit unit ;
252
+ };
253
+
254
+ /**
255
+ * struct devlink_resource - devlink resource
256
+ * @name: name of the resource
257
+ * @id: id, per devlink instance
258
+ * @size: size of the resource
259
+ * @size_new: updated size of the resource, reload is needed
260
+ * @size_valid: valid in case the total size of the resource is valid
261
+ * including its children
262
+ * @parent: parent resource
263
+ * @size_params: size parameters
264
+ * @list: parent list
265
+ * @resource_list: list of child resources
266
+ * @resource_ops: resource ops
267
+ */
268
+ struct devlink_resource {
269
+ const char * name ;
270
+ u64 id ;
271
+ u64 size ;
272
+ u64 size_new ;
273
+ bool size_valid ;
274
+ struct devlink_resource * parent ;
275
+ struct devlink_resource_size_params * size_params ;
276
+ struct list_head list ;
277
+ struct list_head resource_list ;
278
+ const struct devlink_resource_ops * resource_ops ;
279
+ };
280
+
281
+ #define DEVLINK_RESOURCE_ID_PARENT_TOP 0
282
+
227
283
struct devlink_ops {
228
284
int (* port_type_set )(struct devlink_port * devlink_port ,
229
285
enum devlink_port_type port_type );
@@ -333,6 +389,20 @@ extern struct devlink_dpipe_header devlink_dpipe_header_ethernet;
333
389
extern struct devlink_dpipe_header devlink_dpipe_header_ipv4 ;
334
390
extern struct devlink_dpipe_header devlink_dpipe_header_ipv6 ;
335
391
392
+ int devlink_resource_register (struct devlink * devlink ,
393
+ const char * resource_name ,
394
+ bool top_hierarchy ,
395
+ u64 resource_size ,
396
+ u64 resource_id ,
397
+ u64 parent_resource_id ,
398
+ struct devlink_resource_size_params * size_params ,
399
+ const struct devlink_resource_ops * resource_ops );
400
+ void devlink_resources_unregister (struct devlink * devlink ,
401
+ struct devlink_resource * resource );
402
+ int devlink_resource_size_get (struct devlink * devlink ,
403
+ u64 resource_id ,
404
+ u64 * p_resource_size );
405
+
336
406
#else
337
407
338
408
static inline struct devlink * devlink_alloc (const struct devlink_ops * ops ,
@@ -469,6 +539,32 @@ devlink_dpipe_match_put(struct sk_buff *skb,
469
539
return 0 ;
470
540
}
471
541
542
+ static inline int
543
+ devlink_resource_register (struct devlink * devlink ,
544
+ const char * resource_name ,
545
+ bool top_hierarchy ,
546
+ u64 resource_size ,
547
+ u64 resource_id ,
548
+ u64 parent_resource_id ,
549
+ struct devlink_resource_size_params * size_params ,
550
+ const struct devlink_resource_ops * resource_ops )
551
+ {
552
+ return 0 ;
553
+ }
554
+
555
+ static inline void
556
+ devlink_resources_unregister (struct devlink * devlink ,
557
+ struct devlink_resource * resource )
558
+ {
559
+ }
560
+
561
+ static inline int
562
+ devlink_resource_size_get (struct devlink * devlink , u64 resource_id ,
563
+ u64 * p_resource_size )
564
+ {
565
+ return - EOPNOTSUPP ;
566
+ }
567
+
472
568
#endif
473
569
474
570
#endif /* _NET_DEVLINK_H_ */
0 commit comments