mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg: Sort mSmmCpuSmramRanges in FindSmramInfo
Sort mSmmCpuSmramRanges after get the SMRAM info in FindSmramInfo() function. Signed-off-by: Dun Tan <dun.tan@intel.com> Cc: Eric Dong <eric.dong@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com> Cc: Rahul Kumar <rahul1.kumar@intel.com> Cc: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
b4dde1ae6a
commit
7132df94ac
|
@ -1219,6 +1219,32 @@ PiCpuSmmEntry (
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Function to compare 2 EFI_SMRAM_DESCRIPTOR based on CpuStart.
|
||||||
|
|
||||||
|
@param[in] Buffer1 pointer to Device Path poiner to compare
|
||||||
|
@param[in] Buffer2 pointer to second DevicePath pointer to compare
|
||||||
|
|
||||||
|
@retval 0 Buffer1 equal to Buffer2
|
||||||
|
@retval <0 Buffer1 is less than Buffer2
|
||||||
|
@retval >0 Buffer1 is greater than Buffer2
|
||||||
|
**/
|
||||||
|
INTN
|
||||||
|
EFIAPI
|
||||||
|
CpuSmramRangeCompare (
|
||||||
|
IN CONST VOID *Buffer1,
|
||||||
|
IN CONST VOID *Buffer2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (((EFI_SMRAM_DESCRIPTOR *)Buffer1)->CpuStart > ((EFI_SMRAM_DESCRIPTOR *)Buffer2)->CpuStart) {
|
||||||
|
return 1;
|
||||||
|
} else if (((EFI_SMRAM_DESCRIPTOR *)Buffer1)->CpuStart < ((EFI_SMRAM_DESCRIPTOR *)Buffer2)->CpuStart) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
||||||
Find out SMRAM information including SMRR base and SMRR size.
|
Find out SMRAM information including SMRR base and SMRR size.
|
||||||
|
@ -1240,6 +1266,7 @@ FindSmramInfo (
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
UINT64 MaxSize;
|
UINT64 MaxSize;
|
||||||
BOOLEAN Found;
|
BOOLEAN Found;
|
||||||
|
EFI_SMRAM_DESCRIPTOR SmramDescriptor;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get SMM Access Protocol
|
// Get SMM Access Protocol
|
||||||
|
@ -1262,6 +1289,11 @@ FindSmramInfo (
|
||||||
|
|
||||||
mSmmCpuSmramRangeCount = Size / sizeof (EFI_SMRAM_DESCRIPTOR);
|
mSmmCpuSmramRangeCount = Size / sizeof (EFI_SMRAM_DESCRIPTOR);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Sort the mSmmCpuSmramRanges
|
||||||
|
//
|
||||||
|
QuickSort (mSmmCpuSmramRanges, mSmmCpuSmramRangeCount, sizeof (EFI_SMRAM_DESCRIPTOR), (BASE_SORT_COMPARE)CpuSmramRangeCompare, &SmramDescriptor);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Find the largest SMRAM range between 1MB and 4GB that is at least 256K - 4K in size
|
// Find the largest SMRAM range between 1MB and 4GB that is at least 256K - 4K in size
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in New Issue