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 SPDX-License-Identifier: BSD-2-Clause-Patent
12 // Need full names for Standard-Format Output
14 STATIC CONST CHAR16 NameEfiReservedMemoryType
[] = L
"Reserved";
15 STATIC CONST CHAR16 NameEfiLoaderCode
[] = L
"LoaderCode";
16 STATIC CONST CHAR16 NameEfiLoaderData
[] = L
"LoaderData";
17 STATIC CONST CHAR16 NameEfiBootServicesCode
[] = L
"BootServiceCode";
18 STATIC CONST CHAR16 NameEfiBootServicesData
[] = L
"BootServiceData";
19 STATIC CONST CHAR16 NameEfiRuntimeServicesCode
[] = L
"RuntimeCode";
20 STATIC CONST CHAR16 NameEfiRuntimeServicesData
[] = L
"RuntimeData";
21 STATIC CONST CHAR16 NameEfiConventionalMemory
[] = L
"Available";
22 STATIC CONST CHAR16 NameEfiPersistentMemory
[] = L
"Persistent";
23 STATIC CONST CHAR16 NameEfiUnusableMemory
[] = L
"UnusableMemory";
24 STATIC CONST CHAR16 NameEfiACPIReclaimMemory
[] = L
"ACPIReclaimMemory";
25 STATIC CONST CHAR16 NameEfiACPIMemoryNVS
[] = L
"ACPIMemoryNVS";
26 STATIC CONST CHAR16 NameEfiMemoryMappedIO
[] = L
"MemoryMappedIO";
27 STATIC CONST CHAR16 NameEfiMemoryMappedIOPortSpace
[] = L
"MemoryMappedIOPortSpace";
28 STATIC CONST CHAR16 NameEfiPalCode
[] = L
"PalCode";
29 STATIC CONST CHAR16 NameEfiUnacceptedMemoryType
[] = L
"Unaccepted";
32 // Need short names for some memory types
34 STATIC CONST CHAR16 NameEfiBootServicesCodeShort
[] = L
"BS_Code";
35 STATIC CONST CHAR16 NameEfiBootServicesDataShort
[] = L
"BS_Data";
36 STATIC CONST CHAR16 NameEfiRuntimeServicesCodeShort
[] = L
"RT_Code";
37 STATIC CONST CHAR16 NameEfiRuntimeServicesDataShort
[] = L
"RT_Data";
38 STATIC CONST CHAR16 NameEfiUnusableMemoryShort
[] = L
"Unusable";
39 STATIC CONST CHAR16 NameEfiACPIReclaimMemoryShort
[] = L
"ACPI_Recl";
40 STATIC CONST CHAR16 NameEfiACPIMemoryNVSShort
[] = L
"ACPI_NVS";
41 STATIC CONST CHAR16 NameEfiMemoryMappedIOShort
[] = L
"MMIO";
42 STATIC CONST CHAR16 NameEfiMemoryMappedIOPortSpaceShort
[] = L
"MMIO_Port";
44 #include "UefiShellDebug1CommandsLib.h"
50 } MEMORY_LENGTH_ENTRY
;
53 Add the length of the specified type to List.
55 @param List A list to hold all pairs of <Type, NumberOfPages>.
56 @param Type Memory type.
57 @param NumberOfPages Number of pages.
66 MEMORY_LENGTH_ENTRY
*Entry
;
67 MEMORY_LENGTH_ENTRY
*NewEntry
;
71 for (Link
= GetFirstNode (List
); !IsNull (List
, Link
); Link
= GetNextNode (List
, Link
)) {
72 Entry
= BASE_CR (Link
, MEMORY_LENGTH_ENTRY
, Link
);
73 if (Entry
->Type
>= Type
) {
78 if ((Entry
!= NULL
) && (Entry
->Type
== Type
)) {
80 // The Entry is the one we look for.
85 // The search operation breaks due to:
86 // 1. Type of every entry < Type --> Insert to tail
87 // 2. Type of an entry > Type --> Insert to previous of this entry
89 NewEntry
= AllocatePool (sizeof (*NewEntry
));
90 if (NewEntry
== NULL
) {
94 NewEntry
->Type
= Type
;
95 NewEntry
->NumberOfPages
= 0;
96 InsertTailList (Link
, &NewEntry
->Link
);
99 NewEntry
->NumberOfPages
+= NumberOfPages
;
103 Function for 'memmap' command.
105 @param[in] ImageHandle Handle to the Image (NULL if Internal).
106 @param[in] SystemTable Pointer to the System Table (NULL if Internal).
110 ShellCommandRunMemMap (
111 IN EFI_HANDLE ImageHandle
,
112 IN EFI_SYSTEM_TABLE
*SystemTable
117 CHAR16
*ProblemParam
;
118 SHELL_STATUS ShellStatus
;
120 EFI_MEMORY_DESCRIPTOR
*Descriptors
;
124 EFI_MEMORY_DESCRIPTOR
*Walker
;
125 UINT64 ReservedPages
;
126 UINT64 LoadCodePages
;
127 UINT64 LoadDataPages
;
134 UINT64 ReservedPagesSize
;
135 UINT64 LoadCodePagesSize
;
136 UINT64 LoadDataPagesSize
;
137 UINT64 BSCodePagesSize
;
138 UINT64 BSDataPagesSize
;
139 UINT64 RTDataPagesSize
;
140 UINT64 RTCodePagesSize
;
141 UINT64 AvailPagesSize
;
142 UINT64 TotalPagesSize
;
143 UINT64 AcpiReclaimPages
;
145 UINT64 MmioSpacePages
;
146 UINT64 AcpiReclaimPagesSize
;
147 UINT64 AcpiNvsPagesSize
;
148 UINT64 MmioSpacePagesSize
;
149 UINT64 MmioPortPages
;
150 UINT64 MmioPortPagesSize
;
151 UINT64 UnusableMemoryPages
;
152 UINT64 UnusableMemoryPagesSize
;
154 UINT64 PalCodePagesSize
;
155 UINT64 UnacceptedPages
;
156 UINT64 UnacceptedPagesSize
;
157 UINT64 PersistentPages
;
158 UINT64 PersistentPagesSize
;
160 LIST_ENTRY MemoryList
;
161 MEMORY_LENGTH_ENTRY
*Entry
;
164 AcpiReclaimPages
= 0;
177 UnusableMemoryPages
= 0;
183 ShellStatus
= SHELL_SUCCESS
;
184 Status
= EFI_SUCCESS
;
185 InitializeListHead (&MemoryList
);
188 // initialize the shell lib (we must be in non-auto-init...)
190 Status
= ShellInitialize ();
191 ASSERT_EFI_ERROR (Status
);
193 Status
= CommandInit ();
194 ASSERT_EFI_ERROR (Status
);
197 // parse the command line
199 Status
= ShellCommandLineParse (SfoParamList
, &Package
, &ProblemParam
, TRUE
);
200 if (EFI_ERROR (Status
)) {
201 if ((Status
== EFI_VOLUME_CORRUPTED
) && (ProblemParam
!= NULL
)) {
202 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_GEN_PROBLEM
), gShellDebug1HiiHandle
, L
"memmap", ProblemParam
);
203 FreePool (ProblemParam
);
204 ShellStatus
= SHELL_INVALID_PARAMETER
;
209 if (ShellCommandLineGetCount (Package
) > 1) {
210 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_GEN_TOO_MANY
), gShellDebug1HiiHandle
, L
"memmap");
211 ShellStatus
= SHELL_INVALID_PARAMETER
;
213 Status
= gBS
->GetMemoryMap (&Size
, Descriptors
, &MapKey
, &ItemSize
, &Version
);
214 if (Status
== EFI_BUFFER_TOO_SMALL
) {
216 Descriptors
= AllocateZeroPool (Size
);
217 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
)
238 switch (Walker
->Type
) {
239 case EfiReservedMemoryType
:
240 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
);
241 ReservedPages
+= Walker
->NumberOfPages
;
244 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
);
245 LoadCodePages
+= Walker
->NumberOfPages
;
246 TotalPages
+= Walker
->NumberOfPages
;
249 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
);
250 LoadDataPages
+= Walker
->NumberOfPages
;
251 TotalPages
+= Walker
->NumberOfPages
;
253 case EfiBootServicesCode
:
254 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
);
255 BSCodePages
+= Walker
->NumberOfPages
;
256 TotalPages
+= Walker
->NumberOfPages
;
258 case EfiBootServicesData
:
259 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
);
260 BSDataPages
+= Walker
->NumberOfPages
;
261 TotalPages
+= Walker
->NumberOfPages
;
263 case EfiRuntimeServicesCode
:
264 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
);
265 RTCodePages
+= Walker
->NumberOfPages
;
266 TotalPages
+= Walker
->NumberOfPages
;
268 case EfiRuntimeServicesData
:
269 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
);
270 RTDataPages
+= Walker
->NumberOfPages
;
271 TotalPages
+= Walker
->NumberOfPages
;
273 case EfiConventionalMemory
:
274 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
);
275 AvailPages
+= Walker
->NumberOfPages
;
276 TotalPages
+= Walker
->NumberOfPages
;
278 case EfiPersistentMemory
:
279 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
);
280 PersistentPages
+= Walker
->NumberOfPages
;
281 TotalPages
+= Walker
->NumberOfPages
;
283 case EfiUnusableMemory
:
284 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
);
285 UnusableMemoryPages
+= Walker
->NumberOfPages
;
287 case EfiACPIReclaimMemory
:
288 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
);
289 TotalPages
+= Walker
->NumberOfPages
;
290 AcpiReclaimPages
+= Walker
->NumberOfPages
;
292 case EfiACPIMemoryNVS
:
293 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
);
294 TotalPages
+= Walker
->NumberOfPages
;
295 AcpiNvsPages
+= Walker
->NumberOfPages
;
297 case EfiMemoryMappedIO
:
298 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
);
299 MmioSpacePages
+= Walker
->NumberOfPages
;
301 case EfiMemoryMappedIOPortSpace
:
302 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
);
303 MmioPortPages
+= Walker
->NumberOfPages
;
306 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
);
307 TotalPages
+= Walker
->NumberOfPages
;
308 PalCodePages
+= Walker
->NumberOfPages
;
310 case EfiUnacceptedMemoryType
:
311 ShellPrintHiiEx (-1, -1, NULL
, (EFI_STRING_ID
)(!Sfo
? STRING_TOKEN (STR_MEMMAP_LIST_ITEM
) : STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO
)), gShellDebug1HiiHandle
, NameEfiUnacceptedMemoryType
, Walker
->PhysicalStart
, Walker
->PhysicalStart
+MultU64x64 (SIZE_4KB
, Walker
->NumberOfPages
)-1, Walker
->NumberOfPages
, Walker
->Attribute
);
312 TotalPages
+= Walker
->NumberOfPages
;
313 UnacceptedPages
+= Walker
->NumberOfPages
;
317 // Shell Spec defines the SFO format.
318 // Do not print the OEM/OS memory usage in the SFO format, to avoid conflict with Shell Spec.
321 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
);
324 TotalPages
+= Walker
->NumberOfPages
;
325 AddMemoryLength (&MemoryList
, Walker
->Type
, Walker
->NumberOfPages
);
333 ReservedPagesSize
= MultU64x64 (SIZE_4KB
, ReservedPages
);
334 LoadCodePagesSize
= MultU64x64 (SIZE_4KB
, LoadCodePages
);
335 LoadDataPagesSize
= MultU64x64 (SIZE_4KB
, LoadDataPages
);
336 BSCodePagesSize
= MultU64x64 (SIZE_4KB
, BSCodePages
);
337 BSDataPagesSize
= MultU64x64 (SIZE_4KB
, BSDataPages
);
338 RTDataPagesSize
= MultU64x64 (SIZE_4KB
, RTDataPages
);
339 RTCodePagesSize
= MultU64x64 (SIZE_4KB
, RTCodePages
);
340 AvailPagesSize
= MultU64x64 (SIZE_4KB
, AvailPages
);
341 TotalPagesSize
= MultU64x64 (SIZE_4KB
, TotalPages
);
342 AcpiReclaimPagesSize
= MultU64x64 (SIZE_4KB
, AcpiReclaimPages
);
343 AcpiNvsPagesSize
= MultU64x64 (SIZE_4KB
, AcpiNvsPages
);
344 MmioSpacePagesSize
= MultU64x64 (SIZE_4KB
, MmioSpacePages
);
345 MmioPortPagesSize
= MultU64x64 (SIZE_4KB
, MmioPortPages
);
346 PalCodePagesSize
= MultU64x64 (SIZE_4KB
, PalCodePages
);
347 UnacceptedPagesSize
= MultU64x64 (SIZE_4KB
, UnacceptedPages
);
348 PersistentPagesSize
= MultU64x64 (SIZE_4KB
, PersistentPages
);
349 UnusableMemoryPagesSize
= MultU64x64 (SIZE_4KB
, UnusableMemoryPages
);
355 STRING_TOKEN (STR_MEMMAP_LIST_SUMM
),
356 gShellDebug1HiiHandle
,
372 AcpiReclaimPagesSize
,
390 // Print out the total memory usage for OEM/OS types in the order of type.
392 for (Link
= GetFirstNode (&MemoryList
); !IsNull (&MemoryList
, Link
); Link
= GetNextNode (&MemoryList
, Link
)) {
393 Entry
= BASE_CR (Link
, MEMORY_LENGTH_ENTRY
, Link
);
398 STRING_TOKEN (STR_MEMMAP_LIST_SUMM_OTHER
),
399 gShellDebug1HiiHandle
,
401 Entry
->NumberOfPages
,
402 MultU64x64 (SIZE_4KB
, Entry
->NumberOfPages
)
410 STRING_TOKEN (STR_MEMMAP_LIST_SUMM2
),
411 gShellDebug1HiiHandle
,
412 DivU64x32 (MultU64x64 (SIZE_4KB
, TotalPages
), SIZE_1MB
),
420 STRING_TOKEN (STR_MEMMAP_LIST_SUMM_SFO
),
421 gShellDebug1HiiHandle
,
433 UnusableMemoryPagesSize
,
434 AcpiReclaimPagesSize
,
444 ShellCommandLineFreeVarList (Package
);
447 if (Descriptors
!= NULL
) {
448 FreePool (Descriptors
);
452 // Free the memory list.
454 for (Link
= GetFirstNode (&MemoryList
); !IsNull (&MemoryList
, Link
); ) {
455 Link
= RemoveEntryList (Link
);
458 return (ShellStatus
);