]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[interface] Allow for the definition of an unused interface operation
authorMichael Brown <mcb30@ipxe.org>
Fri, 16 Oct 2020 13:59:36 +0000 (14:59 +0100)
committerMichael Brown <mcb30@ipxe.org>
Fri, 16 Oct 2020 14:16:00 +0000 (15:16 +0100)
Allow an interface operation to be declared as unused.  This will
perform full type-checking and compilation of the implementing method,
without including any code in the resulting object (other than a NULL
entry in the interface operations table).

The intention is to provide a relatively clean way for interface
operation methods to be omitted in builds for which the operation is
not required (such as an operation to describe an object using an EFI
device path, which would not be required in a non-EFI build).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/include/ipxe/interface.h

index b65002c805f8ec5d107b7423d97af9e801978974..9281aeef502febb9528c9ff54cb03b91a26fdb4f 100644 (file)
@@ -36,6 +36,21 @@ struct interface_operation {
                          ? op_func : op_func ),                              \
        }
 
+/**
+ * Define an unused object interface operation
+ *
+ * @v op_type          Operation type
+ * @v object_type      Implementing method's expected object type
+ * @v op_func          Implementing method
+ * @ret op             Object interface operation
+ */
+#define UNUSED_INTF_OP( op_type, object_type, op_func ) {                    \
+               .type = NULL,                                                 \
+               .func = ( ( ( ( typeof ( op_func ) * ) NULL ) ==              \
+                           ( ( op_type ## _TYPE ( object_type ) * ) NULL ) ) \
+                         ? NULL : NULL ),                                    \
+       }
+
 /** An object interface descriptor */
 struct interface_descriptor {
        /** Offset of interface within containing object */