2 Main file for Mode shell Debug1 function.
4 (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
5 (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>
6 Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
7 This program and the accompanying materials
8 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
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.
18 // Need full names for Standard-Format Output
20 STATIC CONST CHAR16 NameEfiReservedMemoryType
[] = L
"Reserved";
21 STATIC CONST CHAR16 NameEfiLoaderCode
[] = L
"LoaderCode";
22 STATIC CONST CHAR16 NameEfiLoaderData
[] = L
"LoaderData";
23 STATIC CONST CHAR16 NameEfiBootServicesCode
[] = L
"BootServiceCode";
24 STATIC CONST CHAR16 NameEfiBootServicesData
[] = L
"BootServiceData";
25 STATIC CONST CHAR16 NameEfiRuntimeServicesCode
[] = L
"RuntimeCode";
26 STATIC CONST CHAR16 NameEfiRuntimeServicesData
[] = L
"RuntimeData";
27 STATIC CONST CHAR16 NameEfiConventionalMemory
[] = L
"Available";
28 STATIC CONST CHAR16 NameEfiPersistentMemory
[] = L
"Persistent";
29 STATIC CONST CHAR16 NameEfiUnusableMemory
[] = L
"UnusableMemory";
30 STATIC CONST CHAR16 NameEfiACPIReclaimMemory
[] = L
"ACPIReclaimMemory";
31 STATIC CONST CHAR16 NameEfiACPIMemoryNVS
[] = L
"ACPIMemoryNVS";
32 STATIC CONST CHAR16 NameEfiMemoryMappedIO
[] = L
"MemoryMappedIO";
33 STATIC CONST CHAR16 NameEfiMemoryMappedIOPortSpace
[] = L
"MemoryMappedIOPortSpace";
34 STATIC CONST CHAR16 NameEfiPalCode
[] = L
"PalCode";
37 // Need short names for some memory types
39 STATIC CONST CHAR16 NameEfiBootServicesCodeShort
[] = L
"BS_Code";
40 STATIC CONST CHAR16 NameEfiBootServicesDataShort
[] = L
"BS_Data";
41 STATIC CONST CHAR16 NameEfiRuntimeServicesCodeShort
[] = L
"RT_Code";
42 STATIC CONST CHAR16 NameEfiRuntimeServicesDataShort
[] = L
"RT_Data";
43 STATIC CONST CHAR16 NameEfiUnusableMemoryShort
[] = L
"Unusable";
44 STATIC CONST CHAR16 NameEfiACPIReclaimMemoryShort
[] = L
"ACPI_Recl";
45 STATIC CONST CHAR16 NameEfiACPIMemoryNVSShort
[] = L
"ACPI_NVS";
46 STATIC CONST CHAR16 NameEfiMemoryMappedIOShort
[] = L
"MMIO";
47 STATIC CONST CHAR16 NameEfiMemoryMappedIOPortSpaceShort
[] = L
"MMIO_Port";
49 #include "UefiShellDebug1CommandsLib.h"
55 } MEMORY_LENGTH_ENTRY
;
58 Add the length of the specified type to List.
60 @param List A list to hold all pairs of <Type, NumberOfPages>.
61 @param Type Memory type.
62 @param NumberOfPages Number of pages.
71 MEMORY_LENGTH_ENTRY
*Entry
;
72 MEMORY_LENGTH_ENTRY
*NewEntry
;
76 for (Link
= GetFirstNode (List
); !IsNull (List
, Link
); Link
= GetNextNode (List
, Link
)) {
77 Entry
= BASE_CR (Link
, MEMORY_LENGTH_ENTRY
, Link
);
78 if (Entry
->Type
>= Type
) {
83 if ((Entry
!= NULL
) && (Entry
->Type
== Type
)) {
85 // The Entry is the one we look for.
90 // The search operation breaks due to:
91 // 1. Type of every entry < Type --> Insert to tail
92 // 2. Type of an entry > Type --> Insert to previous of this entry
94 NewEntry
= AllocatePool (sizeof (*NewEntry
));
95 if (NewEntry
== NULL
) {
98 NewEntry
->Type
= Type
;
99 NewEntry
->NumberOfPages
= 0;
100 InsertTailList (Link
, &NewEntry
->Link
);
103 NewEntry
->NumberOfPages
+= NumberOfPages
;
107 Function for 'memmap' command.
109 @param[in] ImageHandle Handle to the Image (NULL if Internal).
110 @param[in] SystemTable Pointer to the System Table (NULL if Internal).
114 ShellCommandRunMemMap (
115 IN EFI_HANDLE ImageHandle
,
116 IN EFI_SYSTEM_TABLE
*SystemTable
121 CHAR16
*ProblemParam
;
122 SHELL_STATUS ShellStatus
;
124 EFI_MEMORY_DESCRIPTOR
*Descriptors
;
128 EFI_MEMORY_DESCRIPTOR
*Walker
;
129 UINT64 ReservedPages
;
130 UINT64 LoadCodePages
;
131 UINT64 LoadDataPages
;
138 UINT64 ReservedPagesSize
;
139 UINT64 LoadCodePagesSize
;
140 UINT64 LoadDataPagesSize
;
141 UINT64 BSCodePagesSize
;
142 UINT64 BSDataPagesSize
;
143 UINT64 RTDataPagesSize
;
144 UINT64 RTCodePagesSize
;
145 UINT64 AvailPagesSize
;
146 UINT64 TotalPagesSize
;
147 UINT64 AcpiReclaimPages
;
149 UINT64 MmioSpacePages
;
150 UINT64 AcpiReclaimPagesSize
;
151 UINT64 AcpiNvsPagesSize
;
152 UINT64 MmioSpacePagesSize
;
153 UINT64 MmioPortPages
;
154 UINT64 MmioPortPagesSize
;
155 UINT64 UnusableMemoryPages
;
156 UINT64 UnusableMemoryPagesSize
;
158 UINT64 PalCodePagesSize
;
159 UINT64 PersistentPages
;
160 UINT64 PersistentPagesSize
;
162 LIST_ENTRY MemoryList
;
163 MEMORY_LENGTH_ENTRY
*Entry
;
166 AcpiReclaimPages
= 0;
179 UnusableMemoryPages
= 0;
184 ShellStatus
= SHELL_SUCCESS
;
185 Status
= EFI_SUCCESS
;
186 InitializeListHead (&MemoryList
);
189 // initialize the shell lib (we must be in non-auto-init...)
191 Status
= ShellInitialize();
192 ASSERT_EFI_ERROR(Status
);
194 Status
= CommandInit();
195 ASSERT_EFI_ERROR(Status
);
198 // parse the command line
200 Status
= ShellCommandLineParse (SfoParamList
, &Package
, &ProblemParam
, TRUE
);
201 if (EFI_ERROR(Status
)) {
202 if (Status
== EFI_VOLUME_CORRUPTED
&& ProblemParam
!= NULL
) {
203 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_PROBLEM
), gShellDebug1HiiHandle
, L
"memmap", ProblemParam
);
204 FreePool(ProblemParam
);
205 ShellStatus
= SHELL_INVALID_PARAMETER
;
210 if (ShellCommandLineGetCount(Package
) > 1) {
211 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_TOO_MANY
), gShellDebug1HiiHandle
, L
"memmap");
212 ShellStatus
= SHELL_INVALID_PARAMETER
;
214 Status
= gBS
->GetMemoryMap(&Size
, Descriptors
, &MapKey
, &ItemSize
, &Version
);
215 if (Status
== EFI_BUFFER_TOO_SMALL
){
217 Descriptors
= AllocateZeroPool(Size
);
218 Status
= gBS
->GetMemoryMap(&Size
, Descriptors
, &MapKey
, &ItemSize
, &Version
);
220 if (EFI_ERROR(Status
)) {
221 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_MEMMAP_GET_FAILED
), gShellDebug1HiiHandle
, L
"memmap");
222 ShellStatus
= SHELL_ACCESS_DENIED
;
224 ASSERT(Version
== EFI_MEMORY_DESCRIPTOR_VERSION
);
226 Sfo
= ShellCommandLineGetFlag(Package
, L
"-sfo");
228 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_MEMMAP_LIST_HEAD
), gShellDebug1HiiHandle
);
230 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_GEN_SFO_HEADER
), gShellDebug1HiiHandle
, L
"memmap");
233 for ( Walker
= Descriptors
234 ; (Walker
< (EFI_MEMORY_DESCRIPTOR
*) ((UINT8
*)Descriptors
+ Size
)) && (Walker
!= NULL
)
235 ; Walker
= (EFI_MEMORY_DESCRIPTOR
*) ((UINT8
*)Walker
+ ItemSize
)
237 switch (Walker
->Type
) {
238 case EfiReservedMemoryType
:
239 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
);
240 ReservedPages
+= Walker
->NumberOfPages
;
243 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
);
244 LoadCodePages
+= Walker
->NumberOfPages
;
245 TotalPages
+= Walker
->NumberOfPages
;
248 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
);
249 LoadDataPages
+= Walker
->NumberOfPages
;
250 TotalPages
+= Walker
->NumberOfPages
;
252 case EfiBootServicesCode
:
253 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
);
254 BSCodePages
+= Walker
->NumberOfPages
;
255 TotalPages
+= Walker
->NumberOfPages
;
257 case EfiBootServicesData
:
258 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
);
259 BSDataPages
+= Walker
->NumberOfPages
;
260 TotalPages
+= Walker
->NumberOfPages
;
262 case EfiRuntimeServicesCode
:
263 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
);
264 RTCodePages
+= Walker
->NumberOfPages
;
265 TotalPages
+= Walker
->NumberOfPages
;
267 case EfiRuntimeServicesData
:
268 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
);
269 RTDataPages
+= Walker
->NumberOfPages
;
270 TotalPages
+= Walker
->NumberOfPages
;
272 case EfiConventionalMemory
:
273 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
);
274 AvailPages
+= Walker
->NumberOfPages
;
275 TotalPages
+= Walker
->NumberOfPages
;
277 case EfiPersistentMemory
:
278 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
);
279 PersistentPages
+= Walker
->NumberOfPages
;
280 TotalPages
+= Walker
->NumberOfPages
;
282 case EfiUnusableMemory
:
283 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
);
284 UnusableMemoryPages
+= Walker
->NumberOfPages
;
286 case EfiACPIReclaimMemory
:
287 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
);
288 TotalPages
+= Walker
->NumberOfPages
;
289 AcpiReclaimPages
+= Walker
->NumberOfPages
;
291 case EfiACPIMemoryNVS
:
292 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
);
293 TotalPages
+= Walker
->NumberOfPages
;
294 AcpiNvsPages
+= Walker
->NumberOfPages
;
296 case EfiMemoryMappedIO
:
297 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
);
298 MmioSpacePages
+= Walker
->NumberOfPages
;
300 case EfiMemoryMappedIOPortSpace
:
301 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
);
302 MmioPortPages
+= Walker
->NumberOfPages
;
305 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
);
306 TotalPages
+= Walker
->NumberOfPages
;
307 PalCodePages
+= Walker
->NumberOfPages
;
311 // Shell Spec defines the SFO format.
312 // Do not print the OEM/OS memory usage in the SFO format, to avoid conflict with Shell Spec.
315 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_MEMMAP_LIST_ITEM_OTHER
), gShellDebug1HiiHandle
, Walker
->Type
, Walker
->PhysicalStart
, Walker
->PhysicalStart
+ MultU64x64 (SIZE_4KB
, Walker
->NumberOfPages
) - 1, Walker
->NumberOfPages
, Walker
->Attribute
);
317 TotalPages
+= Walker
->NumberOfPages
;
318 AddMemoryLength (&MemoryList
, Walker
->Type
, Walker
->NumberOfPages
);
325 ReservedPagesSize
= MultU64x64(SIZE_4KB
,ReservedPages
);
326 LoadCodePagesSize
= MultU64x64(SIZE_4KB
,LoadCodePages
);
327 LoadDataPagesSize
= MultU64x64(SIZE_4KB
,LoadDataPages
);
328 BSCodePagesSize
= MultU64x64(SIZE_4KB
,BSCodePages
);
329 BSDataPagesSize
= MultU64x64(SIZE_4KB
,BSDataPages
);
330 RTDataPagesSize
= MultU64x64(SIZE_4KB
,RTDataPages
);
331 RTCodePagesSize
= MultU64x64(SIZE_4KB
,RTCodePages
);
332 AvailPagesSize
= MultU64x64(SIZE_4KB
,AvailPages
);
333 TotalPagesSize
= MultU64x64(SIZE_4KB
,TotalPages
);
334 AcpiReclaimPagesSize
= MultU64x64(SIZE_4KB
,AcpiReclaimPages
);
335 AcpiNvsPagesSize
= MultU64x64(SIZE_4KB
,AcpiNvsPages
);
336 MmioSpacePagesSize
= MultU64x64(SIZE_4KB
,MmioSpacePages
);
337 MmioPortPagesSize
= MultU64x64(SIZE_4KB
,MmioPortPages
);
338 PalCodePagesSize
= MultU64x64(SIZE_4KB
,PalCodePages
);
339 PersistentPagesSize
= MultU64x64(SIZE_4KB
,PersistentPages
);
340 UnusableMemoryPagesSize
= MultU64x64(SIZE_4KB
,UnusableMemoryPages
);
342 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_MEMMAP_LIST_SUMM
), gShellDebug1HiiHandle
,
343 ReservedPages
, ReservedPagesSize
,
344 LoadCodePages
, LoadCodePagesSize
,
345 LoadDataPages
, LoadDataPagesSize
,
346 BSCodePages
, BSCodePagesSize
,
347 BSDataPages
, BSDataPagesSize
,
348 RTCodePages
, RTCodePagesSize
,
349 RTDataPages
, RTDataPagesSize
,
350 AcpiReclaimPages
, AcpiReclaimPagesSize
,
351 AcpiNvsPages
, AcpiNvsPagesSize
,
352 MmioSpacePages
, MmioSpacePagesSize
,
353 MmioPortPages
, MmioPortPagesSize
,
354 PalCodePages
, PalCodePagesSize
,
355 AvailPages
, AvailPagesSize
,
356 PersistentPages
, PersistentPagesSize
360 // Print out the total memory usage for OEM/OS types in the order of type.
362 for (Link
= GetFirstNode (&MemoryList
); !IsNull (&MemoryList
, Link
); Link
= GetNextNode (&MemoryList
, Link
)) {
363 Entry
= BASE_CR (Link
, MEMORY_LENGTH_ENTRY
, Link
);
364 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_MEMMAP_LIST_SUMM_OTHER
), gShellDebug1HiiHandle
,
365 Entry
->Type
, Entry
->NumberOfPages
, MultU64x64 (SIZE_4KB
, Entry
->NumberOfPages
)
369 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_MEMMAP_LIST_SUMM2
), gShellDebug1HiiHandle
,
370 DivU64x32(MultU64x64(SIZE_4KB
,TotalPages
), SIZE_1MB
), TotalPagesSize
373 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_MEMMAP_LIST_SUMM_SFO
), gShellDebug1HiiHandle
,
385 UnusableMemoryPagesSize
,
386 AcpiReclaimPagesSize
,
394 ShellCommandLineFreeVarList (Package
);
397 if (Descriptors
!= NULL
) {
398 FreePool(Descriptors
);
402 // Free the memory list.
404 for (Link
= GetFirstNode (&MemoryList
); !IsNull (&MemoryList
, Link
); ) {
405 Link
= RemoveEntryList (Link
);
408 return (ShellStatus
);