From 3ba736f39cdb1d587089885dcde4b501eea9962e Mon Sep 17 00:00:00 2001 From: jyao1 Date: Fri, 5 Feb 2010 22:27:07 +0000 Subject: [PATCH] Revert incompatible change: 1) No API change from old version. 2) Change MACRO: #define MTRR_NUMBER_OF_VARIABLE_MTRR 32 // the semantics are changed from NUMBER to MAX_NUMBER. #define FIRMWARE_VARIABLE_MTRR_NUMBER 6 // wrong and deprecated #define MTRR_LIB_IA32_VARIABLE_MTRR_END 0x20F // wrong and deprecated #define RESERVED_FIRMWARE_VARIABLE_MTRR_NUMBER 2 // add new one. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9941 6f19259b-4bc3-4df7-8a09-765794883524 --- UefiCpuPkg/Include/Library/MtrrLib.h | 36 +++++++++++---------- UefiCpuPkg/Library/MtrrLib/MtrrLib.c | 47 +++++++++------------------- 2 files changed, 33 insertions(+), 50 deletions(-) diff --git a/UefiCpuPkg/Include/Library/MtrrLib.h b/UefiCpuPkg/Include/Library/MtrrLib.h index 14453719bf..e2f2491eee 100644 --- a/UefiCpuPkg/Include/Library/MtrrLib.h +++ b/UefiCpuPkg/Include/Library/MtrrLib.h @@ -21,15 +21,19 @@ // // -// We can not use Pcd as macro to define structure, so we have to define MAX_MTRR_NUMBER_OF_VARIABLE_MTRR +// The semantics of below macro is MAX_MTRR_NUMBER_OF_VARIABLE_MTRR, the real number can be read out from MTRR_CAP register. // -#define MAX_MTRR_NUMBER_OF_VARIABLE_MTRR 32 +#define MTRR_NUMBER_OF_VARIABLE_MTRR 32 // // Firmware need reserve 2 MTRR for OS // #define RESERVED_FIRMWARE_VARIABLE_MTRR_NUMBER 2 #define MTRR_NUMBER_OF_FIXED_MTRR 11 +// +// Below macro is deprecated, and should not be used. +// +#define FIRMWARE_VARIABLE_MTRR_NUMBER 6 #define MTRR_LIB_IA32_MTRR_CAP 0x0FE #define MTRR_LIB_IA32_MTRR_CAP_VCNT_MASK 0x0FF #define MTRR_LIB_IA32_MTRR_FIX64K_00000 0x250 @@ -44,6 +48,10 @@ #define MTRR_LIB_IA32_MTRR_FIX4K_F0000 0x26E #define MTRR_LIB_IA32_MTRR_FIX4K_F8000 0x26F #define MTRR_LIB_IA32_VARIABLE_MTRR_BASE 0x200 +// +// Below macro is deprecated, and should not be used. +// +#define MTRR_LIB_IA32_VARIABLE_MTRR_END 0x20F #define MTRR_LIB_IA32_MTRR_DEF_TYPE 0x2FF #define MTRR_LIB_MSR_VALID_MASK 0xFFFFFFFFFULL #define MTRR_LIB_CACHE_VALID_ADDRESS 0xFFFFFF000ULL @@ -83,7 +91,7 @@ typedef struct _MTRR_VARIABLE_SETTING_ { // Array for variable MTRRs // typedef struct _MTRR_VARIABLE_SETTINGS_ { - MTRR_VARIABLE_SETTING Mtrr[MAX_MTRR_NUMBER_OF_VARIABLE_MTRR]; + MTRR_VARIABLE_SETTING Mtrr[MTRR_NUMBER_OF_VARIABLE_MTRR]; } MTRR_VARIABLE_SETTINGS; // @@ -282,25 +290,19 @@ MtrrSetAllMtrrs ( This function shadows the content of variable MTRRs into an internal array: VariableMtrr - @param MtrrValidBitsMask The mask for the valid bit of the MTRR - @param MtrrValidAddressMask The valid address mask for MTRR since the base address in - MTRR must align to 4K, so valid address mask equal to - MtrrValidBitsMask & 0xfffffffffffff000ULL - @param VariableMtrrCount On input, it means the array number of variable MTRRs passed in. - On output, it means the number of MTRRs which has been used if EFI_SUCCESS, - or the number of MTRR required if BUFFER_TOO_SMALL. - @param VariableMtrr The array to shadow variable MTRRs content - - @retval RETURN_SUCCESS The variable MTRRs are returned. - @retval RETURN_BUFFER_TOO_SMALL The input buffer is too small to hold the variable MTRRs. - + @param MtrrValidBitsMask The mask for the valid bit of the MTRR + @param MtrrValidAddressMask The valid address mask for MTRR since the base address in + MTRR must align to 4K, so valid address mask equal to + MtrrValidBitsMask & 0xfffffffffffff000ULL + @param VariableMtrr The array to shadow variable MTRRs content + @return The ruturn value of this paramter indicates the number of + MTRRs which has been used. **/ -RETURN_STATUS +UINT32 EFIAPI MtrrGetMemoryAttributeInVariableMtrr ( IN UINT64 MtrrValidBitsMask, IN UINT64 MtrrValidAddressMask, - IN OUT UINT32 *VariableMtrrCount, OUT VARIABLE_MTRR *VariableMtrr ); diff --git a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c index a95a72bfa3..1a8ffc2cdc 100644 --- a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c +++ b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c @@ -300,49 +300,35 @@ ProgramFixedMtrr ( /** Get the attribute of variable MTRRs. - This function shadows the content of variable MTRRs into - an internal array: VariableMtrr + This function shadows the content of variable MTRRs into an + internal array: VariableMtrr. - @param MtrrValidBitsMask The mask for the valid bit of the MTRR - @param MtrrValidAddressMask The valid address mask for MTRR since the base address in - MTRR must align to 4K, so valid address mask equal to - MtrrValidBitsMask & 0xfffffffffffff000ULL - @param VariableMtrrCount On input, it means the array number of variable MTRRs passed in. - On output, it means the number of MTRRs which has been used if EFI_SUCCESS, - or the number of MTRR required if BUFFER_TOO_SMALL. - @param VariableMtrr The array to shadow variable MTRRs content + @param MtrrValidBitsMask The mask for the valid bit of the MTRR + @param MtrrValidAddressMask The valid address mask for MTRR + @param VariableMtrr The array to shadow variable MTRRs content - @retval RETURN_SUCCESS The variable MTRRs are returned. - @retval RETURN_BUFFER_TOO_SMALL The input buffer is too small to hold the variable MTRRs. + @return The return value of this paramter indicates the + number of MTRRs which has been used. **/ -RETURN_STATUS +UINT32 EFIAPI MtrrGetMemoryAttributeInVariableMtrr ( IN UINT64 MtrrValidBitsMask, IN UINT64 MtrrValidAddressMask, - IN OUT UINT32 *VariableMtrrCount, OUT VARIABLE_MTRR *VariableMtrr ) { UINTN Index; UINT32 MsrNum; UINT32 UsedMtrr; - UINTN FirmwareVariableMtrrCount; + UINT32 FirmwareVariableMtrrCount; UINT32 VariableMtrrEnd; - // - // Check if input buffer is large enough - // FirmwareVariableMtrrCount = GetFirmwareVariableMtrrCount (); - if (*VariableMtrrCount < FirmwareVariableMtrrCount) { - *VariableMtrrCount = (UINT32)FirmwareVariableMtrrCount; - return RETURN_BUFFER_TOO_SMALL; - } - VariableMtrrEnd = MTRR_LIB_IA32_VARIABLE_MTRR_BASE + (2 * GetVariableMtrrCount ()) - 1; - ZeroMem (VariableMtrr, sizeof (VARIABLE_MTRR) * (*VariableMtrrCount)); + ZeroMem (VariableMtrr, sizeof (VARIABLE_MTRR) * MTRR_NUMBER_OF_VARIABLE_MTRR); UsedMtrr = 0; for (MsrNum = MTRR_LIB_IA32_VARIABLE_MTRR_BASE, Index = 0; @@ -368,8 +354,7 @@ MtrrGetMemoryAttributeInVariableMtrr ( Index++; } } - *VariableMtrrCount = UsedMtrr; - return RETURN_SUCCESS; + return UsedMtrr; } @@ -882,7 +867,7 @@ MtrrSetMemoryAttribute ( BOOLEAN Positive; UINT32 MsrNum; UINTN MtrrNumber; - VARIABLE_MTRR VariableMtrr[MAX_MTRR_NUMBER_OF_VARIABLE_MTRR]; + VARIABLE_MTRR VariableMtrr[MTRR_NUMBER_OF_VARIABLE_MTRR]; UINT32 UsedMtrr; UINT64 MtrrValidBitsMask; UINT64 MtrrValidAddressMask; @@ -960,8 +945,7 @@ MtrrSetMemoryAttribute ( // // Check for overlap // - UsedMtrr = MAX_MTRR_NUMBER_OF_VARIABLE_MTRR; - MtrrGetMemoryAttributeInVariableMtrr (MtrrValidBitsMask, MtrrValidAddressMask, &UsedMtrr, VariableMtrr); + UsedMtrr = MtrrGetMemoryAttributeInVariableMtrr (MtrrValidBitsMask, MtrrValidAddressMask, VariableMtrr); OverLap = CheckMemoryAttributeOverlap (BaseAddress, BaseAddress + Length - 1, VariableMtrr); if (OverLap) { Status = CombineMemoryAttribute (MemoryType, &BaseAddress, &Length, VariableMtrr, &UsedMtrr, &OverwriteExistingMtrr); @@ -1127,11 +1111,10 @@ MtrrGetMemoryAttribute ( UINT64 MtrrType; UINT64 TempMtrrType; MTRR_MEMORY_CACHE_TYPE CacheType; - VARIABLE_MTRR VariableMtrr[MAX_MTRR_NUMBER_OF_VARIABLE_MTRR]; + VARIABLE_MTRR VariableMtrr[MTRR_NUMBER_OF_VARIABLE_MTRR]; UINT64 MtrrValidBitsMask; UINT64 MtrrValidAddressMask; UINTN VariableMtrrCount; - UINT32 UsedMtrr; // // Check if MTRR is enabled, if not, return UC as attribute @@ -1169,11 +1152,9 @@ MtrrGetMemoryAttribute ( } } MtrrLibInitializeMtrrMask(&MtrrValidBitsMask, &MtrrValidAddressMask); - UsedMtrr = MAX_MTRR_NUMBER_OF_VARIABLE_MTRR; MtrrGetMemoryAttributeInVariableMtrr( MtrrValidBitsMask, MtrrValidAddressMask, - &UsedMtrr, VariableMtrr ); -- 2.39.2