4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MTRR setting library
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2008 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _MTRR_LIB_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _MTRR_LIB_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// According to IA32 SDM, MTRRs number and msr offset are always consistent
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// for IA32 processor family
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// The semantics of below macro is MAX_MTRR_NUMBER_OF_VARIABLE_MTRR, the real number can be read out from MTRR_CAP register.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_NUMBER_OF_VARIABLE_MTRR 32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Firmware need reserve 2 MTRR for OS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define RESERVED_FIRMWARE_VARIABLE_MTRR_NUMBER 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_NUMBER_OF_FIXED_MTRR 11
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Below macro is deprecated, and should not be used.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define FIRMWARE_VARIABLE_MTRR_NUMBER 6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_IA32_MTRR_CAP 0x0FE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_IA32_MTRR_CAP_VCNT_MASK 0x0FF
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_IA32_MTRR_FIX64K_00000 0x250
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_IA32_MTRR_FIX16K_80000 0x258
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_IA32_MTRR_FIX16K_A0000 0x259
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_IA32_MTRR_FIX4K_C0000 0x268
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_IA32_MTRR_FIX4K_C8000 0x269
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_IA32_MTRR_FIX4K_D0000 0x26A
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_IA32_MTRR_FIX4K_D8000 0x26B
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_IA32_MTRR_FIX4K_E0000 0x26C
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_IA32_MTRR_FIX4K_E8000 0x26D
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_IA32_MTRR_FIX4K_F0000 0x26E
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_IA32_MTRR_FIX4K_F8000 0x26F
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_IA32_VARIABLE_MTRR_BASE 0x200
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Below macro is deprecated, and should not be used.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_IA32_VARIABLE_MTRR_END 0x20F
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_IA32_MTRR_DEF_TYPE 0x2FF
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_MSR_VALID_MASK 0xFFFFFFFFFULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_CACHE_VALID_ADDRESS 0xFFFFFF000ULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_CACHE_MTRR_ENABLED 0x800
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_LIB_CACHE_FIXED_MTRR_ENABLED 0x400
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Structure to describe a fixed MTRR
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Msr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 BaseAddress;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} FIXED_MTRR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Structure to describe a variable MTRR
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 BaseAddress;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Msr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN Valid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN Used;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} VARIABLE_MTRR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Structure to hold base and mask pair for variable MTRR register
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _MTRR_VARIABLE_SETTING_ {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Base;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Mask;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} MTRR_VARIABLE_SETTING;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Array for variable MTRRs
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _MTRR_VARIABLE_SETTINGS_ {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MTRR_VARIABLE_SETTING Mtrr[MTRR_NUMBER_OF_VARIABLE_MTRR];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} MTRR_VARIABLE_SETTINGS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Array for fixed mtrrs
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _MTRR_FIXED_SETTINGS_ {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Mtrr[MTRR_NUMBER_OF_FIXED_MTRR];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} MTRR_FIXED_SETTINGS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Structure to hold all MTRRs
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _MTRR_SETTINGS_ {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MTRR_FIXED_SETTINGS Fixed;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MTRR_VARIABLE_SETTINGS Variables;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 MtrrDefType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} MTRR_SETTINGS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Memory cache types
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CacheUncacheable = 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CacheWriteCombining = 1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CacheWriteThrough = 4,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CacheWriteProtected = 5,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CacheWriteBack = 6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} MTRR_MEMORY_CACHE_TYPE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_CACHE_UNCACHEABLE 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_CACHE_WRITE_COMBINING 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_CACHE_WRITE_THROUGH 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_CACHE_WRITE_PROTECTED 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_CACHE_WRITE_BACK 6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MTRR_CACHE_INVALID_TYPE 7
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Returns the variable MTRR count for the CPU.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Variable MTRR count
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGetVariableMtrrCount (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Returns the firmware usable variable MTRR count for the CPU.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Firmware usable variable MTRR count
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGetFirmwareVariableMtrrCount (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function attempts to set the attributes for a memory range.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param BaseAddress The physical address that is the start address of a memory region.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Length The size in bytes of the memory region.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Attributes The bit mask of attributes to set for the memory region.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval RETURN_SUCCESS The attributes were set for the memory region.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval RETURN_INVALID_PARAMETER Length is zero.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval RETURN_UNSUPPORTED The processor does not support one or more bytes of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync memory resource range specified by BaseAddress and Length.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval RETURN_UNSUPPORTED The bit mask of attributes is not support for the memory resource
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync range specified by BaseAddress and Length.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval RETURN_ACCESS_DENIED The attributes for the memory resource range specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BaseAddress and Length cannot be modified.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval RETURN_OUT_OF_RESOURCES There are not enough system resources to modify the attributes of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the memory resource range.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncRETURN_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMtrrSetMemoryAttribute (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN PHYSICAL_ADDRESS BaseAddress,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Length,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN MTRR_MEMORY_CACHE_TYPE Attribute
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function will get the memory cache type of the specific address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function is mainly for debugging purposes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Address The specific address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The memory cache type of the specific address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMTRR_MEMORY_CACHE_TYPE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMtrrGetMemoryAttribute (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN PHYSICAL_ADDRESS Address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function will get the raw value in variable MTRRs
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param VariableSettings A buffer to hold variable MTRRs content.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The buffer point to MTRR_VARIABLE_SETTINGS in which holds the content of the variable mtrr
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMTRR_VARIABLE_SETTINGS*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMtrrGetVariableMtrr (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT MTRR_VARIABLE_SETTINGS *VariableSettings
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function sets fixed MTRRs
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param VariableSettings A buffer to hold variable MTRRs content.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The pointer of VariableSettings
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMTRR_VARIABLE_SETTINGS*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMtrrSetVariableMtrr (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN MTRR_VARIABLE_SETTINGS *VariableSettings
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function gets the content in fixed MTRRs
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param FixedSettings A buffer to hold fixed MTRRs content.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The pointer of FixedSettings
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMTRR_FIXED_SETTINGS*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMtrrGetFixedMtrr (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT MTRR_FIXED_SETTINGS *FixedSettings
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function sets fixed MTRRs
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param FixedSettings A buffer holding fixed MTRRs content.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The pointer of FixedSettings
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMTRR_FIXED_SETTINGS*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMtrrSetFixedMtrr (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN MTRR_FIXED_SETTINGS *FixedSettings
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function gets the content in all MTRRs (variable and fixed)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param MtrrSetting A buffer to hold all MTRRs content.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The pointer of MtrrSetting
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMTRR_SETTINGS *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMtrrGetAllMtrrs (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT MTRR_SETTINGS *MtrrSetting
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function sets all MTRRs (variable and fixed)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param MtrrSetting A buffer to hold all MTRRs content.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The pointer of MtrrSetting
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMTRR_SETTINGS *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMtrrSetAllMtrrs (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN MTRR_SETTINGS *MtrrSetting
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the attribute of variable MTRRs.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function shadows the content of variable MTRRs into
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync an internal array: VariableMtrr
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param MtrrValidBitsMask The mask for the valid bit of the MTRR
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param MtrrValidAddressMask The valid address mask for MTRR since the base address in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MTRR must align to 4K, so valid address mask equal to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MtrrValidBitsMask & 0xfffffffffffff000ULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param VariableMtrr The array to shadow variable MTRRs content
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The ruturn value of this paramter indicates the number of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MTRRs which has been used.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMtrrGetMemoryAttributeInVariableMtrr (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 MtrrValidBitsMask,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 MtrrValidAddressMask,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT VARIABLE_MTRR *VariableMtrr
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function prints all MTRRs for debugging.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMtrrDebugPrintAllMtrrs (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Checks if MTRR is supported.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE MTRR is supported.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE MTRR is not supported.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncBOOLEAN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIsMtrrSupported (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Returns the default MTRR cache type for the system.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The default MTRR cache type.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMTRR_MEMORY_CACHE_TYPE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMtrrGetDefaultMemoryType (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif // _MTRR_LIB_H_