Implement BlRegisterProtocol() routine
All checks were successful
Builds / ExectOS (amd64) (push) Successful in 27s
Builds / ExectOS (i686) (push) Successful in 27s

This commit is contained in:
Rafal Kupiec 2024-01-01 19:27:51 +01:00
parent 35f36adfa6
commit 09ca6dace9
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
4 changed files with 33 additions and 3 deletions

View File

@ -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_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_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_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_REGISTER_XT_BOOT_MENU)(PVOID BootMenuRoutine);
typedef VOID (*PBL_SLEEP_EXECUTION)(IN ULONG_PTR Milliseconds); typedef VOID (*PBL_SLEEP_EXECUTION)(IN ULONG_PTR Milliseconds);
typedef VOID (*PBL_TUI_DISPLAY_ERROR_DIALOG)(IN PWCHAR Caption, IN PWCHAR Message); typedef VOID (*PBL_TUI_DISPLAY_ERROR_DIALOG)(IN PWCHAR Caption, IN PWCHAR Message);
@ -206,6 +207,7 @@ typedef struct _XTBL_LOADER_PROTOCOL
struct struct
{ {
PBL_OPEN_XT_PROTOCOL Open; PBL_OPEN_XT_PROTOCOL Open;
PBL_REGISTER_XT_PROTOCOL Register;
} Protocol; } Protocol;
struct struct
{ {

View File

@ -181,6 +181,11 @@ EFI_STATUS
BlRegisterBootProtocol(IN PWCHAR SystemType, BlRegisterBootProtocol(IN PWCHAR SystemType,
IN PEFI_GUID BootProtocolGuid); IN PEFI_GUID BootProtocolGuid);
XTCDECL
EFI_STATUS
BlRegisterProtocol(IN PEFI_GUID Guid,
IN PVOID Interface);
XTCDECL XTCDECL
VOID VOID
BlResetConsoleInputBuffer(); BlResetConsoleInputBuffer();

View File

@ -45,7 +45,6 @@ XtLdrModuleMain(IN EFI_HANDLE ImageHandle,
IN PEFI_SYSTEM_TABLE SystemTable) IN PEFI_SYSTEM_TABLE SystemTable)
{ {
EFI_GUID DummyGuid = XT_XTOS_BOOT_PROTOCOL_GUID; EFI_GUID DummyGuid = XT_XTOS_BOOT_PROTOCOL_GUID;
EFI_HANDLE Handle = NULL;
EFI_STATUS Status; EFI_STATUS Status;
/* Open the XTLDR protocol */ /* Open the XTLDR protocol */
@ -63,6 +62,5 @@ XtLdrModuleMain(IN EFI_HANDLE ImageHandle,
XtLdrProto->Boot.RegisterProtocol(L"XTOS", &DummyGuid); XtLdrProto->Boot.RegisterProtocol(L"XTOS", &DummyGuid);
/* Register DUMMY protocol as XTOS boot protocol */ /* Register DUMMY protocol as XTOS boot protocol */
return SystemTable->BootServices->InstallProtocolInterface(&Handle, &DummyGuid, EFI_NATIVE_INTERFACE, return XtLdrProto->Protocol.Register(&DummyGuid, &DummyProtocol);
&DummyProtocol);
} }

View File

@ -530,6 +530,30 @@ BlRegisterBootProtocol(IN PWCHAR SystemType,
return STATUS_EFI_SUCCESS; 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. * This routine registers XTLDR protocol for further usage by modules.
* *
@ -570,6 +594,7 @@ BlpRegisterXtLoaderProtocol()
BlpLdrProtocol.Memory.FreePages = BlMemoryFreePages; BlpLdrProtocol.Memory.FreePages = BlMemoryFreePages;
BlpLdrProtocol.Memory.FreePool = BlMemoryFreePool; BlpLdrProtocol.Memory.FreePool = BlMemoryFreePool;
BlpLdrProtocol.Protocol.Open = BlOpenProtocol; BlpLdrProtocol.Protocol.Open = BlOpenProtocol;
BlpLdrProtocol.Protocol.Register = BlRegisterProtocol;
BlpLdrProtocol.Tui.DisplayErrorDialog = BlDisplayErrorDialog; BlpLdrProtocol.Tui.DisplayErrorDialog = BlDisplayErrorDialog;
BlpLdrProtocol.Tui.DisplayInfoDialog = BlDisplayInfoDialog; BlpLdrProtocol.Tui.DisplayInfoDialog = BlDisplayInfoDialog;
BlpLdrProtocol.Tui.DisplayProgressDialog = BlDisplayProgressDialog; BlpLdrProtocol.Tui.DisplayProgressDialog = BlDisplayProgressDialog;