]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellDebug1CommandsLib/MemMap.c
SecurityPkg: Apply uncrustify changes
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / MemMap.c
CommitLineData
5d73d92f 1/** @file\r
2 Main file for Mode shell Debug1 function.\r
3\r
38707d76 4 (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
c011b6c9 5 (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>\r
ba0014b9 6 Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>\r
56ba3746 7 SPDX-License-Identifier: BSD-2-Clause-Patent\r
5d73d92f 8\r
9**/\r
10\r
73768087
CP
11//\r
12// Need full names for Standard-Format Output\r
13//\r
3737ac2b 14STATIC CONST CHAR16 NameEfiReservedMemoryType[] = L"Reserved";\r
15STATIC CONST CHAR16 NameEfiLoaderCode[] = L"LoaderCode";\r
16STATIC CONST CHAR16 NameEfiLoaderData[] = L"LoaderData";\r
73768087
CP
17STATIC CONST CHAR16 NameEfiBootServicesCode[] = L"BootServiceCode";\r
18STATIC CONST CHAR16 NameEfiBootServicesData[] = L"BootServiceData";\r
19STATIC CONST CHAR16 NameEfiRuntimeServicesCode[] = L"RuntimeCode";\r
20STATIC CONST CHAR16 NameEfiRuntimeServicesData[] = L"RuntimeData";\r
3737ac2b 21STATIC CONST CHAR16 NameEfiConventionalMemory[] = L"Available";\r
6c4542ed 22STATIC CONST CHAR16 NameEfiPersistentMemory[] = L"Persistent";\r
73768087
CP
23STATIC CONST CHAR16 NameEfiUnusableMemory[] = L"UnusableMemory";\r
24STATIC CONST CHAR16 NameEfiACPIReclaimMemory[] = L"ACPIReclaimMemory";\r
25STATIC CONST CHAR16 NameEfiACPIMemoryNVS[] = L"ACPIMemoryNVS";\r
26STATIC CONST CHAR16 NameEfiMemoryMappedIO[] = L"MemoryMappedIO";\r
27STATIC CONST CHAR16 NameEfiMemoryMappedIOPortSpace[] = L"MemoryMappedIOPortSpace";\r
3737ac2b 28STATIC CONST CHAR16 NameEfiPalCode[] = L"PalCode";\r
5d73d92f 29\r
73768087
CP
30//\r
31// Need short names for some memory types\r
32//\r
33STATIC CONST CHAR16 NameEfiBootServicesCodeShort[] = L"BS_Code";\r
34STATIC CONST CHAR16 NameEfiBootServicesDataShort[] = L"BS_Data";\r
35STATIC CONST CHAR16 NameEfiRuntimeServicesCodeShort[] = L"RT_Code";\r
36STATIC CONST CHAR16 NameEfiRuntimeServicesDataShort[] = L"RT_Data";\r
37STATIC CONST CHAR16 NameEfiUnusableMemoryShort[] = L"Unusable";\r
38STATIC CONST CHAR16 NameEfiACPIReclaimMemoryShort[] = L"ACPI_Recl";\r
39STATIC CONST CHAR16 NameEfiACPIMemoryNVSShort[] = L"ACPI_NVS";\r
40STATIC CONST CHAR16 NameEfiMemoryMappedIOShort[] = L"MMIO";\r
41STATIC CONST CHAR16 NameEfiMemoryMappedIOPortSpaceShort[] = L"MMIO_Port";\r
42\r
5d73d92f 43#include "UefiShellDebug1CommandsLib.h"\r
44\r
8bb61740
RN
45typedef struct {\r
46 UINT32 Type;\r
47 UINT64 NumberOfPages;\r
48 LIST_ENTRY Link;\r
49} MEMORY_LENGTH_ENTRY;\r
50\r
51/**\r
52 Add the length of the specified type to List.\r
53\r
54 @param List A list to hold all pairs of <Type, NumberOfPages>.\r
55 @param Type Memory type.\r
56 @param NumberOfPages Number of pages.\r
57**/\r
58VOID\r
59AddMemoryLength (\r
60 LIST_ENTRY *List,\r
61 UINT32 Type,\r
62 UINT64 NumberOfPages\r
63 )\r
64{\r
65 MEMORY_LENGTH_ENTRY *Entry;\r
66 MEMORY_LENGTH_ENTRY *NewEntry;\r
67 LIST_ENTRY *Link;\r
68\r
69 Entry = NULL;\r
70 for (Link = GetFirstNode (List); !IsNull (List, Link); Link = GetNextNode (List, Link)) {\r
71 Entry = BASE_CR (Link, MEMORY_LENGTH_ENTRY, Link);\r
72 if (Entry->Type >= Type) {\r
73 break;\r
74 }\r
75 }\r
76\r
77 if ((Entry != NULL) && (Entry->Type == Type)) {\r
78 //\r
79 // The Entry is the one we look for.\r
80 //\r
81 NewEntry = Entry;\r
82 } else {\r
83 //\r
84 // The search operation breaks due to:\r
85 // 1. Type of every entry < Type --> Insert to tail\r
86 // 2. Type of an entry > Type --> Insert to previous of this entry\r
87 //\r
88 NewEntry = AllocatePool (sizeof (*NewEntry));\r
89 if (NewEntry == NULL) {\r
90 return;\r
91 }\r
92 NewEntry->Type = Type;\r
93 NewEntry->NumberOfPages = 0;\r
94 InsertTailList (Link, &NewEntry->Link);\r
95 }\r
96\r
97 NewEntry->NumberOfPages += NumberOfPages;\r
98}\r
99\r
3737ac2b 100/**\r
101 Function for 'memmap' command.\r
102\r
103 @param[in] ImageHandle Handle to the Image (NULL if Internal).\r
104 @param[in] SystemTable Pointer to the System Table (NULL if Internal).\r
105**/\r
5d73d92f 106SHELL_STATUS\r
107EFIAPI\r
108ShellCommandRunMemMap (\r
109 IN EFI_HANDLE ImageHandle,\r
110 IN EFI_SYSTEM_TABLE *SystemTable\r
111 )\r
112{\r
113 EFI_STATUS Status;\r
114 LIST_ENTRY *Package;\r
115 CHAR16 *ProblemParam;\r
116 SHELL_STATUS ShellStatus;\r
117 UINTN Size;\r
ac25ebdc 118 EFI_MEMORY_DESCRIPTOR *Descriptors;\r
5d73d92f 119 UINTN MapKey;\r
120 UINTN ItemSize;\r
121 UINT32 Version;\r
ac25ebdc 122 EFI_MEMORY_DESCRIPTOR *Walker;\r
5d73d92f 123 UINT64 ReservedPages;\r
124 UINT64 LoadCodePages;\r
125 UINT64 LoadDataPages;\r
126 UINT64 BSCodePages;\r
127 UINT64 BSDataPages;\r
128 UINT64 RTDataPages;\r
129 UINT64 RTCodePages;\r
130 UINT64 AvailPages;\r
131 UINT64 TotalPages;\r
132 UINT64 ReservedPagesSize;\r
133 UINT64 LoadCodePagesSize;\r
134 UINT64 LoadDataPagesSize;\r
135 UINT64 BSCodePagesSize;\r
136 UINT64 BSDataPagesSize;\r
137 UINT64 RTDataPagesSize;\r
138 UINT64 RTCodePagesSize;\r
139 UINT64 AvailPagesSize;\r
140 UINT64 TotalPagesSize;\r
3737ac2b 141 UINT64 AcpiReclaimPages;\r
142 UINT64 AcpiNvsPages;\r
143 UINT64 MmioSpacePages;\r
144 UINT64 AcpiReclaimPagesSize;\r
145 UINT64 AcpiNvsPagesSize;\r
146 UINT64 MmioSpacePagesSize;\r
c12383d5
JC
147 UINT64 MmioPortPages;\r
148 UINT64 MmioPortPagesSize;\r
149 UINT64 UnusableMemoryPages;\r
150 UINT64 UnusableMemoryPagesSize;\r
151 UINT64 PalCodePages;\r
152 UINT64 PalCodePagesSize;\r
38707d76
TS
153 UINT64 PersistentPages;\r
154 UINT64 PersistentPagesSize;\r
5d73d92f 155 BOOLEAN Sfo;\r
8bb61740
RN
156 LIST_ENTRY MemoryList;\r
157 MEMORY_LENGTH_ENTRY *Entry;\r
158 LIST_ENTRY *Link;\r
5d73d92f 159\r
3737ac2b 160 AcpiReclaimPages = 0;\r
161 AcpiNvsPages = 0;\r
162 MmioSpacePages = 0;\r
5d73d92f 163 TotalPages = 0;\r
164 ReservedPages = 0;\r
165 LoadCodePages = 0;\r
166 LoadDataPages = 0;\r
167 BSCodePages = 0;\r
168 BSDataPages = 0;\r
169 RTDataPages = 0;\r
170 RTCodePages = 0;\r
171 AvailPages = 0;\r
c12383d5
JC
172 MmioPortPages = 0;\r
173 UnusableMemoryPages = 0;\r
174 PalCodePages = 0;\r
38707d76 175 PersistentPages = 0;\r
5d73d92f 176 Size = 0;\r
ac25ebdc 177 Descriptors = NULL;\r
5d73d92f 178 ShellStatus = SHELL_SUCCESS;\r
179 Status = EFI_SUCCESS;\r
8bb61740 180 InitializeListHead (&MemoryList);\r
5d73d92f 181\r
182 //\r
183 // initialize the shell lib (we must be in non-auto-init...)\r
184 //\r
185 Status = ShellInitialize();\r
186 ASSERT_EFI_ERROR(Status);\r
187\r
188 Status = CommandInit();\r
189 ASSERT_EFI_ERROR(Status);\r
190\r
191 //\r
192 // parse the command line\r
193 //\r
194 Status = ShellCommandLineParse (SfoParamList, &Package, &ProblemParam, TRUE);\r
195 if (EFI_ERROR(Status)) {\r
196 if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
ba0014b9 197 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"memmap", ProblemParam);\r
5d73d92f 198 FreePool(ProblemParam);\r
199 ShellStatus = SHELL_INVALID_PARAMETER;\r
200 } else {\r
201 ASSERT(FALSE);\r
202 }\r
203 } else {\r
204 if (ShellCommandLineGetCount(Package) > 1) {\r
ba0014b9 205 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"memmap");\r
5d73d92f 206 ShellStatus = SHELL_INVALID_PARAMETER;\r
207 } else {\r
ac25ebdc 208 Status = gBS->GetMemoryMap(&Size, Descriptors, &MapKey, &ItemSize, &Version);\r
5d73d92f 209 if (Status == EFI_BUFFER_TOO_SMALL){\r
210 Size += SIZE_1KB;\r
ac25ebdc
RN
211 Descriptors = AllocateZeroPool(Size);\r
212 Status = gBS->GetMemoryMap(&Size, Descriptors, &MapKey, &ItemSize, &Version);\r
5d73d92f 213 }\r
214 if (EFI_ERROR(Status)) {\r
ba0014b9 215 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_GET_FAILED), gShellDebug1HiiHandle, L"memmap");\r
5d73d92f 216 ShellStatus = SHELL_ACCESS_DENIED;\r
217 } else {\r
218 ASSERT(Version == EFI_MEMORY_DESCRIPTOR_VERSION);\r
73768087 219\r
5d73d92f 220 Sfo = ShellCommandLineGetFlag(Package, L"-sfo");\r
73768087
CP
221 if (!Sfo) {\r
222 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_HEAD), gShellDebug1HiiHandle);\r
223 } else {\r
224 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_SFO_HEADER), gShellDebug1HiiHandle, L"memmap");\r
225 }\r
226\r
ac25ebdc
RN
227 for ( Walker = Descriptors\r
228 ; (Walker < (EFI_MEMORY_DESCRIPTOR *) ((UINT8*)Descriptors + Size)) && (Walker != NULL)\r
229 ; Walker = (EFI_MEMORY_DESCRIPTOR *) ((UINT8 *)Walker + ItemSize)\r
230 ){\r
231 switch (Walker->Type) {\r
5d73d92f 232 case EfiReservedMemoryType:\r
ac25ebdc
RN
233 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiReservedMemoryType, Walker->PhysicalStart, Walker->PhysicalStart+MultU64x64(SIZE_4KB,Walker->NumberOfPages)-1, Walker->NumberOfPages, Walker->Attribute);\r
234 ReservedPages += Walker->NumberOfPages;\r
5d73d92f 235 break;\r
236 case EfiLoaderCode:\r
ac25ebdc
RN
237 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiLoaderCode, Walker->PhysicalStart, Walker->PhysicalStart+MultU64x64(SIZE_4KB,Walker->NumberOfPages)-1, Walker->NumberOfPages, Walker->Attribute);\r
238 LoadCodePages += Walker->NumberOfPages;\r
239 TotalPages += Walker->NumberOfPages;\r
5d73d92f 240 break;\r
241 case EfiLoaderData:\r
ac25ebdc
RN
242 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiLoaderData, Walker->PhysicalStart, Walker->PhysicalStart+MultU64x64(SIZE_4KB,Walker->NumberOfPages)-1, Walker->NumberOfPages, Walker->Attribute);\r
243 LoadDataPages += Walker->NumberOfPages;\r
244 TotalPages += Walker->NumberOfPages;\r
5d73d92f 245 break;\r
246 case EfiBootServicesCode:\r
ac25ebdc
RN
247 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, Walker->PhysicalStart, Walker->PhysicalStart+MultU64x64(SIZE_4KB,Walker->NumberOfPages)-1, Walker->NumberOfPages, Walker->Attribute);\r
248 BSCodePages += Walker->NumberOfPages;\r
249 TotalPages += Walker->NumberOfPages;\r
5d73d92f 250 break;\r
251 case EfiBootServicesData:\r
ac25ebdc
RN
252 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, Walker->PhysicalStart, Walker->PhysicalStart+MultU64x64(SIZE_4KB,Walker->NumberOfPages)-1, Walker->NumberOfPages, Walker->Attribute);\r
253 BSDataPages += Walker->NumberOfPages;\r
254 TotalPages += Walker->NumberOfPages;\r
5d73d92f 255 break;\r
256 case EfiRuntimeServicesCode:\r
ac25ebdc
RN
257 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, Walker->PhysicalStart, Walker->PhysicalStart+MultU64x64(SIZE_4KB,Walker->NumberOfPages)-1, Walker->NumberOfPages, Walker->Attribute);\r
258 RTCodePages += Walker->NumberOfPages;\r
259 TotalPages += Walker->NumberOfPages;\r
5d73d92f 260 break;\r
261 case EfiRuntimeServicesData:\r
ac25ebdc
RN
262 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, Walker->PhysicalStart, Walker->PhysicalStart+MultU64x64(SIZE_4KB,Walker->NumberOfPages)-1, Walker->NumberOfPages, Walker->Attribute);\r
263 RTDataPages += Walker->NumberOfPages;\r
264 TotalPages += Walker->NumberOfPages;\r
5d73d92f 265 break;\r
266 case EfiConventionalMemory:\r
ac25ebdc
RN
267 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiConventionalMemory, Walker->PhysicalStart, Walker->PhysicalStart+MultU64x64(SIZE_4KB,Walker->NumberOfPages)-1, Walker->NumberOfPages, Walker->Attribute);\r
268 AvailPages += Walker->NumberOfPages;\r
269 TotalPages += Walker->NumberOfPages;\r
6c4542ed
LG
270 break;\r
271 case EfiPersistentMemory:\r
ac25ebdc
RN
272 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiPersistentMemory, Walker->PhysicalStart, Walker->PhysicalStart+MultU64x64(SIZE_4KB,Walker->NumberOfPages)-1, Walker->NumberOfPages, Walker->Attribute);\r
273 PersistentPages += Walker->NumberOfPages;\r
274 TotalPages += Walker->NumberOfPages;\r
5d73d92f 275 break;\r
276 case EfiUnusableMemory:\r
ac25ebdc
RN
277 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, Walker->PhysicalStart, Walker->PhysicalStart+MultU64x64(SIZE_4KB,Walker->NumberOfPages)-1, Walker->NumberOfPages, Walker->Attribute);\r
278 UnusableMemoryPages += Walker->NumberOfPages;\r
5d73d92f 279 break;\r
280 case EfiACPIReclaimMemory:\r
ac25ebdc
RN
281 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, Walker->PhysicalStart, Walker->PhysicalStart+MultU64x64(SIZE_4KB,Walker->NumberOfPages)-1, Walker->NumberOfPages, Walker->Attribute);\r
282 TotalPages += Walker->NumberOfPages;\r
283 AcpiReclaimPages += Walker->NumberOfPages;\r
5d73d92f 284 break;\r
285 case EfiACPIMemoryNVS:\r
ac25ebdc
RN
286 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, Walker->PhysicalStart, Walker->PhysicalStart+MultU64x64(SIZE_4KB,Walker->NumberOfPages)-1, Walker->NumberOfPages, Walker->Attribute);\r
287 TotalPages += Walker->NumberOfPages;\r
288 AcpiNvsPages += Walker->NumberOfPages;\r
5d73d92f 289 break;\r
290 case EfiMemoryMappedIO:\r
ac25ebdc
RN
291 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, Walker->PhysicalStart, Walker->PhysicalStart+MultU64x64(SIZE_4KB,Walker->NumberOfPages)-1, Walker->NumberOfPages, Walker->Attribute);\r
292 MmioSpacePages += Walker->NumberOfPages;\r
5d73d92f 293 break;\r
294 case EfiMemoryMappedIOPortSpace:\r
ac25ebdc
RN
295 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, Walker->PhysicalStart, Walker->PhysicalStart+MultU64x64(SIZE_4KB,Walker->NumberOfPages)-1, Walker->NumberOfPages, Walker->Attribute);\r
296 MmioPortPages += Walker->NumberOfPages;\r
5d73d92f 297 break;\r
298 case EfiPalCode:\r
ac25ebdc
RN
299 ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiPalCode, Walker->PhysicalStart, Walker->PhysicalStart+MultU64x64(SIZE_4KB,Walker->NumberOfPages)-1, Walker->NumberOfPages, Walker->Attribute);\r
300 TotalPages += Walker->NumberOfPages;\r
301 PalCodePages += Walker->NumberOfPages;\r
5d73d92f 302 break;\r
303 default:\r
8bb61740
RN
304 //\r
305 // Shell Spec defines the SFO format.\r
306 // Do not print the OEM/OS memory usage in the SFO format, to avoid conflict with Shell Spec.\r
307 //\r
308 if (!Sfo) {\r
309 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_ITEM_OTHER), gShellDebug1HiiHandle, Walker->Type, Walker->PhysicalStart, Walker->PhysicalStart + MultU64x64 (SIZE_4KB, Walker->NumberOfPages) - 1, Walker->NumberOfPages, Walker->Attribute);\r
310 }\r
311 TotalPages += Walker->NumberOfPages;\r
312 AddMemoryLength (&MemoryList, Walker->Type, Walker->NumberOfPages);\r
313 break;\r
5d73d92f 314 }\r
315 }\r
316 //\r
317 // print the summary\r
318 //\r
73768087
CP
319 ReservedPagesSize = MultU64x64(SIZE_4KB,ReservedPages);\r
320 LoadCodePagesSize = MultU64x64(SIZE_4KB,LoadCodePages);\r
321 LoadDataPagesSize = MultU64x64(SIZE_4KB,LoadDataPages);\r
322 BSCodePagesSize = MultU64x64(SIZE_4KB,BSCodePages);\r
323 BSDataPagesSize = MultU64x64(SIZE_4KB,BSDataPages);\r
324 RTDataPagesSize = MultU64x64(SIZE_4KB,RTDataPages);\r
325 RTCodePagesSize = MultU64x64(SIZE_4KB,RTCodePages);\r
326 AvailPagesSize = MultU64x64(SIZE_4KB,AvailPages);\r
327 TotalPagesSize = MultU64x64(SIZE_4KB,TotalPages);\r
328 AcpiReclaimPagesSize = MultU64x64(SIZE_4KB,AcpiReclaimPages);\r
329 AcpiNvsPagesSize = MultU64x64(SIZE_4KB,AcpiNvsPages);\r
330 MmioSpacePagesSize = MultU64x64(SIZE_4KB,MmioSpacePages);\r
331 MmioPortPagesSize = MultU64x64(SIZE_4KB,MmioPortPages);\r
332 PalCodePagesSize = MultU64x64(SIZE_4KB,PalCodePages);\r
38707d76 333 PersistentPagesSize = MultU64x64(SIZE_4KB,PersistentPages);\r
73768087 334 UnusableMemoryPagesSize = MultU64x64(SIZE_4KB,UnusableMemoryPages);\r
5d73d92f 335 if (!Sfo) {\r
336 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_SUMM), gShellDebug1HiiHandle,\r
337 ReservedPages, ReservedPagesSize,\r
338 LoadCodePages, LoadCodePagesSize,\r
339 LoadDataPages, LoadDataPagesSize,\r
340 BSCodePages, BSCodePagesSize,\r
341 BSDataPages, BSDataPagesSize,\r
3737ac2b 342 RTCodePages, RTCodePagesSize,\r
5d73d92f 343 RTDataPages, RTDataPagesSize,\r
3737ac2b 344 AcpiReclaimPages, AcpiReclaimPagesSize,\r
345 AcpiNvsPages, AcpiNvsPagesSize,\r
346 MmioSpacePages, MmioSpacePagesSize,\r
73768087
CP
347 MmioPortPages, MmioPortPagesSize,\r
348 PalCodePages, PalCodePagesSize,\r
5d73d92f 349 AvailPages, AvailPagesSize,\r
8bb61740
RN
350 PersistentPages, PersistentPagesSize\r
351 );\r
352\r
353 //\r
354 // Print out the total memory usage for OEM/OS types in the order of type.\r
355 //\r
356 for (Link = GetFirstNode (&MemoryList); !IsNull (&MemoryList, Link); Link = GetNextNode (&MemoryList, Link)) {\r
357 Entry = BASE_CR (Link, MEMORY_LENGTH_ENTRY, Link);\r
358 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_SUMM_OTHER), gShellDebug1HiiHandle,\r
359 Entry->Type, Entry->NumberOfPages, MultU64x64 (SIZE_4KB, Entry->NumberOfPages)\r
360 );\r
361 }\r
362\r
363 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_SUMM2), gShellDebug1HiiHandle,\r
5d73d92f 364 DivU64x32(MultU64x64(SIZE_4KB,TotalPages), SIZE_1MB), TotalPagesSize\r
365 );\r
366 } else {\r
73768087 367 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_SUMM_SFO), gShellDebug1HiiHandle,\r
5d73d92f 368 TotalPagesSize,\r
73768087 369 ReservedPagesSize,\r
5d73d92f 370 BSCodePagesSize,\r
371 BSDataPagesSize,\r
372 RTCodePagesSize,\r
373 RTDataPagesSize,\r
374 LoadCodePagesSize,\r
375 LoadDataPagesSize,\r
c12383d5
JC
376 AvailPagesSize,\r
377 MmioSpacePagesSize,\r
378 MmioPortPagesSize,\r
379 UnusableMemoryPagesSize,\r
380 AcpiReclaimPagesSize,\r
381 AcpiNvsPagesSize,\r
38707d76
TS
382 PalCodePagesSize,\r
383 PersistentPagesSize\r
5d73d92f 384 );\r
385 }\r
386 }\r
387 }\r
388 ShellCommandLineFreeVarList (Package);\r
389 }\r
390\r
ac25ebdc
RN
391 if (Descriptors != NULL) {\r
392 FreePool(Descriptors);\r
5d73d92f 393 }\r
394\r
8bb61740
RN
395 //\r
396 // Free the memory list.\r
397 //\r
398 for (Link = GetFirstNode (&MemoryList); !IsNull (&MemoryList, Link); ) {\r
399 Link = RemoveEntryList (Link);\r
400 }\r
401\r
5d73d92f 402 return (ShellStatus);\r
403}\r
404\r