return (EFI_DEVICE_PATH_PROTOCOL *) Sas;\r
}\r
\r
+/**\r
+ Converts a text device path node to Serial Attached SCSI Ex device path structure.\r
+\r
+ @param TextDeviceNode The input Text device path node.\r
+\r
+ @return A pointer to the newly-created Serial Attached SCSI Ex device path structure.\r
+\r
+**/\r
+EFI_DEVICE_PATH_PROTOCOL *\r
+DevPathFromTextSasEx (\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
+ UINT16 Info;\r
+ SASEX_DEVICE_PATH *SasEx;\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
+ Info = 0x0000;\r
+ SasEx = (SASEX_DEVICE_PATH *) CreateDeviceNode (\r
+ MESSAGING_DEVICE_PATH,\r
+ MSG_SASEX_DP,\r
+ (UINT16) sizeof (SASEX_DEVICE_PATH)\r
+ );\r
+\r
+ Strtoi64 (AddressStr, (UINT64 *) &SasEx->SasAddress);\r
+ Strtoi64 (LunStr, (UINT64 *) &SasEx->Lun);\r
+ *(UINT64 *) &SasEx->SasAddress = SwapBytes64 (*(UINT64 *) &SasEx->SasAddress);\r
+ *(UINT64 *) &SasEx->Lun = SwapBytes64 (*(UINT64 *) &SasEx->Lun);\r
+ SasEx->RelativeTargetPort = (UINT16) Strtoi (RTPStr);\r
+ if (StrCmp (SASSATAStr, L"NoTopology") != 0) {\r
+ if (StrCmp (DriveBayStr, L"0") == 0) {\r
+ Info |= 0x0001;\r
+ } else {\r
+ Info |= 0x0002;\r
+ Info = (UINT16) (Info | (Strtoi (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
+ SasEx->DeviceTopology = Info;\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) SasEx;\r
+}\r
+\r
/**\r
Converts a text device path node to Debug Port device path structure.\r
\r
CHAR16 *ProtocolStr;\r
CHAR16 *TypeStr;\r
CHAR16 *LocalIPStr;\r
+ CHAR16 *GatewayIPStr;\r
+ CHAR16 *PrefixLengthStr;\r
IPv6_DEVICE_PATH *IPv6;\r
\r
RemoteIPStr = GetNextParamStr (&TextDeviceNode);\r
ProtocolStr = GetNextParamStr (&TextDeviceNode);\r
TypeStr = GetNextParamStr (&TextDeviceNode);\r
LocalIPStr = GetNextParamStr (&TextDeviceNode);\r
+ PrefixLengthStr = GetNextParamStr (&TextDeviceNode);\r
+ GatewayIPStr = GetNextParamStr (&TextDeviceNode);\r
IPv6 = (IPv6_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_IPv6_DP,\r
StrToIPv6Addr (&RemoteIPStr, &IPv6->RemoteIpAddress);\r
IPv6->Protocol = (UINT16) NetworkProtocolFromText (ProtocolStr);\r
if (StrCmp (TypeStr, L"Static") == 0) {\r
- IPv6->StaticIpAddress = TRUE;\r
+ IPv6->IpAddressOrigin = 0;\r
+ } else if (StrCmp (TypeStr, L"StatelessAutoConfigure") == 0) {\r
+ IPv6->IpAddressOrigin = 1;\r
} else {\r
- IPv6->StaticIpAddress = FALSE;\r
+ IPv6->IpAddressOrigin = 2;\r
}\r
\r
StrToIPv6Addr (&LocalIPStr, &IPv6->LocalIpAddress);\r
+ if (!IS_NULL (*GatewayIPStr) && !IS_NULL (*PrefixLengthStr)) {\r
+ StrToIPv6Addr (&GatewayIPStr, &IPv6->GatewayIpAddress);\r
+ IPv6->PrefixLength = (UINT8) Strtoi (PrefixLengthStr);\r
+ } else {\r
+ ZeroMem (&IPv6->GatewayIpAddress, sizeof (IPv6->GatewayIpAddress));\r
+ IPv6->PrefixLength = 0;\r
+ }\r
\r
IPv6->LocalPort = 0;\r
IPv6->RemotePort = 0;\r
{L"VenUtf8", DevPathFromTextVenUtf8},\r
{L"UartFlowCtrl", DevPathFromTextUartFlowCtrl},\r
{L"SAS", DevPathFromTextSAS},\r
+ {L"SasEx", DevPathFromTextSasEx},\r
{L"DebugPort", DevPathFromTextDebugPort},\r
{L"MAC", DevPathFromTextMAC},\r
{L"IPv4", DevPathFromTextIPv4},\r