diff --git a/MdeModulePkg/Universal/DevicePathDxe/DevicePath.h b/MdeModulePkg/Universal/DevicePathDxe/DevicePath.h index f95b13f7a8..85bd82f39e 100644 --- a/MdeModulePkg/Universal/DevicePathDxe/DevicePath.h +++ b/MdeModulePkg/Universal/DevicePathDxe/DevicePath.h @@ -109,6 +109,8 @@ typedef struct { #define USB_SUBCLASS_IRDA_BRIDGE 2 #define USB_SUBCLASS_TEST 3 +#pragma pack(1) + typedef struct { EFI_DEVICE_PATH_PROTOCOL Header; EFI_GUID Guid; @@ -139,10 +141,9 @@ typedef struct { EFI_DEVICE_PATH_PROTOCOL Header; UINT16 NetworkProtocol; UINT16 LoginOption; - UINT16 Reserved; - UINT16 TargetPortalGroupTag; UINT64 Lun; - CHAR16 iSCSITargetName[1]; + UINT16 TargetPortalGroupTag; + CHAR8 iSCSITargetName[1]; } ISCSI_DEVICE_PATH_WITH_NAME; typedef struct { @@ -151,6 +152,8 @@ typedef struct { UINT8 VendorDefinedData[1]; } VENDOR_DEVICE_PATH_WITH_DATA; +#pragma pack() + CHAR16 * ConvertDeviceNodeToText ( IN CONST EFI_DEVICE_PATH_PROTOCOL *DeviceNode, diff --git a/MdeModulePkg/Universal/DevicePathDxe/DevicePathFromText.c b/MdeModulePkg/Universal/DevicePathDxe/DevicePathFromText.c index f18951b64f..d76a720fef 100644 --- a/MdeModulePkg/Universal/DevicePathDxe/DevicePathFromText.c +++ b/MdeModulePkg/Universal/DevicePathDxe/DevicePathFromText.c @@ -132,7 +132,7 @@ SplitStr ( Get current sub-string from a string list, before return the list header is moved to next sub-string. The sub-string is separated by the specified character. For example, the separator is ',', the string - list is "2,0,3", it returns "2", the remain list move to "2,3" + list is "2,0,3", it returns "2", the remain list move to "0,3" Arguments: List - A string list separated by the specified separator @@ -408,20 +408,24 @@ HexStringToBuf ( STATIC CHAR16 * TrimHexStr ( - IN CHAR16 *Str + IN CHAR16 *Str, + OUT BOOLEAN *IsHex ) /*++ Routine Description: - Skip the leading white space and '0x' or '0X' of a hex string + Skip the leading white space and '0x' or '0X' of a integer string Arguments: - Str - The hex string + Str - The integer string + IsHex - 1: Hex string, 0: Decimal string Returns: --*/ { + *IsHex = FALSE; + // // skip preceeding white space // @@ -439,6 +443,7 @@ TrimHexStr ( // if (*Str && (*Str == 'x' || *Str == 'X')) { Str += 1; + *IsHex = TRUE; } return Str; @@ -473,7 +478,7 @@ Returns: // Rvalue = 0; Length = sizeof (UINTN); - HexStringToBuf ((UINT8 *) &Rvalue, &Length, TrimHexStr (Str), NULL); + HexStringToBuf ((UINT8 *) &Rvalue, &Length, Str, NULL); return Rvalue; } @@ -502,12 +507,12 @@ Returns: *Data = 0; Length = sizeof (UINT64); - HexStringToBuf ((UINT8 *) Data, &Length, TrimHexStr (Str), NULL); + HexStringToBuf ((UINT8 *) Data, &Length, Str, NULL); } STATIC UINTN -Atoi ( +Dtoi ( IN CHAR16 *str ) /*++ @@ -561,6 +566,121 @@ Returns: return Rvalue; } +STATIC +VOID +Dtoi64 ( + IN CHAR16 *str, + OUT UINT64 *Data + ) +/*++ + +Routine Description: + + Convert decimal string to uint + +Arguments: + + Str - The string + +Returns: + +--*/ +{ + UINT64 Rvalue; + CHAR16 Char; + UINT64 High; + UINT64 Low; + + ASSERT (str != NULL); + ASSERT (Data != NULL); + + // + // skip preceeding white space + // + while (*str && *str == ' ') { + str += 1; + } + // + // convert digits + // + Rvalue = 0; + Char = *(str++); + while (Char) { + if (Char >= '0' && Char <= '9') { + High = LShiftU64 (Rvalue, 3); + Low = LShiftU64 (Rvalue, 1); + Rvalue = High + Low + Char - '0'; + } else { + break; + } + + Char = *(str++); + } + + *Data = Rvalue; +} + +STATIC +UINTN +Strtoi ( + IN CHAR16 *Str + ) +/*++ + +Routine Description: + + Convert integer string to uint. + +Arguments: + + Str - The integer string. If leading with "0x" or "0X", it's heximal. + +Returns: + +--*/ +{ + BOOLEAN IsHex; + + Str = TrimHexStr (Str, &IsHex); + + if (IsHex) { + return Xtoi (Str); + } else { + return Dtoi (Str); + } +} + +STATIC +VOID +Strtoi64 ( + IN CHAR16 *Str, + IN UINT64 *Data + ) +/*++ + +Routine Description: + + Convert integer string to 64 bit data. + +Arguments: + + Str - The integer string. If leading with "0x" or "0X", it's heximal. + +Returns: + +--*/ +{ + BOOLEAN IsHex; + + Str = TrimHexStr (Str, &IsHex); + + if (IsHex) { + Xtoi64 (Str, Data); + } else { + Dtoi64 (Str, Data); + } +} + STATIC EFI_STATUS StrToBuf ( @@ -674,7 +794,7 @@ StrToIPv4Addr ( UINTN Index; for (Index = 0; Index < 4; Index++) { - IPv4Addr->Addr[Index] = (UINT8) Atoi (SplitStr (Str, L'.')); + IPv4Addr->Addr[Index] = (UINT8) Dtoi (SplitStr (Str, L'.')); } } @@ -726,16 +846,16 @@ DevPathFromTextPci ( CHAR16 *DeviceStr; PCI_DEVICE_PATH *Pci; - FunctionStr = GetNextParamStr (&TextDeviceNode); DeviceStr = GetNextParamStr (&TextDeviceNode); + FunctionStr = GetNextParamStr (&TextDeviceNode); Pci = (PCI_DEVICE_PATH *) CreateDeviceNode ( HARDWARE_DEVICE_PATH, HW_PCI_DP, sizeof (PCI_DEVICE_PATH) ); - Pci->Function = (UINT8) Xtoi (FunctionStr); - Pci->Device = (UINT8) Xtoi (DeviceStr); + Pci->Function = (UINT8) Strtoi (FunctionStr); + Pci->Device = (UINT8) Strtoi (DeviceStr); return (EFI_DEVICE_PATH_PROTOCOL *) Pci; } @@ -756,7 +876,7 @@ DevPathFromTextPcCard ( sizeof (PCCARD_DEVICE_PATH) ); - Pccard->FunctionNumber = (UINT8) Xtoi (FunctionNumberStr); + Pccard->FunctionNumber = (UINT8) Strtoi (FunctionNumberStr); return (EFI_DEVICE_PATH_PROTOCOL *) Pccard; } @@ -767,10 +887,12 @@ DevPathFromTextMemoryMapped ( IN CHAR16 *TextDeviceNode ) { + CHAR16 *MemoryTypeStr; CHAR16 *StartingAddressStr; CHAR16 *EndingAddressStr; MEMMAP_DEVICE_PATH *MemMap; + MemoryTypeStr = GetNextParamStr (&TextDeviceNode); StartingAddressStr = GetNextParamStr (&TextDeviceNode); EndingAddressStr = GetNextParamStr (&TextDeviceNode); MemMap = (MEMMAP_DEVICE_PATH *) CreateDeviceNode ( @@ -779,10 +901,9 @@ DevPathFromTextMemoryMapped ( sizeof (MEMMAP_DEVICE_PATH) ); - MemMap->MemoryType = 0; - - Xtoi64 (StartingAddressStr, &MemMap->StartingAddress); - Xtoi64 (EndingAddressStr, &MemMap->EndingAddress); + MemMap->MemoryType = (UINT32) Strtoi (MemoryTypeStr); + Strtoi64 (StartingAddressStr, &MemMap->StartingAddress); + Strtoi64 (EndingAddressStr, &MemMap->EndingAddress); return (EFI_DEVICE_PATH_PROTOCOL *) MemMap; } @@ -849,12 +970,27 @@ DevPathFromTextCtrl ( HW_CONTROLLER_DP, sizeof (CONTROLLER_DEVICE_PATH) ); - Controller->ControllerNumber = (UINT32) Xtoi (ControllerStr); + Controller->ControllerNumber = (UINT32) Strtoi (ControllerStr); return (EFI_DEVICE_PATH_PROTOCOL *) Controller; } STATIC +VOID +EisaIdFromText ( + IN CHAR16 *Text, + OUT UINT32 *EisaId + ) +{ + UINTN PnpId; + + PnpId = Xtoi (Text + 3); + *EisaId = (((Text[0] - '@') & 0x1f) << 10) + + (((Text[1] - '@') & 0x1f) << 5) + + ((Text[2] - '@') & 0x1f) + + (UINT32) (PnpId << 16); +} + EFI_DEVICE_PATH_PROTOCOL * DevPathFromTextAcpi ( IN CHAR16 *TextDeviceNode @@ -872,12 +1008,8 @@ DevPathFromTextAcpi ( sizeof (ACPI_HID_DEVICE_PATH) ); - if ((HIDStr[0] == L'P') && (HIDStr[1] == L'N') && (HIDStr[2] == L'P')) { - HIDStr += 3; - } - - Acpi->HID = EISA_PNP_ID (Xtoi (HIDStr)); - Acpi->UID = (UINT32) Xtoi (UIDStr); + EisaIdFromText (HIDStr, &Acpi->HID); + Acpi->UID = (UINT32) Strtoi (UIDStr); return (EFI_DEVICE_PATH_PROTOCOL *) Acpi; } @@ -886,7 +1018,7 @@ STATIC EFI_DEVICE_PATH_PROTOCOL * ConvertFromTextAcpi ( IN CHAR16 *TextDeviceNode, - IN UINT32 Hid + IN UINT32 PnPId ) { CHAR16 *UIDStr; @@ -899,8 +1031,8 @@ ConvertFromTextAcpi ( sizeof (ACPI_HID_DEVICE_PATH) ); - Acpi->HID = Hid; - Acpi->UID = (UINT32) Xtoi (UIDStr); + Acpi->HID = EFI_PNP_ID (PnPId); + Acpi->UID = (UINT32) Strtoi (UIDStr); return (EFI_DEVICE_PATH_PROTOCOL *) Acpi; } @@ -911,7 +1043,7 @@ DevPathFromTextPciRoot ( IN CHAR16 *TextDeviceNode ) { - return ConvertFromTextAcpi (TextDeviceNode, 0x0a0341d0); + return ConvertFromTextAcpi (TextDeviceNode, 0x0a03); } STATIC @@ -920,7 +1052,7 @@ DevPathFromTextFloppy ( IN CHAR16 *TextDeviceNode ) { - return ConvertFromTextAcpi (TextDeviceNode, 0x060441d0); + return ConvertFromTextAcpi (TextDeviceNode, 0x0604); } STATIC @@ -929,7 +1061,7 @@ DevPathFromTextKeyboard ( IN CHAR16 *TextDeviceNode ) { - return ConvertFromTextAcpi (TextDeviceNode, 0x030141d0); + return ConvertFromTextAcpi (TextDeviceNode, 0x0301); } STATIC @@ -938,7 +1070,7 @@ DevPathFromTextSerial ( IN CHAR16 *TextDeviceNode ) { - return ConvertFromTextAcpi (TextDeviceNode, 0x050141d0); + return ConvertFromTextAcpi (TextDeviceNode, 0x0501); } STATIC @@ -947,7 +1079,7 @@ DevPathFromTextParallelPort ( IN CHAR16 *TextDeviceNode ) { - return ConvertFromTextAcpi (TextDeviceNode, 0x040141d0); + return ConvertFromTextAcpi (TextDeviceNode, 0x0401); } STATIC @@ -956,15 +1088,15 @@ DevPathFromTextAcpiEx ( IN CHAR16 *TextDeviceNode ) { - CHAR16 *HIDStr; - CHAR16 *CIDStr; - CHAR16 *UIDStr; - CHAR16 *HIDSTRStr; - CHAR16 *CIDSTRStr; - CHAR16 *UIDSTRStr; - CHAR8 *AsciiStr; - UINT16 Length; - ACPI_EXTENDED_HID_DEVICE_PATH_WITH_STR *AcpiExt; + CHAR16 *HIDStr; + CHAR16 *CIDStr; + CHAR16 *UIDStr; + CHAR16 *HIDSTRStr; + CHAR16 *CIDSTRStr; + CHAR16 *UIDSTRStr; + CHAR8 *AsciiStr; + UINT16 Length; + ACPI_EXTENDED_HID_DEVICE_PATH *AcpiEx; HIDStr = GetNextParamStr (&TextDeviceNode); CIDStr = GetNextParamStr (&TextDeviceNode); @@ -976,28 +1108,22 @@ DevPathFromTextAcpiEx ( Length = (UINT16) (sizeof (ACPI_EXTENDED_HID_DEVICE_PATH) + StrLen (HIDSTRStr) + 1); Length = (UINT16) (Length + StrLen (UIDSTRStr) + 1); Length = (UINT16) (Length + StrLen (CIDSTRStr) + 1); - AcpiExt = (ACPI_EXTENDED_HID_DEVICE_PATH_WITH_STR *) CreateDeviceNode ( - ACPI_DEVICE_PATH, - ACPI_EXTENDED_DP, - Length - ); + AcpiEx = (ACPI_EXTENDED_HID_DEVICE_PATH *) CreateDeviceNode ( + ACPI_DEVICE_PATH, + ACPI_EXTENDED_DP, + Length + ); - if ((HIDStr[0] == L'P') && (HIDStr[1] == L'N') && (HIDStr[2] == L'P')) { - HIDStr += 3; - AcpiExt->HID = EISA_PNP_ID (Xtoi (HIDStr)); - } else { - AcpiExt->HID = (UINT32) Xtoi (HIDStr); - } + EisaIdFromText (HIDStr, &AcpiEx->HID); + EisaIdFromText (CIDStr, &AcpiEx->CID); + AcpiEx->UID = (UINT32) Strtoi (UIDStr); - AcpiExt->UID = (UINT32) Xtoi (UIDStr); - AcpiExt->CID = (UINT32) Xtoi (CIDStr); - - AsciiStr = AcpiExt->HidUidCidStr; + AsciiStr = (CHAR8 *) ((UINT8 *)AcpiEx + sizeof (ACPI_EXTENDED_HID_DEVICE_PATH)); StrToAscii (HIDSTRStr, &AsciiStr); StrToAscii (UIDSTRStr, &AsciiStr); StrToAscii (CIDSTRStr, &AsciiStr); - - return (EFI_DEVICE_PATH_PROTOCOL *) AcpiExt; + + return (EFI_DEVICE_PATH_PROTOCOL *) AcpiEx; } STATIC @@ -1006,38 +1132,32 @@ DevPathFromTextAcpiExp ( IN CHAR16 *TextDeviceNode ) { - CHAR16 *HIDStr; - CHAR16 *CIDStr; - CHAR16 *UIDSTRStr; - CHAR8 *AsciiStr; - UINT16 Length; - ACPI_EXTENDED_HID_DEVICE_PATH_WITH_STR *AcpiExt; + CHAR16 *HIDStr; + CHAR16 *CIDStr; + CHAR16 *UIDSTRStr; + CHAR8 *AsciiStr; + UINT16 Length; + ACPI_EXTENDED_HID_DEVICE_PATH *AcpiEx; HIDStr = GetNextParamStr (&TextDeviceNode); CIDStr = GetNextParamStr (&TextDeviceNode); UIDSTRStr = GetNextParamStr (&TextDeviceNode); Length = (UINT16) (sizeof (ACPI_EXTENDED_HID_DEVICE_PATH) + StrLen (UIDSTRStr) + 3); - AcpiExt = (ACPI_EXTENDED_HID_DEVICE_PATH_WITH_STR *) CreateDeviceNode ( - ACPI_DEVICE_PATH, - ACPI_EXTENDED_DP, - Length - ); + AcpiEx = (ACPI_EXTENDED_HID_DEVICE_PATH *) CreateDeviceNode ( + ACPI_DEVICE_PATH, + ACPI_EXTENDED_DP, + Length + ); - if ((HIDStr[0] == L'P') && (HIDStr[1] == L'N') && (HIDStr[2] == L'P')) { - HIDStr += 3; - AcpiExt->HID = EISA_PNP_ID (Xtoi (HIDStr)); - } else { - AcpiExt->HID = (UINT32) Xtoi (HIDStr); - } + EisaIdFromText (HIDStr, &AcpiEx->HID); + EisaIdFromText (CIDStr, &AcpiEx->CID); + AcpiEx->UID = 0; - AcpiExt->UID = 0; - AcpiExt->CID = (UINT32) Xtoi (CIDStr); - - AsciiStr = AcpiExt->HidUidCidStr; + AsciiStr = (CHAR8 *) ((UINT8 *)AcpiEx + sizeof (ACPI_EXTENDED_HID_DEVICE_PATH)); // // HID string is NULL // - *AsciiStr = 0; + *AsciiStr = '\0'; // // Convert UID string // @@ -1046,9 +1166,9 @@ DevPathFromTextAcpiExp ( // // CID string is NULL // - *AsciiStr = 0; + *AsciiStr = '\0'; - return (EFI_DEVICE_PATH_PROTOCOL *) AcpiExt; + return (EFI_DEVICE_PATH_PROTOCOL *) AcpiEx; } STATIC @@ -1074,7 +1194,7 @@ DevPathFromTextAta ( Atapi->PrimarySecondary = (UINT8) ((StrCmp (PrimarySecondaryStr, L"Primary") == 0) ? 0 : 1); Atapi->SlaveMaster = (UINT8) ((StrCmp (SlaveMasterStr, L"Master") == 0) ? 0 : 1); - Atapi->Lun = (UINT16) Xtoi (LunStr); + Atapi->Lun = (UINT16) Strtoi (LunStr); return (EFI_DEVICE_PATH_PROTOCOL *) Atapi; } @@ -1097,8 +1217,8 @@ DevPathFromTextScsi ( sizeof (SCSI_DEVICE_PATH) ); - Scsi->Pun = (UINT16) Xtoi (PunStr); - Scsi->Lun = (UINT16) Xtoi (LunStr); + Scsi->Pun = (UINT16) Strtoi (PunStr); + Scsi->Lun = (UINT16) Strtoi (LunStr); return (EFI_DEVICE_PATH_PROTOCOL *) Scsi; } @@ -1122,8 +1242,8 @@ DevPathFromTextFibre ( ); Fibre->Reserved = 0; - Xtoi64 (WWNStr, &Fibre->WWN); - Xtoi64 (LunStr, &Fibre->Lun); + Strtoi64 (WWNStr, &Fibre->WWN); + Strtoi64 (LunStr, &Fibre->Lun); return (EFI_DEVICE_PATH_PROTOCOL *) Fibre; } @@ -1168,8 +1288,8 @@ DevPathFromTextUsb ( sizeof (USB_DEVICE_PATH) ); - Usb->ParentPortNumber = (UINT8) Xtoi (PortStr); - Usb->InterfaceNumber = (UINT8) Xtoi (InterfaceStr); + Usb->ParentPortNumber = (UINT8) Strtoi (PortStr); + Usb->InterfaceNumber = (UINT8) Strtoi (InterfaceStr); return (EFI_DEVICE_PATH_PROTOCOL *) Usb; } @@ -1190,7 +1310,7 @@ DevPathFromTextI2O ( sizeof (I2O_DEVICE_PATH) ); - I2O->Tid = (UINT32) Xtoi (TIDStr); + I2O->Tid = (UINT32) Strtoi (TIDStr); return (EFI_DEVICE_PATH_PROTOCOL *) I2O; } @@ -1220,12 +1340,12 @@ DevPathFromTextInfiniband ( sizeof (INFINIBAND_DEVICE_PATH) ); - InfiniBand->ResourceFlags = (UINT32) Xtoi (FlagsStr); + InfiniBand->ResourceFlags = (UINT32) Strtoi (FlagsStr); StrToGuid (GuidStr, &PortGid); CopyMem (InfiniBand->PortGid, &PortGid, sizeof (EFI_GUID)); - Xtoi64 (SidStr, &InfiniBand->ServiceId); - Xtoi64 (TidStr, &InfiniBand->TargetPortId); - Xtoi64 (DidStr, &InfiniBand->DeviceId); + Strtoi64 (SidStr, &InfiniBand->ServiceId); + Strtoi64 (TidStr, &InfiniBand->TargetPortId); + Strtoi64 (DidStr, &InfiniBand->DeviceId); return (EFI_DEVICE_PATH_PROTOCOL *) InfiniBand; } @@ -1372,17 +1492,15 @@ DevPathFromTextSAS ( ); CopyGuid (&Sas->Guid, &mEfiDevicePathMessagingSASGuid); - Xtoi64 (AddressStr, &Sas->SasAddress); - Xtoi64 (LunStr, &Sas->Lun); - Sas->RelativeTargetPort = (UINT16) Xtoi (RTPStr); - if (StrCmp (SASSATAStr, L"NoTopology") == 0) - ; - else { + Strtoi64 (AddressStr, &Sas->SasAddress); + Strtoi64 (LunStr, &Sas->Lun); + Sas->RelativeTargetPort = (UINT16) Strtoi (RTPStr); + if (StrCmp (SASSATAStr, L"NoTopology") != 0) { if (StrCmp (DriveBayStr, L"0") == 0) { Info |= 0x0001; } else { Info |= 0x0002; - Info = (UINT16) (Info | (Xtoi (DriveBayStr) << 8)); + Info = (UINT16) (Info | (Strtoi (DriveBayStr) << 8)); } if (StrCmp (SASSATAStr, L"SATA") == 0) { @@ -1399,7 +1517,7 @@ DevPathFromTextSAS ( } Sas->DeviceTopology = Info; - Sas->Reserved = (UINT32) Xtoi (ReservedStr); + Sas->Reserved = (UINT32) Strtoi (ReservedStr); return (EFI_DEVICE_PATH_PROTOCOL *) Sas; } @@ -1442,7 +1560,7 @@ DevPathFromTextMAC ( sizeof (MAC_ADDR_DEVICE_PATH) ); - MAC->IfType = (UINT8) Xtoi (IfTypeStr); + MAC->IfType = (UINT8) Strtoi (IfTypeStr); Length = sizeof (EFI_MAC_ADDRESS); StrToBuf (&MAC->MacAddress.Addr[0], Length, AddressStr); @@ -1482,8 +1600,8 @@ DevPathFromTextIPv4 ( StrToIPv4Addr (&LocalIPStr, &IPv4->LocalIpAddress); - IPv4->LocalPort = 0; - IPv4->RemotePort = 0; + IPv4->LocalPort = 0; + IPv4->RemotePort = 0; return (EFI_DEVICE_PATH_PROTOCOL *) IPv4; } @@ -1548,8 +1666,8 @@ DevPathFromTextUart ( sizeof (UART_DEVICE_PATH) ); - Uart->BaudRate = (StrCmp (BaudStr, L"DEFAULT") == 0) ? 115200 : Atoi (BaudStr); - Uart->DataBits = (UINT8) ((StrCmp (DataBitsStr, L"DEFAULT") == 0) ? 8 : Atoi (DataBitsStr)); + Uart->BaudRate = (StrCmp (BaudStr, L"DEFAULT") == 0) ? 115200 : Dtoi (BaudStr); + Uart->DataBits = (UINT8) ((StrCmp (DataBitsStr, L"DEFAULT") == 0) ? 8 : Dtoi (DataBitsStr)); switch (*ParityStr) { case L'D': Uart->Parity = 0; @@ -1617,22 +1735,22 @@ ConvertFromTextUsbClass ( PIDStr = GetNextParamStr (&TextDeviceNode); if (UsbClassText->ClassExist) { ClassStr = GetNextParamStr (&TextDeviceNode); - UsbClass->DeviceClass = (UINT8) Xtoi (ClassStr); + UsbClass->DeviceClass = (UINT8) Strtoi (ClassStr); } else { UsbClass->DeviceClass = UsbClassText->Class; } if (UsbClassText->SubClassExist) { SubClassStr = GetNextParamStr (&TextDeviceNode); - UsbClass->DeviceSubClass = (UINT8) Xtoi (SubClassStr); + UsbClass->DeviceSubClass = (UINT8) Strtoi (SubClassStr); } else { UsbClass->DeviceSubClass = UsbClassText->SubClass; } ProtocolStr = GetNextParamStr (&TextDeviceNode); - UsbClass->VendorId = (UINT16) Xtoi (VIDStr); - UsbClass->ProductId = (UINT16) Xtoi (PIDStr); - UsbClass->DeviceProtocol = (UINT8) Xtoi (ProtocolStr); + UsbClass->VendorId = (UINT16) Strtoi (VIDStr); + UsbClass->ProductId = (UINT16) Strtoi (PIDStr); + UsbClass->DeviceProtocol = (UINT8) Strtoi (ProtocolStr); return (EFI_DEVICE_PATH_PROTOCOL *) UsbClass; } @@ -1889,20 +2007,23 @@ DevPathFromTextUsbWwid ( CHAR16 *VIDStr; CHAR16 *PIDStr; CHAR16 *InterfaceNumStr; + CHAR16 *SerialNumberStr; USB_WWID_DEVICE_PATH *UsbWwid; VIDStr = GetNextParamStr (&TextDeviceNode); PIDStr = GetNextParamStr (&TextDeviceNode); InterfaceNumStr = GetNextParamStr (&TextDeviceNode); + SerialNumberStr = GetNextParamStr (&TextDeviceNode); UsbWwid = (USB_WWID_DEVICE_PATH *) CreateDeviceNode ( MESSAGING_DEVICE_PATH, MSG_USB_WWID_DP, - sizeof (USB_WWID_DEVICE_PATH) + (UINT16) (sizeof (USB_WWID_DEVICE_PATH) + StrSize (SerialNumberStr)) ); - UsbWwid->VendorId = (UINT16) Xtoi (VIDStr); - UsbWwid->ProductId = (UINT16) Xtoi (PIDStr); - UsbWwid->InterfaceNumber = (UINT16) Xtoi (InterfaceNumStr); + UsbWwid->VendorId = (UINT16) Strtoi (VIDStr); + UsbWwid->ProductId = (UINT16) Strtoi (PIDStr); + UsbWwid->InterfaceNumber = (UINT16) Strtoi (InterfaceNumStr); + StrCpy ((CHAR16 *) ((UINT8 *) UsbWwid + sizeof (USB_WWID_DEVICE_PATH)), SerialNumberStr); return (EFI_DEVICE_PATH_PROTOCOL *) UsbWwid; } @@ -1920,10 +2041,10 @@ DevPathFromTextUnit ( LogicalUnit = (DEVICE_LOGICAL_UNIT_DEVICE_PATH *) CreateDeviceNode ( MESSAGING_DEVICE_PATH, MSG_DEVICE_LOGICAL_UNIT_DP, - sizeof (DEVICE_LOGICAL_UNIT_DEVICE_PATH) + (UINT16) sizeof (DEVICE_LOGICAL_UNIT_DEVICE_PATH) ); - LogicalUnit->Lun = (UINT8) Xtoi (LunStr); + LogicalUnit->Lun = (UINT8) Strtoi (LunStr); return (EFI_DEVICE_PATH_PROTOCOL *) LogicalUnit; } @@ -1942,6 +2063,7 @@ DevPathFromTextiSCSI ( CHAR16 *DataDigestStr; CHAR16 *AuthenticationStr; CHAR16 *ProtocolStr; + CHAR8 *AsciiStr; ISCSI_DEVICE_PATH_WITH_NAME *iSCSI; NameStr = GetNextParamStr (&TextDeviceNode); @@ -1957,9 +2079,11 @@ DevPathFromTextiSCSI ( (UINT16) (sizeof (ISCSI_DEVICE_PATH_WITH_NAME) + StrLen (NameStr) * 2) ); - StrCpy (iSCSI->iSCSITargetName, NameStr); - iSCSI->TargetPortalGroupTag = (UINT16) Xtoi (PortalGroupStr); - Xtoi64 (LunStr, &iSCSI->Lun); + AsciiStr = iSCSI->iSCSITargetName; + StrToAscii (NameStr, &AsciiStr); + + iSCSI->TargetPortalGroupTag = (UINT16) Strtoi (PortalGroupStr); + Strtoi64 (LunStr, &iSCSI->Lun); Options = 0x0000; if (StrCmp (HeaderDigestStr, L"CRC32C") == 0) { @@ -1981,7 +2105,6 @@ DevPathFromTextiSCSI ( iSCSI->LoginOption = (UINT16) Options; iSCSI->NetworkProtocol = (UINT16) StrCmp (ProtocolStr, L"TCP"); - iSCSI->Reserved = (UINT16) 0; return (EFI_DEVICE_PATH_PROTOCOL *) iSCSI; } @@ -2012,32 +2135,29 @@ DevPathFromTextHD ( sizeof (HARDDRIVE_DEVICE_PATH) ); - Hd->PartitionNumber = (UINT32) Atoi (PartitionStr); + Hd->PartitionNumber = (UINT32) Dtoi (PartitionStr); ZeroMem (Hd->Signature, 16); Hd->MBRType = (UINT8) 0; - if (StrCmp (TypeStr, L"None") == 0) { - Hd->SignatureType = (UINT8) 0; - } else if (StrCmp (TypeStr, L"MBR") == 0) { + if (StrCmp (TypeStr, L"MBR") == 0) { Hd->SignatureType = SIGNATURE_TYPE_MBR; Hd->MBRType = 0x01; - Signature32 = (UINT32) Xtoi (SignatureStr); + Signature32 = (UINT32) Strtoi (SignatureStr); CopyMem (Hd->Signature, &Signature32, sizeof (UINT32)); - } else if (StrCmp (TypeStr, L"GUID") == 0) { + } else if (StrCmp (TypeStr, L"GPT") == 0) { Hd->SignatureType = SIGNATURE_TYPE_GUID; Hd->MBRType = 0x02; StrToGuid (SignatureStr, &SignatureGuid); CopyMem (Hd->Signature, &SignatureGuid, sizeof (EFI_GUID)); } else { - Hd->SignatureType = 0xff; - + Hd->SignatureType = (UINT8) Strtoi (TypeStr); } - Xtoi64 (StartStr, &Hd->PartitionStart); - Xtoi64 (SizeStr, &Hd->PartitionSize); + Strtoi64 (StartStr, &Hd->PartitionStart); + Strtoi64 (SizeStr, &Hd->PartitionSize); return (EFI_DEVICE_PATH_PROTOCOL *) Hd; } @@ -2062,9 +2182,9 @@ DevPathFromTextCDROM ( sizeof (CDROM_DEVICE_PATH) ); - CDROM->BootEntry = (UINT32) Xtoi (EntryStr); - Xtoi64 (StartStr, &CDROM->PartitionStart); - Xtoi64 (SizeStr, &CDROM->PartitionSize); + CDROM->BootEntry = (UINT32) Strtoi (EntryStr); + Strtoi64 (StartStr, &CDROM->PartitionStart); + Strtoi64 (SizeStr, &CDROM->PartitionSize); return (EFI_DEVICE_PATH_PROTOCOL *) CDROM; } @@ -2122,6 +2242,48 @@ DevPathFromTextMedia ( return (EFI_DEVICE_PATH_PROTOCOL *) Media; } +STATIC +EFI_DEVICE_PATH_PROTOCOL * +DevPathFromTextFv ( + IN CHAR16 *TextDeviceNode + ) +{ + CHAR16 *GuidStr; + MEDIA_FW_VOL_DEVICE_PATH *Fv; + + GuidStr = GetNextParamStr (&TextDeviceNode); + Fv = (MEDIA_FW_VOL_DEVICE_PATH *) CreateDeviceNode ( + MEDIA_DEVICE_PATH, + MEDIA_PIWG_FW_VOL_DP, + sizeof (MEDIA_FW_VOL_DEVICE_PATH) + ); + + StrToGuid (GuidStr, &Fv->FvName); + + return (EFI_DEVICE_PATH_PROTOCOL *) Fv; +} + +STATIC +EFI_DEVICE_PATH_PROTOCOL * +DevPathFromTextFvFile ( + IN CHAR16 *TextDeviceNode + ) +{ + CHAR16 *GuidStr; + MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvFile; + + GuidStr = GetNextParamStr (&TextDeviceNode); + FvFile = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) CreateDeviceNode ( + MEDIA_DEVICE_PATH, + MEDIA_PIWG_FW_FILE_DP, + sizeof (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH) + ); + + StrToGuid (GuidStr, &FvFile->FvFileName); + + return (EFI_DEVICE_PATH_PROTOCOL *) FvFile; +} + STATIC EFI_DEVICE_PATH_PROTOCOL * DevPathFromTextBBS ( @@ -2131,7 +2293,7 @@ DevPathFromTextBBS ( CHAR16 *TypeStr; CHAR16 *IdStr; CHAR16 *FlagsStr; - UINT8 *AsciiStr; + CHAR8 *AsciiStr; BBS_BBS_DEVICE_PATH *Bbs; TypeStr = GetNextParamStr (&TextDeviceNode); @@ -2156,17 +2318,55 @@ DevPathFromTextBBS ( } else if (StrCmp (TypeStr, L"Network") == 0) { Bbs->DeviceType = BBS_TYPE_EMBEDDED_NETWORK; } else { - Bbs->DeviceType = BBS_TYPE_UNKNOWN; + Bbs->DeviceType = (UINT16) Strtoi (TypeStr); } - AsciiStr = (UINT8 *) Bbs->String; - StrToAscii (IdStr, (CHAR8 **) &AsciiStr); + AsciiStr = Bbs->String; + StrToAscii (IdStr, &AsciiStr); - Bbs->StatusFlag = (UINT16) Xtoi (FlagsStr); + Bbs->StatusFlag = (UINT16) Strtoi (FlagsStr); return (EFI_DEVICE_PATH_PROTOCOL *) Bbs; } +STATIC +EFI_DEVICE_PATH_PROTOCOL * +DevPathFromTextSata ( + IN CHAR16 *TextDeviceNode + ) +{ + SATA_DEVICE_PATH *Sata; + CHAR16 *Param1; + CHAR16 *Param2; + CHAR16 *Param3; + + // + // The PMPN is optional. + // + Param1 = GetNextParamStr (&TextDeviceNode); + Param2 = GetNextParamStr (&TextDeviceNode); + Param3 = NULL; + if (!IS_NULL (TextDeviceNode)) { + Param3 = GetNextParamStr (&TextDeviceNode); + } + + Sata = (SATA_DEVICE_PATH *) CreateDeviceNode ( + MESSAGING_DEVICE_PATH, + MSG_SATA_DP, + sizeof (SATA_DEVICE_PATH) + ); + Sata->HbaPortNumber = (UINT16) Xtoi (Param1); + if (Param3 != NULL) { + Sata->PortMultiplierPort = (UINT16) Xtoi (Param2); + Param2 = Param3; + } else { + Sata->PortMultiplierPort = 0; + } + Sata->LogicalUnitNumber = (UINT16) Xtoi (Param2); + + return (EFI_DEVICE_PATH_PROTOCOL *) Sata; +} + GLOBAL_REMOVE_IF_UNREFERENCED DEVICE_PATH_FROM_TEXT_TABLE DevPathFromTextTable[] = { {L"Pci", DevPathFromTextPci}, {L"PcCard", DevPathFromTextPcCard}, @@ -2223,7 +2423,10 @@ GLOBAL_REMOVE_IF_UNREFERENCED DEVICE_PATH_FROM_TEXT_TABLE DevPathFromTextTable[] {L"CDROM", DevPathFromTextCDROM}, {L"VenMEDIA", DevPathFromTextVenMEDIA}, {L"Media", DevPathFromTextMedia}, + {L"Fv", DevPathFromTextFv}, + {L"FvFile", DevPathFromTextFvFile}, {L"BBS", DevPathFromTextBBS}, + {L"Sata", DevPathFromTextSata}, {NULL, NULL} }; diff --git a/MdeModulePkg/Universal/DevicePathDxe/DevicePathToText.c b/MdeModulePkg/Universal/DevicePathDxe/DevicePathToText.c index f1365baa26..546c4a40e3 100644 --- a/MdeModulePkg/Universal/DevicePathDxe/DevicePathToText.c +++ b/MdeModulePkg/Universal/DevicePathDxe/DevicePathToText.c @@ -212,7 +212,7 @@ DevPathToTextPci ( PCI_DEVICE_PATH *Pci; Pci = DevPath; - CatPrint (Str, L"Pci(%x,%x)", Pci->Function, Pci->Device); + CatPrint (Str, L"Pci(0x%x,0x%x)", Pci->Device, Pci->Function); } STATIC @@ -227,7 +227,7 @@ DevPathToTextPccard ( PCCARD_DEVICE_PATH *Pccard; Pccard = DevPath; - CatPrint (Str, L"PcCard(%x)", Pccard->FunctionNumber); + CatPrint (Str, L"PcCard(0x%x)", Pccard->FunctionNumber); } STATIC @@ -244,7 +244,8 @@ DevPathToTextMemMap ( MemMap = DevPath; CatPrint ( Str, - L"MemoryMapped(%lx,%lx)", + L"MemoryMapped(0x%x,0x%lx,0x%lx)", + MemMap->MemoryType, MemMap->StartingAddress, MemMap->EndingAddress ); @@ -262,6 +263,7 @@ DevPathToTextVendor ( VENDOR_DEVICE_PATH *Vendor; CHAR16 *Type; UINTN Index; + UINTN DataLength; UINT32 FlowControlMap; UINT16 Info; @@ -309,7 +311,7 @@ DevPathToTextVendor ( } else if (CompareGuid (&Vendor->Guid, &mEfiDevicePathMessagingSASGuid)) { CatPrint ( Str, - L"SAS(%lx,%lx,%x,", + L"SAS(0x%lx,0x%lx,0x%x,", ((SAS_DEVICE_PATH *) Vendor)->SasAddress, ((SAS_DEVICE_PATH *) Vendor)->Lun, ((SAS_DEVICE_PATH *) Vendor)->RelativeTargetPort @@ -328,22 +330,17 @@ DevPathToTextVendor ( if ((Info & 0x0f) == 1) { CatPrint (Str, L"0,"); } else { - CatPrint (Str, L"%x,", (Info >> 8) & 0xff); + CatPrint (Str, L"0x%x,", (Info >> 8) & 0xff); } } else { CatPrint (Str, L"0,0,0,0,"); } - CatPrint (Str, L"%x)", ((SAS_DEVICE_PATH *) Vendor)->Reserved); + CatPrint (Str, L"0x%x)", ((SAS_DEVICE_PATH *) Vendor)->Reserved); return ; } else if (CompareGuid (&Vendor->Guid, &gEfiDebugPortProtocolGuid)) { CatPrint (Str, L"DebugPort()"); return ; - } else { - return ; - // - // reserved - // } } break; @@ -357,9 +354,13 @@ DevPathToTextVendor ( break; } - CatPrint (Str, L"Ven%s(%g,", Type, &Vendor->Guid); - for (Index = 0; Index < DevicePathNodeLength (&Vendor->Header) - sizeof (VENDOR_DEVICE_PATH); Index++) { - CatPrint (Str, L"%02x", ((VENDOR_DEVICE_PATH_WITH_DATA *) Vendor)->VendorDefinedData[Index]); + DataLength = DevicePathNodeLength (&Vendor->Header) - sizeof (VENDOR_DEVICE_PATH); + CatPrint (Str, L"Ven%s(%g", Type, &Vendor->Guid); + if (DataLength != 0) { + CatPrint (Str, L","); + for (Index = 0; Index < DataLength; Index++) { + CatPrint (Str, L"%02x", ((VENDOR_DEVICE_PATH_WITH_DATA *) Vendor)->VendorDefinedData[Index]); + } } CatPrint (Str, L")"); @@ -379,7 +380,7 @@ DevPathToTextController ( Controller = DevPath; CatPrint ( Str, - L"Ctrl(%x)", + L"Ctrl(0x%x)", Controller->ControllerNumber ); } @@ -397,111 +398,158 @@ DevPathToTextAcpi ( Acpi = DevPath; if ((Acpi->HID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) { - if (AllowShortcuts) { - switch (EISA_ID_TO_NUM (Acpi->HID)) { - case 0x0a03: - CatPrint (Str, L"PciRoot(%x)", Acpi->UID); - break; + switch (EISA_ID_TO_NUM (Acpi->HID)) { + case 0x0a03: + CatPrint (Str, L"PciRoot(0x%x)", Acpi->UID); + break; - case 0x0604: - CatPrint (Str, L"Floppy(%x)", Acpi->UID); - break; + case 0x0604: + CatPrint (Str, L"Floppy(0x%x)", Acpi->UID); + break; - case 0x0301: - CatPrint (Str, L"Keyboard(%x)", Acpi->UID); - break; + case 0x0301: + CatPrint (Str, L"Keyboard(0x%x)", Acpi->UID); + break; - case 0x0501: - CatPrint (Str, L"Serial(%x)", Acpi->UID); - break; + case 0x0501: + CatPrint (Str, L"Serial(0x%x)", Acpi->UID); + break; - case 0x0401: - CatPrint (Str, L"ParallelPort(%x)", Acpi->UID); - break; + case 0x0401: + CatPrint (Str, L"ParallelPort(0x%x)", Acpi->UID); + break; - default: - break; - } - - return ; + default: + CatPrint (Str, L"Acpi(PNP%04x,0x%x)", EISA_ID_TO_NUM (Acpi->HID), Acpi->UID); + break; } - - CatPrint (Str, L"Acpi(PNP%04x,%x)", EISA_ID_TO_NUM (Acpi->HID), Acpi->UID); } else { - CatPrint (Str, L"Acpi(%08x,%x)", Acpi->HID, Acpi->UID); + CatPrint (Str, L"Acpi(0x%08x,0x%x)", Acpi->HID, Acpi->UID); } } -#define NextStrA(a) ((UINT8 *) (((UINT8 *) (a)) + AsciiStrLen ((CHAR8 *) (a)) + 1)) +STATIC +VOID +EisaIdToText ( + IN UINT32 EisaId, + IN OUT CHAR16 *Text + ) +{ + CHAR16 PnpIdStr[17]; + + // + //UnicodeSPrint ("%X", 0x0a03) => "0000000000000A03" + // + UnicodeSPrint (PnpIdStr, 17 * 2, L"%X", EisaId >> 16); + + UnicodeSPrint ( + Text, + 0, + L"%c%c%c%s", + '@' + ((EisaId >> 10) & 0x1f), + '@' + ((EisaId >> 5) & 0x1f), + '@' + ((EisaId >> 0) & 0x1f), + PnpIdStr + (16 - 4) + ); +} STATIC VOID -DevPathToTextExtAcpi ( +DevPathToTextAcpiEx ( IN OUT POOL_PRINT *Str, IN VOID *DevPath, IN BOOLEAN DisplayOnly, IN BOOLEAN AllowShortcuts ) { - ACPI_EXTENDED_HID_DEVICE_PATH_WITH_STR *AcpiExt; - UINT8 *NextString; + ACPI_EXTENDED_HID_DEVICE_PATH *AcpiEx; + CHAR8 *HIDStr; + CHAR8 *UIDStr; + CHAR8 *CIDStr; + CHAR16 HIDText[11]; + CHAR16 CIDText[11]; - AcpiExt = DevPath; + AcpiEx = DevPath; + HIDStr = (CHAR8 *) (((UINT8 *) AcpiEx) + sizeof (ACPI_EXTENDED_HID_DEVICE_PATH)); + UIDStr = HIDStr + AsciiStrLen (HIDStr) + 1; + CIDStr = UIDStr + AsciiStrLen (UIDStr) + 1; - if (AllowShortcuts) { - NextString = NextStrA (AcpiExt->HidUidCidStr); - if ((*(AcpiExt->HidUidCidStr) == '\0') && - (*(NextStrA (NextString)) == '\0') && - (AcpiExt->UID == 0) - ) { - if ((AcpiExt->HID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) { - CatPrint ( - Str, - L"AcpiExp(PNP%04x,%x,%a)", - EISA_ID_TO_NUM (AcpiExt->HID), - AcpiExt->CID, - NextStrA (AcpiExt->HidUidCidStr) - ); - } else { - CatPrint ( - Str, - L"AcpiExp(%08x,%x,%a)", - AcpiExt->HID, - AcpiExt->CID, - NextStrA (AcpiExt->HidUidCidStr) - ); - } - } - return ; - } + EisaIdToText (AcpiEx->HID, HIDText); + EisaIdToText (AcpiEx->CID, CIDText); - NextString = NextStrA (AcpiExt->HidUidCidStr); - NextString = NextStrA (NextString); - if ((AcpiExt->HID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) { + if ((*HIDStr == '\0') && (*CIDStr == '\0') && (AcpiEx->UID == 0)) { + // + // use AcpiExp() + // CatPrint ( Str, - L"AcpiEx(PNP%04x,%x,%x,%a,%a,%a)", - EISA_ID_TO_NUM (AcpiExt->HID), - AcpiExt->CID, - AcpiExt->UID, - AcpiExt->HidUidCidStr, - NextString, - NextStrA (AcpiExt->HidUidCidStr) + L"AcpiExp(%s,%s,%a)", + HIDText, + CIDText, + UIDStr ); } else { - CatPrint ( - Str, - L"AcpiEx(%08x,%x,%x,%a,%a,%a)", - AcpiExt->HID, - AcpiExt->CID, - AcpiExt->UID, - AcpiExt->HidUidCidStr, - NextString, - NextStrA (AcpiExt->HidUidCidStr) - ); + if (AllowShortcuts) { + // + // display only + // + if (AcpiEx->HID == 0) { + CatPrint (Str, L"AcpiEx(%a,", HIDStr); + } else { + CatPrint (Str, L"AcpiEx(%s,", HIDText); + } + + if (AcpiEx->UID == 0) { + CatPrint (Str, L"%a,", UIDStr); + } else { + CatPrint (Str, L"0x%x,", AcpiEx->UID); + } + + if (AcpiEx->CID == 0) { + CatPrint (Str, L"%a)", CIDStr); + } else { + CatPrint (Str, L"%s)", CIDText); + } + } else { + CatPrint ( + Str, + L"AcpiEx(%s,%s,0x%x,%a,%a,%a)", + HIDText, + CIDText, + AcpiEx->UID, + HIDStr, + CIDStr, + UIDStr + ); + } } } +STATIC +VOID +DevPathToTextAcpiAdr ( + IN OUT POOL_PRINT *Str, + IN VOID *DevPath, + IN BOOLEAN DisplayOnly, + IN BOOLEAN AllowShortcuts + ) +{ + ACPI_ADR_DEVICE_PATH *AcpiAdr; + UINT16 Index; + UINT16 Length; + UINT16 AdditionalAdrCount; + + AcpiAdr = DevPath; + Length = (UINT16) DevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL *) AcpiAdr); + AdditionalAdrCount = (UINT16) ((Length - 8) / 4); + + CatPrint (Str, L"AcpiAdr(0x%x", AcpiAdr->ADR); + for (Index = 0; Index < AdditionalAdrCount; Index++) { + CatPrint (Str, L",0x%x", *(UINT32 *) ((UINT8 *) AcpiAdr + 8 + Index * 4)); + } + CatPrint (Str, L")"); +} + STATIC VOID DevPathToTextAtapi ( @@ -516,11 +564,11 @@ DevPathToTextAtapi ( Atapi = DevPath; if (DisplayOnly) { - CatPrint (Str, L"Ata(%x)", Atapi->Lun); + CatPrint (Str, L"Ata(0x%x)", Atapi->Lun); } else { CatPrint ( Str, - L"Ata(%s,%s,%x)", + L"Ata(%s,%s,0x%x)", Atapi->PrimarySecondary ? L"Secondary" : L"Primary", Atapi->SlaveMaster ? L"Slave" : L"Master", Atapi->Lun @@ -540,7 +588,7 @@ DevPathToTextScsi ( SCSI_DEVICE_PATH *Scsi; Scsi = DevPath; - CatPrint (Str, L"Scsi(%x,%x)", Scsi->Pun, Scsi->Lun); + CatPrint (Str, L"Scsi(0x%x,0x%x)", Scsi->Pun, Scsi->Lun); } STATIC @@ -555,7 +603,7 @@ DevPathToTextFibre ( FIBRECHANNEL_DEVICE_PATH *Fibre; Fibre = DevPath; - CatPrint (Str, L"Fibre(%lx,%lx)", Fibre->WWN, Fibre->Lun); + CatPrint (Str, L"Fibre(0x%lx,0x%lx)", Fibre->WWN, Fibre->Lun); } STATIC @@ -570,7 +618,10 @@ DevPathToText1394 ( F1394_DEVICE_PATH *F1394; F1394 = DevPath; - CatPrint (Str, L"I1394(%lx)", F1394->Guid); + // + // Guid has format of IEEE-EUI64 + // + CatPrint (Str, L"I1394(%016lx)", F1394->Guid); } STATIC @@ -585,7 +636,7 @@ DevPathToTextUsb ( USB_DEVICE_PATH *Usb; Usb = DevPath; - CatPrint (Str, L"USB(%x,%x)", Usb->ParentPortNumber, Usb->InterfaceNumber); + CatPrint (Str, L"USB(0x%x,0x%x)", Usb->ParentPortNumber, Usb->InterfaceNumber); } STATIC @@ -598,14 +649,30 @@ DevPathToTextUsbWWID ( ) { USB_WWID_DEVICE_PATH *UsbWWId; + CHAR16 *SerialNumberStr; + CHAR16 *NewStr; + UINT16 Length; UsbWWId = DevPath; + + SerialNumberStr = (CHAR16 *) ((UINT8 *) UsbWWId + sizeof (USB_WWID_DEVICE_PATH)); + Length = (UINT16) ((DevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL *) UsbWWId) - sizeof (USB_WWID_DEVICE_PATH)) / sizeof (CHAR16)); + if (SerialNumberStr [Length - 1] != 0) { + // + // In case no NULL terminator in SerialNumber, create a new one with NULL terminator + // + NewStr = AllocateCopyPool ((Length + 1) * sizeof (CHAR16), SerialNumberStr); + NewStr [Length] = 0; + SerialNumberStr = NewStr; + } + CatPrint ( Str, - L"UsbWwid(%x,%x,%x,\"WWID\")", + L"UsbWwid(0x%x,0x%x,0x%x,\"%s\")", UsbWWId->VendorId, UsbWWId->ProductId, - UsbWWId->InterfaceNumber + UsbWWId->InterfaceNumber, + SerialNumberStr ); } @@ -621,7 +688,7 @@ DevPathToTextLogicalUnit ( DEVICE_LOGICAL_UNIT_DEVICE_PATH *LogicalUnit; LogicalUnit = DevPath; - CatPrint (Str, L"Unit(%x)", LogicalUnit->Lun); + CatPrint (Str, L"Unit(0x%x)", LogicalUnit->Lun); } STATIC @@ -634,181 +701,112 @@ DevPathToTextUsbClass ( ) { USB_CLASS_DEVICE_PATH *UsbClass; + BOOLEAN IsKnownSubClass; + UsbClass = DevPath; - if (AllowShortcuts == TRUE) { - switch (UsbClass->DeviceClass) { - case 1: + IsKnownSubClass = TRUE; + switch (UsbClass->DeviceClass) { + case USB_CLASS_AUDIO: + CatPrint (Str, L"UsbAudio"); + break; + + case USB_CLASS_CDCCONTROL: + CatPrint (Str, L"UsbCDCControl"); + break; + + case USB_CLASS_HID: + CatPrint (Str, L"UsbHID"); + break; + + case USB_CLASS_IMAGE: + CatPrint (Str, L"UsbImage"); + break; + + case USB_CLASS_PRINTER: + CatPrint (Str, L"UsbPrinter"); + break; + + case USB_CLASS_MASS_STORAGE: + CatPrint (Str, L"UsbMassStorage"); + break; + + case USB_CLASS_HUB: + CatPrint (Str, L"UsbHub"); + break; + + case USB_CLASS_CDCDATA: + CatPrint (Str, L"UsbCDCData"); + break; + + case USB_CLASS_SMART_CARD: + CatPrint (Str, L"UsbSmartCard"); + break; + + case USB_CLASS_VIDEO: + CatPrint (Str, L"UsbVideo"); + break; + + case USB_CLASS_DIAGNOSTIC: + CatPrint (Str, L"UsbDiagnostic"); + break; + + case USB_CLASS_WIRELESS: + CatPrint (Str, L"UsbWireless"); + break; + + default: + IsKnownSubClass = FALSE; + break; + } + + if (IsKnownSubClass) { + CatPrint ( + Str, + L"(0x%x,0x%x,0x%x,0x%x)", + UsbClass->VendorId, + UsbClass->ProductId, + UsbClass->DeviceSubClass, + UsbClass->DeviceProtocol + ); + return; + } + + if (UsbClass->DeviceClass == USB_CLASS_RESERVE) { + if (UsbClass->DeviceSubClass == USB_SUBCLASS_FW_UPDATE) { CatPrint ( Str, - L"UsbAudio(%x,%x,%x,%x)", + L"UsbDeviceFirmwareUpdate(0x%x,0x%x,0x%x)", UsbClass->VendorId, UsbClass->ProductId, - UsbClass->DeviceSubClass, UsbClass->DeviceProtocol ); - break; - - case 2: + return; + } else if (UsbClass->DeviceSubClass == USB_SUBCLASS_IRDA_BRIDGE) { CatPrint ( Str, - L"UsbCDCControl(%x,%x,%x,%x)", + L"UsbIrdaBridge(0x%x,0x%x,0x%x)", UsbClass->VendorId, UsbClass->ProductId, - UsbClass->DeviceSubClass, UsbClass->DeviceProtocol ); - break; - - case 3: + return; + } else if (UsbClass->DeviceSubClass == USB_SUBCLASS_TEST) { CatPrint ( Str, - L"UsbHID(%x,%x,%x,%x)", + L"UsbTestAndMeasurement(0x%x,0x%x,0x%x)", UsbClass->VendorId, UsbClass->ProductId, - UsbClass->DeviceSubClass, UsbClass->DeviceProtocol ); - break; - - case 6: - CatPrint ( - Str, - L"UsbImage(%x,%x,%x,%x)", - UsbClass->VendorId, - UsbClass->ProductId, - UsbClass->DeviceSubClass, - UsbClass->DeviceProtocol - ); - break; - - case 7: - CatPrint ( - Str, - L"UsbPrinter(%x,%x,%x,%x)", - UsbClass->VendorId, - UsbClass->ProductId, - UsbClass->DeviceSubClass, - UsbClass->DeviceProtocol - ); - break; - - case 8: - CatPrint ( - Str, - L"UsbMassStorage(%x,%x,%x,%x)", - UsbClass->VendorId, - UsbClass->ProductId, - UsbClass->DeviceSubClass, - UsbClass->DeviceProtocol - ); - break; - - case 9: - CatPrint ( - Str, - L"UsbHub(%x,%x,%x,%x)", - UsbClass->VendorId, - UsbClass->ProductId, - UsbClass->DeviceSubClass, - UsbClass->DeviceProtocol - ); - break; - - case 10: - CatPrint ( - Str, - L"UsbCDCData(%x,%x,%x,%x)", - UsbClass->VendorId, - UsbClass->ProductId, - UsbClass->DeviceSubClass, - UsbClass->DeviceProtocol - ); - break; - - case 11: - CatPrint ( - Str, - L"UsbSmartCard(%x,%x,%x,%x)", - UsbClass->VendorId, - UsbClass->ProductId, - UsbClass->DeviceSubClass, - UsbClass->DeviceProtocol - ); - break; - - case 14: - CatPrint ( - Str, - L"UsbVideo(%x,%x,%x,%x)", - UsbClass->VendorId, - UsbClass->ProductId, - UsbClass->DeviceSubClass, - UsbClass->DeviceProtocol - ); - break; - - case 220: - CatPrint ( - Str, - L"UsbDiagnostic(%x,%x,%x,%x)", - UsbClass->VendorId, - UsbClass->ProductId, - UsbClass->DeviceSubClass, - UsbClass->DeviceProtocol - ); - break; - - case 224: - CatPrint ( - Str, - L"UsbWireless(%x,%x,%x,%x)", - UsbClass->VendorId, - UsbClass->ProductId, - UsbClass->DeviceSubClass, - UsbClass->DeviceProtocol - ); - break; - - case 254: - if (UsbClass->DeviceSubClass == 1) { - CatPrint ( - Str, - L"UsbDeviceFirmwareUpdate(%x,%x,%x)", - UsbClass->VendorId, - UsbClass->ProductId, - UsbClass->DeviceProtocol - ); - } else if (UsbClass->DeviceSubClass == 2) { - CatPrint ( - Str, - L"UsbIrdaBridge(%x,%x,%x)", - UsbClass->VendorId, - UsbClass->ProductId, - UsbClass->DeviceProtocol - ); - } else if (UsbClass->DeviceSubClass == 3) { - CatPrint ( - Str, - L"UsbTestAndMeasurement(%x,%x,%x)", - UsbClass->VendorId, - UsbClass->ProductId, - UsbClass->DeviceProtocol - ); - } - break; - - default: - break; + return; } - - return ; } CatPrint ( Str, - L"UsbClass(%x,%x,%x,%x,%x)", + L"UsbClass(0x%x,0x%x,0x%x,0x%x,0x%x)", UsbClass->VendorId, UsbClass->ProductId, UsbClass->DeviceClass, @@ -817,6 +815,27 @@ DevPathToTextUsbClass ( ); } +STATIC +VOID +DevPathToTextSata ( + IN OUT POOL_PRINT *Str, + IN VOID *DevPath, + IN BOOLEAN DisplayOnly, + IN BOOLEAN AllowShortcuts + ) +{ + SATA_DEVICE_PATH *Sata; + + Sata = DevPath; + CatPrint ( + Str, + L"Sata(0x%x,0x%x,0x%x)", + (UINTN) Sata->HbaPortNumber, + (UINTN) Sata->PortMultiplierPort, + (UINTN) Sata->LogicalUnitNumber + ); +} + STATIC VOID DevPathToTextI2O ( @@ -829,7 +848,7 @@ DevPathToTextI2O ( I2O_DEVICE_PATH *I2O; I2O = DevPath; - CatPrint (Str, L"I2O(%x)", I2O->Tid); + CatPrint (Str, L"I2O(0x%x)", I2O->Tid); } STATIC @@ -858,7 +877,7 @@ DevPathToTextMacAddr ( CatPrint (Str, L"%02x", MAC->MacAddress.Addr[Index]); } - CatPrint (Str, L",%x)", MAC->IfType); + CatPrint (Str, L",0x%x)", MAC->IfType); } STATIC @@ -991,7 +1010,7 @@ DevPathToTextInfiniBand ( InfiniBand = DevPath; CatPrint ( Str, - L"Infiniband(%x,%g,%lx,%lx,%lx)", + L"Infiniband(0x%x,%g,0x%lx,0x%lx,0x%lx)", InfiniBand->ResourceFlags, InfiniBand->PortGid, InfiniBand->ServiceId, @@ -1095,7 +1114,7 @@ DevPathToTextiSCSI ( iSCSI = DevPath; CatPrint ( Str, - L"iSCSI(%s,%x,%lx,", + L"iSCSI(%a,0x%x,0x%lx,", iSCSI->iSCSITargetName, iSCSI->TargetPortalGroupTag, iSCSI->Lun @@ -1129,19 +1148,10 @@ DevPathToTextHardDrive ( Hd = DevPath; switch (Hd->SignatureType) { - case 0: - CatPrint ( - Str, - L"HD(%d,%s,0,", - Hd->PartitionNumber, - L"None" - ); - break; - case SIGNATURE_TYPE_MBR: CatPrint ( Str, - L"HD(%d,%s,%08x,", + L"HD(%d,%s,0x%08x,", Hd->PartitionNumber, L"MBR", *((UINT32 *) (&(Hd->Signature[0]))) @@ -1153,16 +1163,22 @@ DevPathToTextHardDrive ( Str, L"HD(%d,%s,%g,", Hd->PartitionNumber, - L"GUID", + L"GPT", (EFI_GUID *) &(Hd->Signature[0]) ); break; default: + CatPrint ( + Str, + L"HD(%d,%d,0,", + Hd->PartitionNumber, + Hd->SignatureType + ); break; } - CatPrint (Str, L"%lx,%lx)", Hd->PartitionStart, Hd->PartitionSize); + CatPrint (Str, L"0x%lx,0x%lx)", Hd->PartitionStart, Hd->PartitionSize); } STATIC @@ -1178,11 +1194,11 @@ DevPathToTextCDROM ( Cd = DevPath; if (DisplayOnly == TRUE) { - CatPrint (Str, L"CDROM(%x)", Cd->BootEntry); + CatPrint (Str, L"CDROM(0x%x)", Cd->BootEntry); return ; } - CatPrint (Str, L"CDROM(%x,%lx,%lx)", Cd->BootEntry, Cd->PartitionStart, Cd->PartitionSize); + CatPrint (Str, L"CDROM(0x%x,0x%lx,0x%lx)", Cd->BootEntry, Cd->PartitionStart, Cd->PartitionSize); } STATIC @@ -1215,6 +1231,36 @@ DevPathToTextMediaProtocol ( CatPrint (Str, L"Media(%g)", &MediaProt->Protocol); } +STATIC +VOID +DevPathToTextFv ( + IN OUT POOL_PRINT *Str, + IN VOID *DevPath, + IN BOOLEAN DisplayOnly, + IN BOOLEAN AllowShortcuts + ) +{ + MEDIA_FW_VOL_DEVICE_PATH *Fv; + + Fv = DevPath; + CatPrint (Str, L"Fv(%g)", &Fv->FvName); +} + +STATIC +VOID +DevPathToTextFvFile ( + IN OUT POOL_PRINT *Str, + IN VOID *DevPath, + IN BOOLEAN DisplayOnly, + IN BOOLEAN AllowShortcuts + ) +{ + MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvFile; + + FvFile = DevPath; + CatPrint (Str, L"FvFile(%g)", &FvFile->FvFileName); +} + STATIC VOID DevPathToTextBBS ( @@ -1254,18 +1300,22 @@ DevPathToTextBBS ( break; default: - Type = L"?"; + Type = NULL; break; } - CatPrint (Str, L"BBS(%s,%a", Type, Bbs->String); + if (Type != NULL) { + CatPrint (Str, L"BBS(%s,%a", Type, Bbs->String); + } else { + CatPrint (Str, L"BBS(0x%x,%a", Bbs->DeviceType, Bbs->String); + } if (DisplayOnly == TRUE) { CatPrint (Str, L")"); return ; } - CatPrint (Str, L",%x)", Bbs->StatusFlag); + CatPrint (Str, L",0x%x)", Bbs->StatusFlag); } STATIC @@ -1299,7 +1349,8 @@ GLOBAL_REMOVE_IF_UNREFERENCED const DEVICE_PATH_TO_TEXT_TABLE DevPathToTextTable {HARDWARE_DEVICE_PATH, HW_VENDOR_DP, DevPathToTextVendor}, {HARDWARE_DEVICE_PATH, HW_CONTROLLER_DP, DevPathToTextController}, {ACPI_DEVICE_PATH, ACPI_DP, DevPathToTextAcpi}, - {ACPI_DEVICE_PATH, ACPI_EXTENDED_DP, DevPathToTextExtAcpi}, + {ACPI_DEVICE_PATH, ACPI_EXTENDED_DP, DevPathToTextAcpiEx}, + {ACPI_DEVICE_PATH, ACPI_ADR_DP, DevPathToTextAcpiAdr}, {MESSAGING_DEVICE_PATH, MSG_ATAPI_DP, DevPathToTextAtapi}, {MESSAGING_DEVICE_PATH, MSG_SCSI_DP, DevPathToTextScsi}, {MESSAGING_DEVICE_PATH, MSG_FIBRECHANNEL_DP, DevPathToTextFibre}, @@ -1308,6 +1359,7 @@ GLOBAL_REMOVE_IF_UNREFERENCED const DEVICE_PATH_TO_TEXT_TABLE DevPathToTextTable {MESSAGING_DEVICE_PATH, MSG_USB_WWID_DP, DevPathToTextUsbWWID}, {MESSAGING_DEVICE_PATH, MSG_DEVICE_LOGICAL_UNIT_DP, DevPathToTextLogicalUnit}, {MESSAGING_DEVICE_PATH, MSG_USB_CLASS_DP, DevPathToTextUsbClass}, + {MESSAGING_DEVICE_PATH, MSG_SATA_DP, DevPathToTextSata}, {MESSAGING_DEVICE_PATH, MSG_I2O_DP, DevPathToTextI2O}, {MESSAGING_DEVICE_PATH, MSG_MAC_ADDR_DP, DevPathToTextMacAddr}, {MESSAGING_DEVICE_PATH, MSG_IPv4_DP, DevPathToTextIPv4}, @@ -1322,6 +1374,8 @@ GLOBAL_REMOVE_IF_UNREFERENCED const DEVICE_PATH_TO_TEXT_TABLE DevPathToTextTable {MEDIA_DEVICE_PATH, MEDIA_FILEPATH_DP, DevPathToTextFilePath}, {MEDIA_DEVICE_PATH, MEDIA_PROTOCOL_DP, DevPathToTextMediaProtocol}, {MEDIA_DEVICE_PATH, MEDIA_FILEPATH_DP, DevPathToTextFilePath}, + {MEDIA_DEVICE_PATH, MEDIA_PIWG_FW_VOL_DP, DevPathToTextFv}, + {MEDIA_DEVICE_PATH, MEDIA_PIWG_FW_FILE_DP, DevPathToTextFvFile}, {BBS_DEVICE_PATH, BBS_BBS_DP, DevPathToTextBBS}, {END_DEVICE_PATH_TYPE, END_INSTANCE_DEVICE_PATH_SUBTYPE, DevPathToTextEndInstance}, {0, 0, NULL} @@ -1471,9 +1525,9 @@ ConvertDevicePathToText ( // Put a path seperator in if needed // if (Str.Len && DumpNode != DevPathToTextEndInstance) { - if (*(Str.Str + Str.Len / sizeof (CHAR16) - 1) != L',') { + if (*(Str.Str + Str.Len / sizeof (CHAR16) - 1) != L',') { CatPrint (&Str, L"/"); - } + } } // // Print this node of the device path