mirror of
https://github.com/acidanthera/audk.git
synced 2025-04-08 17:05:09 +02:00
RFC: https://bugzilla.tianocore.org/show_bug.cgi?id=3429 In TDX when host VMM creates a new guest TD, some initial set of TD-private pages are added using the TDH.MEM.PAGE.ADD function. These pages typically contain Virtual BIOS code and data along with some clear pages for stacks and heap. In the meanwhile, some configuration data need be measured by host VMM. Tdx Metadata is designed for this purpose to indicate host VMM how to do the above tasks. More detailed information of Metadata is in [TDVF] Section 11. Tdx Metadata describes the information about the image for VMM use. For example, the base address and length of the TdHob, Bfv, Cfv, etc. The offset of the Metadata is stored in a GUID-ed structure which is appended in the GUID-ed chain from a fixed GPA (0xffffffd0). In this commit there are 2 new definitions of BFV & CFV. Tdx Virtual Firmware (TDVF) includes one Firmware Volume (FV) known as the Boot Firmware Volume (BFV). The FV format is defined in the UEFI Platform Initialization (PI) spec. BFV includes all TDVF components required during boot. TDVF also include a configuration firmware volume (CFV) that is separated from the BFV. The reason is because the CFV is measured in RTMR, while the BFV is measured in MRTD. In practice BFV is the code part of Ovmf image (OVMF_CODE.fd). CFV is the vars part of Ovmf image (OVMF_VARS.fd). Since AMD SEV has already defined some SEV specific memory region in MEMFD. TDX re-uses some of the memory regions defined by SEV. - MailBox : PcdOvmfSecGhcbBackupBase|PcdOvmfSecGhcbBackupSize - TdHob : PcdOvmfSecGhcbBase|PcdOvmfSecGhcbSize [TDVF] https://software.intel.com/content/dam/develop/external/us/en/ documents/tdx-virtual-firmware-design-guide-rev-1.pdf Cc: Ard Biesheuvel <ardb+tianocore@kernel.org> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Brijesh Singh <brijesh.singh@amd.com> Cc: Erdem Aktas <erdemaktas@google.com> Cc: James Bottomley <jejb@linux.ibm.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Tom Lendacky <thomas.lendacky@amd.com> Acked-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Min Xu <min.m.xu@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
107 lines
4.6 KiB
PHP
107 lines
4.6 KiB
PHP
## @file
|
|
# FDF include file that defines the main macros and sets the dependent PCDs.
|
|
#
|
|
# Copyright (C) 2014, Red Hat, Inc.
|
|
# Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
|
|
#
|
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
#
|
|
##
|
|
|
|
DEFINE BLOCK_SIZE = 0x1000
|
|
DEFINE VARS_OFFSET = 0
|
|
|
|
#
|
|
# A firmware binary built with FD_SIZE_IN_KB=1024, and a firmware binary built
|
|
# with FD_SIZE_IN_KB=2048, use the same variable store layout.
|
|
#
|
|
# Setting FD_SIZE_IN_KB to 4096 results in a different (much larger) variable
|
|
# store structure that is incompatible with both of the above-mentioned
|
|
# firmware binaries.
|
|
#
|
|
!if ($(FD_SIZE_IN_KB) == 1024) || ($(FD_SIZE_IN_KB) == 2048)
|
|
DEFINE VARS_SIZE = 0x20000
|
|
DEFINE VARS_BLOCKS = 0x20
|
|
DEFINE VARS_LIVE_SIZE = 0xE000
|
|
DEFINE VARS_SPARE_SIZE = 0x10000
|
|
!endif
|
|
|
|
!if $(FD_SIZE_IN_KB) == 1024
|
|
DEFINE FW_BASE_ADDRESS = 0xFFF00000
|
|
DEFINE FW_SIZE = 0x00100000
|
|
DEFINE FW_BLOCKS = 0x100
|
|
DEFINE CODE_BASE_ADDRESS = 0xFFF20000
|
|
DEFINE CODE_SIZE = 0x000E0000
|
|
DEFINE CODE_BLOCKS = 0xE0
|
|
DEFINE FVMAIN_SIZE = 0x000CC000
|
|
DEFINE SECFV_OFFSET = 0x000EC000
|
|
DEFINE SECFV_SIZE = 0x14000
|
|
!endif
|
|
|
|
!if $(FD_SIZE_IN_KB) == 2048
|
|
DEFINE FW_BASE_ADDRESS = 0xFFE00000
|
|
DEFINE FW_SIZE = 0x00200000
|
|
DEFINE FW_BLOCKS = 0x200
|
|
DEFINE CODE_BASE_ADDRESS = 0xFFE20000
|
|
DEFINE CODE_SIZE = 0x001E0000
|
|
DEFINE CODE_BLOCKS = 0x1E0
|
|
DEFINE FVMAIN_SIZE = 0x001AC000
|
|
DEFINE SECFV_OFFSET = 0x001CC000
|
|
DEFINE SECFV_SIZE = 0x34000
|
|
!endif
|
|
|
|
!if $(FD_SIZE_IN_KB) == 4096
|
|
DEFINE VARS_SIZE = 0x84000
|
|
DEFINE VARS_BLOCKS = 0x84
|
|
DEFINE VARS_LIVE_SIZE = 0x40000
|
|
DEFINE VARS_SPARE_SIZE = 0x42000
|
|
|
|
DEFINE FW_BASE_ADDRESS = 0xFFC00000
|
|
DEFINE FW_SIZE = 0x00400000
|
|
DEFINE FW_BLOCKS = 0x400
|
|
DEFINE CODE_BASE_ADDRESS = 0xFFC84000
|
|
DEFINE CODE_SIZE = 0x0037C000
|
|
DEFINE CODE_BLOCKS = 0x37C
|
|
DEFINE FVMAIN_SIZE = 0x00348000
|
|
DEFINE SECFV_OFFSET = 0x003CC000
|
|
DEFINE SECFV_SIZE = 0x34000
|
|
!endif
|
|
|
|
SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFdBaseAddress = $(FW_BASE_ADDRESS)
|
|
SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareFdSize = $(FW_SIZE)
|
|
SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareBlockSize = $(BLOCK_SIZE)
|
|
|
|
SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageVariableBase = $(FW_BASE_ADDRESS)
|
|
SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize = $(VARS_LIVE_SIZE)
|
|
|
|
SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageEventLogBase = gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageVariableBase + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
|
SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageEventLogSize = $(BLOCK_SIZE)
|
|
|
|
SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwWorkingBase = gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageEventLogBase + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageEventLogSize
|
|
SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize = $(BLOCK_SIZE)
|
|
|
|
SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwSpareBase = gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwWorkingBase + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize
|
|
SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize = $(VARS_SPARE_SIZE)
|
|
|
|
# The OVMF WorkArea contains a fixed size header followed by the actual data.
|
|
# The size of header is accessed through a fixed PCD in the reset vector code.
|
|
# The value need to be kept in sync with the any changes to the Confidential
|
|
# Computing Work Area header defined in the Include/WorkArea.h
|
|
SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfConfidentialComputingWorkAreaHeader = 4
|
|
|
|
SET gUefiOvmfPkgTokenSpaceGuid.PcdCfvBase = $(FW_BASE_ADDRESS)
|
|
SET gUefiOvmfPkgTokenSpaceGuid.PcdCfvRawDataOffset = $(VARS_OFFSET)
|
|
SET gUefiOvmfPkgTokenSpaceGuid.PcdCfvRawDataSize = $(VARS_SIZE)
|
|
|
|
SET gUefiOvmfPkgTokenSpaceGuid.PcdBfvBase = $(CODE_BASE_ADDRESS)
|
|
SET gUefiOvmfPkgTokenSpaceGuid.PcdBfvRawDataOffset = $(VARS_SIZE)
|
|
SET gUefiOvmfPkgTokenSpaceGuid.PcdBfvRawDataSize = $(CODE_SIZE)
|
|
|
|
!if $(SMM_REQUIRE) == TRUE
|
|
SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64 = gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageVariableBase
|
|
SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase = gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwWorkingBase
|
|
SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase = gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwSpareBase
|
|
!endif
|
|
|
|
DEFINE MEMFD_BASE_ADDRESS = 0x800000
|