]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
MdePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdePkg / Library / UefiDevicePathLib / DevicePathToText.c
index f45d3dd338c0a893093a9ee94649e7acedb38c7c..fb65ebd8f40a806eed35104c7f1a6aa11c54ecf0 100644 (file)
@@ -2,14 +2,8 @@
   DevicePathToText protocol as defined in the UEFI 2.0 specification.\r
 \r
   (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
-Copyright (c) 2013 - 2017, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -56,7 +50,7 @@ UefiDevicePathLibCatPrint (
   VA_START (Args, Fmt);\r
   UnicodeVSPrint (&Str->Str[Str->Count], Str->Capacity - Str->Count * sizeof (CHAR16), Fmt, Args);\r
   Str->Count += Count;\r
-  \r
+\r
   VA_END (Args);\r
   return Str->Str;\r
 }\r
@@ -195,7 +189,7 @@ DevPathToTextVendor (
         UefiDevicePathLibCatPrint (Str, L"VenVt100Plus()");\r
         return ;\r
       } else if (CompareGuid (&Vendor->Guid, &gEfiVTUTF8Guid)) {\r
-        UefiDevicePathLibCatPrint (Str, L"VenUft8()");\r
+        UefiDevicePathLibCatPrint (Str, L"VenUtf8()");\r
         return ;\r
       } else if (CompareGuid (&Vendor->Guid, &gEfiUartDevicePathGuid)) {\r
         FlowControlMap = (((UART_FLOW_CONTROL_DEVICE_PATH *) Vendor)->FlowControlMap);\r
@@ -433,9 +427,30 @@ DevPathToTextAcpiEx (
   UIDStr = HIDStr + AsciiStrLen (HIDStr) + 1;\r
   CIDStr = UIDStr + AsciiStrLen (UIDStr) + 1;\r
 \r
+  if (DisplayOnly) {\r
+    if ((EISA_ID_TO_NUM (AcpiEx->HID) == 0x0A03) ||\r
+        (EISA_ID_TO_NUM (AcpiEx->CID) == 0x0A03 && EISA_ID_TO_NUM (AcpiEx->HID) != 0x0A08)) {\r
+      if (AcpiEx->UID == 0) {\r
+        UefiDevicePathLibCatPrint (Str, L"PciRoot(%a)", UIDStr);\r
+      } else {\r
+        UefiDevicePathLibCatPrint (Str, L"PciRoot(0x%x)", AcpiEx->UID);\r
+      }\r
+      return;\r
+    }\r
+\r
+    if (EISA_ID_TO_NUM (AcpiEx->HID) == 0x0A08 || EISA_ID_TO_NUM (AcpiEx->CID) == 0x0A08) {\r
+      if (AcpiEx->UID == 0) {\r
+        UefiDevicePathLibCatPrint (Str, L"PcieRoot(%a)", UIDStr);\r
+      } else {\r
+        UefiDevicePathLibCatPrint (Str, L"PcieRoot(0x%x)", AcpiEx->UID);\r
+      }\r
+      return;\r
+    }\r
+  }\r
+\r
   //\r
   // Converts EISA identification to string.\r
-  // \r
+  //\r
   UnicodeSPrint (\r
     HIDText,\r
     sizeof (HIDText),\r
@@ -455,19 +470,28 @@ DevPathToTextAcpiEx (
     (AcpiEx->CID >> 16) & 0xFFFF\r
     );\r
 \r
-  if ((*HIDStr == '\0') && (*CIDStr == '\0') && (AcpiEx->UID == 0)) {\r
+  if ((*HIDStr == '\0') && (*CIDStr == '\0') && (*UIDStr != '\0')) {\r
     //\r
     // use AcpiExp()\r
     //\r
-    UefiDevicePathLibCatPrint (\r
-      Str,\r
-      L"AcpiExp(%s,%s,%a)",\r
-      HIDText,\r
-      CIDText,\r
-      UIDStr\r
-      );\r
+    if (AcpiEx->CID == 0) {\r
+      UefiDevicePathLibCatPrint (\r
+        Str,\r
+        L"AcpiExp(%s,0,%a)",\r
+        HIDText,\r
+        UIDStr\r
+       );\r
+    } else {\r
+      UefiDevicePathLibCatPrint (\r
+        Str,\r
+        L"AcpiExp(%s,%s,%a)",\r
+        HIDText,\r
+        CIDText,\r
+        UIDStr\r
+       );\r
+    }\r
   } else {\r
-    if (AllowShortcuts) {\r
+    if (DisplayOnly) {\r
       //\r
       // display only\r
       //\r
@@ -477,16 +501,16 @@ DevPathToTextAcpiEx (
         UefiDevicePathLibCatPrint (Str, L"AcpiEx(%s,", HIDText);\r
       }\r
 \r
-      if (AcpiEx->UID == 0) {\r
-        UefiDevicePathLibCatPrint (Str, L"%a,", UIDStr);\r
+      if (AcpiEx->CID == 0) {\r
+        UefiDevicePathLibCatPrint (Str, L"%a,", CIDStr);\r
       } else {\r
-        UefiDevicePathLibCatPrint (Str, L"0x%x,", AcpiEx->UID);\r
+        UefiDevicePathLibCatPrint (Str, L"%s,", CIDText);\r
       }\r
 \r
-      if (AcpiEx->CID == 0) {\r
-        UefiDevicePathLibCatPrint (Str, L"%a)", CIDStr);\r
+      if (AcpiEx->UID == 0) {\r
+        UefiDevicePathLibCatPrint (Str, L"%a)", UIDStr);\r
       } else {\r
-        UefiDevicePathLibCatPrint (Str, L"%s)", CIDText);\r
+        UefiDevicePathLibCatPrint (Str, L"0x%x)", AcpiEx->UID);\r
       }\r
     } else {\r
       UefiDevicePathLibCatPrint (\r
@@ -942,7 +966,7 @@ DevPathToTextUsbWWID (
 \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
+  if (Length >= 1 && SerialNumberStr [Length - 1] != 0) {\r
     //\r
     // In case no NULL terminator in SerialNumber, create a new one with NULL terminator\r
     //\r
@@ -1364,7 +1388,7 @@ DevPathToTextIPv6 (
     UefiDevicePathLibCatPrint (Str, L")");\r
     return ;\r
   }\r
-  \r
+\r
   UefiDevicePathLibCatPrint (Str, L",");\r
   CatNetworkProtocol (Str, IPDevPath->Protocol);\r
 \r
@@ -1539,18 +1563,20 @@ DevPathToTextiSCSI (
 {\r
   ISCSI_DEVICE_PATH_WITH_NAME *ISCSIDevPath;\r
   UINT16                      Options;\r
+  UINTN                       Index;\r
 \r
   ISCSIDevPath = DevPath;\r
   UefiDevicePathLibCatPrint (\r
     Str,\r
-    L"iSCSI(%a,0x%x,0x%lx,",\r
+    L"iSCSI(%a,0x%x,0x",\r
     ISCSIDevPath->TargetName,\r
-    ISCSIDevPath->TargetPortalGroupTag,\r
-    ISCSIDevPath->Lun\r
+    ISCSIDevPath->TargetPortalGroupTag\r
     );\r
-\r
+  for (Index = 0; Index < sizeof (ISCSIDevPath->Lun) / sizeof (UINT8); Index++) {\r
+    UefiDevicePathLibCatPrint (Str, L"%02x", ((UINT8 *)&ISCSIDevPath->Lun)[Index]);\r
+  }\r
   Options = ISCSIDevPath->LoginOption;\r
-  UefiDevicePathLibCatPrint (Str, L"%s,", (((Options >> 1) & 0x0001) != 0) ? L"CRC32C" : L"None");\r
+  UefiDevicePathLibCatPrint (Str, L",%s,", (((Options >> 1) & 0x0001) != 0) ? L"CRC32C" : L"None");\r
   UefiDevicePathLibCatPrint (Str, L"%s,", (((Options >> 3) & 0x0001) != 0) ? L"CRC32C" : L"None");\r
   if (((Options >> 11) & 0x0001) != 0) {\r
     UefiDevicePathLibCatPrint (Str, L"%s,", L"None");\r
@@ -1659,6 +1685,88 @@ DevPathToTextWiFi (
   UefiDevicePathLibCatPrint (Str, L"Wi-Fi(%a)", SSId);\r
 }\r
 \r
+/**\r
+  Converts a Bluetooth device path structure to its string representative.\r
+\r
+  @param Str             The string representative of input device.\r
+  @param DevPath         The input device path structure.\r
+  @param DisplayOnly     If DisplayOnly is TRUE, then the shorter text representation\r
+                         of the display node is used, where applicable. If DisplayOnly\r
+                         is FALSE, then the longer text representation of the display node\r
+                         is used.\r
+  @param AllowShortcuts  If AllowShortcuts is TRUE, then the shortcut forms of text\r
+                         representation for a device node can be used, where applicable.\r
+\r
+**/\r
+VOID\r
+DevPathToTextBluetoothLE (\r
+  IN OUT POOL_PRINT  *Str,\r
+  IN VOID            *DevPath,\r
+  IN BOOLEAN         DisplayOnly,\r
+  IN BOOLEAN         AllowShortcuts\r
+  )\r
+{\r
+  BLUETOOTH_LE_DEVICE_PATH  *BluetoothLE;\r
+\r
+  BluetoothLE = DevPath;\r
+  UefiDevicePathLibCatPrint (\r
+    Str,\r
+    L"BluetoothLE(%02x%02x%02x%02x%02x%02x,0x%02x)",\r
+    BluetoothLE->Address.Address[0],\r
+    BluetoothLE->Address.Address[1],\r
+    BluetoothLE->Address.Address[2],\r
+    BluetoothLE->Address.Address[3],\r
+    BluetoothLE->Address.Address[4],\r
+    BluetoothLE->Address.Address[5],\r
+    BluetoothLE->Address.Type\r
+    );\r
+}\r
+\r
+/**\r
+  Converts a DNS device path structure to its string representative.\r
+\r
+  @param Str             The string representative of input device.\r
+  @param DevPath         The input device path structure.\r
+  @param DisplayOnly     If DisplayOnly is TRUE, then the shorter text representation\r
+                         of the display node is used, where applicable. If DisplayOnly\r
+                         is FALSE, then the longer text representation of the display node\r
+                         is used.\r
+  @param AllowShortcuts  If AllowShortcuts is TRUE, then the shortcut forms of text\r
+                         representation for a device node can be used, where applicable.\r
+\r
+**/\r
+VOID\r
+DevPathToTextDns (\r
+  IN OUT POOL_PRINT  *Str,\r
+  IN VOID            *DevPath,\r
+  IN BOOLEAN         DisplayOnly,\r
+  IN BOOLEAN         AllowShortcuts\r
+  )\r
+{\r
+  DNS_DEVICE_PATH  *DnsDevPath;\r
+  UINT32           DnsServerIpCount;\r
+  UINT32           DnsServerIpIndex;\r
+\r
+  DnsDevPath     = DevPath;\r
+  DnsServerIpCount = (UINT32) (DevicePathNodeLength(DnsDevPath) - sizeof (EFI_DEVICE_PATH_PROTOCOL) - sizeof (DnsDevPath->IsIPv6)) / sizeof (EFI_IP_ADDRESS);\r
+\r
+  UefiDevicePathLibCatPrint (Str, L"Dns(");\r
+\r
+  for (DnsServerIpIndex = 0; DnsServerIpIndex < DnsServerIpCount; DnsServerIpIndex++) {\r
+    if (DnsDevPath->IsIPv6 == 0x00) {\r
+      CatIPv4Address (Str, &(DnsDevPath->DnsServerIp[DnsServerIpIndex].v4));\r
+    } else {\r
+      CatIPv6Address (Str, &(DnsDevPath->DnsServerIp[DnsServerIpIndex].v6));\r
+    }\r
+\r
+    if (DnsServerIpIndex < DnsServerIpCount - 1) {\r
+      UefiDevicePathLibCatPrint (Str, L",");\r
+    }\r
+  }\r
+\r
+  UefiDevicePathLibCatPrint (Str, L")");\r
+}\r
+\r
 /**\r
   Converts a URI device path structure to its string representative.\r
 \r
@@ -2188,9 +2296,11 @@ GLOBAL_REMOVE_IF_UNREFERENCED const DEVICE_PATH_TO_TEXT_TABLE mUefiDevicePathLib
   {MESSAGING_DEVICE_PATH, MSG_VENDOR_DP,                    DevPathToTextVendor         },\r
   {MESSAGING_DEVICE_PATH, MSG_ISCSI_DP,                     DevPathToTextiSCSI          },\r
   {MESSAGING_DEVICE_PATH, MSG_VLAN_DP,                      DevPathToTextVlan           },\r
+  {MESSAGING_DEVICE_PATH, MSG_DNS_DP,                       DevPathToTextDns            },\r
   {MESSAGING_DEVICE_PATH, MSG_URI_DP,                       DevPathToTextUri            },\r
   {MESSAGING_DEVICE_PATH, MSG_BLUETOOTH_DP,                 DevPathToTextBluetooth      },\r
   {MESSAGING_DEVICE_PATH, MSG_WIFI_DP,                      DevPathToTextWiFi           },\r
+  {MESSAGING_DEVICE_PATH, MSG_BLUETOOTH_LE_DP,              DevPathToTextBluetoothLE    },\r
   {MEDIA_DEVICE_PATH,     MEDIA_HARDDRIVE_DP,               DevPathToTextHardDrive      },\r
   {MEDIA_DEVICE_PATH,     MEDIA_CDROM_DP,                   DevPathToTextCDROM          },\r
   {MEDIA_DEVICE_PATH,     MEDIA_VENDOR_DP,                  DevPathToTextVendor         },\r
@@ -2323,14 +2433,14 @@ UefiDevicePathLibConvertDevicePathToText (
         UefiDevicePathLibCatPrint (&Str, L"/");\r
       }\r
     }\r
-    \r
+\r
     AlignedNode = AllocateCopyPool (DevicePathNodeLength (Node), Node);\r
     //\r
     // Print this node of the device path\r
     //\r
     ToText (&Str, AlignedNode, DisplayOnly, AllowShortcuts);\r
     FreePool (AlignedNode);\r
-    \r
+\r
     //\r
     // Next device path node\r
     //\r