From 09ca6dace9f2902ba79648fe6cc1bf25b29bc701 Mon Sep 17 00:00:00 2001 From: Rafal Kupiec Date: Mon, 1 Jan 2024 19:27:51 +0100 Subject: [PATCH] Implement BlRegisterProtocol() routine --- sdk/xtdk/bltypes.h | 2 ++ xtldr2/includes/bootman.h | 5 +++++ xtldr2/modules/dummy/dummy.c | 4 +--- xtldr2/protocol.c | 25 +++++++++++++++++++++++++ 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/sdk/xtdk/bltypes.h b/sdk/xtdk/bltypes.h index ceba425..e910672 100644 --- a/sdk/xtdk/bltypes.h +++ b/sdk/xtdk/bltypes.h @@ -74,6 +74,7 @@ typedef EFI_STATUS (*PBL_OPEN_VOLUME)(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath, O typedef EFI_STATUS (*PBL_OPEN_XT_PROTOCOL)(OUT PVOID *ProtocolHandler, IN PEFI_GUID ProtocolGuid); typedef EFI_STATUS (*PBL_READ_FILE)(IN PEFI_FILE_HANDLE DirHandle, IN CONST PWCHAR FileName, OUT PVOID *FileData, OUT PSIZE_T FileSize); typedef EFI_STATUS (*PBL_REGISTER_BOOT_PROTOCOL)(IN PWCHAR SystemType, IN PEFI_GUID BootProtocolGuid); +typedef EFI_STATUS (*PBL_REGISTER_XT_PROTOCOL)(IN PEFI_GUID Guid, IN PVOID Interface); typedef VOID (*PBL_REGISTER_XT_BOOT_MENU)(PVOID BootMenuRoutine); typedef VOID (*PBL_SLEEP_EXECUTION)(IN ULONG_PTR Milliseconds); typedef VOID (*PBL_TUI_DISPLAY_ERROR_DIALOG)(IN PWCHAR Caption, IN PWCHAR Message); @@ -206,6 +207,7 @@ typedef struct _XTBL_LOADER_PROTOCOL struct { PBL_OPEN_XT_PROTOCOL Open; + PBL_REGISTER_XT_PROTOCOL Register; } Protocol; struct { diff --git a/xtldr2/includes/bootman.h b/xtldr2/includes/bootman.h index 59a34c2..3d19134 100644 --- a/xtldr2/includes/bootman.h +++ b/xtldr2/includes/bootman.h @@ -181,6 +181,11 @@ EFI_STATUS BlRegisterBootProtocol(IN PWCHAR SystemType, IN PEFI_GUID BootProtocolGuid); +XTCDECL +EFI_STATUS +BlRegisterProtocol(IN PEFI_GUID Guid, + IN PVOID Interface); + XTCDECL VOID BlResetConsoleInputBuffer(); diff --git a/xtldr2/modules/dummy/dummy.c b/xtldr2/modules/dummy/dummy.c index 26e90b6..4aa9d65 100644 --- a/xtldr2/modules/dummy/dummy.c +++ b/xtldr2/modules/dummy/dummy.c @@ -45,7 +45,6 @@ XtLdrModuleMain(IN EFI_HANDLE ImageHandle, IN PEFI_SYSTEM_TABLE SystemTable) { EFI_GUID DummyGuid = XT_XTOS_BOOT_PROTOCOL_GUID; - EFI_HANDLE Handle = NULL; EFI_STATUS Status; /* Open the XTLDR protocol */ @@ -63,6 +62,5 @@ XtLdrModuleMain(IN EFI_HANDLE ImageHandle, XtLdrProto->Boot.RegisterProtocol(L"XTOS", &DummyGuid); /* Register DUMMY protocol as XTOS boot protocol */ - return SystemTable->BootServices->InstallProtocolInterface(&Handle, &DummyGuid, EFI_NATIVE_INTERFACE, - &DummyProtocol); + return XtLdrProto->Protocol.Register(&DummyGuid, &DummyProtocol); } diff --git a/xtldr2/protocol.c b/xtldr2/protocol.c index bf10273..f004310 100644 --- a/xtldr2/protocol.c +++ b/xtldr2/protocol.c @@ -530,6 +530,30 @@ BlRegisterBootProtocol(IN PWCHAR SystemType, return STATUS_EFI_SUCCESS; } +/** + * Installs XTLDR protocol interface. + * + * @param Guid + * Specifies a unique protocol GUID. + * + * @param Interface + * Supplies a pointer to the protocol interface, or NULL if there is no structure associated. + * + * @return This routine returns a status code. + * + * @since XT 1.0 + */ +XTCDECL +EFI_STATUS +BlRegisterProtocol(IN PEFI_GUID Guid, + IN PVOID Interface) +{ + EFI_HANDLE Handle = NULL; + + /* Install protocol interface */ + return EfiSystemTable->BootServices->InstallProtocolInterface(&Handle, Guid, EFI_NATIVE_INTERFACE, Interface); +} + /** * This routine registers XTLDR protocol for further usage by modules. * @@ -570,6 +594,7 @@ BlpRegisterXtLoaderProtocol() BlpLdrProtocol.Memory.FreePages = BlMemoryFreePages; BlpLdrProtocol.Memory.FreePool = BlMemoryFreePool; BlpLdrProtocol.Protocol.Open = BlOpenProtocol; + BlpLdrProtocol.Protocol.Register = BlRegisterProtocol; BlpLdrProtocol.Tui.DisplayErrorDialog = BlDisplayErrorDialog; BlpLdrProtocol.Tui.DisplayInfoDialog = BlDisplayInfoDialog; BlpLdrProtocol.Tui.DisplayProgressDialog = BlDisplayProgressDialog;