+++ /dev/null
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation \r
-All rights reserved. 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
-\r
-Module Name:\r
-\r
- DevicePathFromText.c\r
-\r
-Abstract:\r
-\r
- DevicePathFromText protocol as defined in the UEFI 2.0 specification.\r
-\r
---*/\r
-\r
-#include "DevicePath.h"\r
-\r
-STATIC\r
-CHAR16 *\r
-StrDuplicate (\r
- IN CONST CHAR16 *Src\r
- )\r
-/*++\r
-\r
- Routine Description:\r
- Duplicate a string\r
-\r
- Arguments:\r
- Src - Source string\r
-\r
- Returns:\r
- Duplicated string\r
-\r
---*/\r
-{\r
- UINTN Length;\r
- CHAR16 *ReturnStr;\r
-\r
- Length = StrLen ((CHAR16 *) Src);\r
-\r
- ReturnStr = AllocateCopyPool ((Length + 1) * sizeof (CHAR16), (VOID *) Src);\r
-\r
- return ReturnStr;\r
-}\r
-\r
-STATIC\r
-CHAR16 *\r
-GetParamByNodeName (\r
- IN CHAR16 *Str,\r
- IN CHAR16 *NodeName\r
- )\r
-/*++\r
-\r
- Routine Description:\r
- Get parameter in a pair of parentheses follow the given node name.\r
- For example, given the "Pci(0,1)" and NodeName "Pci", it returns "0,1".\r
-\r
- Arguments:\r
- Str - Device Path Text\r
- NodeName - Name of the node\r
-\r
- Returns:\r
- Parameter text for the node\r
-\r
---*/\r
-{\r
- CHAR16 *ParamStr;\r
- CHAR16 *StrPointer;\r
- UINTN NodeNameLength;\r
- UINTN ParameterLength;\r
-\r
- //\r
- // Check whether the node name matchs\r
- //\r
- NodeNameLength = StrLen (NodeName);\r
- if (CompareMem (Str, NodeName, NodeNameLength * sizeof (CHAR16)) != 0) {\r
- return NULL;\r
- }\r
-\r
- ParamStr = Str + NodeNameLength;\r
- if (!IS_LEFT_PARENTH (*ParamStr)) {\r
- return NULL;\r
- }\r
-\r
- //\r
- // Skip the found '(' and find first occurrence of ')'\r
- //\r
- ParamStr++;\r
- ParameterLength = 0;\r
- StrPointer = ParamStr;\r
- while (!IS_NULL (*StrPointer)) {\r
- if (IS_RIGHT_PARENTH (*StrPointer)) {\r
- break;\r
- }\r
- StrPointer++;\r
- ParameterLength++;\r
- }\r
- if (IS_NULL (*StrPointer)) {\r
- //\r
- // ')' not found\r
- //\r
- return NULL;\r
- }\r
-\r
- ParamStr = AllocateCopyPool ((ParameterLength + 1) * sizeof (CHAR16), ParamStr);\r
- if (ParamStr == NULL) {\r
- return NULL;\r
- }\r
- //\r
- // Terminate the parameter string\r
- //\r
- ParamStr[ParameterLength] = L'\0';\r
-\r
- return ParamStr;\r
-}\r
-\r
-STATIC\r
-CHAR16 *\r
-SplitStr (\r
- IN OUT CHAR16 **List,\r
- IN CHAR16 Separator\r
- )\r
-/*++\r
-\r
- Routine Description:\r
- 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
-\r
- Arguments:\r
- List - A string list separated by the specified separator\r
- Separator - The separator character\r
-\r
- Returns:\r
- pointer - The current sub-string\r
-\r
---*/\r
-{\r
- CHAR16 *Str;\r
- CHAR16 *ReturnStr;\r
-\r
- Str = *List;\r
- ReturnStr = Str;\r
-\r
- if (IS_NULL (*Str)) {\r
- return ReturnStr;\r
- }\r
-\r
- //\r
- // Find first occurrence of the separator\r
- //\r
- while (!IS_NULL (*Str)) {\r
- if (*Str == Separator) {\r
- break;\r
- }\r
- Str++;\r
- }\r
-\r
- if (*Str == Separator) {\r
- //\r
- // Find a sub-string, terminate it\r
- //\r
- *Str = L'\0';\r
- Str++;\r
- }\r
-\r
- //\r
- // Move to next sub-string\r
- //\r
- *List = Str;\r
-\r
- return ReturnStr;\r
-}\r
-\r
-STATIC\r
-CHAR16 *\r
-GetNextParamStr (\r
- IN OUT CHAR16 **List\r
- )\r
-{\r
- //\r
- // The separator is comma\r
- //\r
- return SplitStr (List, L',');\r
-}\r
-\r
-STATIC\r
-CHAR16 *\r
-GetNextDeviceNodeStr (\r
- IN OUT CHAR16 **DevicePath,\r
- OUT BOOLEAN *IsInstanceEnd\r
- )\r
-/*++\r
-\r
- Routine Description:\r
- Get one device node from entire device path text.\r
-\r
- Arguments:\r
- Str - The entire device path text string\r
- IsInstanceEnd - This node is the end of a device path instance\r
-\r
- Returns:\r
- a pointer - A device node text\r
- NULL - No more device node available\r
-\r
---*/\r
-{\r
- CHAR16 *Str;\r
- CHAR16 *ReturnStr;\r
- UINTN ParenthesesStack;\r
-\r
- Str = *DevicePath;\r
- if (IS_NULL (*Str)) {\r
- return NULL;\r
- }\r
-\r
- //\r
- // Skip the leading '/', '(', ')' and ','\r
- //\r
- while (!IS_NULL (*Str)) {\r
- if (!IS_SLASH (*Str) &&\r
- !IS_COMMA (*Str) &&\r
- !IS_LEFT_PARENTH (*Str) &&\r
- !IS_RIGHT_PARENTH (*Str)) {\r
- break;\r
- }\r
- Str++;\r
- }\r
-\r
- ReturnStr = Str;\r
-\r
- //\r
- // Scan for the separator of this device node, '/' or ','\r
- //\r
- ParenthesesStack = 0;\r
- while (!IS_NULL (*Str)) {\r
- if ((IS_COMMA (*Str) || IS_SLASH (*Str)) && (ParenthesesStack == 0)) {\r
- break;\r
- }\r
-\r
- if (IS_LEFT_PARENTH (*Str)) {\r
- ParenthesesStack++;\r
- } else if (IS_RIGHT_PARENTH (*Str)) {\r
- ParenthesesStack--;\r
- }\r
-\r
- Str++;\r
- }\r
-\r
- if (ParenthesesStack != 0) {\r
- //\r
- // The '(' doesn't pair with ')', invalid device path text\r
- //\r
- return NULL;\r
- }\r
-\r
- if (IS_COMMA (*Str)) {\r
- *IsInstanceEnd = TRUE;\r
- *Str = L'\0';\r
- Str++;\r
- } else {\r
- *IsInstanceEnd = FALSE;\r
- if (!IS_NULL (*Str)) {\r
- *Str = L'\0';\r
- Str++;\r
- }\r
- }\r
-\r
- *DevicePath = Str;\r
-\r
- return ReturnStr;\r
-}\r
-\r
-STATIC\r
-BOOLEAN\r
-IsHexDigit (\r
- OUT UINT8 *Digit,\r
- IN CHAR16 Char\r
- )\r
-/*++\r
-\r
- Routine Description:\r
- Determines if a Unicode character is a hexadecimal digit.\r
- The test is case insensitive.\r
-\r
- Arguments:\r
- Digit - Pointer to byte that receives the value of the hex character.\r
- Char - Unicode character to test.\r
-\r
- Returns:\r
- TRUE - If the character is a hexadecimal digit.\r
- FALSE - Otherwise.\r
-\r
---*/\r
-{\r
- if ((Char >= L'0') && (Char <= L'9')) {\r
- *Digit = (UINT8) (Char - L'0');\r
- return TRUE;\r
- }\r
-\r
- if ((Char >= L'A') && (Char <= L'F')) {\r
- *Digit = (UINT8) (Char - L'A' + 0x0A);\r
- return TRUE;\r
- }\r
-\r
- if ((Char >= L'a') && (Char <= L'f')) {\r
- *Digit = (UINT8) (Char - L'a' + 0x0A);\r
- return TRUE;\r
- }\r
-\r
- return FALSE;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-HexStringToBuf (\r
- IN OUT UINT8 *Buf, \r
- IN OUT UINTN *Len,\r
- IN CHAR16 *Str,\r
- OUT UINTN *ConvertedStrLen OPTIONAL\r
- )\r
-/*++\r
-\r
- Routine Description:\r
- Converts Unicode string to binary buffer.\r
- The conversion may be partial.\r
- The first character in the string that is not hex digit stops the conversion.\r
- At a minimum, any blob of data could be represented as a hex string.\r
-\r
- Arguments:\r
- Buf - Pointer to buffer that receives the data.\r
- Len - Length in bytes of the buffer to hold converted data.\r
- If routine return with EFI_SUCCESS, containing length of converted data.\r
- If routine return with EFI_BUFFER_TOO_SMALL, containg length of buffer desired.\r
- Str - String to be converted from.\r
- ConvertedStrLen - Length of the Hex String consumed.\r
-\r
- Returns:\r
- EFI_SUCCESS: Routine Success.\r
- EFI_BUFFER_TOO_SMALL: The buffer is too small to hold converted data.\r
- EFI_\r
-\r
---*/\r
-{\r
- UINTN HexCnt;\r
- UINTN Idx;\r
- UINTN BufferLength;\r
- UINT8 Digit;\r
- UINT8 Byte;\r
-\r
- //\r
- // Find out how many hex characters the string has.\r
- //\r
- for (Idx = 0, HexCnt = 0; IsHexDigit (&Digit, Str[Idx]); Idx++, HexCnt++);\r
-\r
- if (HexCnt == 0) {\r
- *Len = 0;\r
- return EFI_SUCCESS;\r
- }\r
- //\r
- // Two Unicode characters make up 1 buffer byte. Round up.\r
- //\r
- BufferLength = (HexCnt + 1) / 2; \r
-\r
- //\r
- // Test if buffer is passed enough.\r
- //\r
- if (BufferLength > (*Len)) {\r
- *Len = BufferLength;\r
- return EFI_BUFFER_TOO_SMALL;\r
- }\r
-\r
- *Len = BufferLength;\r
-\r
- for (Idx = 0; Idx < HexCnt; Idx++) {\r
-\r
- IsHexDigit (&Digit, Str[HexCnt - 1 - Idx]);\r
-\r
- //\r
- // For odd charaters, write the lower nibble for each buffer byte,\r
- // and for even characters, the upper nibble.\r
- //\r
- if ((Idx & 1) == 0) {\r
- Byte = Digit;\r
- } else {\r
- Byte = Buf[Idx / 2];\r
- Byte &= 0x0F;\r
- Byte = (UINT8) (Byte | Digit << 4);\r
- }\r
-\r
- Buf[Idx / 2] = Byte;\r
- }\r
-\r
- if (ConvertedStrLen != NULL) {\r
- *ConvertedStrLen = HexCnt;\r
- }\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-CHAR16 *\r
-TrimHexStr (\r
- IN CHAR16 *Str\r
- )\r
-/*++\r
-\r
- Routine Description:\r
- Skip the leading white space and '0x' or '0X' of a hex string\r
-\r
- Arguments:\r
- Str - The hex string\r
-\r
- Returns:\r
-\r
---*/\r
-{\r
- //\r
- // skip preceeding white space\r
- //\r
- while (*Str && *Str == ' ') {\r
- Str += 1;\r
- }\r
- //\r
- // skip preceeding zeros\r
- //\r
- while (*Str && *Str == '0') {\r
- Str += 1;\r
- }\r
- //\r
- // skip preceeding character 'x' or 'X'\r
- //\r
- if (*Str && (*Str == 'x' || *Str == 'X')) {\r
- Str += 1;\r
- }\r
-\r
- return Str;\r
-}\r
-\r
-STATIC\r
-UINTN\r
-Xtoi (\r
- IN CHAR16 *Str\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Convert hex string to uint\r
-\r
-Arguments:\r
-\r
- Str - The string\r
- \r
-Returns:\r
-\r
---*/\r
-{\r
- UINTN Rvalue;\r
- UINTN Length;\r
-\r
- ASSERT (Str != NULL);\r
-\r
- //\r
- // convert hex digits\r
- //\r
- Rvalue = 0;\r
- Length = sizeof (UINTN);\r
- HexStringToBuf ((UINT8 *) &Rvalue, &Length, TrimHexStr (Str), NULL);\r
-\r
- return Rvalue;\r
-}\r
-\r
-STATIC\r
-VOID\r
-Xtoi64 (\r
- IN CHAR16 *Str,\r
- IN UINT64 *Data\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Convert hex string to 64 bit data.\r
-\r
-Arguments:\r
-\r
- Str - The string\r
- \r
-Returns:\r
-\r
---*/\r
-{\r
- UINTN Length;\r
-\r
- *Data = 0;\r
- Length = sizeof (UINT64);\r
- HexStringToBuf ((UINT8 *) Data, &Length, TrimHexStr (Str), NULL);\r
-}\r
-\r
-STATIC\r
-UINTN\r
-Atoi (\r
- IN CHAR16 *str\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
- UINTN Rvalue;\r
- CHAR16 Char;\r
- UINTN High;\r
- UINTN Low;\r
-\r
- ASSERT (str != NULL);\r
-\r
- High = (UINTN) -1 / 10;\r
- Low = (UINTN) -1 % 10;\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
- if ((Rvalue > High || Rvalue == High) && (Char - '0' > (INTN) Low)) {\r
- return (UINTN) -1;\r
- }\r
-\r
- Rvalue = (Rvalue * 10) + Char - '0';\r
- } else {\r
- break;\r
- }\r
-\r
- Char = *(str++);\r
- }\r
-\r
- return Rvalue;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS \r
-StrToBuf (\r
- OUT UINT8 *Buf,\r
- IN UINTN BufferLength,\r
- IN CHAR16 *Str\r
- )\r
-{\r
- UINTN Index;\r
- UINTN StrLength;\r
- UINT8 Digit;\r
- UINT8 Byte;\r
-\r
- //\r
- // Two hex char make up one byte\r
- //\r
- StrLength = BufferLength * sizeof (CHAR16);\r
-\r
- for(Index = 0; Index < StrLength; Index++, Str++) {\r
-\r
- IsHexDigit (&Digit, *Str);\r
-\r
- //\r
- // For odd charaters, write the upper nibble for each buffer byte,\r
- // and for even characters, the lower nibble.\r
- //\r
- if ((Index & 1) == 0) {\r
- Byte = (UINT8) (Digit << 4);\r
- } else {\r
- Byte = Buf[Index / 2];\r
- Byte &= 0xF0;\r
- Byte = (UINT8) (Byte | Digit);\r
- }\r
-\r
- Buf[Index / 2] = Byte;\r
- }\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-StrToGuid (\r
- IN CHAR16 *Str,\r
- OUT EFI_GUID *Guid\r
- )\r
-{\r
- UINTN BufferLength;\r
- UINTN ConvertedStrLen;\r
- EFI_STATUS Status;\r
-\r
- BufferLength = sizeof (Guid->Data1);\r
- Status = HexStringToBuf ((UINT8 *) &Guid->Data1, &BufferLength, Str, &ConvertedStrLen);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
- Str += ConvertedStrLen;\r
- if (IS_HYPHEN (*Str)) {\r
- Str++; \r
- } else {\r
- return EFI_UNSUPPORTED;\r
- }\r
-\r
- BufferLength = sizeof (Guid->Data2);\r
- Status = HexStringToBuf ((UINT8 *) &Guid->Data2, &BufferLength, Str, &ConvertedStrLen);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
- Str += ConvertedStrLen;\r
- if (IS_HYPHEN (*Str)) {\r
- Str++;\r
- } else {\r
- return EFI_UNSUPPORTED;\r
- }\r
-\r
- BufferLength = sizeof (Guid->Data3);\r
- Status = HexStringToBuf ((UINT8 *) &Guid->Data3, &BufferLength, Str, &ConvertedStrLen);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
- Str += ConvertedStrLen;\r
- if (IS_HYPHEN (*Str)) {\r
- Str++;\r
- } else {\r
- return EFI_UNSUPPORTED;\r
- }\r
-\r
- StrToBuf (&Guid->Data4[0], 2, Str);\r
- //\r
- // Skip 2 byte hex chars\r
- //\r
- Str += 2 * 2;\r
-\r
- if (IS_HYPHEN (*Str)) {\r
- Str++;\r
- } else {\r
- return EFI_UNSUPPORTED;\r
- }\r
- StrToBuf (&Guid->Data4[2], 6, Str);\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-VOID\r
-StrToIPv4Addr (\r
- IN OUT CHAR16 **Str,\r
- OUT EFI_IPv4_ADDRESS *IPv4Addr\r
- )\r
-{\r
- UINTN Index;\r
-\r
- for (Index = 0; Index < 4; Index++) {\r
- IPv4Addr->Addr[Index] = (UINT8) Atoi (SplitStr (Str, L'.'));\r
- }\r
-}\r
-\r
-STATIC\r
-VOID\r
-StrToIPv6Addr (\r
- IN OUT CHAR16 **Str,\r
- OUT EFI_IPv6_ADDRESS *IPv6Addr\r
- )\r
-{\r
- UINTN Index;\r
- UINT16 Data;\r
-\r
- for (Index = 0; Index < 8; Index++) {\r
- Data = (UINT16) Xtoi (SplitStr (Str, L':'));\r
- IPv6Addr->Addr[Index * 2] = (UINT8) (Data >> 8);\r
- IPv6Addr->Addr[Index * 2 + 1] = (UINT8) (Data & 0xff);\r
- }\r
-}\r
-\r
-STATIC\r
-VOID\r
-StrToAscii (\r
- IN CHAR16 *Str,\r
- IN OUT CHAR8 **AsciiStr\r
- )\r
-{\r
- CHAR8 *Dest;\r
-\r
- Dest = *AsciiStr;\r
- while (!IS_NULL (*Str)) {\r
- *(Dest++) = (CHAR8) *(Str++);\r
- }\r
- *Dest = 0;\r
-\r
- //\r
- // Return the string next to it\r
- //\r
- *AsciiStr = Dest + 1;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextPci (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *FunctionStr;\r
- CHAR16 *DeviceStr;\r
- PCI_DEVICE_PATH *Pci;\r
-\r
- FunctionStr = GetNextParamStr (&TextDeviceNode);\r
- DeviceStr = 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
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Pci;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextPcCard (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *FunctionNumberStr;\r
- PCCARD_DEVICE_PATH *Pccard;\r
-\r
- FunctionNumberStr = GetNextParamStr (&TextDeviceNode);\r
- Pccard = (PCCARD_DEVICE_PATH *) CreateDeviceNode (\r
- HARDWARE_DEVICE_PATH,\r
- HW_PCCARD_DP,\r
- sizeof (PCCARD_DEVICE_PATH)\r
- );\r
-\r
- Pccard->FunctionNumber = (UINT8) Xtoi (FunctionNumberStr);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Pccard;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextMemoryMapped (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *StartingAddressStr;\r
- CHAR16 *EndingAddressStr;\r
- MEMMAP_DEVICE_PATH *MemMap;\r
-\r
- StartingAddressStr = GetNextParamStr (&TextDeviceNode);\r
- EndingAddressStr = GetNextParamStr (&TextDeviceNode);\r
- MemMap = (MEMMAP_DEVICE_PATH *) CreateDeviceNode (\r
- HARDWARE_DEVICE_PATH,\r
- HW_MEMMAP_DP,\r
- sizeof (MEMMAP_DEVICE_PATH)\r
- );\r
-\r
- MemMap->MemoryType = 0;\r
-\r
- Xtoi64 (StartingAddressStr, &MemMap->StartingAddress);\r
- Xtoi64 (EndingAddressStr, &MemMap->EndingAddress);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) MemMap;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-ConvertFromTextVendor (\r
- IN CHAR16 *TextDeviceNode,\r
- IN UINT8 Type,\r
- IN UINT8 SubType\r
- )\r
-{\r
- CHAR16 *GuidStr;\r
- CHAR16 *DataStr;\r
- UINTN Length;\r
- VENDOR_DEVICE_PATH *Vendor;\r
-\r
- GuidStr = GetNextParamStr (&TextDeviceNode);\r
-\r
- DataStr = GetNextParamStr (&TextDeviceNode);\r
- Length = StrLen (DataStr);\r
- //\r
- // Two hex characters make up 1 buffer byte\r
- //\r
- Length = (Length + 1) / 2;\r
-\r
- Vendor = (VENDOR_DEVICE_PATH *) CreateDeviceNode (\r
- Type,\r
- SubType,\r
- sizeof (VENDOR_DEVICE_PATH) + (UINT16) Length\r
- );\r
-\r
- StrToGuid (GuidStr, &Vendor->Guid);\r
- StrToBuf (((UINT8 *) Vendor) + sizeof (VENDOR_DEVICE_PATH), Length, DataStr);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextVenHw (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- return ConvertFromTextVendor (\r
- TextDeviceNode,\r
- HARDWARE_DEVICE_PATH,\r
- HW_VENDOR_DP\r
- );\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextCtrl (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *ControllerStr;\r
- CONTROLLER_DEVICE_PATH *Controller;\r
-\r
- ControllerStr = GetNextParamStr (&TextDeviceNode);\r
- Controller = (CONTROLLER_DEVICE_PATH *) CreateDeviceNode (\r
- HARDWARE_DEVICE_PATH,\r
- HW_CONTROLLER_DP,\r
- sizeof (CONTROLLER_DEVICE_PATH)\r
- );\r
- Controller->ControllerNumber = (UINT32) Xtoi (ControllerStr);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Controller;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextAcpi (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *HIDStr;\r
- CHAR16 *UIDStr;\r
- ACPI_HID_DEVICE_PATH *Acpi;\r
-\r
- HIDStr = GetNextParamStr (&TextDeviceNode);\r
- UIDStr = GetNextParamStr (&TextDeviceNode);\r
- Acpi = (ACPI_HID_DEVICE_PATH *) CreateDeviceNode (\r
- ACPI_DEVICE_PATH,\r
- ACPI_DP,\r
- 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
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Acpi;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-ConvertFromTextAcpi (\r
- IN CHAR16 *TextDeviceNode,\r
- IN UINT32 Hid\r
- )\r
-{\r
- CHAR16 *UIDStr;\r
- ACPI_HID_DEVICE_PATH *Acpi;\r
-\r
- UIDStr = GetNextParamStr (&TextDeviceNode);\r
- Acpi = (ACPI_HID_DEVICE_PATH *) CreateDeviceNode (\r
- ACPI_DEVICE_PATH,\r
- ACPI_DP,\r
- sizeof (ACPI_HID_DEVICE_PATH)\r
- );\r
-\r
- Acpi->HID = Hid;\r
- Acpi->UID = (UINT32) Xtoi (UIDStr);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Acpi;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextPciRoot (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- return ConvertFromTextAcpi (TextDeviceNode, 0x0a0341d0);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextFloppy (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- return ConvertFromTextAcpi (TextDeviceNode, 0x060441d0);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextKeyboard (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- return ConvertFromTextAcpi (TextDeviceNode, 0x030141d0);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextSerial (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- return ConvertFromTextAcpi (TextDeviceNode, 0x050141d0);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextParallelPort (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- return ConvertFromTextAcpi (TextDeviceNode, 0x040141d0);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextAcpiEx (\r
- 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
-\r
- HIDStr = GetNextParamStr (&TextDeviceNode);\r
- CIDStr = GetNextParamStr (&TextDeviceNode);\r
- UIDStr = GetNextParamStr (&TextDeviceNode);\r
- HIDSTRStr = GetNextParamStr (&TextDeviceNode);\r
- CIDSTRStr = GetNextParamStr (&TextDeviceNode);\r
- UIDSTRStr = GetNextParamStr (&TextDeviceNode);\r
-\r
- 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
-\r
- AcpiExt->UID = (UINT32) Xtoi (UIDStr);\r
- AcpiExt->CID = (UINT32) Xtoi (CIDStr);\r
-\r
- AsciiStr = AcpiExt->HidUidCidStr;\r
- StrToAscii (HIDSTRStr, &AsciiStr);\r
- StrToAscii (UIDSTRStr, &AsciiStr);\r
- StrToAscii (CIDSTRStr, &AsciiStr);\r
- \r
- return (EFI_DEVICE_PATH_PROTOCOL *) AcpiExt;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextAcpiExp (\r
- 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
-\r
- HIDStr = GetNextParamStr (&TextDeviceNode);\r
- CIDStr = GetNextParamStr (&TextDeviceNode);\r
- UIDSTRStr = GetNextParamStr (&TextDeviceNode);\r
- Length = sizeof (ACPI_EXTENDED_HID_DEVICE_PATH) + (UINT16) 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
-\r
- AcpiExt->UID = 0;\r
- AcpiExt->CID = (UINT32) Xtoi (CIDStr);\r
-\r
- AsciiStr = AcpiExt->HidUidCidStr;\r
- //\r
- // HID string is NULL\r
- //\r
- *AsciiStr = 0;\r
- //\r
- // Convert UID string\r
- //\r
- AsciiStr++;\r
- StrToAscii (UIDSTRStr, &AsciiStr);\r
- //\r
- // CID string is NULL\r
- //\r
- *AsciiStr = 0;\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) AcpiExt;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextAta (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *PrimarySecondaryStr;\r
- CHAR16 *SlaveMasterStr;\r
- CHAR16 *LunStr;\r
- ATAPI_DEVICE_PATH *Atapi;\r
-\r
- Atapi = (ATAPI_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_ATAPI_DP,\r
- sizeof (ATAPI_DEVICE_PATH)\r
- );\r
-\r
- PrimarySecondaryStr = GetNextParamStr (&TextDeviceNode);\r
- SlaveMasterStr = GetNextParamStr (&TextDeviceNode);\r
- LunStr = GetNextParamStr (&TextDeviceNode);\r
-\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
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Atapi;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextScsi (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *PunStr;\r
- CHAR16 *LunStr;\r
- SCSI_DEVICE_PATH *Scsi;\r
-\r
- PunStr = GetNextParamStr (&TextDeviceNode);\r
- LunStr = GetNextParamStr (&TextDeviceNode);\r
- Scsi = (SCSI_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_SCSI_DP,\r
- sizeof (SCSI_DEVICE_PATH)\r
- );\r
-\r
- Scsi->Pun = (UINT16) Xtoi (PunStr);\r
- Scsi->Lun = (UINT16) Xtoi (LunStr);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Scsi;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextFibre (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *WWNStr;\r
- CHAR16 *LunStr;\r
- FIBRECHANNEL_DEVICE_PATH *Fibre;\r
-\r
- WWNStr = GetNextParamStr (&TextDeviceNode);\r
- LunStr = GetNextParamStr (&TextDeviceNode);\r
- Fibre = (FIBRECHANNEL_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_FIBRECHANNEL_DP,\r
- sizeof (FIBRECHANNEL_DEVICE_PATH)\r
- );\r
-\r
- Fibre->Reserved = 0;\r
- Xtoi64 (WWNStr, &Fibre->WWN);\r
- Xtoi64 (LunStr, &Fibre->Lun);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Fibre;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromText1394 (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *GuidStr;\r
- F1394_DEVICE_PATH *F1394;\r
-\r
- GuidStr = GetNextParamStr (&TextDeviceNode);\r
- F1394 = (F1394_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_1394_DP,\r
- sizeof (F1394_DEVICE_PATH)\r
- );\r
-\r
- F1394->Reserved = 0;\r
- Xtoi64 (GuidStr, &F1394->Guid);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) F1394;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsb (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *PortStr;\r
- CHAR16 *InterfaceStr;\r
- USB_DEVICE_PATH *Usb;\r
-\r
- PortStr = GetNextParamStr (&TextDeviceNode);\r
- InterfaceStr = GetNextParamStr (&TextDeviceNode);\r
- Usb = (USB_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_USB_DP,\r
- sizeof (USB_DEVICE_PATH)\r
- );\r
-\r
- Usb->ParentPortNumber = (UINT8) Xtoi (PortStr);\r
- Usb->InterfaceNumber = (UINT8) Xtoi (InterfaceStr);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Usb;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextI2O (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *TIDStr;\r
- I2O_DEVICE_PATH *I2O;\r
-\r
- TIDStr = GetNextParamStr (&TextDeviceNode);\r
- I2O = (I2O_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_I2O_DP,\r
- sizeof (I2O_DEVICE_PATH)\r
- );\r
-\r
- I2O->Tid = (UINT32) Xtoi (TIDStr);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) I2O;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextInfiniband (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *FlagsStr;\r
- CHAR16 *GuidStr;\r
- CHAR16 *SidStr;\r
- CHAR16 *TidStr;\r
- CHAR16 *DidStr;\r
- EFI_GUID PortGid;\r
- INFINIBAND_DEVICE_PATH *InfiniBand;\r
-\r
- FlagsStr = GetNextParamStr (&TextDeviceNode);\r
- GuidStr = GetNextParamStr (&TextDeviceNode);\r
- SidStr = GetNextParamStr (&TextDeviceNode);\r
- TidStr = GetNextParamStr (&TextDeviceNode);\r
- DidStr = GetNextParamStr (&TextDeviceNode);\r
- InfiniBand = (INFINIBAND_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_INFINIBAND_DP,\r
- sizeof (INFINIBAND_DEVICE_PATH)\r
- );\r
-\r
- InfiniBand->ResourceFlags = (UINT32) Xtoi (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
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) InfiniBand;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextVenMsg (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- return ConvertFromTextVendor (\r
- TextDeviceNode,\r
- MESSAGING_DEVICE_PATH,\r
- MSG_VENDOR_DP\r
- );\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextVenPcAnsi (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- VENDOR_DEVICE_PATH *Vendor;\r
-\r
- Vendor = (VENDOR_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_VENDOR_DP,\r
- sizeof (VENDOR_DEVICE_PATH));\r
- CopyGuid (&Vendor->Guid, &gEfiPcAnsiGuid);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextVenVt100 (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- VENDOR_DEVICE_PATH *Vendor;\r
-\r
- Vendor = (VENDOR_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_VENDOR_DP,\r
- sizeof (VENDOR_DEVICE_PATH));\r
- CopyGuid (&Vendor->Guid, &gEfiVT100Guid);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextVenVt100Plus (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- VENDOR_DEVICE_PATH *Vendor;\r
-\r
- Vendor = (VENDOR_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_VENDOR_DP,\r
- sizeof (VENDOR_DEVICE_PATH));\r
- CopyGuid (&Vendor->Guid, &gEfiVT100PlusGuid);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextVenUtf8 (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- VENDOR_DEVICE_PATH *Vendor;\r
-\r
- Vendor = (VENDOR_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_VENDOR_DP,\r
- sizeof (VENDOR_DEVICE_PATH));\r
- CopyGuid (&Vendor->Guid, &gEfiVTUTF8Guid);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUartFlowCtrl (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *ValueStr;\r
- UART_FLOW_CONTROL_DEVICE_PATH *UartFlowControl;\r
-\r
- ValueStr = GetNextParamStr (&TextDeviceNode);\r
- UartFlowControl = (UART_FLOW_CONTROL_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_VENDOR_DP,\r
- sizeof (UART_FLOW_CONTROL_DEVICE_PATH)\r
- );\r
-\r
- CopyGuid (&UartFlowControl->Guid, &mEfiDevicePathMessagingUartFlowControlGuid);\r
- if (StrCmp (ValueStr, L"XonXoff") == 0) {\r
- UartFlowControl->FlowControlMap = 2;\r
- } else if (StrCmp (ValueStr, L"Hardware") == 0) {\r
- UartFlowControl->FlowControlMap = 1;\r
- } else {\r
- UartFlowControl->FlowControlMap = 0;\r
- }\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) UartFlowControl;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextSAS (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *AddressStr;\r
- CHAR16 *LunStr;\r
- CHAR16 *RTPStr;\r
- CHAR16 *SASSATAStr;\r
- CHAR16 *LocationStr;\r
- CHAR16 *ConnectStr;\r
- CHAR16 *DriveBayStr;\r
- CHAR16 *ReservedStr;\r
- UINT16 Info;\r
- SAS_DEVICE_PATH *Sas;\r
-\r
- AddressStr = GetNextParamStr (&TextDeviceNode);\r
- LunStr = GetNextParamStr (&TextDeviceNode);\r
- RTPStr = GetNextParamStr (&TextDeviceNode);\r
- SASSATAStr = GetNextParamStr (&TextDeviceNode);\r
- LocationStr = GetNextParamStr (&TextDeviceNode);\r
- ConnectStr = GetNextParamStr (&TextDeviceNode);\r
- DriveBayStr = GetNextParamStr (&TextDeviceNode);\r
- ReservedStr = GetNextParamStr (&TextDeviceNode);\r
- Info = 0x0000;\r
- Sas = (SAS_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_VENDOR_DP,\r
- sizeof (SAS_DEVICE_PATH)\r
- );\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
- if (StrCmp (DriveBayStr, L"0") == 0) {\r
- Info |= 0x0001;\r
- } else {\r
- Info |= 0x0002;\r
- Info |= (Xtoi (DriveBayStr) << 8);\r
- }\r
-\r
- if (StrCmp (SASSATAStr, L"SATA") == 0) {\r
- Info |= 0x0010;\r
- }\r
-\r
- if (StrCmp (LocationStr, L"External") == 0) {\r
- Info |= 0x0020;\r
- }\r
-\r
- if (StrCmp (ConnectStr, L"Expanded") == 0) {\r
- Info |= 0x0040;\r
- }\r
- }\r
-\r
- Sas->DeviceTopology = Info;\r
- Sas->Reserved = (UINT32) Xtoi (ReservedStr);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Sas;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextDebugPort (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- VENDOR_DEFINED_MESSAGING_DEVICE_PATH *Vend;\r
-\r
- Vend = (VENDOR_DEFINED_MESSAGING_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_VENDOR_DP,\r
- sizeof (VENDOR_DEFINED_MESSAGING_DEVICE_PATH)\r
- );\r
-\r
- CopyGuid (&Vend->Guid, &gEfiDebugPortProtocolGuid);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Vend;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextMAC (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *AddressStr;\r
- CHAR16 *IfTypeStr;\r
- UINTN Length;\r
- MAC_ADDR_DEVICE_PATH *MAC;\r
-\r
- AddressStr = GetNextParamStr (&TextDeviceNode);\r
- IfTypeStr = GetNextParamStr (&TextDeviceNode);\r
- MAC = (MAC_ADDR_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_MAC_ADDR_DP,\r
- sizeof (MAC_ADDR_DEVICE_PATH)\r
- );\r
-\r
- MAC->IfType = (UINT8) Xtoi (IfTypeStr);\r
-\r
- Length = sizeof (EFI_MAC_ADDRESS);\r
- StrToBuf (&MAC->MacAddress.Addr[0], Length, AddressStr);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) MAC;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextIPv4 (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *RemoteIPStr;\r
- CHAR16 *ProtocolStr;\r
- CHAR16 *TypeStr;\r
- CHAR16 *LocalIPStr;\r
- IPv4_DEVICE_PATH *IPv4;\r
-\r
- RemoteIPStr = GetNextParamStr (&TextDeviceNode);\r
- ProtocolStr = GetNextParamStr (&TextDeviceNode);\r
- TypeStr = GetNextParamStr (&TextDeviceNode);\r
- LocalIPStr = GetNextParamStr (&TextDeviceNode);\r
- IPv4 = (IPv4_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_IPv4_DP,\r
- sizeof (IPv4_DEVICE_PATH)\r
- );\r
-\r
- StrToIPv4Addr (&RemoteIPStr, &IPv4->RemoteIpAddress);\r
- IPv4->Protocol = (UINT16) ((StrCmp (ProtocolStr, L"UDP") == 0) ? 0 : 1);\r
- if (StrCmp (TypeStr, L"Static") == 0) {\r
- IPv4->StaticIpAddress = TRUE;\r
- } else {\r
- IPv4->StaticIpAddress = FALSE;\r
- }\r
-\r
- StrToIPv4Addr (&LocalIPStr, &IPv4->LocalIpAddress);\r
-\r
- IPv4->LocalPort = 0;\r
- IPv4->RemotePort = 0;\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) IPv4;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextIPv6 (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *RemoteIPStr;\r
- CHAR16 *ProtocolStr;\r
- CHAR16 *TypeStr;\r
- CHAR16 *LocalIPStr;\r
- IPv6_DEVICE_PATH *IPv6;\r
-\r
- RemoteIPStr = GetNextParamStr (&TextDeviceNode);\r
- ProtocolStr = GetNextParamStr (&TextDeviceNode);\r
- TypeStr = GetNextParamStr (&TextDeviceNode);\r
- LocalIPStr = GetNextParamStr (&TextDeviceNode);\r
- IPv6 = (IPv6_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_IPv6_DP,\r
- sizeof (IPv6_DEVICE_PATH)\r
- );\r
-\r
- StrToIPv6Addr (&RemoteIPStr, &IPv6->RemoteIpAddress);\r
- IPv6->Protocol = (UINT16) ((StrCmp (ProtocolStr, L"UDP") == 0) ? 0 : 1);\r
- if (StrCmp (TypeStr, L"Static") == 0) {\r
- IPv6->StaticIpAddress = TRUE;\r
- } else {\r
- IPv6->StaticIpAddress = FALSE;\r
- }\r
-\r
- StrToIPv6Addr (&LocalIPStr, &IPv6->LocalIpAddress);\r
-\r
- IPv6->LocalPort = 0;\r
- IPv6->RemotePort = 0;\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) IPv6;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUart (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *BaudStr;\r
- CHAR16 *DataBitsStr;\r
- CHAR16 *ParityStr;\r
- CHAR16 *StopBitsStr;\r
- UART_DEVICE_PATH *Uart;\r
-\r
- BaudStr = GetNextParamStr (&TextDeviceNode);\r
- DataBitsStr = GetNextParamStr (&TextDeviceNode);\r
- ParityStr = GetNextParamStr (&TextDeviceNode);\r
- StopBitsStr = GetNextParamStr (&TextDeviceNode);\r
- Uart = (UART_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_UART_DP,\r
- 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
- switch (*ParityStr) {\r
- case L'D':\r
- Uart->Parity = 0;\r
- break;\r
-\r
- case L'N':\r
- Uart->Parity = 1;\r
- break;\r
-\r
- case L'E':\r
- Uart->Parity = 2;\r
- break;\r
-\r
- case L'O':\r
- Uart->Parity = 3;\r
- break;\r
-\r
- case L'M':\r
- Uart->Parity = 4;\r
- break;\r
-\r
- case L'S':\r
- Uart->Parity = 5;\r
-\r
- default:\r
- Uart->Parity = 0xff;\r
- }\r
-\r
- if (StrCmp (StopBitsStr, L"D") == 0) {\r
- Uart->StopBits = (UINT8) 0;\r
- } else if (StrCmp (StopBitsStr, L"1") == 0) {\r
- Uart->StopBits = (UINT8) 1;\r
- } else if (StrCmp (StopBitsStr, L"1.5") == 0) {\r
- Uart->StopBits = (UINT8) 2;\r
- } else if (StrCmp (StopBitsStr, L"2") == 0) {\r
- Uart->StopBits = (UINT8) 3;\r
- } else {\r
- Uart->StopBits = 0xff;\r
- }\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Uart;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-ConvertFromTextUsbClass (\r
- IN CHAR16 *TextDeviceNode,\r
- IN USB_CLASS_TEXT *UsbClassText\r
- )\r
-{\r
- CHAR16 *VIDStr;\r
- CHAR16 *PIDStr;\r
- CHAR16 *ClassStr;\r
- CHAR16 *SubClassStr;\r
- CHAR16 *ProtocolStr;\r
- USB_CLASS_DEVICE_PATH *UsbClass;\r
-\r
- UsbClass = (USB_CLASS_DEVICE_PATH *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_USB_CLASS_DP,\r
- sizeof (USB_CLASS_DEVICE_PATH)\r
- );\r
-\r
- VIDStr = GetNextParamStr (&TextDeviceNode);\r
- PIDStr = GetNextParamStr (&TextDeviceNode);\r
- if (UsbClassText->ClassExist) {\r
- ClassStr = GetNextParamStr (&TextDeviceNode);\r
- UsbClass->DeviceClass = (UINT8) Xtoi (ClassStr);\r
- } else {\r
- UsbClass->DeviceClass = UsbClassText->Class;\r
- }\r
- if (UsbClassText->SubClassExist) {\r
- SubClassStr = GetNextParamStr (&TextDeviceNode);\r
- UsbClass->DeviceSubClass = (UINT8) Xtoi (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
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) UsbClass;\r
-}\r
-\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbClass (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- USB_CLASS_TEXT UsbClassText;\r
-\r
- UsbClassText.ClassExist = TRUE;\r
- UsbClassText.SubClassExist = TRUE;\r
-\r
- return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbAudio (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- USB_CLASS_TEXT UsbClassText;\r
-\r
- UsbClassText.ClassExist = FALSE;\r
- UsbClassText.Class = USB_CLASS_AUDIO;\r
- UsbClassText.SubClassExist = TRUE;\r
-\r
- return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbCDCControl (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- USB_CLASS_TEXT UsbClassText;\r
-\r
- UsbClassText.ClassExist = FALSE;\r
- UsbClassText.Class = USB_CLASS_CDCCONTROL;\r
- UsbClassText.SubClassExist = TRUE;\r
-\r
- return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbHID (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- USB_CLASS_TEXT UsbClassText;\r
-\r
- UsbClassText.ClassExist = FALSE;\r
- UsbClassText.Class = USB_CLASS_HID;\r
- UsbClassText.SubClassExist = TRUE;\r
-\r
- return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbImage (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- USB_CLASS_TEXT UsbClassText;\r
-\r
- UsbClassText.ClassExist = FALSE;\r
- UsbClassText.Class = USB_CLASS_IMAGE;\r
- UsbClassText.SubClassExist = TRUE;\r
-\r
- return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbPrinter (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- USB_CLASS_TEXT UsbClassText;\r
-\r
- UsbClassText.ClassExist = FALSE;\r
- UsbClassText.Class = USB_CLASS_PRINTER;\r
- UsbClassText.SubClassExist = TRUE;\r
-\r
- return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbMassStorage (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- USB_CLASS_TEXT UsbClassText;\r
-\r
- UsbClassText.ClassExist = FALSE;\r
- UsbClassText.Class = USB_CLASS_MASS_STORAGE;\r
- UsbClassText.SubClassExist = TRUE;\r
-\r
- return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbHub (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- USB_CLASS_TEXT UsbClassText;\r
-\r
- UsbClassText.ClassExist = FALSE;\r
- UsbClassText.Class = USB_CLASS_HUB;\r
- UsbClassText.SubClassExist = TRUE;\r
-\r
- return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbCDCData (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- USB_CLASS_TEXT UsbClassText;\r
-\r
- UsbClassText.ClassExist = FALSE;\r
- UsbClassText.Class = USB_CLASS_CDCDATA;\r
- UsbClassText.SubClassExist = TRUE;\r
-\r
- return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbSmartCard (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- USB_CLASS_TEXT UsbClassText;\r
-\r
- UsbClassText.ClassExist = FALSE;\r
- UsbClassText.Class = USB_CLASS_SMART_CARD;\r
- UsbClassText.SubClassExist = TRUE;\r
-\r
- return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbVideo (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- USB_CLASS_TEXT UsbClassText;\r
-\r
- UsbClassText.ClassExist = FALSE;\r
- UsbClassText.Class = USB_CLASS_VIDEO;\r
- UsbClassText.SubClassExist = TRUE;\r
-\r
- return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbDiagnostic (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- USB_CLASS_TEXT UsbClassText;\r
-\r
- UsbClassText.ClassExist = FALSE;\r
- UsbClassText.Class = USB_CLASS_DIAGNOSTIC;\r
- UsbClassText.SubClassExist = TRUE;\r
-\r
- return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbWireless (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- USB_CLASS_TEXT UsbClassText;\r
-\r
- UsbClassText.ClassExist = FALSE;\r
- UsbClassText.Class = USB_CLASS_WIRELESS;\r
- UsbClassText.SubClassExist = TRUE;\r
-\r
- return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbDeviceFirmwareUpdate (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- USB_CLASS_TEXT UsbClassText;\r
-\r
- UsbClassText.ClassExist = FALSE;\r
- UsbClassText.Class = USB_CLASS_RESERVE;\r
- UsbClassText.SubClassExist = FALSE;\r
- UsbClassText.SubClass = USB_SUBCLASS_FW_UPDATE;\r
-\r
- return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbIrdaBridge (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- USB_CLASS_TEXT UsbClassText;\r
-\r
- UsbClassText.ClassExist = FALSE;\r
- UsbClassText.Class = USB_CLASS_RESERVE;\r
- UsbClassText.SubClassExist = FALSE;\r
- UsbClassText.SubClass = USB_SUBCLASS_IRDA_BRIDGE;\r
-\r
- return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbTestAndMeasurement (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- USB_CLASS_TEXT UsbClassText;\r
-\r
- UsbClassText.ClassExist = FALSE;\r
- UsbClassText.Class = USB_CLASS_RESERVE;\r
- UsbClassText.SubClassExist = FALSE;\r
- UsbClassText.SubClass = USB_SUBCLASS_TEST;\r
-\r
- return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUsbWwid (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *VIDStr;\r
- CHAR16 *PIDStr;\r
- CHAR16 *InterfaceNumStr;\r
- USB_WWID_DEVICE_PATH *UsbWwid;\r
-\r
- VIDStr = GetNextParamStr (&TextDeviceNode);\r
- PIDStr = GetNextParamStr (&TextDeviceNode);\r
- InterfaceNumStr = 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
- );\r
-\r
- UsbWwid->VendorId = (UINT16) Xtoi (VIDStr);\r
- UsbWwid->ProductId = (UINT16) Xtoi (PIDStr);\r
- UsbWwid->InterfaceNumber = (UINT16) Xtoi (InterfaceNumStr);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) UsbWwid;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextUnit (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *LunStr;\r
- DEVICE_LOGICAL_UNIT_DEVICE_PATH *LogicalUnit;\r
-\r
- LunStr = GetNextParamStr (&TextDeviceNode);\r
- 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
- );\r
-\r
- LogicalUnit->Lun = (UINT8) Xtoi (LunStr);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) LogicalUnit;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextiSCSI (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- UINT16 Options;\r
- CHAR16 *NameStr;\r
- CHAR16 *PortalGroupStr;\r
- CHAR16 *LunStr;\r
- CHAR16 *HeaderDigestStr;\r
- CHAR16 *DataDigestStr;\r
- CHAR16 *AuthenticationStr;\r
- CHAR16 *ProtocolStr;\r
- ISCSI_DEVICE_PATH_WITH_NAME *iSCSI;\r
-\r
- NameStr = GetNextParamStr (&TextDeviceNode);\r
- PortalGroupStr = GetNextParamStr (&TextDeviceNode);\r
- LunStr = GetNextParamStr (&TextDeviceNode);\r
- HeaderDigestStr = GetNextParamStr (&TextDeviceNode);\r
- DataDigestStr = GetNextParamStr (&TextDeviceNode);\r
- AuthenticationStr = GetNextParamStr (&TextDeviceNode);\r
- ProtocolStr = GetNextParamStr (&TextDeviceNode);\r
- iSCSI = (ISCSI_DEVICE_PATH_WITH_NAME *) CreateDeviceNode (\r
- MESSAGING_DEVICE_PATH,\r
- MSG_ISCSI_DP,\r
- sizeof (ISCSI_DEVICE_PATH_WITH_NAME) + (UINT16) (StrLen (NameStr) * 2)\r
- );\r
-\r
- StrCpy (iSCSI->iSCSITargetName, NameStr);\r
- iSCSI->TargetPortalGroupTag = (UINT16) Xtoi (PortalGroupStr);\r
- Xtoi64 (LunStr, &iSCSI->Lun);\r
-\r
- Options = 0x0000;\r
- if (StrCmp (HeaderDigestStr, L"CRC32C") == 0) {\r
- Options |= 0x0002;\r
- }\r
-\r
- if (StrCmp (DataDigestStr, L"CRC32C") == 0) {\r
- Options |= 0x0008;\r
- }\r
-\r
- if (StrCmp (AuthenticationStr, L"None") == 0) {\r
- Options |= 0x0800;\r
- }\r
-\r
- if (StrCmp (AuthenticationStr, L"CHAP_UNI") == 0) {\r
- Options |= 0x1000;\r
- }\r
-\r
- 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
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextHD (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *PartitionStr;\r
- CHAR16 *TypeStr;\r
- CHAR16 *SignatureStr;\r
- CHAR16 *StartStr;\r
- CHAR16 *SizeStr;\r
- UINT32 Signature32;\r
- EFI_GUID SignatureGuid;\r
- HARDDRIVE_DEVICE_PATH *Hd;\r
-\r
- PartitionStr = GetNextParamStr (&TextDeviceNode);\r
- TypeStr = GetNextParamStr (&TextDeviceNode);\r
- SignatureStr = GetNextParamStr (&TextDeviceNode);\r
- StartStr = GetNextParamStr (&TextDeviceNode);\r
- SizeStr = GetNextParamStr (&TextDeviceNode);\r
- Hd = (HARDDRIVE_DEVICE_PATH *) CreateDeviceNode (\r
- MEDIA_DEVICE_PATH,\r
- MEDIA_HARDDRIVE_DP,\r
- sizeof (HARDDRIVE_DEVICE_PATH)\r
- );\r
-\r
- Hd->PartitionNumber = (UINT32) Atoi (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
- Hd->SignatureType = SIGNATURE_TYPE_MBR;\r
- Hd->MBRType = 0x01;\r
-\r
- Signature32 = (UINT32) Xtoi (SignatureStr);\r
- CopyMem (Hd->Signature, &Signature32, sizeof (UINT32));\r
- } else if (StrCmp (TypeStr, L"GUID") == 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
- }\r
-\r
- Xtoi64 (StartStr, &Hd->PartitionStart);\r
- Xtoi64 (SizeStr, &Hd->PartitionSize);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Hd;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextCDROM (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *EntryStr;\r
- CHAR16 *StartStr;\r
- CHAR16 *SizeStr;\r
- CDROM_DEVICE_PATH *CDROM;\r
-\r
- EntryStr = GetNextParamStr (&TextDeviceNode);\r
- StartStr = GetNextParamStr (&TextDeviceNode);\r
- SizeStr = GetNextParamStr (&TextDeviceNode);\r
- CDROM = (CDROM_DEVICE_PATH *) CreateDeviceNode (\r
- MEDIA_DEVICE_PATH,\r
- MEDIA_CDROM_DP,\r
- sizeof (CDROM_DEVICE_PATH)\r
- );\r
-\r
- CDROM->BootEntry = (UINT32) Xtoi (EntryStr);\r
- Xtoi64 (StartStr, &CDROM->PartitionStart);\r
- Xtoi64 (SizeStr, &CDROM->PartitionSize);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) CDROM;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextVenMEDIA (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- return ConvertFromTextVendor (\r
- TextDeviceNode,\r
- MEDIA_DEVICE_PATH,\r
- MEDIA_VENDOR_DP\r
- );\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextFilePath (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- FILEPATH_DEVICE_PATH *File;\r
-\r
- File = (FILEPATH_DEVICE_PATH *) CreateDeviceNode (\r
- MEDIA_DEVICE_PATH,\r
- MEDIA_FILEPATH_DP,\r
- sizeof (FILEPATH_DEVICE_PATH) + (UINT16) (StrLen (TextDeviceNode) * 2)\r
- );\r
-\r
- StrCpy (File->PathName, TextDeviceNode);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) File;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextMedia (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *GuidStr;\r
- MEDIA_PROTOCOL_DEVICE_PATH *Media;\r
-\r
- GuidStr = GetNextParamStr (&TextDeviceNode);\r
- Media = (MEDIA_PROTOCOL_DEVICE_PATH *) CreateDeviceNode (\r
- MEDIA_DEVICE_PATH,\r
- MEDIA_PROTOCOL_DP,\r
- sizeof (MEDIA_PROTOCOL_DEVICE_PATH)\r
- );\r
-\r
- StrToGuid (GuidStr, &Media->Protocol);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Media;\r
-}\r
-\r
-STATIC\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevPathFromTextBBS (\r
- IN CHAR16 *TextDeviceNode\r
- )\r
-{\r
- CHAR16 *TypeStr;\r
- CHAR16 *IdStr;\r
- CHAR16 *FlagsStr;\r
- UINT8 *AsciiStr;\r
- BBS_BBS_DEVICE_PATH *Bbs;\r
-\r
- TypeStr = GetNextParamStr (&TextDeviceNode);\r
- IdStr = GetNextParamStr (&TextDeviceNode);\r
- FlagsStr = GetNextParamStr (&TextDeviceNode);\r
- Bbs = (BBS_BBS_DEVICE_PATH *) CreateDeviceNode (\r
- BBS_DEVICE_PATH,\r
- BBS_BBS_DP,\r
- sizeof (BBS_BBS_DEVICE_PATH) + (UINT16) (StrLen (IdStr))\r
- );\r
-\r
- if (StrCmp (TypeStr, L"Floppy") == 0) {\r
- Bbs->DeviceType = BBS_TYPE_FLOPPY;\r
- } else if (StrCmp (TypeStr, L"HD") == 0) {\r
- Bbs->DeviceType = BBS_TYPE_HARDDRIVE;\r
- } else if (StrCmp (TypeStr, L"CDROM") == 0) {\r
- Bbs->DeviceType = BBS_TYPE_CDROM;\r
- } else if (StrCmp (TypeStr, L"PCMCIA") == 0) {\r
- Bbs->DeviceType = BBS_TYPE_PCMCIA;\r
- } else if (StrCmp (TypeStr, L"USB") == 0) {\r
- Bbs->DeviceType = BBS_TYPE_USB;\r
- } else if (StrCmp (TypeStr, L"Network") == 0) {\r
- Bbs->DeviceType = BBS_TYPE_EMBEDDED_NETWORK;\r
- } else {\r
- Bbs->DeviceType = BBS_TYPE_UNKNOWN;\r
- }\r
-\r
- AsciiStr = (UINT8 *) Bbs->String;\r
- StrToAscii (IdStr, (CHAR8 **) &AsciiStr);\r
-\r
- Bbs->StatusFlag = (UINT16) Xtoi (FlagsStr);\r
-\r
- return (EFI_DEVICE_PATH_PROTOCOL *) Bbs;\r
-}\r
-\r
-GLOBAL_REMOVE_IF_UNREFERENCED DEVICE_PATH_FROM_TEXT_TABLE DevPathFromTextTable[] = {\r
- {L"Pci", DevPathFromTextPci},\r
- {L"PcCard", DevPathFromTextPcCard},\r
- {L"MemoryMapped", DevPathFromTextMemoryMapped},\r
- {L"VenHw", DevPathFromTextVenHw},\r
- {L"Ctrl", DevPathFromTextCtrl},\r
- {L"Acpi", DevPathFromTextAcpi},\r
- {L"PciRoot", DevPathFromTextPciRoot},\r
- {L"Floppy", DevPathFromTextFloppy},\r
- {L"Keyboard", DevPathFromTextKeyboard},\r
- {L"Serial", DevPathFromTextSerial},\r
- {L"ParallelPort", DevPathFromTextParallelPort},\r
- {L"AcpiEx", DevPathFromTextAcpiEx},\r
- {L"AcpiExp", DevPathFromTextAcpiExp},\r
- {L"Ata", DevPathFromTextAta},\r
- {L"Scsi", DevPathFromTextScsi},\r
- {L"Fibre", DevPathFromTextFibre},\r
- {L"I1394", DevPathFromText1394},\r
- {L"USB", DevPathFromTextUsb},\r
- {L"I2O", DevPathFromTextI2O},\r
- {L"Infiniband", DevPathFromTextInfiniband},\r
- {L"VenMsg", DevPathFromTextVenMsg},\r
- {L"VenPcAnsi", DevPathFromTextVenPcAnsi},\r
- {L"VenVt100", DevPathFromTextVenVt100},\r
- {L"VenVt100Plus", DevPathFromTextVenVt100Plus},\r
- {L"VenUtf8", DevPathFromTextVenUtf8},\r
- {L"UartFlowCtrl", DevPathFromTextUartFlowCtrl},\r
- {L"SAS", DevPathFromTextSAS},\r
- {L"DebugPort", DevPathFromTextDebugPort},\r
- {L"MAC", DevPathFromTextMAC},\r
- {L"IPv4", DevPathFromTextIPv4},\r
- {L"IPv6", DevPathFromTextIPv6},\r
- {L"Uart", DevPathFromTextUart},\r
- {L"UsbClass", DevPathFromTextUsbClass},\r
- {L"UsbAudio", DevPathFromTextUsbAudio},\r
- {L"UsbCDCControl", DevPathFromTextUsbCDCControl},\r
- {L"UsbHID", DevPathFromTextUsbHID},\r
- {L"UsbImage", DevPathFromTextUsbImage},\r
- {L"UsbPrinter", DevPathFromTextUsbPrinter},\r
- {L"UsbMassStorage", DevPathFromTextUsbMassStorage},\r
- {L"UsbHub", DevPathFromTextUsbHub},\r
- {L"UsbCDCData", DevPathFromTextUsbCDCData},\r
- {L"UsbSmartCard", DevPathFromTextUsbSmartCard},\r
- {L"UsbVideo", DevPathFromTextUsbVideo},\r
- {L"UsbDiagnostic", DevPathFromTextUsbDiagnostic},\r
- {L"UsbWireless", DevPathFromTextUsbWireless},\r
- {L"UsbDeviceFirmwareUpdate", DevPathFromTextUsbDeviceFirmwareUpdate},\r
- {L"UsbIrdaBridge", DevPathFromTextUsbIrdaBridge},\r
- {L"UsbTestAndMeasurement", DevPathFromTextUsbTestAndMeasurement},\r
- {L"UsbWwid", DevPathFromTextUsbWwid},\r
- {L"Unit", DevPathFromTextUnit},\r
- {L"iSCSI", DevPathFromTextiSCSI},\r
- {L"HD", DevPathFromTextHD},\r
- {L"CDROM", DevPathFromTextCDROM},\r
- {L"VenMEDIA", DevPathFromTextVenMEDIA},\r
- {L"Media", DevPathFromTextMedia},\r
- {L"BBS", DevPathFromTextBBS},\r
- {NULL, NULL}\r
-};\r
-\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-ConvertTextToDeviceNode (\r
- IN CONST CHAR16 *TextDeviceNode\r
- )\r
-/*++\r
-\r
- Routine Description:\r
- Convert text to the binary representation of a device node.\r
-\r
- Arguments:\r
- TextDeviceNode - TextDeviceNode points to the text representation of a device\r
- node. Conversion starts with the first character and continues\r
- until the first non-device node character.\r
-\r
- Returns:\r
- A pointer - Pointer to the EFI device node.\r
- NULL - If TextDeviceNode is NULL or there was insufficient memory or text unsupported.\r
-\r
---*/\r
-{\r
- EFI_DEVICE_PATH_PROTOCOL * (*DumpNode) (CHAR16 *);\r
- CHAR16 *ParamStr;\r
- EFI_DEVICE_PATH_PROTOCOL *DeviceNode;\r
- CHAR16 *DeviceNodeStr;\r
- UINTN Index;\r
-\r
- if ((TextDeviceNode == NULL) || (IS_NULL (*TextDeviceNode))) {\r
- return NULL;\r
- }\r
-\r
- ParamStr = NULL;\r
- DumpNode = NULL;\r
- DeviceNodeStr = StrDuplicate (TextDeviceNode);\r
-\r
- for (Index = 0; DevPathFromTextTable[Index].Function; Index++) {\r
- ParamStr = GetParamByNodeName (DeviceNodeStr, DevPathFromTextTable[Index].DevicePathNodeText);\r
- if (ParamStr != NULL) {\r
- DumpNode = DevPathFromTextTable[Index].Function;\r
- break;\r
- }\r
- }\r
-\r
- if (DumpNode == NULL) {\r
- //\r
- // A file path\r
- //\r
- DumpNode = DevPathFromTextFilePath;\r
- DeviceNode = DumpNode (DeviceNodeStr);\r
- } else {\r
- DeviceNode = DumpNode (ParamStr);\r
- FreePool (ParamStr);\r
- }\r
-\r
- FreePool (DeviceNodeStr);\r
-\r
- return DeviceNode;\r
-}\r
-\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-ConvertTextToDevicePath (\r
- IN CONST CHAR16 *TextDevicePath\r
- )\r
-/*++\r
-\r
- Routine Description:\r
- Convert text to the binary representation of a device path.\r
-\r
- Arguments:\r
- TextDevicePath - TextDevicePath points to the text representation of a device\r
- path. Conversion starts with the first character and continues\r
- until the first non-device node character.\r
-\r
- Returns:\r
- A pointer - Pointer to the allocated device path.\r
- NULL - If TextDeviceNode is NULL or there was insufficient memory.\r
-\r
---*/\r
-{\r
- EFI_DEVICE_PATH_PROTOCOL * (*DumpNode) (CHAR16 *);\r
- CHAR16 *ParamStr;\r
- EFI_DEVICE_PATH_PROTOCOL *DeviceNode;\r
- UINTN Index;\r
- EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;\r
- CHAR16 *DevicePathStr;\r
- CHAR16 *Str;\r
- CHAR16 *DeviceNodeStr;\r
- UINT8 IsInstanceEnd;\r
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
-\r
- if ((TextDevicePath == NULL) || (IS_NULL (*TextDevicePath))) {\r
- return NULL;\r
- }\r
-\r
- DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) AllocatePool (END_DEVICE_PATH_LENGTH);\r
- SetDevicePathEndNode (DevicePath);\r
-\r
- ParamStr = NULL;\r
- DeviceNodeStr = NULL;\r
- DevicePathStr = StrDuplicate (TextDevicePath);\r
-\r
- Str = DevicePathStr;\r
- while ((DeviceNodeStr = GetNextDeviceNodeStr (&Str, &IsInstanceEnd)) != NULL) {\r
- DumpNode = NULL;\r
- for (Index = 0; DevPathFromTextTable[Index].Function; Index++) {\r
- ParamStr = GetParamByNodeName (DeviceNodeStr, DevPathFromTextTable[Index].DevicePathNodeText);\r
- if (ParamStr != NULL) {\r
- DumpNode = DevPathFromTextTable[Index].Function;\r
- break;\r
- }\r
- }\r
-\r
- if (DumpNode == NULL) {\r
- //\r
- // A file path\r
- //\r
- DumpNode = DevPathFromTextFilePath;\r
- DeviceNode = DumpNode (DeviceNodeStr);\r
- } else {\r
- DeviceNode = DumpNode (ParamStr);\r
- FreePool (ParamStr);\r
- }\r
-\r
- NewDevicePath = AppendDeviceNodeProtocolInterface (DevicePath, DeviceNode);\r
- FreePool (DevicePath);\r
- FreePool (DeviceNode);\r
- DevicePath = NewDevicePath;\r
-\r
- if (IsInstanceEnd) {\r
- DeviceNode = (EFI_DEVICE_PATH_PROTOCOL *) AllocatePool (END_DEVICE_PATH_LENGTH);\r
- SetDevicePathInstanceEndNode (DeviceNode);\r
-\r
- NewDevicePath = AppendDeviceNodeProtocolInterface (DevicePath, DeviceNode);\r
- FreePool (DevicePath);\r
- FreePool (DeviceNode);\r
- DevicePath = NewDevicePath;\r
- }\r
- }\r
-\r
- FreePool (DevicePathStr);\r
- return DevicePath;\r
-}\r