mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 02:40:26 +00:00 
			
		
		
		
	The unit test app supports running in 3 mode:
1. MtrrLibUnitTest generate-random-numbers
     <path to MtrrLib/UnitTest/RandomNumber.c> <random-number count>
   It generates random numbers and writes to RandomNumber.c.
2. MtrrLibUnitTest [<iterations>]
   It tests MtrrLib APIs using configurations generated from static
   numbers generated by mode #1.
   This is the default execution mode running in CI environment.
3. MtrrLibUnitTest <iterations> random
   It tests MtrrLib APIs using configurations generated from random
   numbers.
   This is what developers can use to test MtrrLib for regressions.
Signed-off-by: Ray Ni <ray.ni@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Ming Shao <ming.shao@intel.com>
Cc: Sean Brogan <sean.brogan@microsoft.com>
Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
		
	
			
		
			
				
	
	
		
			196 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
  Copyright (c) 2020, 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;
 | 
						|
} 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
 |