[U-Boot] [PATCH 1/2] efi_loader: add helper macro to construct protocol objects

Rob Clark
2017-07-24T14:39:00Z

There are a bunch of protocols which should be exposed by GUID but are
not. Add a helper macro to create an efi_object, to avoid much typing.

Note that using the pointer for efiobj->handle is semi-arbitrary. We
just need a unique value to match the efiobj supporting the protocol
with the handle that LocateHandle() returns..

See LibLocateProtocol() in gnu-efi. It does LocateHandle() to find all
the handles, and then loops over them calling HandleProtocol() with the
GUID of the protocol it is trying to find.

Signed-off-by: Rob Clark <robdclark@gmail.com>
---
include/efi_loader.h | 8 ++++++++
1 file changed, 8 insertions(+)

diff --git a/include/efi_loader.h b/include/efi_loader.h
index 27c741ba0c..51fbf23864 100644
--- a/include/efi_loader.h
+++ b/include/efi_loader.h
@@ -63,6 +63,14 @@ struct efi_object {
void *handle;
};

+#define EFI_PROTOCOL_OBJECT(_guid, _protocol) (struct efi_object){ \
+ .protocols = {{ \
+ .guid = &(_guid), \
+ .protocol_interface = (void *)(_protocol), \
+ }}, \
+ .handle = (void *)(_protocol), \
+}
+
/**
* struct efi_event
*
--
2.13.0