/** @file\r
Main file for Dh shell Driver1 function.\r
\r
- Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved.<BR>\r
+ (C) Copyright 2014-2015 Hewlett-Packard Development Company, L.P.<BR>\r
+ Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>\r
+ (C) Copyright 2017 Hewlett Packard Enterprise Development LP<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
NULL\r
};\r
\r
+UINTN mGuidDataLen[] = {8, 4, 4, 4, 12};\r
+/**\r
+ Function to determine if the string can convert to a GUID.\r
+ The string must be restricted as "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" format.\r
+\r
+ @param[in] String The string to test.\r
+\r
+ @retval TRUE The string can convert to a GUID.\r
+ @retval FALSE The string can't convert to a GUID.\r
+**/\r
+BOOLEAN\r
+IsValidGuidString(\r
+ IN CONST CHAR16 *String\r
+ )\r
+{\r
+ CONST CHAR16 *Walker;\r
+ CONST CHAR16 *PrevWalker;\r
+ UINTN Index;\r
+\r
+ if (String == NULL) {\r
+ return FALSE;\r
+ }\r
+\r
+ Walker = String;\r
+ PrevWalker = String;\r
+ Index = 0;\r
+\r
+ while (Walker != NULL && *Walker != CHAR_NULL) {\r
+ if ( (*Walker >= '0' && *Walker <= '9') ||\r
+ (*Walker >= 'a' && *Walker <= 'f') ||\r
+ (*Walker >= 'A' && *Walker <= 'F')\r
+ ) {\r
+ Walker++;\r
+ } else {\r
+ if (*Walker == L'-' && (((UINTN)Walker - (UINTN)PrevWalker) / sizeof (CHAR16)) == mGuidDataLen[Index]) {\r
+ Walker++;\r
+ PrevWalker = Walker;\r
+ Index++;\r
+ } else {\r
+ return FALSE;\r
+ }\r
+ }\r
+ }\r
+\r
+ if ((((UINTN)Walker - (UINTN)PrevWalker) / sizeof (CHAR16)) == mGuidDataLen[Index]) {\r
+ return TRUE;\r
+ } else {\r
+ return FALSE;\r
+ }\r
+}\r
+\r
+/**\r
+ Convert a hex-character to decimal value.\r
+\r
+ This internal function only deal with Unicode character\r
+ which maps to a valid hexadecimal ASII character, i.e.\r
+ L'0' to L'9', L'a' to L'f' or L'A' to L'F'. For other\r
+ Unicode character, the value returned does not make sense.\r
+\r
+ @param[in] Char The character to convert.\r
+\r
+ @retval The numerical value converted.\r
+**/\r
+UINTN\r
+HexCharToDecimal(\r
+ IN CHAR16 Char\r
+ )\r
+{\r
+ if (Char >= '0' && Char <= '9') {\r
+ return Char - L'0';\r
+ } else if (Char >= 'a' && Char <= 'f') {\r
+ return Char - L'a' + 10;\r
+ } else {\r
+ return Char - L'A' + 10;\r
+ }\r
+}\r
+\r
+/**\r
+ Function try to convert a string to GUID format.\r
+\r
+ @param[in] String The string will be converted.\r
+ @param[out] Guid Save the result convert from string.\r
+\r
+ @retval EFI_SUCCESS The string was successfully converted to a GUID.\r
+ @retval EFI_UNSUPPORTED The input string is not in registry format.\r
+**/\r
+EFI_STATUS\r
+ConvertStrToGuid(\r
+ IN CONST CHAR16 *String,\r
+ OUT GUID *Guid\r
+ )\r
+{\r
+ CONST CHAR16 *Walker;\r
+ UINT8 TempValue;\r
+ UINTN Index;\r
+\r
+ if (String == NULL || !IsValidGuidString (String)) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+\r
+ Index = 0;\r
+\r
+ Walker = String;\r
+ Guid->Data1 = (UINT32)StrHexToUint64 (Walker);\r
+\r
+ Walker += 9;\r
+ Guid->Data2 = (UINT16)StrHexToUint64 (Walker);\r
+\r
+ Walker += 5;\r
+ Guid->Data3 = (UINT16)StrHexToUint64 (Walker);\r
+\r
+ Walker += 5;\r
+ while (Walker != NULL && *Walker != CHAR_NULL) {\r
+ if (*Walker == L'-') {\r
+ Walker++;\r
+ } else {\r
+ TempValue = (UINT8)HexCharToDecimal (*Walker);\r
+ TempValue = (UINT8)LShiftU64 (TempValue, 4);\r
+ Walker++;\r
+\r
+ TempValue += (UINT8)HexCharToDecimal (*Walker);\r
+ Walker++;\r
+\r
+ Guid->Data4[Index] = TempValue;\r
+ Index++;\r
+ }\r
+ }\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
/**\r
Get the name of a driver by it's handle.\r
\r
@retval EFI_SUCCESS The name was found.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
GetDriverName (\r
IN EFI_HANDLE TheHandle,\r
IN CONST CHAR8 *Language,\r
)\r
{\r
CHAR8 *Lang;\r
- CHAR8 *TempChar;\r
EFI_STATUS Status;\r
EFI_COMPONENT_NAME2_PROTOCOL *CompName2;\r
CHAR16 *NameToReturn;\r
if (EFI_ERROR(Status)) {\r
return (EFI_NOT_FOUND);\r
}\r
- if (Language == NULL) {\r
- Lang = AllocateZeroPool(AsciiStrSize(CompName2->SupportedLanguages));\r
- if (Lang == NULL) {\r
- return (EFI_OUT_OF_RESOURCES);\r
- }\r
- AsciiStrCpy(Lang, CompName2->SupportedLanguages);\r
- TempChar = AsciiStrStr(Lang, ";");\r
- if (TempChar != NULL){\r
- *TempChar = CHAR_NULL;\r
- }\r
- } else {\r
- Lang = AllocateZeroPool(AsciiStrSize(Language));\r
- if (Lang == NULL) {\r
- return (EFI_OUT_OF_RESOURCES);\r
- }\r
- AsciiStrCpy(Lang, Language);\r
- }\r
+ Lang = GetBestLanguageForDriver (CompName2->SupportedLanguages, Language, FALSE);\r
Status = CompName2->GetDriverName(CompName2, Lang, &NameToReturn);\r
FreePool(Lang);\r
\r
@retval FALSE The guid does not represent a driver model protocol.\r
**/\r
BOOLEAN\r
-EFIAPI\r
IsDriverProt (\r
IN CONST EFI_GUID *Guid\r
)\r
\r
@param[in] TheHandle The handles to show info on.\r
@param[in] Language Language string per UEFI specification.\r
- @param[in] Seperator Separator string between information blocks.\r
+ @param[in] Separator Separator string between information blocks.\r
@param[in] Verbose TRUE for extra info, FALSE otherwise.\r
@param[in] ExtraInfo TRUE for extra info, FALSE otherwise.\r
\r
@retval SHELL_INVALID_PARAMETER ProtocolName was NULL or invalid.\r
**/\r
CHAR16*\r
-EFIAPI\r
GetProtocolInfoString(\r
IN CONST EFI_HANDLE TheHandle,\r
IN CONST CHAR8 *Language,\r
- IN CONST CHAR16 *Seperator,\r
+ IN CONST CHAR16 *Separator,\r
IN CONST BOOLEAN Verbose,\r
IN CONST BOOLEAN ExtraInfo\r
)\r
CHAR16 *RetVal;\r
UINTN Size;\r
CHAR16 *Temp;\r
+ CHAR16 GuidStr[40];\r
+ VOID *Instance;\r
+ CHAR16 InstanceStr[17];\r
\r
ProtocolGuidArray = NULL;\r
RetVal = NULL;\r
if (!EFI_ERROR (Status)) {\r
for (ProtocolIndex = 0; ProtocolIndex < ArrayCount; ProtocolIndex++) {\r
Temp = GetStringNameFromGuid(ProtocolGuidArray[ProtocolIndex], Language);\r
- if (Temp != NULL) {\r
- ASSERT((RetVal == NULL && Size == 0) || (RetVal != NULL));\r
- if (Size != 0) {\r
- StrnCatGrow(&RetVal, &Size, Seperator, 0);\r
- }\r
- StrnCatGrow(&RetVal, &Size, L"%H", 0);\r
+ ASSERT((RetVal == NULL && Size == 0) || (RetVal != NULL));\r
+ if (Size != 0) {\r
+ StrnCatGrow(&RetVal, &Size, Separator, 0);\r
+ }\r
+ StrnCatGrow(&RetVal, &Size, L"%H", 0);\r
+ if (Temp == NULL) {\r
+ UnicodeSPrint (GuidStr, sizeof (GuidStr), L"%g", ProtocolGuidArray[ProtocolIndex]);\r
+ StrnCatGrow (&RetVal, &Size, GuidStr, 0);\r
+ } else {\r
StrnCatGrow(&RetVal, &Size, Temp, 0);\r
- StrnCatGrow(&RetVal, &Size, L"%N", 0);\r
FreePool(Temp);\r
}\r
+ StrnCatGrow(&RetVal, &Size, L"%N", 0);\r
+\r
+ if(Verbose) {\r
+ Status = gBS->HandleProtocol (TheHandle, ProtocolGuidArray[ProtocolIndex], &Instance);\r
+ if (!EFI_ERROR (Status)) {\r
+ StrnCatGrow (&RetVal, &Size, L"(%H", 0);\r
+ UnicodeSPrint (InstanceStr, sizeof (InstanceStr), L"%x", Instance);\r
+ StrnCatGrow (&RetVal, &Size, InstanceStr, 0);\r
+ StrnCatGrow (&RetVal, &Size, L"%N)", 0);\r
+ }\r
+ }\r
+\r
if (ExtraInfo) {\r
Temp = GetProtocolInformationDump(TheHandle, ProtocolGuidArray[ProtocolIndex], Verbose);\r
if (Temp != NULL) {\r
if (!Verbose) {\r
StrnCatGrow(&RetVal, &Size, L"(", 0);\r
StrnCatGrow(&RetVal, &Size, Temp, 0);\r
- StrnCatGrow(&RetVal, &Size, L")\r\n", 0);\r
+ StrnCatGrow(&RetVal, &Size, L")", 0);\r
} else {\r
- StrnCatGrow(&RetVal, &Size, Seperator, 0);\r
+ StrnCatGrow(&RetVal, &Size, Separator, 0);\r
StrnCatGrow(&RetVal, &Size, Temp, 0);\r
}\r
FreePool(Temp);\r
}\r
\r
ASSERT((RetVal == NULL && Size == 0) || (RetVal != NULL));\r
- StrnCatGrow(&RetVal, &Size, Seperator, 0);\r
+ StrnCatGrow(&RetVal, &Size, Separator, 0);\r
return (RetVal);\r
}\r
\r
@retval EFI_SUCCESS The operation was successful.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
GetDriverImageName (\r
IN EFI_HANDLE TheHandle,\r
OUT CHAR16 **Name\r
@param[in] Language The language to output in.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
DisplayDriverModelHandle (\r
IN EFI_HANDLE Handle,\r
IN BOOLEAN BestName,\r
UINTN ChildIndex;\r
BOOLEAN Image;\r
\r
+ DriverName = NULL;\r
+\r
//\r
// See if Handle is a device handle and display its details.\r
//\r
-1, \r
-1, \r
NULL, \r
- STRING_TOKEN (STR_DH_OUTPUT_DRIVER6B),\r
+ STRING_TOKEN (STR_DH_OUTPUT_DRIVER7),\r
gShellDriver1HiiHandle,\r
ConvertHandleToHandleIndex(Handle),\r
DriverName!=NULL?DriverName:L"<Unknown>"\r
-1, \r
-1, \r
NULL, \r
- STRING_TOKEN (STR_DH_OUTPUT_DRIVER6), \r
+ STRING_TOKEN (STR_DH_OUTPUT_DRIVER9),\r
gShellDriver1HiiHandle, \r
L"None"\r
);\r
-1, \r
-1, \r
NULL, \r
- STRING_TOKEN (STR_DH_OUTPUT_DRIVER6), \r
+ STRING_TOKEN (STR_DH_OUTPUT_DRIVER9),\r
gShellDriver1HiiHandle, \r
L""\r
);\r
-1, \r
-1, \r
NULL, \r
- STRING_TOKEN (STR_DH_OUTPUT_DRIVER6B),\r
+ STRING_TOKEN (STR_DH_OUTPUT_DRIVER6C),\r
gShellDriver1HiiHandle,\r
ConvertHandleToHandleIndex(ChildControllerHandleBuffer[ChildIndex]),\r
TempStringPointer!=NULL?TempStringPointer:L"<Unknown>"\r
@param[in] DriverInfo TRUE to show all info about the handle.\r
@param[in] Multiple TRUE indicates more than will be output,\r
FALSE for a single one.\r
-\r
- @retval SHELL_SUCCESS The operation was successful.\r
- @retval SHELL_INVALID_PARAMETER ProtocolName was NULL or invalid.\r
**/\r
-SHELL_STATUS\r
-EFIAPI\r
+VOID\r
DoDhByHandle(\r
IN CONST EFI_HANDLE TheHandle,\r
IN CONST BOOLEAN Verbose,\r
IN CONST BOOLEAN Multiple\r
)\r
{\r
- CHAR16 *ProtocolInfoString;\r
- SHELL_STATUS ShellStatus;\r
+ CHAR16 *ProtocolInfoString;\r
\r
- ShellStatus = SHELL_SUCCESS;\r
ProtocolInfoString = NULL;\r
\r
if (!Sfo) {\r
STRING_TOKEN (STR_DH_OUTPUT),\r
gShellDriver1HiiHandle,\r
ConvertHandleToHandleIndex(TheHandle),\r
- ProtocolInfoString==NULL?L"":ProtocolInfoString);\r
+ ProtocolInfoString==NULL?L"":ProtocolInfoString\r
+ );\r
} else {\r
- ProtocolInfoString = GetProtocolInfoString(TheHandle, Language, L"\r\n", Verbose, TRUE);\r
- ShellPrintHiiEx(\r
- -1,\r
- -1,\r
- NULL,\r
- STRING_TOKEN (STR_DH_OUTPUT_SINGLE),\r
- gShellDriver1HiiHandle,\r
- ConvertHandleToHandleIndex(TheHandle),\r
- TheHandle,\r
- ProtocolInfoString==NULL?L"":ProtocolInfoString);\r
+ ProtocolInfoString = GetProtocolInfoString(TheHandle, Language, Verbose ? L"\r\n" : L" ", Verbose, TRUE);\r
+ if (Verbose) {\r
+ ShellPrintHiiEx(\r
+ -1,\r
+ -1,\r
+ NULL,\r
+ STRING_TOKEN (STR_DH_OUTPUT_SINGLE),\r
+ gShellDriver1HiiHandle,\r
+ ConvertHandleToHandleIndex(TheHandle),\r
+ TheHandle,\r
+ ProtocolInfoString==NULL?L"":ProtocolInfoString\r
+ );\r
+ } else {\r
+ ShellPrintHiiEx(\r
+ -1,\r
+ -1,\r
+ NULL,\r
+ STRING_TOKEN (STR_DH_OUTPUT_SINGLE_D),\r
+ gShellDriver1HiiHandle,\r
+ ConvertHandleToHandleIndex(TheHandle),\r
+ ProtocolInfoString==NULL?L"":ProtocolInfoString\r
+ );\r
+ }\r
}\r
\r
if (DriverInfo) {\r
L"ControllerName",\r
ConvertHandleToHandleIndex(TheHandle),\r
L"DevPath",\r
- ProtocolInfoString==NULL?L"":ProtocolInfoString);\r
-\r
-\r
+ ProtocolInfoString==NULL?L"":ProtocolInfoString\r
+ );\r
}\r
\r
-\r
if (ProtocolInfoString != NULL) {\r
FreePool(ProtocolInfoString);\r
}\r
- return (ShellStatus);\r
}\r
\r
/**\r
@param[in] Language Language string per UEFI specification.\r
@param[in] DriverInfo TRUE to show all info about the handle.\r
\r
- @retval SHELL_SUCCESS The operation was successful.\r
- @retval SHELL_INVALID_PARAMETER ProtocolName was NULL or invalid.\r
+ @retval SHELL_SUCCESS The operation was successful.\r
+ @retval SHELL_ABORTED The operation was aborted.\r
**/\r
SHELL_STATUS\r
-EFIAPI\r
DoDhForHandleList(\r
IN CONST EFI_HANDLE *HandleList,\r
IN CONST BOOLEAN Verbose,\r
SHELL_STATUS ShellStatus;\r
\r
ShellStatus = SHELL_SUCCESS;\r
-\r
- for (HandleWalker = HandleList ; HandleWalker != NULL && *HandleWalker != NULL && ShellStatus == SHELL_SUCCESS; HandleWalker++) {\r
- ShellStatus = DoDhByHandle(\r
- *HandleWalker,\r
- Verbose,\r
- Sfo,\r
- Language,\r
- DriverInfo,\r
- TRUE\r
- );\r
+ for (HandleWalker = HandleList; HandleWalker != NULL && *HandleWalker != NULL; HandleWalker++) {\r
+ DoDhByHandle (*HandleWalker, Verbose, Sfo, Language, DriverInfo, TRUE);\r
+ if (ShellGetExecutionBreakFlag ()) {\r
+ ShellStatus = SHELL_ABORTED;\r
+ break;\r
+ }\r
}\r
return (ShellStatus);\r
}\r
\r
/**\r
- Display information for all handles.\r
+ Display information for a GUID of protocol.\r
\r
- @param[in] Sfo TRUE to output in standard format output (spec).\r
+ @param[in] Guid The pointer to the name of the protocol.\r
@param[in] Verbose TRUE for extra info, FALSE otherwise.\r
+ @param[in] Sfo TRUE to output in standard format output (spec).\r
@param[in] Language Language string per UEFI specification.\r
@param[in] DriverInfo TRUE to show all info about the handle.\r
\r
@retval SHELL_SUCCESS The operation was successful.\r
+ @retval SHELL_NOT_FOUND The GUID was not found.\r
@retval SHELL_INVALID_PARAMETER ProtocolName was NULL or invalid.\r
**/\r
SHELL_STATUS\r
-EFIAPI\r
-DoDhForAll(\r
- IN CONST BOOLEAN Sfo,\r
+DoDhByProtocolGuid(\r
+ IN CONST GUID *Guid,\r
IN CONST BOOLEAN Verbose,\r
+ IN CONST BOOLEAN Sfo,\r
IN CONST CHAR8 *Language,\r
IN CONST BOOLEAN DriverInfo\r
)\r
{\r
- EFI_HANDLE *HandleList;\r
+ CHAR16 *Name;\r
SHELL_STATUS ShellStatus;\r
+ EFI_HANDLE *HandleList;\r
\r
- HandleList = GetHandleListByProtocol(NULL);\r
-\r
- ShellStatus = DoDhForHandleList(\r
- HandleList,\r
- Verbose,\r
- Sfo,\r
- Language,\r
- DriverInfo);\r
-\r
- FreePool(HandleList);\r
+ if (!Sfo) {\r
+ if (Guid == NULL) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DH_OUTPUT_ALL_HEADER), gShellDriver1HiiHandle);\r
+ } else {\r
+ Name = GetStringNameFromGuid (Guid, NULL);\r
+ if (Name == NULL) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DH_OUTPUT_GUID_HEADER), gShellDriver1HiiHandle, Guid);\r
+ } else {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DH_OUTPUT_NAME_HEADER), gShellDriver1HiiHandle, Name);\r
+ }\r
+ }\r
+ }\r
+ HandleList = GetHandleListByProtocol(Guid);\r
+ ShellStatus = DoDhForHandleList(HandleList, Verbose, Sfo, Language, DriverInfo);\r
+ SHELL_FREE_NON_NULL(HandleList);\r
\r
- return (ShellStatus);\r
+ return ShellStatus;\r
}\r
\r
/**\r
- Display information for all handles which have a specific protocol.\r
+ Function to determine use which method to print information.\r
+ If Protocol is NULL, The function will print all information.\r
\r
- @param[in] ProtocolName The pointer to the name of the protocol.\r
+ @param[in] Protocol The pointer to the name or GUID of protocol or NULL.\r
@param[in] Verbose TRUE for extra info, FALSE otherwise.\r
@param[in] Sfo TRUE to output in standard format output (spec).\r
@param[in] Language Language string per UEFI specification.\r
@param[in] DriverInfo TRUE to show all info about the handle.\r
\r
- @retval SHELL_SUCCESS The operation was successful.\r
- @retval SHELL_INVALID_PARAMETER ProtocolName was NULL or invalid.\r
+ @retval SHELL_SUCCESS The operation was successful.\r
+ @retval SHELL_NOT_FOUND The protocol was not found.\r
+ @retval SHELL_INVALID_PARAMETER Protocol is invalid parameter.\r
**/\r
SHELL_STATUS\r
-EFIAPI\r
-DoDhByProtocol(\r
- IN CONST CHAR16 *ProtocolName,\r
+DoDhByProtocol (\r
+ IN CONST CHAR16 *Protocol,\r
IN CONST BOOLEAN Verbose,\r
IN CONST BOOLEAN Sfo,\r
IN CONST CHAR8 *Language,\r
IN CONST BOOLEAN DriverInfo\r
)\r
{\r
- EFI_GUID *Guid;\r
+ EFI_GUID Guid;\r
+ EFI_GUID *GuidPtr;\r
EFI_STATUS Status;\r
- EFI_HANDLE *HandleList;\r
- SHELL_STATUS ShellStatus;\r
\r
- if (ProtocolName == NULL) {\r
- return (SHELL_INVALID_PARAMETER);\r
- }\r
+ if (Protocol == NULL) {\r
+ return DoDhByProtocolGuid (NULL, Verbose, Sfo, Language, DriverInfo);\r
+ } else {\r
+ Status = ConvertStrToGuid (Protocol, &Guid);\r
+ if (!EFI_ERROR (Status)) {\r
+ GuidPtr = &Guid;\r
+ } else {\r
+ //\r
+ // Protocol is a Name, convert it to GUID\r
+ //\r
+ Status = GetGuidFromStringName (Protocol, Language, &GuidPtr);\r
+ if (EFI_ERROR(Status)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DH_NO_NAME_FOUND), gShellDriver1HiiHandle, Protocol);\r
+ return (SHELL_NOT_FOUND);\r
+ }\r
+ }\r
\r
- Status = GetGuidFromStringName(ProtocolName, Language, &Guid);\r
- if (EFI_ERROR(Status)) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DH_NO_GUID_FOUND), gShellDriver1HiiHandle, ProtocolName);\r
- return (SHELL_INVALID_PARAMETER);\r
+ return DoDhByProtocolGuid (GuidPtr, Verbose, Sfo, Language, DriverInfo);\r
}\r
+}\r
\r
- HandleList = GetHandleListByProtocol(Guid);\r
+/**\r
+ Function to display decode information by Protocol.\r
+ The parameter Protocol is either a GUID or the name of protocol.\r
+ If the parameter Protocol is NULL, the function will print all\r
+ decode information.\r
\r
- ShellStatus = DoDhForHandleList(\r
- HandleList,\r
- Verbose,\r
- Sfo,\r
- Language,\r
- DriverInfo);\r
+ @param[in] Protocol The pointer to the name or GUID of protocol.\r
+ @param[in] Language Language string per UEFI specification.\r
\r
- SHELL_FREE_NON_NULL(HandleList);\r
+ @retval SHELL_SUCCESS The operation was successful.\r
+ @retval SHELL_OUT_OT_RESOURCES A memory allocation failed.\r
+**/\r
+SHELL_STATUS\r
+DoDecodeByProtocol(\r
+ IN CONST CHAR16 *Protocol,\r
+ IN CONST CHAR8 *Language\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ EFI_GUID *Guids;\r
+ EFI_GUID Guid;\r
+ UINTN Counts;\r
+ UINTN Index;\r
+ CHAR16 *Name;\r
+\r
+ if (Protocol == NULL) {\r
+ Counts = 0;\r
+ Status = GetAllMappingGuids (NULL, &Counts);\r
+ if (Status == EFI_BUFFER_TOO_SMALL) {\r
+ Guids = AllocatePool (Counts * sizeof(EFI_GUID));\r
+ if (Guids == NULL) {\r
+ return SHELL_OUT_OF_RESOURCES;\r
+ }\r
\r
- return (ShellStatus);\r
+ Status = GetAllMappingGuids (Guids, &Counts);\r
+ if (Status == EFI_SUCCESS) {\r
+ for (Index = 0; Index < Counts; Index++) {\r
+ Name = GetStringNameFromGuid (&Guids[Index], Language);\r
+ if (Name != NULL) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DH_OUTPUT_DECODE), gShellDriver1HiiHandle, Name, &Guids[Index]);\r
+ } else {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DH_NO_GUID_FOUND), gShellDriver1HiiHandle, &Guids[Index]);\r
+ }\r
+ SHELL_FREE_NON_NULL (Name);\r
+ }\r
+ }\r
+ FreePool (Guids);\r
+ }\r
+ } else {\r
+ if (ConvertStrToGuid (Protocol, &Guid) == EFI_SUCCESS) {\r
+ Name = GetStringNameFromGuid (&Guid, Language);\r
+ if (Name != NULL) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DH_OUTPUT_DECODE), gShellDriver1HiiHandle, Name, &Guid);\r
+ } else {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DH_NO_GUID_FOUND), gShellDriver1HiiHandle, &Guid);\r
+ }\r
+ SHELL_FREE_NON_NULL(Name);\r
+ } else {\r
+ Status = GetGuidFromStringName (Protocol, Language, &Guids);\r
+ if (Status == EFI_SUCCESS) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DH_OUTPUT_DECODE), gShellDriver1HiiHandle, Protocol, Guids);\r
+ } else {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DH_NO_NAME_FOUND), gShellDriver1HiiHandle, Protocol);\r
+ }\r
+ }\r
+ }\r
+\r
+ return SHELL_SUCCESS;\r
}\r
\r
/**\r
SHELL_STATUS ShellStatus;\r
CHAR8 *Language;\r
CONST CHAR16 *Lang;\r
- CONST CHAR16 *Temp2;\r
- BOOLEAN SfoMode;\r
- BOOLEAN FlagD;\r
- BOOLEAN Verbose;\r
+ CONST CHAR16 *RawValue;\r
+ CONST CHAR16 *ProtocolVal;\r
+ BOOLEAN SfoFlag;\r
+ BOOLEAN DriverFlag;\r
+ BOOLEAN VerboseFlag;\r
UINT64 Intermediate;\r
+ EFI_HANDLE Handle;\r
\r
ShellStatus = SHELL_SUCCESS;\r
Status = EFI_SUCCESS;\r
Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);\r
if (EFI_ERROR(Status)) {\r
if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, ProblemParam);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, L"dh", ProblemParam); \r
FreePool(ProblemParam);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
}\r
} else {\r
if (ShellCommandLineGetCount(Package) > 2) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle, L"dh"); \r
ShellCommandLineFreeVarList (Package);\r
return (SHELL_INVALID_PARAMETER);\r
}\r
\r
- Lang = ShellCommandLineGetValue(Package, L"-l");\r
- if (Lang != NULL) {\r
- Language = AllocateZeroPool(StrSize(Lang));\r
- AsciiSPrint(Language, StrSize(Lang), "%S", Lang);\r
- } else if (!ShellCommandLineGetFlag(Package, L"-l")){\r
+ if (ShellCommandLineGetFlag(Package, L"-l")) {\r
+ Lang = ShellCommandLineGetValue(Package, L"-l");\r
+ if (Lang != NULL) {\r
+ Language = AllocateZeroPool(StrSize(Lang));\r
+ AsciiSPrint(Language, StrSize(Lang), "%S", Lang);\r
+ } else {\r
+ ASSERT(Language == NULL);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"dh", L"-l");\r
+ ShellCommandLineFreeVarList(Package);\r
+ return (SHELL_INVALID_PARAMETER);\r
+ }\r
+ } else {\r
Language = AllocateZeroPool(10);\r
AsciiSPrint(Language, 10, "en-us");\r
- } else {\r
- ASSERT(Language == NULL);\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"-l");\r
- ShellCommandLineFreeVarList (Package);\r
- return (SHELL_INVALID_PARAMETER);\r
}\r
\r
- SfoMode = ShellCommandLineGetFlag(Package, L"-sfo");\r
- FlagD = ShellCommandLineGetFlag(Package, L"-d");\r
- Verbose = (BOOLEAN)(ShellCommandLineGetFlag(Package, L"-v") || ShellCommandLineGetFlag(Package, L"-verbose"));\r
+ SfoFlag = ShellCommandLineGetFlag (Package, L"-sfo");\r
+ DriverFlag = ShellCommandLineGetFlag (Package, L"-d");\r
+ VerboseFlag = (BOOLEAN)(ShellCommandLineGetFlag (Package, L"-v") || ShellCommandLineGetFlag (Package, L"-verbose"));\r
+ RawValue = ShellCommandLineGetRawValue (Package, 1);\r
+ ProtocolVal = ShellCommandLineGetValue (Package, L"-p");\r
\r
- if (ShellCommandLineGetFlag(Package, L"-p")) {\r
- if (ShellCommandLineGetCount(Package) > 1) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle);\r
- ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else if (ShellCommandLineGetValue(Package, L"-p") == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"-p");\r
+ if (RawValue == NULL) {\r
+ if (ShellCommandLineGetFlag (Package, L"-p") && (ProtocolVal == NULL)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"dh", L"-p");\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
//\r
- // print by protocol\r
+ // Print information by protocol, The ProtocolVal maybe is name or GUID or NULL.\r
//\r
- ShellStatus = DoDhByProtocol(\r
- ShellCommandLineGetValue(Package, L"-p"),\r
- Verbose,\r
- SfoMode,\r
- Lang==NULL?NULL:Language,\r
- FlagD\r
- );\r
+ ShellStatus = DoDhByProtocol (ProtocolVal, VerboseFlag, SfoFlag, Language, DriverFlag);\r
}\r
- } else {\r
- Temp2 = ShellCommandLineGetRawValue(Package, 1);\r
- if (Temp2 == NULL) {\r
+ } else if ((RawValue != NULL) &&\r
+ (gUnicodeCollation->StriColl(gUnicodeCollation, L"decode", (CHAR16 *) RawValue) == 0)) {\r
+ if (ShellCommandLineGetFlag (Package, L"-p") && (ProtocolVal == NULL)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"dh", L"-p");\r
+ ShellStatus = SHELL_INVALID_PARAMETER;\r
+ } else {\r
//\r
- // Print everything\r
+ // Print decode informatino by protocol.\r
//\r
- ShellStatus = DoDhForAll(\r
- SfoMode,\r
- Verbose,\r
- Lang==NULL?NULL:Language,\r
- FlagD\r
- );\r
+ ShellStatus = DoDecodeByProtocol (ProtocolVal, Language);\r
+ }\r
+ } else {\r
+ if (ShellCommandLineGetFlag (Package, L"-p")) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle, L"dh");\r
+ ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
- Status = ShellConvertStringToUint64(Temp2, &Intermediate, TRUE, FALSE);\r
- if (EFI_ERROR(Status) || ConvertHandleIndexToHandle((UINTN)Intermediate) == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Temp2);\r
+ Status = ShellConvertStringToUint64 (RawValue, &Intermediate, TRUE, FALSE);\r
+ if (EFI_ERROR(Status)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"dh", RawValue);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
- //\r
- // print 1 handle\r
- //\r
- ShellStatus = DoDhByHandle(\r
- ConvertHandleIndexToHandle((UINTN)Intermediate),\r
- Verbose,\r
- SfoMode,\r
- Lang==NULL?NULL:Language,\r
- FlagD,\r
- FALSE\r
- );\r
+ Handle = ConvertHandleIndexToHandle ((UINTN) Intermediate);\r
+ if (Handle == NULL) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"dh", RawValue);\r
+ ShellStatus = SHELL_INVALID_PARAMETER;\r
+ } else {\r
+ //\r
+ // Print information by handle.\r
+ //\r
+ DoDhByHandle (Handle, VerboseFlag, SfoFlag, Language, DriverFlag, FALSE);\r
+ }\r
}\r
}\r
}\r
\r
-\r
ShellCommandLineFreeVarList (Package);\r
SHELL_FREE_NON_NULL(Language);\r
}\r