blob: 81c561f680c4d31c578a2896e39e360e1d3fbedf [file] [log] [blame]
jcarsey5d73d922010-11-16 22:36:37 +00001/** @file
2 Main file for Mode shell Debug1 function.
3
Tapan Shahc011b6c2015-02-04 22:25:01 +00004 (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>
Liming Gao00ad50f2015-04-29 08:11:45 +00005 Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
lgao4d0cec2d2013-05-22 02:19:16 +00006 This program and the accompanying materials
jcarsey5d73d922010-11-16 22:36:37 +00007 are licensed and made available under the terms and conditions of the BSD License
8 which acModeanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
10
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13
14**/
15
Chris Phillips73768082014-08-21 20:26:32 +000016//
17// Need full names for Standard-Format Output
18//
jcarsey3737ac22011-03-25 21:22:20 +000019STATIC CONST CHAR16 NameEfiReservedMemoryType[] = L"Reserved";
20STATIC CONST CHAR16 NameEfiLoaderCode[] = L"LoaderCode";
21STATIC CONST CHAR16 NameEfiLoaderData[] = L"LoaderData";
Chris Phillips73768082014-08-21 20:26:32 +000022STATIC CONST CHAR16 NameEfiBootServicesCode[] = L"BootServiceCode";
23STATIC CONST CHAR16 NameEfiBootServicesData[] = L"BootServiceData";
24STATIC CONST CHAR16 NameEfiRuntimeServicesCode[] = L"RuntimeCode";
25STATIC CONST CHAR16 NameEfiRuntimeServicesData[] = L"RuntimeData";
jcarsey3737ac22011-03-25 21:22:20 +000026STATIC CONST CHAR16 NameEfiConventionalMemory[] = L"Available";
Liming Gao6c4542e2015-04-29 01:37:32 +000027STATIC CONST CHAR16 NameEfiPersistentMemory[] = L"Persistent";
Chris Phillips73768082014-08-21 20:26:32 +000028STATIC CONST CHAR16 NameEfiUnusableMemory[] = L"UnusableMemory";
29STATIC CONST CHAR16 NameEfiACPIReclaimMemory[] = L"ACPIReclaimMemory";
30STATIC CONST CHAR16 NameEfiACPIMemoryNVS[] = L"ACPIMemoryNVS";
31STATIC CONST CHAR16 NameEfiMemoryMappedIO[] = L"MemoryMappedIO";
32STATIC CONST CHAR16 NameEfiMemoryMappedIOPortSpace[] = L"MemoryMappedIOPortSpace";
jcarsey3737ac22011-03-25 21:22:20 +000033STATIC CONST CHAR16 NameEfiPalCode[] = L"PalCode";
jcarsey5d73d922010-11-16 22:36:37 +000034
Chris Phillips73768082014-08-21 20:26:32 +000035//
36// Need short names for some memory types
37//
38STATIC CONST CHAR16 NameEfiBootServicesCodeShort[] = L"BS_Code";
39STATIC CONST CHAR16 NameEfiBootServicesDataShort[] = L"BS_Data";
40STATIC CONST CHAR16 NameEfiRuntimeServicesCodeShort[] = L"RT_Code";
41STATIC CONST CHAR16 NameEfiRuntimeServicesDataShort[] = L"RT_Data";
42STATIC CONST CHAR16 NameEfiUnusableMemoryShort[] = L"Unusable";
43STATIC CONST CHAR16 NameEfiACPIReclaimMemoryShort[] = L"ACPI_Recl";
44STATIC CONST CHAR16 NameEfiACPIMemoryNVSShort[] = L"ACPI_NVS";
45STATIC CONST CHAR16 NameEfiMemoryMappedIOShort[] = L"MMIO";
46STATIC CONST CHAR16 NameEfiMemoryMappedIOPortSpaceShort[] = L"MMIO_Port";
47
jcarsey5d73d922010-11-16 22:36:37 +000048#include "UefiShellDebug1CommandsLib.h"
49
jcarsey3737ac22011-03-25 21:22:20 +000050/**
51 Function for 'memmap' command.
52
53 @param[in] ImageHandle Handle to the Image (NULL if Internal).
54 @param[in] SystemTable Pointer to the System Table (NULL if Internal).
55**/
jcarsey5d73d922010-11-16 22:36:37 +000056SHELL_STATUS
57EFIAPI
58ShellCommandRunMemMap (
59 IN EFI_HANDLE ImageHandle,
60 IN EFI_SYSTEM_TABLE *SystemTable
61 )
62{
63 EFI_STATUS Status;
64 LIST_ENTRY *Package;
65 CHAR16 *ProblemParam;
66 SHELL_STATUS ShellStatus;
67 UINTN Size;
68 EFI_MEMORY_DESCRIPTOR *Buffer;
69 UINTN MapKey;
70 UINTN ItemSize;
71 UINT32 Version;
72 UINT8 *Walker;
73 UINT64 ReservedPages;
74 UINT64 LoadCodePages;
75 UINT64 LoadDataPages;
76 UINT64 BSCodePages;
77 UINT64 BSDataPages;
78 UINT64 RTDataPages;
79 UINT64 RTCodePages;
80 UINT64 AvailPages;
81 UINT64 TotalPages;
82 UINT64 ReservedPagesSize;
83 UINT64 LoadCodePagesSize;
84 UINT64 LoadDataPagesSize;
85 UINT64 BSCodePagesSize;
86 UINT64 BSDataPagesSize;
87 UINT64 RTDataPagesSize;
88 UINT64 RTCodePagesSize;
89 UINT64 AvailPagesSize;
90 UINT64 TotalPagesSize;
jcarsey3737ac22011-03-25 21:22:20 +000091 UINT64 AcpiReclaimPages;
92 UINT64 AcpiNvsPages;
93 UINT64 MmioSpacePages;
94 UINT64 AcpiReclaimPagesSize;
95 UINT64 AcpiNvsPagesSize;
96 UINT64 MmioSpacePagesSize;
Jaben Carseyc12383d2014-08-05 20:57:08 +000097 UINT64 MmioPortPages;
98 UINT64 MmioPortPagesSize;
99 UINT64 UnusableMemoryPages;
100 UINT64 UnusableMemoryPagesSize;
101 UINT64 PalCodePages;
102 UINT64 PalCodePagesSize;
jcarsey5d73d922010-11-16 22:36:37 +0000103 BOOLEAN Sfo;
104
jcarsey3737ac22011-03-25 21:22:20 +0000105 AcpiReclaimPages = 0;
106 AcpiNvsPages = 0;
107 MmioSpacePages = 0;
jcarsey5d73d922010-11-16 22:36:37 +0000108 TotalPages = 0;
109 ReservedPages = 0;
110 LoadCodePages = 0;
111 LoadDataPages = 0;
112 BSCodePages = 0;
113 BSDataPages = 0;
114 RTDataPages = 0;
115 RTCodePages = 0;
116 AvailPages = 0;
Jaben Carseyc12383d2014-08-05 20:57:08 +0000117 MmioPortPages = 0;
118 UnusableMemoryPages = 0;
119 PalCodePages = 0;
jcarsey5d73d922010-11-16 22:36:37 +0000120 Size = 0;
121 Buffer = NULL;
122 ShellStatus = SHELL_SUCCESS;
123 Status = EFI_SUCCESS;
124
125 //
126 // initialize the shell lib (we must be in non-auto-init...)
127 //
128 Status = ShellInitialize();
129 ASSERT_EFI_ERROR(Status);
130
131 Status = CommandInit();
132 ASSERT_EFI_ERROR(Status);
133
134 //
135 // parse the command line
136 //
137 Status = ShellCommandLineParse (SfoParamList, &Package, &ProblemParam, TRUE);
138 if (EFI_ERROR(Status)) {
139 if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
Tapan Shah4092a8f2015-02-03 21:22:53 +0000140 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"memmap", ProblemParam);
jcarsey5d73d922010-11-16 22:36:37 +0000141 FreePool(ProblemParam);
142 ShellStatus = SHELL_INVALID_PARAMETER;
143 } else {
144 ASSERT(FALSE);
145 }
146 } else {
147 if (ShellCommandLineGetCount(Package) > 1) {
Tapan Shah4092a8f2015-02-03 21:22:53 +0000148 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"memmap");
jcarsey5d73d922010-11-16 22:36:37 +0000149 ShellStatus = SHELL_INVALID_PARAMETER;
150 } else {
151 Status = gBS->GetMemoryMap(&Size, Buffer, &MapKey, &ItemSize, &Version);
152 if (Status == EFI_BUFFER_TOO_SMALL){
153 Size += SIZE_1KB;
jcarsey3737ac22011-03-25 21:22:20 +0000154 Buffer = AllocateZeroPool(Size);
jcarsey5d73d922010-11-16 22:36:37 +0000155 Status = gBS->GetMemoryMap(&Size, Buffer, &MapKey, &ItemSize, &Version);
156 }
157 if (EFI_ERROR(Status)) {
Tapan Shah4092a8f2015-02-03 21:22:53 +0000158 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_GET_FAILED), gShellDebug1HiiHandle, L"memmap");
jcarsey5d73d922010-11-16 22:36:37 +0000159 ShellStatus = SHELL_ACCESS_DENIED;
160 } else {
161 ASSERT(Version == EFI_MEMORY_DESCRIPTOR_VERSION);
Chris Phillips73768082014-08-21 20:26:32 +0000162
jcarsey5d73d922010-11-16 22:36:37 +0000163 Sfo = ShellCommandLineGetFlag(Package, L"-sfo");
Chris Phillips73768082014-08-21 20:26:32 +0000164 if (!Sfo) {
165 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_HEAD), gShellDebug1HiiHandle);
166 } else {
167 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_SFO_HEADER), gShellDebug1HiiHandle, L"memmap");
168 }
169
jcarsey5d73d922010-11-16 22:36:37 +0000170 for (Walker = (UINT8*)Buffer; Walker < (((UINT8*)Buffer)+Size) && Walker != NULL; Walker += ItemSize){
171 switch (((EFI_MEMORY_DESCRIPTOR*)Walker)->Type) {
jcarsey5d73d922010-11-16 22:36:37 +0000172 case EfiReservedMemoryType:
jcarsey3737ac22011-03-25 21:22:20 +0000173 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 +0000174 ReservedPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000175 break;
176 case EfiLoaderCode:
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, 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 +0000178 LoadCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
179 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
180 break;
181 case EfiLoaderData:
jcarsey3737ac22011-03-25 21:22:20 +0000182 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 +0000183 LoadDataPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
184 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
185 break;
186 case EfiBootServicesCode:
Chris Phillips73768082014-08-21 20:26:32 +0000187 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 +0000188 BSCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
189 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
190 break;
191 case EfiBootServicesData:
Chris Phillips73768082014-08-21 20:26:32 +0000192 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 +0000193 BSDataPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
194 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
195 break;
196 case EfiRuntimeServicesCode:
Chris Phillips73768082014-08-21 20:26:32 +0000197 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 +0000198 RTCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
199 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
200 break;
201 case EfiRuntimeServicesData:
Chris Phillips73768082014-08-21 20:26:32 +0000202 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 +0000203 RTDataPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
204 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
205 break;
206 case EfiConventionalMemory:
jcarsey3737ac22011-03-25 21:22:20 +0000207 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 +0000208 AvailPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
209 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
210 break;
Liming Gao6c4542e2015-04-29 01:37:32 +0000211 case EfiPersistentMemory:
212 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);
213 AvailPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
214 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
215 break;
jcarsey5d73d922010-11-16 22:36:37 +0000216 case EfiUnusableMemory:
Chris Phillips73768082014-08-21 20:26:32 +0000217 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 +0000218 UnusableMemoryPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000219 break;
220 case EfiACPIReclaimMemory:
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?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 +0000222 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey3737ac22011-03-25 21:22:20 +0000223 AcpiReclaimPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000224 break;
225 case EfiACPIMemoryNVS:
Chris Phillips73768082014-08-21 20:26:32 +0000226 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 +0000227 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey3737ac22011-03-25 21:22:20 +0000228 AcpiNvsPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000229 break;
230 case EfiMemoryMappedIO:
Chris Phillips73768082014-08-21 20:26:32 +0000231 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 +0000232 MmioSpacePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000233 break;
234 case EfiMemoryMappedIOPortSpace:
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?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 +0000236 MmioPortPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000237 break;
238 case EfiPalCode:
jcarsey3737ac22011-03-25 21:22:20 +0000239 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 +0000240 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
Jaben Carseyc12383d2014-08-05 20:57:08 +0000241 PalCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;
jcarsey5d73d922010-11-16 22:36:37 +0000242 break;
243 default:
244 ASSERT(FALSE);
245 }
246 }
247 //
248 // print the summary
249 //
Chris Phillips73768082014-08-21 20:26:32 +0000250 ReservedPagesSize = MultU64x64(SIZE_4KB,ReservedPages);
251 LoadCodePagesSize = MultU64x64(SIZE_4KB,LoadCodePages);
252 LoadDataPagesSize = MultU64x64(SIZE_4KB,LoadDataPages);
253 BSCodePagesSize = MultU64x64(SIZE_4KB,BSCodePages);
254 BSDataPagesSize = MultU64x64(SIZE_4KB,BSDataPages);
255 RTDataPagesSize = MultU64x64(SIZE_4KB,RTDataPages);
256 RTCodePagesSize = MultU64x64(SIZE_4KB,RTCodePages);
257 AvailPagesSize = MultU64x64(SIZE_4KB,AvailPages);
258 TotalPagesSize = MultU64x64(SIZE_4KB,TotalPages);
259 AcpiReclaimPagesSize = MultU64x64(SIZE_4KB,AcpiReclaimPages);
260 AcpiNvsPagesSize = MultU64x64(SIZE_4KB,AcpiNvsPages);
261 MmioSpacePagesSize = MultU64x64(SIZE_4KB,MmioSpacePages);
262 MmioPortPagesSize = MultU64x64(SIZE_4KB,MmioPortPages);
263 PalCodePagesSize = MultU64x64(SIZE_4KB,PalCodePages);
264 UnusableMemoryPagesSize = MultU64x64(SIZE_4KB,UnusableMemoryPages);
jcarsey5d73d922010-11-16 22:36:37 +0000265 if (!Sfo) {
266 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_SUMM), gShellDebug1HiiHandle,
267 ReservedPages, ReservedPagesSize,
268 LoadCodePages, LoadCodePagesSize,
269 LoadDataPages, LoadDataPagesSize,
270 BSCodePages, BSCodePagesSize,
271 BSDataPages, BSDataPagesSize,
jcarsey3737ac22011-03-25 21:22:20 +0000272 RTCodePages, RTCodePagesSize,
jcarsey5d73d922010-11-16 22:36:37 +0000273 RTDataPages, RTDataPagesSize,
jcarsey3737ac22011-03-25 21:22:20 +0000274 AcpiReclaimPages, AcpiReclaimPagesSize,
275 AcpiNvsPages, AcpiNvsPagesSize,
276 MmioSpacePages, MmioSpacePagesSize,
Chris Phillips73768082014-08-21 20:26:32 +0000277 MmioPortPages, MmioPortPagesSize,
278 PalCodePages, PalCodePagesSize,
jcarsey5d73d922010-11-16 22:36:37 +0000279 AvailPages, AvailPagesSize,
280 DivU64x32(MultU64x64(SIZE_4KB,TotalPages), SIZE_1MB), TotalPagesSize
281 );
282 } else {
Chris Phillips73768082014-08-21 20:26:32 +0000283 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_SUMM_SFO), gShellDebug1HiiHandle,
jcarsey5d73d922010-11-16 22:36:37 +0000284 TotalPagesSize,
Chris Phillips73768082014-08-21 20:26:32 +0000285 ReservedPagesSize,
jcarsey5d73d922010-11-16 22:36:37 +0000286 BSCodePagesSize,
287 BSDataPagesSize,
288 RTCodePagesSize,
289 RTDataPagesSize,
290 LoadCodePagesSize,
291 LoadDataPagesSize,
Jaben Carseyc12383d2014-08-05 20:57:08 +0000292 AvailPagesSize,
293 MmioSpacePagesSize,
294 MmioPortPagesSize,
295 UnusableMemoryPagesSize,
296 AcpiReclaimPagesSize,
297 AcpiNvsPagesSize,
298 PalCodePagesSize
jcarsey5d73d922010-11-16 22:36:37 +0000299 );
300 }
301 }
302 }
303 ShellCommandLineFreeVarList (Package);
304 }
305
306 if (Buffer != NULL) {
307 FreePool(Buffer);
308 }
309
310 return (ShellStatus);
311}
312