UefiCpuPkg: Enable Tdx support in MpInitLib
RFC: https://bugzilla.tianocore.org/show_bug.cgi?id=3429 In TDVF BSP and APs are simplified. BSP is the vCPU-0, while the others are treated as APs. So MP intialization is rather simple. ApWorker is not supported, BSP is always the working processor, while the APs are just in a wait-for-precedure state. 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> Cc: Eric Dong <eric.dong@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Rahul Kumar <rahul1.kumar@intel.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Acked-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Ray Ni <ray.ni@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> Signed-off-by: Min Xu <min.m.xu@intel.com>
This commit is contained in:
parent
d983b102b3
commit
88da06ca76
|
@ -24,10 +24,12 @@
|
||||||
[Sources.IA32]
|
[Sources.IA32]
|
||||||
Ia32/AmdSev.c
|
Ia32/AmdSev.c
|
||||||
Ia32/MpFuncs.nasm
|
Ia32/MpFuncs.nasm
|
||||||
|
MpLibTdxNull.c
|
||||||
|
|
||||||
[Sources.X64]
|
[Sources.X64]
|
||||||
X64/AmdSev.c
|
X64/AmdSev.c
|
||||||
X64/MpFuncs.nasm
|
X64/MpFuncs.nasm
|
||||||
|
MpLibTdx.c
|
||||||
|
|
||||||
[Sources.common]
|
[Sources.common]
|
||||||
AmdSev.c
|
AmdSev.c
|
||||||
|
@ -36,6 +38,7 @@
|
||||||
MpLib.c
|
MpLib.c
|
||||||
MpLib.h
|
MpLib.h
|
||||||
Microcode.c
|
Microcode.c
|
||||||
|
MpIntelTdx.h
|
||||||
|
|
||||||
[Packages]
|
[Packages]
|
||||||
MdePkg/MdePkg.dec
|
MdePkg/MdePkg.dec
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
/** @file
|
||||||
|
CPU MP Initialize Library header file for Td guest.
|
||||||
|
|
||||||
|
Copyright (c) 2020 - 2022, Intel Corporation. All rights reserved.<BR>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef MP_INTEL_TDX_H_
|
||||||
|
#define MP_INTEL_TDX_H_
|
||||||
|
|
||||||
|
#include <PiPei.h>
|
||||||
|
#include <Library/BaseLib.h>
|
||||||
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Uefi/UefiBaseType.h>
|
||||||
|
#include <Protocol/MpService.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
Gets detailed MP-related information on the requested processor at the
|
||||||
|
instant this call is made. This service may only be called from the BSP.
|
||||||
|
|
||||||
|
@param[in] ProcessorNumber The handle number of processor.
|
||||||
|
@param[out] ProcessorInfoBuffer A pointer to the buffer where information for
|
||||||
|
the requested processor is deposited.
|
||||||
|
@param[out] HealthData Return processor health data.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS Processor information was returned.
|
||||||
|
@retval EFI_DEVICE_ERROR The calling processor is an AP.
|
||||||
|
@retval EFI_INVALID_PARAMETER ProcessorInfoBuffer is NULL.
|
||||||
|
@retval EFI_NOT_FOUND The processor with the handle specified by
|
||||||
|
ProcessorNumber does not exist in the platform.
|
||||||
|
@retval EFI_NOT_READY MP Initialize Library is not initialized.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
TdxMpInitLibGetProcessorInfo (
|
||||||
|
IN UINTN ProcessorNumber,
|
||||||
|
OUT EFI_PROCESSOR_INFORMATION *ProcessorInfoBuffer,
|
||||||
|
OUT EFI_HEALTH_FLAGS *HealthData OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Retrieves the number of logical processor in the platform and the number of
|
||||||
|
those logical processors that are enabled on this boot. This service may only
|
||||||
|
be called from the BSP.
|
||||||
|
|
||||||
|
@param[out] NumberOfProcessors Pointer to the total number of logical
|
||||||
|
processors in the system, including the BSP
|
||||||
|
and disabled APs.
|
||||||
|
@param[out] NumberOfEnabledProcessors Pointer to the number of enabled logical
|
||||||
|
processors that exist in system, including
|
||||||
|
the BSP.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The number of logical processors and enabled
|
||||||
|
logical processors was retrieved.
|
||||||
|
@retval EFI_DEVICE_ERROR The calling processor is an AP.
|
||||||
|
@retval EFI_INVALID_PARAMETER NumberOfProcessors is NULL and NumberOfEnabledProcessors
|
||||||
|
is NULL.
|
||||||
|
@retval EFI_NOT_READY MP Initialize Library is not initialized.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
TdxMpInitLibGetNumberOfProcessors (
|
||||||
|
OUT UINTN *NumberOfProcessors, OPTIONAL
|
||||||
|
OUT UINTN *NumberOfEnabledProcessors OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif
|
|
@ -9,9 +9,11 @@
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#include "MpLib.h"
|
#include "MpLib.h"
|
||||||
|
#include "MpIntelTdx.h"
|
||||||
#include <Library/VmgExitLib.h>
|
#include <Library/VmgExitLib.h>
|
||||||
#include <Register/Amd/Fam17Msr.h>
|
#include <Register/Amd/Fam17Msr.h>
|
||||||
#include <Register/Amd/Ghcb.h>
|
#include <Register/Amd/Ghcb.h>
|
||||||
|
#include <ConfidentialComputingGuestAttr.h>
|
||||||
|
|
||||||
EFI_GUID mCpuInitMpLibHobGuid = CPU_INIT_MP_LIB_HOB_GUID;
|
EFI_GUID mCpuInitMpLibHobGuid = CPU_INIT_MP_LIB_HOB_GUID;
|
||||||
|
|
||||||
|
@ -1803,6 +1805,10 @@ MpInitLibInitialize (
|
||||||
UINTN BackupBufferAddr;
|
UINTN BackupBufferAddr;
|
||||||
UINTN ApIdtBase;
|
UINTN ApIdtBase;
|
||||||
|
|
||||||
|
if (CC_GUEST_IS_TDX (PcdGet64 (PcdConfidentialComputingGuestAttr))) {
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
OldCpuMpData = GetCpuMpDataFromGuidedHob ();
|
OldCpuMpData = GetCpuMpDataFromGuidedHob ();
|
||||||
if (OldCpuMpData == NULL) {
|
if (OldCpuMpData == NULL) {
|
||||||
MaxLogicalProcessorNumber = PcdGet32 (PcdCpuMaxLogicalProcessorNumber);
|
MaxLogicalProcessorNumber = PcdGet32 (PcdCpuMaxLogicalProcessorNumber);
|
||||||
|
@ -2073,6 +2079,10 @@ MpInitLibGetProcessorInfo (
|
||||||
CPU_INFO_IN_HOB *CpuInfoInHob;
|
CPU_INFO_IN_HOB *CpuInfoInHob;
|
||||||
UINTN OriginalProcessorNumber;
|
UINTN OriginalProcessorNumber;
|
||||||
|
|
||||||
|
if (CC_GUEST_IS_TDX (PcdGet64 (PcdConfidentialComputingGuestAttr))) {
|
||||||
|
return TdxMpInitLibGetProcessorInfo (ProcessorNumber, ProcessorInfoBuffer, HealthData);
|
||||||
|
}
|
||||||
|
|
||||||
CpuMpData = GetCpuMpData ();
|
CpuMpData = GetCpuMpData ();
|
||||||
CpuInfoInHob = (CPU_INFO_IN_HOB *)(UINTN)CpuMpData->CpuInfoInHob;
|
CpuInfoInHob = (CPU_INFO_IN_HOB *)(UINTN)CpuMpData->CpuInfoInHob;
|
||||||
|
|
||||||
|
@ -2167,6 +2177,10 @@ SwitchBSPWorker (
|
||||||
BOOLEAN OldInterruptState;
|
BOOLEAN OldInterruptState;
|
||||||
BOOLEAN OldTimerInterruptState;
|
BOOLEAN OldTimerInterruptState;
|
||||||
|
|
||||||
|
if (CC_GUEST_IS_TDX (PcdGet64 (PcdConfidentialComputingGuestAttr))) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Save and Disable Local APIC timer interrupt
|
// Save and Disable Local APIC timer interrupt
|
||||||
//
|
//
|
||||||
|
@ -2307,6 +2321,10 @@ EnableDisableApWorker (
|
||||||
CPU_MP_DATA *CpuMpData;
|
CPU_MP_DATA *CpuMpData;
|
||||||
UINTN CallerNumber;
|
UINTN CallerNumber;
|
||||||
|
|
||||||
|
if (CC_GUEST_IS_TDX (PcdGet64 (PcdConfidentialComputingGuestAttr))) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
CpuMpData = GetCpuMpData ();
|
CpuMpData = GetCpuMpData ();
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -2367,6 +2385,11 @@ MpInitLibWhoAmI (
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CC_GUEST_IS_TDX (PcdGet64 (PcdConfidentialComputingGuestAttr))) {
|
||||||
|
*ProcessorNumber = 0;
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
CpuMpData = GetCpuMpData ();
|
CpuMpData = GetCpuMpData ();
|
||||||
|
|
||||||
return GetProcessorNumber (CpuMpData, ProcessorNumber);
|
return GetProcessorNumber (CpuMpData, ProcessorNumber);
|
||||||
|
@ -2405,12 +2428,16 @@ MpInitLibGetNumberOfProcessors (
|
||||||
UINTN EnabledProcessorNumber;
|
UINTN EnabledProcessorNumber;
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
|
|
||||||
CpuMpData = GetCpuMpData ();
|
|
||||||
|
|
||||||
if ((NumberOfProcessors == NULL) && (NumberOfEnabledProcessors == NULL)) {
|
if ((NumberOfProcessors == NULL) && (NumberOfEnabledProcessors == NULL)) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CC_GUEST_IS_TDX (PcdGet64 (PcdConfidentialComputingGuestAttr))) {
|
||||||
|
return TdxMpInitLibGetNumberOfProcessors (NumberOfProcessors, NumberOfEnabledProcessors);
|
||||||
|
}
|
||||||
|
|
||||||
|
CpuMpData = GetCpuMpData ();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check whether caller processor is BSP
|
// Check whether caller processor is BSP
|
||||||
//
|
//
|
||||||
|
@ -2490,13 +2517,16 @@ StartupAllCPUsWorker (
|
||||||
BOOLEAN HasEnabledAp;
|
BOOLEAN HasEnabledAp;
|
||||||
CPU_STATE ApState;
|
CPU_STATE ApState;
|
||||||
|
|
||||||
CpuMpData = GetCpuMpData ();
|
|
||||||
|
|
||||||
if (FailedCpuList != NULL) {
|
if (FailedCpuList != NULL) {
|
||||||
*FailedCpuList = NULL;
|
*FailedCpuList = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((CpuMpData->CpuCount == 1) && ExcludeBsp) {
|
Status = MpInitLibGetNumberOfProcessors (&ProcessorCount, NULL);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ProcessorCount == 1) && ExcludeBsp) {
|
||||||
return EFI_NOT_STARTED;
|
return EFI_NOT_STARTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2504,6 +2534,22 @@ StartupAllCPUsWorker (
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CC_GUEST_IS_TDX (PcdGet64 (PcdConfidentialComputingGuestAttr))) {
|
||||||
|
//
|
||||||
|
// For Td guest ExcludeBsp must be FALSE. Otherwise it will return in above checks.
|
||||||
|
//
|
||||||
|
ASSERT (!ExcludeBsp);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Start BSP.
|
||||||
|
//
|
||||||
|
Procedure (ProcedureArgument);
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
CpuMpData = GetCpuMpData ();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check whether caller processor is BSP
|
// Check whether caller processor is BSP
|
||||||
//
|
//
|
||||||
|
@ -2643,6 +2689,13 @@ StartupThisAPWorker (
|
||||||
CPU_AP_DATA *CpuData;
|
CPU_AP_DATA *CpuData;
|
||||||
UINTN CallerNumber;
|
UINTN CallerNumber;
|
||||||
|
|
||||||
|
//
|
||||||
|
// In Td guest, startup of AP is not supported in current stage.
|
||||||
|
//
|
||||||
|
if (CC_GUEST_IS_TDX (PcdGet64 (PcdConfidentialComputingGuestAttr))) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
CpuMpData = GetCpuMpData ();
|
CpuMpData = GetCpuMpData ();
|
||||||
|
|
||||||
if (Finished != NULL) {
|
if (Finished != NULL) {
|
||||||
|
|
|
@ -0,0 +1,106 @@
|
||||||
|
/** @file
|
||||||
|
CPU MP Initialize Library common functions for Td guest.
|
||||||
|
|
||||||
|
Copyright (c) 2020 - 2022, Intel Corporation. All rights reserved.<BR>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MpLib.h"
|
||||||
|
#include "MpIntelTdx.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Gets detailed MP-related information on the requested processor at the
|
||||||
|
instant this call is made. This service may only be called from the BSP.
|
||||||
|
|
||||||
|
In current stage only the BSP is workable. So ProcessorNumber should be 0.
|
||||||
|
|
||||||
|
@param[in] ProcessorNumber The handle number of processor.
|
||||||
|
@param[out] ProcessorInfoBuffer A pointer to the buffer where information for
|
||||||
|
the requested processor is deposited.
|
||||||
|
@param[out] HealthData Return processor health data.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS Processor information was returned.
|
||||||
|
@retval EFI_DEVICE_ERROR The calling processor is an AP.
|
||||||
|
@retval EFI_INVALID_PARAMETER ProcessorInfoBuffer is NULL or ProcessorNumber is not 0.
|
||||||
|
@retval EFI_NOT_FOUND The processor with the handle specified by
|
||||||
|
ProcessorNumber does not exist in the platform.
|
||||||
|
@retval EFI_NOT_READY MP Initialize Library is not initialized.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
TdxMpInitLibGetProcessorInfo (
|
||||||
|
IN UINTN ProcessorNumber,
|
||||||
|
OUT EFI_PROCESSOR_INFORMATION *ProcessorInfoBuffer,
|
||||||
|
OUT EFI_HEALTH_FLAGS *HealthData OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINTN OriginalProcessorNumber;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Lower 24 bits contains the actual processor number.
|
||||||
|
//
|
||||||
|
OriginalProcessorNumber = ProcessorNumber;
|
||||||
|
ProcessorNumber &= BIT24 - 1;
|
||||||
|
|
||||||
|
if ((ProcessorInfoBuffer == NULL) || (ProcessorNumber != 0)) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessorInfoBuffer->ProcessorId = 0;
|
||||||
|
ProcessorInfoBuffer->StatusFlag = PROCESSOR_AS_BSP_BIT | PROCESSOR_ENABLED_BIT;
|
||||||
|
ZeroMem (&ProcessorInfoBuffer->Location, sizeof (EFI_CPU_PHYSICAL_LOCATION));
|
||||||
|
|
||||||
|
if ((OriginalProcessorNumber & CPU_V2_EXTENDED_TOPOLOGY) != 0) {
|
||||||
|
ZeroMem (&ProcessorInfoBuffer->ExtendedInformation.Location2, sizeof (EFI_CPU_PHYSICAL_LOCATION2));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (HealthData != NULL) {
|
||||||
|
HealthData->Uint32 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Retrieves the number of logical processor in the platform and the number of
|
||||||
|
those logical processors that are enabled on this boot. This service may only
|
||||||
|
be called from the BSP.
|
||||||
|
|
||||||
|
@param[out] NumberOfProcessors Pointer to the total number of logical
|
||||||
|
processors in the system, including the BSP
|
||||||
|
and disabled APs.
|
||||||
|
@param[out] NumberOfEnabledProcessors Pointer to the number of enabled logical
|
||||||
|
processors that exist in system, including
|
||||||
|
the BSP.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The number of logical processors and enabled
|
||||||
|
logical processors was retrieved.
|
||||||
|
@retval EFI_DEVICE_ERROR The calling processor is an AP.
|
||||||
|
@retval EFI_INVALID_PARAMETER NumberOfProcessors is NULL and NumberOfEnabledProcessors
|
||||||
|
is NULL.
|
||||||
|
@retval EFI_NOT_READY MP Initialize Library is not initialized.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
TdxMpInitLibGetNumberOfProcessors (
|
||||||
|
OUT UINTN *NumberOfProcessors, OPTIONAL
|
||||||
|
OUT UINTN *NumberOfEnabledProcessors OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (NumberOfProcessors != NULL || NumberOfEnabledProcessors != NULL);
|
||||||
|
//
|
||||||
|
// In current stage only the BSP is workable. So NumberOfProcessors
|
||||||
|
// & NumberOfEnableddProcessors are both 1.
|
||||||
|
//
|
||||||
|
if (NumberOfProcessors != NULL) {
|
||||||
|
*NumberOfProcessors = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NumberOfEnabledProcessors != NULL) {
|
||||||
|
*NumberOfEnabledProcessors = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
|
@ -0,0 +1,69 @@
|
||||||
|
/** @file
|
||||||
|
CPU MP Initialize Library common functions (NULL instance) for Td guest.
|
||||||
|
|
||||||
|
Copyright (c) 2020 - 2022, Intel Corporation. All rights reserved.<BR>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MpLib.h"
|
||||||
|
#include "MpIntelTdx.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Gets detailed MP-related information on the requested processor at the
|
||||||
|
instant this call is made. This service may only be called from the BSP.
|
||||||
|
|
||||||
|
@param[in] ProcessorNumber The handle number of processor.
|
||||||
|
@param[out] ProcessorInfoBuffer A pointer to the buffer where information for
|
||||||
|
the requested processor is deposited.
|
||||||
|
@param[out] HealthData Return processor health data.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS Processor information was returned.
|
||||||
|
@retval EFI_DEVICE_ERROR The calling processor is an AP.
|
||||||
|
@retval EFI_INVALID_PARAMETER ProcessorInfoBuffer is NULL.
|
||||||
|
@retval EFI_NOT_FOUND The processor with the handle specified by
|
||||||
|
ProcessorNumber does not exist in the platform.
|
||||||
|
@retval EFI_NOT_READY MP Initialize Library is not initialized.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
TdxMpInitLibGetProcessorInfo (
|
||||||
|
IN UINTN ProcessorNumber,
|
||||||
|
OUT EFI_PROCESSOR_INFORMATION *ProcessorInfoBuffer,
|
||||||
|
OUT EFI_HEALTH_FLAGS *HealthData OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (FALSE);
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Retrieves the number of logical processor in the platform and the number of
|
||||||
|
those logical processors that are enabled on this boot. This service may only
|
||||||
|
be called from the BSP.
|
||||||
|
|
||||||
|
@param[out] NumberOfProcessors Pointer to the total number of logical
|
||||||
|
processors in the system, including the BSP
|
||||||
|
and disabled APs.
|
||||||
|
@param[out] NumberOfEnabledProcessors Pointer to the number of enabled logical
|
||||||
|
processors that exist in system, including
|
||||||
|
the BSP.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The number of logical processors and enabled
|
||||||
|
logical processors was retrieved.
|
||||||
|
@retval EFI_DEVICE_ERROR The calling processor is an AP.
|
||||||
|
@retval EFI_INVALID_PARAMETER NumberOfProcessors is NULL and NumberOfEnabledProcessors
|
||||||
|
is NULL.
|
||||||
|
@retval EFI_NOT_READY MP Initialize Library is not initialized.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
TdxMpInitLibGetNumberOfProcessors (
|
||||||
|
OUT UINTN *NumberOfProcessors, OPTIONAL
|
||||||
|
OUT UINTN *NumberOfEnabledProcessors OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (FALSE);
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
|
@ -24,10 +24,12 @@
|
||||||
[Sources.IA32]
|
[Sources.IA32]
|
||||||
Ia32/AmdSev.c
|
Ia32/AmdSev.c
|
||||||
Ia32/MpFuncs.nasm
|
Ia32/MpFuncs.nasm
|
||||||
|
MpLibTdxNull.c
|
||||||
|
|
||||||
[Sources.X64]
|
[Sources.X64]
|
||||||
X64/AmdSev.c
|
X64/AmdSev.c
|
||||||
X64/MpFuncs.nasm
|
X64/MpFuncs.nasm
|
||||||
|
MpLibTdx.c
|
||||||
|
|
||||||
[Sources.common]
|
[Sources.common]
|
||||||
AmdSev.c
|
AmdSev.c
|
||||||
|
@ -36,6 +38,7 @@
|
||||||
MpLib.c
|
MpLib.c
|
||||||
MpLib.h
|
MpLib.h
|
||||||
Microcode.c
|
Microcode.c
|
||||||
|
MpIntelTdx.h
|
||||||
|
|
||||||
[Packages]
|
[Packages]
|
||||||
MdePkg/MdePkg.dec
|
MdePkg/MdePkg.dec
|
||||||
|
|
Loading…
Reference in New Issue