| /** @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 |