TianoCore EDK2 master
|
#include <Register/Intel/ArchitecturalMsr.h>
Go to the source code of this file.
Data Structures | |
struct | FIXED_MTRR |
struct | VARIABLE_MTRR |
struct | _MTRR_VARIABLE_SETTING_ |
struct | _MTRR_VARIABLE_SETTINGS_ |
struct | _MTRR_FIXED_SETTINGS_ |
struct | _MTRR_SETTINGS_ |
struct | MTRR_MEMORY_RANGE |
Macros | |
#define | MTRR_NUMBER_OF_VARIABLE_MTRR 32 |
#define | RESERVED_FIRMWARE_VARIABLE_MTRR_NUMBER 2 |
#define | MTRR_NUMBER_OF_FIXED_MTRR 11 |
#define | MTRR_CACHE_UNCACHEABLE MSR_IA32_MTRR_CACHE_UNCACHEABLE |
#define | MTRR_CACHE_WRITE_COMBINING MSR_IA32_MTRR_CACHE_WRITE_COMBINING |
#define | MTRR_CACHE_WRITE_THROUGH MSR_IA32_MTRR_CACHE_WRITE_THROUGH |
#define | MTRR_CACHE_WRITE_PROTECTED MSR_IA32_MTRR_CACHE_WRITE_PROTECTED |
#define | MTRR_CACHE_WRITE_BACK MSR_IA32_MTRR_CACHE_WRITE_BACK |
#define | MTRR_CACHE_INVALID_TYPE MSR_IA32_MTRR_CACHE_INVALID_TYPE |
Typedefs | |
typedef struct _MTRR_VARIABLE_SETTING_ | MTRR_VARIABLE_SETTING |
typedef struct _MTRR_VARIABLE_SETTINGS_ | MTRR_VARIABLE_SETTINGS |
typedef struct _MTRR_FIXED_SETTINGS_ | MTRR_FIXED_SETTINGS |
typedef struct _MTRR_SETTINGS_ | MTRR_SETTINGS |
Functions | |
UINT32 EFIAPI | GetVariableMtrrCount (VOID) |
UINT32 EFIAPI | GetFirmwareVariableMtrrCount (VOID) |
RETURN_STATUS EFIAPI | MtrrSetMemoryAttribute (IN PHYSICAL_ADDRESS BaseAddress, IN UINT64 Length, IN MTRR_MEMORY_CACHE_TYPE Attribute) |
MTRR_MEMORY_CACHE_TYPE EFIAPI | MtrrGetMemoryAttribute (IN PHYSICAL_ADDRESS Address) |
MTRR_FIXED_SETTINGS *EFIAPI | MtrrGetFixedMtrr (OUT MTRR_FIXED_SETTINGS *FixedSettings) |
MTRR_SETTINGS *EFIAPI | MtrrGetAllMtrrs (OUT MTRR_SETTINGS *MtrrSetting) |
MTRR_SETTINGS *EFIAPI | MtrrSetAllMtrrs (IN MTRR_SETTINGS *MtrrSetting) |
UINT32 EFIAPI | MtrrGetMemoryAttributeInVariableMtrr (IN UINT64 MtrrValidBitsMask, IN UINT64 MtrrValidAddressMask, OUT VARIABLE_MTRR *VariableMtrr) |
VOID EFIAPI | MtrrDebugPrintAllMtrrs (VOID) |
BOOLEAN EFIAPI | IsMtrrSupported (VOID) |
MTRR_MEMORY_CACHE_TYPE EFIAPI | MtrrGetDefaultMemoryType (VOID) |
RETURN_STATUS EFIAPI | MtrrSetMemoryAttributeInMtrrSettings (IN OUT MTRR_SETTINGS *MtrrSetting, IN PHYSICAL_ADDRESS BaseAddress, IN UINT64 Length, IN MTRR_MEMORY_CACHE_TYPE Attribute) |
RETURN_STATUS EFIAPI | MtrrSetMemoryAttributesInMtrrSettings (IN OUT MTRR_SETTINGS *MtrrSetting, IN VOID *Scratch, IN OUT UINTN *ScratchSize, IN CONST MTRR_MEMORY_RANGE *Ranges, IN UINTN RangeCount) |
RETURN_STATUS EFIAPI | MtrrGetMemoryAttributesInMtrrSettings (IN CONST MTRR_SETTINGS *MtrrSetting OPTIONAL, OUT MTRR_MEMORY_RANGE *Ranges, IN OUT UINTN *RangeCount) |
MTRR setting library
Copyright (c) 2008 - 2023, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
Definition in file MtrrLib.h.
#define MTRR_CACHE_INVALID_TYPE MSR_IA32_MTRR_CACHE_INVALID_TYPE |
#define MTRR_CACHE_UNCACHEABLE MSR_IA32_MTRR_CACHE_UNCACHEABLE |
#define MTRR_CACHE_WRITE_BACK MSR_IA32_MTRR_CACHE_WRITE_BACK |
#define MTRR_CACHE_WRITE_COMBINING MSR_IA32_MTRR_CACHE_WRITE_COMBINING |
#define MTRR_CACHE_WRITE_PROTECTED MSR_IA32_MTRR_CACHE_WRITE_PROTECTED |
#define MTRR_CACHE_WRITE_THROUGH MSR_IA32_MTRR_CACHE_WRITE_THROUGH |
UINT32 EFIAPI GetFirmwareVariableMtrrCount | ( | VOID | ) |
UINT32 EFIAPI GetVariableMtrrCount | ( | VOID | ) |
BOOLEAN EFIAPI IsMtrrSupported | ( | VOID | ) |
VOID EFIAPI MtrrDebugPrintAllMtrrs | ( | VOID | ) |
MTRR_SETTINGS *EFIAPI MtrrGetAllMtrrs | ( | OUT MTRR_SETTINGS * | MtrrSetting | ) |
This function gets the content in all MTRRs (variable and fixed)
[out] | MtrrSetting | A buffer to hold all MTRRs content. |
This function gets the content in all MTRRs (variable and fixed)
[out] | MtrrSetting | A buffer to hold all MTRRs content. |
the | pointer of MtrrSetting |
MTRR_MEMORY_CACHE_TYPE EFIAPI MtrrGetDefaultMemoryType | ( | VOID | ) |
MTRR_FIXED_SETTINGS *EFIAPI MtrrGetFixedMtrr | ( | OUT MTRR_FIXED_SETTINGS * | FixedSettings | ) |
This function gets the content in fixed MTRRs
[out] | FixedSettings | A buffer to hold fixed MTRRs content. |
This function gets the content in fixed MTRRs
[out] | FixedSettings | A buffer to hold fixed MTRRs content. |
The | pointer of FixedSettings |
MTRR_MEMORY_CACHE_TYPE EFIAPI MtrrGetMemoryAttribute | ( | IN PHYSICAL_ADDRESS | Address | ) |
This function will get the memory cache type of the specific address. This function is mainly for debugging purposes.
[in] | Address | The specific address |
This function will get the memory cache type of the specific address.
This function is mainly for debug purpose.
[in] | Address | The specific address |
UINT32 EFIAPI MtrrGetMemoryAttributeInVariableMtrr | ( | IN UINT64 | MtrrValidBitsMask, |
IN UINT64 | MtrrValidAddressMask, | ||
OUT VARIABLE_MTRR * | VariableMtrr | ||
) |
Get the attribute of variable MTRRs.
This function shadows the content of variable MTRRs into an internal array: VariableMtrr
[in] | MtrrValidBitsMask | The mask for the valid bit of the MTRR |
[in] | MtrrValidAddressMask | The valid address mask for MTRR since the base address in MTRR must align to 4K, so valid address mask equal to MtrrValidBitsMask & 0xfffffffffffff000ULL |
[out] | VariableMtrr | The array to shadow variable MTRRs content |
Gets the attribute of variable MTRRs.
This function shadows the content of variable MTRRs into an internal array: VariableMtrr.
[in] | MtrrValidBitsMask | The mask for the valid bit of the MTRR |
[in] | MtrrValidAddressMask | The valid address mask for MTRR |
[out] | VariableMtrr | The array to shadow variable MTRRs content |
RETURN_STATUS EFIAPI MtrrGetMemoryAttributesInMtrrSettings | ( | IN CONST MTRR_SETTINGS *MtrrSetting | OPTIONAL, |
OUT MTRR_MEMORY_RANGE * | Ranges, | ||
IN OUT UINTN * | RangeCount | ||
) |
This function returns a Ranges array containing the memory cache types of all memory addresses.
[in] | MtrrSetting | MTRR setting buffer to parse. |
[out] | Ranges | Pointer to an array of MTRR_MEMORY_RANGE. |
[in,out] | RangeCount | Count of MTRR_MEMORY_RANGE. On input, the maximum entries the Ranges can hold. On output, the actual entries that the function returns. |
RETURN_INVALID_PARAMETER | RangeCount is NULL. |
RETURN_INVALID_PARAMETER | *RangeCount is not 0 but Ranges is NULL. |
RETURN_BUFFER_TOO_SMALL | *RangeCount is too small. |
RETURN_SUCCESS | Ranges are successfully returned. |
MTRR_SETTINGS *EFIAPI MtrrSetAllMtrrs | ( | IN MTRR_SETTINGS * | MtrrSetting | ) |
This function sets all MTRRs (variable and fixed)
Note: The behavior of this function is to program everything in MtrrSetting to hardware. MTRR might not be enabled due to enable bit is clear in MtrrSetting->MtrrDefType.
[in] | MtrrSetting | A buffer holding all MTRRs content. |
The | pointer of MtrrSetting |
This function sets all MTRRs includes Variable and Fixed.
The behavior of this function is to program everything in MtrrSetting to hardware. MTRRs might not be enabled because the enable bit is clear in MtrrSetting->MtrrDefType.
[in] | MtrrSetting | A buffer holding all MTRRs content. |
The | pointer of MtrrSetting |
RETURN_STATUS EFIAPI MtrrSetMemoryAttribute | ( | IN PHYSICAL_ADDRESS | BaseAddress, |
IN UINT64 | Length, | ||
IN MTRR_MEMORY_CACHE_TYPE | Attribute | ||
) |
This function attempts to set the attributes for a memory range.
[in] | BaseAddress | The physical address that is the start address of a memory region. |
[in] | Length | The size in bytes of the memory region. |
[in] | Attribute | The bit mask of attributes to set for the memory region. |
RETURN_SUCCESS | The attributes were set for the memory region. |
RETURN_INVALID_PARAMETER | Length is zero. |
RETURN_UNSUPPORTED | The processor does not support one or more bytes of the memory resource range specified by BaseAddress and Length. |
RETURN_UNSUPPORTED | The bit mask of attributes is not support for the memory resource range specified by BaseAddress and Length. |
RETURN_ACCESS_DENIED | The attributes for the memory resource range specified by BaseAddress and Length cannot be modified. |
RETURN_OUT_OF_RESOURCES | There are not enough system resources to modify the attributes of the memory resource range. Multiple memory range attributes setting by calling this API multiple times may fail with status RETURN_OUT_OF_RESOURCES. It may not mean the number of CPU MTRRs are too small to set such memory attributes. Pass the multiple memory range attributes to one call of MtrrSetMemoryAttributesInMtrrSettings() may succeed. |
RETURN_BUFFER_TOO_SMALL | The fixed internal scratch buffer is too small for MTRR calculation. Caller should use MtrrSetMemoryAttributesInMtrrSettings() to specify external scratch buffer. |
This function attempts to set the attributes for a memory range.
[in] | BaseAddress | The physical address that is the start address of a memory range. |
[in] | Length | The size in bytes of the memory range. |
[in] | Attributes | The bit mask of attributes to set for the memory range. |
RETURN_SUCCESS | The attributes were set for the memory range. |
RETURN_INVALID_PARAMETER | Length is zero. |
RETURN_UNSUPPORTED | The processor does not support one or more bytes of the memory resource range specified by BaseAddress and Length. |
RETURN_UNSUPPORTED | The bit mask of attributes is not support for the memory resource range specified by BaseAddress and Length. |
RETURN_ACCESS_DENIED | The attributes for the memory resource range specified by BaseAddress and Length cannot be modified. |
RETURN_OUT_OF_RESOURCES | There are not enough system resources to modify the attributes of the memory resource range. Multiple memory range attributes setting by calling this API multiple times may fail with status RETURN_OUT_OF_RESOURCES. It may not mean the number of CPU MTRRs are too small to set such memory attributes. Pass the multiple memory range attributes to one call of MtrrSetMemoryAttributesInMtrrSettings() may succeed. |
RETURN_BUFFER_TOO_SMALL | The fixed internal scratch buffer is too small for MTRR calculation. Caller should use MtrrSetMemoryAttributesInMtrrSettings() to specify external scratch buffer. |
RETURN_STATUS EFIAPI MtrrSetMemoryAttributeInMtrrSettings | ( | IN OUT MTRR_SETTINGS * | MtrrSetting, |
IN PHYSICAL_ADDRESS | BaseAddress, | ||
IN UINT64 | Length, | ||
IN MTRR_MEMORY_CACHE_TYPE | Attribute | ||
) |
This function attempts to set the attributes into MTRR setting buffer for a memory range.
[in,out] | MtrrSetting | MTRR setting buffer to be set. |
[in] | BaseAddress | The physical address that is the start address of a memory region. |
[in] | Length | The size in bytes of the memory region. |
[in] | Attribute | The bit mask of attributes to set for the memory region. |
RETURN_SUCCESS | The attributes were set for the memory region. |
RETURN_INVALID_PARAMETER | Length is zero. |
RETURN_UNSUPPORTED | The processor does not support one or more bytes of the memory resource range specified by BaseAddress and Length. |
RETURN_UNSUPPORTED | The bit mask of attributes is not support for the memory resource range specified by BaseAddress and Length. |
RETURN_ACCESS_DENIED | The attributes for the memory resource range specified by BaseAddress and Length cannot be modified. |
RETURN_OUT_OF_RESOURCES | There are not enough system resources to modify the attributes of the memory resource range. Multiple memory range attributes setting by calling this API multiple times may fail with status RETURN_OUT_OF_RESOURCES. It may not mean the number of CPU MTRRs are too small to set such memory attributes. Pass the multiple memory range attributes to one call of MtrrSetMemoryAttributesInMtrrSettings() may succeed. |
RETURN_BUFFER_TOO_SMALL | The fixed internal scratch buffer is too small for MTRR calculation. Caller should use MtrrSetMemoryAttributesInMtrrSettings() to specify external scratch buffer. |
This function attempts to set the attributes into MTRR setting buffer for a memory range.
[in,out] | MtrrSetting | MTRR setting buffer to be set. |
[in] | BaseAddress | The physical address that is the start address of a memory range. |
[in] | Length | The size in bytes of the memory range. |
[in] | Attribute | The bit mask of attributes to set for the memory range. |
RETURN_SUCCESS | The attributes were set for the memory range. |
RETURN_INVALID_PARAMETER | Length is zero. |
RETURN_UNSUPPORTED | The processor does not support one or more bytes of the memory resource range specified by BaseAddress and Length. |
RETURN_UNSUPPORTED | The bit mask of attributes is not support for the memory resource range specified by BaseAddress and Length. |
RETURN_ACCESS_DENIED | The attributes for the memory resource range specified by BaseAddress and Length cannot be modified. |
RETURN_OUT_OF_RESOURCES | There are not enough system resources to modify the attributes of the memory resource range. Multiple memory range attributes setting by calling this API multiple times may fail with status RETURN_OUT_OF_RESOURCES. It may not mean the number of CPU MTRRs are too small to set such memory attributes. Pass the multiple memory range attributes to one call of MtrrSetMemoryAttributesInMtrrSettings() may succeed. |
RETURN_BUFFER_TOO_SMALL | The fixed internal scratch buffer is too small for MTRR calculation. Caller should use MtrrSetMemoryAttributesInMtrrSettings() to specify external scratch buffer. |
RETURN_STATUS EFIAPI MtrrSetMemoryAttributesInMtrrSettings | ( | IN OUT MTRR_SETTINGS * | MtrrSetting, |
IN VOID * | Scratch, | ||
IN OUT UINTN * | ScratchSize, | ||
IN CONST MTRR_MEMORY_RANGE * | Ranges, | ||
IN UINTN | RangeCount | ||
) |
This function attempts to set the attributes into MTRR setting buffer for multiple memory ranges.
[in,out] | MtrrSetting | MTRR setting buffer to be set. |
[in] | Scratch | A temporary scratch buffer that is used to perform the calculation. |
[in,out] | ScratchSize | Pointer to the size in bytes of the scratch buffer. It may be updated to the actual required size when the calculation needs more scratch buffer. |
[in] | Ranges | Pointer to an array of MTRR_MEMORY_RANGE. When range overlap happens, the last one takes higher priority. When the function returns, either all the attributes are set successfully, or none of them is set. |
[in] | RangeCount | Count of MTRR_MEMORY_RANGE. |
RETURN_SUCCESS | The attributes were set for all the memory ranges. |
RETURN_INVALID_PARAMETER | Length in any range is zero. |
RETURN_UNSUPPORTED | The processor does not support one or more bytes of the memory resource range specified by BaseAddress and Length in any range. |
RETURN_UNSUPPORTED | The bit mask of attributes is not support for the memory resource range specified by BaseAddress and Length in any range. |
RETURN_OUT_OF_RESOURCES | There are not enough system resources to modify the attributes of the memory resource ranges. |
RETURN_ACCESS_DENIED | The attributes for the memory resource range specified by BaseAddress and Length cannot be modified. |
RETURN_BUFFER_TOO_SMALL | The scratch buffer is too small for MTRR calculation. |