Improvements to protocol support
This commit is contained in:
parent
87a586ed68
commit
17c0fdecce
@ -66,6 +66,7 @@ typedef VOID (*PBL_BOOTMENU_INITIALIZE_OS_LIST)(OUT PXTBL_BOOTMENU_ITEM MenuEntr
|
|||||||
typedef EFI_STATUS (*PBL_BOOTPROTO_BOOT_SYSTEM)(IN PXTBL_BOOT_PARAMETERS Parameters);
|
typedef EFI_STATUS (*PBL_BOOTPROTO_BOOT_SYSTEM)(IN PXTBL_BOOT_PARAMETERS Parameters);
|
||||||
typedef EFI_STATUS (*PBL_CLOSE_VOLUME)(IN PEFI_HANDLE VolumeHandle);
|
typedef EFI_STATUS (*PBL_CLOSE_VOLUME)(IN PEFI_HANDLE VolumeHandle);
|
||||||
typedef VOID (*PBL_CLEAR_CONSOLE_LINE)(IN ULONGLONG LineNo);
|
typedef VOID (*PBL_CLEAR_CONSOLE_LINE)(IN ULONGLONG LineNo);
|
||||||
|
typedef EFI_STATUS (*PBL_CLOSE_XT_PROTOCOL)(IN PEFI_HANDLE Handle, IN PEFI_GUID ProtocolGuid);
|
||||||
typedef VOID (*PBL_CONSOLE_CLEAR_SCREEN)();
|
typedef VOID (*PBL_CONSOLE_CLEAR_SCREEN)();
|
||||||
typedef VOID (*PBL_CONSOLE_DISABLE_CURSOR)();
|
typedef VOID (*PBL_CONSOLE_DISABLE_CURSOR)();
|
||||||
typedef VOID (*PBL_CONSOLE_ENABLE_CURSOR)();
|
typedef VOID (*PBL_CONSOLE_ENABLE_CURSOR)();
|
||||||
@ -89,12 +90,12 @@ typedef EFI_STATUS (*PBL_FREE_POOL)(IN PVOID Memory);
|
|||||||
typedef EFI_STATUS (*PBL_GET_MEMORY_MAP)(OUT PEFI_MEMORY_MAP MemoryMap);
|
typedef EFI_STATUS (*PBL_GET_MEMORY_MAP)(OUT PEFI_MEMORY_MAP MemoryMap);
|
||||||
typedef PLIST_ENTRY (*PBL_GET_MODULES_LIST)();
|
typedef PLIST_ENTRY (*PBL_GET_MODULES_LIST)();
|
||||||
typedef INT_PTR (*PBL_GET_SECURE_BOOT_STATUS)();
|
typedef INT_PTR (*PBL_GET_SECURE_BOOT_STATUS)();
|
||||||
|
typedef EFI_STATUS (*PBL_INSTALL_XT_PROTOCOL)(IN PVOID Interface, IN PEFI_GUID Guid);
|
||||||
typedef EFI_STATUS (*PBL_INVOKE_BOOT_PROTOCOL)(IN PLIST_ENTRY OptionsList);
|
typedef EFI_STATUS (*PBL_INVOKE_BOOT_PROTOCOL)(IN PLIST_ENTRY OptionsList);
|
||||||
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 PEFI_HANDLE Handle, 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);
|
||||||
@ -258,8 +259,9 @@ typedef struct _XTBL_LOADER_PROTOCOL
|
|||||||
} Memory;
|
} Memory;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
PBL_CLOSE_XT_PROTOCOL Close;
|
||||||
PBL_GET_MODULES_LIST GetModulesList;
|
PBL_GET_MODULES_LIST GetModulesList;
|
||||||
PBL_REGISTER_XT_PROTOCOL Install;
|
PBL_INSTALL_XT_PROTOCOL Install;
|
||||||
PBL_OPEN_XT_PROTOCOL Open;
|
PBL_OPEN_XT_PROTOCOL Open;
|
||||||
} Protocol;
|
} Protocol;
|
||||||
struct
|
struct
|
||||||
|
@ -174,7 +174,8 @@ BlOpenVolume(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath,
|
|||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
BlOpenProtocol(OUT PVOID *ProtocolHandler,
|
BlOpenProtocol(OUT PEFI_HANDLE Handle,
|
||||||
|
OUT PVOID *ProtocolHandler,
|
||||||
IN PEFI_GUID ProtocolGuid);
|
IN PEFI_GUID ProtocolGuid);
|
||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
@ -204,8 +205,8 @@ BlRegisterBootProtocol(IN PWCHAR SystemType,
|
|||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
BlInstallProtocol(IN PEFI_GUID Guid,
|
BlInstallProtocol(IN PVOID Interface,
|
||||||
IN PVOID Interface);
|
IN PEFI_GUID Guid);
|
||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
VOID
|
VOID
|
||||||
|
@ -56,5 +56,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 XtLdrProto->Protocol.Install(&DummyGuid, &BlpDummyProtocol);
|
return XtLdrProto->Protocol.Install(&BlpDummyProtocol, &DummyGuid);
|
||||||
}
|
}
|
||||||
|
@ -88,6 +88,7 @@ FbInitializeDisplay()
|
|||||||
EFI_GUID GopGuid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
|
EFI_GUID GopGuid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
|
||||||
EFI_GUID UgaGuid = EFI_UNIVERSAL_GRAPHICS_ADAPTER_PROTOCOL_GUID;
|
EFI_GUID UgaGuid = EFI_UNIVERSAL_GRAPHICS_ADAPTER_PROTOCOL_GUID;
|
||||||
UINT32 Parameter1, Parameter2;
|
UINT32 Parameter1, Parameter2;
|
||||||
|
EFI_HANDLE Handle;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
/* Check if framebuffer already initialized */
|
/* Check if framebuffer already initialized */
|
||||||
@ -99,7 +100,7 @@ FbInitializeDisplay()
|
|||||||
FrameBufferInfo.Initialized = FALSE;
|
FrameBufferInfo.Initialized = FALSE;
|
||||||
|
|
||||||
/* Attempt to open GOP protocol */
|
/* Attempt to open GOP protocol */
|
||||||
Status = XtLdrProtocol->Protocol.Open((PVOID*)&FrameBufferInfo.Adapter.GOP, &GopGuid);
|
Status = XtLdrProtocol->Protocol.Open(&Handle, (PVOID*)&FrameBufferInfo.Adapter.GOP, &GopGuid);
|
||||||
|
|
||||||
/* Check if Graphics Output Protocol is available */
|
/* Check if Graphics Output Protocol is available */
|
||||||
if(Status == STATUS_EFI_SUCCESS)
|
if(Status == STATUS_EFI_SUCCESS)
|
||||||
@ -119,6 +120,9 @@ FbInitializeDisplay()
|
|||||||
FrameBufferInfo.FrameBufferSize = FrameBufferInfo.Adapter.GOP->Mode->FrameBufferSize;
|
FrameBufferInfo.FrameBufferSize = FrameBufferInfo.Adapter.GOP->Mode->FrameBufferSize;
|
||||||
FrameBufferInfo.Protocol = GOP;
|
FrameBufferInfo.Protocol = GOP;
|
||||||
FrameBufferInfo.Initialized = TRUE;
|
FrameBufferInfo.Initialized = TRUE;
|
||||||
|
|
||||||
|
/* Close GOP protocol */
|
||||||
|
Status = XtLdrProtocol->Protocol.Close(Handle, &GopGuid);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -126,7 +130,7 @@ FbInitializeDisplay()
|
|||||||
FrameBufferInfo.Adapter.GOP = NULL;
|
FrameBufferInfo.Adapter.GOP = NULL;
|
||||||
|
|
||||||
/* Attempt to open UGA protocol */
|
/* Attempt to open UGA protocol */
|
||||||
Status = XtLdrProtocol->Protocol.Open((PVOID*)&FrameBufferInfo.Adapter.UGA, &UgaGuid);
|
Status = XtLdrProtocol->Protocol.Open(&Handle, (PVOID*)&FrameBufferInfo.Adapter.UGA, &UgaGuid);
|
||||||
|
|
||||||
/* Check if Universal Graphics Adapter is available */
|
/* Check if Universal Graphics Adapter is available */
|
||||||
if(Status == STATUS_EFI_SUCCESS)
|
if(Status == STATUS_EFI_SUCCESS)
|
||||||
@ -162,6 +166,9 @@ FbInitializeDisplay()
|
|||||||
/* Temporarily set this to FALSE, as we don't set FB base and we cannot use it anyway */
|
/* Temporarily set this to FALSE, as we don't set FB base and we cannot use it anyway */
|
||||||
FrameBufferInfo.Initialized = FALSE;
|
FrameBufferInfo.Initialized = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Close UGA protocol */
|
||||||
|
XtLdrProtocol->Protocol.Close(Handle, &UgaGuid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -251,5 +258,5 @@ XtLdrModuleMain(IN EFI_HANDLE ImageHandle,
|
|||||||
XtFramebufferProtocol.PrintDisplayInformation = FbPrintDisplayInformation;
|
XtFramebufferProtocol.PrintDisplayInformation = FbPrintDisplayInformation;
|
||||||
|
|
||||||
/* Register XTOS boot protocol */
|
/* Register XTOS boot protocol */
|
||||||
return XtLdrProtocol->Protocol.Install(&Guid, &XtFramebufferProtocol);
|
return XtLdrProtocol->Protocol.Install(&XtFramebufferProtocol, &Guid);
|
||||||
}
|
}
|
||||||
|
@ -603,5 +603,5 @@ XtLdrModuleMain(IN EFI_HANDLE ImageHandle,
|
|||||||
XtPeCoffProtocol.RelocateImage = PeRelocateImage;
|
XtPeCoffProtocol.RelocateImage = PeRelocateImage;
|
||||||
|
|
||||||
/* Register PE/COFF protocol */
|
/* Register PE/COFF protocol */
|
||||||
return XtLdrProtocol->Protocol.Install(&Guid, &XtPeCoffProtocol);
|
return XtLdrProtocol->Protocol.Install(&XtPeCoffProtocol, &Guid);
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ EFI_STATUS
|
|||||||
XtBootSystem(IN PXTBL_BOOT_PARAMETERS Parameters)
|
XtBootSystem(IN PXTBL_BOOT_PARAMETERS Parameters)
|
||||||
{
|
{
|
||||||
EFI_GUID PeCoffProtocolGuid = XT_PECOFF_IMAGE_PROTOCOL_GUID;
|
EFI_GUID PeCoffProtocolGuid = XT_PECOFF_IMAGE_PROTOCOL_GUID;
|
||||||
EFI_HANDLE DiskHandle;
|
EFI_HANDLE DiskHandle, ProtocolHandle;
|
||||||
PEFI_FILE_HANDLE FsHandle, BootDir;
|
PEFI_FILE_HANDLE FsHandle, BootDir;
|
||||||
PWCHAR SystemPath;
|
PWCHAR SystemPath;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
@ -49,7 +49,7 @@ XtBootSystem(IN PXTBL_BOOT_PARAMETERS Parameters)
|
|||||||
XtLdrProtocol->Debug.Print(L"XTOS boot protocol activated\n");
|
XtLdrProtocol->Debug.Print(L"XTOS boot protocol activated\n");
|
||||||
|
|
||||||
/* Open the XT PE/COFF protocol */
|
/* Open the XT PE/COFF protocol */
|
||||||
Status = XtLdrProtocol->Protocol.Open((PVOID *)&XtPeCoffProtocol, &PeCoffProtocolGuid);
|
Status = XtLdrProtocol->Protocol.Open(&ProtocolHandle, (PVOID *)&XtPeCoffProtocol, &PeCoffProtocolGuid);
|
||||||
if(Status != STATUS_EFI_SUCCESS)
|
if(Status != STATUS_EFI_SUCCESS)
|
||||||
{
|
{
|
||||||
/* Failed to open loader protocol */
|
/* Failed to open loader protocol */
|
||||||
@ -183,6 +183,7 @@ XtpBootSequence(IN PEFI_FILE_HANDLE BootDir,
|
|||||||
PVOID VirtualAddress, VirtualMemoryArea;
|
PVOID VirtualAddress, VirtualMemoryArea;
|
||||||
PXT_ENTRY_POINT KernelEntryPoint;
|
PXT_ENTRY_POINT KernelEntryPoint;
|
||||||
LIST_ENTRY MemoryMappings;
|
LIST_ENTRY MemoryMappings;
|
||||||
|
EFI_HANDLE ProtocolHandle;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
/* Initialize XTOS startup sequence */
|
/* Initialize XTOS startup sequence */
|
||||||
@ -250,7 +251,7 @@ XtpBootSequence(IN PEFI_FILE_HANDLE BootDir,
|
|||||||
BootDir->Close(BootDir);
|
BootDir->Close(BootDir);
|
||||||
|
|
||||||
/* Enable paging */
|
/* Enable paging */
|
||||||
XtLdrProtocol->Protocol.Open((PVOID*)&ImageProtocol, &LoadedImageGuid);
|
XtLdrProtocol->Protocol.Open(&ProtocolHandle, (PVOID*)&ImageProtocol, &LoadedImageGuid);
|
||||||
Status = XtEnablePaging(&MemoryMappings, VirtualAddress, ImageProtocol, &XtPageMap);
|
Status = XtEnablePaging(&MemoryMappings, VirtualAddress, ImageProtocol, &XtPageMap);
|
||||||
if(Status != STATUS_EFI_SUCCESS)
|
if(Status != STATUS_EFI_SUCCESS)
|
||||||
{
|
{
|
||||||
@ -333,6 +334,7 @@ XtpInitializeLoaderBlock(IN PLIST_ENTRY MemoryMappings,
|
|||||||
EFI_PHYSICAL_ADDRESS Address;
|
EFI_PHYSICAL_ADDRESS Address;
|
||||||
// PVOID RuntimeServices;
|
// PVOID RuntimeServices;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
EFI_HANDLE ProtocolHandle;
|
||||||
UINT BlockPages, FrameBufferPages;
|
UINT BlockPages, FrameBufferPages;
|
||||||
|
|
||||||
/* Calculate number of pages needed for initialization block */
|
/* Calculate number of pages needed for initialization block */
|
||||||
@ -359,7 +361,7 @@ XtpInitializeLoaderBlock(IN PLIST_ENTRY MemoryMappings,
|
|||||||
LoaderBlock->LoaderInformation.DbgPrint = XtLdrProtocol->Debug.Print;
|
LoaderBlock->LoaderInformation.DbgPrint = XtLdrProtocol->Debug.Print;
|
||||||
|
|
||||||
/* Load FrameBuffer protocol */
|
/* Load FrameBuffer protocol */
|
||||||
Status = XtLdrProtocol->Protocol.Open((PVOID*)&FrameBufProtocol, &FrameBufGuid);
|
Status = XtLdrProtocol->Protocol.Open(&ProtocolHandle, (PVOID*)&FrameBufProtocol, &FrameBufGuid);
|
||||||
if(Status == STATUS_EFI_SUCCESS)
|
if(Status == STATUS_EFI_SUCCESS)
|
||||||
{
|
{
|
||||||
/* Make sure FrameBuffer is initialized */
|
/* Make sure FrameBuffer is initialized */
|
||||||
@ -375,6 +377,9 @@ XtpInitializeLoaderBlock(IN PLIST_ENTRY MemoryMappings,
|
|||||||
LoaderBlock->LoaderInformation.FrameBuffer.Protocol = NONE;
|
LoaderBlock->LoaderInformation.FrameBuffer.Protocol = NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Close FrameBuffer protocol */
|
||||||
|
XtLdrProtocol->Protocol.Close(ProtocolHandle, &FrameBufGuid);
|
||||||
|
|
||||||
/* Attempt to find virtual address of the EFI Runtime Services */
|
/* Attempt to find virtual address of the EFI Runtime Services */
|
||||||
// Status = XtLdrProtocol->GetVirtualAddress(MemoryMappings, &EfiSystemTable->RuntimeServices->Hdr, &RuntimeServices);
|
// Status = XtLdrProtocol->GetVirtualAddress(MemoryMappings, &EfiSystemTable->RuntimeServices->Hdr, &RuntimeServices);
|
||||||
// if(Status == STATUS_EFI_SUCCESS)
|
// if(Status == STATUS_EFI_SUCCESS)
|
||||||
@ -542,5 +547,5 @@ XtLdrModuleMain(IN EFI_HANDLE ImageHandle,
|
|||||||
XtLdrProtocol->Boot.RegisterProtocol(L"XTOS", &Guid);
|
XtLdrProtocol->Boot.RegisterProtocol(L"XTOS", &Guid);
|
||||||
|
|
||||||
/* Install XTOS protocol */
|
/* Install XTOS protocol */
|
||||||
return XtLdrProtocol->Protocol.Install(&Guid, &XtBootProtocol);
|
return XtLdrProtocol->Protocol.Install(&XtBootProtocol, &Guid);
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,27 @@
|
|||||||
#include <xtldr.h>
|
#include <xtldr.h>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes a protocol on a provided handle.
|
||||||
|
*
|
||||||
|
* @param Handle
|
||||||
|
* Supplies a handle for the protocol interface that was previously opened.
|
||||||
|
*
|
||||||
|
* @param ProtocolGuid
|
||||||
|
* Supplies a unique protocol GUID.
|
||||||
|
*
|
||||||
|
* @return This routine returns a status code.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTCDECL
|
||||||
|
EFI_STATUS
|
||||||
|
BlCloseProtocol(IN PEFI_HANDLE Handle,
|
||||||
|
IN PEFI_GUID ProtocolGuid)
|
||||||
|
{
|
||||||
|
return EfiSystemTable->BootServices->CloseProtocol(Handle, ProtocolGuid, EfiImageHandle, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finds a boot protocol for specified system type.
|
* Finds a boot protocol for specified system type.
|
||||||
*
|
*
|
||||||
@ -69,6 +90,30 @@ BlGetModulesList()
|
|||||||
return &BlpLoadedModules;
|
return &BlpLoadedModules;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
BlInstallProtocol(IN PVOID Interface,
|
||||||
|
IN PEFI_GUID Guid)
|
||||||
|
{
|
||||||
|
EFI_HANDLE Handle = NULL;
|
||||||
|
|
||||||
|
/* Install protocol interface */
|
||||||
|
return EfiSystemTable->BootServices->InstallProtocolInterface(&Handle, Guid, EFI_NATIVE_INTERFACE, Interface);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads a specified XTLDR module from disk.
|
* Loads a specified XTLDR module from disk.
|
||||||
*
|
*
|
||||||
@ -355,6 +400,9 @@ BlLoadModules(IN PWCHAR ModulesList)
|
|||||||
/**
|
/**
|
||||||
* This routine locates and opens the requested XT Boot Loader or EFI protocol.
|
* This routine locates and opens the requested XT Boot Loader or EFI protocol.
|
||||||
*
|
*
|
||||||
|
* @param Handle
|
||||||
|
* Supplies the address where a pointer to the handle for the protocol interface.
|
||||||
|
*
|
||||||
* @param ProtocolHandler
|
* @param ProtocolHandler
|
||||||
* Supplies the address where a pointer to the opened protocol is returned.
|
* Supplies the address where a pointer to the opened protocol is returned.
|
||||||
*
|
*
|
||||||
@ -367,7 +415,8 @@ BlLoadModules(IN PWCHAR ModulesList)
|
|||||||
*/
|
*/
|
||||||
XTCDECL
|
XTCDECL
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
BlOpenProtocol(OUT PVOID *ProtocolHandler,
|
BlOpenProtocol(OUT PEFI_HANDLE Handle,
|
||||||
|
OUT PVOID *ProtocolHandler,
|
||||||
IN PEFI_GUID ProtocolGuid)
|
IN PEFI_GUID ProtocolGuid)
|
||||||
{
|
{
|
||||||
PEFI_HANDLE Handles = NULL;
|
PEFI_HANDLE Handles = NULL;
|
||||||
@ -398,6 +447,7 @@ BlOpenProtocol(OUT PVOID *ProtocolHandler,
|
|||||||
if(Status == STATUS_EFI_SUCCESS)
|
if(Status == STATUS_EFI_SUCCESS)
|
||||||
{
|
{
|
||||||
/* Protocol found and successfully opened */
|
/* Protocol found and successfully opened */
|
||||||
|
*Handle = Handles[Index];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -491,30 +541,6 @@ 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
|
|
||||||
BlInstallProtocol(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 installs XTLDR protocol for further usage by modules.
|
* This routine installs XTLDR protocol for further usage by modules.
|
||||||
*
|
*
|
||||||
@ -554,6 +580,7 @@ BlpInstallXtLoaderProtocol()
|
|||||||
BlpLdrProtocol.Memory.FreePages = BlMemoryFreePages;
|
BlpLdrProtocol.Memory.FreePages = BlMemoryFreePages;
|
||||||
BlpLdrProtocol.Memory.FreePool = BlMemoryFreePool;
|
BlpLdrProtocol.Memory.FreePool = BlMemoryFreePool;
|
||||||
BlpLdrProtocol.Memory.GetMemoryMap = BlGetMemoryMap;
|
BlpLdrProtocol.Memory.GetMemoryMap = BlGetMemoryMap;
|
||||||
|
BlpLdrProtocol.Protocol.Close = BlCloseProtocol;
|
||||||
BlpLdrProtocol.Protocol.GetModulesList = BlGetModulesList;
|
BlpLdrProtocol.Protocol.GetModulesList = BlGetModulesList;
|
||||||
BlpLdrProtocol.Protocol.Open = BlOpenProtocol;
|
BlpLdrProtocol.Protocol.Open = BlOpenProtocol;
|
||||||
BlpLdrProtocol.Protocol.Install = BlInstallProtocol;
|
BlpLdrProtocol.Protocol.Install = BlInstallProtocol;
|
||||||
@ -569,5 +596,5 @@ BlpInstallXtLoaderProtocol()
|
|||||||
|
|
||||||
/* Register XTLDR loader protocol */
|
/* Register XTLDR loader protocol */
|
||||||
BlDebugPrint(L"Registering XT loader protocol\n");
|
BlDebugPrint(L"Registering XT loader protocol\n");
|
||||||
return BlInstallProtocol(&Guid, &BlpLdrProtocol);
|
return BlInstallProtocol(&BlpLdrProtocol, &Guid);
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ BlInitializeBootLoader()
|
|||||||
{
|
{
|
||||||
EFI_GUID LipGuid = EFI_LOADED_IMAGE_PROTOCOL_GUID;
|
EFI_GUID LipGuid = EFI_LOADED_IMAGE_PROTOCOL_GUID;
|
||||||
PEFI_LOADED_IMAGE_PROTOCOL LoadedImage;
|
PEFI_LOADED_IMAGE_PROTOCOL LoadedImage;
|
||||||
|
EFI_HANDLE Handle;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
/* Set current XTLDR's EFI BootServices status */
|
/* Set current XTLDR's EFI BootServices status */
|
||||||
@ -45,7 +46,7 @@ BlInitializeBootLoader()
|
|||||||
if(DEBUG)
|
if(DEBUG)
|
||||||
{
|
{
|
||||||
/* Attempt to open EFI LoadedImage protocol */
|
/* Attempt to open EFI LoadedImage protocol */
|
||||||
Status = BlOpenProtocol((PVOID *)&LoadedImage, &LipGuid);
|
Status = BlOpenProtocol(&Handle, (PVOID *)&LoadedImage, &LipGuid);
|
||||||
if(Status == STATUS_EFI_SUCCESS)
|
if(Status == STATUS_EFI_SUCCESS)
|
||||||
{
|
{
|
||||||
/* Protocol opened successfully, print useful debug information */
|
/* Protocol opened successfully, print useful debug information */
|
||||||
@ -172,6 +173,7 @@ BlInvokeBootProtocol(IN PLIST_ENTRY OptionsList)
|
|||||||
EFI_GUID BootProtocolGuid;
|
EFI_GUID BootProtocolGuid;
|
||||||
SIZE_T ModuleListLength;
|
SIZE_T ModuleListLength;
|
||||||
PWCHAR ModulesList;
|
PWCHAR ModulesList;
|
||||||
|
EFI_HANDLE Handle;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
/* Initialize boot parameters and a list of modules */
|
/* Initialize boot parameters and a list of modules */
|
||||||
@ -262,7 +264,7 @@ BlInvokeBootProtocol(IN PLIST_ENTRY OptionsList)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Open boot protocol */
|
/* Open boot protocol */
|
||||||
Status = BlOpenProtocol((PVOID *)&BootProtocol, &BootProtocolGuid);
|
Status = BlOpenProtocol(&Handle, (PVOID *)&BootProtocol, &BootProtocolGuid);
|
||||||
if(Status != STATUS_EFI_SUCCESS)
|
if(Status != STATUS_EFI_SUCCESS)
|
||||||
{
|
{
|
||||||
/* Failed to open boot protocol */
|
/* Failed to open boot protocol */
|
||||||
|
Loading…
Reference in New Issue
Block a user