Add a way to define custom boot menu handler
This commit is contained in:
parent
57b6037dd6
commit
ea5365dcfd
@ -66,12 +66,14 @@ typedef INT_PTR (*PBL_GET_SECURE_BOOT_STATUS)();
|
|||||||
typedef EFI_STATUS (*PBL_OPEN_VOLUME)(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath, OUT PEFI_HANDLE DiskHandle, OUT PEFI_FILE_HANDLE *FsHandle);
|
typedef EFI_STATUS (*PBL_OPEN_VOLUME)(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath, OUT PEFI_HANDLE DiskHandle, OUT PEFI_FILE_HANDLE *FsHandle);
|
||||||
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 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);
|
||||||
typedef VOID (*PBL_TUI_DISPLAY_INFO_DIALOG)(IN PWCHAR Caption, IN PWCHAR Message);
|
typedef VOID (*PBL_TUI_DISPLAY_INFO_DIALOG)(IN PWCHAR Caption, IN PWCHAR Message);
|
||||||
typedef XTBL_DIALOG_HANDLE (*PBL_TUI_DISPLAY_PROGRESS_DIALOG)(IN PWCHAR Caption, IN PWCHAR Message, IN UCHAR Percentage);
|
typedef XTBL_DIALOG_HANDLE (*PBL_TUI_DISPLAY_PROGRESS_DIALOG)(IN PWCHAR Caption, IN PWCHAR Message, IN UCHAR Percentage);
|
||||||
typedef VOID (*PBL_TUI_UPDATE_PROGRESS_BAR)(IN PXTBL_DIALOG_HANDLE Handle, IN PWCHAR Message, IN UCHAR Percentage);
|
typedef VOID (*PBL_TUI_UPDATE_PROGRESS_BAR)(IN PXTBL_DIALOG_HANDLE Handle, IN PWCHAR Message, IN UCHAR Percentage);
|
||||||
typedef EFI_STATUS (*PBL_WAIT_FOR_EFI_EVENT)(IN UINT_PTR NumberOfEvents, IN PEFI_EVENT Event, OUT PUINT_PTR Index);
|
typedef EFI_STATUS (*PBL_WAIT_FOR_EFI_EVENT)(IN UINT_PTR NumberOfEvents, IN PEFI_EVENT Event, OUT PUINT_PTR Index);
|
||||||
|
typedef VOID (*PBL_XT_BOOT_MENU)();
|
||||||
|
|
||||||
/* Boot menu list structure */
|
/* Boot menu list structure */
|
||||||
typedef struct _XTBL_BOOTMENU_ITEM
|
typedef struct _XTBL_BOOTMENU_ITEM
|
||||||
@ -148,6 +150,7 @@ typedef struct _XTBL_LOADER_PROTOCOL
|
|||||||
{
|
{
|
||||||
PBL_BOOTMENU_INITIALIZE_OS_LIST InitializeBootMenuList;
|
PBL_BOOTMENU_INITIALIZE_OS_LIST InitializeBootMenuList;
|
||||||
PBL_OPEN_XT_PROTOCOL OpenProtocol;
|
PBL_OPEN_XT_PROTOCOL OpenProtocol;
|
||||||
|
PBL_REGISTER_XT_BOOT_MENU RegisterBootMenu;
|
||||||
} Protocol;
|
} Protocol;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
@ -168,6 +171,7 @@ typedef struct _XTBL_LOADER_PROTOCOL
|
|||||||
/* XTLDR Status data */
|
/* XTLDR Status data */
|
||||||
typedef struct _XTBL_STATUS
|
typedef struct _XTBL_STATUS
|
||||||
{
|
{
|
||||||
|
PBL_XT_BOOT_MENU BootMenu;
|
||||||
BOOLEAN BootServices;
|
BOOLEAN BootServices;
|
||||||
ULONG DebugPort;
|
ULONG DebugPort;
|
||||||
CPPORT SerialPort;
|
CPPORT SerialPort;
|
||||||
|
@ -126,6 +126,11 @@ BlOpenVolume(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath,
|
|||||||
OUT PEFI_HANDLE DiskHandle,
|
OUT PEFI_HANDLE DiskHandle,
|
||||||
OUT PEFI_FILE_HANDLE *FsHandle);
|
OUT PEFI_FILE_HANDLE *FsHandle);
|
||||||
|
|
||||||
|
XTCDECL
|
||||||
|
EFI_STATUS
|
||||||
|
BlOpenXtProtocol(OUT PVOID *ProtocolHandler,
|
||||||
|
IN PEFI_GUID ProtocolGuid);
|
||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
VOID
|
VOID
|
||||||
BlQueryConsoleMode(OUT PUINT_PTR ResX,
|
BlQueryConsoleMode(OUT PUINT_PTR ResX,
|
||||||
@ -144,12 +149,11 @@ BlReadKeyStroke(OUT PEFI_INPUT_KEY Key);
|
|||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
VOID
|
VOID
|
||||||
BlResetConsoleInputBuffer();
|
BlRegisterBootMenu(PVOID BootMenuRoutine);
|
||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
EFI_STATUS
|
VOID
|
||||||
BlOpenXtProtocol(OUT PVOID *ProtocolHandler,
|
BlResetConsoleInputBuffer();
|
||||||
IN PEFI_GUID ProtocolGuid);
|
|
||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
|
@ -74,6 +74,24 @@ BlOpenXtProtocol(OUT PVOID *ProtocolHandler,
|
|||||||
return STATUS_EFI_SUCCESS;
|
return STATUS_EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a boot menu callback routine, that will be used to display alternative boot menu.
|
||||||
|
*
|
||||||
|
* @param BootMenuRoutine
|
||||||
|
* Supplies a pointer to the boot menu callback routine.
|
||||||
|
*
|
||||||
|
* @return This routine does not return any value.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTCDECL
|
||||||
|
VOID
|
||||||
|
BlRegisterBootMenu(PVOID BootMenuRoutine)
|
||||||
|
{
|
||||||
|
/* Set boot menu routine */
|
||||||
|
BlpStatus.BootMenu = BootMenuRoutine;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This routine registers XTLDR protocol for further usage by modules.
|
* This routine registers XTLDR protocol for further usage by modules.
|
||||||
*
|
*
|
||||||
@ -109,8 +127,9 @@ BlpRegisterXtLoaderProtocol()
|
|||||||
LdrProtocol.Memory.AllocatePool = BlMemoryAllocatePool;
|
LdrProtocol.Memory.AllocatePool = BlMemoryAllocatePool;
|
||||||
LdrProtocol.Memory.FreePages = BlMemoryFreePages;
|
LdrProtocol.Memory.FreePages = BlMemoryFreePages;
|
||||||
LdrProtocol.Memory.FreePool = BlMemoryFreePool;
|
LdrProtocol.Memory.FreePool = BlMemoryFreePool;
|
||||||
LdrProtocol.Protocol.OpenProtocol = BlOpenXtProtocol;
|
|
||||||
LdrProtocol.Protocol.InitializeBootMenuList = BlInitializeBootMenuList;
|
LdrProtocol.Protocol.InitializeBootMenuList = BlInitializeBootMenuList;
|
||||||
|
LdrProtocol.Protocol.OpenProtocol = BlOpenXtProtocol;
|
||||||
|
LdrProtocol.Protocol.RegisterBootMenu = BlRegisterBootMenu;
|
||||||
LdrProtocol.Tui.DisplayErrorDialog = BlDisplayErrorDialog;
|
LdrProtocol.Tui.DisplayErrorDialog = BlDisplayErrorDialog;
|
||||||
LdrProtocol.Tui.DisplayInfoDialog = BlDisplayInfoDialog;
|
LdrProtocol.Tui.DisplayInfoDialog = BlDisplayInfoDialog;
|
||||||
LdrProtocol.Tui.DisplayProgressDialog = BlDisplayProgressDialog;
|
LdrProtocol.Tui.DisplayProgressDialog = BlDisplayProgressDialog;
|
||||||
|
@ -191,8 +191,16 @@ BlStartXtLoader(IN EFI_HANDLE ImageHandle,
|
|||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
/* Display boot menu */
|
if(BlpStatus.BootMenu != NULL)
|
||||||
BlDisplayBootMenu();
|
{
|
||||||
|
/* Display alternative boot menu */
|
||||||
|
BlpStatus.BootMenu();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Display default boot menu */
|
||||||
|
BlDisplayBootMenu();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This point should be never reached, if this happen return error code */
|
/* This point should be never reached, if this happen return error code */
|
||||||
|
Loading…
Reference in New Issue
Block a user