/** @file | |
Header file for CPU Cache info Library. | |
Copyright (c) 2020 - 2021, Intel Corporation. All rights reserved.<BR> | |
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 |