From 053e878bfb5c9d5eca779789b62891add30b14ba Mon Sep 17 00:00:00 2001 From: Michael Kubacki Date: Sun, 5 Dec 2021 14:54:17 -0800 Subject: 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 Cc: Leif Lindholm Cc: Michael D Kinney Signed-off-by: Michael Kubacki Reviewed-by: Ray Ni --- UefiCpuPkg/CpuDxe/CpuDxe.c | 428 +++++++++++++----------- UefiCpuPkg/CpuDxe/CpuDxe.h | 59 ++-- UefiCpuPkg/CpuDxe/CpuGdt.c | 8 +- UefiCpuPkg/CpuDxe/CpuGdt.h | 61 ++-- UefiCpuPkg/CpuDxe/CpuMp.c | 95 +++--- UefiCpuPkg/CpuDxe/CpuMp.h | 1 - UefiCpuPkg/CpuDxe/CpuPageTable.c | 553 +++++++++++++++++-------------- UefiCpuPkg/CpuDxe/CpuPageTable.h | 45 ++- UefiCpuPkg/CpuDxe/Ia32/PagingAttribute.c | 9 +- UefiCpuPkg/CpuDxe/X64/PagingAttribute.c | 9 +- 10 files changed, 682 insertions(+), 586 deletions(-) (limited to 'UefiCpuPkg/CpuDxe') diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.c b/UefiCpuPkg/CpuDxe/CpuDxe.c index efa0bc3308..00f3cb0957 100644 --- a/UefiCpuPkg/CpuDxe/CpuDxe.c +++ b/UefiCpuPkg/CpuDxe/CpuDxe.c @@ -13,15 +13,15 @@ // // Global Variables // -BOOLEAN InterruptState = FALSE; -EFI_HANDLE mCpuHandle = NULL; -BOOLEAN mIsFlushingGCD; -BOOLEAN mIsAllocatingPageTable = FALSE; -UINT64 mValidMtrrAddressMask; -UINT64 mValidMtrrBitsMask; -UINT64 mTimerPeriod = 0; - -FIXED_MTRR mFixedMtrrTable[] = { +BOOLEAN InterruptState = FALSE; +EFI_HANDLE mCpuHandle = NULL; +BOOLEAN mIsFlushingGCD; +BOOLEAN mIsAllocatingPageTable = FALSE; +UINT64 mValidMtrrAddressMask; +UINT64 mValidMtrrBitsMask; +UINT64 mTimerPeriod = 0; + +FIXED_MTRR mFixedMtrrTable[] = { { MSR_IA32_MTRR_FIX64K_00000, 0, @@ -79,7 +79,6 @@ FIXED_MTRR mFixedMtrrTable[] = { }, }; - EFI_CPU_ARCH_PROTOCOL gCpu = { CpuFlushCpuDataCache, CpuEnableInterrupt, @@ -115,10 +114,10 @@ EFI_CPU_ARCH_PROTOCOL gCpu = { EFI_STATUS EFIAPI CpuFlushCpuDataCache ( - IN EFI_CPU_ARCH_PROTOCOL *This, - IN EFI_PHYSICAL_ADDRESS Start, - IN UINT64 Length, - IN EFI_CPU_FLUSH_TYPE FlushType + IN EFI_CPU_ARCH_PROTOCOL *This, + IN EFI_PHYSICAL_ADDRESS Start, + IN UINT64 Length, + IN EFI_CPU_FLUSH_TYPE FlushType ) { if (FlushType == EfiCpuFlushTypeWriteBackInvalidate) { @@ -132,7 +131,6 @@ CpuFlushCpuDataCache ( } } - /** Enables CPU interrupts. @@ -145,7 +143,7 @@ CpuFlushCpuDataCache ( EFI_STATUS EFIAPI CpuEnableInterrupt ( - IN EFI_CPU_ARCH_PROTOCOL *This + IN EFI_CPU_ARCH_PROTOCOL *This ) { EnableInterrupts (); @@ -154,7 +152,6 @@ CpuEnableInterrupt ( return EFI_SUCCESS; } - /** Disables CPU interrupts. @@ -167,7 +164,7 @@ CpuEnableInterrupt ( EFI_STATUS EFIAPI CpuDisableInterrupt ( - IN EFI_CPU_ARCH_PROTOCOL *This + IN EFI_CPU_ARCH_PROTOCOL *This ) { DisableInterrupts (); @@ -176,7 +173,6 @@ CpuDisableInterrupt ( return EFI_SUCCESS; } - /** Return the state of interrupts. @@ -190,8 +186,8 @@ CpuDisableInterrupt ( EFI_STATUS EFIAPI CpuGetInterruptState ( - IN EFI_CPU_ARCH_PROTOCOL *This, - OUT BOOLEAN *State + IN EFI_CPU_ARCH_PROTOCOL *This, + OUT BOOLEAN *State ) { if (State == NULL) { @@ -202,7 +198,6 @@ CpuGetInterruptState ( return EFI_SUCCESS; } - /** Generates an INIT to the CPU. @@ -218,14 +213,13 @@ CpuGetInterruptState ( EFI_STATUS EFIAPI CpuInit ( - IN EFI_CPU_ARCH_PROTOCOL *This, - IN EFI_CPU_INIT_TYPE InitType + IN EFI_CPU_ARCH_PROTOCOL *This, + IN EFI_CPU_INIT_TYPE InitType ) { return EFI_UNSUPPORTED; } - /** Registers a function to be called from the CPU interrupt handler. @@ -249,15 +243,14 @@ CpuInit ( EFI_STATUS EFIAPI CpuRegisterInterruptHandler ( - IN EFI_CPU_ARCH_PROTOCOL *This, - IN EFI_EXCEPTION_TYPE InterruptType, - IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler + IN EFI_CPU_ARCH_PROTOCOL *This, + IN EFI_EXCEPTION_TYPE InterruptType, + IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler ) { return RegisterCpuInterruptHandler (InterruptType, InterruptHandler); } - /** Returns a timer value from one of the CPU's internal timers. There is no inherent time interval between ticks but is a function of the CPU frequency. @@ -284,14 +277,14 @@ CpuRegisterInterruptHandler ( EFI_STATUS EFIAPI CpuGetTimerValue ( - IN EFI_CPU_ARCH_PROTOCOL *This, - IN UINT32 TimerIndex, - OUT UINT64 *TimerValue, - OUT UINT64 *TimerPeriod OPTIONAL + IN EFI_CPU_ARCH_PROTOCOL *This, + IN UINT32 TimerIndex, + OUT UINT64 *TimerValue, + OUT UINT64 *TimerPeriod OPTIONAL ) { - UINT64 BeginValue; - UINT64 EndValue; + UINT64 BeginValue; + UINT64 EndValue; if (TimerValue == NULL) { return EFI_INVALID_PARAMETER; @@ -310,7 +303,7 @@ CpuGetTimerValue ( // BeginValue = AsmReadTsc (); MicroSecondDelay (100); - EndValue = AsmReadTsc (); + EndValue = AsmReadTsc (); // // Calculate the actual frequency // @@ -323,6 +316,7 @@ CpuGetTimerValue ( NULL ); } + *TimerPeriod = mTimerPeriod; } @@ -339,7 +333,7 @@ CpuGetTimerValue ( VOID EFIAPI SetMtrrsFromBuffer ( - IN VOID *Buffer + IN VOID *Buffer ) { MtrrSetAllMtrrs (Buffer); @@ -373,10 +367,10 @@ SetMtrrsFromBuffer ( EFI_STATUS EFIAPI CpuSetMemoryAttributes ( - IN EFI_CPU_ARCH_PROTOCOL *This, - IN EFI_PHYSICAL_ADDRESS BaseAddress, - IN UINT64 Length, - IN UINT64 Attributes + IN EFI_CPU_ARCH_PROTOCOL *This, + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + IN UINT64 Attributes ) { RETURN_STATUS Status; @@ -395,7 +389,7 @@ CpuSetMemoryAttributes ( // to avoid unnecessary computing. // if (mIsFlushingGCD) { - DEBUG((DEBUG_VERBOSE, " Flushing GCD\n")); + DEBUG ((DEBUG_VERBOSE, " Flushing GCD\n")); return EFI_SUCCESS; } @@ -410,11 +404,11 @@ CpuSetMemoryAttributes ( // by page table memory allocation. // if (mIsAllocatingPageTable) { - DEBUG((DEBUG_VERBOSE, " Allocating page table memory\n")); + DEBUG ((DEBUG_VERBOSE, " Allocating page table memory\n")); return EFI_SUCCESS; } - CacheAttributes = Attributes & EFI_CACHE_ATTRIBUTE_MASK; + CacheAttributes = Attributes & EFI_CACHE_ATTRIBUTE_MASK; MemoryAttributes = Attributes & EFI_MEMORY_ATTRIBUTE_MASK; if (Attributes != (CacheAttributes | MemoryAttributes)) { @@ -427,30 +421,31 @@ CpuSetMemoryAttributes ( } switch (CacheAttributes) { - case EFI_MEMORY_UC: - CacheType = CacheUncacheable; - break; + case EFI_MEMORY_UC: + CacheType = CacheUncacheable; + break; - case EFI_MEMORY_WC: - CacheType = CacheWriteCombining; - break; + case EFI_MEMORY_WC: + CacheType = CacheWriteCombining; + break; - case EFI_MEMORY_WT: - CacheType = CacheWriteThrough; - break; + case EFI_MEMORY_WT: + CacheType = CacheWriteThrough; + break; - case EFI_MEMORY_WP: - CacheType = CacheWriteProtected; - break; + case EFI_MEMORY_WP: + CacheType = CacheWriteProtected; + break; - case EFI_MEMORY_WB: - CacheType = CacheWriteBack; - break; + case EFI_MEMORY_WB: + CacheType = CacheWriteBack; + break; - default: - return EFI_INVALID_PARAMETER; + default: + return EFI_INVALID_PARAMETER; } - CurrentCacheType = MtrrGetMemoryAttribute(BaseAddress); + + CurrentCacheType = MtrrGetMemoryAttribute (BaseAddress); if (CurrentCacheType != CacheType) { // // call MTRR library function @@ -484,7 +479,8 @@ CpuSetMemoryAttributes ( ASSERT (MpStatus == EFI_SUCCESS || MpStatus == EFI_NOT_STARTED); } } - if (EFI_ERROR(Status)) { + + if (EFI_ERROR (Status)) { return Status; } } @@ -507,15 +503,15 @@ InitializeMtrrMask ( VOID ) { - UINT32 RegEax; - UINT8 PhysicalAddressBits; + UINT32 RegEax; + UINT8 PhysicalAddressBits; AsmCpuid (0x80000000, &RegEax, NULL, NULL, NULL); if (RegEax >= 0x80000008) { AsmCpuid (0x80000008, &RegEax, NULL, NULL, NULL); - PhysicalAddressBits = (UINT8) RegEax; + PhysicalAddressBits = (UINT8)RegEax; } else { PhysicalAddressBits = 36; } @@ -536,22 +532,22 @@ InitializeMtrrMask ( **/ UINT64 GetMemorySpaceAttributeFromMtrrType ( - IN UINT8 MtrrAttributes + IN UINT8 MtrrAttributes ) { switch (MtrrAttributes) { - case MTRR_CACHE_UNCACHEABLE: - return EFI_MEMORY_UC; - case MTRR_CACHE_WRITE_COMBINING: - return EFI_MEMORY_WC; - case MTRR_CACHE_WRITE_THROUGH: - return EFI_MEMORY_WT; - case MTRR_CACHE_WRITE_PROTECTED: - return EFI_MEMORY_WP; - case MTRR_CACHE_WRITE_BACK: - return EFI_MEMORY_WB; - default: - return 0; + case MTRR_CACHE_UNCACHEABLE: + return EFI_MEMORY_UC; + case MTRR_CACHE_WRITE_COMBINING: + return EFI_MEMORY_WC; + case MTRR_CACHE_WRITE_THROUGH: + return EFI_MEMORY_WT; + case MTRR_CACHE_WRITE_PROTECTED: + return EFI_MEMORY_WP; + case MTRR_CACHE_WRITE_BACK: + return EFI_MEMORY_WB; + default: + return 0; } } @@ -575,29 +571,33 @@ GetMemorySpaceAttributeFromMtrrType ( **/ EFI_STATUS SearchGcdMemorySpaces ( - IN EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap, - IN UINTN NumberOfDescriptors, - IN EFI_PHYSICAL_ADDRESS BaseAddress, - IN UINT64 Length, - OUT UINTN *StartIndex, - OUT UINTN *EndIndex + IN EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap, + IN UINTN NumberOfDescriptors, + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + OUT UINTN *StartIndex, + OUT UINTN *EndIndex ) { - UINTN Index; + UINTN Index; *StartIndex = 0; *EndIndex = 0; for (Index = 0; Index < NumberOfDescriptors; Index++) { - if (BaseAddress >= MemorySpaceMap[Index].BaseAddress && - BaseAddress < MemorySpaceMap[Index].BaseAddress + MemorySpaceMap[Index].Length) { + if ((BaseAddress >= MemorySpaceMap[Index].BaseAddress) && + (BaseAddress < MemorySpaceMap[Index].BaseAddress + MemorySpaceMap[Index].Length)) + { *StartIndex = Index; } - if (BaseAddress + Length - 1 >= MemorySpaceMap[Index].BaseAddress && - BaseAddress + Length - 1 < MemorySpaceMap[Index].BaseAddress + MemorySpaceMap[Index].Length) { + + if ((BaseAddress + Length - 1 >= MemorySpaceMap[Index].BaseAddress) && + (BaseAddress + Length - 1 < MemorySpaceMap[Index].BaseAddress + MemorySpaceMap[Index].Length)) + { *EndIndex = Index; return EFI_SUCCESS; } } + return EFI_NOT_FOUND; } @@ -619,11 +619,11 @@ SearchGcdMemorySpaces ( **/ EFI_STATUS SetGcdMemorySpaceAttributes ( - IN EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap, - IN UINTN NumberOfDescriptors, - IN EFI_PHYSICAL_ADDRESS BaseAddress, - IN UINT64 Length, - IN UINT64 Attributes + IN EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap, + IN UINTN NumberOfDescriptors, + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + IN UINT64 Attributes ) { EFI_STATUS Status; @@ -655,6 +655,7 @@ SetGcdMemorySpaceAttributes ( if (MemorySpaceMap[Index].GcdMemoryType == EfiGcdMemoryTypeNonExistent) { continue; } + // // Calculate the start and end address of the overlapping range // @@ -663,11 +664,13 @@ SetGcdMemorySpaceAttributes ( } else { RegionStart = MemorySpaceMap[Index].BaseAddress; } + if (BaseAddress + Length - 1 < MemorySpaceMap[Index].BaseAddress + MemorySpaceMap[Index].Length) { RegionLength = BaseAddress + Length - RegionStart; } else { RegionLength = MemorySpaceMap[Index].BaseAddress + MemorySpaceMap[Index].Length - RegionStart; } + // // Set memory attributes according to MTRR attribute and the original attribute of descriptor // @@ -681,7 +684,6 @@ SetGcdMemorySpaceAttributes ( return EFI_SUCCESS; } - /** Refreshes the GCD Memory Space attributes according to MTRRs. @@ -693,22 +695,22 @@ RefreshMemoryAttributesFromMtrr ( VOID ) { - EFI_STATUS Status; - UINTN Index; - UINTN SubIndex; - UINT64 RegValue; - EFI_PHYSICAL_ADDRESS BaseAddress; - UINT64 Length; - UINT64 Attributes; - UINT64 CurrentAttributes; - UINT8 MtrrType; - UINTN NumberOfDescriptors; - EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap; - UINT64 DefaultAttributes; - VARIABLE_MTRR VariableMtrr[MTRR_NUMBER_OF_VARIABLE_MTRR]; - MTRR_FIXED_SETTINGS MtrrFixedSettings; - UINT32 FirmwareVariableMtrrCount; - UINT8 DefaultMemoryType; + EFI_STATUS Status; + UINTN Index; + UINTN SubIndex; + UINT64 RegValue; + EFI_PHYSICAL_ADDRESS BaseAddress; + UINT64 Length; + UINT64 Attributes; + UINT64 CurrentAttributes; + UINT8 MtrrType; + UINTN NumberOfDescriptors; + EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap; + UINT64 DefaultAttributes; + VARIABLE_MTRR VariableMtrr[MTRR_NUMBER_OF_VARIABLE_MTRR]; + MTRR_FIXED_SETTINGS MtrrFixedSettings; + UINT32 FirmwareVariableMtrrCount; + UINT8 DefaultMemoryType; FirmwareVariableMtrrCount = GetFirmwareVariableMtrrCount (); ASSERT (FirmwareVariableMtrrCount <= MTRR_NUMBER_OF_VARIABLE_MTRR); @@ -738,7 +740,7 @@ RefreshMemoryAttributesFromMtrr ( ); ASSERT_EFI_ERROR (Status); - DefaultMemoryType = (UINT8) MtrrGetDefaultMemoryType (); + DefaultMemoryType = (UINT8)MtrrGetDefaultMemoryType (); DefaultAttributes = GetMemorySpaceAttributeFromMtrrType (DefaultMemoryType); // @@ -748,6 +750,7 @@ RefreshMemoryAttributesFromMtrr ( if (MemorySpaceMap[Index].GcdMemoryType == EfiGcdMemoryTypeNonExistent) { continue; } + gDS->SetMemorySpaceAttributes ( MemorySpaceMap[Index].BaseAddress, MemorySpaceMap[Index].Length, @@ -761,7 +764,8 @@ RefreshMemoryAttributesFromMtrr ( // for (Index = 0; Index < FirmwareVariableMtrrCount; Index++) { if (VariableMtrr[Index].Valid && - VariableMtrr[Index].Type == MTRR_CACHE_WRITE_BACK) { + (VariableMtrr[Index].Type == MTRR_CACHE_WRITE_BACK)) + { SetGcdMemorySpaceAttributes ( MemorySpaceMap, NumberOfDescriptors, @@ -777,9 +781,10 @@ RefreshMemoryAttributesFromMtrr ( // for (Index = 0; Index < FirmwareVariableMtrrCount; Index++) { if (VariableMtrr[Index].Valid && - VariableMtrr[Index].Type != MTRR_CACHE_WRITE_BACK && - VariableMtrr[Index].Type != MTRR_CACHE_UNCACHEABLE) { - Attributes = GetMemorySpaceAttributeFromMtrrType ((UINT8) VariableMtrr[Index].Type); + (VariableMtrr[Index].Type != MTRR_CACHE_WRITE_BACK) && + (VariableMtrr[Index].Type != MTRR_CACHE_UNCACHEABLE)) + { + Attributes = GetMemorySpaceAttributeFromMtrrType ((UINT8)VariableMtrr[Index].Type); SetGcdMemorySpaceAttributes ( MemorySpaceMap, NumberOfDescriptors, @@ -795,7 +800,8 @@ RefreshMemoryAttributesFromMtrr ( // for (Index = 0; Index < FirmwareVariableMtrrCount; Index++) { if (VariableMtrr[Index].Valid && - VariableMtrr[Index].Type == MTRR_CACHE_UNCACHEABLE) { + (VariableMtrr[Index].Type == MTRR_CACHE_UNCACHEABLE)) + { SetGcdMemorySpaceAttributes ( MemorySpaceMap, NumberOfDescriptors, @@ -819,7 +825,7 @@ RefreshMemoryAttributesFromMtrr ( // Check for continuous fixed MTRR sections // for (SubIndex = 0; SubIndex < 8; SubIndex++) { - MtrrType = (UINT8) RShiftU64 (RegValue, SubIndex * 8); + MtrrType = (UINT8)RShiftU64 (RegValue, SubIndex * 8); CurrentAttributes = GetMemorySpaceAttributeFromMtrrType (MtrrType); if (Length == 0) { // @@ -839,13 +845,15 @@ RefreshMemoryAttributesFromMtrr ( Attributes ); BaseAddress = mFixedMtrrTable[Index].BaseAddress + mFixedMtrrTable[Index].Length * SubIndex; - Length = 0; - Attributes = CurrentAttributes; + Length = 0; + Attributes = CurrentAttributes; } } + Length += mFixedMtrrTable[Index].Length; } } + // // Handle the last fixed MTRR region // @@ -916,20 +924,20 @@ InitInterruptDescriptorTable ( VOID ) { - EFI_STATUS Status; - EFI_VECTOR_HANDOFF_INFO *VectorInfoList; - EFI_VECTOR_HANDOFF_INFO *VectorInfo; + EFI_STATUS Status; + EFI_VECTOR_HANDOFF_INFO *VectorInfoList; + EFI_VECTOR_HANDOFF_INFO *VectorInfo; VectorInfo = NULL; - Status = EfiGetSystemConfigurationTable (&gEfiVectorHandoffTableGuid, (VOID **) &VectorInfoList); - if (Status == EFI_SUCCESS && VectorInfoList != NULL) { + Status = EfiGetSystemConfigurationTable (&gEfiVectorHandoffTableGuid, (VOID **)&VectorInfoList); + if ((Status == EFI_SUCCESS) && (VectorInfoList != NULL)) { VectorInfo = VectorInfoList; } + Status = InitializeCpuInterruptHandlers (VectorInfo); ASSERT_EFI_ERROR (Status); } - /** Callback function for idle events. @@ -941,8 +949,8 @@ InitInterruptDescriptorTable ( VOID EFIAPI IdleLoopEventCallback ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { CpuSleep (); @@ -989,24 +997,27 @@ IdleLoopEventCallback ( **/ EFI_STATUS IntersectMemoryDescriptor ( - IN UINT64 Base, - IN UINT64 Length, - IN UINT64 Capabilities, - IN CONST EFI_GCD_MEMORY_SPACE_DESCRIPTOR *Descriptor + IN UINT64 Base, + IN UINT64 Length, + IN UINT64 Capabilities, + IN CONST EFI_GCD_MEMORY_SPACE_DESCRIPTOR *Descriptor ) { - UINT64 IntersectionBase; - UINT64 IntersectionEnd; - EFI_STATUS Status; + UINT64 IntersectionBase; + UINT64 IntersectionEnd; + EFI_STATUS Status; - if (Descriptor->GcdMemoryType == EfiGcdMemoryTypeMemoryMappedIo && - (Descriptor->Capabilities & Capabilities) == Capabilities) { + if ((Descriptor->GcdMemoryType == EfiGcdMemoryTypeMemoryMappedIo) && + ((Descriptor->Capabilities & Capabilities) == Capabilities)) + { return EFI_SUCCESS; } IntersectionBase = MAX (Base, Descriptor->BaseAddress); - IntersectionEnd = MIN (Base + Length, - Descriptor->BaseAddress + Descriptor->Length); + IntersectionEnd = MIN ( + Base + Length, + Descriptor->BaseAddress + Descriptor->Length + ); if (IntersectionBase >= IntersectionEnd) { // // The descriptor and the aperture don't overlap. @@ -1015,21 +1026,39 @@ IntersectMemoryDescriptor ( } if (Descriptor->GcdMemoryType == EfiGcdMemoryTypeNonExistent) { - Status = gDS->AddMemorySpace (EfiGcdMemoryTypeMemoryMappedIo, - IntersectionBase, IntersectionEnd - IntersectionBase, - Capabilities); - - DEBUG ((EFI_ERROR (Status) ? DEBUG_ERROR : DEBUG_VERBOSE, - "%a: %a: add [%Lx, %Lx): %r\n", gEfiCallerBaseName, __FUNCTION__, - IntersectionBase, IntersectionEnd, Status)); + Status = gDS->AddMemorySpace ( + EfiGcdMemoryTypeMemoryMappedIo, + IntersectionBase, + IntersectionEnd - IntersectionBase, + Capabilities + ); + + DEBUG (( + EFI_ERROR (Status) ? DEBUG_ERROR : DEBUG_VERBOSE, + "%a: %a: add [%Lx, %Lx): %r\n", + gEfiCallerBaseName, + __FUNCTION__, + IntersectionBase, + IntersectionEnd, + Status + )); return Status; } - DEBUG ((DEBUG_ERROR, "%a: %a: desc [%Lx, %Lx) type %u cap %Lx conflicts " - "with aperture [%Lx, %Lx) cap %Lx\n", gEfiCallerBaseName, __FUNCTION__, - Descriptor->BaseAddress, Descriptor->BaseAddress + Descriptor->Length, - (UINT32)Descriptor->GcdMemoryType, Descriptor->Capabilities, - Base, Base + Length, Capabilities)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: desc [%Lx, %Lx) type %u cap %Lx conflicts " + "with aperture [%Lx, %Lx) cap %Lx\n", + gEfiCallerBaseName, + __FUNCTION__, + Descriptor->BaseAddress, + Descriptor->BaseAddress + Descriptor->Length, + (UINT32)Descriptor->GcdMemoryType, + Descriptor->Capabilities, + Base, + Base + Length, + Capabilities + )); return EFI_INVALID_PARAMETER; } @@ -1046,49 +1075,60 @@ IntersectMemoryDescriptor ( **/ EFI_STATUS AddMemoryMappedIoSpace ( - IN UINT64 Base, - IN UINT64 Length, - IN UINT64 Capabilities + IN UINT64 Base, + IN UINT64 Length, + IN UINT64 Capabilities ) { - EFI_STATUS Status; - UINTN Index; - UINTN NumberOfDescriptors; - EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap; + EFI_STATUS Status; + UINTN Index; + UINTN NumberOfDescriptors; + EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap; Status = gDS->GetMemorySpaceMap (&NumberOfDescriptors, &MemorySpaceMap); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: %a: GetMemorySpaceMap(): %r\n", - gEfiCallerBaseName, __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: GetMemorySpaceMap(): %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); return Status; } for (Index = 0; Index < NumberOfDescriptors; Index++) { - Status = IntersectMemoryDescriptor (Base, Length, Capabilities, - &MemorySpaceMap[Index]); + Status = IntersectMemoryDescriptor ( + Base, + Length, + Capabilities, + &MemorySpaceMap[Index] + ); if (EFI_ERROR (Status)) { goto FreeMemorySpaceMap; } } DEBUG_CODE_BEGIN (); - // - // Make sure there are adjacent descriptors covering [Base, Base + Length). - // It is possible that they have not been merged; merging can be prevented - // by allocation and different capabilities. - // - UINT64 CheckBase; - EFI_STATUS CheckStatus; - EFI_GCD_MEMORY_SPACE_DESCRIPTOR Descriptor; - - for (CheckBase = Base; - CheckBase < Base + Length; - CheckBase = Descriptor.BaseAddress + Descriptor.Length) { - CheckStatus = gDS->GetMemorySpaceDescriptor (CheckBase, &Descriptor); - ASSERT_EFI_ERROR (CheckStatus); - ASSERT (Descriptor.GcdMemoryType == EfiGcdMemoryTypeMemoryMappedIo); - ASSERT ((Descriptor.Capabilities & Capabilities) == Capabilities); - } + // + // Make sure there are adjacent descriptors covering [Base, Base + Length). + // It is possible that they have not been merged; merging can be prevented + // by allocation and different capabilities. + // + UINT64 CheckBase; + EFI_STATUS CheckStatus; + EFI_GCD_MEMORY_SPACE_DESCRIPTOR Descriptor; + + for (CheckBase = Base; + CheckBase < Base + Length; + CheckBase = Descriptor.BaseAddress + Descriptor.Length) + { + CheckStatus = gDS->GetMemorySpaceDescriptor (CheckBase, &Descriptor); + ASSERT_EFI_ERROR (CheckStatus); + ASSERT (Descriptor.GcdMemoryType == EfiGcdMemoryTypeMemoryMappedIo); + ASSERT ((Descriptor.Capabilities & Capabilities) == Capabilities); + } + DEBUG_CODE_END (); FreeMemorySpaceMap: @@ -1105,14 +1145,14 @@ FreeMemorySpaceMap: **/ VOID AddLocalApicMemorySpace ( - IN EFI_HANDLE ImageHandle + IN EFI_HANDLE ImageHandle ) { - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS BaseAddress; + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS BaseAddress; - BaseAddress = (EFI_PHYSICAL_ADDRESS) GetLocalApicBaseAddress(); - Status = AddMemoryMappedIoSpace (BaseAddress, SIZE_4KB, EFI_MEMORY_UC); + BaseAddress = (EFI_PHYSICAL_ADDRESS)GetLocalApicBaseAddress (); + Status = AddMemoryMappedIoSpace (BaseAddress, SIZE_4KB, EFI_MEMORY_UC); ASSERT_EFI_ERROR (Status); // @@ -1130,8 +1170,13 @@ AddLocalApicMemorySpace ( NULL ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_INFO, "%a: %a: AllocateMemorySpace() Status - %r\n", - gEfiCallerBaseName, __FUNCTION__, Status)); + DEBUG (( + DEBUG_INFO, + "%a: %a: AllocateMemorySpace() Status - %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); } } @@ -1149,14 +1194,14 @@ AddLocalApicMemorySpace ( EFI_STATUS EFIAPI InitializeCpu ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_EVENT IdleLoopEvent; - InitializePageTableLib(); + InitializePageTableLib (); InitializeFloatingPointUnits (); @@ -1180,7 +1225,8 @@ InitializeCpu ( // Status = gBS->InstallMultipleProtocolInterfaces ( &mCpuHandle, - &gEfiCpuArchProtocolGuid, &gCpu, + &gEfiCpuArchProtocolGuid, + &gCpu, NULL ); ASSERT_EFI_ERROR (Status); diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.h b/UefiCpuPkg/CpuDxe/CpuDxe.h index 9771ec8336..2208671cb9 100644 --- a/UefiCpuPkg/CpuDxe/CpuDxe.h +++ b/UefiCpuPkg/CpuDxe/CpuDxe.h @@ -63,10 +63,10 @@ EFI_STATUS EFIAPI CpuFlushCpuDataCache ( - IN EFI_CPU_ARCH_PROTOCOL *This, - IN EFI_PHYSICAL_ADDRESS Start, - IN UINT64 Length, - IN EFI_CPU_FLUSH_TYPE FlushType + IN EFI_CPU_ARCH_PROTOCOL *This, + IN EFI_PHYSICAL_ADDRESS Start, + IN UINT64 Length, + IN EFI_CPU_FLUSH_TYPE FlushType ); /** @@ -81,7 +81,7 @@ CpuFlushCpuDataCache ( EFI_STATUS EFIAPI CpuEnableInterrupt ( - IN EFI_CPU_ARCH_PROTOCOL *This + IN EFI_CPU_ARCH_PROTOCOL *This ); /** @@ -96,7 +96,7 @@ CpuEnableInterrupt ( EFI_STATUS EFIAPI CpuDisableInterrupt ( - IN EFI_CPU_ARCH_PROTOCOL *This + IN EFI_CPU_ARCH_PROTOCOL *This ); /** @@ -112,8 +112,8 @@ CpuDisableInterrupt ( EFI_STATUS EFIAPI CpuGetInterruptState ( - IN EFI_CPU_ARCH_PROTOCOL *This, - OUT BOOLEAN *State + IN EFI_CPU_ARCH_PROTOCOL *This, + OUT BOOLEAN *State ); /** @@ -131,8 +131,8 @@ CpuGetInterruptState ( EFI_STATUS EFIAPI CpuInit ( - IN EFI_CPU_ARCH_PROTOCOL *This, - IN EFI_CPU_INIT_TYPE InitType + IN EFI_CPU_ARCH_PROTOCOL *This, + IN EFI_CPU_INIT_TYPE InitType ); /** @@ -158,9 +158,9 @@ CpuInit ( EFI_STATUS EFIAPI CpuRegisterInterruptHandler ( - IN EFI_CPU_ARCH_PROTOCOL *This, - IN EFI_EXCEPTION_TYPE InterruptType, - IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler + IN EFI_CPU_ARCH_PROTOCOL *This, + IN EFI_EXCEPTION_TYPE InterruptType, + IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler ); /** @@ -189,10 +189,10 @@ CpuRegisterInterruptHandler ( EFI_STATUS EFIAPI CpuGetTimerValue ( - IN EFI_CPU_ARCH_PROTOCOL *This, - IN UINT32 TimerIndex, - OUT UINT64 *TimerValue, - OUT UINT64 *TimerPeriod OPTIONAL + IN EFI_CPU_ARCH_PROTOCOL *This, + IN UINT32 TimerIndex, + OUT UINT64 *TimerValue, + OUT UINT64 *TimerPeriod OPTIONAL ); /** @@ -214,10 +214,10 @@ CpuGetTimerValue ( EFI_STATUS EFIAPI CpuSetMemoryAttributes ( - IN EFI_CPU_ARCH_PROTOCOL *This, - IN EFI_PHYSICAL_ADDRESS BaseAddress, - IN UINT64 Length, - IN UINT64 Attributes + IN EFI_CPU_ARCH_PROTOCOL *This, + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + IN UINT64 Attributes ); /** @@ -238,7 +238,7 @@ InitGlobalDescriptorTable ( VOID EFIAPI SetCodeSelector ( - UINT16 Selector + UINT16 Selector ); /** @@ -250,7 +250,7 @@ SetCodeSelector ( VOID EFIAPI SetDataSelectors ( - UINT16 Selector + UINT16 Selector ); /** @@ -273,8 +273,8 @@ RefreshGcdMemoryAttributesFromPaging ( VOID EFIAPI DebugExceptionHandler ( - IN EFI_EXCEPTION_TYPE ExceptionType, - IN EFI_SYSTEM_CONTEXT SystemContext + IN EFI_EXCEPTION_TYPE ExceptionType, + IN EFI_SYSTEM_CONTEXT SystemContext ); /** @@ -289,12 +289,11 @@ DebugExceptionHandler ( VOID EFIAPI PageFaultExceptionHandler ( - IN EFI_EXCEPTION_TYPE ExceptionType, - IN EFI_SYSTEM_CONTEXT SystemContext + IN EFI_EXCEPTION_TYPE ExceptionType, + IN EFI_SYSTEM_CONTEXT SystemContext ); -extern BOOLEAN mIsAllocatingPageTable; -extern UINTN mNumberOfProcessors; +extern BOOLEAN mIsAllocatingPageTable; +extern UINTN mNumberOfProcessors; #endif - diff --git a/UefiCpuPkg/CpuDxe/CpuGdt.c b/UefiCpuPkg/CpuDxe/CpuGdt.c index 692402c55d..cf571138e5 100644 --- a/UefiCpuPkg/CpuDxe/CpuGdt.c +++ b/UefiCpuPkg/CpuDxe/CpuGdt.c @@ -13,7 +13,7 @@ // // Global descriptor table (GDT) Template // -STATIC GDT_ENTRIES mGdtTemplate = { +STATIC GDT_ENTRIES mGdtTemplate = { // // NULL_SEL // @@ -143,7 +143,7 @@ InitGlobalDescriptorTable ( ); ASSERT_EFI_ERROR (Status); ASSERT ((Memory != 0) && (Memory < SIZE_4GB)); - Gdt = (GDT_ENTRIES *) (UINTN) Memory; + Gdt = (GDT_ENTRIES *)(UINTN)Memory; // // Initialize all GDT entries @@ -153,8 +153,8 @@ InitGlobalDescriptorTable ( // // Write GDT register // - Gdtr.Base = (UINT32) (UINTN) Gdt; - Gdtr.Limit = (UINT16) (sizeof (mGdtTemplate) - 1); + Gdtr.Base = (UINT32)(UINTN)Gdt; + Gdtr.Limit = (UINT16)(sizeof (mGdtTemplate) - 1); AsmWriteGdtr (&Gdtr); // diff --git a/UefiCpuPkg/CpuDxe/CpuGdt.h b/UefiCpuPkg/CpuDxe/CpuGdt.h index 1c94487cbe..b09f15725a 100644 --- a/UefiCpuPkg/CpuDxe/CpuGdt.h +++ b/UefiCpuPkg/CpuDxe/CpuGdt.h @@ -21,48 +21,47 @@ // typedef struct _GDT_ENTRY { - UINT16 Limit15_0; - UINT16 Base15_0; - UINT8 Base23_16; - UINT8 Type; - UINT8 Limit19_16_and_flags; - UINT8 Base31_24; + UINT16 Limit15_0; + UINT16 Base15_0; + UINT8 Base23_16; + UINT8 Type; + UINT8 Limit19_16_and_flags; + UINT8 Base31_24; } GDT_ENTRY; typedef -struct _GDT_ENTRIES { - GDT_ENTRY Null; - GDT_ENTRY Linear; - GDT_ENTRY LinearCode; - GDT_ENTRY SysData; - GDT_ENTRY SysCode; - GDT_ENTRY SysCode16; - GDT_ENTRY LinearData64; - GDT_ENTRY LinearCode64; - GDT_ENTRY Spare5; + struct _GDT_ENTRIES { + GDT_ENTRY Null; + GDT_ENTRY Linear; + GDT_ENTRY LinearCode; + GDT_ENTRY SysData; + GDT_ENTRY SysCode; + GDT_ENTRY SysCode16; + GDT_ENTRY LinearData64; + GDT_ENTRY LinearCode64; + GDT_ENTRY Spare5; } GDT_ENTRIES; #pragma pack () -#define NULL_SEL OFFSET_OF (GDT_ENTRIES, Null) -#define LINEAR_SEL OFFSET_OF (GDT_ENTRIES, Linear) -#define LINEAR_CODE_SEL OFFSET_OF (GDT_ENTRIES, LinearCode) -#define SYS_DATA_SEL OFFSET_OF (GDT_ENTRIES, SysData) -#define SYS_CODE_SEL OFFSET_OF (GDT_ENTRIES, SysCode) -#define SYS_CODE16_SEL OFFSET_OF (GDT_ENTRIES, SysCode16) -#define LINEAR_DATA64_SEL OFFSET_OF (GDT_ENTRIES, LinearData64) -#define LINEAR_CODE64_SEL OFFSET_OF (GDT_ENTRIES, LinearCode64) -#define SPARE5_SEL OFFSET_OF (GDT_ENTRIES, Spare5) +#define NULL_SEL OFFSET_OF (GDT_ENTRIES, Null) +#define LINEAR_SEL OFFSET_OF (GDT_ENTRIES, Linear) +#define LINEAR_CODE_SEL OFFSET_OF (GDT_ENTRIES, LinearCode) +#define SYS_DATA_SEL OFFSET_OF (GDT_ENTRIES, SysData) +#define SYS_CODE_SEL OFFSET_OF (GDT_ENTRIES, SysCode) +#define SYS_CODE16_SEL OFFSET_OF (GDT_ENTRIES, SysCode16) +#define LINEAR_DATA64_SEL OFFSET_OF (GDT_ENTRIES, LinearData64) +#define LINEAR_CODE64_SEL OFFSET_OF (GDT_ENTRIES, LinearCode64) +#define SPARE5_SEL OFFSET_OF (GDT_ENTRIES, Spare5) #if defined (MDE_CPU_IA32) -#define CPU_CODE_SEL LINEAR_CODE_SEL -#define CPU_DATA_SEL LINEAR_SEL +#define CPU_CODE_SEL LINEAR_CODE_SEL +#define CPU_DATA_SEL LINEAR_SEL #elif defined (MDE_CPU_X64) -#define CPU_CODE_SEL LINEAR_CODE64_SEL -#define CPU_DATA_SEL LINEAR_DATA64_SEL +#define CPU_CODE_SEL LINEAR_CODE64_SEL +#define CPU_DATA_SEL LINEAR_DATA64_SEL #else -#error CPU type not supported for CPU GDT initialization! + #error CPU type not supported for CPU GDT initialization! #endif #endif // _CPU_GDT_H_ - diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c index 60ede38df4..1f218367b3 100644 --- a/UefiCpuPkg/CpuDxe/CpuMp.c +++ b/UefiCpuPkg/CpuDxe/CpuMp.c @@ -9,8 +9,8 @@ #include "CpuDxe.h" #include "CpuMp.h" -EFI_HANDLE mMpServiceHandle = NULL; -UINTN mNumberOfProcessors = 1; +EFI_HANDLE mMpServiceHandle = NULL; +UINTN mNumberOfProcessors = 1; EFI_MP_SERVICES_PROTOCOL mMpServicesTemplate = { GetNumberOfProcessors, @@ -509,7 +509,7 @@ WhoAmI ( OUT UINTN *ProcessorNumber ) { - return MpInitLibWhoAmI (ProcessorNumber);; + return MpInitLibWhoAmI (ProcessorNumber); } /** @@ -547,8 +547,8 @@ CollectBistDataFromHob ( // Sec Platform Information2 PPI includes BSP/APs' BIST information // SecPlatformInformation2 = GET_GUID_HOB_DATA (GuidHob); - NumberOfData = SecPlatformInformation2->NumberOfCpus; - CpuInstance = SecPlatformInformation2->CpuInstance; + NumberOfData = SecPlatformInformation2->NumberOfCpus; + CpuInstance = SecPlatformInformation2->CpuInstance; } else { // // Otherwise, get gEfiSecPlatformInformationPpiGuid Guided HOB @@ -556,14 +556,14 @@ CollectBistDataFromHob ( GuidHob = GetFirstGuidHob (&gEfiSecPlatformInformationPpiGuid); if (GuidHob != NULL) { SecPlatformInformation = GET_GUID_HOB_DATA (GuidHob); - NumberOfData = 1; + NumberOfData = 1; // // SEC Platform Information only includes BSP's BIST information // does not have BSP's APIC ID // - BspCpuInstance.CpuLocation = GetApicId (); - BspCpuInstance.InfoRecord.IA32HealthFlags.Uint32 = SecPlatformInformation->IA32HealthFlags.Uint32; - CpuInstance = &BspCpuInstance; + BspCpuInstance.CpuLocation = GetApicId (); + BspCpuInstance.InfoRecord.IA32HealthFlags.Uint32 = SecPlatformInformation->IA32HealthFlags.Uint32; + CpuInstance = &BspCpuInstance; } else { DEBUG ((DEBUG_INFO, "Does not find any HOB stored CPU BIST information!\n")); // @@ -583,6 +583,7 @@ CollectBistDataFromHob ( BistData = CpuInstance[CpuInstanceNumber].InfoRecord.IA32HealthFlags; } } + if (BistData.Uint32 != 0) { // // Report Status Code that self test is failed @@ -607,7 +608,7 @@ CollectBistDataFromHob ( VOID EFIAPI GetGdtr ( - IN OUT VOID *Buffer + IN OUT VOID *Buffer ) { AsmReadGdtr ((IA32_DESCRIPTOR *)Buffer); @@ -625,12 +626,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; // @@ -638,9 +639,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); } @@ -656,19 +657,19 @@ InitializeMpExceptionStackSwitchHandlers ( VOID ) { - 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 Index; + UINTN Bsp; + UINTN ExceptionNumber; + UINTN OldGdtSize; + UINTN NewGdtSize; + UINTN NewStackSize; + IA32_DESCRIPTOR Gdtr; + CPU_EXCEPTION_INIT_DATA EssData; + UINT8 *GdtBuffer; + UINT8 *StackTop; ExceptionNumber = FixedPcdGetSize (PcdCpuStackSwitchExceptionList); - NewStackSize = FixedPcdGet32 (PcdCpuKnownGoodStackSize) * ExceptionNumber; + NewStackSize = FixedPcdGet32 (PcdCpuKnownGoodStackSize) * ExceptionNumber; StackTop = AllocateRuntimeZeroPool (NewStackSize * mNumberOfProcessors); ASSERT (StackTop != NULL); @@ -678,17 +679,17 @@ InitializeMpExceptionStackSwitchHandlers ( // 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; MpInitLibWhoAmI (&Bsp); for (Index = 0; Index < mNumberOfProcessors; ++Index) { @@ -733,7 +734,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) * @@ -749,19 +750,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); @@ -776,7 +779,7 @@ InitializeMpExceptionStackSwitchHandlers ( ); } - StackTop -= NewStackSize; + StackTop -= NewStackSize; } } @@ -815,9 +818,9 @@ InitializeMpSupport ( VOID ) { - EFI_STATUS Status; - UINTN NumberOfProcessors; - UINTN NumberOfEnabledProcessors; + EFI_STATUS Status; + UINTN NumberOfProcessors; + UINTN NumberOfEnabledProcessors; // // Wakeup APs to do initialization @@ -841,9 +844,9 @@ InitializeMpSupport ( Status = gBS->InstallMultipleProtocolInterfaces ( &mMpServiceHandle, - &gEfiMpServiceProtocolGuid, &mMpServicesTemplate, + &gEfiMpServiceProtocolGuid, + &mMpServicesTemplate, NULL ); ASSERT_EFI_ERROR (Status); } - diff --git a/UefiCpuPkg/CpuDxe/CpuMp.h b/UefiCpuPkg/CpuDxe/CpuMp.h index 4ee171d8c4..b461753510 100644 --- a/UefiCpuPkg/CpuDxe/CpuMp.h +++ b/UefiCpuPkg/CpuDxe/CpuMp.h @@ -467,4 +467,3 @@ WhoAmI ( ); #endif // _CPU_MP_H_ - diff --git a/UefiCpuPkg/CpuDxe/CpuPageTable.c b/UefiCpuPkg/CpuDxe/CpuPageTable.c index c34059f87f..d9e65ab4b2 100644 --- a/UefiCpuPkg/CpuDxe/CpuPageTable.c +++ b/UefiCpuPkg/CpuDxe/CpuPageTable.c @@ -24,27 +24,27 @@ /// /// Page Table Entry /// -#define IA32_PG_P BIT0 -#define IA32_PG_RW BIT1 -#define IA32_PG_U BIT2 -#define IA32_PG_WT BIT3 -#define IA32_PG_CD BIT4 -#define IA32_PG_A BIT5 -#define IA32_PG_D BIT6 -#define IA32_PG_PS BIT7 -#define IA32_PG_PAT_2M BIT12 -#define IA32_PG_PAT_4K IA32_PG_PS -#define IA32_PG_PMNT BIT62 -#define IA32_PG_NX BIT63 - -#define PAGE_ATTRIBUTE_BITS (IA32_PG_D | IA32_PG_A | IA32_PG_U | IA32_PG_RW | IA32_PG_P) +#define IA32_PG_P BIT0 +#define IA32_PG_RW BIT1 +#define IA32_PG_U BIT2 +#define IA32_PG_WT BIT3 +#define IA32_PG_CD BIT4 +#define IA32_PG_A BIT5 +#define IA32_PG_D BIT6 +#define IA32_PG_PS BIT7 +#define IA32_PG_PAT_2M BIT12 +#define IA32_PG_PAT_4K IA32_PG_PS +#define IA32_PG_PMNT BIT62 +#define IA32_PG_NX BIT63 + +#define PAGE_ATTRIBUTE_BITS (IA32_PG_D | IA32_PG_A | IA32_PG_U | IA32_PG_RW | IA32_PG_P) // // Bits 1, 2, 5, 6 are reserved in the IA32 PAE PDPTE // X64 PAE PDPTE does not have such restriction // -#define IA32_PAE_PDPTE_ATTRIBUTE_BITS (IA32_PG_P) +#define IA32_PAE_PDPTE_ATTRIBUTE_BITS (IA32_PG_P) -#define PAGE_PROGATE_BITS (IA32_PG_NX | PAGE_ATTRIBUTE_BITS) +#define PAGE_PROGATE_BITS (IA32_PG_NX | PAGE_ATTRIBUTE_BITS) #define PAGING_4K_MASK 0xFFF #define PAGING_2M_MASK 0x1FFFFF @@ -52,9 +52,9 @@ #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_4K_ADDRESS_MASK_64 0x000FFFFFFFFFF000ull +#define PAGING_2M_ADDRESS_MASK_64 0x000FFFFFFFE00000ull +#define PAGING_1G_ADDRESS_MASK_64 0x000FFFFFC0000000ull #define MAX_PF_ENTRY_COUNT 10 #define MAX_DEBUG_MESSAGE_LENGTH 0x100 @@ -68,9 +68,9 @@ typedef enum { } PAGE_ATTRIBUTE; typedef struct { - PAGE_ATTRIBUTE Attribute; - UINT64 Length; - UINT64 AddressMask; + PAGE_ATTRIBUTE Attribute; + UINT64 Length; + UINT64 AddressMask; } PAGE_ATTRIBUTE_TABLE; typedef enum { @@ -79,21 +79,21 @@ typedef enum { PageActionClear, } PAGE_ACTION; -PAGE_ATTRIBUTE_TABLE mPageAttributeTable[] = { - {Page4K, SIZE_4KB, PAGING_4K_ADDRESS_MASK_64}, - {Page2M, SIZE_2MB, PAGING_2M_ADDRESS_MASK_64}, - {Page1G, SIZE_1GB, PAGING_1G_ADDRESS_MASK_64}, +PAGE_ATTRIBUTE_TABLE mPageAttributeTable[] = { + { Page4K, SIZE_4KB, PAGING_4K_ADDRESS_MASK_64 }, + { Page2M, SIZE_2MB, PAGING_2M_ADDRESS_MASK_64 }, + { Page1G, SIZE_1GB, PAGING_1G_ADDRESS_MASK_64 }, }; -PAGE_TABLE_POOL *mPageTablePool = NULL; -BOOLEAN mPageTablePoolLock = FALSE; -PAGE_TABLE_LIB_PAGING_CONTEXT mPagingContext; -EFI_SMM_BASE2_PROTOCOL *mSmmBase2 = NULL; +PAGE_TABLE_POOL *mPageTablePool = NULL; +BOOLEAN mPageTablePoolLock = FALSE; +PAGE_TABLE_LIB_PAGING_CONTEXT mPagingContext; +EFI_SMM_BASE2_PROTOCOL *mSmmBase2 = NULL; // // Record the page fault exception count for one instruction execution. // -UINTN *mPFEntryCount; +UINTN *mPFEntryCount; UINT64 *(*mLastPFEntryPointer)[MAX_PF_ENTRY_COUNT]; /** @@ -119,7 +119,7 @@ IsInSmm ( VOID ) { - BOOLEAN InSmm; + BOOLEAN InSmm; InSmm = FALSE; if (mSmmBase2 == NULL) { @@ -137,7 +137,7 @@ IsInSmm ( // load its own page table. // return (InSmm && - mPagingContext.ContextData.X64.PageTableBase != (UINT64)AsmReadCr3()); + mPagingContext.ContextData.X64.PageTableBase != (UINT64)AsmReadCr3 ()); } /** @@ -147,23 +147,23 @@ IsInSmm ( **/ VOID GetCurrentPagingContext ( - IN OUT PAGE_TABLE_LIB_PAGING_CONTEXT *PagingContext + IN OUT PAGE_TABLE_LIB_PAGING_CONTEXT *PagingContext ) { - UINT32 RegEax; - CPUID_EXTENDED_CPU_SIG_EDX RegEdx; - MSR_IA32_EFER_REGISTER MsrEfer; - IA32_CR4 Cr4; - IA32_CR0 Cr0; - UINT32 *Attributes; - UINTN *PageTableBase; + UINT32 RegEax; + CPUID_EXTENDED_CPU_SIG_EDX RegEdx; + MSR_IA32_EFER_REGISTER MsrEfer; + IA32_CR4 Cr4; + IA32_CR0 Cr0; + UINT32 *Attributes; + UINTN *PageTableBase; // // Don't retrieve current paging context from processor if in SMM mode. // if (!IsInSmm ()) { - ZeroMem (&mPagingContext, sizeof(mPagingContext)); - if (sizeof(UINTN) == sizeof(UINT64)) { + ZeroMem (&mPagingContext, sizeof (mPagingContext)); + if (sizeof (UINTN) == sizeof (UINT64)) { mPagingContext.MachineType = IMAGE_FILE_MACHINE_X64; } else { mPagingContext.MachineType = IMAGE_FILE_MACHINE_I386; @@ -179,15 +179,19 @@ GetCurrentPagingContext ( } else { *PageTableBase = 0; } + if (Cr0.Bits.WP != 0) { *Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_WP_ENABLE; } + if (Cr4.Bits.PSE != 0) { *Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PSE; } + if (Cr4.Bits.PAE != 0) { *Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAE; } + if (Cr4.Bits.LA57 != 0) { *Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_5_LEVEL; } @@ -198,7 +202,7 @@ GetCurrentPagingContext ( if (RegEdx.Bits.NX != 0) { // XD supported - MsrEfer.Uint64 = AsmReadMsr64(MSR_CORE_IA32_EFER); + MsrEfer.Uint64 = AsmReadMsr64 (MSR_CORE_IA32_EFER); if (MsrEfer.Bits.NXE != 0) { // XD activated *Attributes |= PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_XD_ACTIVATED; @@ -231,11 +235,13 @@ PageAttributeToLength ( ) { UINTN Index; - for (Index = 0; Index < sizeof(mPageAttributeTable)/sizeof(mPageAttributeTable[0]); Index++) { + + for (Index = 0; Index < sizeof (mPageAttributeTable)/sizeof (mPageAttributeTable[0]); Index++) { if (PageAttribute == mPageAttributeTable[Index].Attribute) { return (UINTN)mPageAttributeTable[Index].Length; } } + return 0; } @@ -252,11 +258,13 @@ PageAttributeToMask ( ) { UINTN Index; - for (Index = 0; Index < sizeof(mPageAttributeTable)/sizeof(mPageAttributeTable[0]); Index++) { + + for (Index = 0; Index < sizeof (mPageAttributeTable)/sizeof (mPageAttributeTable[0]); Index++) { if (PageAttribute == mPageAttributeTable[Index].Attribute) { return (UINTN)mPageAttributeTable[Index].AddressMask; } } + return 0; } @@ -271,22 +279,22 @@ PageAttributeToMask ( **/ VOID * GetPageTableEntry ( - IN PAGE_TABLE_LIB_PAGING_CONTEXT *PagingContext, - IN PHYSICAL_ADDRESS Address, - OUT PAGE_ATTRIBUTE *PageAttribute + IN PAGE_TABLE_LIB_PAGING_CONTEXT *PagingContext, + IN PHYSICAL_ADDRESS Address, + OUT PAGE_ATTRIBUTE *PageAttribute ) { - UINTN Index1; - UINTN Index2; - UINTN Index3; - UINTN Index4; - UINTN Index5; - UINT64 *L1PageTable; - UINT64 *L2PageTable; - UINT64 *L3PageTable; - UINT64 *L4PageTable; - UINT64 *L5PageTable; - UINT64 AddressEncMask; + UINTN Index1; + UINTN Index2; + UINTN Index3; + UINTN Index4; + UINTN Index5; + UINT64 *L1PageTable; + UINT64 *L2PageTable; + UINT64 *L3PageTable; + UINT64 *L4PageTable; + UINT64 *L5PageTable; + UINT64 AddressEncMask; ASSERT (PagingContext != NULL); @@ -312,6 +320,7 @@ GetPageTableEntry ( } else { L4PageTable = (UINT64 *)(UINTN)PagingContext->ContextData.X64.PageTableBase; } + if (L4PageTable[Index4] == 0) { *PageAttribute = PageNone; return NULL; @@ -319,13 +328,15 @@ GetPageTableEntry ( L3PageTable = (UINT64 *)(UINTN)(L4PageTable[Index4] & ~AddressEncMask & PAGING_4K_ADDRESS_MASK_64); } else { - ASSERT((PagingContext->ContextData.Ia32.Attributes & PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAE) != 0); + ASSERT ((PagingContext->ContextData.Ia32.Attributes & PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAE) != 0); L3PageTable = (UINT64 *)(UINTN)PagingContext->ContextData.Ia32.PageTableBase; } + if (L3PageTable[Index3] == 0) { *PageAttribute = PageNone; return NULL; } + if ((L3PageTable[Index3] & IA32_PG_PS) != 0) { // 1G *PageAttribute = Page1G; @@ -337,6 +348,7 @@ GetPageTableEntry ( *PageAttribute = PageNone; return NULL; } + if ((L2PageTable[Index2] & IA32_PG_PS) != 0) { // 2M *PageAttribute = Page2M; @@ -349,6 +361,7 @@ GetPageTableEntry ( *PageAttribute = PageNone; return NULL; } + *PageAttribute = Page4K; return &L1PageTable[Index1]; } @@ -362,20 +375,24 @@ GetPageTableEntry ( **/ UINT64 GetAttributesFromPageEntry ( - IN UINT64 *PageEntry + IN UINT64 *PageEntry ) { UINT64 Attributes; + Attributes = 0; if ((*PageEntry & IA32_PG_P) == 0) { Attributes |= EFI_MEMORY_RP; } + if ((*PageEntry & IA32_PG_RW) == 0) { Attributes |= EFI_MEMORY_RO; } + if ((*PageEntry & IA32_PG_NX) != 0) { Attributes |= EFI_MEMORY_XP; } + return Attributes; } @@ -390,11 +407,11 @@ GetAttributesFromPageEntry ( **/ VOID ConvertPageEntryAttribute ( - IN PAGE_TABLE_LIB_PAGING_CONTEXT *PagingContext, - IN UINT64 *PageEntry, - IN UINT64 Attributes, - IN PAGE_ACTION PageAction, - OUT BOOLEAN *IsModified + IN PAGE_TABLE_LIB_PAGING_CONTEXT *PagingContext, + IN UINT64 *PageEntry, + IN UINT64 Attributes, + IN PAGE_ACTION PageAction, + OUT BOOLEAN *IsModified ) { UINT64 CurrentPageEntry; @@ -402,45 +419,46 @@ ConvertPageEntryAttribute ( UINT32 *PageAttributes; CurrentPageEntry = *PageEntry; - NewPageEntry = CurrentPageEntry; + NewPageEntry = CurrentPageEntry; if ((Attributes & EFI_MEMORY_RP) != 0) { switch (PageAction) { - case PageActionAssign: - case PageActionSet: - NewPageEntry &= ~(UINT64)IA32_PG_P; - break; - case PageActionClear: - NewPageEntry |= IA32_PG_P; - break; + case PageActionAssign: + case PageActionSet: + NewPageEntry &= ~(UINT64)IA32_PG_P; + break; + case PageActionClear: + NewPageEntry |= IA32_PG_P; + break; } } else { switch (PageAction) { - case PageActionAssign: - NewPageEntry |= IA32_PG_P; - break; - case PageActionSet: - case PageActionClear: - break; + case PageActionAssign: + NewPageEntry |= IA32_PG_P; + break; + case PageActionSet: + case PageActionClear: + break; } } + if ((Attributes & EFI_MEMORY_RO) != 0) { switch (PageAction) { - case PageActionAssign: - case PageActionSet: - NewPageEntry &= ~(UINT64)IA32_PG_RW; - break; - case PageActionClear: - NewPageEntry |= IA32_PG_RW; - break; + case PageActionAssign: + case PageActionSet: + NewPageEntry &= ~(UINT64)IA32_PG_RW; + break; + case PageActionClear: + NewPageEntry |= IA32_PG_RW; + break; } } else { switch (PageAction) { - case PageActionAssign: - NewPageEntry |= IA32_PG_RW; - break; - case PageActionSet: - case PageActionClear: - break; + case PageActionAssign: + NewPageEntry |= IA32_PG_RW; + break; + case PageActionSet: + case PageActionClear: + break; } } @@ -449,25 +467,26 @@ ConvertPageEntryAttribute ( if ((*PageAttributes & PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_XD_ACTIVATED) != 0) { if ((Attributes & EFI_MEMORY_XP) != 0) { switch (PageAction) { - case PageActionAssign: - case PageActionSet: - NewPageEntry |= IA32_PG_NX; - break; - case PageActionClear: - NewPageEntry &= ~IA32_PG_NX; - break; + case PageActionAssign: + case PageActionSet: + NewPageEntry |= IA32_PG_NX; + break; + case PageActionClear: + NewPageEntry &= ~IA32_PG_NX; + break; } } else { switch (PageAction) { - case PageActionAssign: - NewPageEntry &= ~IA32_PG_NX; - break; - case PageActionSet: - case PageActionClear: - break; + case PageActionAssign: + NewPageEntry &= ~IA32_PG_NX; + break; + case PageActionSet: + case PageActionClear: + break; } } } + *PageEntry = NewPageEntry; if (CurrentPageEntry != NewPageEntry) { *IsModified = TRUE; @@ -490,13 +509,13 @@ ConvertPageEntryAttribute ( **/ PAGE_ATTRIBUTE NeedSplitPage ( - IN PHYSICAL_ADDRESS BaseAddress, - IN UINT64 Length, - IN UINT64 *PageEntry, - IN PAGE_ATTRIBUTE PageAttribute + IN PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + IN UINT64 *PageEntry, + IN PAGE_ATTRIBUTE PageAttribute ) { - UINT64 PageEntryLength; + UINT64 PageEntryLength; PageEntryLength = PageAttributeToLength (PageAttribute); @@ -525,16 +544,16 @@ NeedSplitPage ( **/ RETURN_STATUS SplitPage ( - IN UINT64 *PageEntry, - IN PAGE_ATTRIBUTE PageAttribute, - IN PAGE_ATTRIBUTE SplitAttribute, - IN PAGE_TABLE_LIB_ALLOCATE_PAGES AllocatePagesFunc + IN UINT64 *PageEntry, + IN PAGE_ATTRIBUTE PageAttribute, + IN PAGE_ATTRIBUTE SplitAttribute, + IN PAGE_TABLE_LIB_ALLOCATE_PAGES AllocatePagesFunc ) { - UINT64 BaseAddress; - UINT64 *NewPageEntry; - UINTN Index; - UINT64 AddressEncMask; + UINT64 BaseAddress; + UINT64 *NewPageEntry; + UINTN Index; + UINT64 AddressEncMask; ASSERT (PageAttribute == Page2M || PageAttribute == Page1G); @@ -555,10 +574,12 @@ SplitPage ( if (NewPageEntry == NULL) { return RETURN_OUT_OF_RESOURCES; } + BaseAddress = *PageEntry & ~AddressEncMask & PAGING_2M_ADDRESS_MASK_64; - for (Index = 0; Index < SIZE_4KB / sizeof(UINT64); Index++) { + for (Index = 0; Index < SIZE_4KB / sizeof (UINT64); Index++) { NewPageEntry[Index] = (BaseAddress + SIZE_4KB * Index) | AddressEncMask | ((*PageEntry) & PAGE_PROGATE_BITS); } + (*PageEntry) = (UINT64)(UINTN)NewPageEntry | AddressEncMask | ((*PageEntry) & PAGE_ATTRIBUTE_BITS); return RETURN_SUCCESS; } else { @@ -570,16 +591,18 @@ SplitPage ( // No need support 1G->4K directly, we should use 1G->2M, then 2M->4K to get more compact page table. // ASSERT (SplitAttribute == Page2M || SplitAttribute == Page4K); - if ((SplitAttribute == Page2M || SplitAttribute == Page4K)) { + if (((SplitAttribute == Page2M) || (SplitAttribute == Page4K))) { NewPageEntry = AllocatePagesFunc (1); DEBUG ((DEBUG_VERBOSE, "Split - 0x%x\n", NewPageEntry)); if (NewPageEntry == NULL) { return RETURN_OUT_OF_RESOURCES; } + BaseAddress = *PageEntry & ~AddressEncMask & PAGING_1G_ADDRESS_MASK_64; - for (Index = 0; Index < SIZE_4KB / sizeof(UINT64); Index++) { + for (Index = 0; Index < SIZE_4KB / sizeof (UINT64); Index++) { NewPageEntry[Index] = (BaseAddress + SIZE_2MB * Index) | AddressEncMask | IA32_PG_PS | ((*PageEntry) & PAGE_PROGATE_BITS); } + (*PageEntry) = (UINT64)(UINTN)NewPageEntry | AddressEncMask | ((*PageEntry) & PAGE_ATTRIBUTE_BITS); return RETURN_SUCCESS; } else { @@ -603,14 +626,16 @@ IsReadOnlyPageWriteProtected ( ) { IA32_CR0 Cr0; + // // To avoid unforseen consequences, don't touch paging settings in SMM mode // in this driver. // if (!IsInSmm ()) { Cr0.UintN = AsmReadCr0 (); - return (BOOLEAN) (Cr0.Bits.WP != 0); + return (BOOLEAN)(Cr0.Bits.WP != 0); } + return FALSE; } @@ -623,12 +648,13 @@ DisableReadOnlyPageWriteProtect ( ) { IA32_CR0 Cr0; + // // To avoid unforseen consequences, don't touch paging settings in SMM mode // in this driver. // if (!IsInSmm ()) { - Cr0.UintN = AsmReadCr0 (); + Cr0.UintN = AsmReadCr0 (); Cr0.Bits.WP = 0; AsmWriteCr0 (Cr0.UintN); } @@ -643,12 +669,13 @@ EnableReadOnlyPageWriteProtect ( ) { IA32_CR0 Cr0; + // // To avoid unforseen consequences, don't touch paging settings in SMM mode // in this driver. // if (!IsInSmm ()) { - Cr0.UintN = AsmReadCr0 (); + Cr0.UintN = AsmReadCr0 (); Cr0.Bits.WP = 1; AsmWriteCr0 (Cr0.UintN); } @@ -685,33 +712,35 @@ EnableReadOnlyPageWriteProtect ( **/ RETURN_STATUS ConvertMemoryPageAttributes ( - IN PAGE_TABLE_LIB_PAGING_CONTEXT *PagingContext OPTIONAL, - IN PHYSICAL_ADDRESS BaseAddress, - IN UINT64 Length, - IN UINT64 Attributes, - IN PAGE_ACTION PageAction, - IN PAGE_TABLE_LIB_ALLOCATE_PAGES AllocatePagesFunc OPTIONAL, - OUT BOOLEAN *IsSplitted OPTIONAL, - OUT BOOLEAN *IsModified OPTIONAL + IN PAGE_TABLE_LIB_PAGING_CONTEXT *PagingContext OPTIONAL, + IN PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + IN UINT64 Attributes, + IN PAGE_ACTION PageAction, + IN PAGE_TABLE_LIB_ALLOCATE_PAGES AllocatePagesFunc OPTIONAL, + OUT BOOLEAN *IsSplitted OPTIONAL, + OUT BOOLEAN *IsModified OPTIONAL ) { - PAGE_TABLE_LIB_PAGING_CONTEXT CurrentPagingContext; - UINT64 *PageEntry; - PAGE_ATTRIBUTE PageAttribute; - UINTN PageEntryLength; - PAGE_ATTRIBUTE SplitAttribute; - RETURN_STATUS Status; - BOOLEAN IsEntryModified; - BOOLEAN IsWpEnabled; + PAGE_TABLE_LIB_PAGING_CONTEXT CurrentPagingContext; + UINT64 *PageEntry; + PAGE_ATTRIBUTE PageAttribute; + UINTN PageEntryLength; + PAGE_ATTRIBUTE SplitAttribute; + RETURN_STATUS Status; + BOOLEAN IsEntryModified; + BOOLEAN IsWpEnabled; if ((BaseAddress & (SIZE_4KB - 1)) != 0) { DEBUG ((DEBUG_ERROR, "BaseAddress(0x%lx) is not aligned!\n", BaseAddress)); return EFI_UNSUPPORTED; } + if ((Length & (SIZE_4KB - 1)) != 0) { DEBUG ((DEBUG_ERROR, "Length(0x%lx) is not aligned!\n", Length)); return EFI_UNSUPPORTED; } + if (Length == 0) { DEBUG ((DEBUG_ERROR, "Length is 0!\n")); return RETURN_INVALID_PARAMETER; @@ -725,44 +754,50 @@ ConvertMemoryPageAttributes ( if (PagingContext == NULL) { GetCurrentPagingContext (&CurrentPagingContext); } else { - CopyMem (&CurrentPagingContext, PagingContext, sizeof(CurrentPagingContext)); + CopyMem (&CurrentPagingContext, PagingContext, sizeof (CurrentPagingContext)); } - switch(CurrentPagingContext.MachineType) { - case IMAGE_FILE_MACHINE_I386: - if (CurrentPagingContext.ContextData.Ia32.PageTableBase == 0) { - if (Attributes == 0) { - return EFI_SUCCESS; - } else { - DEBUG ((DEBUG_ERROR, "PageTable is 0!\n")); + + switch (CurrentPagingContext.MachineType) { + case IMAGE_FILE_MACHINE_I386: + if (CurrentPagingContext.ContextData.Ia32.PageTableBase == 0) { + if (Attributes == 0) { + return EFI_SUCCESS; + } else { + DEBUG ((DEBUG_ERROR, "PageTable is 0!\n")); + return EFI_UNSUPPORTED; + } + } + + if ((CurrentPagingContext.ContextData.Ia32.Attributes & PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAE) == 0) { + DEBUG ((DEBUG_ERROR, "Non-PAE Paging!\n")); return EFI_UNSUPPORTED; } - } - if ((CurrentPagingContext.ContextData.Ia32.Attributes & PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAE) == 0) { - DEBUG ((DEBUG_ERROR, "Non-PAE Paging!\n")); - return EFI_UNSUPPORTED; - } - if ((BaseAddress + Length) > BASE_4GB) { - DEBUG ((DEBUG_ERROR, "Beyond 4GB memory in 32-bit mode!\n")); + + if ((BaseAddress + Length) > BASE_4GB) { + DEBUG ((DEBUG_ERROR, "Beyond 4GB memory in 32-bit mode!\n")); + return EFI_UNSUPPORTED; + } + + break; + case IMAGE_FILE_MACHINE_X64: + ASSERT (CurrentPagingContext.ContextData.X64.PageTableBase != 0); + break; + default: + ASSERT (FALSE); return EFI_UNSUPPORTED; - } - break; - case IMAGE_FILE_MACHINE_X64: - ASSERT (CurrentPagingContext.ContextData.X64.PageTableBase != 0); - break; - default: - ASSERT(FALSE); - return EFI_UNSUPPORTED; - break; + break; } -// DEBUG ((DEBUG_ERROR, "ConvertMemoryPageAttributes(%x) - %016lx, %016lx, %02lx\n", IsSet, BaseAddress, Length, Attributes)); + // DEBUG ((DEBUG_ERROR, "ConvertMemoryPageAttributes(%x) - %016lx, %016lx, %02lx\n", IsSet, BaseAddress, Length, Attributes)); if (IsSplitted != NULL) { *IsSplitted = FALSE; } + if (IsModified != NULL) { *IsModified = FALSE; } + if (AllocatePagesFunc == NULL) { AllocatePagesFunc = AllocatePageTableMemory; } @@ -785,8 +820,9 @@ ConvertMemoryPageAttributes ( Status = RETURN_UNSUPPORTED; goto Done; } + PageEntryLength = PageAttributeToLength (PageAttribute); - SplitAttribute = NeedSplitPage (BaseAddress, Length, PageEntry, PageAttribute); + SplitAttribute = NeedSplitPage (BaseAddress, Length, PageEntry, PageAttribute); if (SplitAttribute == PageNone) { ConvertPageEntryAttribute (&CurrentPagingContext, PageEntry, Attributes, PageAction, &IsEntryModified); if (IsEntryModified) { @@ -794,27 +830,32 @@ ConvertMemoryPageAttributes ( *IsModified = TRUE; } } + // // Convert success, move to next // BaseAddress += PageEntryLength; - Length -= PageEntryLength; + Length -= PageEntryLength; } else { if (AllocatePagesFunc == NULL) { Status = RETURN_UNSUPPORTED; goto Done; } + Status = SplitPage (PageEntry, PageAttribute, SplitAttribute, AllocatePagesFunc); if (RETURN_ERROR (Status)) { Status = RETURN_UNSUPPORTED; goto Done; } + if (IsSplitted != NULL) { *IsSplitted = TRUE; } + if (IsModified != NULL) { *IsModified = TRUE; } + // // Just split current page // Convert success in next around @@ -829,6 +870,7 @@ Done: if (IsWpEnabled) { EnableReadOnlyPageWriteProtect (); } + return Status; } @@ -863,20 +905,20 @@ Done: RETURN_STATUS EFIAPI AssignMemoryPageAttributes ( - IN PAGE_TABLE_LIB_PAGING_CONTEXT *PagingContext OPTIONAL, - IN PHYSICAL_ADDRESS BaseAddress, - IN UINT64 Length, - IN UINT64 Attributes, - IN PAGE_TABLE_LIB_ALLOCATE_PAGES AllocatePagesFunc OPTIONAL + IN PAGE_TABLE_LIB_PAGING_CONTEXT *PagingContext OPTIONAL, + IN PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + IN UINT64 Attributes, + IN PAGE_TABLE_LIB_ALLOCATE_PAGES AllocatePagesFunc OPTIONAL ) { RETURN_STATUS Status; BOOLEAN IsModified; BOOLEAN IsSplitted; -// DEBUG((DEBUG_INFO, "AssignMemoryPageAttributes: 0x%lx - 0x%lx (0x%lx)\n", BaseAddress, Length, Attributes)); + // DEBUG((DEBUG_INFO, "AssignMemoryPageAttributes: 0x%lx - 0x%lx (0x%lx)\n", BaseAddress, Length, Attributes)); Status = ConvertMemoryPageAttributes (PagingContext, BaseAddress, Length, Attributes, PageActionAssign, AllocatePagesFunc, &IsSplitted, &IsModified); - if (!EFI_ERROR(Status)) { + if (!EFI_ERROR (Status)) { if ((PagingContext == NULL) && IsModified) { // // Flush TLB as last step. @@ -885,7 +927,7 @@ AssignMemoryPageAttributes ( // TLB flush in MWAIT loop mode, there's no need to flush TLB for them // here. // - CpuFlushTlb(); + CpuFlushTlb (); } } @@ -900,7 +942,7 @@ IsExecuteDisableEnabled ( VOID ) { - MSR_CORE_IA32_EFER_REGISTER MsrEfer; + MSR_CORE_IA32_EFER_REGISTER MsrEfer; MsrEfer.Uint64 = AsmReadMsr64 (MSR_IA32_EFER); return (MsrEfer.Bits.NXE == 1); @@ -914,21 +956,21 @@ RefreshGcdMemoryAttributesFromPaging ( VOID ) { - EFI_STATUS Status; - UINTN NumberOfDescriptors; - EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap; - PAGE_TABLE_LIB_PAGING_CONTEXT PagingContext; - PAGE_ATTRIBUTE PageAttribute; - UINT64 *PageEntry; - UINT64 PageLength; - UINT64 MemorySpaceLength; - UINT64 Length; - UINT64 BaseAddress; - UINT64 PageStartAddress; - UINT64 Attributes; - UINT64 Capabilities; - UINT64 NewAttributes; - UINTN Index; + EFI_STATUS Status; + UINTN NumberOfDescriptors; + EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap; + PAGE_TABLE_LIB_PAGING_CONTEXT PagingContext; + PAGE_ATTRIBUTE PageAttribute; + UINT64 *PageEntry; + UINT64 PageLength; + UINT64 MemorySpaceLength; + UINT64 Length; + UINT64 BaseAddress; + UINT64 PageStartAddress; + UINT64 Attributes; + UINT64 Capabilities; + UINT64 NewAttributes; + UINTN Index; // // Assuming that memory space map returned is sorted already; otherwise sort @@ -939,10 +981,10 @@ RefreshGcdMemoryAttributesFromPaging ( GetCurrentPagingContext (&PagingContext); - Attributes = 0; - NewAttributes = 0; - BaseAddress = 0; - PageLength = 0; + Attributes = 0; + NewAttributes = 0; + BaseAddress = 0; + PageLength = 0; if (IsExecuteDisableEnabled ()) { Capabilities = EFI_MEMORY_RO | EFI_MEMORY_RP | EFI_MEMORY_XP; @@ -975,7 +1017,8 @@ RefreshGcdMemoryAttributesFromPaging ( DEBUG (( DEBUG_WARN, "Failed to update capability: [%lu] %016lx - %016lx (%016lx -> %016lx)\r\n", - (UINT64)Index, MemorySpaceMap[Index].BaseAddress, + (UINT64)Index, + MemorySpaceMap[Index].BaseAddress, MemorySpaceMap[Index].BaseAddress + MemorySpaceMap[Index].Length - 1, MemorySpaceMap[Index].Capabilities, MemorySpaceMap[Index].Capabilities | Capabilities @@ -1011,14 +1054,15 @@ RefreshGcdMemoryAttributesFromPaging ( // // Note current memory space might start in the middle of a page // - PageStartAddress = (*PageEntry) & (UINT64)PageAttributeToMask(PageAttribute); - PageLength = PageAttributeToLength (PageAttribute) - (BaseAddress - PageStartAddress); - Attributes = GetAttributesFromPageEntry (PageEntry); + PageStartAddress = (*PageEntry) & (UINT64)PageAttributeToMask (PageAttribute); + PageLength = PageAttributeToLength (PageAttribute) - (BaseAddress - PageStartAddress); + Attributes = GetAttributesFromPageEntry (PageEntry); } Length = MIN (PageLength, MemorySpaceLength); if (Attributes != (MemorySpaceMap[Index].Attributes & - EFI_MEMORY_ATTRIBUTE_MASK)) { + EFI_MEMORY_ATTRIBUTE_MASK)) + { NewAttributes = (MemorySpaceMap[Index].Attributes & ~EFI_MEMORY_ATTRIBUTE_MASK) | Attributes; Status = gDS->SetMemorySpaceAttributes ( @@ -1030,7 +1074,9 @@ RefreshGcdMemoryAttributesFromPaging ( DEBUG (( DEBUG_VERBOSE, "Updated memory space attribute: [%lu] %016lx - %016lx (%016lx -> %016lx)\r\n", - (UINT64)Index, BaseAddress, BaseAddress + Length - 1, + (UINT64)Index, + BaseAddress, + BaseAddress + Length - 1, MemorySpaceMap[Index].Attributes, NewAttributes )); @@ -1064,11 +1110,11 @@ RefreshGcdMemoryAttributesFromPaging ( **/ BOOLEAN InitializePageTablePool ( - IN UINTN PoolPages + IN UINTN PoolPages ) { - VOID *Buffer; - BOOLEAN IsModified; + VOID *Buffer; + BOOLEAN IsModified; // // Do not allow re-entrance. @@ -1078,15 +1124,15 @@ InitializePageTablePool ( } mPageTablePoolLock = TRUE; - IsModified = FALSE; + IsModified = FALSE; // // Always reserve at least PAGE_TABLE_POOL_UNIT_PAGES, including one page for // header. // PoolPages += 1; // Add one page for header. - PoolPages = ((PoolPages - 1) / PAGE_TABLE_POOL_UNIT_PAGES + 1) * - PAGE_TABLE_POOL_UNIT_PAGES; + PoolPages = ((PoolPages - 1) / PAGE_TABLE_POOL_UNIT_PAGES + 1) * + PAGE_TABLE_POOL_UNIT_PAGES; Buffer = AllocateAlignedPages (PoolPages, PAGE_TABLE_POOL_ALIGNMENT); if (Buffer == NULL) { DEBUG ((DEBUG_ERROR, "ERROR: Out of aligned pages\r\n")); @@ -1103,19 +1149,19 @@ InitializePageTablePool ( // Link all pools into a list for easier track later. // if (mPageTablePool == NULL) { - mPageTablePool = Buffer; + mPageTablePool = Buffer; mPageTablePool->NextPool = mPageTablePool; } else { ((PAGE_TABLE_POOL *)Buffer)->NextPool = mPageTablePool->NextPool; - mPageTablePool->NextPool = Buffer; - mPageTablePool = Buffer; + mPageTablePool->NextPool = Buffer; + mPageTablePool = Buffer; } // // Reserve one page for pool header. // - mPageTablePool->FreePages = PoolPages - 1; - mPageTablePool->Offset = EFI_PAGES_TO_SIZE (1); + mPageTablePool->FreePages = PoolPages - 1; + mPageTablePool->Offset = EFI_PAGES_TO_SIZE (1); // // Mark the whole pool pages as read-only. @@ -1157,10 +1203,10 @@ Done: VOID * EFIAPI AllocatePageTableMemory ( - IN UINTN Pages + IN UINTN Pages ) { - VOID *Buffer; + VOID *Buffer; if (Pages == 0) { return NULL; @@ -1169,8 +1215,9 @@ AllocatePageTableMemory ( // // Renew the pool if necessary. // - if (mPageTablePool == NULL || - Pages > mPageTablePool->FreePages) { + if ((mPageTablePool == NULL) || + (Pages > mPageTablePool->FreePages)) + { if (!InitializePageTablePool (Pages)) { return NULL; } @@ -1178,8 +1225,8 @@ AllocatePageTableMemory ( Buffer = (UINT8 *)mPageTablePool + mPageTablePool->Offset; - mPageTablePool->Offset += EFI_PAGES_TO_SIZE (Pages); - mPageTablePool->FreePages -= Pages; + mPageTablePool->Offset += EFI_PAGES_TO_SIZE (Pages); + mPageTablePool->FreePages -= Pages; return Buffer; } @@ -1196,13 +1243,13 @@ AllocatePageTableMemory ( VOID EFIAPI DebugExceptionHandler ( - IN EFI_EXCEPTION_TYPE ExceptionType, - IN EFI_SYSTEM_CONTEXT SystemContext + IN EFI_EXCEPTION_TYPE ExceptionType, + IN EFI_SYSTEM_CONTEXT SystemContext ) { - UINTN CpuIndex; - UINTN PFEntry; - BOOLEAN IsWpEnabled; + UINTN CpuIndex; + UINTN PFEntry; + BOOLEAN IsWpEnabled; MpInitLibWhoAmI (&CpuIndex); @@ -1238,9 +1285,9 @@ DebugExceptionHandler ( // Clear TF in EFLAGS // if (mPagingContext.MachineType == IMAGE_FILE_MACHINE_I386) { - SystemContext.SystemContextIa32->Eflags &= (UINT32)~BIT8; + SystemContext.SystemContextIa32->Eflags &= (UINT32) ~BIT8; } else { - SystemContext.SystemContextX64->Rflags &= (UINT64)~BIT8; + SystemContext.SystemContextX64->Rflags &= (UINT64) ~BIT8; } } @@ -1256,20 +1303,20 @@ DebugExceptionHandler ( VOID EFIAPI PageFaultExceptionHandler ( - IN EFI_EXCEPTION_TYPE ExceptionType, - IN EFI_SYSTEM_CONTEXT SystemContext + IN EFI_EXCEPTION_TYPE ExceptionType, + IN EFI_SYSTEM_CONTEXT SystemContext ) { - EFI_STATUS Status; - UINT64 PFAddress; - PAGE_TABLE_LIB_PAGING_CONTEXT PagingContext; - PAGE_ATTRIBUTE PageAttribute; - UINT64 Attributes; - UINT64 *PageEntry; - UINTN Index; - UINTN CpuIndex; - UINTN PageNumber; - BOOLEAN NonStopMode; + EFI_STATUS Status; + UINT64 PFAddress; + PAGE_TABLE_LIB_PAGING_CONTEXT PagingContext; + PAGE_ATTRIBUTE PageAttribute; + UINT64 Attributes; + UINT64 *PageEntry; + UINTN Index; + UINTN CpuIndex; + UINTN PageNumber; + BOOLEAN NonStopMode; PFAddress = AsmReadCr2 () & ~EFI_PAGE_MASK; if (PFAddress < BASE_4KB) { @@ -1289,23 +1336,28 @@ PageFaultExceptionHandler ( PageNumber = 2; while (PageNumber > 0) { PageEntry = GetPageTableEntry (&PagingContext, PFAddress, &PageAttribute); - ASSERT(PageEntry != NULL); + ASSERT (PageEntry != NULL); if (PageEntry != NULL) { Attributes = GetAttributesFromPageEntry (PageEntry); if ((Attributes & EFI_MEMORY_RP) != 0) { Attributes &= ~EFI_MEMORY_RP; - Status = AssignMemoryPageAttributes (&PagingContext, PFAddress, - EFI_PAGE_SIZE, Attributes, NULL); - if (!EFI_ERROR(Status)) { + Status = AssignMemoryPageAttributes ( + &PagingContext, + PFAddress, + EFI_PAGE_SIZE, + Attributes, + NULL + ); + if (!EFI_ERROR (Status)) { Index = mPFEntryCount[CpuIndex]; // // Re-retrieve page entry because above calling might update page // table due to table split. // - PageEntry = GetPageTableEntry (&PagingContext, PFAddress, &PageAttribute); + PageEntry = GetPageTableEntry (&PagingContext, PFAddress, &PageAttribute); mLastPFEntryPointer[CpuIndex][Index++] = PageEntry; - mPFEntryCount[CpuIndex] = Index; + mPFEntryCount[CpuIndex] = Index; } } } @@ -1345,9 +1397,9 @@ InitializePageTableLib ( VOID ) { - PAGE_TABLE_LIB_PAGING_CONTEXT CurrentPagingContext; - UINT32 *Attributes; - UINTN *PageTableBase; + PAGE_TABLE_LIB_PAGING_CONTEXT CurrentPagingContext; + UINT32 *Attributes; + UINTN *PageTableBase; GetCurrentPagingContext (&CurrentPagingContext); @@ -1357,7 +1409,8 @@ InitializePageTableLib ( // Reserve memory of page tables for future uses, if paging is enabled. // if ((*PageTableBase != 0) && - (*Attributes & PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAE) != 0) { + ((*Attributes & PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAE) != 0)) + { DisableReadOnlyPageWriteProtect (); InitializePageTablePool (1); EnableReadOnlyPageWriteProtect (); @@ -1377,5 +1430,5 @@ InitializePageTableLib ( DEBUG ((DEBUG_INFO, " PageTableBase - 0x%Lx\n", (UINT64)*PageTableBase)); DEBUG ((DEBUG_INFO, " Attributes - 0x%x\n", *Attributes)); - return ; + return; } diff --git a/UefiCpuPkg/CpuDxe/CpuPageTable.h b/UefiCpuPkg/CpuDxe/CpuPageTable.h index 0b2a02a2be..607e936b8a 100644 --- a/UefiCpuPkg/CpuDxe/CpuPageTable.h +++ b/UefiCpuPkg/CpuDxe/CpuPageTable.h @@ -19,19 +19,19 @@ #define PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_XD_ACTIVATED BIT31 // Other bits are reserved for future use typedef struct { - UINT32 PageTableBase; - UINT32 Reserved; - UINT32 Attributes; + UINT32 PageTableBase; + UINT32 Reserved; + UINT32 Attributes; } PAGE_TABLE_LIB_PAGING_CONTEXT_IA32; typedef struct { - UINT64 PageTableBase; - UINT32 Attributes; + UINT64 PageTableBase; + UINT32 Attributes; } PAGE_TABLE_LIB_PAGING_CONTEXT_X64; typedef union { - PAGE_TABLE_LIB_PAGING_CONTEXT_IA32 Ia32; - PAGE_TABLE_LIB_PAGING_CONTEXT_X64 X64; + PAGE_TABLE_LIB_PAGING_CONTEXT_IA32 Ia32; + PAGE_TABLE_LIB_PAGING_CONTEXT_X64 X64; } PAGE_TABLE_LIB_PAGING_CONTEXT_DATA; typedef struct { @@ -41,8 +41,8 @@ typedef struct { // #define IMAGE_FILE_MACHINE_I386 0x014c // #define IMAGE_FILE_MACHINE_X64 0x8664 // - UINT16 MachineType; - PAGE_TABLE_LIB_PAGING_CONTEXT_DATA ContextData; + UINT16 MachineType; + PAGE_TABLE_LIB_PAGING_CONTEXT_DATA ContextData; } PAGE_TABLE_LIB_PAGING_CONTEXT; #define PAGE_TABLE_POOL_ALIGNMENT BASE_2MB @@ -52,12 +52,11 @@ typedef struct { (~(EFI_PHYSICAL_ADDRESS)(PAGE_TABLE_POOL_ALIGNMENT - 1)) typedef struct { - VOID *NextPool; - UINTN Offset; - UINTN FreePages; + VOID *NextPool; + UINTN Offset; + UINTN FreePages; } PAGE_TABLE_POOL; - /** Allocates one or more 4KB pages for page table. @@ -68,7 +67,7 @@ typedef struct { **/ typedef VOID * -(EFIAPI *PAGE_TABLE_LIB_ALLOCATE_PAGES) ( +(EFIAPI *PAGE_TABLE_LIB_ALLOCATE_PAGES)( IN UINTN Pages ); @@ -103,11 +102,11 @@ VOID * RETURN_STATUS EFIAPI AssignMemoryPageAttributes ( - IN PAGE_TABLE_LIB_PAGING_CONTEXT *PagingContext OPTIONAL, - IN PHYSICAL_ADDRESS BaseAddress, - IN UINT64 Length, - IN UINT64 Attributes, - IN PAGE_TABLE_LIB_ALLOCATE_PAGES AllocatePagesFunc OPTIONAL + IN PAGE_TABLE_LIB_PAGING_CONTEXT *PagingContext OPTIONAL, + IN PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + IN UINT64 Attributes, + IN PAGE_TABLE_LIB_ALLOCATE_PAGES AllocatePagesFunc OPTIONAL ); /** @@ -136,7 +135,7 @@ InitializePageTableLib ( VOID * EFIAPI AllocatePageTableMemory ( - IN UINTN Pages + IN UINTN Pages ); /** @@ -149,9 +148,9 @@ AllocatePageTableMemory ( **/ VOID GetPagingDetails ( - IN PAGE_TABLE_LIB_PAGING_CONTEXT_DATA *PagingContextData, - OUT UINTN **PageTableBase OPTIONAL, - OUT UINT32 **Attributes OPTIONAL + IN PAGE_TABLE_LIB_PAGING_CONTEXT_DATA *PagingContextData, + OUT UINTN **PageTableBase OPTIONAL, + OUT UINT32 **Attributes OPTIONAL ); #endif diff --git a/UefiCpuPkg/CpuDxe/Ia32/PagingAttribute.c b/UefiCpuPkg/CpuDxe/Ia32/PagingAttribute.c index 3325a42dd2..9145c17ad2 100644 --- a/UefiCpuPkg/CpuDxe/Ia32/PagingAttribute.c +++ b/UefiCpuPkg/CpuDxe/Ia32/PagingAttribute.c @@ -8,7 +8,6 @@ #include "CpuPageTable.h" - /** Get paging details. @@ -19,16 +18,16 @@ **/ VOID GetPagingDetails ( - IN PAGE_TABLE_LIB_PAGING_CONTEXT_DATA *PagingContextData, - OUT UINTN **PageTableBase OPTIONAL, - OUT UINT32 **Attributes OPTIONAL + IN PAGE_TABLE_LIB_PAGING_CONTEXT_DATA *PagingContextData, + OUT UINTN **PageTableBase OPTIONAL, + OUT UINT32 **Attributes OPTIONAL ) { if (PageTableBase != NULL) { *PageTableBase = &PagingContextData->Ia32.PageTableBase; } + if (Attributes != NULL) { *Attributes = &PagingContextData->Ia32.Attributes; } } - diff --git a/UefiCpuPkg/CpuDxe/X64/PagingAttribute.c b/UefiCpuPkg/CpuDxe/X64/PagingAttribute.c index 7967935612..31ec0caff8 100644 --- a/UefiCpuPkg/CpuDxe/X64/PagingAttribute.c +++ b/UefiCpuPkg/CpuDxe/X64/PagingAttribute.c @@ -8,7 +8,6 @@ #include "CpuPageTable.h" - /** Get paging details. @@ -19,16 +18,16 @@ **/ VOID GetPagingDetails ( - IN PAGE_TABLE_LIB_PAGING_CONTEXT_DATA *PagingContextData, - OUT UINTN **PageTableBase OPTIONAL, - OUT UINT32 **Attributes OPTIONAL + IN PAGE_TABLE_LIB_PAGING_CONTEXT_DATA *PagingContextData, + OUT UINTN **PageTableBase OPTIONAL, + OUT UINT32 **Attributes OPTIONAL ) { if (PageTableBase != NULL) { *PageTableBase = &PagingContextData->X64.PageTableBase; } + if (Attributes != NULL) { *Attributes = &PagingContextData->X64.Attributes; } } - -- cgit v1.2.3