Some comments:
On 10/20/12 00:38, Jordan Justen wrote:
> +
> +
> +VOID
> +SetupLinuxMemmap (
> + struct boot_params *Bp
> + )
could be STATIC I think
> +{
> + EFI_STATUS Status;
> + UINT8 TmpMemoryMap[1];
> + UINTN MapKey;
> + UINTN DescriptorSize;
> + UINT32 DescriptorVersion;
> + UINTN MemoryMapSize;
> + EFI_MEMORY_DESCRIPTOR *MemoryMap;
> + EFI_MEMORY_DESCRIPTOR *MemoryMapPtr;
> + UINTN Index;
> + struct efi_info *Efi;
> + struct e820_entry *E820Map;
> + UINTN E820EntryCount;
> +
> + //
> + // Get System MemoryMapSize
> + //
> + MemoryMapSize = sizeof (TmpMemoryMap);
> + Status = gBS->GetMemoryMap (
> + &MemoryMapSize,
> + (EFI_MEMORY_DESCRIPTOR *)TmpMemoryMap,
> + &MapKey,
> + &DescriptorSize,
> + &DescriptorVersion
> + );
> + ASSERT (Status == EFI_BUFFER_TOO_SMALL);
> + //
> + // Enlarge space here, because we will allocate pool now.
> + //
> + MemoryMapSize += EFI_PAGE_SIZE;
Ah. The spec explains the enlargement. The allocation of the target
buffer itself may increase the map size.
> + MemoryMap = AllocatePool (MemoryMapSize);
> + ASSERT (MemoryMap != NULL);
> +
> + //
> + // Get System MemoryMap
> + //
> + Status = gBS->GetMemoryMap (
> + &MemoryMapSize,
> + MemoryMap,
> + &MapKey,
> + &DescriptorSize,
> + &DescriptorVersion
> + );
> + ASSERT_EFI_ERROR (Status);
> +
> + E820Map = &Bp->e820_map[0];
> + E820EntryCount = 0;
> + MemoryMapPtr = MemoryMap;
> + for (Index = 0; Index < (MemoryMapSize / DescriptorSize); Index++) {
<pedantic>
I think you could also ensure that the loop not run out of e820_map
elements (128). Unlikely, admittedly...
Plus I think here we're modifying *Bp (the e820_map array is contained
in it), therefore Bp is an OUT parameter here. The prototypes of
SetupLinuxBootParams() and LoadLinux() should be probably modified
accordingly.
</pedantic>
> + UINTN E820Type = 0;
> +
> + switch(MemoryMap->Type) {
> + case EfiReservedMemoryType:
> + case EfiRuntimeServicesCode:
> + case EfiRuntimeServicesData:
> + case EfiMemoryMappedIO:
> + case EfiMemoryMappedIOPortSpace:
> + case EfiPalCode:
> + E820Type = E820_RESERVED;
> + break;
> +
> + case EfiUnusableMemory:
> + E820Type = E820_UNUSABLE;
> + break;
> +
> + case EfiACPIReclaimMemory:
> + E820Type = E820_ACPI;
> + break;
> +
> + case EfiLoaderCode:
> + case EfiLoaderData:
> + case EfiBootServicesCode:
> + case EfiBootServicesData:
> + case EfiConventionalMemory:
> + E820Type = E820_RAM;
> + break;
> +
> + case EfiACPIMemoryNVS:
> + E820Type = E820_NVS;
> + break;
> +
> + default:
> + DEBUG ((
> + EFI_D_ERROR,
> + "Invalid EFI memory descriptor type (0x%x)!\n",
> + MemoryMap->Type
> + ));
> + continue;
> + }
> +
> + E820Map->addr = MemoryMap->PhysicalStart;
> + E820Map->size = MemoryMap->NumberOfPages << EFI_PAGE_SHIFT;
> + E820Map->type = (UINT32) E820Type;
> + E820Map++;
> + E820EntryCount++;
> +
> + //
> + // Get next item
> + //
> + MemoryMap = (EFI_MEMORY_DESCRIPTOR *)((UINTN)MemoryMap + DescriptorSize);
> + }
> + Bp->e820_entries = (UINT8) E820EntryCount;
> +
> + Efi = &Bp->efi_info;
> + Efi->efi_systab = (UINT32)(UINTN) gST;
> + Efi->efi_memdesc_size = (UINT32) DescriptorSize;
> + Efi->efi_memdesc_version = DescriptorVersion;
> + Efi->efi_memmap = (UINT32)(UINTN) MemoryMapPtr;
> + Efi->efi_memmap_size = (UINT32) MemoryMapSize;
> + Efi->efi_systab_hi = ((UINT64)(UINTN) gST) >> 32;
> + Efi->efi_memmap_hi = ((UINT64)(UINTN) MemoryMapPtr) >> 32;
> +#ifdef MDE_CPU_IA32
> + Efi->efi_loader_signature = SIGNATURE_32 ('E', 'L', '3', '2');
> +#else
> + Efi->efi_loader_signature = SIGNATURE_32 ('E', 'L', '6', '4');
> +#endif
> +
> + //gBS->RaiseTPL (TPL_HIGH_LEVEL);
> + gBS->ExitBootServices (gImageHandle, MapKey);
> +}
> +
> +
> +EFI_STATUS
> +EFIAPI
> +LoadLinuxSetCommandLine (
> + IN VOID *KernelSetup,
> + IN CHAR8 *CommandLine
> + )
> +{
> + struct boot_params *Bp;
> +
> + Bp = (struct boot_params*) KernelSetup;
> +
> + Bp->hdr.cmd_line_ptr = (UINT32)(UINTN) CommandLine;
> +
> + return EFI_SUCCESS;
> +}
In fact KernelSetup should be OUT (or IN/OUT) here.
> +
> +
> +EFI_STATUS
> +EFIAPI
> +LoadLinuxSetInitrd (
> + IN VOID *KernelSetup,
> + IN VOID *Initrd,
> + IN UINTN InitrdSize
> + )
> +{
> + struct boot_params *Bp;
> +
> + Bp = (struct boot_params*) KernelSetup;
> +
> + Bp->hdr.ramdisk_start = (UINT32)(UINTN) Initrd;
> + Bp->hdr.ramdisk_len = (UINT32) InitrdSize;
> + Bp->hdr.ramdisk_max = Bp->hdr.ramdisk_start + Bp->hdr.ramdisk_len;
> +
> + return EFI_SUCCESS;
> +}
Same.
Plus these two functions return constant EFI_SUCCESS, and don't check
for support level (the header documents EFI_UNSUPPORTED too).
> +
> +
> +STATIC
> +EFI_STATUS
> +SetupLinuxBootParams (
> + IN VOID *Kernel,
> + IN struct boot_params *Bp
"OUT"
> + )
> +{
> + Bp->alt_mem_k = SIZE_32KB;
> +
> + ZeroMem ((VOID*)&Bp->screen_info, sizeof(Bp->screen_info));
> +
> + Bp->hdr.code32_start = (UINT32)(UINTN) Kernel;
> +
> + SetupLinuxMemmap (Bp);
> +
> + return EFI_SUCCESS;
> +}
> +
> +
> +/**
> + Loads and boots UEFI Linux.
> +
> + @param[in] BzImage - The main kernel image
> + @param[in] BzImageSize - The main kernel image size
> + @param[in] Initrd - The initial root disk image
> + @param[in] InitrdSize - The initial root disk image size
> + @param[in] CommandLine - The kernel command line
too many params documented
> +
> + @retval EFI_NOT_FOUND - The Linux kernel was not found
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +LoadLinuxBzImage (
> + IN VOID *BzImage,
> + IN UINTN BzImageSize
> + )
> +{
> + EFI_STATUS Status;
> + struct boot_params *Bp;
> + VOID *Kernel;
> + VOID *KernelSetup;
> + UINTN SetupSize;
Maybe check if BzImageSize >= sizeof (*Bp)?
> + Bp = (struct boot_params *) BzImage;
> +
> + SetupSize = (Bp->hdr.setup_secs + 1) * 512;
> +
> + if (SetupSize > BzImageSize) {
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + Status = LoadLinuxCheckKernelSetup (BzImage, SetupSize);
> + if (EFI_ERROR (Status)) {
> + return Status;
> + }
> +
> + KernelSetup = LoadLinuxAllocateKernelSetupPages (EFI_SIZE_TO_PAGES
> (SetupSize));
> + if (KernelSetup == NULL) {
> + return EFI_OUT_OF_RESOURCES;
> + }
> + CopyMem (KernelSetup, BzImage, SetupSize);
> +
> + Bp = (struct boot_params *) KernelSetup;
> +
> + Kernel = LoadLinuxAllocateKernelPages (Bp, EFI_SIZE_TO_PAGES (SIZE_8MB));
> + if (Kernel == NULL) {
> + FreePages (KernelSetup, EFI_SIZE_TO_PAGES (SetupSize));
> + return EFI_OUT_OF_RESOURCES;
> + }
> + CopyMem (Kernel, (VOID*) ((UINTN)BzImage + SetupSize), BzImageSize -
> SetupSize);
(Pedantic again) We could compare (BzImageSize - SetupSize) against
SIZE_8MB first.
> +
> + return LoadLinux (Kernel, KernelSetup);
> +}
> +
> +
I'll continue from here later.
Thanks
Laszlo
> +/**
> + Loads and boots UEFI Linux.
> +
> + @param[in] Kernel - The main kernel image
> + @param[in] KernelSetup - The kernel setup image
> + @param[in] CommandLine - The kernel command line
> +
> + @retval EFI_NOT_FOUND - The Linux kernel was not found
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +LoadLinux (
> + IN VOID *Kernel,
> + IN VOID *KernelSetup
> + )
> +{
> + struct boot_params *Bp;
> +
> + Bp = (struct boot_params *) KernelSetup;
> +
> + if (Bp->hdr.version < 0x205) {
> + //
> + // We only support relocatable kernels
> + //
> + return EFI_UNSUPPORTED;
> + }
> +
> + InitLinuxDescriptorTables ();
> +
> + SetupLinuxBootParams (Kernel, (struct boot_params*) KernelSetup);
> +
> + DEBUG ((EFI_D_INFO, "Jumping to kernel\n"));
> + DisableInterrupts ();
> + SetLinuxDescriptorTables ();
> + JumpToKernel (Kernel, (VOID*) KernelSetup);
> +
> + return EFI_SUCCESS;
> +}
> +
> diff --git a/OvmfPkg/Library/LoadLinuxLib/LinuxGdt.c
> b/OvmfPkg/Library/LoadLinuxLib/LinuxGdt.c
> new file mode 100644
> index 0000000..653adcf
> --- /dev/null
> +++ b/OvmfPkg/Library/LoadLinuxLib/LinuxGdt.c
> @@ -0,0 +1,200 @@
> +/** @file
> + Initialize GDT for Linux.
> +
> + Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
> + This program and the accompanying materials
> + are licensed and made available under the terms and conditions of the BSD
> License
> + which accompanies this distribution. The full text of the license may be
> found at
> + http://opensource.org/licenses/bsd-license.php
> +
> + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
> IMPLIED.
> +
> +**/
> +
> +#include "LoadLinuxLib.h"
> +
> +
> +//
> +// Local structure definitions
> +//
> +
> +#pragma pack (1)
> +
> +//
> +// Global Descriptor Entry structures
> +//
> +
> +typedef struct _GDT_ENTRY {
> + UINT16 Limit15_0;
> + UINT16 Base15_0;
> + UINT8 Base23_16;
> + UINT8 Type;
> + UINT8 Limit19_16_and_flags;
> + UINT8 Base31_24;
> +} GDT_ENTRY;
> +
> +typedef
> +struct _GDT_ENTRIES {
> + GDT_ENTRY Null;
> + GDT_ENTRY Null2;
> + GDT_ENTRY Linear;
> + GDT_ENTRY LinearCode;
> + GDT_ENTRY TaskSegment;
> + GDT_ENTRY Spare4;
> + GDT_ENTRY Spare5;
> +} GDT_ENTRIES;
> +
> +#pragma pack ()
> +
> +#define NULL_SEL OFFSET_OF (GDT_ENTRIES, Null)
> +#define LINEAR_SEL OFFSET_OF (GDT_ENTRIES, Linear)
> +#define LINEAR_CODE_SEL OFFSET_OF (GDT_ENTRIES, LinearCode)
> +#define SYS_DATA_SEL OFFSET_OF (GDT_ENTRIES, SysData)
> +#define SYS_CODE_SEL OFFSET_OF (GDT_ENTRIES, SysCode)
> +#define LINEAR_CODE64_SEL OFFSET_OF (GDT_ENTRIES, LinearCode64)
> +#define SPARE4_SEL OFFSET_OF (GDT_ENTRIES, Spare4)
> +#define SPARE5_SEL OFFSET_OF (GDT_ENTRIES, Spare5)
> +
> +#if defined (MDE_CPU_IA32)
> +#define CPU_CODE_SEL LINEAR_CODE_SEL
> +#define CPU_DATA_SEL LINEAR_SEL
> +#elif defined (MDE_CPU_X64)
> +#define CPU_CODE_SEL LINEAR_CODE64_SEL
> +#define CPU_DATA_SEL LINEAR_SEL
> +#else
> +#error CPU type not supported for CPU GDT initialization!
> +#endif
> +
> +STATIC GDT_ENTRIES *mGdt = NULL;
> +
> +//
> +// Global descriptor table (GDT) Template
> +//
> +STATIC GDT_ENTRIES GdtTemplate = {
> + //
> + // NULL_SEL
> + //
> + {
> + 0x0, // limit 15:0
> + 0x0, // base 15:0
> + 0x0, // base 23:16
> + 0x0, // type
> + 0x0, // limit 19:16, flags
> + 0x0, // base 31:24
> + },
> + //
> + // NULL_SEL
> + //
> + {
> + 0x0, // limit 15:0
> + 0x0, // base 15:0
> + 0x0, // base 23:16
> + 0x0, // type
> + 0x0, // limit 19:16, flags
> + 0x0, // base 31:24
> + },
> + //
> + // LINEAR_CODE_SEL
> + //
> + {
> + 0x0FFFF, // limit 0xFFFFF
> + 0x0, // base 0
> + 0x0,
> + 0x09A, // present, ring 0, data, expand-up, writable
> + 0x0CF, // page-granular, 32-bit
> + 0x0,
> + },
> + //
> + // LINEAR_SEL
> + //
> + {
> + 0x0FFFF, // limit 0xFFFFF
> + 0x0, // base 0
> + 0x0,
> + 0x092, // present, ring 0, data, expand-up, writable
> + 0x0CF, // page-granular, 32-bit
> + 0x0,
> + },
> + //
> + // TASK_SEL
> + //
> + {
> + 0x0, // limit 0
> + 0x0, // base 0
> + 0x0,
> + 0x089, // ?
> + 0x080, // ?
> + 0x0,
> + },
> + //
> + // SPARE4_SEL
> + //
> + {
> + 0x0, // limit 0
> + 0x0, // base 0
> + 0x0,
> + 0x0, // present, ring 0, data, expand-up, writable
> + 0x0, // page-granular, 32-bit
> + 0x0,
> + },
> + //
> + // SPARE5_SEL
> + //
> + {
> + 0x0, // limit 0
> + 0x0, // base 0
> + 0x0,
> + 0x0, // present, ring 0, data, expand-up, writable
> + 0x0, // page-granular, 32-bit
> + 0x0,
> + },
> +};
> +
> +/**
> + Initialize Global Descriptor Table.
> +
> +**/
> +VOID
> +InitLinuxDescriptorTables (
> + VOID
> + )
> +{
> + //
> + // Allocate Runtime Data for the GDT
> + //
> + mGdt = AllocateRuntimePool (sizeof (GdtTemplate) + 8);
> + ASSERT (mGdt != NULL);
> + mGdt = ALIGN_POINTER (mGdt, 8);
> +
> + //
> + // Initialize all GDT entries
> + //
> + CopyMem (mGdt, &GdtTemplate, sizeof (GdtTemplate));
> +
> +}
> +
> +/**
> + Initialize Global Descriptor Table.
> +
> +**/
> +VOID
> +SetLinuxDescriptorTables (
> + VOID
> + )
> +{
> + IA32_DESCRIPTOR GdtPtr;
> + IA32_DESCRIPTOR IdtPtr;
> +
> + //
> + // Write GDT register
> + //
> + GdtPtr.Base = (UINT32)(UINTN)(VOID*) mGdt;
> + GdtPtr.Limit = (UINT16) (sizeof (GdtTemplate) - 1);
> + AsmWriteGdtr (&GdtPtr);
> +
> + IdtPtr.Base = (UINT32) 0;
> + IdtPtr.Limit = (UINT16) 0;
> + AsmWriteIdtr (&IdtPtr);
> +}
> +
> diff --git a/OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.h
> b/OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.h
> new file mode 100644
> index 0000000..49abb8c
> --- /dev/null
> +++ b/OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.h
> @@ -0,0 +1,48 @@
> +/** @file
> + Boot UEFI Linux.
> +
> + Copyright (c) 2008 - 2011, Intel Corporation. All rights reserved.<BR>
> +
> + This program and the accompanying materials
> + are licensed and made available under the terms and conditions of the BSD
> License
> + which accompanies this distribution. The full text of the license may be
> found at
> + http://opensource.org/licenses/bsd-license.php
> +
> + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
> IMPLIED.
> +
> +**/
> +
> +#ifndef _LOAD_LINUX_LIB_INCLUDED_
> +#define _LOAD_LINUX_LIB_INCLUDED_
> +
> +#include <Uefi.h>
> +#include <Library/LoadLinuxLib.h>
> +#include <Library/BaseLib.h>
> +#include <Library/BaseMemoryLib.h>
> +#include <Library/DebugLib.h>
> +#include <Library/MemoryAllocationLib.h>
> +#include <Library/UefiBootServicesTableLib.h>
> +#include <Library/UefiRuntimeServicesTableLib.h>
> +
> +#include <IndustryStandard/LinuxBzimage.h>
> +
> +VOID
> +EFIAPI
> +JumpToKernel (
> + VOID *KernelStart,
> + VOID *KernelBootParams
> + );
> +
> +VOID
> +InitLinuxDescriptorTables (
> + VOID
> + );
> +
> +VOID
> +SetLinuxDescriptorTables (
> + VOID
> + );
> +
> +#endif
> +
> diff --git a/OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.inf
> b/OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.inf
> new file mode 100644
> index 0000000..b8f987c
> --- /dev/null
> +++ b/OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.inf
> @@ -0,0 +1,50 @@
> +## @file
> +#
> +# Copyright (c) 2008 - 2012, Intel Corporation. All rights reserved.<BR>
> +#
> +# This program and the accompanying materials
> +# are licensed and made available under the terms and conditions of the BSD
> License
> +# which accompanies this distribution. The full text of the license may be
> found at
> +# http://opensource.org/licenses/bsd-license.php
> +#
> +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
> IMPLIED.
> +#
> +##
> +
> +[Defines]
> + INF_VERSION = 0x00010005
> + BASE_NAME = LoadLinuxLib
> + FILE_GUID = eaec1915-65a0-43a9-bf0b-a76438da61db
> + MODULE_TYPE = BASE
> + VERSION_STRING = 1.0
> + LIBRARY_CLASS = LoadLinuxLib
> +
> +#
> +# The following information is for reference only and not required by the
> build tools.
> +#
> +# VALID_ARCHITECTURES = IA32 X64
> +#
> +
> +[Sources.common]
> + Linux.c
> + LinuxGdt.c
> +
> +[Sources.IA32]
> + Ia32/JumpToKernel.asm
> + Ia32/JumpToKernel.S
> +
> +[Sources.X64]
> + X64/JumpToKernel.asm
> + X64/JumpToKernel.S
> +
> +[Packages]
> + MdePkg/MdePkg.dec
> + OvmfPkg/OvmfPkg.dec
> +
> +[LibraryClasses]
> + BaseLib
> + DebugLib
> + MemoryAllocationLib
> + BaseMemoryLib
> +
> diff --git a/OvmfPkg/Library/LoadLinuxLib/X64/JumpToKernel.S
> b/OvmfPkg/Library/LoadLinuxLib/X64/JumpToKernel.S
> new file mode 100644
> index 0000000..9ae755b
> --- /dev/null
> +++ b/OvmfPkg/Library/LoadLinuxLib/X64/JumpToKernel.S
> @@ -0,0 +1,30 @@
> +#------------------------------------------------------------------------------
> +#
> +# Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
> +#
> +# This program and the accompanying materials
> +# are licensed and made available under the terms and conditions of the BSD
> License
> +# which accompanies this distribution. The full text of the license may be
> found at
> +# http://opensource.org/licenses/bsd-license.php.
> +#
> +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
> IMPLIED.
> +#
> +#------------------------------------------------------------------------------
> +
> +ASM_GLOBAL ASM_PFX(JumpToKernel)
> +
> +#------------------------------------------------------------------------------
> +# VOID
> +# EFIAPI
> +# JumpToKernel (
> +# VOID *KernelStart, // %rcx
> +# VOID *KernelBootParams // %rdx
> +# );
> +#------------------------------------------------------------------------------
> +ASM_PFX(JumpToKernel):
> + movq %rdx, %rsi
> + addq $0x200, %rcx
> + callq %rcx
> + ret
> +
> diff --git a/OvmfPkg/Library/LoadLinuxLib/X64/JumpToKernel.asm
> b/OvmfPkg/Library/LoadLinuxLib/X64/JumpToKernel.asm
> new file mode 100644
> index 0000000..ed53321
> --- /dev/null
> +++ b/OvmfPkg/Library/LoadLinuxLib/X64/JumpToKernel.asm
> @@ -0,0 +1,34 @@
> +;------------------------------------------------------------------------------
> +;
> +; Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
> +;
> +; This program and the accompanying materials
> +; are licensed and made available under the terms and conditions of the BSD
> License
> +; which accompanies this distribution. The full text of the license may be
> found at
> +; http://opensource.org/licenses/bsd-license.php.
> +;
> +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
> IMPLIED.
> +;
> +;------------------------------------------------------------------------------
> +
> + .code
> +
> +;------------------------------------------------------------------------------
> +; VOID
> +; EFIAPI
> +; JumpToKernel (
> +; VOID *KernelStart, // rcx
> +; VOID *KernelBootParams // rdx
> +; );
> +;------------------------------------------------------------------------------
> +JumpToKernel PROC
> +
> + mov rsi, rdx
> + add rcx, 200h
> + call rcx
> + ret
> +
> +JumpToKernel ENDP
> +
> +END
> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
> index bd86572..c99cee3 100644
> --- a/OvmfPkg/OvmfPkgIa32.dsc
> +++ b/OvmfPkg/OvmfPkgIa32.dsc
> @@ -98,6 +98,7 @@
>
> SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.inf
> QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.inf
> VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf
> + LoadLinuxLib|OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.inf
> LockBoxLib|MdeModulePkg/Library/LockBoxNullLib/LockBoxNullLib.inf
>
> !ifdef $(SOURCE_DEBUG_ENABLE)
> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
> index 0a1609f..9173aae 100644
> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
> @@ -103,6 +103,7 @@
>
> SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.inf
> QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.inf
> VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf
> + LoadLinuxLib|OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.inf
> LockBoxLib|MdeModulePkg/Library/LockBoxNullLib/LockBoxNullLib.inf
>
> !ifdef $(SOURCE_DEBUG_ENABLE)
> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
> index b24d1b9..dce9ce1 100644
> --- a/OvmfPkg/OvmfPkgX64.dsc
> +++ b/OvmfPkg/OvmfPkgX64.dsc
> @@ -103,6 +103,7 @@
>
> SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.inf
> QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.inf
> VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf
> + LoadLinuxLib|OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.inf
> LockBoxLib|MdeModulePkg/Library/LockBoxNullLib/LockBoxNullLib.inf
>
> !ifdef $(SOURCE_DEBUG_ENABLE)
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel