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