Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
@@ -56,4 +56,35 @@
#define DECLARE_UVERBS_NAMED_OBJECT(id, ...)	\
	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