]>
Commit | Line | Data |
---|---|---|
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 | |
37 | typedef 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 | |
45 | extern 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 | |
52 | UNIT_TEST_STATUS\r | |
53 | EFIAPI\r | |
54 | InitializeMtrrRegs (\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 | |
63 | UNIT_TEST_STATUS\r | |
64 | EFIAPI\r | |
65 | InitializeSystem (\r | |
66 | IN UNIT_TEST_CONTEXT Context\r | |
67 | );\r | |
68 | \r | |
69 | /**\r | |
70 | Return a random memory cache type.\r | |
71 | **/\r | |
72 | MTRR_MEMORY_CACHE_TYPE\r | |
73 | GenerateRandomCacheType (\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 | |
88 | VOID\r | |
89 | GenerateValidAndConfigurableMtrrPairs (\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 | |
109 | VOID\r | |
110 | GetEffectiveMemoryRanges (\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 | |
127 | VOID\r | |
128 | GenerateRandomMtrrPair (\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 | |
146 | VOID\r | |
147 | CollectTestResult (\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 | |
164 | UINT64\r | |
165 | Random64 (\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 | |
177 | UINT32\r | |
178 | Random32 (\r | |
179 | UINT32 Start,\r | |
180 | UINT32 Limit\r | |
181 | );\r | |
182 | #endif\r |