]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/GenericBdsLib/DevicePath.c
Add INF extension Information
[mirror_edk2.git] / MdeModulePkg / Library / GenericBdsLib / DevicePath.c
index fc6d420d5cbd7e38c91698ca5dd7409d3c489b1c..135fa63d1a018995d57a80f652243aad6115ded7 100644 (file)
@@ -15,63 +15,17 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #include "InternalBdsLib.h"\r
 \r
-\r
-EFI_GUID  mEfiDevicePathMessagingUartFlowControlGuid = DEVICE_PATH_MESSAGING_UART_FLOW_CONTROL;\r
-\r
-EFI_GUID mEfiDevicePathMessagingSASGuid = DEVICE_PATH_MESSAGING_SAS;\r
-\r
-\r
-/**\r
-\r
-  Adjusts the size of a previously allocated buffer.\r
-\r
-\r
-  @param OldPool         A pointer to the buffer whose size is being adjusted.\r
-  @param OldSize         The size of the current buffer.\r
-  @param NewSize         The size of the new buffer.\r
-\r
-  @return The new buffer allocated. If allocatio failed, NULL will be returned.\r
-\r
-**/\r
-VOID *\r
-ReallocatePool (\r
-  IN VOID                 *OldPool,\r
-  IN UINTN                OldSize,\r
-  IN UINTN                NewSize\r
-  )\r
-{\r
-  VOID  *NewPool;\r
-\r
-  NewPool = NULL;\r
-  if (NewSize != 0) {\r
-    NewPool = AllocateZeroPool (NewSize);\r
-  }\r
-\r
-  if (OldPool != NULL) {\r
-    if (NewPool != NULL) {\r
-      CopyMem (NewPool, OldPool, OldSize < NewSize ? OldSize : NewSize);\r
-    }\r
-\r
-    gBS->FreePool (OldPool);\r
-  }\r
-\r
-  return NewPool;\r
-}\r
-\r
-\r
 /**\r
   Concatenates a formatted unicode string to allocated pool.\r
   The caller must free the resulting buffer.\r
 \r
-  @param  Str      Tracks the allocated pool, size in use, and  amount of pool\r
-                   allocated.\r
+  @param  Str      Tracks the allocated pool, size in use, and amount of pool allocated.\r
   @param  fmt      The format string\r
-\r
-  @param  ...      Variable argument list.\r
+  @param  ...      The data will be printed.\r
 \r
   @return Allocated buffer with the formatted string printed in it.\r
-          The caller must free the allocated buffer.   The buffer\r
-          allocation is not packed.\r
+          The caller must free the allocated buffer.\r
+          The buffer allocation is not packed.\r
 \r
 **/\r
 CHAR16 *\r
@@ -103,9 +57,9 @@ CatPrint (
     StringSize += (StrSize (Str->str) - sizeof (UINT16));\r
 \r
     Str->str = ReallocatePool (\r
-                Str->str,\r
                 StrSize (Str->str),\r
-                StringSize\r
+                StringSize,\r
+                Str->str\r
                 );\r
     ASSERT (Str->str != NULL);\r
   }\r
@@ -116,79 +70,10 @@ CatPrint (
     Str->len = StringSize - sizeof (UINT16);\r
   }\r
 \r
-  gBS->FreePool (AppendStr);\r
+  FreePool (AppendStr);\r
   return Str->str;\r
 }\r
 \r
-\r
-/**\r
-  Function unpacks a device path data structure so that all the nodes\r
-  of a device path are naturally aligned.\r
-\r
-  @param  DevPath  A pointer to a device path data structure\r
-\r
-  @return A ponter to new device If the memory for the device path is successfully allocated, then a\r
-          pointer to the new device path is returned.  Otherwise, NULL is returned.\r
-\r
-**/\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-EFIAPI\r
-BdsLibUnpackDevicePath (\r
-  IN EFI_DEVICE_PATH_PROTOCOL  *DevPath\r
-  )\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *Src;\r
-  EFI_DEVICE_PATH_PROTOCOL  *Dest;\r
-  EFI_DEVICE_PATH_PROTOCOL  *NewPath;\r
-  UINTN                     Size;\r
-\r
-  //\r
-  // Walk device path and round sizes to valid boundries\r
-  //\r
-  Src   = DevPath;\r
-  Size  = 0;\r
-  for (;;) {\r
-    Size += DevicePathNodeLength (Src);\r
-    Size += ALIGN_SIZE (Size);\r
-\r
-    if (IsDevicePathEnd (Src)) {\r
-      break;\r
-    }\r
-\r
-    Src = NextDevicePathNode (Src);\r
-  }\r
-  //\r
-  // Allocate space for the unpacked path\r
-  //\r
-  NewPath = AllocateZeroPool (Size);\r
-  if (NewPath != NULL) {\r
-\r
-    ASSERT (((UINTN) NewPath) % MIN_ALIGNMENT_SIZE == 0);\r
-\r
-    //\r
-    // Copy each node\r
-    //\r
-    Src   = DevPath;\r
-    Dest  = NewPath;\r
-    for (;;) {\r
-      Size = DevicePathNodeLength (Src);\r
-      CopyMem (Dest, Src, Size);\r
-      Size += ALIGN_SIZE (Size);\r
-      SetDevicePathNodeLength (Dest, Size);\r
-      Dest->Type |= EFI_DP_TYPE_UNPACKED;\r
-      Dest = (EFI_DEVICE_PATH_PROTOCOL *) (((UINT8 *) Dest) + Size);\r
-\r
-      if (IsDevicePathEnd (Src)) {\r
-        break;\r
-      }\r
-\r
-      Src = NextDevicePathNode (Src);\r
-    }\r
-  }\r
-\r
-  return NewPath;\r
-}\r
-\r
 /**\r
   Convert Device Path to a Unicode string for printing.\r
 \r
@@ -285,13 +170,10 @@ DevPathController (
 \r
 \r
 /**\r
-  Convert Device Path to a Unicode string for printing.\r
+  Convert Vendor device path to device name.\r
 \r
-  @param Str             The buffer holding the output string.\r
-                         This buffer contains the length of the\r
-                         string and the maixmum length reserved\r
-                         for the string buffer.\r
-  @param DevPath         The device path.\r
+  @param  Str      The buffer store device name\r
+  @param  DevPath  Pointer to vendor device path\r
 \r
 **/\r
 VOID\r
@@ -314,22 +196,6 @@ DevPathVendor (
   switch (DevicePathType (&Vendor->Header)) {\r
   case HARDWARE_DEVICE_PATH:\r
     Type = L"Hw";\r
-// bugbug: nt 32 specific definition\r
-#if 0\r
-    //\r
-    // If the device is a winntbus device, we will give it a readable device name.\r
-    //\r
-    if (CompareGuid (&Vendor->Guid, &mEfiWinNtThunkProtocolGuid)) {\r
-      CatPrint (Str, L"%s", L"WinNtBus");\r
-      return ;\r
-    } else if (CompareGuid (&Vendor->Guid, &mEfiWinNtGopGuid)) {\r
-      CatPrint (Str, L"%s", L"GOP");\r
-      return ;\r
-    } else if (CompareGuid (&Vendor->Guid, &mEfiWinNtSerialPortGuid)) {\r
-      CatPrint (Str, L"%s", L"Serial");\r
-      return ;\r
-    }\r
-#endif\r
     break;\r
 \r
   case MESSAGING_DEVICE_PATH:\r
@@ -346,7 +212,7 @@ DevPathVendor (
     } else if (CompareGuid (&Vendor->Guid, &gEfiVTUTF8Guid)) {\r
       CatPrint (Str, L"VenUft8()");\r
       return ;\r
-    } else if (CompareGuid (&Vendor->Guid, &mEfiDevicePathMessagingUartFlowControlGuid)) {\r
+    } else if (CompareGuid (&Vendor->Guid, &gEfiUartDevicePathGuid     )) {\r
       FlowControlMap = (((UART_FLOW_CONTROL_DEVICE_PATH *) Vendor)->FlowControlMap);\r
       switch (FlowControlMap & 0x00000003) {\r
       case 0:\r
@@ -367,7 +233,7 @@ DevPathVendor (
 \r
       return ;\r
 \r
-    } else if (CompareGuid (&Vendor->Guid, &mEfiDevicePathMessagingSASGuid)) {\r
+    } else if (CompareGuid (&Vendor->Guid, &gEfiSasDevicePathGuid)) {\r
       CatPrint (\r
         Str,\r
         L"SAS(%lx,%lx,%x,",\r
@@ -424,7 +290,6 @@ DevPathVendor (
   CatPrint (Str, L")");\r
 }\r
 \r
-\r
 /**\r
   Convert Device Path to a Unicode string for printing.\r
 \r
@@ -468,6 +333,7 @@ DevPathExtendedAcpi (
   )\r
 {\r
   ACPI_EXTENDED_HID_DEVICE_PATH   *ExtendedAcpi;\r
+  \r
   //\r
   // Index for HID, UID and CID strings, 0 for non-exist\r
   //\r
@@ -1350,108 +1216,176 @@ DevPathNodeUnknown (
 }\r
 \r
 DEVICE_PATH_STRING_TABLE  DevPathTable[] = {\r
-  HARDWARE_DEVICE_PATH,\r
-  HW_PCI_DP,\r
-  DevPathPci,\r
-  HARDWARE_DEVICE_PATH,\r
-  HW_PCCARD_DP,\r
-  DevPathPccard,\r
-  HARDWARE_DEVICE_PATH,\r
-  HW_MEMMAP_DP,\r
-  DevPathMemMap,\r
-  HARDWARE_DEVICE_PATH,\r
-  HW_VENDOR_DP,\r
-  DevPathVendor,\r
-  HARDWARE_DEVICE_PATH,\r
-  HW_CONTROLLER_DP,\r
-  DevPathController,\r
-  ACPI_DEVICE_PATH,\r
-  ACPI_DP,\r
-  DevPathAcpi,\r
-  ACPI_DEVICE_PATH,\r
-  ACPI_EXTENDED_DP,\r
-  DevPathExtendedAcpi,\r
-  ACPI_DEVICE_PATH,\r
-  ACPI_ADR_DP,\r
-  DevPathAdrAcpi,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_ATAPI_DP,\r
-  DevPathAtapi,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_SCSI_DP,\r
-  DevPathScsi,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_FIBRECHANNEL_DP,\r
-  DevPathFibre,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_1394_DP,\r
-  DevPath1394,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_USB_DP,\r
-  DevPathUsb,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_USB_WWID_DP,\r
-  DevPathUsbWWID,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_DEVICE_LOGICAL_UNIT_DP,\r
-  DevPathLogicalUnit,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_USB_CLASS_DP,\r
-  DevPathUsbClass,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_SATA_DP,\r
-  DevPathSata,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_I2O_DP,\r
-  DevPathI2O,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_MAC_ADDR_DP,\r
-  DevPathMacAddr,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_IPv4_DP,\r
-  DevPathIPv4,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_IPv6_DP,\r
-  DevPathIPv6,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_INFINIBAND_DP,\r
-  DevPathInfiniBand,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_UART_DP,\r
-  DevPathUart,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_VENDOR_DP,\r
-  DevPathVendor,\r
-  MESSAGING_DEVICE_PATH,\r
-  MSG_ISCSI_DP,\r
-  DevPathiSCSI,\r
-  MEDIA_DEVICE_PATH,\r
-  MEDIA_HARDDRIVE_DP,\r
-  DevPathHardDrive,\r
-  MEDIA_DEVICE_PATH,\r
-  MEDIA_CDROM_DP,\r
-  DevPathCDROM,\r
-  MEDIA_DEVICE_PATH,\r
-  MEDIA_VENDOR_DP,\r
-  DevPathVendor,\r
-  MEDIA_DEVICE_PATH,\r
-  MEDIA_FILEPATH_DP,\r
-  DevPathFilePath,\r
-  MEDIA_DEVICE_PATH,\r
-  MEDIA_PROTOCOL_DP,\r
-  DevPathMediaProtocol,\r
-  MEDIA_DEVICE_PATH,\r
-  MEDIA_PIWG_FW_FILE_DP,\r
-  DevPathFvFilePath,\r
-  BBS_DEVICE_PATH,\r
-  BBS_BBS_DP,\r
-  DevPathBssBss,\r
-  END_DEVICE_PATH_TYPE,\r
-  END_INSTANCE_DEVICE_PATH_SUBTYPE,\r
-  DevPathEndInstance,\r
-  0,\r
-  0,\r
-  NULL\r
+  {\r
+    HARDWARE_DEVICE_PATH,\r
+    HW_PCI_DP,\r
+    DevPathPci\r
+  },\r
+  {\r
+    HARDWARE_DEVICE_PATH,\r
+    HW_PCCARD_DP,\r
+    DevPathPccard\r
+  },\r
+  {\r
+    HARDWARE_DEVICE_PATH,\r
+    HW_MEMMAP_DP,\r
+    DevPathMemMap\r
+  },\r
+  {\r
+    HARDWARE_DEVICE_PATH,\r
+    HW_VENDOR_DP,\r
+    DevPathVendor\r
+  },\r
+  {\r
+    HARDWARE_DEVICE_PATH,\r
+    HW_CONTROLLER_DP,\r
+    DevPathController\r
+  },\r
+  {\r
+    ACPI_DEVICE_PATH,\r
+    ACPI_DP,\r
+    DevPathAcpi\r
+  },\r
+  {\r
+    ACPI_DEVICE_PATH,\r
+    ACPI_EXTENDED_DP,\r
+    DevPathExtendedAcpi\r
+  },\r
+  {\r
+    ACPI_DEVICE_PATH,\r
+    ACPI_ADR_DP,\r
+    DevPathAdrAcpi\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_ATAPI_DP,\r
+    DevPathAtapi\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_SCSI_DP,\r
+    DevPathScsi\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_FIBRECHANNEL_DP,\r
+    DevPathFibre\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_1394_DP,\r
+    DevPath1394\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_USB_DP,\r
+    DevPathUsb\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_USB_WWID_DP,\r
+    DevPathUsbWWID\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_DEVICE_LOGICAL_UNIT_DP,\r
+    DevPathLogicalUnit\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_USB_CLASS_DP,\r
+    DevPathUsbClass\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_SATA_DP,\r
+    DevPathSata\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_I2O_DP,\r
+    DevPathI2O\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_MAC_ADDR_DP,\r
+    DevPathMacAddr\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_IPv4_DP,\r
+    DevPathIPv4\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_IPv6_DP,\r
+    DevPathIPv6\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_INFINIBAND_DP,\r
+    DevPathInfiniBand\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_UART_DP,\r
+    DevPathUart\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_VENDOR_DP,\r
+    DevPathVendor\r
+  },\r
+  {\r
+    MESSAGING_DEVICE_PATH,\r
+    MSG_ISCSI_DP,\r
+    DevPathiSCSI\r
+  },\r
+  {\r
+    MEDIA_DEVICE_PATH,\r
+    MEDIA_HARDDRIVE_DP,\r
+    DevPathHardDrive\r
+  },\r
+  {\r
+    MEDIA_DEVICE_PATH,\r
+    MEDIA_CDROM_DP,\r
+    DevPathCDROM\r
+  },\r
+  {\r
+    MEDIA_DEVICE_PATH,\r
+    MEDIA_VENDOR_DP,\r
+    DevPathVendor\r
+  },\r
+  {\r
+    MEDIA_DEVICE_PATH,\r
+    MEDIA_FILEPATH_DP,\r
+    DevPathFilePath\r
+  },\r
+  {\r
+    MEDIA_DEVICE_PATH,\r
+    MEDIA_PROTOCOL_DP,\r
+    DevPathMediaProtocol\r
+  },\r
+  {\r
+    MEDIA_DEVICE_PATH,\r
+    MEDIA_PIWG_FW_FILE_DP,\r
+    DevPathFvFilePath\r
+  },\r
+  {\r
+    BBS_DEVICE_PATH,\r
+    BBS_BBS_DP,\r
+    DevPathBssBss\r
+  },\r
+  {\r
+    END_DEVICE_PATH_TYPE,\r
+    END_INSTANCE_DEVICE_PATH_SUBTYPE,\r
+    DevPathEndInstance\r
+  },\r
+  {\r
+    0,\r
+    0,\r
+    NULL\r
+  }\r
 };\r
 \r
 \r
@@ -1501,12 +1435,6 @@ DevicePathToStr (
     return ToText;\r
   }\r
 \r
-  //\r
-  // Unpacked the device path\r
-  //\r
-  DevPath = BdsLibUnpackDevicePath (DevPath);\r
-  ASSERT (DevPath);\r
-\r
   //\r
   // Process each device path node\r
   //\r
@@ -1547,58 +1475,11 @@ DevicePathToStr (
     //\r
     DevPathNode = NextDevicePathNode (DevPathNode);\r
   }\r
-  //\r
-  // Shrink pool used for string allocation\r
-  //\r
-  gBS->FreePool (DevPath);\r
 \r
 Done:\r
   NewSize = (Str.len + 1) * sizeof (CHAR16);\r
-  Str.str = ReallocatePool (Str.str, NewSize, NewSize);\r
+  Str.str = ReallocatePool (NewSize, NewSize, Str.str);\r
   ASSERT (Str.str != NULL);\r
   Str.str[Str.len] = 0;\r
   return Str.str;\r
 }\r
-\r
-\r
-/**\r
-  Function creates a device path data structure that identically matches the\r
-  device path passed in.\r
-\r
-  @param  DevPath  A pointer to a device path data structure.\r
-\r
-  @return The new copy of DevPath is created to identically match the input.\r
-  @return Otherwise, NULL is returned.\r
-\r
-**/\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-LibDuplicateDevicePathInstance (\r
-  IN EFI_DEVICE_PATH_PROTOCOL  *DevPath\r
-  )\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *NewDevPath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePathInst;\r
-  EFI_DEVICE_PATH_PROTOCOL  *Temp;\r
-  UINTN                     Size;\r
-\r
-  //\r
-  // get the size of an instance from the input\r
-  //\r
-  Temp            = DevPath;\r
-  DevicePathInst  = GetNextDevicePathInstance (&Temp, &Size);\r
-\r
-  //\r
-  // Make a copy\r
-  //\r
-  NewDevPath = NULL;\r
-  if (Size != 0) {\r
-    NewDevPath = AllocateZeroPool (Size);\r
-    ASSERT (NewDevPath != NULL);\r
-  }\r
-\r
-  if (NewDevPath != NULL) {\r
-    CopyMem (NewDevPath, DevicePathInst, Size);\r
-  }\r
-\r
-  return NewDevPath;\r
-}\r