Implement BlGetConfigurationTable() routine
All checks were successful
Builds / ExectOS (amd64) (push) Successful in 25s
Builds / ExectOS (i686) (push) Successful in 29s

This commit is contained in:
Rafal Kupiec 2024-01-31 16:25:43 +01:00
parent cd59c1e80d
commit 508fd27e92
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
4 changed files with 45 additions and 0 deletions

View File

@ -76,6 +76,7 @@ typedef EFI_STATUS (*PBL_FRAMEBUFFER_GET_DISPLAY_INFORMATION)(OUT PXTBL_FRAMEBUF
typedef EFI_STATUS (*PBL_FRAMEBUFFER_INITIALIZE)();
typedef EFI_STATUS (*PBL_FREE_PAGES)(IN ULONGLONG Size, IN EFI_PHYSICAL_ADDRESS Memory);
typedef EFI_STATUS (*PBL_FREE_POOL)(IN PVOID Memory);
typedef EFI_STATUS (*PBL_GET_CONFIGURATION_TABLE)(IN PEFI_GUID TableGuid, OUT PVOID *Table);
typedef VOID (*PBL_GET_MAPPINGS_COUNT)(IN PXTBL_PAGE_MAPPING PageMap, OUT PULONG NumberOfMappings);
typedef EFI_STATUS (*PBL_GET_MEMORY_MAP)(OUT PEFI_MEMORY_MAP MemoryMap);
typedef PLIST_ENTRY (*PBL_GET_MODULES_LIST)();
@ -354,6 +355,7 @@ typedef struct _XTBL_LOADER_PROTOCOL
struct
{
PBL_EXIT_BOOT_SERVICES ExitBootServices;
PBL_GET_CONFIGURATION_TABLE GetConfigurationTable;
PBL_GET_SECURE_BOOT_STATUS GetSecureBootStatus;
PBL_LOAD_EFI_IMAGE LoadEfiImage;
PBL_POWER_SYSTEM RebootSystem;

View File

@ -66,6 +66,43 @@ BlExitBootServices()
return Status;
}
/**
* Gets the address of a reqested system configuration table.
*
* @param TableGuid
* Supplies a GUID of the configuration table.
*
* @param Table
* Supplies a pointer to the memory area where the table address will be stored.
*
* @return This routine returns a status code.
*
* @since XT 1.0
*/
XTCDECL
EFI_STATUS
BlGetConfigurationTable(IN PEFI_GUID TableGuid,
OUT PVOID *Table)
{
SIZE_T Index;
/* Iterate through all system configuration tables */
for(Index = 0; Index < EfiSystemTable->NumberOfTableEntries; Index++)
{
/* Check if this table matches requested table */
if(RtlCompareGuids((PGUID)&(EfiSystemTable->ConfigurationTable[Index].VendorGuid), (PGUID)TableGuid))
{
/* Found requested table, return success */
*Table = EfiSystemTable->ConfigurationTable[Index].VendorTable;
return STATUS_EFI_SUCCESS;
}
}
/* Table not found */
*Table = NULL;
return STATUS_EFI_NOT_FOUND;
}
/**
* Checks whether SecureBoot is enabled or not.
*

View File

@ -130,6 +130,11 @@ XTCDECL
PWCHAR
BlGetConfigValue(IN CONST PWCHAR ConfigName);
XTCDECL
EFI_STATUS
BlGetConfigurationTable(IN PEFI_GUID TableGuid,
OUT PVOID *Table);
XTCDECL
EFI_STATUS
BlGetEfiPath(IN PWCHAR SystemPath,

View File

@ -653,6 +653,7 @@ BlpInstallXtLoaderProtocol()
BlpLdrProtocol.Tui.DisplayProgressDialog = BlDisplayProgressDialog;
BlpLdrProtocol.Tui.UpdateProgressBar = BlUpdateProgressBar;
BlpLdrProtocol.Util.ExitBootServices = BlExitBootServices;
BlpLdrProtocol.Util.GetConfigurationTable = BlGetConfigurationTable;
BlpLdrProtocol.Util.GetSecureBootStatus = BlGetSecureBootStatus;
BlpLdrProtocol.Util.LoadEfiImage = BlLoadEfiImage;
BlpLdrProtocol.Util.RebootSystem = BlRebootSystem;