OsLoader clean-up to use common LinuxLib (#547)

This will allow OsLoader to use LinuxLib for legacy linux boot
and remove duplicated code.

Signed-off-by: Aiden Park <aiden.park@intel.com>
This commit is contained in:
Aiden Park 2020-01-30 15:24:19 -08:00 committed by GitHub
parent 28cc381542
commit 644cc84823
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 20 additions and 34 deletions

View File

@ -220,12 +220,13 @@ LoadBzImage (
/**
Update linux kernel boot parameters.
@retval EFI_SUCCESS Linux boot parameters were updated successfully.
@param[in] Bp BootParams address to be updated
**/
VOID
EFIAPI
UpdateLinuxBootParams (
VOID
IN BOOT_PARAMS *Bp
);
/**

View File

@ -233,15 +233,15 @@ LoadBzImage (
/**
Update linux kernel boot parameters.
@retval EFI_SUCCESS Linux boot parameters were updated successfully.
@param[in] Bp BootParams address to be updated
**/
VOID
EFIAPI
UpdateLinuxBootParams (
VOID
IN BOOT_PARAMS *Bp
)
{
BOOT_PARAMS *Bp;
EFI_HOB_GUID_TYPE *GuidHob;
EFI_PEI_GRAPHICS_INFO_HOB *GfxInfoHob;
UINTN MemoryMapSize;
@ -250,7 +250,9 @@ UpdateLinuxBootParams (
UINTN Index;
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *GfxMode;
Bp = GetLinuxBootParams ();
if (Bp == NULL) {
return;
}
//
// Get graphics data
@ -290,7 +292,7 @@ UpdateLinuxBootParams (
// Get memory map
E820Entry = &Bp->E820Map[0];
MemoryMapSize = (UINTN)ARRAY_SIZE (Bp->E820Map);
MapInfo = GetMemoryMapInfo();
MapInfo = GetMemoryMapInfo ();
for (Index = 0; Index < MapInfo->Count && Index < MemoryMapSize; Index++) {
E820Entry->Type = (UINT32)MapInfo->Entry[Index].Type;
E820Entry->Addr = MapInfo->Entry[Index].Base;
@ -298,7 +300,6 @@ UpdateLinuxBootParams (
E820Entry++;
}
Bp->E820Entries = (UINT8)MapInfo->Count;
}
/**
@ -316,7 +317,10 @@ LinuxBoot (
{
BOOT_PARAMS *Bp;
UpdateLinuxBootParams ();
Bp = GetLinuxBootParams ();
JumpToKernel ((VOID *)Bp->Hdr.Code32Start, Bp);
if (Bp != NULL) {
UpdateLinuxBootParams (Bp);
JumpToKernel ((VOID *)Bp->Hdr.Code32Start, Bp);
}
CpuDeadLoop ();
}

View File

@ -200,7 +200,7 @@ DEBUG_CODE_BEGIN ();
DumpMbInfo (&LoadedImage->Image.MultiBoot.MbInfo);
DumpMbBootState (&LoadedImage->Image.MultiBoot.BootState);
} else if ((LoadedImage->Flags & LOADED_IMAGE_LINUX) != 0) {
DumpLinuxBootParams (LoadedImage->Image.Linux.BootParams);
DumpLinuxBootParams (GetLinuxBootParams ());
}
DEBUG_CODE_END ();
}
@ -315,7 +315,7 @@ UpdateOsParameters (
UpdateOsMemMap (LoadedImage);
if ((LoadedImage->Flags & LOADED_IMAGE_LINUX) != 0) {
LoadedImage->Image.Linux.BootParams->Hdr.CmdlineSize = LoadedImage->Image.Linux.CmdFile.Size;
GetLinuxBootParams ()->Hdr.CmdlineSize = LoadedImage->Image.Linux.CmdFile.Size;
}
DEBUG ((DEBUG_INFO, "\nDump normal boot image info:\n"));
DisplayInfo (LoadedImage);

View File

@ -412,8 +412,6 @@ SetupBootImage (
LinuxImage->InitrdFile.Addr, LinuxImage->InitrdFile.Size,
LinuxImage->CmdFile.Addr, LinuxImage->CmdFile.Size);
if (!EFI_ERROR (Status)) {
UpdateLinuxBootParams ();
LinuxImage->BootParams = GetLinuxBootParams ();
LoadedImage->Flags = (LoadedImage->Flags & ~LOADED_IMAGE_MULTIBOOT) | LOADED_IMAGE_LINUX;
}
}
@ -557,7 +555,6 @@ StartBooting (
)
{
MULTIBOOT_IMAGE *MultiBoot;
BOOT_PARAMS *BootParams;
EFI_STATUS Status;
DEBUG_CODE_BEGIN();
@ -567,14 +564,12 @@ StartBooting (
Status = EFI_SUCCESS;
if ((LoadedImage->Flags & LOADED_IMAGE_LINUX) != 0) {
BootParams = LoadedImage->Image.Linux.BootParams;
if (FeaturePcdGet (PcdPreOsCheckerEnabled) && IsPreOsCheckerLoaded ()) {
BeforeOSJump ("Starting Pre-OS Checker ...");
StartPreOsChecker (BootParams);
StartPreOsChecker (GetLinuxBootParams ());
} else {
BeforeOSJump ("Starting Kernel ...");
JumpToKernel ((VOID *)BootParams->Hdr.Code32Start, (VOID *) BootParams);
LinuxBoot ((VOID *)(UINTN)PcdGet32 (PcdPayloadHobList), NULL);
}
Status = EFI_DEVICE_ERROR;
} else if ((LoadedImage->Flags & LOADED_IMAGE_MULTIBOOT) != 0) {

View File

@ -115,7 +115,6 @@ typedef struct {
UINT16 Reserved;
UINT16 ExtraBlobNumber;
IMAGE_DATA ExtraBlob[MAX_EXTRA_FILE_NUMBER];
BOOT_PARAMS *BootParams;
} LINUX_IMAGE;
typedef struct {
@ -361,20 +360,6 @@ GetNextBootOption (
IN UINT8 BootOptionIndex
);
/**
ASM function that goes into kernel image.
@param KernelStart Pointer to the start of kernel.
@param KernelBootParams Pointer to the boot parameter structure.
**/
VOID
EFIAPI
JumpToKernel (
VOID *KernelStart,
VOID *KernelBootParams
);
/**
Seed Sanity check to check seed HOB validity before passing to OS.

View File

@ -130,6 +130,7 @@ StartPreOsChecker (
if (OsBootParam == NULL) {
return EFI_INVALID_PARAMETER;
}
UpdateLinuxBootParams (OsBootParam);
PreOsParams.Version = 0x1;
PreOsParams.HeapSize = EFI_SIZE_TO_PAGES (0);