UefiCpuPkg: Apply uncrustify changes
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the UefiCpuPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
This commit is contained in:
committed by
mergify[bot]
parent
91415a36ae
commit
053e878bfb
@@ -8,11 +8,11 @@
|
||||
|
||||
#include "CpuMpPei.h"
|
||||
|
||||
EFI_SEC_PLATFORM_INFORMATION2_PPI mSecPlatformInformation2Ppi = {
|
||||
EFI_SEC_PLATFORM_INFORMATION2_PPI mSecPlatformInformation2Ppi = {
|
||||
SecPlatformInformation2
|
||||
};
|
||||
|
||||
EFI_PEI_PPI_DESCRIPTOR mPeiSecPlatformInformation2Ppi = {
|
||||
EFI_PEI_PPI_DESCRIPTOR mPeiSecPlatformInformation2Ppi = {
|
||||
(EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
|
||||
&gEfiSecPlatformInformation2PpiGuid,
|
||||
&mSecPlatformInformation2Ppi
|
||||
@@ -33,14 +33,14 @@ EFI_PEI_PPI_DESCRIPTOR mPeiSecPlatformInformation2Ppi = {
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SecPlatformInformation2 (
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN OUT UINT64 *StructureSize,
|
||||
OUT EFI_SEC_PLATFORM_INFORMATION_RECORD2 *PlatformInformationRecord2
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN OUT UINT64 *StructureSize,
|
||||
OUT EFI_SEC_PLATFORM_INFORMATION_RECORD2 *PlatformInformationRecord2
|
||||
)
|
||||
{
|
||||
EFI_HOB_GUID_TYPE *GuidHob;
|
||||
VOID *DataInHob;
|
||||
UINTN DataSize;
|
||||
EFI_HOB_GUID_TYPE *GuidHob;
|
||||
VOID *DataInHob;
|
||||
UINTN DataSize;
|
||||
|
||||
GuidHob = GetFirstGuidHob (&gEfiSecPlatformInformation2PpiGuid);
|
||||
if (GuidHob == NULL) {
|
||||
@@ -54,12 +54,12 @@ SecPlatformInformation2 (
|
||||
//
|
||||
// return the information from BistHob
|
||||
//
|
||||
if ((*StructureSize) < (UINT64) DataSize) {
|
||||
*StructureSize = (UINT64) DataSize;
|
||||
if ((*StructureSize) < (UINT64)DataSize) {
|
||||
*StructureSize = (UINT64)DataSize;
|
||||
return EFI_BUFFER_TOO_SMALL;
|
||||
}
|
||||
|
||||
*StructureSize = (UINT64) DataSize;
|
||||
*StructureSize = (UINT64)DataSize;
|
||||
CopyMem (PlatformInformationRecord2, DataInHob, DataSize);
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
@@ -82,11 +82,11 @@ SecPlatformInformation2 (
|
||||
**/
|
||||
EFI_STATUS
|
||||
GetBistInfoFromPpi (
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN CONST EFI_GUID *Guid,
|
||||
OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor,
|
||||
OUT VOID **BistInformationData,
|
||||
OUT UINT64 *BistInformationSize OPTIONAL
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN CONST EFI_GUID *Guid,
|
||||
OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor,
|
||||
OUT VOID **BistInformationData,
|
||||
OUT UINT64 *BistInformationSize OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
@@ -110,15 +110,15 @@ GetBistInfoFromPpi (
|
||||
//
|
||||
InformationSize = 0;
|
||||
SecPlatformInformation2 = NULL;
|
||||
Status = SecPlatformInformation2Ppi->PlatformInformation2 (
|
||||
PeiServices,
|
||||
&InformationSize,
|
||||
SecPlatformInformation2
|
||||
);
|
||||
Status = SecPlatformInformation2Ppi->PlatformInformation2 (
|
||||
PeiServices,
|
||||
&InformationSize,
|
||||
SecPlatformInformation2
|
||||
);
|
||||
if (Status == EFI_BUFFER_TOO_SMALL) {
|
||||
Status = PeiServicesAllocatePool (
|
||||
(UINTN) InformationSize,
|
||||
(VOID **) &SecPlatformInformation2
|
||||
(UINTN)InformationSize,
|
||||
(VOID **)&SecPlatformInformation2
|
||||
);
|
||||
if (Status == EFI_SUCCESS) {
|
||||
//
|
||||
@@ -134,6 +134,7 @@ GetBistInfoFromPpi (
|
||||
if (BistInformationSize != NULL) {
|
||||
*BistInformationSize = InformationSize;
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
}
|
||||
@@ -154,7 +155,7 @@ GetBistInfoFromPpi (
|
||||
**/
|
||||
VOID
|
||||
CollectBistDataFromPpi (
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
@@ -174,14 +175,13 @@ CollectBistDataFromPpi (
|
||||
EFI_SEC_PLATFORM_INFORMATION_RECORD2 *PlatformInformationRecord2;
|
||||
EFI_SEC_PLATFORM_INFORMATION_CPU *CpuInstanceInHob;
|
||||
|
||||
|
||||
MpInitLibGetNumberOfProcessors(&NumberOfProcessors, &NumberOfEnabledProcessors);
|
||||
MpInitLibGetNumberOfProcessors (&NumberOfProcessors, &NumberOfEnabledProcessors);
|
||||
|
||||
BistInformationSize = sizeof (EFI_SEC_PLATFORM_INFORMATION_RECORD2) +
|
||||
sizeof (EFI_SEC_PLATFORM_INFORMATION_CPU) * NumberOfProcessors;
|
||||
Status = PeiServicesAllocatePool (
|
||||
(UINTN) BistInformationSize,
|
||||
(VOID **) &PlatformInformationRecord2
|
||||
(UINTN)BistInformationSize,
|
||||
(VOID **)&PlatformInformationRecord2
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
PlatformInformationRecord2->NumberOfCpus = (UINT32)NumberOfProcessors;
|
||||
@@ -197,7 +197,7 @@ CollectBistDataFromPpi (
|
||||
PeiServices,
|
||||
&gEfiSecPlatformInformation2PpiGuid,
|
||||
&SecInformationDescriptor,
|
||||
(VOID *) &SecPlatformInformation2,
|
||||
(VOID *)&SecPlatformInformation2,
|
||||
NULL
|
||||
);
|
||||
if (Status == EFI_SUCCESS) {
|
||||
@@ -214,7 +214,7 @@ CollectBistDataFromPpi (
|
||||
PeiServices,
|
||||
&gEfiSecPlatformInformationPpiGuid,
|
||||
&SecInformationDescriptor,
|
||||
(VOID *) &SecPlatformInformation,
|
||||
(VOID *)&SecPlatformInformation,
|
||||
NULL
|
||||
);
|
||||
if (Status == EFI_SUCCESS) {
|
||||
@@ -223,16 +223,17 @@ CollectBistDataFromPpi (
|
||||
// SEC Platform Information only includes BSP's BIST information
|
||||
// and does not have BSP's APIC ID
|
||||
//
|
||||
BspCpuInstance.CpuLocation = GetInitialApicId ();
|
||||
BspCpuInstance.InfoRecord.IA32HealthFlags.Uint32 = SecPlatformInformation->IA32HealthFlags.Uint32;
|
||||
CpuInstance = &BspCpuInstance;
|
||||
BspCpuInstance.CpuLocation = GetInitialApicId ();
|
||||
BspCpuInstance.InfoRecord.IA32HealthFlags.Uint32 = SecPlatformInformation->IA32HealthFlags.Uint32;
|
||||
CpuInstance = &BspCpuInstance;
|
||||
} else {
|
||||
DEBUG ((DEBUG_INFO, "Does not find any stored CPU BIST information from PPI!\n"));
|
||||
}
|
||||
}
|
||||
for (ProcessorNumber = 0; ProcessorNumber < NumberOfProcessors; ProcessorNumber ++) {
|
||||
|
||||
for (ProcessorNumber = 0; ProcessorNumber < NumberOfProcessors; ProcessorNumber++) {
|
||||
MpInitLibGetProcessorInfo (ProcessorNumber, &ProcessorInfo, &BistData);
|
||||
for (CpuIndex = 0; CpuIndex < NumberOfData; CpuIndex ++) {
|
||||
for (CpuIndex = 0; CpuIndex < NumberOfData; CpuIndex++) {
|
||||
ASSERT (CpuInstance != NULL);
|
||||
if (ProcessorInfo.ProcessorId == CpuInstance[CpuIndex].CpuLocation) {
|
||||
//
|
||||
@@ -241,6 +242,7 @@ CollectBistDataFromPpi (
|
||||
BistData = CpuInstance[CpuIndex].InfoRecord.IA32HealthFlags;
|
||||
}
|
||||
}
|
||||
|
||||
if (BistData.Uint32 != 0) {
|
||||
//
|
||||
// Report Status Code that self test is failed
|
||||
@@ -250,12 +252,15 @@ CollectBistDataFromPpi (
|
||||
(EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_EC_SELF_TEST)
|
||||
);
|
||||
}
|
||||
DEBUG ((DEBUG_INFO, " APICID - 0x%08x, BIST - 0x%08x\n",
|
||||
(UINT32) ProcessorInfo.ProcessorId,
|
||||
BistData
|
||||
));
|
||||
CpuInstanceInHob = PlatformInformationRecord2->CpuInstance;
|
||||
CpuInstanceInHob[ProcessorNumber].CpuLocation = (UINT32) ProcessorInfo.ProcessorId;
|
||||
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
" APICID - 0x%08x, BIST - 0x%08x\n",
|
||||
(UINT32)ProcessorInfo.ProcessorId,
|
||||
BistData
|
||||
));
|
||||
CpuInstanceInHob = PlatformInformationRecord2->CpuInstance;
|
||||
CpuInstanceInHob[ProcessorNumber].CpuLocation = (UINT32)ProcessorInfo.ProcessorId;
|
||||
CpuInstanceInHob[ProcessorNumber].InfoRecord.IA32HealthFlags = BistData;
|
||||
}
|
||||
|
||||
@@ -266,7 +271,7 @@ CollectBistDataFromPpi (
|
||||
BuildGuidDataHob (
|
||||
&gEfiSecPlatformInformation2PpiGuid,
|
||||
PlatformInformationRecord2,
|
||||
(UINTN) BistInformationSize
|
||||
(UINTN)BistInformationSize
|
||||
);
|
||||
|
||||
if (SecPlatformInformation2 != NULL) {
|
||||
@@ -285,6 +290,6 @@ CollectBistDataFromPpi (
|
||||
// Install SecPlatformInformation2 PPI
|
||||
//
|
||||
Status = PeiServicesInstallPpi (&mPeiSecPlatformInformation2Ppi);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
}
|
||||
}
|
||||
|
@@ -43,9 +43,9 @@
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EdkiiPeiGetNumberOfProcessors (
|
||||
IN EDKII_PEI_MP_SERVICES2_PPI *This,
|
||||
OUT UINTN *NumberOfProcessors,
|
||||
OUT UINTN *NumberOfEnabledProcessors
|
||||
IN EDKII_PEI_MP_SERVICES2_PPI *This,
|
||||
OUT UINTN *NumberOfProcessors,
|
||||
OUT UINTN *NumberOfEnabledProcessors
|
||||
)
|
||||
{
|
||||
if ((NumberOfProcessors == NULL) || (NumberOfEnabledProcessors == NULL)) {
|
||||
@@ -85,9 +85,9 @@ EdkiiPeiGetNumberOfProcessors (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EdkiiPeiGetProcessorInfo (
|
||||
IN EDKII_PEI_MP_SERVICES2_PPI *This,
|
||||
IN UINTN ProcessorNumber,
|
||||
OUT EFI_PROCESSOR_INFORMATION *ProcessorInfoBuffer
|
||||
IN EDKII_PEI_MP_SERVICES2_PPI *This,
|
||||
IN UINTN ProcessorNumber,
|
||||
OUT EFI_PROCESSOR_INFORMATION *ProcessorInfoBuffer
|
||||
)
|
||||
{
|
||||
return MpInitLibGetProcessorInfo (ProcessorNumber, ProcessorInfoBuffer, NULL);
|
||||
@@ -157,11 +157,11 @@ EdkiiPeiGetProcessorInfo (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EdkiiPeiStartupAllAPs (
|
||||
IN EDKII_PEI_MP_SERVICES2_PPI *This,
|
||||
IN EFI_AP_PROCEDURE Procedure,
|
||||
IN BOOLEAN SingleThread,
|
||||
IN UINTN TimeoutInMicroSeconds,
|
||||
IN VOID *ProcedureArgument OPTIONAL
|
||||
IN EDKII_PEI_MP_SERVICES2_PPI *This,
|
||||
IN EFI_AP_PROCEDURE Procedure,
|
||||
IN BOOLEAN SingleThread,
|
||||
IN UINTN TimeoutInMicroSeconds,
|
||||
IN VOID *ProcedureArgument OPTIONAL
|
||||
)
|
||||
{
|
||||
return MpInitLibStartupAllAPs (
|
||||
@@ -221,11 +221,11 @@ EdkiiPeiStartupAllAPs (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EdkiiPeiStartupThisAP (
|
||||
IN EDKII_PEI_MP_SERVICES2_PPI *This,
|
||||
IN EFI_AP_PROCEDURE Procedure,
|
||||
IN UINTN ProcessorNumber,
|
||||
IN UINTN TimeoutInMicroseconds,
|
||||
IN VOID *ProcedureArgument OPTIONAL
|
||||
IN EDKII_PEI_MP_SERVICES2_PPI *This,
|
||||
IN EFI_AP_PROCEDURE Procedure,
|
||||
IN UINTN ProcessorNumber,
|
||||
IN UINTN TimeoutInMicroseconds,
|
||||
IN VOID *ProcedureArgument OPTIONAL
|
||||
)
|
||||
{
|
||||
return MpInitLibStartupThisAP (
|
||||
@@ -321,10 +321,10 @@ EdkiiPeiSwitchBSP (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EdkiiPeiEnableDisableAP (
|
||||
IN EDKII_PEI_MP_SERVICES2_PPI *This,
|
||||
IN UINTN ProcessorNumber,
|
||||
IN BOOLEAN EnableAP,
|
||||
IN UINT32 *HealthFlag OPTIONAL
|
||||
IN EDKII_PEI_MP_SERVICES2_PPI *This,
|
||||
IN UINTN ProcessorNumber,
|
||||
IN BOOLEAN EnableAP,
|
||||
IN UINT32 *HealthFlag OPTIONAL
|
||||
)
|
||||
{
|
||||
return MpInitLibEnableDisableAP (ProcessorNumber, EnableAP, HealthFlag);
|
||||
@@ -388,10 +388,10 @@ EdkiiPeiWhoAmI (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EdkiiPeiStartupAllCPUs (
|
||||
IN EDKII_PEI_MP_SERVICES2_PPI *This,
|
||||
IN EFI_AP_PROCEDURE Procedure,
|
||||
IN UINTN TimeoutInMicroSeconds,
|
||||
IN VOID *ProcedureArgument OPTIONAL
|
||||
IN EDKII_PEI_MP_SERVICES2_PPI *This,
|
||||
IN EFI_AP_PROCEDURE Procedure,
|
||||
IN UINTN TimeoutInMicroSeconds,
|
||||
IN VOID *ProcedureArgument OPTIONAL
|
||||
)
|
||||
{
|
||||
return MpInitLibStartupAllCPUs (
|
||||
@@ -404,7 +404,7 @@ EdkiiPeiStartupAllCPUs (
|
||||
//
|
||||
// CPU MP2 PPI to be installed
|
||||
//
|
||||
EDKII_PEI_MP_SERVICES2_PPI mMpServices2Ppi = {
|
||||
EDKII_PEI_MP_SERVICES2_PPI mMpServices2Ppi = {
|
||||
EdkiiPeiGetNumberOfProcessors,
|
||||
EdkiiPeiGetProcessorInfo,
|
||||
EdkiiPeiStartupAllAPs,
|
||||
@@ -414,4 +414,3 @@ EDKII_PEI_MP_SERVICES2_PPI mMpServices2Ppi = {
|
||||
EdkiiPeiWhoAmI,
|
||||
EdkiiPeiStartupAllCPUs
|
||||
};
|
||||
|
||||
|
@@ -8,12 +8,12 @@
|
||||
|
||||
#include "CpuMpPei.h"
|
||||
|
||||
extern EDKII_PEI_MP_SERVICES2_PPI mMpServices2Ppi;
|
||||
extern EDKII_PEI_MP_SERVICES2_PPI mMpServices2Ppi;
|
||||
|
||||
//
|
||||
// CPU MP PPI to be installed
|
||||
//
|
||||
EFI_PEI_MP_SERVICES_PPI mMpServicesPpi = {
|
||||
EFI_PEI_MP_SERVICES_PPI mMpServicesPpi = {
|
||||
PeiGetNumberOfProcessors,
|
||||
PeiGetProcessorInfo,
|
||||
PeiStartupAllAPs,
|
||||
@@ -23,7 +23,7 @@ EFI_PEI_MP_SERVICES_PPI mMpServicesPpi = {
|
||||
PeiWhoAmI,
|
||||
};
|
||||
|
||||
EFI_PEI_PPI_DESCRIPTOR mPeiCpuMpPpiList[] = {
|
||||
EFI_PEI_PPI_DESCRIPTOR mPeiCpuMpPpiList[] = {
|
||||
{
|
||||
EFI_PEI_PPI_DESCRIPTOR_PPI,
|
||||
&gEdkiiPeiMpServices2PpiGuid,
|
||||
@@ -73,10 +73,10 @@ EFI_PEI_PPI_DESCRIPTOR mPeiCpuMpPpiList[] = {
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PeiGetNumberOfProcessors (
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_MP_SERVICES_PPI *This,
|
||||
OUT UINTN *NumberOfProcessors,
|
||||
OUT UINTN *NumberOfEnabledProcessors
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_MP_SERVICES_PPI *This,
|
||||
OUT UINTN *NumberOfProcessors,
|
||||
OUT UINTN *NumberOfEnabledProcessors
|
||||
)
|
||||
{
|
||||
if ((NumberOfProcessors == NULL) || (NumberOfEnabledProcessors == NULL)) {
|
||||
@@ -193,12 +193,12 @@ PeiGetProcessorInfo (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PeiStartupAllAPs (
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_MP_SERVICES_PPI *This,
|
||||
IN EFI_AP_PROCEDURE Procedure,
|
||||
IN BOOLEAN SingleThread,
|
||||
IN UINTN TimeoutInMicroSeconds,
|
||||
IN VOID *ProcedureArgument OPTIONAL
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_MP_SERVICES_PPI *This,
|
||||
IN EFI_AP_PROCEDURE Procedure,
|
||||
IN BOOLEAN SingleThread,
|
||||
IN UINTN TimeoutInMicroSeconds,
|
||||
IN VOID *ProcedureArgument OPTIONAL
|
||||
)
|
||||
{
|
||||
return MpInitLibStartupAllAPs (
|
||||
@@ -260,12 +260,12 @@ PeiStartupAllAPs (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PeiStartupThisAP (
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_MP_SERVICES_PPI *This,
|
||||
IN EFI_AP_PROCEDURE Procedure,
|
||||
IN UINTN ProcessorNumber,
|
||||
IN UINTN TimeoutInMicroseconds,
|
||||
IN VOID *ProcedureArgument OPTIONAL
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_MP_SERVICES_PPI *This,
|
||||
IN EFI_AP_PROCEDURE Procedure,
|
||||
IN UINTN ProcessorNumber,
|
||||
IN UINTN TimeoutInMicroseconds,
|
||||
IN VOID *ProcedureArgument OPTIONAL
|
||||
)
|
||||
{
|
||||
return MpInitLibStartupThisAP (
|
||||
@@ -366,11 +366,11 @@ PeiSwitchBSP (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PeiEnableDisableAP (
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_MP_SERVICES_PPI *This,
|
||||
IN UINTN ProcessorNumber,
|
||||
IN BOOLEAN EnableAP,
|
||||
IN UINT32 *HealthFlag OPTIONAL
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_MP_SERVICES_PPI *This,
|
||||
IN UINTN ProcessorNumber,
|
||||
IN BOOLEAN EnableAP,
|
||||
IN UINT32 *HealthFlag OPTIONAL
|
||||
)
|
||||
{
|
||||
return MpInitLibEnableDisableAP (ProcessorNumber, EnableAP, HealthFlag);
|
||||
@@ -423,7 +423,7 @@ PeiWhoAmI (
|
||||
VOID
|
||||
EFIAPI
|
||||
GetGdtr (
|
||||
IN OUT VOID *Buffer
|
||||
IN OUT VOID *Buffer
|
||||
)
|
||||
{
|
||||
AsmReadGdtr ((IA32_DESCRIPTOR *)Buffer);
|
||||
@@ -441,12 +441,12 @@ GetGdtr (
|
||||
VOID
|
||||
EFIAPI
|
||||
InitializeExceptionStackSwitchHandlers (
|
||||
IN OUT VOID *Buffer
|
||||
IN OUT VOID *Buffer
|
||||
)
|
||||
{
|
||||
CPU_EXCEPTION_INIT_DATA *EssData;
|
||||
IA32_DESCRIPTOR Idtr;
|
||||
EFI_STATUS Status;
|
||||
CPU_EXCEPTION_INIT_DATA *EssData;
|
||||
IA32_DESCRIPTOR Idtr;
|
||||
EFI_STATUS Status;
|
||||
|
||||
EssData = Buffer;
|
||||
//
|
||||
@@ -454,9 +454,9 @@ InitializeExceptionStackSwitchHandlers (
|
||||
// the AP's IDT is the same as BSP's IDT either.
|
||||
//
|
||||
AsmReadIdtr (&Idtr);
|
||||
EssData->Ia32.IdtTable = (VOID *)Idtr.Base;
|
||||
EssData->Ia32.IdtTable = (VOID *)Idtr.Base;
|
||||
EssData->Ia32.IdtTableSize = Idtr.Limit + 1;
|
||||
Status = InitializeCpuExceptionHandlersEx (NULL, EssData);
|
||||
Status = InitializeCpuExceptionHandlersEx (NULL, EssData);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
}
|
||||
|
||||
@@ -472,58 +472,59 @@ InitializeMpExceptionStackSwitchHandlers (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN Index;
|
||||
UINTN Bsp;
|
||||
UINTN ExceptionNumber;
|
||||
UINTN OldGdtSize;
|
||||
UINTN NewGdtSize;
|
||||
UINTN NewStackSize;
|
||||
IA32_DESCRIPTOR Gdtr;
|
||||
CPU_EXCEPTION_INIT_DATA EssData;
|
||||
UINT8 *GdtBuffer;
|
||||
UINT8 *StackTop;
|
||||
UINTN NumberOfProcessors;
|
||||
EFI_STATUS Status;
|
||||
UINTN Index;
|
||||
UINTN Bsp;
|
||||
UINTN ExceptionNumber;
|
||||
UINTN OldGdtSize;
|
||||
UINTN NewGdtSize;
|
||||
UINTN NewStackSize;
|
||||
IA32_DESCRIPTOR Gdtr;
|
||||
CPU_EXCEPTION_INIT_DATA EssData;
|
||||
UINT8 *GdtBuffer;
|
||||
UINT8 *StackTop;
|
||||
UINTN NumberOfProcessors;
|
||||
|
||||
if (!PcdGetBool (PcdCpuStackGuard)) {
|
||||
return;
|
||||
}
|
||||
|
||||
MpInitLibGetNumberOfProcessors(&NumberOfProcessors, NULL);
|
||||
MpInitLibGetNumberOfProcessors (&NumberOfProcessors, NULL);
|
||||
MpInitLibWhoAmI (&Bsp);
|
||||
|
||||
ExceptionNumber = FixedPcdGetSize (PcdCpuStackSwitchExceptionList);
|
||||
NewStackSize = FixedPcdGet32 (PcdCpuKnownGoodStackSize) * ExceptionNumber;
|
||||
NewStackSize = FixedPcdGet32 (PcdCpuKnownGoodStackSize) * ExceptionNumber;
|
||||
|
||||
StackTop = AllocatePages (EFI_SIZE_TO_PAGES (NewStackSize * NumberOfProcessors));
|
||||
ASSERT(StackTop != NULL);
|
||||
ASSERT (StackTop != NULL);
|
||||
if (StackTop == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
StackTop += NewStackSize * NumberOfProcessors;
|
||||
|
||||
//
|
||||
// The default exception handlers must have been initialized. Let's just skip
|
||||
// it in this method.
|
||||
//
|
||||
EssData.Ia32.Revision = CPU_EXCEPTION_INIT_DATA_REV;
|
||||
EssData.Ia32.Revision = CPU_EXCEPTION_INIT_DATA_REV;
|
||||
EssData.Ia32.InitDefaultHandlers = FALSE;
|
||||
|
||||
EssData.Ia32.StackSwitchExceptions = FixedPcdGetPtr(PcdCpuStackSwitchExceptionList);
|
||||
EssData.Ia32.StackSwitchExceptions = FixedPcdGetPtr (PcdCpuStackSwitchExceptionList);
|
||||
EssData.Ia32.StackSwitchExceptionNumber = ExceptionNumber;
|
||||
EssData.Ia32.KnownGoodStackSize = FixedPcdGet32(PcdCpuKnownGoodStackSize);
|
||||
EssData.Ia32.KnownGoodStackSize = FixedPcdGet32 (PcdCpuKnownGoodStackSize);
|
||||
|
||||
//
|
||||
// Initialize Gdtr to suppress incorrect compiler/analyzer warnings.
|
||||
//
|
||||
Gdtr.Base = 0;
|
||||
Gdtr.Base = 0;
|
||||
Gdtr.Limit = 0;
|
||||
for (Index = 0; Index < NumberOfProcessors; ++Index) {
|
||||
//
|
||||
// To support stack switch, we need to re-construct GDT but not IDT.
|
||||
//
|
||||
if (Index == Bsp) {
|
||||
GetGdtr(&Gdtr);
|
||||
GetGdtr (&Gdtr);
|
||||
} else {
|
||||
//
|
||||
// AP might have different size of GDT from BSP.
|
||||
@@ -560,7 +561,7 @@ InitializeMpExceptionStackSwitchHandlers (
|
||||
// | |
|
||||
// --------------------------------
|
||||
//
|
||||
OldGdtSize = Gdtr.Limit + 1;
|
||||
OldGdtSize = Gdtr.Limit + 1;
|
||||
EssData.Ia32.ExceptionTssDescSize = sizeof (IA32_TSS_DESCRIPTOR) *
|
||||
(ExceptionNumber + 1);
|
||||
EssData.Ia32.ExceptionTssSize = sizeof (IA32_TASK_STATE_SEGMENT) *
|
||||
@@ -583,19 +584,21 @@ InitializeMpExceptionStackSwitchHandlers (
|
||||
//
|
||||
// Make sure GDT table alignment
|
||||
//
|
||||
EssData.Ia32.GdtTable = ALIGN_POINTER(GdtBuffer, sizeof (IA32_TSS_DESCRIPTOR));
|
||||
NewGdtSize -= ((UINT8 *)EssData.Ia32.GdtTable - GdtBuffer);
|
||||
EssData.Ia32.GdtTable = ALIGN_POINTER (GdtBuffer, sizeof (IA32_TSS_DESCRIPTOR));
|
||||
NewGdtSize -= ((UINT8 *)EssData.Ia32.GdtTable - GdtBuffer);
|
||||
EssData.Ia32.GdtTableSize = NewGdtSize;
|
||||
|
||||
EssData.Ia32.ExceptionTssDesc = ((UINT8 *)EssData.Ia32.GdtTable + OldGdtSize);
|
||||
EssData.Ia32.ExceptionTss = ((UINT8 *)EssData.Ia32.GdtTable + OldGdtSize +
|
||||
EssData.Ia32.ExceptionTssDescSize);
|
||||
EssData.Ia32.ExceptionTss = ((UINT8 *)EssData.Ia32.GdtTable + OldGdtSize +
|
||||
EssData.Ia32.ExceptionTssDescSize);
|
||||
|
||||
EssData.Ia32.KnownGoodStackTop = (UINTN)StackTop;
|
||||
DEBUG ((DEBUG_INFO,
|
||||
"Exception stack top[cpu%lu]: 0x%lX\n",
|
||||
(UINT64)(UINTN)Index,
|
||||
(UINT64)(UINTN)StackTop));
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"Exception stack top[cpu%lu]: 0x%lX\n",
|
||||
(UINT64)(UINTN)Index,
|
||||
(UINT64)(UINTN)StackTop
|
||||
));
|
||||
|
||||
if (Index == Bsp) {
|
||||
InitializeExceptionStackSwitchHandlers (&EssData);
|
||||
@@ -610,7 +613,7 @@ InitializeMpExceptionStackSwitchHandlers (
|
||||
);
|
||||
}
|
||||
|
||||
StackTop -= NewStackSize;
|
||||
StackTop -= NewStackSize;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -625,23 +628,23 @@ InitializeMpExceptionStackSwitchHandlers (
|
||||
**/
|
||||
EFI_STATUS
|
||||
InitializeCpuMpWorker (
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_VECTOR_HANDOFF_INFO *VectorInfo;
|
||||
EFI_PEI_VECTOR_HANDOFF_INFO_PPI *VectorHandoffInfoPpi;
|
||||
EFI_STATUS Status;
|
||||
EFI_VECTOR_HANDOFF_INFO *VectorInfo;
|
||||
EFI_PEI_VECTOR_HANDOFF_INFO_PPI *VectorHandoffInfoPpi;
|
||||
|
||||
//
|
||||
// Get Vector Hand-off Info PPI
|
||||
//
|
||||
VectorInfo = NULL;
|
||||
Status = PeiServicesLocatePpi (
|
||||
&gEfiVectorHandoffInfoPpiGuid,
|
||||
0,
|
||||
NULL,
|
||||
(VOID **)&VectorHandoffInfoPpi
|
||||
);
|
||||
Status = PeiServicesLocatePpi (
|
||||
&gEfiVectorHandoffInfoPpiGuid,
|
||||
0,
|
||||
NULL,
|
||||
(VOID **)&VectorHandoffInfoPpi
|
||||
);
|
||||
if (Status == EFI_SUCCESS) {
|
||||
VectorInfo = VectorHandoffInfoPpi->Info;
|
||||
}
|
||||
@@ -672,7 +675,7 @@ InitializeCpuMpWorker (
|
||||
//
|
||||
// Install CPU MP PPI
|
||||
//
|
||||
Status = PeiServicesInstallPpi(mPeiCpuMpPpiList);
|
||||
Status = PeiServicesInstallPpi (mPeiCpuMpPpiList);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
return Status;
|
||||
@@ -697,7 +700,7 @@ CpuMpPeimInit (
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status;
|
||||
|
||||
//
|
||||
// For the sake of special initialization needing to be done right after
|
||||
|
@@ -29,7 +29,7 @@
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
|
||||
extern EFI_PEI_PPI_DESCRIPTOR mPeiCpuMpPpiDesc;
|
||||
extern EFI_PEI_PPI_DESCRIPTOR mPeiCpuMpPpiDesc;
|
||||
|
||||
/**
|
||||
This service retrieves the number of logical processor in the platform
|
||||
@@ -68,10 +68,10 @@ extern EFI_PEI_PPI_DESCRIPTOR mPeiCpuMpPpiDesc;
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PeiGetNumberOfProcessors (
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_MP_SERVICES_PPI *This,
|
||||
OUT UINTN *NumberOfProcessors,
|
||||
OUT UINTN *NumberOfEnabledProcessors
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_MP_SERVICES_PPI *This,
|
||||
OUT UINTN *NumberOfProcessors,
|
||||
OUT UINTN *NumberOfEnabledProcessors
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -175,12 +175,12 @@ PeiGetProcessorInfo (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PeiStartupAllAPs (
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_MP_SERVICES_PPI *This,
|
||||
IN EFI_AP_PROCEDURE Procedure,
|
||||
IN BOOLEAN SingleThread,
|
||||
IN UINTN TimeoutInMicroSeconds,
|
||||
IN VOID *ProcedureArgument OPTIONAL
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_MP_SERVICES_PPI *This,
|
||||
IN EFI_AP_PROCEDURE Procedure,
|
||||
IN BOOLEAN SingleThread,
|
||||
IN UINTN TimeoutInMicroSeconds,
|
||||
IN VOID *ProcedureArgument OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -232,12 +232,12 @@ PeiStartupAllAPs (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PeiStartupThisAP (
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_MP_SERVICES_PPI *This,
|
||||
IN EFI_AP_PROCEDURE Procedure,
|
||||
IN UINTN ProcessorNumber,
|
||||
IN UINTN TimeoutInMicroseconds,
|
||||
IN VOID *ProcedureArgument OPTIONAL
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_MP_SERVICES_PPI *This,
|
||||
IN EFI_AP_PROCEDURE Procedure,
|
||||
IN UINTN ProcessorNumber,
|
||||
IN UINTN TimeoutInMicroseconds,
|
||||
IN VOID *ProcedureArgument OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -325,11 +325,11 @@ PeiSwitchBSP (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PeiEnableDisableAP (
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_MP_SERVICES_PPI *This,
|
||||
IN UINTN ProcessorNumber,
|
||||
IN BOOLEAN EnableAP,
|
||||
IN UINT32 *HealthFlag OPTIONAL
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_MP_SERVICES_PPI *This,
|
||||
IN UINTN ProcessorNumber,
|
||||
IN BOOLEAN EnableAP,
|
||||
IN UINT32 *HealthFlag OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -375,7 +375,7 @@ PeiWhoAmI (
|
||||
**/
|
||||
VOID
|
||||
CollectBistDataFromPpi (
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -393,9 +393,9 @@ CollectBistDataFromPpi (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SecPlatformInformation2 (
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN OUT UINT64 *StructureSize,
|
||||
OUT EFI_SEC_PLATFORM_INFORMATION_RECORD2 *PlatformInformationRecord2
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||
IN OUT UINT64 *StructureSize,
|
||||
OUT EFI_SEC_PLATFORM_INFORMATION_RECORD2 *PlatformInformationRecord2
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -421,7 +421,7 @@ MigrateGdt (
|
||||
**/
|
||||
EFI_STATUS
|
||||
InitializeCpuMpWorker (
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices
|
||||
IN CONST EFI_PEI_SERVICES **PeiServices
|
||||
);
|
||||
|
||||
/**
|
||||
|
@@ -16,23 +16,23 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
#include "CpuMpPei.h"
|
||||
|
||||
#define IA32_PG_P BIT0
|
||||
#define IA32_PG_RW BIT1
|
||||
#define IA32_PG_U BIT2
|
||||
#define IA32_PG_A BIT5
|
||||
#define IA32_PG_D BIT6
|
||||
#define IA32_PG_PS BIT7
|
||||
#define IA32_PG_NX BIT63
|
||||
#define IA32_PG_P BIT0
|
||||
#define IA32_PG_RW BIT1
|
||||
#define IA32_PG_U BIT2
|
||||
#define IA32_PG_A BIT5
|
||||
#define IA32_PG_D BIT6
|
||||
#define IA32_PG_PS BIT7
|
||||
#define IA32_PG_NX BIT63
|
||||
|
||||
#define PAGE_ATTRIBUTE_BITS (IA32_PG_RW | IA32_PG_P)
|
||||
#define PAGE_PROGATE_BITS (IA32_PG_D | IA32_PG_A | IA32_PG_NX | IA32_PG_U |\
|
||||
#define PAGE_ATTRIBUTE_BITS (IA32_PG_RW | IA32_PG_P)
|
||||
#define PAGE_PROGATE_BITS (IA32_PG_D | IA32_PG_A | IA32_PG_NX | IA32_PG_U | \
|
||||
PAGE_ATTRIBUTE_BITS)
|
||||
|
||||
#define PAGING_PAE_INDEX_MASK 0x1FF
|
||||
#define PAGING_4K_ADDRESS_MASK_64 0x000FFFFFFFFFF000ull
|
||||
#define PAGING_2M_ADDRESS_MASK_64 0x000FFFFFFFE00000ull
|
||||
#define PAGING_1G_ADDRESS_MASK_64 0x000FFFFFC0000000ull
|
||||
#define PAGING_512G_ADDRESS_MASK_64 0x000FFF8000000000ull
|
||||
#define PAGING_PAE_INDEX_MASK 0x1FF
|
||||
#define PAGING_4K_ADDRESS_MASK_64 0x000FFFFFFFFFF000ull
|
||||
#define PAGING_2M_ADDRESS_MASK_64 0x000FFFFFFFE00000ull
|
||||
#define PAGING_1G_ADDRESS_MASK_64 0x000FFFFFC0000000ull
|
||||
#define PAGING_512G_ADDRESS_MASK_64 0x000FFF8000000000ull
|
||||
|
||||
typedef enum {
|
||||
PageNone = 0,
|
||||
@@ -45,19 +45,19 @@ typedef enum {
|
||||
} PAGE_ATTRIBUTE;
|
||||
|
||||
typedef struct {
|
||||
PAGE_ATTRIBUTE Attribute;
|
||||
UINT64 Length;
|
||||
UINT64 AddressMask;
|
||||
UINTN AddressBitOffset;
|
||||
UINTN AddressBitLength;
|
||||
PAGE_ATTRIBUTE Attribute;
|
||||
UINT64 Length;
|
||||
UINT64 AddressMask;
|
||||
UINTN AddressBitOffset;
|
||||
UINTN AddressBitLength;
|
||||
} PAGE_ATTRIBUTE_TABLE;
|
||||
|
||||
PAGE_ATTRIBUTE_TABLE mPageAttributeTable[] = {
|
||||
{PageNone, 0, 0, 0, 0},
|
||||
{Page4K, SIZE_4KB, PAGING_4K_ADDRESS_MASK_64, 12, 9},
|
||||
{Page2M, SIZE_2MB, PAGING_2M_ADDRESS_MASK_64, 21, 9},
|
||||
{Page1G, SIZE_1GB, PAGING_1G_ADDRESS_MASK_64, 30, 9},
|
||||
{Page512G, SIZE_512GB, PAGING_512G_ADDRESS_MASK_64, 39, 9},
|
||||
PAGE_ATTRIBUTE_TABLE mPageAttributeTable[] = {
|
||||
{ PageNone, 0, 0, 0, 0 },
|
||||
{ Page4K, SIZE_4KB, PAGING_4K_ADDRESS_MASK_64, 12, 9 },
|
||||
{ Page2M, SIZE_2MB, PAGING_2M_ADDRESS_MASK_64, 21, 9 },
|
||||
{ Page1G, SIZE_1GB, PAGING_1G_ADDRESS_MASK_64, 30, 9 },
|
||||
{ Page512G, SIZE_512GB, PAGING_512G_ADDRESS_MASK_64, 39, 9 },
|
||||
};
|
||||
|
||||
EFI_PEI_NOTIFY_DESCRIPTOR mPostMemNotifyList[] = {
|
||||
@@ -80,8 +80,8 @@ IsIa32PaeSupported (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
UINT32 RegEax;
|
||||
CPUID_VERSION_INFO_EDX RegEdx;
|
||||
UINT32 RegEax;
|
||||
CPUID_VERSION_INFO_EDX RegEdx;
|
||||
|
||||
AsmCpuid (CPUID_SIGNATURE, &RegEax, NULL, NULL, NULL);
|
||||
if (RegEax >= CPUID_VERSION_INFO) {
|
||||
@@ -104,14 +104,14 @@ IsIa32PaeSupported (
|
||||
**/
|
||||
VOID *
|
||||
AllocatePageTableMemory (
|
||||
IN UINTN Pages
|
||||
IN UINTN Pages
|
||||
)
|
||||
{
|
||||
VOID *Address;
|
||||
VOID *Address;
|
||||
|
||||
Address = AllocatePages(Pages);
|
||||
Address = AllocatePages (Pages);
|
||||
if (Address != NULL) {
|
||||
ZeroMem(Address, EFI_PAGES_TO_SIZE (Pages));
|
||||
ZeroMem (Address, EFI_PAGES_TO_SIZE (Pages));
|
||||
}
|
||||
|
||||
return Address;
|
||||
@@ -129,13 +129,13 @@ GetPhysicalAddressWidth (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
UINT32 RegEax;
|
||||
UINT32 RegEax;
|
||||
|
||||
if (sizeof(UINTN) == 4) {
|
||||
if (sizeof (UINTN) == 4) {
|
||||
return 32;
|
||||
}
|
||||
|
||||
AsmCpuid(CPUID_EXTENDED_FUNCTION, &RegEax, NULL, NULL, NULL);
|
||||
AsmCpuid (CPUID_EXTENDED_FUNCTION, &RegEax, NULL, NULL, NULL);
|
||||
if (RegEax >= CPUID_VIR_PHY_ADDRESS_SIZE) {
|
||||
AsmCpuid (CPUID_VIR_PHY_ADDRESS_SIZE, &RegEax, NULL, NULL, NULL);
|
||||
RegEax &= 0xFF;
|
||||
@@ -161,7 +161,7 @@ GetPageTableTopLevelType (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
MSR_IA32_EFER_REGISTER MsrEfer;
|
||||
MSR_IA32_EFER_REGISTER MsrEfer;
|
||||
|
||||
MsrEfer.Uint64 = AsmReadMsr64 (MSR_CORE_IA32_EFER);
|
||||
|
||||
@@ -178,19 +178,19 @@ GetPageTableTopLevelType (
|
||||
**/
|
||||
VOID *
|
||||
GetPageTableEntry (
|
||||
IN PHYSICAL_ADDRESS Address,
|
||||
OUT PAGE_ATTRIBUTE *PageAttribute
|
||||
IN PHYSICAL_ADDRESS Address,
|
||||
OUT PAGE_ATTRIBUTE *PageAttribute
|
||||
)
|
||||
{
|
||||
INTN Level;
|
||||
UINTN Index;
|
||||
UINT64 *PageTable;
|
||||
UINT64 AddressEncMask;
|
||||
INTN Level;
|
||||
UINTN Index;
|
||||
UINT64 *PageTable;
|
||||
UINT64 AddressEncMask;
|
||||
|
||||
AddressEncMask = PcdGet64 (PcdPteMemoryEncryptionAddressOrMask);
|
||||
PageTable = (UINT64 *)(UINTN)(AsmReadCr3 () & PAGING_4K_ADDRESS_MASK_64);
|
||||
PageTable = (UINT64 *)(UINTN)(AsmReadCr3 () & PAGING_4K_ADDRESS_MASK_64);
|
||||
for (Level = (INTN)GetPageTableTopLevelType (); Level > 0; --Level) {
|
||||
Index = (UINTN)RShiftU64 (Address, mPageAttributeTable[Level].AddressBitOffset);
|
||||
Index = (UINTN)RShiftU64 (Address, mPageAttributeTable[Level].AddressBitOffset);
|
||||
Index &= PAGING_PAE_INDEX_MASK;
|
||||
|
||||
//
|
||||
@@ -204,7 +204,7 @@ GetPageTableEntry (
|
||||
//
|
||||
// Page memory?
|
||||
//
|
||||
if ((PageTable[Index] & IA32_PG_PS) != 0 || Level == PageMin) {
|
||||
if (((PageTable[Index] & IA32_PG_PS) != 0) || (Level == PageMin)) {
|
||||
*PageAttribute = (PAGE_ATTRIBUTE)Level;
|
||||
return &PageTable[Index];
|
||||
}
|
||||
@@ -235,19 +235,19 @@ GetPageTableEntry (
|
||||
**/
|
||||
RETURN_STATUS
|
||||
SplitPage (
|
||||
IN UINT64 *PageEntry,
|
||||
IN PAGE_ATTRIBUTE PageAttribute,
|
||||
IN PAGE_ATTRIBUTE SplitAttribute,
|
||||
IN BOOLEAN Recursively
|
||||
IN UINT64 *PageEntry,
|
||||
IN PAGE_ATTRIBUTE PageAttribute,
|
||||
IN PAGE_ATTRIBUTE SplitAttribute,
|
||||
IN BOOLEAN Recursively
|
||||
)
|
||||
{
|
||||
UINT64 BaseAddress;
|
||||
UINT64 *NewPageEntry;
|
||||
UINTN Index;
|
||||
UINT64 AddressEncMask;
|
||||
PAGE_ATTRIBUTE SplitTo;
|
||||
UINT64 BaseAddress;
|
||||
UINT64 *NewPageEntry;
|
||||
UINTN Index;
|
||||
UINT64 AddressEncMask;
|
||||
PAGE_ATTRIBUTE SplitTo;
|
||||
|
||||
if (SplitAttribute == PageNone || SplitAttribute >= PageAttribute) {
|
||||
if ((SplitAttribute == PageNone) || (SplitAttribute >= PageAttribute)) {
|
||||
ASSERT (SplitAttribute != PageNone);
|
||||
ASSERT (SplitAttribute < PageAttribute);
|
||||
return RETURN_INVALID_PARAMETER;
|
||||
@@ -262,13 +262,13 @@ SplitPage (
|
||||
//
|
||||
// One level down each step to achieve more compact page table.
|
||||
//
|
||||
SplitTo = PageAttribute - 1;
|
||||
SplitTo = PageAttribute - 1;
|
||||
AddressEncMask = PcdGet64 (PcdPteMemoryEncryptionAddressOrMask) &
|
||||
mPageAttributeTable[SplitTo].AddressMask;
|
||||
BaseAddress = *PageEntry &
|
||||
~PcdGet64 (PcdPteMemoryEncryptionAddressOrMask) &
|
||||
mPageAttributeTable[PageAttribute].AddressMask;
|
||||
for (Index = 0; Index < SIZE_4KB / sizeof(UINT64); Index++) {
|
||||
BaseAddress = *PageEntry &
|
||||
~PcdGet64 (PcdPteMemoryEncryptionAddressOrMask) &
|
||||
mPageAttributeTable[PageAttribute].AddressMask;
|
||||
for (Index = 0; Index < SIZE_4KB / sizeof (UINT64); Index++) {
|
||||
NewPageEntry[Index] = BaseAddress | AddressEncMask |
|
||||
((*PageEntry) & PAGE_PROGATE_BITS);
|
||||
|
||||
@@ -276,7 +276,7 @@ SplitPage (
|
||||
NewPageEntry[Index] |= IA32_PG_PS;
|
||||
}
|
||||
|
||||
if (Recursively && SplitTo > SplitAttribute) {
|
||||
if (Recursively && (SplitTo > SplitAttribute)) {
|
||||
SplitPage (&NewPageEntry[Index], SplitTo, SplitAttribute, Recursively);
|
||||
}
|
||||
|
||||
@@ -313,20 +313,20 @@ SplitPage (
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
ConvertMemoryPageAttributes (
|
||||
IN PHYSICAL_ADDRESS BaseAddress,
|
||||
IN UINT64 Length,
|
||||
IN UINT64 Attributes
|
||||
IN PHYSICAL_ADDRESS BaseAddress,
|
||||
IN UINT64 Length,
|
||||
IN UINT64 Attributes
|
||||
)
|
||||
{
|
||||
UINT64 *PageEntry;
|
||||
PAGE_ATTRIBUTE PageAttribute;
|
||||
RETURN_STATUS Status;
|
||||
EFI_PHYSICAL_ADDRESS MaximumAddress;
|
||||
|
||||
if (Length == 0 ||
|
||||
(BaseAddress & (SIZE_4KB - 1)) != 0 ||
|
||||
(Length & (SIZE_4KB - 1)) != 0) {
|
||||
UINT64 *PageEntry;
|
||||
PAGE_ATTRIBUTE PageAttribute;
|
||||
RETURN_STATUS Status;
|
||||
EFI_PHYSICAL_ADDRESS MaximumAddress;
|
||||
|
||||
if ((Length == 0) ||
|
||||
((BaseAddress & (SIZE_4KB - 1)) != 0) ||
|
||||
((Length & (SIZE_4KB - 1)) != 0))
|
||||
{
|
||||
ASSERT (Length > 0);
|
||||
ASSERT ((BaseAddress & (SIZE_4KB - 1)) == 0);
|
||||
ASSERT ((Length & (SIZE_4KB - 1)) == 0);
|
||||
@@ -335,9 +335,10 @@ ConvertMemoryPageAttributes (
|
||||
}
|
||||
|
||||
MaximumAddress = (EFI_PHYSICAL_ADDRESS)MAX_UINT32;
|
||||
if (BaseAddress > MaximumAddress ||
|
||||
Length > MaximumAddress ||
|
||||
(BaseAddress > MaximumAddress - (Length - 1))) {
|
||||
if ((BaseAddress > MaximumAddress) ||
|
||||
(Length > MaximumAddress) ||
|
||||
(BaseAddress > MaximumAddress - (Length - 1)))
|
||||
{
|
||||
return RETURN_UNSUPPORTED;
|
||||
}
|
||||
|
||||
@@ -355,6 +356,7 @@ ConvertMemoryPageAttributes (
|
||||
if (RETURN_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Do it again until the page is 4K.
|
||||
//
|
||||
@@ -374,7 +376,7 @@ ConvertMemoryPageAttributes (
|
||||
// Convert success, move to next
|
||||
//
|
||||
BaseAddress += SIZE_4KB;
|
||||
Length -= SIZE_4KB;
|
||||
Length -= SIZE_4KB;
|
||||
}
|
||||
|
||||
return RETURN_SUCCESS;
|
||||
@@ -394,8 +396,8 @@ GetMaxMemoryPage (
|
||||
IN PAGE_ATTRIBUTE TopLevelType
|
||||
)
|
||||
{
|
||||
UINT32 RegEax;
|
||||
UINT32 RegEdx;
|
||||
UINT32 RegEax;
|
||||
UINT32 RegEdx;
|
||||
|
||||
if (TopLevelType == Page512G) {
|
||||
AsmCpuid (CPUID_EXTENDED_FUNCTION, &RegEax, NULL, NULL, NULL);
|
||||
@@ -421,31 +423,31 @@ CreatePageTable (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
RETURN_STATUS Status;
|
||||
UINTN PhysicalAddressBits;
|
||||
UINTN NumberOfEntries;
|
||||
PAGE_ATTRIBUTE TopLevelPageAttr;
|
||||
UINTN PageTable;
|
||||
PAGE_ATTRIBUTE MaxMemoryPage;
|
||||
UINTN Index;
|
||||
UINT64 AddressEncMask;
|
||||
UINT64 *PageEntry;
|
||||
EFI_PHYSICAL_ADDRESS PhysicalAddress;
|
||||
RETURN_STATUS Status;
|
||||
UINTN PhysicalAddressBits;
|
||||
UINTN NumberOfEntries;
|
||||
PAGE_ATTRIBUTE TopLevelPageAttr;
|
||||
UINTN PageTable;
|
||||
PAGE_ATTRIBUTE MaxMemoryPage;
|
||||
UINTN Index;
|
||||
UINT64 AddressEncMask;
|
||||
UINT64 *PageEntry;
|
||||
EFI_PHYSICAL_ADDRESS PhysicalAddress;
|
||||
|
||||
TopLevelPageAttr = (PAGE_ATTRIBUTE)GetPageTableTopLevelType ();
|
||||
TopLevelPageAttr = (PAGE_ATTRIBUTE)GetPageTableTopLevelType ();
|
||||
PhysicalAddressBits = GetPhysicalAddressWidth ();
|
||||
NumberOfEntries = (UINTN)1 << (PhysicalAddressBits -
|
||||
mPageAttributeTable[TopLevelPageAttr].AddressBitOffset);
|
||||
NumberOfEntries = (UINTN)1 << (PhysicalAddressBits -
|
||||
mPageAttributeTable[TopLevelPageAttr].AddressBitOffset);
|
||||
|
||||
PageTable = (UINTN) AllocatePageTableMemory (1);
|
||||
PageTable = (UINTN)AllocatePageTableMemory (1);
|
||||
if (PageTable == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
AddressEncMask = PcdGet64 (PcdPteMemoryEncryptionAddressOrMask);
|
||||
AddressEncMask = PcdGet64 (PcdPteMemoryEncryptionAddressOrMask);
|
||||
AddressEncMask &= mPageAttributeTable[TopLevelPageAttr].AddressMask;
|
||||
MaxMemoryPage = GetMaxMemoryPage (TopLevelPageAttr);
|
||||
PageEntry = (UINT64 *)PageTable;
|
||||
MaxMemoryPage = GetMaxMemoryPage (TopLevelPageAttr);
|
||||
PageEntry = (UINT64 *)PageTable;
|
||||
|
||||
PhysicalAddress = 0;
|
||||
for (Index = 0; Index < NumberOfEntries; ++Index) {
|
||||
@@ -455,7 +457,7 @@ CreatePageTable (
|
||||
// Split the top page table down to the maximum page size supported
|
||||
//
|
||||
if (MaxMemoryPage < TopLevelPageAttr) {
|
||||
Status = SplitPage(PageEntry, TopLevelPageAttr, MaxMemoryPage, TRUE);
|
||||
Status = SplitPage (PageEntry, TopLevelPageAttr, MaxMemoryPage, TRUE);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
}
|
||||
|
||||
@@ -466,11 +468,10 @@ CreatePageTable (
|
||||
*PageEntry &= ~(UINT64)(IA32_PG_RW | IA32_PG_U);
|
||||
}
|
||||
|
||||
PageEntry += 1;
|
||||
PageEntry += 1;
|
||||
PhysicalAddress += mPageAttributeTable[TopLevelPageAttr].Length;
|
||||
}
|
||||
|
||||
|
||||
return PageTable;
|
||||
}
|
||||
|
||||
@@ -483,12 +484,12 @@ EnablePaging (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
UINTN PageTable;
|
||||
UINTN PageTable;
|
||||
|
||||
PageTable = CreatePageTable ();
|
||||
ASSERT (PageTable != 0);
|
||||
if (PageTable != 0) {
|
||||
AsmWriteCr3(PageTable);
|
||||
AsmWriteCr3 (PageTable);
|
||||
AsmWriteCr4 (AsmReadCr4 () | BIT5); // CR4.PAE
|
||||
AsmWriteCr0 (AsmReadCr0 () | BIT31); // CR0.PG
|
||||
}
|
||||
@@ -509,15 +510,15 @@ EnablePaging (
|
||||
VOID
|
||||
EFIAPI
|
||||
GetStackBase (
|
||||
IN OUT VOID *Buffer
|
||||
IN OUT VOID *Buffer
|
||||
)
|
||||
{
|
||||
EFI_PHYSICAL_ADDRESS StackBase;
|
||||
EFI_PHYSICAL_ADDRESS StackBase;
|
||||
|
||||
StackBase = (EFI_PHYSICAL_ADDRESS)(UINTN)&StackBase;
|
||||
StackBase = (EFI_PHYSICAL_ADDRESS)(UINTN)&StackBase;
|
||||
StackBase += BASE_4KB;
|
||||
StackBase &= ~((EFI_PHYSICAL_ADDRESS)BASE_4KB - 1);
|
||||
StackBase -= PcdGet32(PcdCpuApStackSize);
|
||||
StackBase -= PcdGet32 (PcdCpuApStackSize);
|
||||
|
||||
*(EFI_PHYSICAL_ADDRESS *)Buffer = StackBase;
|
||||
}
|
||||
@@ -532,21 +533,21 @@ SetupStackGuardPage (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_PEI_HOB_POINTERS Hob;
|
||||
EFI_PHYSICAL_ADDRESS StackBase;
|
||||
UINTN NumberOfProcessors;
|
||||
UINTN Bsp;
|
||||
UINTN Index;
|
||||
EFI_PEI_HOB_POINTERS Hob;
|
||||
EFI_PHYSICAL_ADDRESS StackBase;
|
||||
UINTN NumberOfProcessors;
|
||||
UINTN Bsp;
|
||||
UINTN Index;
|
||||
|
||||
//
|
||||
// One extra page at the bottom of the stack is needed for Guard page.
|
||||
//
|
||||
if (PcdGet32(PcdCpuApStackSize) <= EFI_PAGE_SIZE) {
|
||||
if (PcdGet32 (PcdCpuApStackSize) <= EFI_PAGE_SIZE) {
|
||||
DEBUG ((DEBUG_ERROR, "PcdCpuApStackSize is not big enough for Stack Guard!\n"));
|
||||
ASSERT (FALSE);
|
||||
}
|
||||
|
||||
MpInitLibGetNumberOfProcessors(&NumberOfProcessors, NULL);
|
||||
MpInitLibGetNumberOfProcessors (&NumberOfProcessors, NULL);
|
||||
MpInitLibWhoAmI (&Bsp);
|
||||
for (Index = 0; Index < NumberOfProcessors; ++Index) {
|
||||
StackBase = 0;
|
||||
@@ -554,26 +555,35 @@ SetupStackGuardPage (
|
||||
if (Index == Bsp) {
|
||||
Hob.Raw = GetHobList ();
|
||||
while ((Hob.Raw = GetNextHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, Hob.Raw)) != NULL) {
|
||||
if (CompareGuid (&gEfiHobMemoryAllocStackGuid,
|
||||
&(Hob.MemoryAllocationStack->AllocDescriptor.Name))) {
|
||||
if (CompareGuid (
|
||||
&gEfiHobMemoryAllocStackGuid,
|
||||
&(Hob.MemoryAllocationStack->AllocDescriptor.Name)
|
||||
))
|
||||
{
|
||||
StackBase = Hob.MemoryAllocationStack->AllocDescriptor.MemoryBaseAddress;
|
||||
break;
|
||||
}
|
||||
|
||||
Hob.Raw = GET_NEXT_HOB (Hob);
|
||||
}
|
||||
} else {
|
||||
//
|
||||
// Ask AP to return is stack base address.
|
||||
//
|
||||
MpInitLibStartupThisAP(GetStackBase, Index, NULL, 0, (VOID *)&StackBase, NULL);
|
||||
MpInitLibStartupThisAP (GetStackBase, Index, NULL, 0, (VOID *)&StackBase, NULL);
|
||||
}
|
||||
|
||||
ASSERT (StackBase != 0);
|
||||
//
|
||||
// Set Guard page at stack base address.
|
||||
//
|
||||
ConvertMemoryPageAttributes(StackBase, EFI_PAGE_SIZE, 0);
|
||||
DEBUG ((DEBUG_INFO, "Stack Guard set at %lx [cpu%lu]!\n",
|
||||
(UINT64)StackBase, (UINT64)Index));
|
||||
ConvertMemoryPageAttributes (StackBase, EFI_PAGE_SIZE, 0);
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"Stack Guard set at %lx [cpu%lu]!\n",
|
||||
(UINT64)StackBase,
|
||||
(UINT64)Index
|
||||
));
|
||||
}
|
||||
|
||||
//
|
||||
@@ -614,13 +624,13 @@ MemoryDiscoveredPpiNotifyCallback (
|
||||
// the task switch (for the sake of stack switch).
|
||||
//
|
||||
InitStackGuard = FALSE;
|
||||
Hob.Raw = NULL;
|
||||
Hob.Raw = NULL;
|
||||
if (IsIa32PaeSupported ()) {
|
||||
Hob.Raw = GetFirstGuidHob (&gEdkiiMigratedFvInfoGuid);
|
||||
Hob.Raw = GetFirstGuidHob (&gEdkiiMigratedFvInfoGuid);
|
||||
InitStackGuard = PcdGetBool (PcdCpuStackGuard);
|
||||
}
|
||||
|
||||
if (InitStackGuard || Hob.Raw != NULL) {
|
||||
if (InitStackGuard || (Hob.Raw != NULL)) {
|
||||
EnablePaging ();
|
||||
}
|
||||
|
||||
@@ -643,8 +653,8 @@ MemoryDiscoveredPpiNotifyCallback (
|
||||
Hob.Raw = GET_NEXT_HOB (Hob);
|
||||
Hob.Raw = GetNextGuidHob (&gEdkiiMigratedFvInfoGuid, Hob.Raw);
|
||||
}
|
||||
|
||||
CpuFlushTlb ();
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user