From: "Yao, Jiewen" <jiewen.yao@intel.com>
To: "Xu, Min M" <min.m.xu@intel.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: Liming Gao <gaoliming@byosoft.com.cn>,
"Liu, Zhiguang" <zhiguang.liu@intel.com>,
"Reiland, Doug" <doug.reiland@intel.com>
Subject: Re: [PATCH V3 1/3] MdePkg: Add Tdx support lib
Date: Tue, 9 Mar 2021 06:25:03 +0000 [thread overview]
Message-ID: <BY5PR11MB4166DEF734801FC024FFAAAA8C929@BY5PR11MB4166.namprd11.prod.outlook.com> (raw)
In-Reply-To: <b689ad5505457620668aa691b8d6786d8b2c32f9.1615269637.git.min.m.xu@intel.com>
Hi Min
Some recommendation:
1) Please separate 1 big patch to multiple smaller ones.
1 patch for TdxLib
1 patch for Tdx protocol.
1 patch for TDX event log ACPI table.
1 patch for TDX Library.
2) The ACPI definition from TDX protocol should be isolated to TdxAcpi.h
#define EFI_TDX_EVENT_DATA_SIGNATURE SIGNATURE_32 ('T', 'D', 'E', 'L')
3) There is no description for TD protocol itself and TD event data ACPI table. Please add them.
You may copy some content from the specification.
4) I think we are following TDX spec to provide TdxLib.
I don't see the need to provide NULL version in MdePkg. We can put real TdxLib to MdePkg.
5) If possible, please provide TDX spec link in the file header comment session.
As such, the reviewer can check the spec easily.
> -----Original Message-----
> From: Xu, Min M <min.m.xu@intel.com>
> Sent: Tuesday, March 9, 2021 2:13 PM
> To: devel@edk2.groups.io
> Cc: Xu, Min M <min.m.xu@intel.com>; Liming Gao
> <gaoliming@byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu@intel.com>; Yao,
> Jiewen <jiewen.yao@intel.com>; Reiland, Doug <doug.reiland@intel.com>
> Subject: [PATCH V3 1/3] MdePkg: Add Tdx support lib
>
> Intel Trust Domain Extension (Intel TDX) refers to an Intel technology
> that extends Virtual Machines Extensions (VMX) and Multi-Key Total
> Memory Encryption (MKTME) with a new kind of virtual machine guest
> called a Trust Domain (TD).
>
> TdxLib is created with functions to perform the related Tdx operation.
> This includes functions for:
> - TdCall : to cause a VM exit to the Intel TDX module
> - TdVmCall : it is a leaf function 0 for TDCALL
> - TdVmCallCpuid : enable the TD guest to request VMM to emulate CPUID
> - TdReport : to retrieve TDREPORT_STRUCT
> - TdAcceptPages : to accept pending private pages
> - TdExtendRtmr : to extend one of the RTMR registers
>
> The base function in this dirver will not do anything and will return
> an error if a return value is required. It is expected that other
> packages (like OvmfPkg) will create a version of the library to fully
> support a TD guest.
>
> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> Cc: Zhiguang Liu <zhiguang.liu@intel.com>
> Cc: Jiewen Yao <jiewen.yao@intel.com>
>
> Signed-off-by: Min Xu <min.m.xu@intel.com>
> Signed-off-by: Doug Reiland <doug.reiland@intel.com>
> ---
> MdePkg/Include/IndustryStandard/Tdx.h | 201 ++++++++++++++++++++++++++
> MdePkg/Include/Library/TdxLib.h | 165 +++++++++++++++++++++
> MdePkg/Include/Protocol/Tdx.h | 29 ++++
> MdePkg/Library/TdxLib/TdxLibNull.c | 155 ++++++++++++++++++++
> MdePkg/Library/TdxLib/TdxLibNull.inf | 33 +++++
> 5 files changed, 583 insertions(+)
> create mode 100644 MdePkg/Include/IndustryStandard/Tdx.h
> create mode 100644 MdePkg/Include/Library/TdxLib.h
> create mode 100644 MdePkg/Include/Protocol/Tdx.h
> create mode 100644 MdePkg/Library/TdxLib/TdxLibNull.c
> create mode 100644 MdePkg/Library/TdxLib/TdxLibNull.inf
>
> diff --git a/MdePkg/Include/IndustryStandard/Tdx.h
> b/MdePkg/Include/IndustryStandard/Tdx.h
> new file mode 100644
> index 000000000000..dbcc31c26528
> --- /dev/null
> +++ b/MdePkg/Include/IndustryStandard/Tdx.h
> @@ -0,0 +1,201 @@
> +/** @file
> + Intel Trust Domain Extension definitions
> +
> + Copyright (c) 2020 - 2021, 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 _TDX_H_
> +#define _TDX_H_
> +
> +#define EXIT_REASON_EXTERNAL_INTERRUPT 1
> +#define EXIT_REASON_TRIPLE_FAULT 2
> +
> +#define EXIT_REASON_PENDING_INTERRUPT 7
> +#define EXIT_REASON_NMI_WINDOW 8
> +#define EXIT_REASON_TASK_SWITCH 9
> +#define EXIT_REASON_CPUID 10
> +#define EXIT_REASON_HLT 12
> +#define EXIT_REASON_INVD 13
> +#define EXIT_REASON_INVLPG 14
> +#define EXIT_REASON_RDPMC 15
> +#define EXIT_REASON_RDTSC 16
> +#define EXIT_REASON_VMCALL 18
> +#define EXIT_REASON_VMCLEAR 19
> +#define EXIT_REASON_VMLAUNCH 20
> +#define EXIT_REASON_VMPTRLD 21
> +#define EXIT_REASON_VMPTRST 22
> +#define EXIT_REASON_VMREAD 23
> +#define EXIT_REASON_VMRESUME 24
> +#define EXIT_REASON_VMWRITE 25
> +#define EXIT_REASON_VMOFF 26
> +#define EXIT_REASON_VMON 27
> +#define EXIT_REASON_CR_ACCESS 28
> +#define EXIT_REASON_DR_ACCESS 29
> +#define EXIT_REASON_IO_INSTRUCTION 30
> +#define EXIT_REASON_MSR_READ 31
> +#define EXIT_REASON_MSR_WRITE 32
> +#define EXIT_REASON_INVALID_STATE 33
> +#define EXIT_REASON_MSR_LOAD_FAIL 34
> +#define EXIT_REASON_MWAIT_INSTRUCTION 36
> +#define EXIT_REASON_MONITOR_TRAP_FLAG 37
> +#define EXIT_REASON_MONITOR_INSTRUCTION 39
> +#define EXIT_REASON_PAUSE_INSTRUCTION 40
> +#define EXIT_REASON_MCE_DURING_VMENTRY 41
> +#define EXIT_REASON_TPR_BELOW_THRESHOLD 43
> +#define EXIT_REASON_APIC_ACCESS 44
> +#define EXIT_REASON_EOI_INDUCED 45
> +#define EXIT_REASON_GDTR_IDTR 46
> +#define EXIT_REASON_LDTR_TR 47
> +#define EXIT_REASON_EPT_VIOLATION 48
> +#define EXIT_REASON_EPT_MISCONFIG 49
> +#define EXIT_REASON_INVEPT 50
> +#define EXIT_REASON_RDTSCP 51
> +#define EXIT_REASON_PREEMPTION_TIMER 52
> +#define EXIT_REASON_INVVPID 53
> +#define EXIT_REASON_WBINVD 54
> +#define EXIT_REASON_XSETBV 55
> +#define EXIT_REASON_APIC_WRITE 56
> +#define EXIT_REASON_RDRAND 57
> +#define EXIT_REASON_INVPCID 58
> +#define EXIT_REASON_VMFUNC 59
> +#define EXIT_REASON_ENCLS 60
> +#define EXIT_REASON_RDSEED 61
> +#define EXIT_REASON_PML_FULL 62
> +#define EXIT_REASON_XSAVES 63
> +#define EXIT_REASON_XRSTORS 64
> +
> +// TDCALL API Function Completion Status Codes
> +#define TDX_EXIT_REASON_SUCCESS 0x0000000000000000
> +#define TDX_EXIT_REASON_PAGE_ALREADY_ACCEPTED
> 0x00000B0A00000000
> +#define TDX_EXIT_REASON_OPERAND_INVALID 0xC000010000000000
> +#define TDX_EXIT_REASON_OPERAND_BUSY 0x8000020000000000
> +
> +#define TDCALL_TDVMCALL 0
> +#define TDCALL_TDINFO 1
> +#define TDCALL_TDEXTENDRTMR 2
> +#define TDCALL_TDGETVEINFO 3
> +#define TDCALL_TDREPORT 4
> +#define TDCALL_TDSETCPUIDVE 5
> +#define TDCALL_TDACCEPTPAGE 6
> +
> +#define TDVMCALL_CPUID 0x0000a
> +#define TDVMCALL_HALT 0x0000c
> +#define TDVMCALL_IO 0x0001e
> +#define TDVMCALL_RDMSR 0x0001f
> +#define TDVMCALL_WRMSR 0x00020
> +#define TDVMCALL_MMIO 0x00030
> +#define TDVMCALL_PCONFIG 0x00041
> +
> +#define TDVMCALL_GET_TDVMCALL_INFO 0x10000
> +#define TDVMCALL_MAPGPA 0x10001
> +#define TDVMCALL_GET_QUOTE 0x10002
> +#define TDVMCALL_REPORT_FATAL_ERR 0x10003
> +#define TDVMCALL_SETUP_EVENT_NOTIFY 0x10004
> +
> +#pragma pack(1)
> +typedef struct {
> + UINT64 Data[6];
> +} TDCALL_GENERIC_RETURN_DATA;
> +
> +typedef struct {
> + UINT64 Gpaw;
> + UINT64 Attributes;
> + UINT32 MaxVcpus;
> + UINT32 NumVcpus;
> + UINT64 Resv[3];
> +} TDCALL_INFO_RETURN_DATA;
> +
> +typedef union {
> + UINT64 Val;
> + struct {
> + UINT32 Size:3;
> + UINT32 Direction:1;
> + UINT32 String:1;
> + UINT32 Rep:1;
> + UINT32 Encoding:1;
> + UINT32 Resv:9;
> + UINT32 Port:16;
> + UINT32 Resv2;
> + } Io;
> +} VMX_EXIT_QUALIFICATION;
> +
> +typedef struct {
> + UINT32 ExitReason;
> + UINT32 Resv;
> + VMX_EXIT_QUALIFICATION ExitQualification;
> + UINT64 GuestLA;
> + UINT64 GuestPA;
> + UINT32 ExitInstructionLength;
> + UINT32 ExitInstructionInfo;
> + UINT32 Resv1;
> +} TDCALL_VEINFO_RETURN_DATA;
> +
> +typedef union {
> + TDCALL_GENERIC_RETURN_DATA Generic;
> + TDCALL_INFO_RETURN_DATA TdInfo;
> + TDCALL_VEINFO_RETURN_DATA VeInfo;
> +} TD_RETURN_DATA;
> +
> +/* data structure used in TDREPORT_STRUCT */
> +typedef struct{
> + UINT8 Type;
> + UINT8 Subtype;
> + UINT8 Version;
> + UINT8 Rsvd;
> +}TD_REPORT_TYPE;
> +
> +typedef struct{
> + TD_REPORT_TYPE ReportType;
> + UINT8 Rsvd1[12];
> + UINT8 CpuSvn[16];
> + UINT8 TeeTcbInfoHash[48];
> + UINT8 TeeInfoHash[48];
> + UINT8 ReportData[64];
> + UINT8 Rsvd2[32];
> + UINT8 Mac[32];
> +}REPORTMACSTRUCT;
> +
> +typedef struct{
> + UINT8 Seam[2];
> + UINT8 Rsvd[14];
> +}TEE_TCB_SVN;
> +
> +typedef struct{
> + UINT8 Valid[8];
> + TEE_TCB_SVN TeeTcbSvn;
> + UINT8 Mrseam[48];
> + UINT8 Mrsignerseam[48];
> + UINT8 Attributes[8];
> + UINT8 Rsvd[111];
> +}TEE_TCB_INFO;
> +
> +typedef struct{
> + UINT8 Attributes[8];
> + UINT8 Xfam[8];
> + UINT8 Mrtd[48];
> + UINT8 Mrconfigid[48];
> + UINT8 Mrowner[48];
> + UINT8 Mrownerconfig[48];
> + UINT8 Rtmrs[4][48];
> + UINT8 Rsvd[112];
> +}TDINFO;
> +
> +typedef struct{
> + REPORTMACSTRUCT ReportMacStruct;
> + TEE_TCB_INFO TeeTcbInfo;
> + UINT8 Rsvd[17];
> + TDINFO Tdinfo;
> +}TDREPORT_STRUCT;
> +
> +#pragma pack()
> +
> +#endif
> +
> diff --git a/MdePkg/Include/Library/TdxLib.h b/MdePkg/Include/Library/TdxLib.h
> new file mode 100644
> index 000000000000..5e8634c6df79
> --- /dev/null
> +++ b/MdePkg/Include/Library/TdxLib.h
> @@ -0,0 +1,165 @@
> +/** @file
> + TdxLib definitions
> +
> + Copyright (c) 2020 - 2021, 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 _TDX_LIB_H_
> +#define _TDX_LIB_H_
> +
> +#include <Library/BaseLib.h>
> +#include <Uefi/UefiBaseType.h>
> +#include <Library/DebugLib.h>
> +#include <Protocol/DebugSupport.h>
> +
> +/**
> + This function retrieve TDREPORT_STRUCT structure from TDX.
> + The struct contains the measurements/configuration information of
> + the guest TD that called the function, measurements/configuratio
> + information of the TDX-SEAM module and a REPORTMACSTRUCT.
> + The REPORTMACSTRUCT is integrity protected with a MAC and
> + contains the hash of the measurements and configuration
> + as well as additional REPORTDATA provided by the TD software.
> +
> + AdditionalData, a 64-byte value, is provided by the guest TD
> + to be included in the TDREPORT
> +
> + @param[in,out] Report Holds the TEREPORT_STRUCT.
> + @param[in] ReportSize Size of the report. It must be
> + larger than 1024B.
> + @param[in] AdditionalData Point to the additional data.
> + @param[in] AdditionalDataSize Size of the additional data.
> + If AdditionalData != NULL, then
> + this value must be 64B.
> +
> + @return EFI_SUCCESS
> + @return EFI_INVALID_PARAMETER
> + @return EFI_DEVICE_ERROR
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +TdReport(
> + IN OUT UINT8 *Report,
> + IN UINT32 ReportSize,
> + IN UINT8 *AdditionalData,
> + IN UINT32 AdditionalDataSize
> +);
> +
> +/**
> + This function accept a pending private page, and initialize the page to
> + all-0 using the TD ephemeral private key.
> +
> + @param[in] StartAddress Guest physical address of the private page
> + to accept.
> + @param[in] NumberOfPages Number of the pages to be accepted.
> +
> + @return EFI_SUCCESS
> +**/
> +EFI_STATUS
> +EFIAPI
> +TdAcceptPages (
> + IN UINT64 StartAddress,
> + IN UINT64 NumberOfPages
> + );
> +
> +/**
> + This function extends one of the RTMR measurement register
> + in TDCS with the provided extension data in memory.
> + RTMR extending supports SHA384 which length is 48 bytes.
> +
> + @param[in] Data Point to the data to be extended
> + @param[in] DataLen Length of the data. Must be 48
> + @param[in] Index RTMR index
> +
> + @return EFI_SUCCESS
> + @return EFI_INVALID_PARAMETER
> + @return EFI_DEVICE_ERROR
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +TdExtendRtmr(
> + IN UINT32 *Data,
> + IN UINT32 DataLen,
> + IN UINT8 PcrIndex
> + );
> +
> +/**
> + The TDCALL instruction causes a VM exit to the Intel TDX module. It is
> + used to call guest-side Intel TDX functions, either local or a TD exit
> + to the host VMM, as selected by Leaf.
> + Leaf functions are described at <https://software.intel.com/content/
> + www/us/en/develop/articles/intel-trust-domain-extensions.html>
> +
> + @param[in] Leaf Leaf number of TDCALL instruction
> + @param[in] Arg1 Arg1
> + @param[in] Arg2 Arg2
> + @param[in] Arg3 Arg3
> + @param[in,out] Results Returned result of the Leaf function
> +
> + @return EFI_SUCCESS
> + @return Other See individual leaf functions
> +**/
> +EFI_STATUS
> +EFIAPI
> +TdCall(
> + IN UINT64 Leaf,
> + IN UINT64 Arg1,
> + IN UINT64 Arg2,
> + IN UINT64 Arg3,
> + IN OUT VOID *Results
> + );
> +
> +/**
> + TDVMALL is a leaf function 0 for TDCALL. It helps invoke services from the
> + host VMM to pass/receive information.
> +
> + @param[in] Leaf Number of sub-functions
> + @param[in] Arg1 Arg1
> + @param[in] Arg2 Arg2
> + @param[in] Arg3 Arg3
> + @param[in] Arg4 Arg4
> + @param[in,out] Results Returned result of the sub-function
> +
> + @return EFI_SUCCESS
> + @return Other See individual sub-functions
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +TdVmCall (
> + IN UINT64 Leaf,
> + IN UINT64 Arg1,
> + IN UINT64 Arg2,
> + IN UINT64 Arg3,
> + IN UINT64 Arg4,
> + IN OUT VOID *Results
> + );
> +
> +/**
> + This function enable the TD guest to request the VMM to emulate CPUID
> + operation, especially for non-architectural, CPUID leaves.
> +
> + @param[in] Eax Main leaf of the CPUID
> + @param[in] Ecx Sub-leaf of the CPUID
> + @param[out] Results Returned result of CPUID operation
> +
> + @return EFI_SUCCESS
> +**/
> +EFI_STATUS
> +EFIAPI
> +TdVmCallCpuid (
> + IN UINT64 Eax,
> + IN UINT64 Ecx,
> + OUT VOID *Results
> + );
> +#endif
> diff --git a/MdePkg/Include/Protocol/Tdx.h b/MdePkg/Include/Protocol/Tdx.h
> new file mode 100644
> index 000000000000..b5e9b19c1276
> --- /dev/null
> +++ b/MdePkg/Include/Protocol/Tdx.h
> @@ -0,0 +1,29 @@
> +/** @file
> + If TD-Guest firmware supports measurement and an event is created, TD-
> Guest
> + firmware is designed to report the event log with the same data structure
> + in TCG-Platform-Firmware-Profile specification with
> + EFI_TCG2_EVENT_LOG_FORMAT_TCG_2 format.
> +
> + The TD-Guest firmware supports measurement, the TD Guest Firmware is
> designed
> + to produce EFI_TD_PROTOCOL with new GUID EFI_TD_PROTOCOL_GUID to
> report
> + event log and provides hash capability.
> +
> +Copyright (c) 2020 - 2021, Intel Corporation. All rights reserved.<BR>
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +
> +#ifndef __EFI_TDX_H__
> +#define __EFI_TDX_H__
> +
> +#include <Uefi/UefiBaseType.h>
> +
> +#define EFI_TDX_EVENT_DATA_SIGNATURE SIGNATURE_32 ('T', 'D', 'E', 'L')
> +
> +#define EFI_TD_PROTOCOL_GUID \
> + {0x96751a3d, 0x72f4, 0x41a6, { 0xa7, 0x94, 0xed, 0x5d, 0x0e, 0x67, 0xae,
> 0x6b }}
> +extern EFI_GUID gEfiTdProtocolGuid;
> +
> +
> +#endif
> diff --git a/MdePkg/Library/TdxLib/TdxLibNull.c
> b/MdePkg/Library/TdxLib/TdxLibNull.c
> new file mode 100644
> index 000000000000..8d759e4d33a4
> --- /dev/null
> +++ b/MdePkg/Library/TdxLib/TdxLibNull.c
> @@ -0,0 +1,155 @@
> +/** @file
> + Null instance of TdxLib.
> +
> + Copyright (c) 2020 - 2021, 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 <Library/BaseLib.h>
> +#include <Library/DebugLib.h>
> +#include <IndustryStandard/Tdx.h>
> +#include <Library/TdxLib.h>
> +
> +/**
> + This function retrieve TDREPORT_STRUCT structure from TDX.
> + The struct contains the measurements/configuration information of
> + the guest TD that called the function, measurements/configuratio
> + information of the TDX-SEAM module and a REPORTMACSTRUCT.
> + The REPORTMACSTRUCT is integrity protected with a MAC and
> + contains the hash of the measurements and configuration
> + as well as additional REPORTDATA provided by the TD software.
> +
> + AdditionalData, a 64-byte value, is provided by the guest TD
> + to be included in the TDREPORT
> +
> + @param[in,out] Report Holds the TEREPORT_STRUCT.
> + @param[in] ReportSize Size of the report. It must be
> + larger than 1024B.
> + @param[in] AdditionalData Point to the additional data.
> + @param[in] AdditionalDataSize Size of the additional data.
> + If AdditionalData != NULL, then
> + this value must be 64B.
> +
> + @return EFI_SUCCESS
> + @return EFI_INVALID_PARAMETER
> + @return EFI_DEVICE_ERROR
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +TdReport(
> + IN OUT UINT8 *Report,
> + IN UINT32 ReportSize,
> + IN UINT8 *AdditionalData,
> + IN UINT32 AdditionalDataSize
> + )
> +{
> + return EFI_UNSUPPORTED;
> +}
> +
> +/**
> + This function accept a pending private page, and initialize the page to
> + all-0 using the TD ephemeral private key.
> +
> + @param[in] StartAddress Guest physical address of the private page
> + to accept.
> + @param[in] NumberOfPages Number of the pages to be accepted.
> +
> + @return EFI_UNSUPPORTED
> +**/
> +EFI_STATUS
> +EFIAPI
> +TdAcceptPages (
> + IN UINT64 StartAddress,
> + IN UINT64 NumberOfPages
> + )
> +{
> + return EFI_UNSUPPORTED;
> +}
> +
> +/**
> + The TDCALL instruction causes a VM exit to the Intel TDX module. It is
> + used to call guest-side Intel TDX functions, either local or a TD exit
> + to the host VMM, as selected by Leaf.
> + Leaf functions are described at <https://software.intel.com/content/
> + www/us/en/develop/articles/intel-trust-domain-extensions.html>
> +
> + @param[in] Leaf Leaf number of TDCALL instruction
> + @param[in] Arg1 Arg1
> + @param[in] Arg2 Arg2
> + @param[in] Arg3 Arg3
> + @param[in,out] Results Returned result of the Leaf function
> +
> + @return EFI_SUCCESS
> + @return Other See individual leaf functions
> +**/
> +EFI_STATUS
> +EFIAPI
> +TdCall(
> + IN UINT64 Leaf,
> + IN UINT64 Arg1,
> + IN UINT64 Arg2,
> + IN UINT64 Arg3,
> + IN OUT VOID *Results
> + )
> +{
> + return EFI_UNSUPPORTED;
> +}
> +
> +/**
> + TDVMALL is a leaf function 0 for TDCALL. It helps invoke services from the
> + host VMM to pass/receive information.
> +
> + @param[in] Leaf Number of sub-functions
> + @param[in] Arg1 Arg1
> + @param[in] Arg2 Arg2
> + @param[in] Arg3 Arg3
> + @param[in] Arg4 Arg4
> + @param[in,out] Results Returned result of the sub-function
> +
> + @return EFI_SUCCESS
> + @return Other See individual sub-functions
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +TdVmCall (
> + IN UINT64 Leaf,
> + IN UINT64 Arg1,
> + IN UINT64 Arg2,
> + IN UINT64 Arg3,
> + IN UINT64 Arg4,
> + IN OUT VOID *Results
> + )
> +{
> + return EFI_UNSUPPORTED;
> +}
> +
> +/**
> + This function enable the TD guest to request the VMM to emulate CPUID
> + operation, especially for non-architectural, CPUID leaves.
> +
> + @param[in] Eax Main leaf of the CPUID
> + @param[in] Ecx Sub-leaf of the CPUID
> + @param[in,out] Results Returned result of CPUID operation
> +
> + @return EFI_SUCCESS
> +**/
> +EFI_STATUS
> +EFIAPI
> +TdVmCallCpuid (
> + IN UINT64 Eax,
> + IN UINT64 Ecx,
> + IN OUT VOID *Results
> + )
> +{
> + return EFI_UNSUPPORTED;
> +}
> diff --git a/MdePkg/Library/TdxLib/TdxLibNull.inf
> b/MdePkg/Library/TdxLib/TdxLibNull.inf
> new file mode 100644
> index 000000000000..0d07595a8c3e
> --- /dev/null
> +++ b/MdePkg/Library/TdxLib/TdxLibNull.inf
> @@ -0,0 +1,33 @@
> +## @file
> +# Null Tdx library instance
> +#
> +# Copyright (c) 2020 - 2021, 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 = TdxLibNull
> + FILE_GUID = 05C5E621-FC66-4420-9C80-F0DE9E5B95FF
> + MODULE_TYPE = BASE
> + VERSION_STRING = 1.0
> + LIBRARY_CLASS = TdxLib
> +
> +#
> +# The following information is for reference only and not required by the build
> tools.
> +#
> +# VALID_ARCHITECTURES = X64
> +#
> +
> +[Sources]
> + TdxLibNull.c
> +
> +[Packages]
> + MdePkg/MdePkg.dec
> --
> 2.29.2.windows.2
next prev parent reply other threads:[~2021-03-09 6:25 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-09 6:12 [PATCH V3 0/3] Add TdxLib support for Intel TDX Min Xu
2021-03-09 6:12 ` [PATCH V3 1/3] MdePkg: Add Tdx support lib Min Xu
2021-03-09 6:25 ` Yao, Jiewen [this message]
2021-03-09 8:23 ` Min Xu
2021-03-09 6:12 ` [PATCH V3 2/3] OvmfPkg: Add PCDs for TdxLib Min Xu
2021-03-09 6:44 ` Yao, Jiewen
2021-03-09 8:27 ` Min Xu
2021-03-09 6:12 ` [PATCH V3 3/3] OvmfPkg: Implement library support for TdxLib SEC and DXE on OVMF Min Xu
2021-03-09 6:46 ` Yao, Jiewen
2021-03-09 12:57 ` [PATCH V3 0/3] Add TdxLib support for Intel TDX Laszlo Ersek
2021-03-09 13:06 ` Laszlo Ersek
2021-03-09 14:38 ` [edk2-devel] " Laszlo Ersek
2021-03-10 0:25 ` Yao, Jiewen
2021-03-10 1:07 ` Brijesh Singh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=BY5PR11MB4166DEF734801FC024FFAAAA8C929@BY5PR11MB4166.namprd11.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox