]> git.proxmox.com Git - mirror_edk2.git/blame - UefiCpuPkg/Library/MtrrLib/UnitTest/MtrrLibUnitTest.h
UefiCpuPkg/MtrrLib/UnitTest: Add host based unit test
[mirror_edk2.git] / UefiCpuPkg / Library / MtrrLib / UnitTest / MtrrLibUnitTest.h
CommitLineData
e17f459a
RN
1/** @file\r
2\r
3 Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>\r
4 SPDX-License-Identifier: BSD-2-Clause-Patent\r
5\r
6**/\r
7\r
8#ifndef _MTRR_SUPPORT_H_\r
9#define _MTRR_SUPPORT_H_\r
10\r
11#include <stdio.h>\r
12#include <stdlib.h>\r
13#include <string.h>\r
14#include <stdarg.h>\r
15#include <stddef.h>\r
16#include <setjmp.h>\r
17#include <cmocka.h>\r
18#include <time.h>\r
19\r
20#include <Uefi.h>\r
21#include <Library/BaseLib.h>\r
22#include <Library/BaseMemoryLib.h>\r
23#include <Library/DebugLib.h>\r
24#include <Library/UnitTestLib.h>\r
25#include <Library/MtrrLib.h>\r
26#include <Library/UnitTestHostBaseLib.h>\r
27\r
28#include <Register/ArchitecturalMsr.h>\r
29#include <Register/Cpuid.h>\r
30#include <Register/Msr.h>\r
31\r
32#define UNIT_TEST_APP_NAME "MtrrLib Unit Tests"\r
33#define UNIT_TEST_APP_VERSION "1.0"\r
34\r
35#define SCRATCH_BUFFER_SIZE SIZE_16KB\r
36\r
37typedef struct {\r
38 UINT8 PhysicalAddressBits;\r
39 BOOLEAN MtrrSupported;\r
40 BOOLEAN FixedMtrrSupported;\r
41 MTRR_MEMORY_CACHE_TYPE DefaultCacheType;\r
42 UINT32 VariableMtrrCount;\r
43} MTRR_LIB_SYSTEM_PARAMETER;\r
44\r
45extern UINT32 mFixedMtrrsIndex[];\r
46\r
47/**\r
48 Initialize the MTRR registers.\r
49\r
50 @param SystemParameter System parameter that controls the MTRR registers initialization.\r
51**/\r
52UNIT_TEST_STATUS\r
53EFIAPI\r
54InitializeMtrrRegs (\r
55 IN MTRR_LIB_SYSTEM_PARAMETER *SystemParameter\r
56 );\r
57\r
58/**\r
59 Initialize the MTRR registers.\r
60\r
61 @param Context System parameter that controls the MTRR registers initialization.\r
62**/\r
63UNIT_TEST_STATUS\r
64EFIAPI\r
65InitializeSystem (\r
66 IN UNIT_TEST_CONTEXT Context\r
67 );\r
68\r
69/**\r
70 Return a random memory cache type.\r
71**/\r
72MTRR_MEMORY_CACHE_TYPE\r
73GenerateRandomCacheType (\r
74 VOID\r
75 );\r
76\r
77/**\r
78 Generate random MTRRs.\r
79\r
80 @param PhysicalAddressBits Physical address bits.\r
81 @param RawMemoryRanges Return the randomly generated MTRRs.\r
82 @param UcCount Count of Uncacheable MTRRs.\r
83 @param WtCount Count of Write Through MTRRs.\r
84 @param WbCount Count of Write Back MTRRs.\r
85 @param WpCount Count of Write Protected MTRRs.\r
86 @param WcCount Count of Write Combining MTRRs.\r
87**/\r
88VOID\r
89GenerateValidAndConfigurableMtrrPairs (\r
90 IN UINT32 PhysicalAddressBits,\r
91 IN OUT MTRR_MEMORY_RANGE *RawMemoryRanges,\r
92 IN UINT32 UcCount,\r
93 IN UINT32 WtCount,\r
94 IN UINT32 WbCount,\r
95 IN UINT32 WpCount,\r
96 IN UINT32 WcCount\r
97 );\r
98\r
99/**\r
100 Convert the MTRR BASE/MASK array to memory ranges.\r
101\r
102 @param DefaultType Default memory type.\r
103 @param PhysicalAddressBits Physical address bits.\r
104 @param RawMemoryRanges Raw memory ranges.\r
105 @param RawMemoryRangeCount Count of raw memory ranges.\r
106 @param MemoryRanges Memory ranges.\r
107 @param MemoryRangeCount Count of memory ranges.\r
108**/\r
109VOID\r
110GetEffectiveMemoryRanges (\r
111 IN MTRR_MEMORY_CACHE_TYPE DefaultType,\r
112 IN UINT32 PhysicalAddressBits,\r
113 IN MTRR_MEMORY_RANGE *RawMemoryRanges,\r
114 IN UINT32 RawMemoryRangeCount,\r
115 OUT MTRR_MEMORY_RANGE *MemoryRanges,\r
116 OUT UINTN *MemoryRangeCount\r
117 );\r
118\r
119/**\r
120 Generate random MTRR BASE/MASK for a specified type.\r
121\r
122 @param PhysicalAddressBits Physical address bits.\r
123 @param CacheType Cache type.\r
124 @param MtrrPair Return the random MTRR.\r
125 @param MtrrMemoryRange Return the random memory range.\r
126**/\r
127VOID\r
128GenerateRandomMtrrPair (\r
129 IN UINT32 PhysicalAddressBits,\r
130 IN MTRR_MEMORY_CACHE_TYPE CacheType,\r
131 OUT MTRR_VARIABLE_SETTING *MtrrPair, OPTIONAL\r
132 OUT MTRR_MEMORY_RANGE *MtrrMemoryRange OPTIONAL\r
133 );\r
134\r
135/**\r
136 Collect the test result.\r
137\r
138 @param DefaultType Default memory type.\r
139 @param PhysicalAddressBits Physical address bits.\r
140 @param VariableMtrrCount Count of variable MTRRs.\r
141 @param Mtrrs MTRR settings to collect from.\r
142 @param Ranges Return the memory ranges.\r
143 @param RangeCount Return the count of memory ranges.\r
144 @param MtrrCount Return the count of variable MTRRs being used.\r
145**/\r
146VOID\r
147CollectTestResult (\r
148 IN MTRR_MEMORY_CACHE_TYPE DefaultType,\r
149 IN UINT32 PhysicalAddressBits,\r
150 IN UINT32 VariableMtrrCount,\r
151 IN MTRR_SETTINGS *Mtrrs,\r
152 OUT MTRR_MEMORY_RANGE *Ranges,\r
153 IN OUT UINTN *RangeCount,\r
154 OUT UINT32 *MtrrCount\r
155 );\r
156\r
157/**\r
158 Return a 64bit random number.\r
159\r
160 @param Start Start of the random number range.\r
161 @param Limit Limit of the random number range.\r
162 @return 64bit random number\r
163**/\r
164UINT64\r
165Random64 (\r
166 UINT64 Start,\r
167 UINT64 Limit\r
168 );\r
169\r
170/**\r
171 Return a 32bit random number.\r
172\r
173 @param Start Start of the random number range.\r
174 @param Limit Limit of the random number range.\r
175 @return 32bit random number\r
176**/\r
177UINT32\r
178Random32 (\r
179 UINT32 Start,\r
180 UINT32 Limit\r
181 );\r
182#endif\r