]> git.proxmox.com Git - mirror_edk2.git/blob - ShellPkg/Library/UefiShellDebug1CommandsLib/MemMap.c
7f2faa4273b64932936767eddd2fc79807358152
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / MemMap.c
1 /** @file
2 Main file for Mode shell Debug1 function.
3
4 Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which acModeanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 STATIC CONST CHAR16 NameEfiReservedMemoryType[] = L"Reserved";
16 STATIC CONST CHAR16 NameEfiLoaderCode[] = L"LoaderCode";
17 STATIC CONST CHAR16 NameEfiLoaderData[] = L"LoaderData";
18 STATIC CONST CHAR16 NameEfiBootServicesCode[] = L"BS_Code";
19 STATIC CONST CHAR16 NameEfiBootServicesData[] = L"BS_Data";
20 STATIC CONST CHAR16 NameEfiRuntimeServicesCode[] = L"RT_Code";
21 STATIC CONST CHAR16 NameEfiRuntimeServicesData[] = L"RT_Data";
22 STATIC CONST CHAR16 NameEfiConventionalMemory[] = L"Available";
23 STATIC CONST CHAR16 NameEfiUnusableMemory[] = L"Unusable";
24 STATIC CONST CHAR16 NameEfiACPIReclaimMemory[] = L"ACPIRec";
25 STATIC CONST CHAR16 NameEfiACPIMemoryNVS[] = L"ACPI_NVS";
26 STATIC CONST CHAR16 NameEfiMemoryMappedIO[] = L"MMIO";
27 STATIC CONST CHAR16 NameEfiMemoryMappedIOPortSpace[] = L"MMIOPort";
28 STATIC CONST CHAR16 NameEfiPalCode[] = L"PalCode";
29
30 #include "UefiShellDebug1CommandsLib.h"
31
32 /**
33 Function for 'memmap' command.
34
35 @param[in] ImageHandle Handle to the Image (NULL if Internal).
36 @param[in] SystemTable Pointer to the System Table (NULL if Internal).
37 **/
38 SHELL_STATUS
39 EFIAPI
40 ShellCommandRunMemMap (
41 IN EFI_HANDLE ImageHandle,
42 IN EFI_SYSTEM_TABLE *SystemTable
43 )
44 {
45 EFI_STATUS Status;
46 LIST_ENTRY *Package;
47 CHAR16 *ProblemParam;
48 SHELL_STATUS ShellStatus;
49 UINTN Size;
50 EFI_MEMORY_DESCRIPTOR *Buffer;
51 UINTN MapKey;
52 UINTN ItemSize;
53 UINT32 Version;
54 UINT8 *Walker;
55 UINT64 ReservedPages;
56 UINT64 LoadCodePages;
57 UINT64 LoadDataPages;
58 UINT64 BSCodePages;
59 UINT64 BSDataPages;
60 UINT64 RTDataPages;
61 UINT64 RTCodePages;
62 UINT64 AvailPages;
63 UINT64 TotalPages;
64 UINT64 ReservedPagesSize;
65 UINT64 LoadCodePagesSize;
66 UINT64 LoadDataPagesSize;
67 UINT64 BSCodePagesSize;
68 UINT64 BSDataPagesSize;
69 UINT64 RTDataPagesSize;
70 UINT64 RTCodePagesSize;
71 UINT64 AvailPagesSize;
72 UINT64 TotalPagesSize;
73 UINT64 AcpiReclaimPages;
74 UINT64 AcpiNvsPages;
75 UINT64 MmioSpacePages;
76 UINT64 AcpiReclaimPagesSize;
77 UINT64 AcpiNvsPagesSize;
78 UINT64 MmioSpacePagesSize;
79 UINT64 MmioPortPages;
80 UINT64 MmioPortPagesSize;
81 UINT64 UnusableMemoryPages;
82 UINT64 UnusableMemoryPagesSize;
83 UINT64 PalCodePages;
84 UINT64 PalCodePagesSize;
85 BOOLEAN Sfo;
86
87 AcpiReclaimPages = 0;
88 AcpiNvsPages = 0;
89 MmioSpacePages = 0;
90 TotalPages = 0;
91 ReservedPages = 0;
92 LoadCodePages = 0;
93 LoadDataPages = 0;
94 BSCodePages = 0;
95 BSDataPages = 0;
96 RTDataPages = 0;
97 RTCodePages = 0;
98 AvailPages = 0;
99 MmioPortPages = 0;
100 UnusableMemoryPages = 0;
101 PalCodePages = 0;
102 Size = 0;
103 Buffer = NULL;
104 ShellStatus = SHELL_SUCCESS;
105 Status = EFI_SUCCESS;
106
107 //
108 // initialize the shell lib (we must be in non-auto-init...)
109 //
110 Status = ShellInitialize();
111 ASSERT_EFI_ERROR(Status);
112
113 Status = CommandInit();
114 ASSERT_EFI_ERROR(Status);
115
116 //
117 // parse the command line
118 //
119 Status = ShellCommandLineParse (SfoParamList, &Package, &ProblemParam, TRUE);
120 if (EFI_ERROR(Status)) {
121 if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
122 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, ProblemParam);
123 FreePool(ProblemParam);
124 ShellStatus = SHELL_INVALID_PARAMETER;
125 } else {
126 ASSERT(FALSE);
127 }
128 } else {
129 if (ShellCommandLineGetCount(Package) > 1) {
130 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);
131 ShellStatus = SHELL_INVALID_PARAMETER;
132 } else {
133 Status = gBS->GetMemoryMap(&Size, Buffer, &MapKey, &ItemSize, &Version);
134 if (Status == EFI_BUFFER_TOO_SMALL){
135 Size += SIZE_1KB;
136 Buffer = AllocateZeroPool(Size);
137 Status = gBS->GetMemoryMap(&Size, Buffer, &MapKey, &ItemSize, &Version);
138 }
139 if (EFI_ERROR(Status)) {
140 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_GET_FAILED), gShellDebug1HiiHandle, Status);
141 ShellStatus = SHELL_ACCESS_DENIED;
142 } else {
143 ASSERT(Version == EFI_MEMORY_DESCRIPTOR_VERSION);
144 Sfo = ShellCommandLineGetFlag(Package, L"-sfo");
145 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_HEAD), gShellDebug1HiiHandle);
146 for (Walker = (UINT8*)Buffer; Walker < (((UINT8*)Buffer)+Size) && Walker != NULL; Walker += ItemSize){
147 switch (((EFI_MEMORY_DESCRIPTOR*)Walker)->Type) {
148 case EfiReservedMemoryType:
149 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiReservedMemoryType, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);
150 ReservedPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
151 break;
152 case EfiLoaderCode:
153 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiLoaderCode, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);
154 LoadCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
155 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
156 break;
157 case EfiLoaderData:
158 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiLoaderData, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);
159 LoadDataPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
160 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
161 break;
162 case EfiBootServicesCode:
163 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiBootServicesCode, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);
164 BSCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
165 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
166 break;
167 case EfiBootServicesData:
168 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiBootServicesData, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);
169 BSDataPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
170 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
171 break;
172 case EfiRuntimeServicesCode:
173 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiRuntimeServicesCode, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);
174 RTCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
175 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
176 break;
177 case EfiRuntimeServicesData:
178 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiRuntimeServicesData, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);
179 RTDataPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
180 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
181 break;
182 case EfiConventionalMemory:
183 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiConventionalMemory, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);
184 AvailPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
185 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
186 break;
187 case EfiUnusableMemory:
188 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiUnusableMemory, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);
189 UnusableMemoryPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
190 break;
191 case EfiACPIReclaimMemory:
192 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiACPIReclaimMemory, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);
193 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
194 AcpiReclaimPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
195 break;
196 case EfiACPIMemoryNVS:
197 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiACPIMemoryNVS, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);
198 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
199 AcpiNvsPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
200 break;
201 case EfiMemoryMappedIO:
202 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiMemoryMappedIO, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);
203 MmioSpacePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
204 break;
205 case EfiMemoryMappedIOPortSpace:
206 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiMemoryMappedIOPortSpace, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);
207 MmioPortPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
208 break;
209 case EfiPalCode:
210 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiPalCode, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);
211 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
212 PalCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
213 break;
214 default:
215 ASSERT(FALSE);
216 }
217 }
218 //
219 // print the summary
220 //
221 ReservedPagesSize = MultU64x64(SIZE_4KB,ReservedPages);
222 LoadCodePagesSize = MultU64x64(SIZE_4KB,LoadCodePages);
223 LoadDataPagesSize = MultU64x64(SIZE_4KB,LoadDataPages);
224 BSCodePagesSize = MultU64x64(SIZE_4KB,BSCodePages);
225 BSDataPagesSize = MultU64x64(SIZE_4KB,BSDataPages);
226 RTDataPagesSize = MultU64x64(SIZE_4KB,RTDataPages);
227 RTCodePagesSize = MultU64x64(SIZE_4KB,RTCodePages);
228 AvailPagesSize = MultU64x64(SIZE_4KB,AvailPages);
229 TotalPagesSize = MultU64x64(SIZE_4KB,TotalPages);
230 AcpiReclaimPagesSize = MultU64x64(SIZE_4KB,AcpiReclaimPages);
231 AcpiNvsPagesSize = MultU64x64(SIZE_4KB,AcpiNvsPages);
232 MmioSpacePagesSize = MultU64x64(SIZE_4KB,MmioSpacePages);
233 if (!Sfo) {
234 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_SUMM), gShellDebug1HiiHandle,
235 ReservedPages, ReservedPagesSize,
236 LoadCodePages, LoadCodePagesSize,
237 LoadDataPages, LoadDataPagesSize,
238 BSCodePages, BSCodePagesSize,
239 BSDataPages, BSDataPagesSize,
240 RTCodePages, RTCodePagesSize,
241 RTDataPages, RTDataPagesSize,
242 AcpiReclaimPages, AcpiReclaimPagesSize,
243 AcpiNvsPages, AcpiNvsPagesSize,
244 MmioSpacePages, MmioSpacePagesSize,
245 AvailPages, AvailPagesSize,
246 DivU64x32(MultU64x64(SIZE_4KB,TotalPages), SIZE_1MB), TotalPagesSize
247 );
248 } else {
249 //
250 // Compute sizes only used for SFO mode
251 //
252 MmioPortPagesSize = MultU64x64(SIZE_4KB, MmioPortPages);
253 UnusableMemoryPagesSize = MultU64x64(SIZE_4KB, UnusableMemoryPages);
254 PalCodePagesSize = MultU64x64(SIZE_4KB, PalCodePages);
255
256 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_MEMMAP_LIST_SUMM_SFO), gShellDebug1HiiHandle,
257 TotalPagesSize,
258 MultU64x64(SIZE_4KB,ReservedPages),
259 BSCodePagesSize,
260 BSDataPagesSize,
261 RTCodePagesSize,
262 RTDataPagesSize,
263 LoadCodePagesSize,
264 LoadDataPagesSize,
265 AvailPagesSize,
266 MmioSpacePagesSize,
267 MmioPortPagesSize,
268 UnusableMemoryPagesSize,
269 AcpiReclaimPagesSize,
270 AcpiNvsPagesSize,
271 PalCodePagesSize
272 );
273 }
274 }
275 }
276 ShellCommandLineFreeVarList (Package);
277 }
278
279 if (Buffer != NULL) {
280 FreePool(Buffer);
281 }
282
283 return (ShellStatus);
284 }
285