2 Main file for Dh shell Driver1 function.
4 Copyright (c) 2010, 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 accompanies 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 #include "UefiShellDriver1CommandsLib.h"
17 STATIC CONST SHELL_PARAM_ITEM ParamList
[] = {
21 {L
"-verbose", TypeFlag
},
27 STATIC CONST EFI_GUID
*UefiDriverModelProtocolsGuidArray
[] = {
28 &gEfiDriverBindingProtocolGuid
,
29 &gEfiPlatformDriverOverrideProtocolGuid
,
30 &gEfiBusSpecificDriverOverrideProtocolGuid
,
31 &gEfiDriverDiagnosticsProtocolGuid
,
32 &gEfiDriverDiagnostics2ProtocolGuid
,
33 &gEfiComponentNameProtocolGuid
,
34 &gEfiComponentName2ProtocolGuid
,
35 &gEfiPlatformToDriverConfigurationProtocolGuid
,
36 &gEfiDriverSupportedEfiVersionProtocolGuid
,
37 &gEfiDriverFamilyOverrideProtocolGuid
,
38 &gEfiDriverHealthProtocolGuid
,
39 &gEfiLoadedImageProtocolGuid
,
46 IN CONST EFI_GUID
*Guid
49 CONST EFI_GUID
**GuidWalker
;
52 for (GuidWalker
= UefiDriverModelProtocolsGuidArray
53 ; GuidWalker
!= NULL
&& *GuidWalker
!= NULL
56 if (CompareGuid(*GuidWalker
, Guid
)) {
66 GetProtocolInfoString(
67 IN CONST EFI_HANDLE TheHandle
,
68 IN CONST CHAR8
*Language
,
69 IN CONST CHAR16
*Seperator
,
70 IN CONST BOOLEAN DriverInfo
,
71 IN CONST BOOLEAN Verbose
,
72 IN CONST BOOLEAN ExtraInfo
75 EFI_GUID
**ProtocolGuidArray
;
83 ProtocolGuidArray
= NULL
;
85 Status
= gBS
->ProtocolsPerHandle (
90 if (!EFI_ERROR (Status
)) {
93 for (ProtocolIndex
= 0; ProtocolIndex
< ArrayCount
; ProtocolIndex
++) {
94 Temp
= GetStringNameFromGuid(ProtocolGuidArray
[ProtocolIndex
], Language
);
96 ASSERT((RetVal
== NULL
&& Size
== 0) || (RetVal
!= NULL
));
98 StrnCatGrow(&RetVal
, &Size
, Seperator
, 0);
100 StrnCatGrow(&RetVal
, &Size
, L
"%H", 0);
101 StrnCatGrow(&RetVal
, &Size
, Temp
, 0);
102 StrnCatGrow(&RetVal
, &Size
, L
"%N", 0);
106 Temp
= GetProtocolInformationDump(TheHandle
, ProtocolGuidArray
[ProtocolIndex
], Verbose
);
108 ASSERT((RetVal
== NULL
&& Size
== 0) || (RetVal
!= NULL
));
110 StrnCatGrow(&RetVal
, &Size
, L
"(", 0);
111 StrnCatGrow(&RetVal
, &Size
, Temp
, 0);
112 StrnCatGrow(&RetVal
, &Size
, L
")", 0);
114 StrnCatGrow(&RetVal
, &Size
, Seperator
, 0);
115 StrnCatGrow(&RetVal
, &Size
, Temp
, 0);
125 if (ProtocolGuidArray
!= NULL
) {
126 FreePool(ProtocolGuidArray
);
128 ASSERT((RetVal
== NULL
&& Size
== 0) || (RetVal
!= NULL
));
129 StrnCatGrow(&RetVal
, &Size
, Seperator
, 0);
136 IN CONST EFI_HANDLE TheHandle
,
137 IN CONST BOOLEAN Verbose
,
138 IN CONST BOOLEAN Sfo
,
139 IN CONST CHAR8
*Language
,
140 IN CONST BOOLEAN DriverInfo
,
141 IN CONST BOOLEAN Multiple
144 CHAR16
*ProtocolInfoString
;
145 SHELL_STATUS ShellStatus
;
148 Status
= EFI_SUCCESS
;
149 ShellStatus
= SHELL_SUCCESS
;
150 ProtocolInfoString
= NULL
;
154 ProtocolInfoString
= GetProtocolInfoString(TheHandle
, Language
, L
" ", DriverInfo
, Verbose
, TRUE
);
159 STRING_TOKEN (STR_DH_OUTPUT
),
160 gShellDriver1HiiHandle
,
161 ConvertHandleToHandleIndex(TheHandle
),
162 ProtocolInfoString
==NULL
?L
"":ProtocolInfoString
);
164 ProtocolInfoString
= GetProtocolInfoString(TheHandle
, Language
, L
"\r\n", DriverInfo
, Verbose
, TRUE
);
169 STRING_TOKEN (STR_DH_OUTPUT_SINGLE
),
170 gShellDriver1HiiHandle
,
171 ConvertHandleToHandleIndex(TheHandle
),
173 ProtocolInfoString
==NULL
?L
"":ProtocolInfoString
);
176 //#string STR_DH_OUTPUT_SFO #language en-US "%s, %s, %s, %H%02x%N, %s, %s\r\n"
177 ProtocolInfoString
= GetProtocolInfoString(TheHandle
, Language
, L
";", DriverInfo
, FALSE
, FALSE
);
182 STRING_TOKEN (STR_DH_OUTPUT_SFO
),
183 gShellDriver1HiiHandle
,
184 Multiple
?L
"HandlesInfo":L
"HandleInfo",
187 ConvertHandleToHandleIndex(TheHandle
),
189 ProtocolInfoString
==NULL
?L
"":ProtocolInfoString
);
195 if (ProtocolInfoString
!= NULL
) {
196 FreePool(ProtocolInfoString
);
198 return (ShellStatus
);
204 IN CONST EFI_HANDLE
*HandleList
,
205 IN CONST BOOLEAN Sfo
,
206 IN CONST CHAR8
*Language
,
207 IN CONST BOOLEAN DriverInfo
210 CONST EFI_HANDLE
*HandleWalker
;
211 SHELL_STATUS ShellStatus
;
213 ShellStatus
= SHELL_SUCCESS
;
215 for (HandleWalker
= HandleList
; HandleWalker
!= NULL
&& *HandleWalker
!= NULL
&& ShellStatus
== SHELL_SUCCESS
; HandleWalker
++) {
216 ShellStatus
= DoDhByHandle(
225 return (ShellStatus
);
231 IN CONST BOOLEAN Sfo
,
232 IN CONST CHAR8
*Language
,
233 IN CONST BOOLEAN DriverInfo
236 EFI_HANDLE
*HandleList
;
237 SHELL_STATUS ShellStatus
;
239 HandleList
= GetHandleListByProtocol(NULL
);
241 ShellStatus
= DoDhForHandleList(
247 FreePool(HandleList
);
249 return (ShellStatus
);
255 IN CONST CHAR16
*ProtocolName
,
256 IN CONST BOOLEAN Sfo
,
257 IN CONST CHAR8
*Language
,
258 IN CONST BOOLEAN DriverInfo
263 EFI_HANDLE
*HandleList
;
264 SHELL_STATUS ShellStatus
;
266 ASSERT(ProtocolName
!= NULL
);
268 Status
= GetGuidFromStringName(ProtocolName
, Language
, &Guid
);
269 if (EFI_ERROR(Status
)) {
270 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_DH_NO_GUID_FOUND
), gShellDriver1HiiHandle
, ProtocolName
);
271 return (SHELL_INVALID_PARAMETER
);
274 HandleList
= GetHandleListByProtocol(Guid
);
276 ShellStatus
= DoDhForHandleList(
282 SHELL_FREE_NON_NULL(HandleList
);
284 return (ShellStatus
);
290 IN EFI_HANDLE ImageHandle
,
291 IN EFI_SYSTEM_TABLE
*SystemTable
296 CHAR16
*ProblemParam
;
297 SHELL_STATUS ShellStatus
;
305 ShellStatus
= SHELL_SUCCESS
;
306 Status
= EFI_SUCCESS
;
310 // initialize the shell lib (we must be in non-auto-init...)
312 Status
= ShellInitialize();
313 ASSERT_EFI_ERROR(Status
);
315 Status
= CommandInit();
316 ASSERT_EFI_ERROR(Status
);
319 // parse the command line
321 Status
= ShellCommandLineParse (ParamList
, &Package
, &ProblemParam
, TRUE
);
322 if (EFI_ERROR(Status
)) {
323 if (Status
== EFI_VOLUME_CORRUPTED
&& ProblemParam
!= NULL
) {
324 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_PROBLEM
), gShellDriver1HiiHandle
, ProblemParam
);
325 FreePool(ProblemParam
);
326 ShellStatus
= SHELL_INVALID_PARAMETER
;
331 if (ShellCommandLineGetCount(Package
) > 2) {
332 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_TOO_MANY
), gShellDriver1HiiHandle
);
333 ShellCommandLineFreeVarList (Package
);
334 return (SHELL_INVALID_PARAMETER
);
337 Lang
= ShellCommandLineGetValue(Package
, L
"-l");
339 Language
= AllocateZeroPool(StrSize(Lang
));
340 AsciiSPrint(Language
, StrSize(Lang
), "%S", Lang
);
341 } else if (!ShellCommandLineGetFlag(Package
, L
"-l")){
342 Language
= AllocateZeroPool(10);
343 AsciiSPrint(Language
, 10, "en-us");
345 ASSERT(Language
== NULL
);
346 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_NO_VALUE
), gShellDriver1HiiHandle
, L
"-l");
347 ShellCommandLineFreeVarList (Package
);
348 return (SHELL_INVALID_PARAMETER
);
351 SfoMode
= ShellCommandLineGetFlag(Package
, L
"-sfo");
352 FlagD
= ShellCommandLineGetFlag(Package
, L
"-d");
353 if (ShellCommandLineGetFlag(Package
, L
"-v") || ShellCommandLineGetFlag(Package
, L
"-verbose")) {
359 if (ShellCommandLineGetFlag(Package
, L
"-p")) {
360 if (ShellCommandLineGetCount(Package
) > 1) {
361 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_TOO_MANY
), gShellDriver1HiiHandle
);
362 ShellStatus
= SHELL_INVALID_PARAMETER
;
363 } else if (ShellCommandLineGetValue(Package
, L
"-p") == NULL
) {
364 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_NO_VALUE
), gShellDriver1HiiHandle
, L
"-p");
365 ShellStatus
= SHELL_INVALID_PARAMETER
;
370 ShellStatus
= DoDhByProtocol(
371 ShellCommandLineGetValue(Package
, L
"-p"),
373 Lang
==NULL
?NULL
:Language
,
378 Temp2
= ShellCommandLineGetRawValue(Package
, 1);
383 ShellStatus
= DoDhForAll(
385 Lang
==NULL
?NULL
:Language
,
389 if (!ShellIsHexOrDecimalNumber(Temp2
, TRUE
, FALSE
) || ConvertHandleIndexToHandle(StrHexToUintn(Temp2
)) == NULL
) {
390 ShellPrintHiiEx(-1, -1, NULL
, STRING_TOKEN (STR_GEN_INV_HANDLE
), gShellDriver1HiiHandle
, Temp2
);
391 ShellStatus
= SHELL_INVALID_PARAMETER
;
396 ShellStatus
= DoDhByHandle(
397 ConvertHandleIndexToHandle(StrHexToUintn(Temp2
)),
400 Lang
==NULL
?NULL
:Language
,
409 ShellCommandLineFreeVarList (Package
);
410 SHELL_FREE_NON_NULL(Language
);
413 return (ShellStatus
);