Refactor code and fix loader protocol support
ci/woodpecker/push/build Pipeline failed Details

This commit is contained in:
Rafal Kupiec 2022-10-12 23:09:19 +02:00
parent 09e58d0b67
commit 3fa2ec90aa
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
4 changed files with 17 additions and 29 deletions

View File

@ -74,11 +74,6 @@ BlGetVolumeDevicePath(IN PUCHAR SystemPath,
OUT PEFI_DEVICE_PATH_PROTOCOL *DevicePath,
OUT PUCHAR *Path);
EFI_STATUS
BlGetXtLoaderProtocol(EFI_HANDLE ImageHandle,
PEFI_SYSTEM_TABLE SystemTable,
PXT_BOOT_LOADER_PROTOCOL *LoaderProtocol);
EFI_STATUS
BlLoadEfiModules();

View File

@ -7,28 +7,18 @@
*/
#include <xtbl.h>
#include <blmod.h>
/**
* This routine locates and opens the XT boot loader protocol.
*
* @param ImageHandle
* Firmware-allocated handle that identifies the image.
*
* @param SystemTable
* Provides the EFI system table.
*
* @param LoaderProtocol
* Supplies the address where a pointer to the bootloader protocol is returned.
*
* @return This routine returns status code.
*
* @since XT 1.0
*/
EFI_STATUS
BlGetXtLoaderProtocol(EFI_HANDLE ImageHandle,
PEFI_SYSTEM_TABLE SystemTable,
PXT_BOOT_LOADER_PROTOCOL *LoaderProtocol)
BlGetXtLoaderProtocol()
{
EFI_GUID Guid = XT_BOOT_LOADER_PROTOCOL_GUID;
PEFI_HANDLE Handles = NULL;
@ -37,7 +27,7 @@ BlGetXtLoaderProtocol(EFI_HANDLE ImageHandle,
UINT Index;
/* Try to locate the handles */
Status = SystemTable->BootServices->LocateHandleBuffer(ByProtocol, &Guid, NULL, &Count, &Handles);
Status = EfiSystemTable->BootServices->LocateHandleBuffer(ByProtocol, &Guid, NULL, &Count, &Handles);
if(Status != STATUS_EFI_SUCCESS)
{
/* Unable to get handles */
@ -51,23 +41,23 @@ BlGetXtLoaderProtocol(EFI_HANDLE ImageHandle,
for(Index = 0; Index < Count; Index++)
{
/* Try to open protocol */
Status = SystemTable->BootServices->OpenProtocol(Handles[Index], &Guid, (PVOID *)&LoaderProtocol,
ImageHandle, NULL, EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL);
Status = EfiSystemTable->BootServices->OpenProtocol(Handles[Index], &Guid, (PVOID*)&EfiXtLdrProtocol,
EfiImageHandle, NULL, EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL);
/* Check if successfully opened the loader protocol */
if(Status == STATUS_EFI_SUCCESS)
{
/* Protocol found */
/* Protocol found and successfully opened */
break;
}
}
}
/* Free handles */
SystemTable->BootServices->FreePool(Handles);
EfiSystemTable->BootServices->FreePool(Handles);
/* Make sure the loaded protocol has been found */
if(LoaderProtocol == NULL)
if(EfiXtLdrProtocol == NULL)
{
/* Protocol not found */
return STATUS_EFI_NOT_FOUND;

View File

@ -7,6 +7,7 @@
*/
#include <xtbl.h>
#include <blmod.h>
/* EFI Image Handle */
@ -40,7 +41,7 @@ BlXtLoaderModuleMain(EFI_HANDLE ImageHandle,
EfiSystemTable = SystemTable;
/* Open the XTLDR protocol */
BlGetXtLoaderProtocol(ImageHandle, SystemTable, &EfiXtLdrProtocol);
BlGetXtLoaderProtocol();
/* Print message and return success */
EfiXtLdrProtocol->EfiPrint(L"XTLDR dummy module initialized\n");

View File

@ -12,6 +12,9 @@
/* EFI Image Handle */
EFI_HANDLE EfiImageHandle;
/* XT Boot Loader protocol */
XT_BOOT_LOADER_PROTOCOL EfiLdrProtocol;
/* EFI System Table */
PEFI_SYSTEM_TABLE EfiSystemTable;
@ -254,16 +257,15 @@ EFI_STATUS
BlRegisterXtLoaderProtocol()
{
EFI_GUID Guid = XT_BOOT_LOADER_PROTOCOL_GUID;
XT_BOOT_LOADER_PROTOCOL LoaderProtocol;
EFI_HANDLE Handle;
EFI_HANDLE Handle = NULL;
/* Set all routines available via loader protocol */
LoaderProtocol.DbgPrint = BlDbgPrint;
LoaderProtocol.EfiPrint = BlEfiPrint;
EfiLdrProtocol.DbgPrint = BlDbgPrint;
EfiLdrProtocol.EfiPrint = BlEfiPrint;
/* Register loader protocol */
BlDbgPrint(L"Registering XT loader protocol\n");
return EfiSystemTable->BootServices->InstallProtocolInterface(&Handle, &Guid, EFI_NATIVE_INTERFACE, &LoaderProtocol);
return EfiSystemTable->BootServices->InstallProtocolInterface(&Handle, &Guid, EFI_NATIVE_INTERFACE, &EfiLdrProtocol);
}
/**