Commit 3d64addd authored by Matan Barak's avatar Matan Barak Committed by Jason Gunthorpe

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: default avatarMatan Barak <matanb@mellanox.com>
Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 41b2a71f
...@@ -56,4 +56,35 @@ ...@@ -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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment