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