IB/uverbs: Add macros to simplify adding driver specific attributes
Previously, adding driver specific attributes required drivers to declare all the hierarchy - object tree, object, methods and the attributes themselves. A common use case is adding a few attributes to an existing common method. In order to simplify the driver's code, we add some macros to do all these declarations automatically. Signed-off-by: Matan Barak <matanb@mellanox.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
41b2a71fc8
commit
3d64addd43
1 changed files with 31 additions and 0 deletions
|
@ -56,4 +56,35 @@
|
||||||
#define DECLARE_UVERBS_NAMED_OBJECT(id, ...) \
|
#define DECLARE_UVERBS_NAMED_OBJECT(id, ...) \
|
||||||
DECLARE_UVERBS_OBJECT(UVERBS_OBJECT(id), id, ##__VA_ARGS__)
|
DECLARE_UVERBS_OBJECT(UVERBS_OBJECT(id), id, ##__VA_ARGS__)
|
||||||
|
|
||||||
|
#define _UVERBS_COMP_NAME(x, y, z) _UVERBS_NAME(_UVERBS_NAME(x, y), z)
|
||||||
|
|
||||||
|
#define UVERBS_NO_OVERRIDE NULL
|
||||||
|
|
||||||
|
/* This declares a parsing tree with one object and one method. This is usually
|
||||||
|
* used for merging driver attributes to the common attributes. The driver has
|
||||||
|
* a chance to override the handler and type attrs of the original object.
|
||||||
|
* The __VA_ARGS__ just contains a list of attributes.
|
||||||
|
*/
|
||||||
|
#define ADD_UVERBS_ATTRIBUTES(_name, _object, _method, _type_attrs, _handler, ...) \
|
||||||
|
static DECLARE_UVERBS_METHOD(_UVERBS_COMP_NAME(UVERBS_MODULE_NAME, \
|
||||||
|
_method_, _name), \
|
||||||
|
_method, _handler, ##__VA_ARGS__); \
|
||||||
|
\
|
||||||
|
static DECLARE_UVERBS_OBJECT(_UVERBS_COMP_NAME(UVERBS_MODULE_NAME, \
|
||||||
|
_object_, _name), \
|
||||||
|
_object, _type_attrs, \
|
||||||
|
&_UVERBS_COMP_NAME(UVERBS_MODULE_NAME, \
|
||||||
|
_method_, _name)); \
|
||||||
|
\
|
||||||
|
static DECLARE_UVERBS_OBJECT_TREE(_name, \
|
||||||
|
&_UVERBS_COMP_NAME(UVERBS_MODULE_NAME, \
|
||||||
|
_object_, _name))
|
||||||
|
|
||||||
|
/* A very common use case is that the driver doesn't override the handler and
|
||||||
|
* type_attrs. Therefore, we provide a simplified macro for this common case.
|
||||||
|
*/
|
||||||
|
#define ADD_UVERBS_ATTRIBUTES_SIMPLE(_name, _object, _method, ...) \
|
||||||
|
ADD_UVERBS_ATTRIBUTES(_name, _object, _method, UVERBS_NO_OVERRIDE, \
|
||||||
|
UVERBS_NO_OVERRIDE, ##__VA_ARGS__)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue