\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
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
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
\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
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
} 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
\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
CatPrint (Str, L")");\r
}\r
\r
-\r
/**\r
Convert Device Path to a Unicode string for printing.\r
\r
)\r
{\r
ACPI_EXTENDED_HID_DEVICE_PATH *ExtendedAcpi;\r
+ \r
//\r
// Index for HID, UID and CID strings, 0 for non-exist\r
//\r
}\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
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
//\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