2 Main file for Mode shell Debug1 function.
4 Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which acModeanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 STATIC CONST CHAR16 NameEfiReservedMemoryType
[] = L
"Reserved";
16 STATIC CONST CHAR16 NameEfiLoaderCode
[] = L
"LoaderCode";
17 STATIC CONST CHAR16 NameEfiLoaderData
[] = L
"LoaderData";
18 STATIC CONST CHAR16 NameEfiBootServicesCode
[] = L
"BS_Code";
19 STATIC CONST CHAR16 NameEfiBootServicesData
[] = L
"BS_Data";
20 STATIC CONST CHAR16 NameEfiRuntimeServicesCode
[] = L
"RT_Code";
21 STATIC CONST CHAR16 NameEfiRuntimeServicesData
[] = L
"RT_Data";
22 STATIC CONST CHAR16 NameEfiConventionalMemory
[] = L
"Available";
23 STATIC CONST CHAR16 NameEfiUnusableMemory
[] = L
"Unusable";
24 STATIC CONST CHAR16 NameEfiACPIReclaimMemory
[] = L
"ACPIRec";
25 STATIC CONST CHAR16 NameEfiACPIMemoryNVS
[] = L
"ACPI_NVS";
26 STATIC CONST CHAR16 NameEfiMemoryMappedIO
[] = L
"MMIO";
27 STATIC CONST CHAR16 NameEfiMemoryMappedIOPortSpace
[] = L
"MMIOPort";
28 STATIC CONST CHAR16 NameEfiPalCode
[] = L
"PalCode";
30 #include "UefiShellDebug1CommandsLib.h"
33 Function for 'memmap' command.
35 @param[in] ImageHandle Handle to the Image (NULL if Internal).
36 @param[in] SystemTable Pointer to the System Table (NULL if Internal).
40 ShellCommandRunMemMap (
41 IN EFI_HANDLE ImageHandle
,
42 IN EFI_SYSTEM_TABLE
*SystemTable
48 SHELL_STATUS ShellStatus
;
50 EFI_MEMORY_DESCRIPTOR
*Buffer
;
64 UINT64 ReservedPagesSize
;
65 UINT64 LoadCodePagesSize
;
66 UINT64 LoadDataPagesSize
;
67 UINT64 BSCodePagesSize
;
68 UINT64 BSDataPagesSize
;
69 UINT64 RTDataPagesSize
;
70 UINT64 RTCodePagesSize
;
71 UINT64 AvailPagesSize
;
72 UINT64 TotalPagesSize
;
73 UINT64 AcpiReclaimPages
;
75 UINT64 MmioSpacePages
;
76 UINT64 AcpiReclaimPagesSize
;
77 UINT64 AcpiNvsPagesSize
;
78 UINT64 MmioSpacePagesSize
;
80 UINT64 MmioPortPagesSize
;
81 UINT64 UnusableMemoryPages
;
82 UINT64 UnusableMemoryPagesSize
;
84 UINT64 PalCodePagesSize
;
100 UnusableMemoryPages
= 0;
104 ShellStatus
= SHELL_SUCCESS
;
105 Status
= EFI_SUCCESS
;
108 // initialize the shell lib (we must be in non-auto-init...)
110 Status
= ShellInitialize();
111 ASSERT_EFI_ERROR(Status
);
113 Status
= CommandInit();
114 ASSERT_EFI_ERROR(Status
);
117 // parse the command line
119 Status
= ShellCommandLineParse (SfoParamList
, &Package
, &ProblemParam
, TRUE
);
120 if (EFI_ERROR(Status
)) {
121 if (Status
== EFI_VOLUME_CORRUPTED
&& ProblemParam
!= NULL
) {
122 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_PROBLEM
), gShellDebug1HiiHandle
, ProblemParam
);
123 FreePool(ProblemParam
);
124 ShellStatus
= SHELL_INVALID_PARAMETER
;
129 if (ShellCommandLineGetCount(Package
) > 1) {
130 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_TOO_MANY
), gShellDebug1HiiHandle
);
131 ShellStatus
= SHELL_INVALID_PARAMETER
;
133 Status
= gBS
->GetMemoryMap(&Size
, Buffer
, &MapKey
, &ItemSize
, &Version
);
134 if (Status
== EFI_BUFFER_TOO_SMALL
){
136 Buffer
= AllocateZeroPool(Size
);
137 Status
= gBS
->GetMemoryMap(&Size
, Buffer
, &MapKey
, &ItemSize
, &Version
);
139 if (EFI_ERROR(Status
)) {
140 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_MEMMAP_GET_FAILED
), gShellDebug1HiiHandle
, Status
);
141 ShellStatus
= SHELL_ACCESS_DENIED
;
143 ASSERT(Version
== EFI_MEMORY_DESCRIPTOR_VERSION
);
144 Sfo
= ShellCommandLineGetFlag(Package
, L
"-sfo");
145 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_MEMMAP_LIST_HEAD
), gShellDebug1HiiHandle
);
146 for (Walker
= (UINT8
*)Buffer
; Walker
< (((UINT8
*)Buffer
)+Size
) && Walker
!= NULL
; Walker
+= ItemSize
){
147 switch (((EFI_MEMORY_DESCRIPTOR
*)Walker
)->Type
) {
148 case EfiReservedMemoryType
:
149 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
);
150 ReservedPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
153 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
);
154 LoadCodePages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
155 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
158 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
);
159 LoadDataPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
160 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
162 case EfiBootServicesCode
:
163 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
);
164 BSCodePages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
165 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
167 case EfiBootServicesData
:
168 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
);
169 BSDataPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
170 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
172 case EfiRuntimeServicesCode
:
173 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
);
174 RTCodePages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
175 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
177 case EfiRuntimeServicesData
:
178 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
);
179 RTDataPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
180 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
182 case EfiConventionalMemory
:
183 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
);
184 AvailPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
185 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
187 case EfiUnusableMemory
:
188 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
);
189 UnusableMemoryPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
191 case EfiACPIReclaimMemory
:
192 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
);
193 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
194 AcpiReclaimPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
196 case EfiACPIMemoryNVS
:
197 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
);
198 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
199 AcpiNvsPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
201 case EfiMemoryMappedIO
:
202 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
);
203 MmioSpacePages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
205 case EfiMemoryMappedIOPortSpace
:
206 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
);
207 MmioPortPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
210 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
);
211 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
212 PalCodePages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
221 ReservedPagesSize
= MultU64x64(SIZE_4KB
,ReservedPages
);
222 LoadCodePagesSize
= MultU64x64(SIZE_4KB
,LoadCodePages
);
223 LoadDataPagesSize
= MultU64x64(SIZE_4KB
,LoadDataPages
);
224 BSCodePagesSize
= MultU64x64(SIZE_4KB
,BSCodePages
);
225 BSDataPagesSize
= MultU64x64(SIZE_4KB
,BSDataPages
);
226 RTDataPagesSize
= MultU64x64(SIZE_4KB
,RTDataPages
);
227 RTCodePagesSize
= MultU64x64(SIZE_4KB
,RTCodePages
);
228 AvailPagesSize
= MultU64x64(SIZE_4KB
,AvailPages
);
229 TotalPagesSize
= MultU64x64(SIZE_4KB
,TotalPages
);
230 AcpiReclaimPagesSize
= MultU64x64(SIZE_4KB
,AcpiReclaimPages
);
231 AcpiNvsPagesSize
= MultU64x64(SIZE_4KB
,AcpiNvsPages
);
232 MmioSpacePagesSize
= MultU64x64(SIZE_4KB
,MmioSpacePages
);
234 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_MEMMAP_LIST_SUMM
), gShellDebug1HiiHandle
,
235 ReservedPages
, ReservedPagesSize
,
236 LoadCodePages
, LoadCodePagesSize
,
237 LoadDataPages
, LoadDataPagesSize
,
238 BSCodePages
, BSCodePagesSize
,
239 BSDataPages
, BSDataPagesSize
,
240 RTCodePages
, RTCodePagesSize
,
241 RTDataPages
, RTDataPagesSize
,
242 AcpiReclaimPages
, AcpiReclaimPagesSize
,
243 AcpiNvsPages
, AcpiNvsPagesSize
,
244 MmioSpacePages
, MmioSpacePagesSize
,
245 AvailPages
, AvailPagesSize
,
246 DivU64x32(MultU64x64(SIZE_4KB
,TotalPages
), SIZE_1MB
), TotalPagesSize
250 // Compute sizes only used for SFO mode
252 MmioPortPagesSize
= MultU64x64(SIZE_4KB
, MmioPortPages
);
253 UnusableMemoryPagesSize
= MultU64x64(SIZE_4KB
, UnusableMemoryPages
);
254 PalCodePagesSize
= MultU64x64(SIZE_4KB
, PalCodePages
);
256 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN(STR_MEMMAP_LIST_SUMM_SFO
), gShellDebug1HiiHandle
,
258 MultU64x64(SIZE_4KB
,ReservedPages
),
268 UnusableMemoryPagesSize
,
269 AcpiReclaimPagesSize
,
276 ShellCommandLineFreeVarList (Package
);
279 if (Buffer
!= NULL
) {
283 return (ShellStatus
);