2 Main file for Mode shell Debug1 function.
4 Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
5 This program and the acModeanying 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 strNameEfiReservedMemoryType
[] = L
"Reserved";
16 STATIC CONST CHAR16 strNameEfiLoaderCode
[] = L
"LoadCode";
17 STATIC CONST CHAR16 strNameEfiLoaderData
[] = L
"LoadData";
18 STATIC CONST CHAR16 strNameEfiBootServicesCode
[] = L
"BSCode";
19 STATIC CONST CHAR16 strNameEfiBootServicesData
[] = L
"BSData";
20 STATIC CONST CHAR16 strNameEfiRuntimeServicesCode
[] = L
"RTCode";
21 STATIC CONST CHAR16 strNameEfiRuntimeServicesData
[] = L
"RTData";
22 STATIC CONST CHAR16 strNameEfiConventionalMemory
[] = L
"Conv";
23 STATIC CONST CHAR16 strNameEfiUnusableMemory
[] = L
"Unusable";
24 STATIC CONST CHAR16 strNameEfiACPIReclaimMemory
[] = L
"ACPIRec";
25 STATIC CONST CHAR16 strNameEfiACPIMemoryNVS
[] = L
"ACPI_NVS";
26 STATIC CONST CHAR16 strNameEfiMemoryMappedIO
[] = L
"MMIO";
27 STATIC CONST CHAR16 strNameEfiMemoryMappedIOPortSpace
[] = L
"MMIOPort";
28 STATIC CONST CHAR16 strNameEfiPalCode
[] = L
"PalCode";
30 #include "UefiShellDebug1CommandsLib.h"
34 ShellCommandRunMemMap (
35 IN EFI_HANDLE ImageHandle
,
36 IN EFI_SYSTEM_TABLE
*SystemTable
42 SHELL_STATUS ShellStatus
;
44 EFI_MEMORY_DESCRIPTOR
*Buffer
;
58 UINT64 ReservedPagesSize
;
59 UINT64 LoadCodePagesSize
;
60 UINT64 LoadDataPagesSize
;
61 UINT64 BSCodePagesSize
;
62 UINT64 BSDataPagesSize
;
63 UINT64 RTDataPagesSize
;
64 UINT64 RTCodePagesSize
;
65 UINT64 AvailPagesSize
;
66 UINT64 TotalPagesSize
;
80 ShellStatus
= SHELL_SUCCESS
;
84 // initialize the shell lib (we must be in non-auto-init...)
86 Status
= ShellInitialize();
87 ASSERT_EFI_ERROR(Status
);
89 Status
= CommandInit();
90 ASSERT_EFI_ERROR(Status
);
93 // parse the command line
95 Status
= ShellCommandLineParse (SfoParamList
, &Package
, &ProblemParam
, TRUE
);
96 if (EFI_ERROR(Status
)) {
97 if (Status
== EFI_VOLUME_CORRUPTED
&& ProblemParam
!= NULL
) {
98 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_PROBLEM
), gShellDebug1HiiHandle
, ProblemParam
);
99 FreePool(ProblemParam
);
100 ShellStatus
= SHELL_INVALID_PARAMETER
;
105 if (ShellCommandLineGetCount(Package
) > 1) {
106 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_TOO_MANY
), gShellDebug1HiiHandle
);
107 ShellStatus
= SHELL_INVALID_PARAMETER
;
109 Status
= gBS
->GetMemoryMap(&Size
, Buffer
, &MapKey
, &ItemSize
, &Version
);
110 if (Status
== EFI_BUFFER_TOO_SMALL
){
112 Buffer
= AllocatePool(Size
);
113 Status
= gBS
->GetMemoryMap(&Size
, Buffer
, &MapKey
, &ItemSize
, &Version
);
115 if (EFI_ERROR(Status
)) {
116 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_MEMMAP_GET_FAILED
), gShellDebug1HiiHandle
, Status
);
117 ShellStatus
= SHELL_ACCESS_DENIED
;
119 ASSERT(Version
== EFI_MEMORY_DESCRIPTOR_VERSION
);
120 Sfo
= ShellCommandLineGetFlag(Package
, L
"-sfo");
121 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_MEMMAP_LIST_HEAD
), gShellDebug1HiiHandle
);
122 for (Walker
= (UINT8
*)Buffer
; Walker
< (((UINT8
*)Buffer
)+Size
) && Walker
!= NULL
; Walker
+= ItemSize
){
123 switch (((EFI_MEMORY_DESCRIPTOR
*)Walker
)->Type
) {
124 // replaced ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages) with 0000
125 case EfiReservedMemoryType
:
126 ShellPrintHiiEx(-1, -1, NULL
, (EFI_STRING_ID
)(!Sfo
?STRING_TOKEN (STR_MEMMAP_LIST_ITEM
):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO
)), gShellDebug1HiiHandle
, strNameEfiReservedMemoryType
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
+MultU64x64(SIZE_4KB
,((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
), ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->Attribute
);
127 ReservedPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
128 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
131 ShellPrintHiiEx(-1, -1, NULL
, (EFI_STRING_ID
)(!Sfo
?STRING_TOKEN (STR_MEMMAP_LIST_ITEM
):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO
)), gShellDebug1HiiHandle
, strNameEfiLoaderCode
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
+MultU64x64(SIZE_4KB
,((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
), ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->Attribute
);
132 LoadCodePages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
133 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
136 ShellPrintHiiEx(-1, -1, NULL
, (EFI_STRING_ID
)(!Sfo
?STRING_TOKEN (STR_MEMMAP_LIST_ITEM
):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO
)), gShellDebug1HiiHandle
, strNameEfiLoaderData
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
+MultU64x64(SIZE_4KB
,((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
), ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->Attribute
);
137 LoadDataPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
138 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
140 case EfiBootServicesCode
:
141 ShellPrintHiiEx(-1, -1, NULL
, (EFI_STRING_ID
)(!Sfo
?STRING_TOKEN (STR_MEMMAP_LIST_ITEM
):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO
)), gShellDebug1HiiHandle
, strNameEfiBootServicesCode
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
+MultU64x64(SIZE_4KB
,((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
), ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->Attribute
);
142 BSCodePages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
143 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
145 case EfiBootServicesData
:
146 ShellPrintHiiEx(-1, -1, NULL
, (EFI_STRING_ID
)(!Sfo
?STRING_TOKEN (STR_MEMMAP_LIST_ITEM
):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO
)), gShellDebug1HiiHandle
, strNameEfiBootServicesData
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
+MultU64x64(SIZE_4KB
,((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
), ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->Attribute
);
147 BSDataPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
148 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
150 case EfiRuntimeServicesCode
:
151 ShellPrintHiiEx(-1, -1, NULL
, (EFI_STRING_ID
)(!Sfo
?STRING_TOKEN (STR_MEMMAP_LIST_ITEM
):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO
)), gShellDebug1HiiHandle
, strNameEfiRuntimeServicesCode
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
+MultU64x64(SIZE_4KB
,((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
), ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->Attribute
);
152 RTCodePages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
153 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
155 case EfiRuntimeServicesData
:
156 ShellPrintHiiEx(-1, -1, NULL
, (EFI_STRING_ID
)(!Sfo
?STRING_TOKEN (STR_MEMMAP_LIST_ITEM
):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO
)), gShellDebug1HiiHandle
, strNameEfiRuntimeServicesData
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
+MultU64x64(SIZE_4KB
,((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
), ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->Attribute
);
157 RTDataPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
158 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
160 case EfiConventionalMemory
:
161 ShellPrintHiiEx(-1, -1, NULL
, (EFI_STRING_ID
)(!Sfo
?STRING_TOKEN (STR_MEMMAP_LIST_ITEM
):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO
)), gShellDebug1HiiHandle
, strNameEfiConventionalMemory
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
+MultU64x64(SIZE_4KB
,((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
), ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->Attribute
);
162 AvailPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
163 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
165 case EfiUnusableMemory
:
166 ShellPrintHiiEx(-1, -1, NULL
, (EFI_STRING_ID
)(!Sfo
?STRING_TOKEN (STR_MEMMAP_LIST_ITEM
):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO
)), gShellDebug1HiiHandle
, strNameEfiUnusableMemory
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
+MultU64x64(SIZE_4KB
,((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
), ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->Attribute
);
167 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
169 case EfiACPIReclaimMemory
:
170 ShellPrintHiiEx(-1, -1, NULL
, (EFI_STRING_ID
)(!Sfo
?STRING_TOKEN (STR_MEMMAP_LIST_ITEM
):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO
)), gShellDebug1HiiHandle
, strNameEfiACPIReclaimMemory
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
+MultU64x64(SIZE_4KB
,((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
), ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->Attribute
);
171 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
173 case EfiACPIMemoryNVS
:
174 ShellPrintHiiEx(-1, -1, NULL
, (EFI_STRING_ID
)(!Sfo
?STRING_TOKEN (STR_MEMMAP_LIST_ITEM
):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO
)), gShellDebug1HiiHandle
, strNameEfiACPIMemoryNVS
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
+MultU64x64(SIZE_4KB
,((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
), ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->Attribute
);
175 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
177 case EfiMemoryMappedIO
:
178 ShellPrintHiiEx(-1, -1, NULL
, (EFI_STRING_ID
)(!Sfo
?STRING_TOKEN (STR_MEMMAP_LIST_ITEM
):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO
)), gShellDebug1HiiHandle
, strNameEfiMemoryMappedIO
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
+MultU64x64(SIZE_4KB
,((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
), ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->Attribute
);
179 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
181 case EfiMemoryMappedIOPortSpace
:
182 ShellPrintHiiEx(-1, -1, NULL
, (EFI_STRING_ID
)(!Sfo
?STRING_TOKEN (STR_MEMMAP_LIST_ITEM
):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO
)), gShellDebug1HiiHandle
, strNameEfiMemoryMappedIOPortSpace
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
+MultU64x64(SIZE_4KB
,((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
), ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->Attribute
);
183 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
186 ShellPrintHiiEx(-1, -1, NULL
, (EFI_STRING_ID
)(!Sfo
?STRING_TOKEN (STR_MEMMAP_LIST_ITEM
):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO
)), gShellDebug1HiiHandle
, strNameEfiPalCode
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->PhysicalStart
+MultU64x64(SIZE_4KB
,((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
), ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
, ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->Attribute
);
187 TotalPages
+= ((EFI_MEMORY_DESCRIPTOR
*)Walker
)->NumberOfPages
;
196 ReservedPagesSize
= MultU64x64(SIZE_4KB
,ReservedPages
);
197 LoadCodePagesSize
= MultU64x64(SIZE_4KB
,LoadCodePages
);
198 LoadDataPagesSize
= MultU64x64(SIZE_4KB
,LoadDataPages
);
199 BSCodePagesSize
= MultU64x64(SIZE_4KB
,BSCodePages
);
200 BSDataPagesSize
= MultU64x64(SIZE_4KB
,BSDataPages
);
201 RTDataPagesSize
= MultU64x64(SIZE_4KB
,RTDataPages
);
202 RTCodePagesSize
= MultU64x64(SIZE_4KB
,RTCodePages
);
203 AvailPagesSize
= MultU64x64(SIZE_4KB
,AvailPages
);
204 TotalPagesSize
= MultU64x64(SIZE_4KB
,TotalPages
);
206 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_MEMMAP_LIST_SUMM
), gShellDebug1HiiHandle
,
207 ReservedPages
, ReservedPagesSize
,
208 LoadCodePages
, LoadCodePagesSize
,
209 LoadDataPages
, LoadDataPagesSize
,
210 BSCodePages
, BSCodePagesSize
,
211 BSDataPages
, BSDataPagesSize
,
212 RTDataPages
, RTDataPagesSize
,
213 AvailPages
, AvailPagesSize
,
214 DivU64x32(MultU64x64(SIZE_4KB
,TotalPages
), SIZE_1MB
), TotalPagesSize
217 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_MEMMAP_LIST_SUMM_SFO
), gShellDebug1HiiHandle
,
219 MultU64x64(SIZE_4KB
,ReservedPages
),
226 AvailPages
, AvailPagesSize
231 ShellCommandLineFreeVarList (Package
);
234 if (Buffer
!= NULL
) {
238 return (ShellStatus
);