]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellDebug1CommandsLib/MemMap.c
Add "Debug1" profile (all but Edit and HexEdit commands)
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / MemMap.c
CommitLineData
5d73d92f 1/** @file\r
2 Main file for Mode shell Debug1 function.\r
3\r
4 Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
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
15STATIC CONST CHAR16 strNameEfiReservedMemoryType[] = L"Reserved";\r
16STATIC CONST CHAR16 strNameEfiLoaderCode[] = L"LoadCode";\r
17STATIC CONST CHAR16 strNameEfiLoaderData[] = L"LoadData";\r
18STATIC CONST CHAR16 strNameEfiBootServicesCode[] = L"BSCode";\r
19STATIC CONST CHAR16 strNameEfiBootServicesData[] = L"BSData";\r
20STATIC CONST CHAR16 strNameEfiRuntimeServicesCode[] = L"RTCode";\r
21STATIC CONST CHAR16 strNameEfiRuntimeServicesData[] = L"RTData";\r
22STATIC CONST CHAR16 strNameEfiConventionalMemory[] = L"Conv";\r
23STATIC CONST CHAR16 strNameEfiUnusableMemory[] = L"Unusable";\r
24STATIC CONST CHAR16 strNameEfiACPIReclaimMemory[] = L"ACPIRec";\r
25STATIC CONST CHAR16 strNameEfiACPIMemoryNVS[] = L"ACPI_NVS";\r
26STATIC CONST CHAR16 strNameEfiMemoryMappedIO[] = L"MMIO";\r
27STATIC CONST CHAR16 strNameEfiMemoryMappedIOPortSpace[] = L"MMIOPort";\r
28STATIC CONST CHAR16 strNameEfiPalCode[] = L"PalCode";\r
29\r
30#include "UefiShellDebug1CommandsLib.h"\r
31\r
32SHELL_STATUS\r
33EFIAPI\r
34ShellCommandRunMemMap (\r
35 IN EFI_HANDLE ImageHandle,\r
36 IN EFI_SYSTEM_TABLE *SystemTable\r
37 )\r
38{\r
39 EFI_STATUS Status;\r
40 LIST_ENTRY *Package;\r
41 CHAR16 *ProblemParam;\r
42 SHELL_STATUS ShellStatus;\r
43 UINTN Size;\r
44 EFI_MEMORY_DESCRIPTOR *Buffer;\r
45 UINTN MapKey;\r
46 UINTN ItemSize;\r
47 UINT32 Version;\r
48 UINT8 *Walker;\r
49 UINT64 ReservedPages;\r
50 UINT64 LoadCodePages;\r
51 UINT64 LoadDataPages;\r
52 UINT64 BSCodePages;\r
53 UINT64 BSDataPages;\r
54 UINT64 RTDataPages;\r
55 UINT64 RTCodePages;\r
56 UINT64 AvailPages;\r
57 UINT64 TotalPages;\r
58 UINT64 ReservedPagesSize;\r
59 UINT64 LoadCodePagesSize;\r
60 UINT64 LoadDataPagesSize;\r
61 UINT64 BSCodePagesSize;\r
62 UINT64 BSDataPagesSize;\r
63 UINT64 RTDataPagesSize;\r
64 UINT64 RTCodePagesSize;\r
65 UINT64 AvailPagesSize;\r
66 UINT64 TotalPagesSize;\r
67 BOOLEAN Sfo;\r
68\r
69 TotalPages = 0;\r
70 ReservedPages = 0;\r
71 LoadCodePages = 0;\r
72 LoadDataPages = 0;\r
73 BSCodePages = 0;\r
74 BSDataPages = 0;\r
75 RTDataPages = 0;\r
76 RTCodePages = 0;\r
77 AvailPages = 0;\r
78 Size = 0;\r
79 Buffer = NULL;\r
80 ShellStatus = SHELL_SUCCESS;\r
81 Status = EFI_SUCCESS;\r
82\r
83 //\r
84 // initialize the shell lib (we must be in non-auto-init...)\r
85 //\r
86 Status = ShellInitialize();\r
87 ASSERT_EFI_ERROR(Status);\r
88\r
89 Status = CommandInit();\r
90 ASSERT_EFI_ERROR(Status);\r
91\r
92 //\r
93 // parse the command line\r
94 //\r
95 Status = ShellCommandLineParse (SfoParamList, &Package, &ProblemParam, TRUE);\r
96 if (EFI_ERROR(Status)) {\r
97 if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
98 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, ProblemParam);\r
99 FreePool(ProblemParam);\r
100 ShellStatus = SHELL_INVALID_PARAMETER;\r
101 } else {\r
102 ASSERT(FALSE);\r
103 }\r
104 } else {\r
105 if (ShellCommandLineGetCount(Package) > 1) {\r
106 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
107 ShellStatus = SHELL_INVALID_PARAMETER;\r
108 } else {\r
109 Status = gBS->GetMemoryMap(&Size, Buffer, &MapKey, &ItemSize, &Version);\r
110 if (Status == EFI_BUFFER_TOO_SMALL){\r
111 Size += SIZE_1KB;\r
112 Buffer = AllocatePool(Size);\r
113 Status = gBS->GetMemoryMap(&Size, Buffer, &MapKey, &ItemSize, &Version);\r
114 }\r
115 if (EFI_ERROR(Status)) {\r
116 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_GET_FAILED), gShellDebug1HiiHandle, Status);\r
117 ShellStatus = SHELL_ACCESS_DENIED;\r
118 } else {\r
119 ASSERT(Version == EFI_MEMORY_DESCRIPTOR_VERSION);\r
120 Sfo = ShellCommandLineGetFlag(Package, L"-sfo");\r
121 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_HEAD), gShellDebug1HiiHandle);\r
122 for (Walker = (UINT8*)Buffer; Walker < (((UINT8*)Buffer)+Size) && Walker != NULL; Walker += ItemSize){\r
123 switch (((EFI_MEMORY_DESCRIPTOR*)Walker)->Type) {\r
124 // replaced ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages) with 0000\r
125 case EfiReservedMemoryType:\r
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);\r
127 ReservedPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
128 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
129 break;\r
130 case EfiLoaderCode:\r
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);\r
132 LoadCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
133 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
134 break;\r
135 case EfiLoaderData:\r
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);\r
137 LoadDataPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
138 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
139 break;\r
140 case EfiBootServicesCode:\r
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);\r
142 BSCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
143 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
144 break;\r
145 case EfiBootServicesData:\r
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);\r
147 BSDataPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
148 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
149 break;\r
150 case EfiRuntimeServicesCode:\r
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);\r
152 RTCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
153 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
154 break;\r
155 case EfiRuntimeServicesData:\r
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);\r
157 RTDataPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
158 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
159 break;\r
160 case EfiConventionalMemory:\r
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);\r
162 AvailPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
163 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
164 break;\r
165 case EfiUnusableMemory:\r
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);\r
167 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
168 break;\r
169 case EfiACPIReclaimMemory:\r
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);\r
171 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
172 break;\r
173 case EfiACPIMemoryNVS:\r
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);\r
175 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
176 break;\r
177 case EfiMemoryMappedIO:\r
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);\r
179 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
180 break;\r
181 case EfiMemoryMappedIOPortSpace:\r
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);\r
183 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
184 break;\r
185 case EfiPalCode:\r
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);\r
187 TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
188 break;\r
189 default:\r
190 ASSERT(FALSE);\r
191 }\r
192 }\r
193 //\r
194 // print the summary\r
195 //\r
196 ReservedPagesSize = MultU64x64(SIZE_4KB,ReservedPages);\r
197 LoadCodePagesSize = MultU64x64(SIZE_4KB,LoadCodePages);\r
198 LoadDataPagesSize = MultU64x64(SIZE_4KB,LoadDataPages);\r
199 BSCodePagesSize = MultU64x64(SIZE_4KB,BSCodePages);\r
200 BSDataPagesSize = MultU64x64(SIZE_4KB,BSDataPages);\r
201 RTDataPagesSize = MultU64x64(SIZE_4KB,RTDataPages);\r
202 RTCodePagesSize = MultU64x64(SIZE_4KB,RTCodePages);\r
203 AvailPagesSize = MultU64x64(SIZE_4KB,AvailPages);\r
204 TotalPagesSize = MultU64x64(SIZE_4KB,TotalPages);\r
205 if (!Sfo) {\r
206 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_SUMM), gShellDebug1HiiHandle,\r
207 ReservedPages, ReservedPagesSize,\r
208 LoadCodePages, LoadCodePagesSize,\r
209 LoadDataPages, LoadDataPagesSize,\r
210 BSCodePages, BSCodePagesSize,\r
211 BSDataPages, BSDataPagesSize,\r
212 RTDataPages, RTDataPagesSize,\r
213 AvailPages, AvailPagesSize,\r
214 DivU64x32(MultU64x64(SIZE_4KB,TotalPages), SIZE_1MB), TotalPagesSize\r
215 );\r
216 } else {\r
217 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_SUMM_SFO), gShellDebug1HiiHandle,\r
218 TotalPagesSize,\r
219 MultU64x64(SIZE_4KB,ReservedPages),\r
220 BSCodePagesSize,\r
221 BSDataPagesSize,\r
222 RTCodePagesSize,\r
223 RTDataPagesSize,\r
224 LoadCodePagesSize,\r
225 LoadDataPagesSize,\r
226 AvailPages, AvailPagesSize\r
227 );\r
228 }\r
229 }\r
230 }\r
231 ShellCommandLineFreeVarList (Package);\r
232 }\r
233\r
234 if (Buffer != NULL) {\r
235 FreePool(Buffer);\r
236 }\r
237\r
238 return (ShellStatus);\r
239}\r
240\r