/** @file Header file for CPU Cache info Library. Copyright (c) 2020 - 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _CPU_CACHE_INFO_LIB_H_ #define _CPU_CACHE_INFO_LIB_H_ typedef struct { // // Package number. // UINT32 Package; // // Core type of logical processor. // Value = CPUID.1Ah:EAX[31:24] // UINT8 CoreType; // // Level of the cache that this package's this type of logical processor corresponds to. // Value = CPUID.04h:EAX[07:05] // UINT8 CacheLevel : 3; // // Type of the cache that this package's this type of logical processor corresponds to. // Value = CPUID.04h:EAX[04:00] // UINT8 CacheType : 5; // // Ways of associativity. // Value = CPUID.04h:EBX[31:22] // UINT16 CacheWays : 10; // // Fully associative cache. // Value = CPUID.04h:EAX[09] // UINT16 FullyAssociativeCache : 1; // // Direct mapped cache. // Value = CPUID.04h:EDX[02] // UINT16 DirectMappedCache : 1; UINT16 Reserved : 4; // // Size of single cache that this package's this type of logical processor corresponds to. // Value = (CPUID.04h:EBX[31:22] + 1) * (CPUID.04h:EBX[21:12] + 1) * // (CPUID.04h:EBX[11:00] + 1) * (CPUID.04h:ECX[31:00] + 1) // UINT32 CacheSizeinKB; // // Number of the cache that this package's this type of logical processor corresponds to. // Have subtracted the number of caches that are shared. // UINT16 CacheCount; } CPU_CACHE_INFO; /** Get CpuCacheInfo data array. The array is sorted by CPU package ID, core type, cache level and cache type. @param[in, out] CpuCacheInfo Pointer to the CpuCacheInfo array. @param[in, out] CpuCacheInfoCount As input, point to the length of response CpuCacheInfo array. As output, point to the actual length of response CpuCacheInfo array. @retval EFI_SUCCESS Function completed successfully. @retval EFI_INVALID_PARAMETER CpuCacheInfoCount is NULL. @retval EFI_INVALID_PARAMETER CpuCacheInfo is NULL while CpuCacheInfoCount contains the value greater than zero. @retval EFI_UNSUPPORTED Processor does not support CPUID_CACHE_PARAMS Leaf. @retval EFI_OUT_OF_RESOURCES Required resources could not be allocated. @retval EFI_BUFFER_TOO_SMALL CpuCacheInfoCount is too small to hold the response CpuCacheInfo array. CpuCacheInfoCount has been updated with the length needed to complete the request. **/ EFI_STATUS EFIAPI GetCpuCacheInfo ( IN OUT CPU_CACHE_INFO *CpuCacheInfo, IN OUT UINTN *CpuCacheInfoCount ); #endif