|
@@ -45,14 +45,32 @@
|
|
|
#define UVERBS_HANDLER(id) _UVERBS_NAME(UVERBS_MODULE_NAME, _handler_##id)
|
|
|
#define UVERBS_OBJECT(id) _UVERBS_NAME(UVERBS_MOUDLE_NAME, _object_##id)
|
|
|
|
|
|
-#define DECLARE_UVERBS_NAMED_METHOD(id, ...) \
|
|
|
- DECLARE_UVERBS_METHOD(UVERBS_METHOD(id), id, UVERBS_HANDLER(id), ##__VA_ARGS__)
|
|
|
+#define UVERBS_METHOD_ATTRS(id) \
|
|
|
+ _UVERBS_NAME(UVERBS_MODULE_NAME, _method_attrs_##id)
|
|
|
|
|
|
-#define DECLARE_UVERBS_NAMED_METHOD_WITH_HANDLER(id, handler, ...) \
|
|
|
- DECLARE_UVERBS_METHOD(UVERBS_METHOD(id), id, handler, ##__VA_ARGS__)
|
|
|
+#define DECLARE_UVERBS_NAMED_METHOD(_method_id, ...) \
|
|
|
+ static const struct uverbs_attr_def *const UVERBS_METHOD_ATTRS( \
|
|
|
+ _method_id)[] = { __VA_ARGS__ }; \
|
|
|
+ static const struct uverbs_method_def UVERBS_METHOD(_method_id) = { \
|
|
|
+ .id = _method_id, \
|
|
|
+ .handler = UVERBS_HANDLER(_method_id), \
|
|
|
+ .num_attrs = ARRAY_SIZE(UVERBS_METHOD_ATTRS(_method_id)), \
|
|
|
+ .attrs = &UVERBS_METHOD_ATTRS(_method_id), \
|
|
|
+ }
|
|
|
|
|
|
-#define DECLARE_UVERBS_NAMED_METHOD_NO_OVERRIDE(id, handler, ...) \
|
|
|
- DECLARE_UVERBS_METHOD(UVERBS_METHOD(id), id, NULL, ##__VA_ARGS__)
|
|
|
+/* Create a standard destroy method using the default handler. The handle_attr
|
|
|
+ * argument must be the attribute specifying the handle to destroy, the
|
|
|
+ * default handler does not support any other attributes.
|
|
|
+ */
|
|
|
+#define DECLARE_UVERBS_NAMED_METHOD_DESTROY(_method_id, _handle_attr) \
|
|
|
+ static const struct uverbs_attr_def *const UVERBS_METHOD_ATTRS( \
|
|
|
+ _method_id)[] = { _handle_attr }; \
|
|
|
+ static const struct uverbs_method_def UVERBS_METHOD(_method_id) = { \
|
|
|
+ .id = _method_id, \
|
|
|
+ .handler = uverbs_destroy_def_handler, \
|
|
|
+ .num_attrs = ARRAY_SIZE(UVERBS_METHOD_ATTRS(_method_id)), \
|
|
|
+ .attrs = &UVERBS_METHOD_ATTRS(_method_id), \
|
|
|
+ }
|
|
|
|
|
|
#define DECLARE_UVERBS_NAMED_OBJECT(id, ...) \
|
|
|
DECLARE_UVERBS_OBJECT(UVERBS_OBJECT(id), id, ##__VA_ARGS__)
|
|
@@ -62,33 +80,22 @@
|
|
|
|
|
|
#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.
|
|
|
+/* Used by drivers to declare a complete parsing tree for a single method that
|
|
|
+ * differs only in having additional driver specific attributes.
|
|
|
*/
|
|
|
-#define ADD_UVERBS_ATTRIBUTES_SIMPLE(_name, _object, _method, ...) \
|
|
|
- ADD_UVERBS_ATTRIBUTES(_name, _object, _method, UVERBS_NO_OVERRIDE, \
|
|
|
- UVERBS_NO_OVERRIDE, ##__VA_ARGS__)
|
|
|
+#define ADD_UVERBS_ATTRIBUTES_SIMPLE(_name, _object_id, _method_id, ...) \
|
|
|
+ static const struct uverbs_attr_def *const UVERBS_METHOD_ATTRS( \
|
|
|
+ _method_id)[] = { __VA_ARGS__ }; \
|
|
|
+ static const struct uverbs_method_def UVERBS_METHOD(_method_id) = { \
|
|
|
+ .id = _method_id, \
|
|
|
+ .num_attrs = ARRAY_SIZE(UVERBS_METHOD_ATTRS(_method_id)), \
|
|
|
+ .attrs = &UVERBS_METHOD_ATTRS(_method_id), \
|
|
|
+ }; \
|
|
|
+ static DECLARE_UVERBS_OBJECT( \
|
|
|
+ _UVERBS_COMP_NAME(UVERBS_MODULE_NAME, _object_id, _name), \
|
|
|
+ _object_id, NULL, &UVERBS_METHOD(_method_id)); \
|
|
|
+ static DECLARE_UVERBS_OBJECT_TREE( \
|
|
|
+ _name, \
|
|
|
+ &_UVERBS_COMP_NAME(UVERBS_MODULE_NAME, _object_id, _name))
|
|
|
|
|
|
#endif
|