/** @file\r
DevicePathFromText protocol as defined in the UEFI 2.0 specification.\r
\r
-Copyright (c) 2006 - 2008, Intel Corporation. <BR>\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2006 - 2011, 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
Pci = (PCI_DEVICE_PATH *) CreateDeviceNode (\r
HARDWARE_DEVICE_PATH,\r
HW_PCI_DP,\r
- sizeof (PCI_DEVICE_PATH)\r
+ (UINT16) sizeof (PCI_DEVICE_PATH)\r
);\r
\r
Pci->Function = (UINT8) Strtoi (FunctionStr);\r
Pccard = (PCCARD_DEVICE_PATH *) CreateDeviceNode (\r
HARDWARE_DEVICE_PATH,\r
HW_PCCARD_DP,\r
- sizeof (PCCARD_DEVICE_PATH)\r
+ (UINT16) sizeof (PCCARD_DEVICE_PATH)\r
);\r
\r
Pccard->FunctionNumber = (UINT8) Strtoi (FunctionNumberStr);\r
MemMap = (MEMMAP_DEVICE_PATH *) CreateDeviceNode (\r
HARDWARE_DEVICE_PATH,\r
HW_MEMMAP_DP,\r
- sizeof (MEMMAP_DEVICE_PATH)\r
+ (UINT16) sizeof (MEMMAP_DEVICE_PATH)\r
);\r
\r
MemMap->MemoryType = (UINT32) Strtoi (MemoryTypeStr);\r
Controller = (CONTROLLER_DEVICE_PATH *) CreateDeviceNode (\r
HARDWARE_DEVICE_PATH,\r
HW_CONTROLLER_DP,\r
- sizeof (CONTROLLER_DEVICE_PATH)\r
+ (UINT16) sizeof (CONTROLLER_DEVICE_PATH)\r
);\r
Controller->ControllerNumber = (UINT32) Strtoi (ControllerStr);\r
\r
Acpi = (ACPI_HID_DEVICE_PATH *) CreateDeviceNode (\r
ACPI_DEVICE_PATH,\r
ACPI_DP,\r
- sizeof (ACPI_HID_DEVICE_PATH)\r
+ (UINT16) sizeof (ACPI_HID_DEVICE_PATH)\r
);\r
\r
EisaIdFromText (HIDStr, &Acpi->HID);\r
Acpi = (ACPI_HID_DEVICE_PATH *) CreateDeviceNode (\r
ACPI_DEVICE_PATH,\r
ACPI_DP,\r
- sizeof (ACPI_HID_DEVICE_PATH)\r
+ (UINT16) sizeof (ACPI_HID_DEVICE_PATH)\r
);\r
\r
Acpi->HID = EFI_PNP_ID (PnPId);\r
return (EFI_DEVICE_PATH_PROTOCOL *) AcpiEx;\r
}\r
\r
+/**\r
+ Converts a text device path node to ACPI _ADR device path structure.\r
+\r
+ @param TextDeviceNode The input Text device path node.\r
+\r
+ @return A pointer to the newly-created ACPI _ADR device path structure.\r
+\r
+**/\r
+EFI_DEVICE_PATH_PROTOCOL *\r
+DevPathFromTextAcpiAdr (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *DisplayDeviceStr;\r
+ ACPI_ADR_DEVICE_PATH *AcpiAdr;\r
+ UINTN Index;\r
+ UINTN Length;\r
+\r
+ AcpiAdr = (ACPI_ADR_DEVICE_PATH *) CreateDeviceNode (\r
+ ACPI_DEVICE_PATH,\r
+ ACPI_ADR_DP,\r
+ sizeof (ACPI_ADR_DEVICE_PATH)\r
+ );\r
+ ASSERT (AcpiAdr != NULL);\r
+\r
+ for (Index = 0; ; Index++) {\r
+ DisplayDeviceStr = GetNextParamStr (&TextDeviceNode);\r
+ if (IS_NULL (*DisplayDeviceStr)) {\r
+ break;\r
+ }\r
+ if (Index > 0) {\r
+ Length = DevicePathNodeLength (AcpiAdr);\r
+ AcpiAdr = ReallocatePool (\r
+ Length,\r
+ Length + sizeof (UINT32),\r
+ AcpiAdr\r
+ );\r
+ ASSERT (AcpiAdr != NULL);\r
+ SetDevicePathNodeLength (AcpiAdr, Length + sizeof (UINT32));\r
+ }\r
+ \r
+ (&AcpiAdr->ADR)[Index] = (UINT32) Strtoi (DisplayDeviceStr);\r
+ }\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) AcpiAdr;\r
+}\r
+\r
/**\r
Converts a text device path node to Parallel Port device path structure.\r
\r
Atapi = (ATAPI_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_ATAPI_DP,\r
- sizeof (ATAPI_DEVICE_PATH)\r
+ (UINT16) sizeof (ATAPI_DEVICE_PATH)\r
);\r
\r
PrimarySecondaryStr = GetNextParamStr (&TextDeviceNode);\r
Scsi = (SCSI_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_SCSI_DP,\r
- sizeof (SCSI_DEVICE_PATH)\r
+ (UINT16) sizeof (SCSI_DEVICE_PATH)\r
);\r
\r
Scsi->Pun = (UINT16) Strtoi (PunStr);\r
Fibre = (FIBRECHANNEL_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_FIBRECHANNEL_DP,\r
- sizeof (FIBRECHANNEL_DEVICE_PATH)\r
+ (UINT16) sizeof (FIBRECHANNEL_DEVICE_PATH)\r
);\r
\r
Fibre->Reserved = 0;\r
F1394DevPath = (F1394_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_1394_DP,\r
- sizeof (F1394_DEVICE_PATH)\r
+ (UINT16) sizeof (F1394_DEVICE_PATH)\r
);\r
\r
F1394DevPath->Reserved = 0;\r
Usb = (USB_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_USB_DP,\r
- sizeof (USB_DEVICE_PATH)\r
+ (UINT16) sizeof (USB_DEVICE_PATH)\r
);\r
\r
Usb->ParentPortNumber = (UINT8) Strtoi (PortStr);\r
I2ODevPath = (I2O_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_I2O_DP,\r
- sizeof (I2O_DEVICE_PATH)\r
+ (UINT16) sizeof (I2O_DEVICE_PATH)\r
);\r
\r
I2ODevPath->Tid = (UINT32) Strtoi (TIDStr);\r
InfiniBand = (INFINIBAND_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_INFINIBAND_DP,\r
- sizeof (INFINIBAND_DEVICE_PATH)\r
+ (UINT16) sizeof (INFINIBAND_DEVICE_PATH)\r
);\r
\r
InfiniBand->ResourceFlags = (UINT32) Strtoi (FlagsStr);\r
Vendor = (VENDOR_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_VENDOR_DP,\r
- sizeof (VENDOR_DEVICE_PATH));\r
+ (UINT16) sizeof (VENDOR_DEVICE_PATH));\r
CopyGuid (&Vendor->Guid, &gEfiPcAnsiGuid);\r
\r
return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;\r
Vendor = (VENDOR_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_VENDOR_DP,\r
- sizeof (VENDOR_DEVICE_PATH));\r
+ (UINT16) sizeof (VENDOR_DEVICE_PATH));\r
CopyGuid (&Vendor->Guid, &gEfiVT100Guid);\r
\r
return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;\r
Vendor = (VENDOR_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_VENDOR_DP,\r
- sizeof (VENDOR_DEVICE_PATH));\r
+ (UINT16) sizeof (VENDOR_DEVICE_PATH));\r
CopyGuid (&Vendor->Guid, &gEfiVT100PlusGuid);\r
\r
return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;\r
Vendor = (VENDOR_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_VENDOR_DP,\r
- sizeof (VENDOR_DEVICE_PATH));\r
+ (UINT16) sizeof (VENDOR_DEVICE_PATH));\r
CopyGuid (&Vendor->Guid, &gEfiVTUTF8Guid);\r
\r
return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;\r
UartFlowControl = (UART_FLOW_CONTROL_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_VENDOR_DP,\r
- sizeof (UART_FLOW_CONTROL_DEVICE_PATH)\r
+ (UINT16) sizeof (UART_FLOW_CONTROL_DEVICE_PATH)\r
);\r
\r
CopyGuid (&UartFlowControl->Guid, &gEfiUartDevicePathGuid);\r
Sas = (SAS_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_VENDOR_DP,\r
- sizeof (SAS_DEVICE_PATH)\r
+ (UINT16) sizeof (SAS_DEVICE_PATH)\r
);\r
\r
CopyGuid (&Sas->Guid, &gEfiSasDevicePathGuid);\r
Vend = (VENDOR_DEFINED_MESSAGING_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_VENDOR_DP,\r
- sizeof (VENDOR_DEFINED_MESSAGING_DEVICE_PATH)\r
+ (UINT16) sizeof (VENDOR_DEFINED_MESSAGING_DEVICE_PATH)\r
);\r
\r
CopyGuid (&Vend->Guid, &gEfiDebugPortProtocolGuid);\r
MACDevPath = (MAC_ADDR_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_MAC_ADDR_DP,\r
- sizeof (MAC_ADDR_DEVICE_PATH)\r
+ (UINT16) sizeof (MAC_ADDR_DEVICE_PATH)\r
);\r
\r
MACDevPath->IfType = (UINT8) Strtoi (IfTypeStr);\r
return (EFI_DEVICE_PATH_PROTOCOL *) MACDevPath;\r
}\r
\r
+\r
+/**\r
+ Converts a text format to the network protocol ID.\r
+\r
+ @param Text String of protocol field.\r
+\r
+ @return Network protocol ID .\r
+\r
+**/\r
+UINTN\r
+NetworkProtocolFromText (\r
+ IN CHAR16 *Text\r
+ )\r
+{\r
+ if (StrCmp (Text, L"UDP") == 0) {\r
+ return RFC_1700_UDP_PROTOCOL;\r
+ }\r
+\r
+ if (StrCmp (Text, L"TCP") == 0) {\r
+ return RFC_1700_TCP_PROTOCOL;\r
+ }\r
+\r
+ return Strtoi (Text);\r
+}\r
+\r
+\r
/**\r
Converts a text device path node to IPV4 device path structure.\r
\r
IPv4 = (IPv4_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_IPv4_DP,\r
- sizeof (IPv4_DEVICE_PATH)\r
+ (UINT16) sizeof (IPv4_DEVICE_PATH)\r
);\r
\r
StrToIPv4Addr (&RemoteIPStr, &IPv4->RemoteIpAddress);\r
- IPv4->Protocol = (UINT16) ((StrCmp (ProtocolStr, L"UDP") == 0) ? 0 : 1);\r
+ IPv4->Protocol = (UINT16) NetworkProtocolFromText (ProtocolStr);\r
if (StrCmp (TypeStr, L"Static") == 0) {\r
IPv4->StaticIpAddress = TRUE;\r
} else {\r
IPv6 = (IPv6_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_IPv6_DP,\r
- sizeof (IPv6_DEVICE_PATH)\r
+ (UINT16) sizeof (IPv6_DEVICE_PATH)\r
);\r
\r
StrToIPv6Addr (&RemoteIPStr, &IPv6->RemoteIpAddress);\r
- IPv6->Protocol = (UINT16) ((StrCmp (ProtocolStr, L"UDP") == 0) ? 0 : 1);\r
+ IPv6->Protocol = (UINT16) NetworkProtocolFromText (ProtocolStr);\r
if (StrCmp (TypeStr, L"Static") == 0) {\r
IPv6->StaticIpAddress = TRUE;\r
} else {\r
Uart = (UART_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_UART_DP,\r
- sizeof (UART_DEVICE_PATH)\r
+ (UINT16) sizeof (UART_DEVICE_PATH)\r
);\r
\r
Uart->BaudRate = (StrCmp (BaudStr, L"DEFAULT") == 0) ? 115200 : Dtoi (BaudStr);\r
UsbClass = (USB_CLASS_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_USB_CLASS_DP,\r
- sizeof (USB_CLASS_DEVICE_PATH)\r
+ (UINT16) sizeof (USB_CLASS_DEVICE_PATH)\r
);\r
\r
VIDStr = GetNextParamStr (&TextDeviceNode);\r
(UINT16) (sizeof (ISCSI_DEVICE_PATH_WITH_NAME) + StrLen (NameStr))\r
);\r
\r
- AsciiStr = ISCSIDevPath->iSCSITargetName;\r
+ AsciiStr = ISCSIDevPath->TargetName;\r
StrToAscii (NameStr, &AsciiStr);\r
\r
ISCSIDevPath->TargetPortalGroupTag = (UINT16) Strtoi (PortalGroupStr);\r
return (EFI_DEVICE_PATH_PROTOCOL *) ISCSIDevPath;\r
}\r
\r
+/**\r
+ Converts a text device path node to VLAN device path structure.\r
+\r
+ @param TextDeviceNode The input Text device path node.\r
+\r
+ @return A pointer to the newly-created VLAN device path structure.\r
+\r
+**/\r
+EFI_DEVICE_PATH_PROTOCOL *\r
+DevPathFromTextVlan (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *VlanStr;\r
+ VLAN_DEVICE_PATH *Vlan;\r
+\r
+ VlanStr = GetNextParamStr (&TextDeviceNode);\r
+ Vlan = (VLAN_DEVICE_PATH *) CreateDeviceNode (\r
+ MESSAGING_DEVICE_PATH,\r
+ MSG_VLAN_DP,\r
+ (UINT16) sizeof (VLAN_DEVICE_PATH)\r
+ );\r
+\r
+ Vlan->VlanId = (UINT16) Strtoi (VlanStr);\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) Vlan;\r
+}\r
+\r
/**\r
Converts a text device path node to HD device path structure.\r
\r
Hd = (HARDDRIVE_DEVICE_PATH *) CreateDeviceNode (\r
MEDIA_DEVICE_PATH,\r
MEDIA_HARDDRIVE_DP,\r
- sizeof (HARDDRIVE_DEVICE_PATH)\r
+ (UINT16) sizeof (HARDDRIVE_DEVICE_PATH)\r
);\r
\r
Hd->PartitionNumber = (UINT32) Dtoi (PartitionStr);\r
CDROMDevPath = (CDROM_DEVICE_PATH *) CreateDeviceNode (\r
MEDIA_DEVICE_PATH,\r
MEDIA_CDROM_DP,\r
- sizeof (CDROM_DEVICE_PATH)\r
+ (UINT16) sizeof (CDROM_DEVICE_PATH)\r
);\r
\r
CDROMDevPath->BootEntry = (UINT32) Strtoi (EntryStr);\r
Media = (MEDIA_PROTOCOL_DEVICE_PATH *) CreateDeviceNode (\r
MEDIA_DEVICE_PATH,\r
MEDIA_PROTOCOL_DP,\r
- sizeof (MEDIA_PROTOCOL_DEVICE_PATH)\r
+ (UINT16) sizeof (MEDIA_PROTOCOL_DEVICE_PATH)\r
);\r
\r
StrToGuid (GuidStr, &Media->Protocol);\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
+ (UINT16) sizeof (MEDIA_FW_VOL_DEVICE_PATH)\r
);\r
\r
StrToGuid (GuidStr, &Fv->FvName);\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
+ (UINT16) sizeof (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH)\r
);\r
\r
StrToGuid (GuidStr, &FvFile->FvFileName);\r
return (EFI_DEVICE_PATH_PROTOCOL *) FvFile;\r
}\r
\r
+/**\r
+ Converts a text device path node to text relative offset device path structure.\r
+\r
+ @param TextDeviceNode The input Text device path node.\r
+\r
+ @return A pointer to the newly-created Text device path structure.\r
+\r
+**/\r
+EFI_DEVICE_PATH_PROTOCOL *\r
+DevPathFromTextRelativeOffsetRange (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *StartingOffsetStr;\r
+ CHAR16 *EndingOffsetStr;\r
+ MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH *Offset;\r
+\r
+ StartingOffsetStr = GetNextParamStr (&TextDeviceNode);\r
+ EndingOffsetStr = GetNextParamStr (&TextDeviceNode);\r
+ Offset = (MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH *) CreateDeviceNode (\r
+ MEDIA_DEVICE_PATH,\r
+ MEDIA_RELATIVE_OFFSET_RANGE_DP,\r
+ (UINT16) sizeof (MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH)\r
+ );\r
+\r
+ Strtoi64 (StartingOffsetStr, &Offset->StartingOffset);\r
+ Strtoi64 (EndingOffsetStr, &Offset->EndingOffset);\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) Offset;\r
+}\r
+\r
/**\r
Converts a text device path node to BIOS Boot Specification device path structure.\r
\r
Sata = (SATA_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_SATA_DP,\r
- sizeof (SATA_DEVICE_PATH)\r
+ (UINT16) sizeof (SATA_DEVICE_PATH)\r
);\r
Sata->HBAPortNumber = (UINT16) Xtoi (Param1);\r
if (Param3 != NULL) {\r
Sata->PortMultiplierPortNumber = (UINT16) Xtoi (Param2);\r
Param2 = Param3;\r
} else {\r
- Sata->PortMultiplierPortNumber = 0;\r
+ Sata->PortMultiplierPortNumber = SATA_HBA_DIRECT_CONNECT_FLAG;\r
}\r
Sata->Lun = (UINT16) Xtoi (Param2);\r
\r
{L"ParallelPort", DevPathFromTextParallelPort},\r
{L"AcpiEx", DevPathFromTextAcpiEx},\r
{L"AcpiExp", DevPathFromTextAcpiExp},\r
+ {L"AcpiAdr", DevPathFromTextAcpiAdr},\r
{L"Ata", DevPathFromTextAta},\r
{L"Scsi", DevPathFromTextScsi},\r
{L"Fibre", DevPathFromTextFibre},\r
{L"UsbWwid", DevPathFromTextUsbWwid},\r
{L"Unit", DevPathFromTextUnit},\r
{L"iSCSI", DevPathFromTextiSCSI},\r
+ {L"Vlan", DevPathFromTextVlan},\r
{L"HD", DevPathFromTextHD},\r
{L"CDROM", DevPathFromTextCDROM},\r
{L"VenMEDIA", DevPathFromTextVenMEDIA},\r
{L"Media", DevPathFromTextMedia},\r
{L"Fv", DevPathFromTextFv},\r
{L"FvFile", DevPathFromTextFvFile},\r
+ {L"Offset", DevPathFromTextRelativeOffsetRange},\r
{L"BBS", DevPathFromTextBBS},\r
{L"Sata", DevPathFromTextSata},\r
{NULL, NULL}\r