blob: a99e3c47234c27cfbb07f9ac169f87bca1242d8b [file] [log] [blame]
jcarsey5d73d922010-11-16 22:36:37 +00001/** @file
2 Main file for Mode shell Debug1 function.
3
Tapan Shah38707d72016-09-22 13:16:18 -07004 (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
Tapan Shahc011b6c2015-02-04 22:25:01 +00005 (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>
Ruiyu Ni14ddca52017-05-11 16:12:10 +08006 Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
lgao4d0cec2d2013-05-22 02:19:16 +00007 This program and the accompanying materials
jcarsey5d73d922010-11-16 22:36:37 +00008 are licensed and made available under the terms and conditions of the BSD License
9 which acModeanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
11
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15**/
16
Chris Phillips73768082014-08-21 20:26:32 +000017//
18// Need full names for Standard-Format Output
19//
jcarsey3737ac22011-03-25 21:22:20 +000020STATIC CONST CHAR16 NameEfiReservedMemoryType[] = L"Reserved";
21STATIC CONST CHAR16 NameEfiLoaderCode[] = L"LoaderCode";
22STATIC CONST CHAR16 NameEfiLoaderData[] = L"LoaderData";
Chris Phillips73768082014-08-21 20:26:32 +000023STATIC CONST CHAR16 NameEfiBootServicesCode[] = L"BootServiceCode";
24STATIC CONST CHAR16 NameEfiBootServicesData[] = L"BootServiceData";
25STATIC CONST CHAR16 NameEfiRuntimeServicesCode[] = L"RuntimeCode";
26STATIC CONST CHAR16 NameEfiRuntimeServicesData[] = L"RuntimeData";
jcarsey3737ac22011-03-25 21:22:20 +000027STATIC CONST CHAR16 NameEfiConventionalMemory[] = L"Available";
Liming Gao6c4542e2015-04-29 01:37:32 +000028STATIC CONST CHAR16 NameEfiPersistentMemory[] = L"Persistent";
Chris Phillips73768082014-08-21 20:26:32 +000029STATIC CONST CHAR16 NameEfiUnusableMemory[] = L"UnusableMemory";
30STATIC CONST CHAR16 NameEfiACPIReclaimMemory[] = L"ACPIReclaimMemory";
31STATIC CONST CHAR16 NameEfiACPIMemoryNVS[] = L"ACPIMemoryNVS";
32STATIC CONST CHAR16 NameEfiMemoryMappedIO[] = L"MemoryMappedIO";
33STATIC CONST CHAR16 NameEfiMemoryMappedIOPortSpace[] = L"MemoryMappedIOPortSpace";
jcarsey3737ac22011-03-25 21:22:20 +000034STATIC CONST CHAR16 NameEfiPalCode[] = L"PalCode";
jcarsey5d73d922010-11-16 22:36:37 +000035
Chris Phillips73768082014-08-21 20:26:32 +000036//
37// Need short names for some memory types
38//
39STATIC CONST CHAR16 NameEfiBootServicesCodeShort[] = L"BS_Code";
40STATIC CONST CHAR16 NameEfiBootServicesDataShort[] = L"BS_Data";
41STATIC CONST CHAR16 NameEfiRuntimeServicesCodeShort[] = L"RT_Code";
42STATIC CONST CHAR16 NameEfiRuntimeServicesDataShort[] = L"RT_Data";
43STATIC CONST CHAR16 NameEfiUnusableMemoryShort[] = L"Unusable";
44STATIC CONST CHAR16 NameEfiACPIReclaimMemoryShort[] = L"ACPI_Recl";
45STATIC CONST CHAR16 NameEfiACPIMemoryNVSShort[] = L"ACPI_NVS";
46STATIC CONST CHAR16 NameEfiMemoryMappedIOShort[] = L"MMIO";
47STATIC CONST CHAR16 NameEfiMemoryMappedIOPortSpaceShort[] = L"MMIO_Port";
48
jcarsey5d73d922010-11-16 22:36:37 +000049#include "UefiShellDebug1CommandsLib.h"
50
jcarsey3737ac22011-03-25 21:22:20 +000051/**
52 Function for 'memmap' command.
53
54 @param[in] ImageHandle Handle to the Image (NULL if Internal).
55 @param[in] SystemTable Pointer to the System Table (NULL if Internal).
56**/
jcarsey5d73d922010-11-16 22:36:37 +000057SHELL_STATUS
58EFIAPI
59ShellCommandRunMemMap (
60 IN EFI_HANDLE ImageHandle,
61 IN EFI_SYSTEM_TABLE *SystemTable
62 )
63{
64 EFI_STATUS Status;
65 LIST_ENTRY *Package;
66 CHAR16 *ProblemParam;
67 SHELL_STATUS ShellStatus;
68 UINTN Size;
Ruiyu Ni14ddca52017-05-11 16:12:10 +080069 EFI_MEMORY_DESCRIPTOR *Descriptors;
jcarsey5d73d922010-11-16 22:36:37 +000070 UINTN MapKey;
71 UINTN ItemSize;
72 UINT32 Version;
Ruiyu Ni14ddca52017-05-11 16:12:10 +080073 EFI_MEMORY_DESCRIPTOR *Walker;
jcarsey5d73d922010-11-16 22:36:37 +000074 UINT64 ReservedPages;
75 UINT64 LoadCodePages;
76 UINT64 LoadDataPages;
77 UINT64 BSCodePages;
78 UINT64 BSDataPages;
79 UINT64 RTDataPages;
80 UINT64 RTCodePages;
81 UINT64 AvailPages;
82 UINT64 TotalPages;
83 UINT64 ReservedPagesSize;
84 UINT64 LoadCodePagesSize;
85 UINT64 LoadDataPagesSize;
86 UINT64 BSCodePagesSize;
87 UINT64 BSDataPagesSize;
88 UINT64 RTDataPagesSize;
89 UINT64 RTCodePagesSize;
90 UINT64 AvailPagesSize;
91 UINT64 TotalPagesSize;
jcarsey3737ac22011-03-25 21:22:20 +000092 UINT64 AcpiReclaimPages;
93 UINT64 AcpiNvsPages;
94 UINT64 MmioSpacePages;
95 UINT64 AcpiReclaimPagesSize;
96 UINT64 AcpiNvsPagesSize;
97 UINT64 MmioSpacePagesSize;
Jaben Carseyc12383d2014-08-05 20:57:08 +000098 UINT64 MmioPortPages;
99 UINT64 MmioPortPagesSize;
100 UINT64 UnusableMemoryPages;
101 UINT64 UnusableMemoryPagesSize;
102 UINT64 PalCodePages;
103 UINT64 PalCodePagesSize;
Tapan Shah38707d72016-09-22 13:16:18 -0700104 UINT64 PersistentPages;
105 UINT64 PersistentPagesSize;
jcarsey5d73d922010-11-16 22:36:37 +0000106 BOOLEAN Sfo;
107
jcarsey3737ac22011-03-25 21:22:20 +0000108 AcpiReclaimPages = 0;
109 AcpiNvsPages = 0;
110 MmioSpacePages = 0;
jcarsey5d73d922010-11-16 22:36:37 +0000111 TotalPages = 0;
112 ReservedPages = 0;
113 LoadCodePages = 0;
114 LoadDataPages = 0;
115 BSCodePages = 0;
116 BSDataPages = 0;
117 RTDataPages = 0;
118 RTCodePages = 0;
119 AvailPages = 0;
Jaben Carseyc12383d2014-08-05 20:57:08 +0000120 MmioPortPages = 0;
121 UnusableMemoryPages = 0;
122 PalCodePages = 0;
Tapan Shah38707d72016-09-22 13:16:18 -0700123 PersistentPages = 0;
jcarsey5d73d922010-11-16 22:36:37 +0000124 Size = 0;
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800125 Descriptors = NULL;
jcarsey5d73d922010-11-16 22:36:37 +0000126 ShellStatus = SHELL_SUCCESS;
127 Status = EFI_SUCCESS;
128
129 //
130 // initialize the shell lib (we must be in non-auto-init...)
131 //
132 Status = ShellInitialize();
133 ASSERT_EFI_ERROR(Status);
134
135 Status = CommandInit();
136 ASSERT_EFI_ERROR(Status);
137
138 //
139 // parse the command line
140 //
141 Status = ShellCommandLineParse (SfoParamList, &Package, &ProblemParam, TRUE);
142 if (EFI_ERROR(Status)) {
143 if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
Tapan Shah4092a8f2015-02-03 21:22:53 +0000144 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"memmap", ProblemParam);
jcarsey5d73d922010-11-16 22:36:37 +0000145 FreePool(ProblemParam);
146 ShellStatus = SHELL_INVALID_PARAMETER;
147 } else {
148 ASSERT(FALSE);
149 }
150 } else {
151 if (ShellCommandLineGetCount(Package) > 1) {
Tapan Shah4092a8f2015-02-03 21:22:53 +0000152 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"memmap");
jcarsey5d73d922010-11-16 22:36:37 +0000153 ShellStatus = SHELL_INVALID_PARAMETER;
154 } else {
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800155 Status = gBS->GetMemoryMap(&Size, Descriptors, &MapKey, &ItemSize, &Version);
jcarsey5d73d922010-11-16 22:36:37 +0000156 if (Status == EFI_BUFFER_TOO_SMALL){
157 Size += SIZE_1KB;
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800158 Descriptors = AllocateZeroPool(Size);
159 Status = gBS->GetMemoryMap(&Size, Descriptors, &MapKey, &ItemSize, &Version);
jcarsey5d73d922010-11-16 22:36:37 +0000160 }
161 if (EFI_ERROR(Status)) {
Tapan Shah4092a8f2015-02-03 21:22:53 +0000162 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_GET_FAILED), gShellDebug1HiiHandle, L"memmap");
jcarsey5d73d922010-11-16 22:36:37 +0000163 ShellStatus = SHELL_ACCESS_DENIED;
164 } else {
165 ASSERT(Version == EFI_MEMORY_DESCRIPTOR_VERSION);
Chris Phillips73768082014-08-21 20:26:32 +0000166
jcarsey5d73d922010-11-16 22:36:37 +0000167 Sfo = ShellCommandLineGetFlag(Package, L"-sfo");
Chris Phillips73768082014-08-21 20:26:32 +0000168 if (!Sfo) {
169 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_HEAD), gShellDebug1HiiHandle);
170 } else {
171 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_SFO_HEADER), gShellDebug1HiiHandle, L"memmap");
172 }
173
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800174 for ( Walker = Descriptors
175 ; (Walker < (EFI_MEMORY_DESCRIPTOR *) ((UINT8*)Descriptors + Size)) && (Walker != NULL)
176 ; Walker = (EFI_MEMORY_DESCRIPTOR *) ((UINT8 *)Walker + ItemSize)
177 ){
178 switch (Walker->Type) {
jcarsey5d73d922010-11-16 22:36:37 +0000179 case EfiReservedMemoryType:
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800180 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);
181 ReservedPages += Walker->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000182 break;
183 case EfiLoaderCode:
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800184 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);
185 LoadCodePages += Walker->NumberOfPages;
186 TotalPages += Walker->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000187 break;
188 case EfiLoaderData:
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800189 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);
190 LoadDataPages += Walker->NumberOfPages;
191 TotalPages += Walker->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000192 break;
193 case EfiBootServicesCode:
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800194 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);
195 BSCodePages += Walker->NumberOfPages;
196 TotalPages += Walker->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000197 break;
198 case EfiBootServicesData:
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800199 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);
200 BSDataPages += Walker->NumberOfPages;
201 TotalPages += Walker->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000202 break;
203 case EfiRuntimeServicesCode:
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800204 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);
205 RTCodePages += Walker->NumberOfPages;
206 TotalPages += Walker->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000207 break;
208 case EfiRuntimeServicesData:
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800209 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);
210 RTDataPages += Walker->NumberOfPages;
211 TotalPages += Walker->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000212 break;
213 case EfiConventionalMemory:
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800214 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);
215 AvailPages += Walker->NumberOfPages;
216 TotalPages += Walker->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000217 break;
Liming Gao6c4542e2015-04-29 01:37:32 +0000218 case EfiPersistentMemory:
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800219 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);
220 PersistentPages += Walker->NumberOfPages;
221 TotalPages += Walker->NumberOfPages;
Liming Gao6c4542e2015-04-29 01:37:32 +0000222 break;
jcarsey5d73d922010-11-16 22:36:37 +0000223 case EfiUnusableMemory:
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800224 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);
225 UnusableMemoryPages += Walker->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000226 break;
227 case EfiACPIReclaimMemory:
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800228 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);
229 TotalPages += Walker->NumberOfPages;
230 AcpiReclaimPages += Walker->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000231 break;
232 case EfiACPIMemoryNVS:
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800233 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);
234 TotalPages += Walker->NumberOfPages;
235 AcpiNvsPages += Walker->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000236 break;
237 case EfiMemoryMappedIO:
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800238 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);
239 MmioSpacePages += Walker->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000240 break;
241 case EfiMemoryMappedIOPortSpace:
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800242 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);
243 MmioPortPages += Walker->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000244 break;
245 case EfiPalCode:
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800246 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);
247 TotalPages += Walker->NumberOfPages;
248 PalCodePages += Walker->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000249 break;
250 default:
251 ASSERT(FALSE);
252 }
253 }
254 //
255 // print the summary
256 //
Chris Phillips73768082014-08-21 20:26:32 +0000257 ReservedPagesSize = MultU64x64(SIZE_4KB,ReservedPages);
258 LoadCodePagesSize = MultU64x64(SIZE_4KB,LoadCodePages);
259 LoadDataPagesSize = MultU64x64(SIZE_4KB,LoadDataPages);
260 BSCodePagesSize = MultU64x64(SIZE_4KB,BSCodePages);
261 BSDataPagesSize = MultU64x64(SIZE_4KB,BSDataPages);
262 RTDataPagesSize = MultU64x64(SIZE_4KB,RTDataPages);
263 RTCodePagesSize = MultU64x64(SIZE_4KB,RTCodePages);
264 AvailPagesSize = MultU64x64(SIZE_4KB,AvailPages);
265 TotalPagesSize = MultU64x64(SIZE_4KB,TotalPages);
266 AcpiReclaimPagesSize = MultU64x64(SIZE_4KB,AcpiReclaimPages);
267 AcpiNvsPagesSize = MultU64x64(SIZE_4KB,AcpiNvsPages);
268 MmioSpacePagesSize = MultU64x64(SIZE_4KB,MmioSpacePages);
269 MmioPortPagesSize = MultU64x64(SIZE_4KB,MmioPortPages);
270 PalCodePagesSize = MultU64x64(SIZE_4KB,PalCodePages);
Tapan Shah38707d72016-09-22 13:16:18 -0700271 PersistentPagesSize = MultU64x64(SIZE_4KB,PersistentPages);
Chris Phillips73768082014-08-21 20:26:32 +0000272 UnusableMemoryPagesSize = MultU64x64(SIZE_4KB,UnusableMemoryPages);
jcarsey5d73d922010-11-16 22:36:37 +0000273 if (!Sfo) {
274 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_SUMM), gShellDebug1HiiHandle,
275 ReservedPages, ReservedPagesSize,
276 LoadCodePages, LoadCodePagesSize,
277 LoadDataPages, LoadDataPagesSize,
278 BSCodePages, BSCodePagesSize,
279 BSDataPages, BSDataPagesSize,
jcarsey3737ac22011-03-25 21:22:20 +0000280 RTCodePages, RTCodePagesSize,
jcarsey5d73d922010-11-16 22:36:37 +0000281 RTDataPages, RTDataPagesSize,
jcarsey3737ac22011-03-25 21:22:20 +0000282 AcpiReclaimPages, AcpiReclaimPagesSize,
283 AcpiNvsPages, AcpiNvsPagesSize,
284 MmioSpacePages, MmioSpacePagesSize,
Chris Phillips73768082014-08-21 20:26:32 +0000285 MmioPortPages, MmioPortPagesSize,
286 PalCodePages, PalCodePagesSize,
jcarsey5d73d922010-11-16 22:36:37 +0000287 AvailPages, AvailPagesSize,
Tapan Shah38707d72016-09-22 13:16:18 -0700288 PersistentPages, PersistentPagesSize,
jcarsey5d73d922010-11-16 22:36:37 +0000289 DivU64x32(MultU64x64(SIZE_4KB,TotalPages), SIZE_1MB), TotalPagesSize
290 );
291 } else {
Chris Phillips73768082014-08-21 20:26:32 +0000292 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_SUMM_SFO), gShellDebug1HiiHandle,
jcarsey5d73d922010-11-16 22:36:37 +0000293 TotalPagesSize,
Chris Phillips73768082014-08-21 20:26:32 +0000294 ReservedPagesSize,
jcarsey5d73d922010-11-16 22:36:37 +0000295 BSCodePagesSize,
296 BSDataPagesSize,
297 RTCodePagesSize,
298 RTDataPagesSize,
299 LoadCodePagesSize,
300 LoadDataPagesSize,
Jaben Carseyc12383d2014-08-05 20:57:08 +0000301 AvailPagesSize,
302 MmioSpacePagesSize,
303 MmioPortPagesSize,
304 UnusableMemoryPagesSize,
305 AcpiReclaimPagesSize,
306 AcpiNvsPagesSize,
Tapan Shah38707d72016-09-22 13:16:18 -0700307 PalCodePagesSize,
308 PersistentPagesSize
jcarsey5d73d922010-11-16 22:36:37 +0000309 );
310 }
311 }
312 }
313 ShellCommandLineFreeVarList (Package);
314 }
315
Ruiyu Ni14ddca52017-05-11 16:12:10 +0800316 if (Descriptors != NULL) {
317 FreePool(Descriptors);
jcarsey5d73d922010-11-16 22:36:37 +0000318 }
319
320 return (ShellStatus);
321}
322