/** @file\r
Provides interface to advanced shell functionality for parsing both handle and protocol database.\r
\r
- Copyright (c) 2013 - 2014, Hewlett-Packard Development Company, L.P.\r
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>\r
+ (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>\r
+ Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<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
#include "UefiHandleParsingLib.h"\r
#include "IndustryStandard/Acpi10.h"\r
\r
-EFI_HANDLE mHandleParsingHiiHandle;\r
+EFI_HANDLE mHandleParsingHiiHandle = NULL;\r
HANDLE_INDEX_LIST mHandleList = {{{NULL,NULL},0,0},0};\r
-\r
+GUID_INFO_BLOCK *GuidList;\r
+UINTN GuidListCount;\r
/**\r
Function to translate the EFI_MEMORY_TYPE into a string.\r
\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- mHandleParsingHiiHandle = HiiAddPackages (&gHandleParsingHiiGuid, gImageHandle, UefiHandleParsingLibStrings, NULL);\r
- if (mHandleParsingHiiHandle == NULL) {\r
- return (EFI_DEVICE_ERROR);\r
- }\r
+ GuidListCount = 0;\r
+ GuidList = NULL;\r
\r
+ //\r
+ // Do nothing with mHandleParsingHiiHandle. Initialize HII as needed.\r
+ //\r
return (EFI_SUCCESS);\r
}\r
\r
+/** \r
+ Initialization function for HII packages.\r
+ \r
+**/\r
+VOID\r
+HandleParsingHiiInit (VOID)\r
+{\r
+ if (mHandleParsingHiiHandle == NULL) {\r
+ mHandleParsingHiiHandle = HiiAddPackages (&gHandleParsingHiiGuid, gImageHandle, UefiHandleParsingLibStrings, NULL);\r
+ ASSERT (mHandleParsingHiiHandle != NULL);\r
+ }\r
+}\r
+\r
/**\r
Destructor for the library. free any resources.\r
\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
+ UINTN LoopCount;\r
+\r
+ for (LoopCount = 0; GuidList != NULL && LoopCount < GuidListCount; LoopCount++) {\r
+ SHELL_FREE_NON_NULL(GuidList[LoopCount].GuidId);\r
+ }\r
+\r
+ SHELL_FREE_NON_NULL(GuidList);\r
if (mHandleParsingHiiHandle != NULL) {\r
HiiRemovePackages(mHandleParsingHiiHandle);\r
}\r
return (CatSPrint(NULL, L"LoadedImage"));\r
}\r
\r
+ HandleParsingHiiInit();\r
+\r
Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_LI_DUMP_MAIN), NULL);\r
RetVal = AllocateZeroPool (PcdGet16 (PcdShellPrintBufferSize));\r
if (Temp == NULL || RetVal == NULL) {\r
return (CatSPrint(NULL, L"GraphicsOutput"));\r
}\r
\r
+ HandleParsingHiiInit();\r
+\r
Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_GOP_DUMP_MAIN), NULL);\r
RetVal = AllocateZeroPool (PcdGet16 (PcdShellPrintBufferSize));\r
if (Temp == NULL || RetVal == NULL) {\r
return (CatSPrint(NULL, L"PciRootBridgeIo"));\r
}\r
\r
+ HandleParsingHiiInit();\r
+\r
Status = gBS->HandleProtocol(\r
TheHandle,\r
&gEfiPciRootBridgeIoProtocolGuid,\r
}\r
\r
Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_PH), NULL);\r
- ASSERT (Temp != NULL);\r
+ if (Temp == NULL) {\r
+ return NULL;\r
+ }\r
Temp2 = CatSPrint(L"\r\n", Temp, PciRootBridgeIo->ParentHandle);\r
FreePool(Temp);\r
RetVal = Temp2;\r
Temp2 = NULL;\r
\r
Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_SEG), NULL);\r
- ASSERT (Temp != NULL);\r
+ if (Temp == NULL) {\r
+ SHELL_FREE_NON_NULL(RetVal);\r
+ return NULL;\r
+ }\r
Temp2 = CatSPrint(RetVal, Temp, PciRootBridgeIo->SegmentNumber);\r
FreePool(Temp);\r
FreePool(RetVal);\r
Status = PciRootBridgeIo->GetAttributes (PciRootBridgeIo, &Supports, &Attributes);\r
if (!EFI_ERROR(Status)) {\r
Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_ATT), NULL);\r
- ASSERT (Temp != NULL); \r
+ if (Temp == NULL) {\r
+ SHELL_FREE_NON_NULL(RetVal);\r
+ return NULL;\r
+ } \r
Temp2 = CatSPrint(RetVal, Temp, Attributes);\r
FreePool(Temp);\r
FreePool(RetVal);\r
Temp2 = NULL;\r
\r
Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_SUPPORTS), NULL);\r
- ASSERT (Temp != NULL);\r
+ if (Temp == NULL) {\r
+ SHELL_FREE_NON_NULL(RetVal);\r
+ return NULL;\r
+ }\r
Temp2 = CatSPrint(RetVal, Temp, Supports);\r
FreePool(Temp);\r
FreePool(RetVal);\r
Status = PciRootBridgeIo->Configuration (PciRootBridgeIo, (VOID **) &Configuration);\r
if (!EFI_ERROR(Status) && Configuration != NULL) {\r
Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_TITLE), NULL);\r
- ASSERT (Temp != NULL);\r
+ if (Temp == NULL) {\r
+ SHELL_FREE_NON_NULL(RetVal);\r
+ return NULL;\r
+ }\r
Temp2 = CatSPrint(RetVal, Temp, Supports);\r
FreePool(Temp);\r
FreePool(RetVal);\r
return (NULL);\r
}\r
\r
+ HandleParsingHiiInit();\r
+\r
RetVal = NULL;\r
Size = 0;\r
\r
return (Temp);\r
}\r
\r
+/**\r
+ Function to dump information about EfiAdapterInformation Protocol.\r
+\r
+ @param[in] TheHandle The handle that has the protocol installed.\r
+ @param[in] Verbose TRUE for additional information, FALSE otherwise.\r
+\r
+ @retval A pointer to a string containing the information.\r
+**/\r
+CHAR16*\r
+EFIAPI\r
+AdapterInformationDumpInformation (\r
+ IN CONST EFI_HANDLE TheHandle,\r
+ IN CONST BOOLEAN Verbose\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ EFI_ADAPTER_INFORMATION_PROTOCOL *EfiAdptrInfoProtocol;\r
+ UINTN InfoTypesBufferCount;\r
+ UINTN GuidIndex;\r
+ EFI_GUID *InfoTypesBuffer;\r
+ CHAR16 *GuidStr;\r
+ CHAR16 *TempStr;\r
+ CHAR16 *RetVal;\r
+ VOID *InformationBlock;\r
+ UINTN InformationBlockSize;\r
+ \r
+ if (!Verbose) {\r
+ return (CatSPrint(NULL, L"AdapterInfo"));\r
+ }\r
+\r
+ InfoTypesBuffer = NULL;\r
+ InformationBlock = NULL;\r
+ \r
+ //\r
+ // Allocate print buffer to store data\r
+ //\r
+ RetVal = AllocateZeroPool (PcdGet16(PcdShellPrintBufferSize));\r
+ if (RetVal == NULL) {\r
+ return NULL;\r
+ }\r
+\r
+ Status = gBS->OpenProtocol (\r
+ (EFI_HANDLE) (TheHandle),\r
+ &gEfiAdapterInformationProtocolGuid,\r
+ (VOID **) &EfiAdptrInfoProtocol,\r
+ NULL,\r
+ NULL,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+ );\r
+\r
+ if (EFI_ERROR (Status)) {\r
+ SHELL_FREE_NON_NULL (RetVal);\r
+ return NULL;\r
+ }\r
+\r
+ //\r
+ // Get a list of supported information types for this instance of the protocol.\r
+ //\r
+ Status = EfiAdptrInfoProtocol->GetSupportedTypes (\r
+ EfiAdptrInfoProtocol,\r
+ &InfoTypesBuffer, \r
+ &InfoTypesBufferCount\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_GET_SUPP_TYPES_FAILED), NULL);\r
+ if (TempStr != NULL) {\r
+ RetVal = CatSPrint (RetVal, TempStr, Status);\r
+ } else {\r
+ goto ERROR_EXIT;\r
+ } \r
+ } else {\r
+ TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_SUPP_TYPE_HEADER), NULL);\r
+ if (TempStr == NULL) {\r
+ goto ERROR_EXIT;\r
+ }\r
+ RetVal = CatSPrint (RetVal, TempStr);\r
+ SHELL_FREE_NON_NULL (TempStr);\r
+\r
+ for (GuidIndex = 0; GuidIndex < InfoTypesBufferCount; GuidIndex++) {\r
+ TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_GUID_NUMBER), NULL);\r
+ if (TempStr == NULL) {\r
+ goto ERROR_EXIT;\r
+ }\r
+ RetVal = CatSPrint (RetVal, TempStr, (GuidIndex + 1), InfoTypesBuffer[GuidIndex]);\r
+ SHELL_FREE_NON_NULL (TempStr);\r
+\r
+ TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_GUID_STRING), NULL);\r
+ if (TempStr == NULL) {\r
+ goto ERROR_EXIT;\r
+ }\r
+\r
+ if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoMediaStateGuid)) {\r
+ RetVal = CatSPrint (RetVal, TempStr, L"gEfiAdapterInfoMediaStateGuid");\r
+ } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoNetworkBootGuid)) {\r
+ RetVal = CatSPrint (RetVal, TempStr, L"gEfiAdapterInfoNetworkBootGuid");\r
+ } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoSanMacAddressGuid)) {\r
+ RetVal = CatSPrint (RetVal, TempStr, L"gEfiAdapterInfoSanMacAddressGuid");\r
+ } else {\r
+\r
+ GuidStr = GetStringNameFromGuid (&InfoTypesBuffer[GuidIndex], NULL);\r
+ \r
+ if (GuidStr != NULL) {\r
+ if (StrCmp(GuidStr, L"UnknownDevice") == 0) {\r
+ RetVal = CatSPrint (RetVal, TempStr, L"UnknownInfoType");\r
+ \r
+ SHELL_FREE_NON_NULL (TempStr);\r
+ SHELL_FREE_NON_NULL(GuidStr);\r
+ //\r
+ // So that we never have to pass this UnknownInfoType to the parsing function "GetInformation" service of AIP\r
+ //\r
+ continue; \r
+ } else {\r
+ RetVal = CatSPrint (RetVal, TempStr, GuidStr);\r
+ SHELL_FREE_NON_NULL(GuidStr);\r
+ }\r
+ }\r
+ }\r
+ \r
+ SHELL_FREE_NON_NULL (TempStr);\r
+\r
+ Status = EfiAdptrInfoProtocol->GetInformation (\r
+ EfiAdptrInfoProtocol,\r
+ &InfoTypesBuffer[GuidIndex],\r
+ &InformationBlock,\r
+ &InformationBlockSize\r
+ );\r
+\r
+ if (EFI_ERROR (Status)) {\r
+ TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_GETINFO_FAILED), NULL);\r
+ if (TempStr == NULL) {\r
+ goto ERROR_EXIT;\r
+ }\r
+ RetVal = CatSPrint (RetVal, TempStr, Status);\r
+ } else {\r
+ if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoMediaStateGuid)) {\r
+ TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_MEDIA_STATE), NULL);\r
+ if (TempStr == NULL) {\r
+ goto ERROR_EXIT;\r
+ }\r
+ RetVal = CatSPrint (\r
+ RetVal,\r
+ TempStr,\r
+ ((EFI_ADAPTER_INFO_MEDIA_STATE *)InformationBlock)->MediaState,\r
+ ((EFI_ADAPTER_INFO_MEDIA_STATE *)InformationBlock)->MediaState\r
+ );\r
+ } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoNetworkBootGuid)) {\r
+ TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_NETWORK_BOOT_INFO), NULL);\r
+ if (TempStr == NULL) {\r
+ goto ERROR_EXIT;\r
+ }\r
+ RetVal = CatSPrint (\r
+ RetVal,\r
+ TempStr,\r
+ ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->iScsiIpv4BootCapablity,\r
+ ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->iScsiIpv6BootCapablity, \r
+ ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->FCoeBootCapablity, \r
+ ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->OffloadCapability, \r
+ ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->iScsiMpioCapability, \r
+ ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->iScsiIpv4Boot, \r
+ ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->iScsiIpv6Boot,\r
+ ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->FCoeBoot\r
+ );\r
+ } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoSanMacAddressGuid) == TRUE) { \r
+ TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_SAN_MAC_ADDRESS_INFO), NULL);\r
+ if (TempStr == NULL) {\r
+ goto ERROR_EXIT;\r
+ }\r
+ RetVal = CatSPrint (\r
+ RetVal,\r
+ TempStr,\r
+ ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[0], \r
+ ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[1], \r
+ ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[2],\r
+ ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[3], \r
+ ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[4], \r
+ ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[5]\r
+ ); \r
+ } else {\r
+ TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_UNKNOWN_INFO_TYPE), NULL);\r
+ if (TempStr == NULL) {\r
+ goto ERROR_EXIT;\r
+ }\r
+ RetVal = CatSPrint (RetVal, TempStr, &InfoTypesBuffer[GuidIndex]);\r
+ }\r
+ }\r
+ SHELL_FREE_NON_NULL (TempStr);\r
+ SHELL_FREE_NON_NULL (InformationBlock);\r
+ }\r
+ }\r
+\r
+ SHELL_FREE_NON_NULL (InfoTypesBuffer);\r
+ return RetVal;\r
+\r
+ERROR_EXIT:\r
+ SHELL_FREE_NON_NULL (RetVal);\r
+ SHELL_FREE_NON_NULL (InfoTypesBuffer);\r
+ SHELL_FREE_NON_NULL (InformationBlock);\r
+ return NULL;\r
+}\r
//\r
// Put the information on the NT32 protocol GUIDs here so we are not dependant on the Nt32Pkg\r
//\r
STATIC CONST EFI_GUID WinNtIoProtocolGuid = LOCAL_EFI_WIN_NT_BUS_DRIVER_IO_PROTOCOL_GUID;\r
STATIC CONST EFI_GUID WinNtSerialPortGuid = LOCAL_EFI_WIN_NT_SERIAL_PORT_GUID;\r
\r
+//\r
+// Deprecated protocols we dont want to link from IntelFrameworkModulePkg\r
+//\r
+#define LOCAL_EFI_ISA_IO_PROTOCOL_GUID \\r
+ { \\r
+ 0x7ee2bd44, 0x3da0, 0x11d4, { 0x9a, 0x38, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \\r
+ } \r
+#define LOCAL_EFI_ISA_ACPI_PROTOCOL_GUID \\r
+ { \\r
+ 0x64a892dc, 0x5561, 0x4536, { 0x92, 0xc7, 0x79, 0x9b, 0xfc, 0x18, 0x33, 0x55 } \\r
+ }\r
+STATIC CONST EFI_GUID EfiIsaIoProtocolGuid = LOCAL_EFI_ISA_IO_PROTOCOL_GUID;\r
+STATIC CONST EFI_GUID EfiIsaAcpiProtocolGuid = LOCAL_EFI_ISA_ACPI_PROTOCOL_GUID;\r
+\r
+\r
STATIC CONST GUID_INFO_BLOCK mGuidStringListNT[] = {\r
{STRING_TOKEN(STR_WINNT_THUNK), (EFI_GUID*)&WinNtThunkProtocolGuid, NULL},\r
{STRING_TOKEN(STR_WINNT_DRIVER_IO), (EFI_GUID*)&WinNtIoProtocolGuid, NULL},\r
{STRING_TOKEN(STR_IPV4_SB), &gEfiIp4ServiceBindingProtocolGuid, NULL},\r
{STRING_TOKEN(STR_IPV4), &gEfiIp4ProtocolGuid, NULL},\r
{STRING_TOKEN(STR_IPV4_CFG), &gEfiIp4ConfigProtocolGuid, NULL},\r
+ {STRING_TOKEN(STR_IPV4_CFG2), &gEfiIp4Config2ProtocolGuid, NULL},\r
{STRING_TOKEN(STR_UDPV4_SB), &gEfiUdp4ServiceBindingProtocolGuid, NULL},\r
{STRING_TOKEN(STR_UDPV4), &gEfiUdp4ProtocolGuid, NULL},\r
{STRING_TOKEN(STR_MTFTPV4_SB), &gEfiMtftp4ServiceBindingProtocolGuid, NULL},\r
{STRING_TOKEN(STR_DRIVER_CONFIG), &gEfiDriverConfigurationProtocolGuid, NULL},\r
{STRING_TOKEN(STR_DRIVER_CONFIG2), &gEfiDriverConfiguration2ProtocolGuid, NULL},\r
\r
+//\r
+// these are using local (non-global) definitions to reduce package dependancy.\r
+//\r
+ {STRING_TOKEN(STR_ISA_IO), (EFI_GUID*)&EfiIsaIoProtocolGuid, NULL},\r
+ {STRING_TOKEN(STR_ISA_ACPI), (EFI_GUID*)&EfiIsaAcpiProtocolGuid, NULL},\r
+\r
//\r
// the ones under this are GUID identified structs, not protocols\r
//\r
// UEFI 2.4\r
//\r
{STRING_TOKEN(STR_DISK_IO2), &gEfiDiskIo2ProtocolGuid, NULL},\r
- {STRING_TOKEN(STR_ADAPTER_INFO), &gEfiAdapterInformationProtocolGuid, NULL},\r
+ {STRING_TOKEN(STR_ADAPTER_INFO), &gEfiAdapterInformationProtocolGuid, AdapterInformationDumpInformation},\r
\r
//\r
// PI Spec ones\r
//\r
{STRING_TOKEN(STR_IDE_CONT_INIT), &gEfiIdeControllerInitProtocolGuid, NULL},\r
+ {STRING_TOKEN(STR_DISK_INFO), &gEfiDiskInfoProtocolGuid, NULL},\r
\r
//\r
// UEFI Shell Spec 2.0\r
)\r
{\r
CONST GUID_INFO_BLOCK *ListWalker;\r
+ UINTN LoopCount;\r
\r
ASSERT(Guid != NULL);\r
\r
+ for (LoopCount = 0, ListWalker = GuidList; GuidList != NULL && LoopCount < GuidListCount; LoopCount++, ListWalker++) {\r
+ if (CompareGuid(ListWalker->GuidId, Guid)) {\r
+ return (ListWalker);\r
+ }\r
+ }\r
+\r
if (PcdGetBool(PcdShellIncludeNtGuids)) {\r
for (ListWalker = mGuidStringListNT ; ListWalker != NULL && ListWalker->GuidId != NULL ; ListWalker++) {\r
if (CompareGuid(ListWalker->GuidId, Guid)) {\r
return (ListWalker);\r
}\r
}\r
- return (ListWalker);\r
+ return (NULL);\r
+}\r
+\r
+/**\r
+Function to add a new GUID/Name mapping.\r
+\r
+@param[in] Guid The Guid\r
+@param[in] NameID The STRING id of the HII string to use\r
+@param[in] DumpFunc The pointer to the dump function\r
+\r
+\r
+@retval EFI_SUCCESS The operation was sucessful\r
+@retval EFI_OUT_OF_RESOURCES A memory allocation failed\r
+@retval EFI_INVALID_PARAMETER Guid NameId was invalid\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+InsertNewGuidNameMapping(\r
+ IN CONST EFI_GUID *Guid,\r
+ IN CONST EFI_STRING_ID NameID,\r
+ IN CONST DUMP_PROTOCOL_INFO DumpFunc OPTIONAL\r
+ )\r
+{\r
+ ASSERT(Guid != NULL);\r
+ ASSERT(NameID != 0);\r
+\r
+ GuidList = ReallocatePool(GuidListCount * sizeof(GUID_INFO_BLOCK), GuidListCount+1 * sizeof(GUID_INFO_BLOCK), GuidList);\r
+ if (GuidList == NULL) {\r
+ GuidListCount = 0;\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
+ GuidListCount++;\r
+\r
+ GuidList[GuidListCount - 1].GuidId = AllocateCopyPool(sizeof(EFI_GUID), Guid);\r
+ GuidList[GuidListCount - 1].StringId = NameID;\r
+ GuidList[GuidListCount - 1].DumpInfo = DumpFunc;\r
+\r
+ if (GuidList[GuidListCount - 1].GuidId == NULL) {\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
+\r
+ return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+ Function to add a new GUID/Name mapping.\r
+\r
+ This cannot overwrite an existing mapping.\r
+\r
+ @param[in] Guid The Guid\r
+ @param[in] TheName The Guid's name\r
+ @param[in] Lang RFC4646 language code list or NULL\r
+\r
+ @retval EFI_SUCCESS The operation was sucessful\r
+ @retval EFI_ACCESS_DENIED There was a duplicate\r
+ @retval EFI_OUT_OF_RESOURCES A memory allocation failed\r
+ @retval EFI_INVALID_PARAMETER Guid or TheName was NULL\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+AddNewGuidNameMapping(\r
+ IN CONST EFI_GUID *Guid,\r
+ IN CONST CHAR16 *TheName,\r
+ IN CONST CHAR8 *Lang OPTIONAL\r
+ )\r
+{\r
+ EFI_STRING_ID NameID;\r
+\r
+ HandleParsingHiiInit();\r
+\r
+ if (Guid == NULL || TheName == NULL){\r
+ return (EFI_INVALID_PARAMETER);\r
+ }\r
+\r
+ if ((InternalShellGetNodeFromGuid(Guid)) != NULL) {\r
+ return (EFI_ACCESS_DENIED);\r
+ }\r
+\r
+ NameID = HiiSetString(mHandleParsingHiiHandle, 0, (CHAR16*)TheName, Lang);\r
+ if (NameID == 0) {\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
+\r
+ return (InsertNewGuidNameMapping(Guid, NameID, NULL));\r
}\r
\r
/**\r
{\r
CONST GUID_INFO_BLOCK *Id;\r
\r
+ HandleParsingHiiInit();\r
+\r
Id = InternalShellGetNodeFromGuid(Guid);\r
- return (HiiGetString(mHandleParsingHiiHandle, Id->StringId, Lang));\r
+ return (HiiGetString(mHandleParsingHiiHandle, Id==NULL?STRING_TOKEN(STR_UNKNOWN_DEVICE):Id->StringId, Lang));\r
}\r
\r
/**\r
{\r
CONST GUID_INFO_BLOCK *ListWalker;\r
CHAR16 *String;\r
+ UINTN LoopCount;\r
+\r
+ HandleParsingHiiInit();\r
\r
ASSERT(Guid != NULL);\r
if (Guid == NULL) {\r
return (EFI_SUCCESS);\r
}\r
}\r
+\r
+ for (LoopCount = 0, ListWalker = GuidList; GuidList != NULL && LoopCount < GuidListCount; LoopCount++, ListWalker++) {\r
+ String = HiiGetString(mHandleParsingHiiHandle, ListWalker->StringId, Lang);\r
+ if (Name != NULL && String != NULL && StringNoCaseCompare (&Name, &String) == 0) {\r
+ *Guid = ListWalker->GuidId;\r
+ }\r
+ SHELL_FREE_NON_NULL(String);\r
+ if (*Guid != NULL) {\r
+ return (EFI_SUCCESS);\r
+ }\r
+ }\r
+\r
return (EFI_NOT_FOUND);\r
}\r
\r
// Set the bit describing what this handle has\r
//\r
if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiLoadedImageProtocolGuid) ) {\r
- (*HandleType)[HandleIndex] |= HR_IMAGE_HANDLE;\r
+ (*HandleType)[HandleIndex] |= (UINTN)HR_IMAGE_HANDLE;\r
} else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDriverBindingProtocolGuid) ) {\r
- (*HandleType)[HandleIndex] |= HR_DRIVER_BINDING_HANDLE;\r
+ (*HandleType)[HandleIndex] |= (UINTN)HR_DRIVER_BINDING_HANDLE;\r
} else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDriverConfiguration2ProtocolGuid)) {\r
- (*HandleType)[HandleIndex] |= HR_DRIVER_CONFIGURATION_HANDLE;\r
+ (*HandleType)[HandleIndex] |= (UINTN)HR_DRIVER_CONFIGURATION_HANDLE;\r
} else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDriverConfigurationProtocolGuid) ) {\r
- (*HandleType)[HandleIndex] |= HR_DRIVER_CONFIGURATION_HANDLE;\r
+ (*HandleType)[HandleIndex] |= (UINTN)HR_DRIVER_CONFIGURATION_HANDLE;\r
} else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDriverDiagnostics2ProtocolGuid) ) {\r
- (*HandleType)[HandleIndex] |= HR_DRIVER_DIAGNOSTICS_HANDLE;\r
+ (*HandleType)[HandleIndex] |= (UINTN)HR_DRIVER_DIAGNOSTICS_HANDLE;\r
} else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDriverDiagnosticsProtocolGuid) ) {\r
- (*HandleType)[HandleIndex] |= HR_DRIVER_DIAGNOSTICS_HANDLE;\r
+ (*HandleType)[HandleIndex] |= (UINTN)HR_DRIVER_DIAGNOSTICS_HANDLE;\r
} else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiComponentName2ProtocolGuid) ) {\r
- (*HandleType)[HandleIndex] |= HR_COMPONENT_NAME_HANDLE;\r
+ (*HandleType)[HandleIndex] |= (UINTN)HR_COMPONENT_NAME_HANDLE;\r
} else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiComponentNameProtocolGuid) ) {\r
- (*HandleType)[HandleIndex] |= HR_COMPONENT_NAME_HANDLE;\r
+ (*HandleType)[HandleIndex] |= (UINTN)HR_COMPONENT_NAME_HANDLE;\r
} else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDevicePathProtocolGuid) ) {\r
- (*HandleType)[HandleIndex] |= HR_DEVICE_HANDLE;\r
+ (*HandleType)[HandleIndex] |= (UINTN)HR_DEVICE_HANDLE;\r
} else {\r
DEBUG_CODE_BEGIN();\r
ASSERT((*HandleType)[HandleIndex] == (*HandleType)[HandleIndex]);\r
//\r
for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; OpenInfoIndex++) {\r
if (OpenInfo[OpenInfoIndex].AgentHandle == DriverBindingHandle && (OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) != 0) {\r
- (*HandleType)[HandleIndex] |= (HR_DEVICE_HANDLE | HR_CONTROLLER_HANDLE);\r
+ (*HandleType)[HandleIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_CONTROLLER_HANDLE);\r
if (DriverBindingHandleIndex != -1) {\r
- (*HandleType)[DriverBindingHandleIndex] |= HR_DEVICE_DRIVER;\r
+ (*HandleType)[DriverBindingHandleIndex] |= (UINTN)HR_DEVICE_DRIVER;\r
}\r
}\r
if (OpenInfo[OpenInfoIndex].AgentHandle == DriverBindingHandle && (OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) != 0) {\r
- (*HandleType)[HandleIndex] |= (HR_DEVICE_HANDLE | HR_CONTROLLER_HANDLE);\r
+ (*HandleType)[HandleIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_CONTROLLER_HANDLE);\r
if (DriverBindingHandleIndex != -1) {\r
- (*HandleType)[DriverBindingHandleIndex] |= (HR_BUS_DRIVER | HR_DEVICE_DRIVER);\r
+ (*HandleType)[DriverBindingHandleIndex] |= (UINTN)(HR_BUS_DRIVER | HR_DEVICE_DRIVER);\r
}\r
for (ChildIndex = 0; ChildIndex < *HandleCount; ChildIndex++) {\r
if (OpenInfo[OpenInfoIndex].ControllerHandle == (*HandleBuffer)[ChildIndex]) {\r
- (*HandleType)[ChildIndex] |= (HR_DEVICE_HANDLE | HR_CHILD_HANDLE);\r
+ (*HandleType)[ChildIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_CHILD_HANDLE);\r
}\r
}\r
}\r
}\r
if (DriverBindingHandle == NULL && ControllerHandle != NULL) {\r
if (ControllerHandle == (*HandleBuffer)[HandleIndex]) {\r
- (*HandleType)[HandleIndex] |= (HR_DEVICE_HANDLE | HR_CONTROLLER_HANDLE);\r
+ (*HandleType)[HandleIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_CONTROLLER_HANDLE);\r
for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; OpenInfoIndex++) {\r
if ((OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) != 0) {\r
for (ChildIndex = 0; ChildIndex < *HandleCount; ChildIndex++) {\r
if (OpenInfo[OpenInfoIndex].AgentHandle == (*HandleBuffer)[ChildIndex]) {\r
- (*HandleType)[ChildIndex] |= HR_DEVICE_DRIVER;\r
+ (*HandleType)[ChildIndex] |= (UINTN)HR_DEVICE_DRIVER;\r
}\r
}\r
}\r
if ((OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) != 0) {\r
for (ChildIndex = 0; ChildIndex < *HandleCount; ChildIndex++) {\r
if (OpenInfo[OpenInfoIndex].AgentHandle == (*HandleBuffer)[ChildIndex]) {\r
- (*HandleType)[ChildIndex] |= (HR_BUS_DRIVER | HR_DEVICE_DRIVER);\r
+ (*HandleType)[ChildIndex] |= (UINTN)(HR_BUS_DRIVER | HR_DEVICE_DRIVER);\r
}\r
if (OpenInfo[OpenInfoIndex].ControllerHandle == (*HandleBuffer)[ChildIndex]) {\r
- (*HandleType)[ChildIndex] |= (HR_DEVICE_HANDLE | HR_CHILD_HANDLE);\r
+ (*HandleType)[ChildIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_CHILD_HANDLE);\r
}\r
}\r
}\r
for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; OpenInfoIndex++) {\r
if ((OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) != 0) {\r
if (OpenInfo[OpenInfoIndex].ControllerHandle == ControllerHandle) {\r
- (*HandleType)[HandleIndex] |= (HR_DEVICE_HANDLE | HR_PARENT_HANDLE);\r
+ (*HandleType)[HandleIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_PARENT_HANDLE);\r
}\r
}\r
}\r
}\r
if (DriverBindingHandle != NULL && ControllerHandle != NULL) {\r
if (ControllerHandle == (*HandleBuffer)[HandleIndex]) {\r
- (*HandleType)[HandleIndex] |= (HR_DEVICE_HANDLE | HR_CONTROLLER_HANDLE);\r
+ (*HandleType)[HandleIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_CONTROLLER_HANDLE);\r
for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; OpenInfoIndex++) {\r
if ((OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) != 0) {\r
if (OpenInfo[OpenInfoIndex].AgentHandle == DriverBindingHandle) {\r
if (DriverBindingHandleIndex != -1) {\r
- (*HandleType)[DriverBindingHandleIndex] |= HR_DEVICE_DRIVER;\r
+ (*HandleType)[DriverBindingHandleIndex] |= (UINTN)HR_DEVICE_DRIVER;\r
}\r
}\r
}\r
if (OpenInfo[OpenInfoIndex].AgentHandle == DriverBindingHandle) {\r
for (ChildIndex = 0; ChildIndex < *HandleCount; ChildIndex++) {\r
if (OpenInfo[OpenInfoIndex].ControllerHandle == (*HandleBuffer)[ChildIndex]) {\r
- (*HandleType)[ChildIndex] |= (HR_DEVICE_HANDLE | HR_CHILD_HANDLE);\r
+ (*HandleType)[ChildIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_CHILD_HANDLE);\r
}\r
}\r
}\r
\r
for (ChildIndex = 0; ChildIndex < *HandleCount; ChildIndex++) {\r
if (OpenInfo[OpenInfoIndex].AgentHandle == (*HandleBuffer)[ChildIndex]) {\r
- (*HandleType)[ChildIndex] |= (HR_BUS_DRIVER | HR_DEVICE_DRIVER);\r
+ (*HandleType)[ChildIndex] |= (UINTN)(HR_BUS_DRIVER | HR_DEVICE_DRIVER);\r
}\r
}\r
}\r
for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; OpenInfoIndex++) {\r
if ((OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) != 0) {\r
if (OpenInfo[OpenInfoIndex].ControllerHandle == ControllerHandle) {\r
- (*HandleType)[HandleIndex] |= (HR_DEVICE_HANDLE | HR_PARENT_HANDLE);\r
+ (*HandleType)[HandleIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_PARENT_HANDLE);\r
}\r
}\r
}\r