
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 *