mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-19 03:34:23 +02:00
Sean reports that having two DEC files under OvmfPkg violates the DEC spec: > An EDK II Package (directory) is a directory that contains an EDK II > package declaration (DEC) file. Only one DEC file is permitted per > directory. EDK II Packages cannot be nested within other EDK II > Packages. This issue originates from commit 656419f922c0 ("Add BhyvePkg, to support the bhyve hypervisor", 2020-07-31). Remedy the problem as follows. (Note that these steps are not split to multiple patches in order to keep Bhyve buildable across the transition.) (1) Delete "OvmfPkg/Bhyve/BhyvePkg.dec". (2) Point the [Packages] sections of the Bhyve-specific AcpiPlatformDxe, BhyveRfbDxe, and BhyveFwCtlLib INF files to "OvmfPkg.dec". (3) Migrate the artifacts that "BhyvePkg.dec" used to have on top of "OvmfPkg.dec" as follows: (3a) Merge the copyright notices from Rebecca Cran and Pluribus Networks into "OvmfPkg.dec". (3b) Merge the "BhyveFwCtlLib" class header definition into "OvmfPkg.dec". (3c) Merge value 0x2F8 for the fixed PcdDebugIoPort into "BhyvePkgX64.dsc". (4) Unnest the the Include/Library/ and Library/ subtrees from under OvmfPkg/Bhyve to the corresponding, preexistent subtrees in OvmfPkg. The goal is to keep the [Includes] section in the "OvmfPkg.dec" file unchanged, plus simplify references in "BhyvePkgX64.dsc". Non-library modules remain under "OvmfPkg/Bhyve/". (4a) The BhyveFwCtlLib class header, and sole instance, are already uniquely named, so their movements need not involve file renames. (4b) Rename the Bhyve-specific PlatformBootManagerLib instance to PlatformBootManagerLibBhyve, in additon to moving it, for distinguishing it from OvmfPkg's preexistent lib instance. Apply the name change to all three of the lib instance directory name, the INF file, and the BASE_NAME define in the INF file. (4c) Update lib class resolutions in "BhyvePkgX64.dsc" accordingly. (5) Replace the "ACPI table storage" FILE_GUID in "OvmfPkg/Bhyve/AcpiTables/AcpiTables.inf" with a new GUID, and open-code the "ACPI table storage" GUID in the "ACPITABLE" FDF rule instead, replacing $(NAMED_GUID). This step is necessary because CI requires unique FILE_GUIDs over all INF files, and OVMF's original "AcpiTables.inf" already uses the "ACPI table storage" GUID as FILE_GUID. Cc: Ard Biesheuvel <ard.biesheuvel@arm.com> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Philippe Mathieu-Daudé <philmd@redhat.com> Cc: Rebecca Cran <rebecca@bsdio.com> Cc: Sean Brogan <spbrogan@outlook.com> Fixes: 656419f922c047a3c48bd3f4ecea7d8e87d0b761 Reported-by: Sean Brogan <spbrogan@outlook.com> Signed-off-by: Laszlo Ersek <lersek@redhat.com> Message-Id: <20200801155024.16439-1-lersek@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: Rebecca Cran <rebecca@bsdio.com>
191 lines
4.5 KiB
C
191 lines
4.5 KiB
C
/** @file
|
|
Platform BDS customizations include file.
|
|
|
|
Copyright (c) 2020, Rebecca Cran <rebecca@bsdio.com>
|
|
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
Module Name:
|
|
|
|
BdsPlatform.h
|
|
|
|
Abstract:
|
|
|
|
Head file for BDS Platform specific code
|
|
|
|
**/
|
|
|
|
#ifndef _PLATFORM_SPECIFIC_BDS_PLATFORM_H_
|
|
#define _PLATFORM_SPECIFIC_BDS_PLATFORM_H_
|
|
|
|
|
|
#include <PiDxe.h>
|
|
|
|
#include <IndustryStandard/Pci.h>
|
|
#include <IndustryStandard/Acpi.h>
|
|
#include <IndustryStandard/SmBios.h>
|
|
#include <IndustryStandard/PeImage.h>
|
|
#include <IndustryStandard/Virtio095.h>
|
|
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/BaseMemoryLib.h>
|
|
#include <Library/UefiBootServicesTableLib.h>
|
|
#include <Library/UefiRuntimeServicesTableLib.h>
|
|
#include <Library/MemoryAllocationLib.h>
|
|
#include <Library/BaseLib.h>
|
|
#include <Library/PcdLib.h>
|
|
#include <Library/PciLib.h>
|
|
#include <Library/UefiBootManagerLib.h>
|
|
#include <Library/BootLogoLib.h>
|
|
#include <Library/HobLib.h>
|
|
#include <Library/UefiLib.h>
|
|
#include <Library/DxeServicesTableLib.h>
|
|
#include <Library/DevicePathLib.h>
|
|
#include <Library/IoLib.h>
|
|
#include <Library/NvVarsFileLib.h>
|
|
#include <Library/QemuFwCfgLib.h>
|
|
#include <Library/QemuFwCfgS3Lib.h>
|
|
#include <Library/QemuBootOrderLib.h>
|
|
|
|
#include <Protocol/Decompress.h>
|
|
#include <Protocol/PciIo.h>
|
|
#include <Protocol/FirmwareVolume2.h>
|
|
#include <Protocol/SimpleFileSystem.h>
|
|
#include <Protocol/PciRootBridgeIo.h>
|
|
#include <Protocol/S3SaveState.h>
|
|
#include <Protocol/DxeSmmReadyToLock.h>
|
|
#include <Protocol/LoadedImage.h>
|
|
|
|
#include <Guid/Acpi.h>
|
|
#include <Guid/SmBios.h>
|
|
#include <Guid/HobList.h>
|
|
#include <Guid/GlobalVariable.h>
|
|
#include <Guid/EventGroup.h>
|
|
#include <Guid/DebugAgentGuid.h>
|
|
|
|
#include <OvmfPlatforms.h>
|
|
|
|
extern EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[];
|
|
extern ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode;
|
|
extern ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode;
|
|
extern UART_DEVICE_PATH gUartDeviceNode;
|
|
extern VENDOR_DEVICE_PATH gTerminalTypeDeviceNode;
|
|
|
|
#define PCI_DEVICE_PATH_NODE(Func, Dev) \
|
|
{ \
|
|
{ \
|
|
HARDWARE_DEVICE_PATH, \
|
|
HW_PCI_DP, \
|
|
{ \
|
|
(UINT8) (sizeof (PCI_DEVICE_PATH)), \
|
|
(UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \
|
|
} \
|
|
}, \
|
|
(Func), \
|
|
(Dev) \
|
|
}
|
|
|
|
#define PNPID_DEVICE_PATH_NODE(PnpId) \
|
|
{ \
|
|
{ \
|
|
ACPI_DEVICE_PATH, \
|
|
ACPI_DP, \
|
|
{ \
|
|
(UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \
|
|
(UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \
|
|
}, \
|
|
}, \
|
|
EISA_PNP_ID((PnpId)), \
|
|
0 \
|
|
}
|
|
|
|
#define gPciIsaBridge \
|
|
PCI_DEVICE_PATH_NODE(0, 0x1f)
|
|
|
|
#define gP2PBridge \
|
|
PCI_DEVICE_PATH_NODE(0, 0x1e)
|
|
|
|
#define gPnpPs2Keyboard \
|
|
PNPID_DEVICE_PATH_NODE(0x0303)
|
|
|
|
#define gPnp16550ComPort \
|
|
PNPID_DEVICE_PATH_NODE(0x0501)
|
|
|
|
#define gUart \
|
|
{ \
|
|
{ \
|
|
MESSAGING_DEVICE_PATH, \
|
|
MSG_UART_DP, \
|
|
{ \
|
|
(UINT8) (sizeof (UART_DEVICE_PATH)), \
|
|
(UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) \
|
|
} \
|
|
}, \
|
|
0, \
|
|
115200, \
|
|
8, \
|
|
1, \
|
|
1 \
|
|
}
|
|
|
|
#define gPcAnsiTerminal \
|
|
{ \
|
|
{ \
|
|
MESSAGING_DEVICE_PATH, \
|
|
MSG_VENDOR_DP, \
|
|
{ \
|
|
(UINT8) (sizeof (VENDOR_DEVICE_PATH)), \
|
|
(UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) \
|
|
} \
|
|
}, \
|
|
DEVICE_PATH_MESSAGING_PC_ANSI \
|
|
}
|
|
|
|
#define gEndEntire \
|
|
{ \
|
|
END_DEVICE_PATH_TYPE, \
|
|
END_ENTIRE_DEVICE_PATH_SUBTYPE, \
|
|
{ \
|
|
END_DEVICE_PATH_LENGTH, \
|
|
0 \
|
|
} \
|
|
}
|
|
|
|
#define PCI_CLASS_SCC 0x07
|
|
#define PCI_SUBCLASS_SERIAL 0x00
|
|
#define PCI_IF_16550 0x02
|
|
#define IS_PCI_16550SERIAL(_p) IS_CLASS3 (_p, PCI_CLASS_SCC, PCI_SUBCLASS_SERIAL, PCI_IF_16550)
|
|
#define IS_PCI_ISA_PDECODE(_p) IS_CLASS3 (_p, PCI_CLASS_BRIDGE, PCI_CLASS_BRIDGE_ISA_PDECODE, 0)
|
|
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
|
UINTN ConnectType;
|
|
} PLATFORM_CONSOLE_CONNECT_ENTRY;
|
|
|
|
#define CONSOLE_OUT BIT0
|
|
#define CONSOLE_IN BIT1
|
|
#define STD_ERROR BIT2
|
|
extern PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[];
|
|
|
|
//
|
|
// Platform BDS Functions
|
|
//
|
|
|
|
VOID
|
|
PlatformInitializeConsole (
|
|
IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole
|
|
);
|
|
|
|
/**
|
|
Loads and boots UEFI Linux via the FwCfg interface.
|
|
|
|
@retval EFI_NOT_FOUND - The Linux kernel was not found
|
|
|
|
**/
|
|
EFI_STATUS
|
|
TryRunningQemuKernel (
|
|
VOID
|
|
);
|
|
|
|
#endif // _PLATFORM_SPECIFIC_BDS_PLATFORM_H_
|