DEBUG ((DEBUG_INFO, "+-------+--------------------------------------------------------------------------------------+\n"));\r
}\r
\r
+/**\r
+ Function to compare CPU package ID, core type, cache level and cache type for use in QuickSort.\r
+\r
+ @param[in] Buffer1 pointer to CPU_CACHE_INFO poiner to compare\r
+ @param[in] Buffer2 pointer to second CPU_CACHE_INFO pointer to compare\r
+\r
+ @retval 0 Buffer1 equal to Buffer2\r
+ @retval 1 Buffer1 is greater than Buffer2\r
+ @retval -1 Buffer1 is less than Buffer2\r
+**/\r
+INTN\r
+EFIAPI\r
+CpuCacheInfoCompare (\r
+ IN CONST VOID *Buffer1,\r
+ IN CONST VOID *Buffer2\r
+ )\r
+{\r
+ CPU_CACHE_INFO_COMPARATOR Comparator1, Comparator2;\r
+\r
+ ZeroMem (&Comparator1, sizeof (Comparator1));\r
+ ZeroMem (&Comparator2, sizeof (Comparator2));\r
+\r
+ Comparator1.Bits.Package = ((CPU_CACHE_INFO*)Buffer1)->Package;\r
+ Comparator1.Bits.CoreType = ((CPU_CACHE_INFO*)Buffer1)->CoreType;\r
+ Comparator1.Bits.CacheLevel = ((CPU_CACHE_INFO*)Buffer1)->CacheLevel;\r
+ Comparator1.Bits.CacheType = ((CPU_CACHE_INFO*)Buffer1)->CacheType;\r
+\r
+ Comparator2.Bits.Package = ((CPU_CACHE_INFO*)Buffer2)->Package;\r
+ Comparator2.Bits.CoreType = ((CPU_CACHE_INFO*)Buffer2)->CoreType;\r
+ Comparator2.Bits.CacheLevel = ((CPU_CACHE_INFO*)Buffer2)->CacheLevel;\r
+ Comparator2.Bits.CacheType = ((CPU_CACHE_INFO*)Buffer2)->CacheType;\r
+\r
+ if (Comparator1.Uint64 == Comparator2.Uint64) {\r
+ return 0;\r
+ } else if (Comparator1.Uint64 > Comparator2.Uint64) {\r
+ return 1;\r
+ } else {\r
+ return -1;\r
+ }\r
+}\r
+\r
/**\r
Get the total number of package and package ID in the platform.\r
\r
if (*CacheInfoCount < LocalCacheInfoCount) {\r
Status = EFI_BUFFER_TOO_SMALL;\r
} else {\r
+ //\r
+ // Sort LocalCacheInfo array by CPU package ID, core type, cache level and cache type.\r
+ //\r
+ PerformQuickSort (LocalCacheInfo, LocalCacheInfoCount, sizeof (*LocalCacheInfo), (SORT_COMPARE) CpuCacheInfoCompare);\r
CopyMem (CacheInfo, LocalCacheInfo, sizeof (*CacheInfo) * LocalCacheInfoCount);\r
DEBUG_CODE (\r
CpuCacheInfoPrintCpuCacheInfoTable (CacheInfo, LocalCacheInfoCount);\r
}\r
\r
/**\r
- Get CpuCacheInfo data array.\r
+ Get CpuCacheInfo data array. The array is sorted by CPU package ID, core type, cache level and cache type.\r
\r
@param[in, out] CpuCacheInfo Pointer to the CpuCacheInfo array.\r
@param[in, out] CpuCacheInfoCount As input, point to the length of response CpuCacheInfo array.\r