OvmfPkg: fix DEC spec violation introduced by Bhyve addition
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 commit656419f922
("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:656419f922
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>
This commit is contained in:
committed by
mergify[bot]
parent
9001b750df
commit
e557442e3f
@@ -31,7 +31,7 @@
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
OvmfPkg/Bhyve/BhyvePkg.dec
|
||||
OvmfPkg/OvmfPkg.dec
|
||||
UefiCpuPkg/UefiCpuPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
|
@@ -14,7 +14,7 @@
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = PlatformAcpiTables
|
||||
FILE_GUID = 7E374E25-8E01-4FEE-87F2-390C23C606CD
|
||||
FILE_GUID = B4BA6241-936C-4485-A483-9FA832C758CA
|
||||
MODULE_TYPE = USER_DEFINED
|
||||
VERSION_STRING = 1.0
|
||||
|
||||
|
@@ -1,171 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2020, Rebecca Cran <rebecca@bsdio.com>
|
||||
# Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2014, Pluribus Networks, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
#
|
||||
##
|
||||
|
||||
[Defines]
|
||||
DEC_SPECIFICATION = 0x00010005
|
||||
PACKAGE_NAME = BhyvePkg
|
||||
PACKAGE_GUID = 178345e1-6ac0-439d-a3df-9abf70dccd57
|
||||
PACKAGE_VERSION = 0.1
|
||||
|
||||
[Includes]
|
||||
Include
|
||||
../Include
|
||||
|
||||
[LibraryClasses]
|
||||
## @libraryclass Save and restore variables using a file
|
||||
#
|
||||
NvVarsFileLib|Include/Library/NvVarsFileLib.h
|
||||
|
||||
## @libraryclass Provides services to work with PCI capabilities in PCI
|
||||
# config space.
|
||||
PciCapLib|Include/Library/PciCapLib.h
|
||||
|
||||
## @libraryclass Layered on top of PciCapLib, allows clients to plug an
|
||||
# EFI_PCI_IO_PROTOCOL backend into PciCapLib, for config
|
||||
# space access.
|
||||
PciCapPciIoLib|Include/Library/PciCapPciIoLib.h
|
||||
|
||||
## @libraryclass Layered on top of PciCapLib, allows clients to plug a
|
||||
# PciSegmentLib backend into PciCapLib, for config space
|
||||
# access.
|
||||
PciCapPciSegmentLib|Include/Library/PciCapPciSegmentLib.h
|
||||
|
||||
## @libraryclass Register a status code handler for printing the Boot
|
||||
# Manager's LoadImage() and StartImage() preparations, and
|
||||
# return codes, to the UEFI console.
|
||||
PlatformBmPrintScLib|Include/Library/PlatformBmPrintScLib.h
|
||||
|
||||
## @libraryclass Serialize (and deserialize) variables
|
||||
#
|
||||
SerializeVariablesLib|Include/Library/SerializeVariablesLib.h
|
||||
|
||||
## @libraryclass Access bhyve's firmware control interface
|
||||
#
|
||||
BhyveFwCtlLib|Include/Library/BhyveFwCtlLib.h
|
||||
|
||||
[Guids]
|
||||
gUefiOvmfPkgTokenSpaceGuid = {0x93bb96af, 0xb9f2, 0x4eb8, {0x94, 0x62, 0xe0, 0xba, 0x74, 0x56, 0x42, 0x36}}
|
||||
gOvmfPlatformConfigGuid = {0x7235c51c, 0x0c80, 0x4cab, {0x87, 0xac, 0x3b, 0x08, 0x4a, 0x63, 0x04, 0xb1}}
|
||||
gVirtioMmioTransportGuid = {0x837dca9e, 0xe874, 0x4d82, {0xb2, 0x9a, 0x23, 0xfe, 0x0e, 0x23, 0xd1, 0xe2}}
|
||||
gRootBridgesConnectedEventGroupGuid = {0x24a2d66f, 0xeedd, 0x4086, {0x90, 0x42, 0xf2, 0x6e, 0x47, 0x97, 0xee, 0x69}}
|
||||
|
||||
[Protocols]
|
||||
gVirtioDeviceProtocolGuid = {0xfa920010, 0x6785, 0x4941, {0xb6, 0xec, 0x49, 0x8c, 0x57, 0x9f, 0x16, 0x0a}}
|
||||
gIoMmuAbsentProtocolGuid = {0xf8775d50, 0x8abd, 0x4adf, {0x92, 0xac, 0x85, 0x3e, 0x51, 0xf6, 0xc8, 0xdc}}
|
||||
|
||||
[PcdsFixedAtBuild]
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfPeiMemFvBase|0x0|UINT32|0
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfPeiMemFvSize|0x0|UINT32|1
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvBase|0x0|UINT32|0x15
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvSize|0x0|UINT32|0x16
|
||||
|
||||
## This flag is used to control the destination port for PlatformDebugLibIoPort
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdDebugIoPort|0x2F8|UINT16|4
|
||||
|
||||
## When VirtioScsiDxe is instantiated for a HBA, the numbers of targets and
|
||||
# LUNs are retrieved from the host during virtio-scsi setup.
|
||||
# MdeModulePkg/Bus/Scsi/ScsiBusDxe then scans all MaxTarget * MaxLun
|
||||
# possible devices. This can take extremely long, for example with
|
||||
# MaxTarget=255 and MaxLun=16383. The *inclusive* constants below limit
|
||||
# MaxTarget and MaxLun, independently, should the host report higher values,
|
||||
# so that scanning the number of devices given by their product is still
|
||||
# acceptably fast.
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdVirtioScsiMaxTargetLimit|31|UINT16|6
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdVirtioScsiMaxLunLimit|7|UINT32|7
|
||||
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageEventLogBase|0x0|UINT32|0x8
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageEventLogSize|0x0|UINT32|0x9
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareFdSize|0x0|UINT32|0xa
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareBlockSize|0|UINT32|0xb
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageVariableBase|0x0|UINT32|0xc
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwSpareBase|0x0|UINT32|0xd
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwWorkingBase|0x0|UINT32|0xe
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFdBaseAddress|0x0|UINT32|0xf
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase|0x0|UINT32|0x11
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize|0x0|UINT32|0x12
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|0x0|UINT32|0x13
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize|0x0|UINT32|0x14
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfLockBoxStorageBase|0x0|UINT32|0x18
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfLockBoxStorageSize|0x0|UINT32|0x19
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdGuidedExtractHandlerTableSize|0x0|UINT32|0x1a
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDecompressionScratchEnd|0x0|UINT32|0x1f
|
||||
|
||||
## Pcd8259LegacyModeMask defines the default mask value for platform. This
|
||||
# value is determined.
|
||||
# 1) If platform only support pure UEFI, value should be set to 0xFFFF or
|
||||
# 0xFFFE; Because only clock interrupt is allowed in legacy mode in pure
|
||||
# UEFI platform.
|
||||
# 2) If platform install CSM and use thunk module:
|
||||
# a) If thunk call provided by CSM binary requires some legacy interrupt
|
||||
# support, the corresponding bit should be opened as 0.
|
||||
# For example, if keyboard interfaces provided CSM binary use legacy
|
||||
# keyboard interrupt in 8259 bit 1, then the value should be set to
|
||||
# 0xFFFC.
|
||||
# b) If all thunk call provied by CSM binary do not require legacy
|
||||
# interrupt support, value should be set to 0xFFFF or 0xFFFE.
|
||||
#
|
||||
# The default value of legacy mode mask could be changed by
|
||||
# EFI_LEGACY_8259_PROTOCOL->SetMask(). But it is rarely need change it
|
||||
# except some special cases such as when initializing the CSM binary, it
|
||||
# should be set to 0xFFFF to mask all legacy interrupt. Please restore the
|
||||
# original legacy mask value if changing is made for these special case.
|
||||
gUefiOvmfPkgTokenSpaceGuid.Pcd8259LegacyModeMask|0xFFFF|UINT16|0x3
|
||||
|
||||
## Pcd8259LegacyModeEdgeLevel defines the default edge level for legacy
|
||||
# mode's interrrupt controller.
|
||||
# For the corresponding bits, 0 = Edge triggered and 1 = Level triggered.
|
||||
gUefiOvmfPkgTokenSpaceGuid.Pcd8259LegacyModeEdgeLevel|0x0000|UINT16|0x5
|
||||
|
||||
|
||||
|
||||
[PcdsDynamic, PcdsDynamicEx]
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdEmuVariableEvent|0|UINT64|2
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashVariablesEnable|FALSE|BOOLEAN|0x10
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId|0|UINT16|0x1b
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated|FALSE|BOOLEAN|0x21
|
||||
|
||||
## The IO port aperture shared by all PCI root bridges.
|
||||
#
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdPciIoBase|0x0|UINT64|0x22
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdPciIoSize|0x0|UINT64|0x23
|
||||
|
||||
## The 32-bit MMIO aperture shared by all PCI root bridges.
|
||||
#
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio32Base|0x0|UINT64|0x24
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio32Size|0x0|UINT64|0x25
|
||||
|
||||
## The 64-bit MMIO aperture shared by all PCI root bridges.
|
||||
#
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Base|0x0|UINT64|0x26
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Size|0x0|UINT64|0x27
|
||||
|
||||
## The following setting controls how many megabytes we configure as TSEG on
|
||||
# Q35, for SMRAM purposes. Permitted defaults are: 1, 2, 8. Other defaults
|
||||
# cause undefined behavior. During boot, the PCD is updated by PlatformPei
|
||||
# to reflect the extended TSEG size, if one is advertized by QEMU.
|
||||
#
|
||||
# This PCD is only accessed if PcdSmmSmramRequire is TRUE (see below).
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes|8|UINT16|0x20
|
||||
|
||||
[PcdsFeatureFlag]
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdQemuBootOrderPciTranslation|TRUE|BOOLEAN|0x1c
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdQemuBootOrderMmioTranslation|FALSE|BOOLEAN|0x1d
|
||||
|
||||
## This feature flag enables SMM/SMRAM support. Note that it also requires
|
||||
# such support from the underlying QEMU instance; if that support is not
|
||||
# present, the firmware will reject continuing after a certain point.
|
||||
#
|
||||
# The flag also acts as a general "security switch"; when TRUE, many
|
||||
# components will change behavior, with the goal of preventing a malicious
|
||||
# runtime OS from tampering with firmware structures (special memory ranges
|
||||
# used by OVMF, the varstore pflash chip, LockBox etc).
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdSmmSmramRequire|FALSE|BOOLEAN|0x1e
|
||||
|
||||
[Protocols]
|
||||
gEfiLegacyBiosProtocolGuid = {0xdb9a1e3d, 0x45cb, 0x4abb, {0x85, 0x3b, 0xe5, 0x38, 0x7f, 0xdb, 0x2e, 0x2d}}
|
@@ -158,7 +158,7 @@
|
||||
SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.inf
|
||||
QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibNull.inf
|
||||
QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/BaseQemuFwCfgS3LibNull.inf
|
||||
BhyveFwCtlLib|OvmfPkg/Bhyve/Library/BhyveFwCtlLib/BhyveFwCtlLib.inf
|
||||
BhyveFwCtlLib|OvmfPkg/Library/BhyveFwCtlLib/BhyveFwCtlLib.inf
|
||||
VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf
|
||||
MemEncryptSevLib|OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevLib.inf
|
||||
LockBoxLib|OvmfPkg/Library/LockBoxLib/LockBoxBaseLib.inf
|
||||
@@ -343,7 +343,7 @@
|
||||
!else
|
||||
DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf
|
||||
!endif
|
||||
PlatformBootManagerLib|OvmfPkg/Bhyve/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
|
||||
PlatformBootManagerLib|OvmfPkg/Library/PlatformBootManagerLibBhyve/PlatformBootManagerLibBhyve.inf
|
||||
PlatformBmPrintScLib|OvmfPkg/Library/PlatformBmPrintScLib/PlatformBmPrintScLib.inf
|
||||
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib.inf
|
||||
LockBoxLib|OvmfPkg/Library/LockBoxLib/LockBoxDxeLib.inf
|
||||
@@ -498,6 +498,7 @@
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdConInConnectOnDemand|FALSE
|
||||
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVendor|L"BHYVE"
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdDebugIoPort|0x2F8
|
||||
|
||||
################################################################################
|
||||
#
|
||||
|
@@ -459,7 +459,7 @@ FILE FV_IMAGE = 9E21FD93-9C72-4c15-8C4B-E77F1DB2D792 {
|
||||
}
|
||||
|
||||
[Rule.Common.USER_DEFINED.ACPITABLE]
|
||||
FILE FREEFORM = $(NAMED_GUID) {
|
||||
FILE FREEFORM = 7E374E25-8E01-4FEE-87F2-390C23C606CD {
|
||||
RAW ACPI |.acpi
|
||||
RAW ASL |.aml
|
||||
}
|
||||
|
@@ -37,7 +37,7 @@
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
OvmfPkg/Bhyve/BhyvePkg.dec
|
||||
OvmfPkg/OvmfPkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
|
||||
|
||||
|
@@ -1,47 +0,0 @@
|
||||
/** @file
|
||||
bhyve firmware configuration access
|
||||
|
||||
Copyright (c) 2020, Rebecca Cran <rebecca@bsdio.com>
|
||||
Copyright (c) 2015 Nahanni Systems
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#ifndef __BHYVE_FW_CTL_LIB__
|
||||
#define __BHYVE_FW_CTL_LIB__
|
||||
|
||||
/**
|
||||
Sysctl-like interface to read host information via a dot-separated
|
||||
ASCII OID.
|
||||
|
||||
The information is copied into the buffer specified by Item. The
|
||||
size of the buffer is given by the location specified by Size
|
||||
before the call, and that location gives the amount of data copied
|
||||
after a successfull call, and after a call that returns a truncated
|
||||
value with an error return of RETURN_BUFFER_TOO_SMALL.
|
||||
|
||||
The size of the available data can be determined by passing a NULL
|
||||
argument for Item. The size will be returned in the location pointed
|
||||
to by Size.
|
||||
|
||||
@param[] Name - ASCII OID name
|
||||
@param[] Data - return buffer pointer
|
||||
@param[] Size - pointer to length
|
||||
|
||||
@return RETURN_SUCCESS Valid data/len returned.
|
||||
RETURN_UNSUPPORTED f/w interface not present.
|
||||
RETURN_NOT_FOUND OID not found.
|
||||
RETURN_BUFFER_TOO_SMALL Return message truncated.
|
||||
RETURN_INVALID_PARAMETER Buffer too large
|
||||
RETURN_PROTOCOL_ERROR Unknown error from host
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
BhyveFwCtlGet (
|
||||
IN CONST CHAR8 *Name,
|
||||
OUT VOID *Item,
|
||||
IN OUT UINTN *Size
|
||||
);
|
||||
|
||||
#endif
|
@@ -1,426 +0,0 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2020, Rebecca Cran <rebecca@bsdio.com>
|
||||
Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (C) 2013, Red Hat, Inc.
|
||||
Copyright (c) 2015, Nahanni Systems.
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "Uefi.h"
|
||||
#include <Library/BaseLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/IoLib.h>
|
||||
#include <Library/BhyveFwCtlLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
|
||||
#define FW_PORT 0x510
|
||||
#define FW_IPORT 0x511
|
||||
|
||||
/* Transport protocol basic operations */
|
||||
#define OP_NULL 1
|
||||
#define OP_ECHO 2
|
||||
#define OP_GET 3
|
||||
#define OP_GET_LEN 4
|
||||
#define OP_SET 5
|
||||
|
||||
/* Transport protocol error returns */
|
||||
#define T_ESUCCESS 0
|
||||
#define T_ENOENT 2
|
||||
#define T_E2BIG 7
|
||||
#define T_EMSGSIZE 40
|
||||
|
||||
#define ROUNDUP(x, y) ((((x)+((y)-1))/(y))*(y))
|
||||
|
||||
STATIC CONST CHAR8 mBhyveSig[4] = { 'B', 'H', 'Y', 'V' };
|
||||
|
||||
STATIC BOOLEAN mBhyveFwCtlSupported = FALSE;
|
||||
|
||||
STATIC INTN mBhyveFwCtlTxid = 0xa5;
|
||||
|
||||
/* XXX Maybe a better inbuilt version of this ? */
|
||||
struct BIoVec {
|
||||
VOID *Base;
|
||||
UINTN Len;
|
||||
};
|
||||
|
||||
struct MsgRxHdr {
|
||||
UINT32 Sz;
|
||||
UINT32 Op;
|
||||
UINT32 TxId;
|
||||
UINT32 Err;
|
||||
};
|
||||
|
||||
STATIC
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
BhyveFwCtl_CvtErr (
|
||||
IN UINT32 errno
|
||||
)
|
||||
{
|
||||
RETURN_STATUS Status;
|
||||
|
||||
switch (errno) {
|
||||
case T_ESUCCESS:
|
||||
Status = RETURN_SUCCESS;
|
||||
break;
|
||||
case T_ENOENT:
|
||||
Status = RETURN_NOT_FOUND;
|
||||
break;
|
||||
case T_E2BIG:
|
||||
Status = RETURN_INVALID_PARAMETER;
|
||||
break;
|
||||
case T_EMSGSIZE:
|
||||
Status = RETURN_BUFFER_TOO_SMALL;
|
||||
break;
|
||||
default:
|
||||
Status = RETURN_PROTOCOL_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
STATIC
|
||||
UINTN
|
||||
EFIAPI
|
||||
BIov_WLen (
|
||||
IN struct BIoVec b[]
|
||||
)
|
||||
{
|
||||
UINTN i;
|
||||
UINTN tLen;
|
||||
|
||||
tLen = 0;
|
||||
|
||||
if (b != NULL) {
|
||||
for (i = 0; b[i].Base != NULL; i++)
|
||||
tLen += ROUNDUP (b[i].Len, sizeof(UINT32));
|
||||
}
|
||||
|
||||
return tLen;
|
||||
}
|
||||
|
||||
/**
|
||||
Utility to send 1-3 bhyes of input as a 4-byte value
|
||||
with trailing zeroes.
|
||||
**/
|
||||
STATIC
|
||||
UINT32
|
||||
BIov_Send_Rem (
|
||||
IN UINT32 *Data,
|
||||
IN UINTN Len
|
||||
)
|
||||
{
|
||||
union {
|
||||
UINT8 c[4];
|
||||
UINT32 w;
|
||||
} u;
|
||||
UINT8 *cdata;
|
||||
UINTN i;
|
||||
|
||||
cdata = (UINT8 *)Data;
|
||||
u.w = 0;
|
||||
|
||||
for (i = 0; i < Len; i++)
|
||||
u.c[i] = *cdata++;
|
||||
|
||||
return u.w;
|
||||
}
|
||||
|
||||
/**
|
||||
Send a block of data out the i/o port as 4-byte quantities,
|
||||
appending trailing zeroes on the last if required.
|
||||
**/
|
||||
STATIC
|
||||
VOID
|
||||
BIov_Send (
|
||||
IN char *Data,
|
||||
IN UINTN Len
|
||||
)
|
||||
{
|
||||
UINT32 *LData;
|
||||
|
||||
LData = (UINT32 *)Data;
|
||||
|
||||
while (Len > sizeof(UINT32)) {
|
||||
IoWrite32 (FW_PORT, *LData++);
|
||||
Len -= sizeof(UINT32);
|
||||
}
|
||||
|
||||
if (Len > 0) {
|
||||
IoWrite32 (FW_PORT, BIov_Send_Rem (LData, Len));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Send data described by an array of iovecs out the i/o port.
|
||||
**/
|
||||
STATIC
|
||||
VOID
|
||||
BIov_SendAll (
|
||||
IN struct BIoVec b[]
|
||||
)
|
||||
{
|
||||
INTN i;
|
||||
|
||||
if (b != NULL) {
|
||||
for (i = 0; b[i].Base; i++) {
|
||||
BIov_Send (b[i].Base, b[i].Len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Prepend the transport header to a block of data and send.
|
||||
**/
|
||||
STATIC
|
||||
VOID
|
||||
EFIAPI
|
||||
BhyveFwCtl_MsgSend(
|
||||
IN UINTN OpCode,
|
||||
IN struct BIoVec Data[]
|
||||
)
|
||||
{
|
||||
struct BIoVec hIov[4];
|
||||
UINT32 Hdr[3];
|
||||
UINTN i;
|
||||
|
||||
/* Set up header as an iovec */
|
||||
for (i = 0; i < 3; i++) {
|
||||
hIov[i].Base = &Hdr[i];
|
||||
hIov[i].Len = sizeof(Hdr[0]);
|
||||
}
|
||||
hIov[i].Base = NULL;
|
||||
hIov[i].Len = 0;
|
||||
|
||||
/* Initialize header */
|
||||
Hdr[0] = BIov_WLen (hIov) + BIov_WLen (Data);
|
||||
Hdr[1] = OpCode;
|
||||
Hdr[2] = mBhyveFwCtlTxid;
|
||||
|
||||
/* Send header and data */
|
||||
BIov_SendAll (hIov);
|
||||
BIov_SendAll (Data);
|
||||
}
|
||||
|
||||
/**
|
||||
Read a transport response and optional data from the i/o port.
|
||||
**/
|
||||
STATIC
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
BhyveFwCtl_MsgRecv(
|
||||
OUT struct MsgRxHdr *Rhdr,
|
||||
OUT struct BIoVec Data[]
|
||||
)
|
||||
{
|
||||
RETURN_STATUS Status;
|
||||
UINT32 *Dp;
|
||||
UINT32 Rd;
|
||||
UINTN remLen;
|
||||
INTN oLen, xLen;
|
||||
|
||||
Rd = IoRead32 (FW_PORT);
|
||||
if (Rd < sizeof(struct MsgRxHdr)) {
|
||||
;
|
||||
}
|
||||
|
||||
/* Read in header and setup initial error */
|
||||
Rhdr->Sz = Rd;
|
||||
Rhdr->Op = IoRead32 (FW_PORT);
|
||||
Rhdr->TxId = IoRead32 (FW_PORT);
|
||||
Rhdr->Err = IoRead32 (FW_PORT);
|
||||
|
||||
/* Convert transport errno into UEFI error status */
|
||||
Status = BhyveFwCtl_CvtErr(Rhdr->Err);
|
||||
|
||||
remLen = Rd - sizeof(struct MsgRxHdr);
|
||||
xLen = 0;
|
||||
|
||||
/*
|
||||
* A few cases to handle:
|
||||
* - the user didn't supply a read buffer
|
||||
* - the buffer is too small for the response
|
||||
* - the response is zero-length
|
||||
*/
|
||||
if (Data != NULL) {
|
||||
Dp = (UINT32 *)Data[0].Base;
|
||||
oLen = remLen;
|
||||
if (remLen > Data[0].Len) {
|
||||
Status = RETURN_BUFFER_TOO_SMALL;
|
||||
xLen = remLen - Data[0].Len;
|
||||
oLen = remLen = Data[0].Len;
|
||||
}
|
||||
while (remLen > 0) {
|
||||
*Dp++ = IoRead32 (FW_PORT);
|
||||
remLen -= sizeof(UINT32);
|
||||
}
|
||||
Data[0].Len = oLen;
|
||||
} else {
|
||||
/* No user data, but data returned - drop */
|
||||
if (remLen > 0) {
|
||||
Status = RETURN_BUFFER_TOO_SMALL;
|
||||
xLen = remLen;
|
||||
}
|
||||
}
|
||||
|
||||
/* Drop additional data */
|
||||
while (xLen > 0) {
|
||||
(void) IoRead32 (FW_PORT);
|
||||
xLen -= sizeof(UINT32);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
STATIC
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
BhyveFwCtl_Msg(
|
||||
IN UINTN OpCode,
|
||||
IN struct BIoVec Sdata[],
|
||||
OUT struct BIoVec Rdata[]
|
||||
)
|
||||
{
|
||||
struct MsgRxHdr Rh;
|
||||
RETURN_STATUS Status;
|
||||
|
||||
Status = RETURN_SUCCESS;
|
||||
|
||||
BhyveFwCtl_MsgSend (OpCode, Sdata);
|
||||
Status = BhyveFwCtl_MsgRecv (&Rh, Rdata);
|
||||
|
||||
mBhyveFwCtlTxid++;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
STATIC
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
BhyveFwCtlGetLen (
|
||||
IN CONST CHAR8 *Name,
|
||||
IN OUT UINTN *Size
|
||||
)
|
||||
{
|
||||
struct BIoVec Req[2], Resp[2];
|
||||
RETURN_STATUS Status;
|
||||
|
||||
Req[0].Base = (VOID *)Name;
|
||||
Req[0].Len = AsciiStrLen (Name) + 1;
|
||||
Req[1].Base = NULL;
|
||||
|
||||
Resp[0].Base = Size;
|
||||
Resp[0].Len = sizeof(UINTN);
|
||||
Resp[1].Base = NULL;
|
||||
|
||||
Status = BhyveFwCtl_Msg (OP_GET_LEN, Req, Resp);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
#define FMAXSZ 1024
|
||||
STATIC struct {
|
||||
UINT64 fSize;
|
||||
UINT32 fData[FMAXSZ];
|
||||
} FwGetvalBuf;
|
||||
|
||||
STATIC
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
BhyveFwCtlGetVal (
|
||||
IN CONST CHAR8 *Name,
|
||||
OUT VOID *Item,
|
||||
IN OUT UINTN *Size
|
||||
)
|
||||
{
|
||||
struct BIoVec Req[2], Resp[2];
|
||||
RETURN_STATUS Status;
|
||||
|
||||
/* Make sure temp buffer is larger than passed-in size */
|
||||
if (*Size > sizeof(FwGetvalBuf.fData))
|
||||
return RETURN_INVALID_PARAMETER;
|
||||
|
||||
Req[0].Base = (VOID *)Name;
|
||||
Req[0].Len = AsciiStrLen(Name) + 1;
|
||||
Req[1].Base = NULL;
|
||||
|
||||
Resp[0].Base = &FwGetvalBuf;
|
||||
Resp[0].Len = sizeof(UINT64) + *Size;
|
||||
Resp[1].Base = NULL;
|
||||
|
||||
Status = BhyveFwCtl_Msg (OP_GET, Req, Resp);
|
||||
|
||||
/*
|
||||
* Copy out data on success (or on a truncated message).
|
||||
* XXX This step can be eliminted with Msg() supporting
|
||||
* multiple iovecs.
|
||||
*/
|
||||
if ((Status == RETURN_SUCCESS) || (Status == RETURN_BUFFER_TOO_SMALL)) {
|
||||
*Size = FwGetvalBuf.fSize;
|
||||
CopyMem (Item, FwGetvalBuf.fData, *Size);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Front end to the internal GET_LEN and GET protocols
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
BhyveFwCtlGet (
|
||||
IN CONST CHAR8 *Name,
|
||||
OUT VOID *Item,
|
||||
IN OUT UINTN *Size
|
||||
)
|
||||
{
|
||||
RETURN_STATUS Status;
|
||||
|
||||
if (mBhyveFwCtlSupported == FALSE)
|
||||
return RETURN_UNSUPPORTED;
|
||||
|
||||
if (Item == NULL) {
|
||||
Status = BhyveFwCtlGetLen (Name, Size);
|
||||
} else {
|
||||
Status = BhyveFwCtlGetVal (Name, Item, Size);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Library initialization. Probe the host to see if the f/w ctl
|
||||
interface is supported.
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
BhyveFwCtlInitialize (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
UINTN i;
|
||||
UINT8 ch;
|
||||
|
||||
DEBUG ((DEBUG_INFO, "FwCtlInitialize\n"));
|
||||
|
||||
IoWrite16 (FW_PORT, 0x0000);
|
||||
for (i = 0; i < 4; i++) {
|
||||
ch = IoRead8 (FW_IPORT);
|
||||
if (ch != mBhyveSig[i]) {
|
||||
DEBUG ((DEBUG_INFO, "Host f/w sig mismatch %c/%c\n", ch, mBhyveSig[i]));
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
mBhyveFwCtlSupported = TRUE;
|
||||
|
||||
return RETURN_SUCCESS;
|
||||
}
|
@@ -1,41 +0,0 @@
|
||||
## @file
|
||||
#
|
||||
# Copyright (C) 2020, Rebecca Cran <rebecca@bsdio.com>
|
||||
# Copyright (C) 2015 Nahanni Systems
|
||||
# Copyright (c) 2008 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
#
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = BhyveFwCtlLib
|
||||
FILE_GUID = fd982666-67f9-11e5-a42a-0025908602f6
|
||||
MODULE_TYPE = BASE
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = BhyveFwCtlLib|PEIM DXE_DRIVER DXE_RUNTIME_DRIVER
|
||||
|
||||
CONSTRUCTOR = BhyveFwCtlInitialize
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = X64
|
||||
#
|
||||
|
||||
[Sources]
|
||||
BhyveFwCtlLib.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
OvmfPkg/Bhyve/BhyvePkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
BaseLib
|
||||
BaseMemoryLib
|
||||
DebugLib
|
||||
IoLib
|
||||
MemoryAllocationLib
|
||||
IntrinsicLib
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,190 +0,0 @@
|
||||
/** @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_
|
@@ -1,75 +0,0 @@
|
||||
## @file
|
||||
# Platform BDS customizations library.
|
||||
#
|
||||
# Copyright (c) 2020, Rebecca Cran <rebecca@bsdio.com>
|
||||
# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
#
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = PlatformBootManagerLib
|
||||
FILE_GUID = b0de5f0d-f676-42da-8d00-86997ee0dbb4
|
||||
MODULE_TYPE = DXE_DRIVER
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = PlatformBootManagerLib|DXE_DRIVER
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 EBC
|
||||
#
|
||||
|
||||
[Sources]
|
||||
BdsPlatform.c
|
||||
PlatformData.c
|
||||
BdsPlatform.h
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
SourceLevelDebugPkg/SourceLevelDebugPkg.dec
|
||||
OvmfPkg/OvmfPkg.dec
|
||||
SecurityPkg/SecurityPkg.dec
|
||||
ShellPkg/ShellPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
BaseLib
|
||||
MemoryAllocationLib
|
||||
UefiBootServicesTableLib
|
||||
BaseMemoryLib
|
||||
DebugLib
|
||||
PcdLib
|
||||
UefiBootManagerLib
|
||||
BootLogoLib
|
||||
DevicePathLib
|
||||
PciLib
|
||||
NvVarsFileLib
|
||||
ReportStatusCodeLib
|
||||
UefiLib
|
||||
PlatformBmPrintScLib
|
||||
Tcg2PhysicalPresenceLib
|
||||
|
||||
[Pcd]
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdEmuVariableEvent
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashVariablesEnable
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId
|
||||
gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut
|
||||
|
||||
[Pcd.IA32, Pcd.X64]
|
||||
gEfiMdePkgTokenSpaceGuid.PcdFSBClock
|
||||
|
||||
[Protocols]
|
||||
gEfiDecompressProtocolGuid
|
||||
gEfiPciRootBridgeIoProtocolGuid
|
||||
gEfiS3SaveStateProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
|
||||
gEfiDxeSmmReadyToLockProtocolGuid # PROTOCOL SOMETIMES_PRODUCED
|
||||
gEfiLoadedImageProtocolGuid # PROTOCOL SOMETIMES_PRODUCED
|
||||
gEfiFirmwareVolume2ProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
|
||||
|
||||
[Guids]
|
||||
gEfiEndOfDxeEventGroupGuid
|
||||
gRootBridgesConnectedEventGroupGuid
|
||||
gUefiShellFileGuid
|
@@ -1,171 +0,0 @@
|
||||
/** @file
|
||||
Defined the platform specific device path which will be used by
|
||||
platform Bbd to perform the platform policy connect.
|
||||
|
||||
Copyright (c) 2020, Rebecca Cran <rebecca@bsdio.com>
|
||||
Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "BdsPlatform.h"
|
||||
#include <Guid/QemuRamfb.h>
|
||||
|
||||
//
|
||||
// Debug Agent UART Device Path structure
|
||||
//
|
||||
#pragma pack(1)
|
||||
typedef struct {
|
||||
VENDOR_DEVICE_PATH VendorHardware;
|
||||
UART_DEVICE_PATH Uart;
|
||||
VENDOR_DEVICE_PATH TerminalType;
|
||||
EFI_DEVICE_PATH_PROTOCOL End;
|
||||
} VENDOR_UART_DEVICE_PATH;
|
||||
#pragma pack()
|
||||
|
||||
//
|
||||
// USB Keyboard Device Path structure
|
||||
//
|
||||
#pragma pack (1)
|
||||
typedef struct {
|
||||
USB_CLASS_DEVICE_PATH Keyboard;
|
||||
EFI_DEVICE_PATH_PROTOCOL End;
|
||||
} USB_KEYBOARD_DEVICE_PATH;
|
||||
#pragma pack ()
|
||||
|
||||
//
|
||||
// QemuRamfb Device Path structure
|
||||
//
|
||||
#pragma pack (1)
|
||||
typedef struct {
|
||||
VENDOR_DEVICE_PATH Vendor;
|
||||
ACPI_ADR_DEVICE_PATH AcpiAdr;
|
||||
EFI_DEVICE_PATH_PROTOCOL End;
|
||||
} VENDOR_RAMFB_DEVICE_PATH;
|
||||
#pragma pack ()
|
||||
|
||||
ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode = gPnpPs2Keyboard;
|
||||
ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode = gPnp16550ComPort;
|
||||
UART_DEVICE_PATH gUartDeviceNode = gUart;
|
||||
VENDOR_DEVICE_PATH gTerminalTypeDeviceNode = gPcAnsiTerminal;
|
||||
|
||||
//
|
||||
// Platform specific keyboard device path
|
||||
//
|
||||
|
||||
|
||||
//
|
||||
// Debug Agent UART Device Path
|
||||
//
|
||||
VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = {
|
||||
{
|
||||
{
|
||||
HARDWARE_DEVICE_PATH,
|
||||
HW_VENDOR_DP,
|
||||
{
|
||||
(UINT8) (sizeof (VENDOR_DEVICE_PATH)),
|
||||
(UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
|
||||
}
|
||||
},
|
||||
EFI_DEBUG_AGENT_GUID,
|
||||
},
|
||||
{
|
||||
{
|
||||
MESSAGING_DEVICE_PATH,
|
||||
MSG_UART_DP,
|
||||
{
|
||||
(UINT8) (sizeof (UART_DEVICE_PATH)),
|
||||
(UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8)
|
||||
}
|
||||
},
|
||||
0, // Reserved
|
||||
0, // BaudRate - Default
|
||||
0, // DataBits - Default
|
||||
0, // Parity - Default
|
||||
0, // StopBits - Default
|
||||
},
|
||||
gPcAnsiTerminal,
|
||||
gEndEntire
|
||||
};
|
||||
|
||||
STATIC USB_KEYBOARD_DEVICE_PATH gUsbKeyboardDevicePath = {
|
||||
{
|
||||
{
|
||||
MESSAGING_DEVICE_PATH,
|
||||
MSG_USB_CLASS_DP,
|
||||
{
|
||||
(UINT8)sizeof (USB_CLASS_DEVICE_PATH),
|
||||
(UINT8)(sizeof (USB_CLASS_DEVICE_PATH) >> 8)
|
||||
}
|
||||
},
|
||||
0xFFFF, // VendorId: any
|
||||
0xFFFF, // ProductId: any
|
||||
3, // DeviceClass: HID
|
||||
1, // DeviceSubClass: boot
|
||||
1 // DeviceProtocol: keyboard
|
||||
},
|
||||
gEndEntire
|
||||
};
|
||||
|
||||
STATIC VENDOR_RAMFB_DEVICE_PATH gQemuRamfbDevicePath = {
|
||||
{
|
||||
{
|
||||
HARDWARE_DEVICE_PATH,
|
||||
HW_VENDOR_DP,
|
||||
{
|
||||
(UINT8) (sizeof (VENDOR_DEVICE_PATH)),
|
||||
(UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
|
||||
}
|
||||
},
|
||||
QEMU_RAMFB_GUID,
|
||||
},
|
||||
{
|
||||
{
|
||||
ACPI_DEVICE_PATH,
|
||||
ACPI_ADR_DP,
|
||||
{
|
||||
(UINT8) (sizeof (ACPI_ADR_DEVICE_PATH)),
|
||||
(UINT8) ((sizeof (ACPI_ADR_DEVICE_PATH)) >> 8)
|
||||
}
|
||||
},
|
||||
ACPI_DISPLAY_ADR (
|
||||
1, // DeviceIdScheme
|
||||
0, // HeadId
|
||||
0, // NonVgaOutput
|
||||
1, // BiosCanDetect
|
||||
0, // VendorInfo
|
||||
ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL, // Type
|
||||
0, // Port
|
||||
0 // Index
|
||||
),
|
||||
},
|
||||
gEndEntire
|
||||
};
|
||||
|
||||
//
|
||||
// Predefined platform default console device path
|
||||
//
|
||||
PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[] = {
|
||||
{
|
||||
(EFI_DEVICE_PATH_PROTOCOL *) &gDebugAgentUartDevicePath,
|
||||
(CONSOLE_OUT | CONSOLE_IN | STD_ERROR)
|
||||
},
|
||||
{
|
||||
(EFI_DEVICE_PATH_PROTOCOL *)&gUsbKeyboardDevicePath,
|
||||
CONSOLE_IN
|
||||
},
|
||||
{
|
||||
(EFI_DEVICE_PATH_PROTOCOL *)&gQemuRamfbDevicePath,
|
||||
CONSOLE_OUT
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
0
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
// Predefined platform connect sequence
|
||||
//
|
||||
EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[] = { NULL };
|
||||
|
Reference in New Issue
Block a user