return (EFI_DEVICE_PATH_PROTOCOL *) Controller;\r
}\r
\r
+/**\r
+ Converts a text device path node to BMC device path structure.\r
+\r
+ @param TextDeviceNode The input Text device path node.\r
+\r
+ @return A pointer to the newly-created BMC device path structure.\r
+\r
+**/\r
+EFI_DEVICE_PATH_PROTOCOL *\r
+DevPathFromTextBmc (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *InterfaceTypeStr;\r
+ CHAR16 *BaseAddressStr;\r
+ BMC_DEVICE_PATH *BmcDp;\r
+\r
+ InterfaceTypeStr = GetNextParamStr (&TextDeviceNode);\r
+ BaseAddressStr = GetNextParamStr (&TextDeviceNode);\r
+ BmcDp = (BMC_DEVICE_PATH *) CreateDeviceNode (\r
+ HARDWARE_DEVICE_PATH,\r
+ HW_BMC_DP,\r
+ (UINT16) sizeof (BMC_DEVICE_PATH)\r
+ );\r
+\r
+ BmcDp->InterfaceType = (UINT8) Strtoi (InterfaceTypeStr);\r
+ WriteUnaligned64 (\r
+ (UINT64 *) (&BmcDp->BaseAddress),\r
+ StrHexToUint64 (BaseAddressStr)\r
+ );\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) BmcDp;\r
+}\r
+\r
/**\r
Converts a generic ACPI text device path node to ACPI device path structure.\r
\r
return (EFI_DEVICE_PATH_PROTOCOL *) Ufs;\r
}\r
\r
+/**\r
+ Converts a text device path node to SD (Secure Digital) device path structure.\r
+\r
+ @param TextDeviceNode The input Text device path node.\r
+\r
+ @return A pointer to the newly-created SD device path structure.\r
+\r
+**/\r
+EFI_DEVICE_PATH_PROTOCOL *\r
+DevPathFromTextSd (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *SlotNumberStr;\r
+ SD_DEVICE_PATH *Sd;\r
+\r
+ SlotNumberStr = GetNextParamStr (&TextDeviceNode);\r
+ Sd = (SD_DEVICE_PATH *) CreateDeviceNode (\r
+ MESSAGING_DEVICE_PATH,\r
+ MSG_SD_DP,\r
+ (UINT16) sizeof (SD_DEVICE_PATH)\r
+ );\r
+\r
+ Sd->SlotNumber = (UINT8) Strtoi (SlotNumberStr);\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) Sd;\r
+}\r
+\r
/**\r
Converts a text device path node to Debug Port device path structure.\r
\r
UsbWwid->VendorId = (UINT16) Strtoi (VIDStr);\r
UsbWwid->ProductId = (UINT16) Strtoi (PIDStr);\r
UsbWwid->InterfaceNumber = (UINT16) Strtoi (InterfaceNumStr);\r
- StrnCpy ((CHAR16 *) ((UINT8 *) UsbWwid + sizeof (USB_WWID_DEVICE_PATH)), SerialNumberStr, SerialNumberStrLen);\r
+\r
+ //\r
+ // There is no memory allocated in UsbWwid for the '\0' in SerialNumberStr.\r
+ // Therefore, the '\0' will not be copied.\r
+ //\r
+ CopyMem (\r
+ (UINT8 *) UsbWwid + sizeof (USB_WWID_DEVICE_PATH),\r
+ SerialNumberStr,\r
+ SerialNumberStrLen * sizeof (CHAR16)\r
+ );\r
\r
return (EFI_DEVICE_PATH_PROTOCOL *) UsbWwid;\r
}\r
);\r
\r
Index = sizeof (BLUETOOTH_ADDRESS) - 1;\r
- while (!IS_NULL(BluetoothStr) && Index >= 0) {\r
- Walker = SplitStr (&BluetoothStr, L':');\r
- TempBufferSize = StrSize (Walker) + StrLen (L"0x") * sizeof (CHAR16);\r
+ Walker = BluetoothStr;\r
+ while (!IS_NULL(*Walker) && Index >= 0) {\r
+ TempBufferSize = 2 * sizeof(CHAR16) + StrSize(L"0x");\r
TempNumBuffer = AllocateZeroPool (TempBufferSize);\r
if (TempNumBuffer == NULL) {\r
break;\r
}\r
- StrnCpy (TempNumBuffer, L"0x", TempBufferSize / sizeof (CHAR16));\r
- StrnCat (TempNumBuffer + StrLen (L"0x"), Walker, TempBufferSize / sizeof (CHAR16) - StrLen (L"0x") );\r
+ StrCpyS (TempNumBuffer, TempBufferSize / sizeof (CHAR16), L"0x");\r
+ StrnCatS (TempNumBuffer, TempBufferSize / sizeof (CHAR16), Walker, 2);\r
BluetoothDp->BD_ADDR.Address[Index] = (UINT8)Strtoi (TempNumBuffer);\r
FreePool (TempNumBuffer);\r
+ Walker += 2;\r
Index--;\r
}\r
\r
return (EFI_DEVICE_PATH_PROTOCOL *) BluetoothDp;\r
}\r
\r
+/**\r
+ Converts a text device path node to Wi-Fi device path structure.\r
+\r
+ @param TextDeviceNode The input Text device path node.\r
+\r
+ @return A pointer to the newly-created Wi-Fi device path structure.\r
+\r
+**/\r
+EFI_DEVICE_PATH_PROTOCOL *\r
+DevPathFromTextWiFi (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *SSIdStr;\r
+ CHAR8 *AsciiStr;\r
+ WIFI_DEVICE_PATH *WiFiDp;\r
+\r
+ SSIdStr = GetNextParamStr (&TextDeviceNode);\r
+ WiFiDp = (WIFI_DEVICE_PATH *) CreateDeviceNode (\r
+ MESSAGING_DEVICE_PATH,\r
+ MSG_WIFI_DP,\r
+ (UINT16) sizeof (WIFI_DEVICE_PATH)\r
+ );\r
+\r
+ AsciiStr = (CHAR8 *) WiFiDp->SSId;\r
+ StrToAscii (SSIdStr, &AsciiStr);\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) WiFiDp;\r
+}\r
+\r
/**\r
Converts a text device path node to URI device path structure.\r
\r
(UINT16) (sizeof (FILEPATH_DEVICE_PATH) + StrLen (TextDeviceNode) * 2)\r
);\r
\r
- StrCpy (File->PathName, TextDeviceNode);\r
+ StrCpyS (File->PathName, StrLen (TextDeviceNode) + 1, TextDeviceNode);\r
\r
return (EFI_DEVICE_PATH_PROTOCOL *) File;\r
}\r
return (EFI_DEVICE_PATH_PROTOCOL *) Offset;\r
}\r
\r
+/**\r
+ Converts a text device path node to text ram disk 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
+DevPathFromTextRamDisk (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *StartingAddrStr;\r
+ CHAR16 *EndingAddrStr;\r
+ CHAR16 *TypeGuidStr;\r
+ CHAR16 *InstanceStr;\r
+ MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;\r
+ UINT64 StartingAddr;\r
+ UINT64 EndingAddr;\r
+\r
+ StartingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ EndingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ InstanceStr = GetNextParamStr (&TextDeviceNode);\r
+ TypeGuidStr = GetNextParamStr (&TextDeviceNode);\r
+ RamDisk = (MEDIA_RAM_DISK_DEVICE_PATH *) CreateDeviceNode (\r
+ MEDIA_DEVICE_PATH,\r
+ MEDIA_RAM_DISK_DP,\r
+ (UINT16) sizeof (MEDIA_RAM_DISK_DEVICE_PATH)\r
+ );\r
+\r
+ Strtoi64 (StartingAddrStr, &StartingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->StartingAddr[0]), StartingAddr);\r
+ Strtoi64 (EndingAddrStr, &EndingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->EndingAddr[0]), EndingAddr);\r
+ RamDisk->Instance = (UINT16) Strtoi (InstanceStr);\r
+ StrToGuid (TypeGuidStr, &RamDisk->TypeGuid);\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) RamDisk;\r
+}\r
+\r
+/**\r
+ Converts a text device path node to text virtual disk 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
+DevPathFromTextVirtualDisk (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *StartingAddrStr;\r
+ CHAR16 *EndingAddrStr;\r
+ CHAR16 *InstanceStr;\r
+ MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;\r
+ UINT64 StartingAddr;\r
+ UINT64 EndingAddr;\r
+\r
+ StartingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ EndingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ InstanceStr = GetNextParamStr (&TextDeviceNode);\r
+\r
+ RamDisk = (MEDIA_RAM_DISK_DEVICE_PATH *) CreateDeviceNode (\r
+ MEDIA_DEVICE_PATH,\r
+ MEDIA_RAM_DISK_DP,\r
+ (UINT16) sizeof (MEDIA_RAM_DISK_DEVICE_PATH)\r
+ );\r
+\r
+ Strtoi64 (StartingAddrStr, &StartingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->StartingAddr[0]), StartingAddr);\r
+ Strtoi64 (EndingAddrStr, &EndingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->EndingAddr[0]), EndingAddr);\r
+ RamDisk->Instance = (UINT16) Strtoi (InstanceStr);\r
+ CopyGuid (&RamDisk->TypeGuid, &gEfiVirtualDiskGuid);\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) RamDisk;\r
+}\r
+\r
+/**\r
+ Converts a text device path node to text virtual cd 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
+DevPathFromTextVirtualCd (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *StartingAddrStr;\r
+ CHAR16 *EndingAddrStr;\r
+ CHAR16 *InstanceStr;\r
+ MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;\r
+ UINT64 StartingAddr;\r
+ UINT64 EndingAddr;\r
+\r
+ StartingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ EndingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ InstanceStr = GetNextParamStr (&TextDeviceNode);\r
+\r
+ RamDisk = (MEDIA_RAM_DISK_DEVICE_PATH *) CreateDeviceNode (\r
+ MEDIA_DEVICE_PATH,\r
+ MEDIA_RAM_DISK_DP,\r
+ (UINT16) sizeof (MEDIA_RAM_DISK_DEVICE_PATH)\r
+ );\r
+\r
+ Strtoi64 (StartingAddrStr, &StartingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->StartingAddr[0]), StartingAddr);\r
+ Strtoi64 (EndingAddrStr, &EndingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->EndingAddr[0]), EndingAddr);\r
+ RamDisk->Instance = (UINT16) Strtoi (InstanceStr);\r
+ CopyGuid (&RamDisk->TypeGuid, &gEfiVirtualCdGuid);\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) RamDisk;\r
+}\r
+\r
+/**\r
+ Converts a text device path node to text persistent virtual disk 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
+DevPathFromTextPersistentVirtualDisk (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *StartingAddrStr;\r
+ CHAR16 *EndingAddrStr;\r
+ CHAR16 *InstanceStr;\r
+ MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;\r
+ UINT64 StartingAddr;\r
+ UINT64 EndingAddr;\r
+\r
+ StartingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ EndingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ InstanceStr = GetNextParamStr (&TextDeviceNode);\r
+\r
+ RamDisk = (MEDIA_RAM_DISK_DEVICE_PATH *) CreateDeviceNode (\r
+ MEDIA_DEVICE_PATH,\r
+ MEDIA_RAM_DISK_DP,\r
+ (UINT16) sizeof (MEDIA_RAM_DISK_DEVICE_PATH)\r
+ );\r
+\r
+ Strtoi64 (StartingAddrStr, &StartingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->StartingAddr[0]), StartingAddr);\r
+ Strtoi64 (EndingAddrStr, &EndingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->EndingAddr[0]), EndingAddr);\r
+ RamDisk->Instance = (UINT16) Strtoi (InstanceStr);\r
+ CopyGuid (&RamDisk->TypeGuid, &gEfiPersistentVirtualDiskGuid);\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) RamDisk;\r
+}\r
+\r
+/**\r
+ Converts a text device path node to text persistent virtual cd 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
+DevPathFromTextPersistentVirtualCd (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *StartingAddrStr;\r
+ CHAR16 *EndingAddrStr;\r
+ CHAR16 *InstanceStr;\r
+ MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;\r
+ UINT64 StartingAddr;\r
+ UINT64 EndingAddr;\r
+\r
+ StartingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ EndingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ InstanceStr = GetNextParamStr (&TextDeviceNode);\r
+\r
+ RamDisk = (MEDIA_RAM_DISK_DEVICE_PATH *) CreateDeviceNode (\r
+ MEDIA_DEVICE_PATH,\r
+ MEDIA_RAM_DISK_DP,\r
+ (UINT16) sizeof (MEDIA_RAM_DISK_DEVICE_PATH)\r
+ );\r
+\r
+ Strtoi64 (StartingAddrStr, &StartingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->StartingAddr[0]), StartingAddr);\r
+ Strtoi64 (EndingAddrStr, &EndingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->EndingAddr[0]), EndingAddr);\r
+ RamDisk->Instance = (UINT16) Strtoi (InstanceStr);\r
+ CopyGuid (&RamDisk->TypeGuid, &gEfiPersistentVirtualCdGuid);\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) RamDisk;\r
+}\r
\r
/**\r
Converts a BBS text device path node to BBS device path structure.\r
{L"MemoryMapped", DevPathFromTextMemoryMapped },\r
{L"VenHw", DevPathFromTextVenHw },\r
{L"Ctrl", DevPathFromTextCtrl },\r
+ {L"Bmc", DevPathFromTextBmc },\r
\r
{L"AcpiPath", DevPathFromTextAcpiPath },\r
{L"Acpi", DevPathFromTextAcpi },\r
{L"SasEx", DevPathFromTextSasEx },\r
{L"NVMe", DevPathFromTextNVMe },\r
{L"UFS", DevPathFromTextUfs },\r
+ {L"SD", DevPathFromTextSd },\r
{L"DebugPort", DevPathFromTextDebugPort },\r
{L"MAC", DevPathFromTextMAC },\r
{L"IPv4", DevPathFromTextIPv4 },\r
{L"Vlan", DevPathFromTextVlan },\r
{L"Uri", DevPathFromTextUri },\r
{L"Bluetooth", DevPathFromTextBluetooth },\r
+ {L"WiFi", DevPathFromTextWiFi },\r
{L"MediaPath", DevPathFromTextMediaPath },\r
{L"HD", DevPathFromTextHD },\r
{L"CDROM", DevPathFromTextCDROM },\r
{L"Fv", DevPathFromTextFv },\r
{L"FvFile", DevPathFromTextFvFile },\r
{L"Offset", DevPathFromTextRelativeOffsetRange },\r
+ {L"RamDisk", DevPathFromTextRamDisk },\r
+ {L"VirtualDisk", DevPathFromTextVirtualDisk },\r
+ {L"VirtualCD", DevPathFromTextVirtualCd },\r
+ {L"PersistentVirtualDisk", DevPathFromTextPersistentVirtualDisk },\r
+ {L"PersistentVirtualCD", DevPathFromTextPersistentVirtualCd },\r
\r
{L"BbsPath", DevPathFromTextBbsPath },\r
{L"BBS", DevPathFromTextBBS },\r