mirror of https://github.com/acidanthera/audk.git
86 lines
2.9 KiB
C
86 lines
2.9 KiB
C
/** @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
|