]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Update DevicePath driver to reflect several device path update in UEFI spec: SATA...
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 24 Sep 2007 06:55:50 +0000 (06:55 +0000)
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 24 Sep 2007 06:55:50 +0000 (06:55 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3915 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/DevicePathDxe/DevicePath.h
MdeModulePkg/Universal/DevicePathDxe/DevicePathFromText.c
MdeModulePkg/Universal/DevicePathDxe/DevicePathToText.c

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