mirror of https://github.com/acidanthera/audk.git
116 lines
3.7 KiB
NASM
116 lines
3.7 KiB
NASM
;------------------------------------------------------------------------------
|
|
; @file
|
|
; Tdx Virtual Firmware metadata
|
|
;
|
|
; 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.
|
|
;
|
|
; Tdx Metadata consists of a DESCRIPTOR as the header followed by several
|
|
; SECTIONs. Host VMM sets up the memory for TDVF according to these sections.
|
|
;
|
|
; _Bfv is the example (Bfv refers to the Virtual BIOS code).
|
|
; - By DataOffset/RawDataSize host VMM knows about the position of the code
|
|
; in the binary image.
|
|
; - MemoryAddress/MemoryDataSize indicates the guest physical address/size of
|
|
; the Bfv to be loaded.
|
|
; - Type field means this section is of BFV. This field is designed for the
|
|
; purpose that in some case host VMM may do some additional processing based
|
|
; upon the section type. TdHob section is an example. Host VMM pass the
|
|
; physical memory information to the guest firmware by writing the data in
|
|
; the memory region designated by TdHob section.
|
|
; - By design code part of the binary image (Bfv) should be measured by host
|
|
; VMM. This is indicated by the Attributes field.
|
|
;
|
|
; So put all these information together, when a new guest is being created,
|
|
; the initial TD-private pages for BFV is added by TDH.MEM.PAGE.ADD function,
|
|
; and Bfv is loaded at the guest physical address indicated by MemoryAddress.
|
|
; Since the Attributes is TDX_METADATA_ATTRIBUTES_EXTENDMR, Bfv is measured by
|
|
; host VMM.
|
|
;
|
|
; Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
|
|
; SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
;
|
|
;------------------------------------------------------------------------------
|
|
|
|
BITS 64
|
|
|
|
%define TDX_METADATA_SECTION_TYPE_BFV 0
|
|
%define TDX_METADATA_SECTION_TYPE_CFV 1
|
|
%define TDX_METADATA_SECTION_TYPE_TD_HOB 2
|
|
%define TDX_METADATA_SECTION_TYPE_TEMP_MEM 3
|
|
%define TDX_METADATA_VERSION 1
|
|
%define TDX_METADATA_ATTRIBUTES_EXTENDMR 0x00000001
|
|
|
|
ALIGN 16
|
|
TIMES (15 - ((TdxGuidedStructureEnd - TdxGuidedStructureStart + 15) % 16)) DB 0
|
|
|
|
TdxGuidedStructureStart:
|
|
|
|
;
|
|
; TDVF meta data
|
|
;
|
|
TdxMetadataGuid:
|
|
DB 0xf3, 0xf9, 0xea, 0xe9, 0x8e, 0x16, 0xd5, 0x44
|
|
DB 0xa8, 0xeb, 0x7f, 0x4d, 0x87, 0x38, 0xf6, 0xae
|
|
|
|
_Descriptor:
|
|
DB 'T','D','V','F' ; Signature
|
|
DD TdxGuidedStructureEnd - _Descriptor ; Length
|
|
DD TDX_METADATA_VERSION ; Version
|
|
DD (TdxGuidedStructureEnd - _Descriptor - 16)/32 ; Number of sections
|
|
|
|
_Bfv:
|
|
DD TDX_BFV_RAW_DATA_OFFSET
|
|
DD TDX_BFV_RAW_DATA_SIZE
|
|
DQ TDX_BFV_MEMORY_BASE
|
|
DQ TDX_BFV_MEMORY_SIZE
|
|
DD TDX_METADATA_SECTION_TYPE_BFV
|
|
DD TDX_METADATA_ATTRIBUTES_EXTENDMR
|
|
|
|
_Cfv:
|
|
DD TDX_CFV_RAW_DATA_OFFSET
|
|
DD TDX_CFV_RAW_DATA_SIZE
|
|
DQ TDX_CFV_MEMORY_BASE
|
|
DQ TDX_CFV_MEMORY_SIZE
|
|
DD TDX_METADATA_SECTION_TYPE_CFV
|
|
DD 0
|
|
|
|
_TdxHeapStack:
|
|
DD 0
|
|
DD 0
|
|
DQ TDX_HEAP_STACK_BASE
|
|
DQ TDX_HEAP_STACK_SIZE
|
|
DD TDX_METADATA_SECTION_TYPE_TEMP_MEM
|
|
DD 0
|
|
|
|
_TdxInitMem:
|
|
DD 0
|
|
DD 0
|
|
DQ TDX_INIT_MEMORY_BASE
|
|
DQ TDX_INIT_MEMORY_SIZE
|
|
DD TDX_METADATA_SECTION_TYPE_TEMP_MEM
|
|
DD 0
|
|
|
|
_TdHob:
|
|
DD 0
|
|
DD 0
|
|
DQ TDX_HOB_MEMORY_BASE
|
|
DQ TDX_HOB_MEMORY_SIZE
|
|
DD TDX_METADATA_SECTION_TYPE_TD_HOB
|
|
DD 0
|
|
|
|
_OvmfPageTable:
|
|
DD 0
|
|
DD 0
|
|
DQ OVMF_PAGE_TABLE_BASE
|
|
DQ OVMF_PAGE_TABLE_SIZE
|
|
DD TDX_METADATA_SECTION_TYPE_TEMP_MEM
|
|
DD 0
|
|
|
|
TdxGuidedStructureEnd:
|
|
ALIGN 16
|