summaryrefslogtreecommitdiff
path: root/UefiCpuPkg/Library
diff options
context:
space:
mode:
authorjyao1 <jyao1@6f19259b-4bc3-4df7-8a09-765794883524>2010-02-05 22:27:07 +0000
committerjyao1 <jyao1@6f19259b-4bc3-4df7-8a09-765794883524>2010-02-05 22:27:07 +0000
commit3ba736f39cdb1d587089885dcde4b501eea9962e (patch)
treef2b6d17cd217ab0e4c05d6acb208ce07a92f5c6d /UefiCpuPkg/Library
parent3aa4215f72528d6f2ac3fc5830c68d5105491d71 (diff)
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
Diffstat (limited to 'UefiCpuPkg/Library')
-rw-r--r--UefiCpuPkg/Library/MtrrLib/MtrrLib.c47
1 files changed, 14 insertions, 33 deletions
diff --git a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c
index a95a72bfa..1a8ffc2cd 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
);