/** @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
}\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 (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
IN CONST CHAR8 *Lang OPTIONAL\r
)\r
{\r
- CONST GUID_INFO_BLOCK *Temp;\r
EFI_STRING_ID NameID;\r
\r
HandleParsingHiiInit();\r
return (EFI_INVALID_PARAMETER);\r
}\r
\r
- if ((Temp = InternalShellGetNodeFromGuid(Guid)) != NULL) {\r
+ if ((InternalShellGetNodeFromGuid(Guid)) != NULL) {\r
return (EFI_ACCESS_DENIED);\r
}\r
\r