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