blob: a4eb1be27e54b576028b02b47cb18f771bb2fbb1 [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>
Liming Gao00ad50f2015-04-29 08:11:45 +00006 Copyright (c) 2010 - 2015, 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;
69 EFI_MEMORY_DESCRIPTOR *Buffer;
70 UINTN MapKey;
71 UINTN ItemSize;
72 UINT32 Version;
73 UINT8 *Walker;
74 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;
125 Buffer = NULL;
126 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 {
155 Status = gBS->GetMemoryMap(&Size, Buffer, &MapKey, &ItemSize, &Version);
156 if (Status == EFI_BUFFER_TOO_SMALL){
157 Size += SIZE_1KB;
jcarsey3737ac22011-03-25 21:22:20 +0000158 Buffer = AllocateZeroPool(Size);
jcarsey5d73d922010-11-16 22:36:37 +0000159 Status = gBS->GetMemoryMap(&Size, Buffer, &MapKey, &ItemSize, &Version);
160 }
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
jcarsey5d73d922010-11-16 22:36:37 +0000174 for (Walker = (UINT8*)Buffer; Walker < (((UINT8*)Buffer)+Size) && Walker != NULL; Walker += ItemSize){
175 switch (((EFI_MEMORY_DESCRIPTOR*)Walker)->Type) {
jcarsey5d73d922010-11-16 22:36:37 +0000176 case EfiReservedMemoryType:
jcarsey3737ac22011-03-25 21:22:20 +0000177 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);
jcarsey5d73d922010-11-16 22:36:37 +0000178 ReservedPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000179 break;
180 case EfiLoaderCode:
jcarsey3737ac22011-03-25 21:22:20 +0000181 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);
jcarsey5d73d922010-11-16 22:36:37 +0000182 LoadCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
183 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
184 break;
185 case EfiLoaderData:
jcarsey3737ac22011-03-25 21:22:20 +0000186 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);
jcarsey5d73d922010-11-16 22:36:37 +0000187 LoadDataPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
188 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
189 break;
190 case EfiBootServicesCode:
Chris Phillips73768082014-08-21 20:26:32 +0000191 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);
jcarsey5d73d922010-11-16 22:36:37 +0000192 BSCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
193 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
194 break;
195 case EfiBootServicesData:
Chris Phillips73768082014-08-21 20:26:32 +0000196 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);
jcarsey5d73d922010-11-16 22:36:37 +0000197 BSDataPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
198 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
199 break;
200 case EfiRuntimeServicesCode:
Chris Phillips73768082014-08-21 20:26:32 +0000201 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);
jcarsey5d73d922010-11-16 22:36:37 +0000202 RTCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
203 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
204 break;
205 case EfiRuntimeServicesData:
Chris Phillips73768082014-08-21 20:26:32 +0000206 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);
jcarsey5d73d922010-11-16 22:36:37 +0000207 RTDataPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
208 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
209 break;
210 case EfiConventionalMemory:
jcarsey3737ac22011-03-25 21:22:20 +0000211 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);
jcarsey5d73d922010-11-16 22:36:37 +0000212 AvailPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
213 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
214 break;
Liming Gao6c4542e2015-04-29 01:37:32 +0000215 case EfiPersistentMemory:
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);
Tapan Shah38707d72016-09-22 13:16:18 -0700217 PersistentPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
218 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
Liming Gao6c4542e2015-04-29 01:37:32 +0000219 break;
jcarsey5d73d922010-11-16 22:36:37 +0000220 case EfiUnusableMemory:
Chris Phillips73768082014-08-21 20:26:32 +0000221 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);
Jaben Carseyc12383d2014-08-05 20:57:08 +0000222 UnusableMemoryPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000223 break;
224 case EfiACPIReclaimMemory:
Chris Phillips73768082014-08-21 20:26:32 +0000225 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);
jcarsey5d73d922010-11-16 22:36:37 +0000226 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey3737ac22011-03-25 21:22:20 +0000227 AcpiReclaimPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000228 break;
229 case EfiACPIMemoryNVS:
Chris Phillips73768082014-08-21 20:26:32 +0000230 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);
jcarsey5d73d922010-11-16 22:36:37 +0000231 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey3737ac22011-03-25 21:22:20 +0000232 AcpiNvsPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000233 break;
234 case EfiMemoryMappedIO:
Chris Phillips73768082014-08-21 20:26:32 +0000235 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);
jcarsey3737ac22011-03-25 21:22:20 +0000236 MmioSpacePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000237 break;
238 case EfiMemoryMappedIOPortSpace:
Chris Phillips73768082014-08-21 20:26:32 +0000239 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);
Jaben Carseyc12383d2014-08-05 20:57:08 +0000240 MmioPortPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000241 break;
242 case EfiPalCode:
jcarsey3737ac22011-03-25 21:22:20 +0000243 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);
jcarsey5d73d922010-11-16 22:36:37 +0000244 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
Jaben Carseyc12383d2014-08-05 20:57:08 +0000245 PalCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000246 break;
247 default:
248 ASSERT(FALSE);
249 }
250 }
251 //
252 // print the summary
253 //
Chris Phillips73768082014-08-21 20:26:32 +0000254 ReservedPagesSize = MultU64x64(SIZE_4KB,ReservedPages);
255 LoadCodePagesSize = MultU64x64(SIZE_4KB,LoadCodePages);
256 LoadDataPagesSize = MultU64x64(SIZE_4KB,LoadDataPages);
257 BSCodePagesSize = MultU64x64(SIZE_4KB,BSCodePages);
258 BSDataPagesSize = MultU64x64(SIZE_4KB,BSDataPages);
259 RTDataPagesSize = MultU64x64(SIZE_4KB,RTDataPages);
260 RTCodePagesSize = MultU64x64(SIZE_4KB,RTCodePages);
261 AvailPagesSize = MultU64x64(SIZE_4KB,AvailPages);
262 TotalPagesSize = MultU64x64(SIZE_4KB,TotalPages);
263 AcpiReclaimPagesSize = MultU64x64(SIZE_4KB,AcpiReclaimPages);
264 AcpiNvsPagesSize = MultU64x64(SIZE_4KB,AcpiNvsPages);
265 MmioSpacePagesSize = MultU64x64(SIZE_4KB,MmioSpacePages);
266 MmioPortPagesSize = MultU64x64(SIZE_4KB,MmioPortPages);
267 PalCodePagesSize = MultU64x64(SIZE_4KB,PalCodePages);
Tapan Shah38707d72016-09-22 13:16:18 -0700268 PersistentPagesSize = MultU64x64(SIZE_4KB,PersistentPages);
Chris Phillips73768082014-08-21 20:26:32 +0000269 UnusableMemoryPagesSize = MultU64x64(SIZE_4KB,UnusableMemoryPages);
jcarsey5d73d922010-11-16 22:36:37 +0000270 if (!Sfo) {
271 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_SUMM), gShellDebug1HiiHandle,
272 ReservedPages, ReservedPagesSize,
273 LoadCodePages, LoadCodePagesSize,
274 LoadDataPages, LoadDataPagesSize,
275 BSCodePages, BSCodePagesSize,
276 BSDataPages, BSDataPagesSize,
jcarsey3737ac22011-03-25 21:22:20 +0000277 RTCodePages, RTCodePagesSize,
jcarsey5d73d922010-11-16 22:36:37 +0000278 RTDataPages, RTDataPagesSize,
jcarsey3737ac22011-03-25 21:22:20 +0000279 AcpiReclaimPages, AcpiReclaimPagesSize,
280 AcpiNvsPages, AcpiNvsPagesSize,
281 MmioSpacePages, MmioSpacePagesSize,
Chris Phillips73768082014-08-21 20:26:32 +0000282 MmioPortPages, MmioPortPagesSize,
283 PalCodePages, PalCodePagesSize,
jcarsey5d73d922010-11-16 22:36:37 +0000284 AvailPages, AvailPagesSize,
Tapan Shah38707d72016-09-22 13:16:18 -0700285 PersistentPages, PersistentPagesSize,
jcarsey5d73d922010-11-16 22:36:37 +0000286 DivU64x32(MultU64x64(SIZE_4KB,TotalPages), SIZE_1MB), TotalPagesSize
287 );
288 } else {
Chris Phillips73768082014-08-21 20:26:32 +0000289 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_SUMM_SFO), gShellDebug1HiiHandle,
jcarsey5d73d922010-11-16 22:36:37 +0000290 TotalPagesSize,
Chris Phillips73768082014-08-21 20:26:32 +0000291 ReservedPagesSize,
jcarsey5d73d922010-11-16 22:36:37 +0000292 BSCodePagesSize,
293 BSDataPagesSize,
294 RTCodePagesSize,
295 RTDataPagesSize,
296 LoadCodePagesSize,
297 LoadDataPagesSize,
Jaben Carseyc12383d2014-08-05 20:57:08 +0000298 AvailPagesSize,
299 MmioSpacePagesSize,
300 MmioPortPagesSize,
301 UnusableMemoryPagesSize,
302 AcpiReclaimPagesSize,
303 AcpiNvsPagesSize,
Tapan Shah38707d72016-09-22 13:16:18 -0700304 PalCodePagesSize,
305 PersistentPagesSize
jcarsey5d73d922010-11-16 22:36:37 +0000306 );
307 }
308 }
309 }
310 ShellCommandLineFreeVarList (Package);
311 }
312
313 if (Buffer != NULL) {
314 FreePool(Buffer);
315 }
316
317 return (ShellStatus);
318}
319