Improvements to protocol support
This commit is contained in:
@@ -56,5 +56,5 @@ XtLdrModuleMain(IN EFI_HANDLE ImageHandle,
|
||||
XtLdrProto->Boot.RegisterProtocol(L"XTOS", &DummyGuid);
|
||||
|
||||
/* 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 UgaGuid = EFI_UNIVERSAL_GRAPHICS_ADAPTER_PROTOCOL_GUID;
|
||||
UINT32 Parameter1, Parameter2;
|
||||
EFI_HANDLE Handle;
|
||||
EFI_STATUS Status;
|
||||
|
||||
/* Check if framebuffer already initialized */
|
||||
@@ -99,7 +100,7 @@ FbInitializeDisplay()
|
||||
FrameBufferInfo.Initialized = FALSE;
|
||||
|
||||
/* 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 */
|
||||
if(Status == STATUS_EFI_SUCCESS)
|
||||
@@ -119,6 +120,9 @@ FbInitializeDisplay()
|
||||
FrameBufferInfo.FrameBufferSize = FrameBufferInfo.Adapter.GOP->Mode->FrameBufferSize;
|
||||
FrameBufferInfo.Protocol = GOP;
|
||||
FrameBufferInfo.Initialized = TRUE;
|
||||
|
||||
/* Close GOP protocol */
|
||||
Status = XtLdrProtocol->Protocol.Close(Handle, &GopGuid);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -126,7 +130,7 @@ FbInitializeDisplay()
|
||||
FrameBufferInfo.Adapter.GOP = NULL;
|
||||
|
||||
/* 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 */
|
||||
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 */
|
||||
FrameBufferInfo.Initialized = FALSE;
|
||||
}
|
||||
|
||||
/* Close UGA protocol */
|
||||
XtLdrProtocol->Protocol.Close(Handle, &UgaGuid);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -251,5 +258,5 @@ XtLdrModuleMain(IN EFI_HANDLE ImageHandle,
|
||||
XtFramebufferProtocol.PrintDisplayInformation = FbPrintDisplayInformation;
|
||||
|
||||
/* 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;
|
||||
|
||||
/* 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)
|
||||
{
|
||||
EFI_GUID PeCoffProtocolGuid = XT_PECOFF_IMAGE_PROTOCOL_GUID;
|
||||
EFI_HANDLE DiskHandle;
|
||||
EFI_HANDLE DiskHandle, ProtocolHandle;
|
||||
PEFI_FILE_HANDLE FsHandle, BootDir;
|
||||
PWCHAR SystemPath;
|
||||
EFI_STATUS Status;
|
||||
@@ -49,7 +49,7 @@ XtBootSystem(IN PXTBL_BOOT_PARAMETERS Parameters)
|
||||
XtLdrProtocol->Debug.Print(L"XTOS boot protocol activated\n");
|
||||
|
||||
/* 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)
|
||||
{
|
||||
/* Failed to open loader protocol */
|
||||
@@ -183,6 +183,7 @@ XtpBootSequence(IN PEFI_FILE_HANDLE BootDir,
|
||||
PVOID VirtualAddress, VirtualMemoryArea;
|
||||
PXT_ENTRY_POINT KernelEntryPoint;
|
||||
LIST_ENTRY MemoryMappings;
|
||||
EFI_HANDLE ProtocolHandle;
|
||||
EFI_STATUS Status;
|
||||
|
||||
/* Initialize XTOS startup sequence */
|
||||
@@ -250,7 +251,7 @@ XtpBootSequence(IN PEFI_FILE_HANDLE BootDir,
|
||||
BootDir->Close(BootDir);
|
||||
|
||||
/* Enable paging */
|
||||
XtLdrProtocol->Protocol.Open((PVOID*)&ImageProtocol, &LoadedImageGuid);
|
||||
XtLdrProtocol->Protocol.Open(&ProtocolHandle, (PVOID*)&ImageProtocol, &LoadedImageGuid);
|
||||
Status = XtEnablePaging(&MemoryMappings, VirtualAddress, ImageProtocol, &XtPageMap);
|
||||
if(Status != STATUS_EFI_SUCCESS)
|
||||
{
|
||||
@@ -333,6 +334,7 @@ XtpInitializeLoaderBlock(IN PLIST_ENTRY MemoryMappings,
|
||||
EFI_PHYSICAL_ADDRESS Address;
|
||||
// PVOID RuntimeServices;
|
||||
EFI_STATUS Status;
|
||||
EFI_HANDLE ProtocolHandle;
|
||||
UINT BlockPages, FrameBufferPages;
|
||||
|
||||
/* Calculate number of pages needed for initialization block */
|
||||
@@ -359,7 +361,7 @@ XtpInitializeLoaderBlock(IN PLIST_ENTRY MemoryMappings,
|
||||
LoaderBlock->LoaderInformation.DbgPrint = XtLdrProtocol->Debug.Print;
|
||||
|
||||
/* Load FrameBuffer protocol */
|
||||
Status = XtLdrProtocol->Protocol.Open((PVOID*)&FrameBufProtocol, &FrameBufGuid);
|
||||
Status = XtLdrProtocol->Protocol.Open(&ProtocolHandle, (PVOID*)&FrameBufProtocol, &FrameBufGuid);
|
||||
if(Status == STATUS_EFI_SUCCESS)
|
||||
{
|
||||
/* Make sure FrameBuffer is initialized */
|
||||
@@ -375,6 +377,9 @@ XtpInitializeLoaderBlock(IN PLIST_ENTRY MemoryMappings,
|
||||
LoaderBlock->LoaderInformation.FrameBuffer.Protocol = NONE;
|
||||
}
|
||||
|
||||
/* Close FrameBuffer protocol */
|
||||
XtLdrProtocol->Protocol.Close(ProtocolHandle, &FrameBufGuid);
|
||||
|
||||
/* Attempt to find virtual address of the EFI Runtime Services */
|
||||
// Status = XtLdrProtocol->GetVirtualAddress(MemoryMappings, &EfiSystemTable->RuntimeServices->Hdr, &RuntimeServices);
|
||||
// if(Status == STATUS_EFI_SUCCESS)
|
||||
@@ -542,5 +547,5 @@ XtLdrModuleMain(IN EFI_HANDLE ImageHandle,
|
||||
XtLdrProtocol->Boot.RegisterProtocol(L"XTOS", &Guid);
|
||||
|
||||
/* Install XTOS protocol */
|
||||
return XtLdrProtocol->Protocol.Install(&Guid, &XtBootProtocol);
|
||||
return XtLdrProtocol->Protocol.Install(&XtBootProtocol, &Guid);
|
||||
}
|
||||
|
Reference in New Issue
Block a user