FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+#include <ipxe/interface.h>
#include <ipxe/efi/efi.h>
#include <ipxe/efi/Protocol/DevicePath.h>
efi_path_end ( EFI_DEVICE_PATH_PROTOCOL *path );
extern size_t efi_path_len ( EFI_DEVICE_PATH_PROTOCOL *path );
+extern EFI_DEVICE_PATH_PROTOCOL * efi_describe ( struct interface *interface );
+#define efi_describe_TYPE( object_type ) \
+ typeof ( EFI_DEVICE_PATH_PROTOCOL * ( object_type ) )
+
#endif /* _IPXE_EFI_PATH_H */
return ( ( ( void * ) end ) - ( ( void * ) path ) );
}
+
+/**
+ * Describe object as an EFI device path
+ *
+ * @v intf Interface
+ * @ret path EFI device path, or NULL
+ *
+ * The caller is responsible for eventually calling free() on the
+ * allocated device path.
+ */
+EFI_DEVICE_PATH_PROTOCOL * efi_describe ( struct interface *intf ) {
+ struct interface *dest;
+ efi_describe_TYPE ( void * ) *op =
+ intf_get_dest_op ( intf, efi_describe, &dest );
+ void *object = intf_object ( dest );
+ EFI_DEVICE_PATH_PROTOCOL *path;
+
+ if ( op ) {
+ path = op ( object );
+ } else {
+ path = NULL;
+ }
+
+ intf_put ( dest );
+ return path;
+}