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