mirror of https://github.com/acidanthera/audk.git
198 lines
5.3 KiB
C
198 lines
5.3 KiB
C
/** @file
|
|
|
|
Copyright (c) 2020 - 2023, Intel Corporation. All rights reserved.<BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#ifndef _MTRR_SUPPORT_H_
|
|
#define _MTRR_SUPPORT_H_
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <stdarg.h>
|
|
#include <stddef.h>
|
|
#include <setjmp.h>
|
|
#include <cmocka.h>
|
|
#include <time.h>
|
|
|
|
#include <Uefi.h>
|
|
#include <Library/BaseLib.h>
|
|
#include <Library/BaseMemoryLib.h>
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/UnitTestLib.h>
|
|
#include <Library/MtrrLib.h>
|
|
#include <Library/UnitTestHostBaseLib.h>
|
|
|
|
#include <Register/ArchitecturalMsr.h>
|
|
#include <Register/Cpuid.h>
|
|
#include <Register/Msr.h>
|
|
|
|
#define UNIT_TEST_APP_NAME "MtrrLib Unit Tests"
|
|
#define UNIT_TEST_APP_VERSION "1.0"
|
|
|
|
#define SCRATCH_BUFFER_SIZE SIZE_16KB
|
|
|
|
typedef struct {
|
|
UINT8 PhysicalAddressBits;
|
|
BOOLEAN MtrrSupported;
|
|
BOOLEAN FixedMtrrSupported;
|
|
MTRR_MEMORY_CACHE_TYPE DefaultCacheType;
|
|
UINT32 VariableMtrrCount;
|
|
UINT8 MkTmeKeyidBits;
|
|
} MTRR_LIB_SYSTEM_PARAMETER;
|
|
|
|
extern UINT32 mFixedMtrrsIndex[];
|
|
extern BOOLEAN mRandomInput;
|
|
|
|
/**
|
|
Initialize the MTRR registers.
|
|
|
|
@param SystemParameter System parameter that controls the MTRR registers initialization.
|
|
**/
|
|
UNIT_TEST_STATUS
|
|
EFIAPI
|
|
InitializeMtrrRegs (
|
|
IN MTRR_LIB_SYSTEM_PARAMETER *SystemParameter
|
|
);
|
|
|
|
/**
|
|
Initialize the MTRR registers.
|
|
|
|
@param Context System parameter that controls the MTRR registers initialization.
|
|
**/
|
|
UNIT_TEST_STATUS
|
|
EFIAPI
|
|
InitializeSystem (
|
|
IN UNIT_TEST_CONTEXT Context
|
|
);
|
|
|
|
/**
|
|
Return a random memory cache type.
|
|
**/
|
|
MTRR_MEMORY_CACHE_TYPE
|
|
GenerateRandomCacheType (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
Generate random MTRRs.
|
|
|
|
@param PhysicalAddressBits Physical address bits.
|
|
@param RawMemoryRanges Return the randomly generated MTRRs.
|
|
@param UcCount Count of Uncacheable MTRRs.
|
|
@param WtCount Count of Write Through MTRRs.
|
|
@param WbCount Count of Write Back MTRRs.
|
|
@param WpCount Count of Write Protected MTRRs.
|
|
@param WcCount Count of Write Combining MTRRs.
|
|
**/
|
|
VOID
|
|
GenerateValidAndConfigurableMtrrPairs (
|
|
IN UINT32 PhysicalAddressBits,
|
|
IN OUT MTRR_MEMORY_RANGE *RawMemoryRanges,
|
|
IN UINT32 UcCount,
|
|
IN UINT32 WtCount,
|
|
IN UINT32 WbCount,
|
|
IN UINT32 WpCount,
|
|
IN UINT32 WcCount
|
|
);
|
|
|
|
/**
|
|
Convert the MTRR BASE/MASK array to memory ranges.
|
|
|
|
@param DefaultType Default memory type.
|
|
@param PhysicalAddressBits Physical address bits.
|
|
@param RawMemoryRanges Raw memory ranges.
|
|
@param RawMemoryRangeCount Count of raw memory ranges.
|
|
@param MemoryRanges Memory ranges.
|
|
@param MemoryRangeCount Count of memory ranges.
|
|
**/
|
|
VOID
|
|
GetEffectiveMemoryRanges (
|
|
IN MTRR_MEMORY_CACHE_TYPE DefaultType,
|
|
IN UINT32 PhysicalAddressBits,
|
|
IN MTRR_MEMORY_RANGE *RawMemoryRanges,
|
|
IN UINT32 RawMemoryRangeCount,
|
|
OUT MTRR_MEMORY_RANGE *MemoryRanges,
|
|
OUT UINTN *MemoryRangeCount
|
|
);
|
|
|
|
/**
|
|
Generate random MTRR BASE/MASK for a specified type.
|
|
|
|
@param PhysicalAddressBits Physical address bits.
|
|
@param CacheType Cache type.
|
|
@param MtrrPair Return the random MTRR.
|
|
@param MtrrMemoryRange Return the random memory range.
|
|
**/
|
|
VOID
|
|
GenerateRandomMtrrPair (
|
|
IN UINT32 PhysicalAddressBits,
|
|
IN MTRR_MEMORY_CACHE_TYPE CacheType,
|
|
OUT MTRR_VARIABLE_SETTING *MtrrPair OPTIONAL,
|
|
OUT MTRR_MEMORY_RANGE *MtrrMemoryRange OPTIONAL
|
|
);
|
|
|
|
/**
|
|
Collect the test result.
|
|
|
|
@param DefaultType Default memory type.
|
|
@param PhysicalAddressBits Physical address bits.
|
|
@param VariableMtrrCount Count of variable MTRRs.
|
|
@param Mtrrs MTRR settings to collect from.
|
|
@param Ranges Return the memory ranges.
|
|
@param RangeCount Return the count of memory ranges.
|
|
@param MtrrCount Return the count of variable MTRRs being used.
|
|
**/
|
|
VOID
|
|
CollectTestResult (
|
|
IN MTRR_MEMORY_CACHE_TYPE DefaultType,
|
|
IN UINT32 PhysicalAddressBits,
|
|
IN UINT32 VariableMtrrCount,
|
|
IN MTRR_SETTINGS *Mtrrs,
|
|
OUT MTRR_MEMORY_RANGE *Ranges,
|
|
IN OUT UINTN *RangeCount,
|
|
OUT UINT32 *MtrrCount
|
|
);
|
|
|
|
/**
|
|
Return a 64bit random number.
|
|
|
|
@param Start Start of the random number range.
|
|
@param Limit Limit of the random number range.
|
|
@return 64bit random number
|
|
**/
|
|
UINT64
|
|
Random64 (
|
|
UINT64 Start,
|
|
UINT64 Limit
|
|
);
|
|
|
|
/**
|
|
Return a 32bit random number.
|
|
|
|
@param Start Start of the random number range.
|
|
@param Limit Limit of the random number range.
|
|
@return 32bit random number
|
|
**/
|
|
UINT32
|
|
Random32 (
|
|
UINT32 Start,
|
|
UINT32 Limit
|
|
);
|
|
|
|
/**
|
|
Generate Count random numbers in FilePath.
|
|
|
|
@param FilePath The file path to put the generated random numbers.
|
|
@param Count Count of random numbers.
|
|
**/
|
|
VOID
|
|
GenerateRandomNumbers (
|
|
CHAR8 *FilePath,
|
|
UINTN Count
|
|
);
|
|
|
|
#endif
|