mirror of https://github.com/acidanthera/audk.git
Fix several bugs in DevicePathLib implementation regarding the device path node and text conversion.
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14827 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
09363ecafd
commit
9da3888456
|
@ -479,7 +479,7 @@ StrToIPv4Addr (
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
|
|
||||||
for (Index = 0; Index < 4; Index++) {
|
for (Index = 0; Index < 4; Index++) {
|
||||||
IPv4Addr->Addr[Index] = (UINT8) StrDecimalToUintn (SplitStr (Str, L'.'));
|
IPv4Addr->Addr[Index] = (UINT8) Strtoi (SplitStr (Str, L'.'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1073,8 +1073,21 @@ DevPathFromTextAta (
|
||||||
SlaveMasterStr = GetNextParamStr (&TextDeviceNode);
|
SlaveMasterStr = GetNextParamStr (&TextDeviceNode);
|
||||||
LunStr = GetNextParamStr (&TextDeviceNode);
|
LunStr = GetNextParamStr (&TextDeviceNode);
|
||||||
|
|
||||||
Atapi->PrimarySecondary = (UINT8) ((StrCmp (PrimarySecondaryStr, L"Primary") == 0) ? 0 : 1);
|
if (StrCmp (PrimarySecondaryStr, L"Primary") == 0) {
|
||||||
Atapi->SlaveMaster = (UINT8) ((StrCmp (SlaveMasterStr, L"Master") == 0) ? 0 : 1);
|
Atapi->PrimarySecondary = 0;
|
||||||
|
} else if (StrCmp (PrimarySecondaryStr, L"Secondary") == 0) {
|
||||||
|
Atapi->PrimarySecondary = 1;
|
||||||
|
} else {
|
||||||
|
Atapi->PrimarySecondary = (UINT8) Strtoi (PrimarySecondaryStr);
|
||||||
|
}
|
||||||
|
if (StrCmp (SlaveMasterStr, L"Master") == 0) {
|
||||||
|
Atapi->SlaveMaster = 0;
|
||||||
|
} else if (StrCmp (SlaveMasterStr, L"Slave") == 0) {
|
||||||
|
Atapi->SlaveMaster = 1;
|
||||||
|
} else {
|
||||||
|
Atapi->SlaveMaster = (UINT8) Strtoi (SlaveMasterStr);
|
||||||
|
}
|
||||||
|
|
||||||
Atapi->Lun = (UINT16) Strtoi (LunStr);
|
Atapi->Lun = (UINT16) Strtoi (LunStr);
|
||||||
|
|
||||||
return (EFI_DEVICE_PATH_PROTOCOL *) Atapi;
|
return (EFI_DEVICE_PATH_PROTOCOL *) Atapi;
|
||||||
|
@ -1880,8 +1893,12 @@ DevPathFromTextUart (
|
||||||
(UINT16) sizeof (UART_DEVICE_PATH)
|
(UINT16) sizeof (UART_DEVICE_PATH)
|
||||||
);
|
);
|
||||||
|
|
||||||
Uart->BaudRate = (StrCmp (BaudStr, L"DEFAULT") == 0) ? 115200 : StrDecimalToUintn (BaudStr);
|
if (StrCmp (BaudStr, L"DEFAULT") == 0) {
|
||||||
Uart->DataBits = (UINT8) ((StrCmp (DataBitsStr, L"DEFAULT") == 0) ? 8 : StrDecimalToUintn (DataBitsStr));
|
Uart->BaudRate = 115200;
|
||||||
|
} else {
|
||||||
|
Strtoi64 (BaudStr, &Uart->BaudRate);
|
||||||
|
}
|
||||||
|
Uart->DataBits = (UINT8) ((StrCmp (DataBitsStr, L"DEFAULT") == 0) ? 8 : Strtoi (DataBitsStr));
|
||||||
switch (*ParityStr) {
|
switch (*ParityStr) {
|
||||||
case L'D':
|
case L'D':
|
||||||
Uart->Parity = 0;
|
Uart->Parity = 0;
|
||||||
|
@ -1908,7 +1925,8 @@ DevPathFromTextUart (
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Uart->Parity = 0xff;
|
Uart->Parity = (UINT8) Strtoi (ParityStr);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StrCmp (StopBitsStr, L"D") == 0) {
|
if (StrCmp (StopBitsStr, L"D") == 0) {
|
||||||
|
@ -1920,7 +1938,7 @@ DevPathFromTextUart (
|
||||||
} else if (StrCmp (StopBitsStr, L"2") == 0) {
|
} else if (StrCmp (StopBitsStr, L"2") == 0) {
|
||||||
Uart->StopBits = (UINT8) 3;
|
Uart->StopBits = (UINT8) 3;
|
||||||
} else {
|
} else {
|
||||||
Uart->StopBits = 0xff;
|
Uart->StopBits = (UINT8) Strtoi (StopBitsStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (EFI_DEVICE_PATH_PROTOCOL *) Uart;
|
return (EFI_DEVICE_PATH_PROTOCOL *) Uart;
|
||||||
|
@ -2351,21 +2369,30 @@ DevPathFromTextUsbWwid (
|
||||||
CHAR16 *InterfaceNumStr;
|
CHAR16 *InterfaceNumStr;
|
||||||
CHAR16 *SerialNumberStr;
|
CHAR16 *SerialNumberStr;
|
||||||
USB_WWID_DEVICE_PATH *UsbWwid;
|
USB_WWID_DEVICE_PATH *UsbWwid;
|
||||||
|
UINTN SerialNumberStrLen;
|
||||||
|
|
||||||
VIDStr = GetNextParamStr (&TextDeviceNode);
|
VIDStr = GetNextParamStr (&TextDeviceNode);
|
||||||
PIDStr = GetNextParamStr (&TextDeviceNode);
|
PIDStr = GetNextParamStr (&TextDeviceNode);
|
||||||
InterfaceNumStr = GetNextParamStr (&TextDeviceNode);
|
InterfaceNumStr = GetNextParamStr (&TextDeviceNode);
|
||||||
SerialNumberStr = GetNextParamStr (&TextDeviceNode);
|
SerialNumberStr = GetNextParamStr (&TextDeviceNode);
|
||||||
|
SerialNumberStrLen = StrLen (SerialNumberStr);
|
||||||
|
if (SerialNumberStrLen >= 2 &&
|
||||||
|
SerialNumberStr[0] == L'\"' &&
|
||||||
|
SerialNumberStr[SerialNumberStrLen - 1] == L'\"'
|
||||||
|
) {
|
||||||
|
SerialNumberStr[SerialNumberStrLen - 1] = L'\0';
|
||||||
|
SerialNumberStr++;
|
||||||
|
SerialNumberStrLen -= 2;
|
||||||
|
}
|
||||||
UsbWwid = (USB_WWID_DEVICE_PATH *) CreateDeviceNode (
|
UsbWwid = (USB_WWID_DEVICE_PATH *) CreateDeviceNode (
|
||||||
MESSAGING_DEVICE_PATH,
|
MESSAGING_DEVICE_PATH,
|
||||||
MSG_USB_WWID_DP,
|
MSG_USB_WWID_DP,
|
||||||
(UINT16) (sizeof (USB_WWID_DEVICE_PATH) + StrSize (SerialNumberStr))
|
(UINT16) (sizeof (USB_WWID_DEVICE_PATH) + SerialNumberStrLen * sizeof (CHAR16))
|
||||||
);
|
);
|
||||||
|
|
||||||
UsbWwid->VendorId = (UINT16) Strtoi (VIDStr);
|
UsbWwid->VendorId = (UINT16) Strtoi (VIDStr);
|
||||||
UsbWwid->ProductId = (UINT16) Strtoi (PIDStr);
|
UsbWwid->ProductId = (UINT16) Strtoi (PIDStr);
|
||||||
UsbWwid->InterfaceNumber = (UINT16) Strtoi (InterfaceNumStr);
|
UsbWwid->InterfaceNumber = (UINT16) Strtoi (InterfaceNumStr);
|
||||||
StrCpy ((CHAR16 *) ((UINT8 *) UsbWwid + sizeof (USB_WWID_DEVICE_PATH)), SerialNumberStr);
|
StrnCpy ((CHAR16 *) ((UINT8 *) UsbWwid + sizeof (USB_WWID_DEVICE_PATH)), SerialNumberStr, SerialNumberStrLen);
|
||||||
|
|
||||||
return (EFI_DEVICE_PATH_PROTOCOL *) UsbWwid;
|
return (EFI_DEVICE_PATH_PROTOCOL *) UsbWwid;
|
||||||
}
|
}
|
||||||
|
@ -2526,7 +2553,7 @@ DevPathFromTextHD (
|
||||||
(UINT16) sizeof (HARDDRIVE_DEVICE_PATH)
|
(UINT16) sizeof (HARDDRIVE_DEVICE_PATH)
|
||||||
);
|
);
|
||||||
|
|
||||||
Hd->PartitionNumber = (UINT32) StrDecimalToUintn (PartitionStr);
|
Hd->PartitionNumber = (UINT32) Strtoi (PartitionStr);
|
||||||
|
|
||||||
ZeroMem (Hd->Signature, 16);
|
ZeroMem (Hd->Signature, 16);
|
||||||
Hd->MBRType = (UINT8) 0;
|
Hd->MBRType = (UINT8) 0;
|
||||||
|
@ -2596,7 +2623,7 @@ DevPathFromTextCDROM (
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_DEVICE_PATH_PROTOCOL *
|
EFI_DEVICE_PATH_PROTOCOL *
|
||||||
DevPathFromTextVenMEDIA (
|
DevPathFromTextVenMedia (
|
||||||
IN CHAR16 *TextDeviceNode
|
IN CHAR16 *TextDeviceNode
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -2818,29 +2845,18 @@ DevPathFromTextSata (
|
||||||
CHAR16 *Param2;
|
CHAR16 *Param2;
|
||||||
CHAR16 *Param3;
|
CHAR16 *Param3;
|
||||||
|
|
||||||
//
|
|
||||||
// The PMPN is optional.
|
|
||||||
//
|
|
||||||
Param1 = GetNextParamStr (&TextDeviceNode);
|
Param1 = GetNextParamStr (&TextDeviceNode);
|
||||||
Param2 = GetNextParamStr (&TextDeviceNode);
|
Param2 = GetNextParamStr (&TextDeviceNode);
|
||||||
Param3 = NULL;
|
|
||||||
if (!IS_NULL (TextDeviceNode)) {
|
|
||||||
Param3 = GetNextParamStr (&TextDeviceNode);
|
Param3 = GetNextParamStr (&TextDeviceNode);
|
||||||
}
|
|
||||||
|
|
||||||
Sata = (SATA_DEVICE_PATH *) CreateDeviceNode (
|
Sata = (SATA_DEVICE_PATH *) CreateDeviceNode (
|
||||||
MESSAGING_DEVICE_PATH,
|
MESSAGING_DEVICE_PATH,
|
||||||
MSG_SATA_DP,
|
MSG_SATA_DP,
|
||||||
(UINT16) sizeof (SATA_DEVICE_PATH)
|
(UINT16) sizeof (SATA_DEVICE_PATH)
|
||||||
);
|
);
|
||||||
Sata->HBAPortNumber = (UINT16) StrHexToUintn (Param1);
|
Sata->HBAPortNumber = (UINT16) Strtoi (Param1);
|
||||||
if (Param3 != NULL) {
|
Sata->PortMultiplierPortNumber = (UINT16) Strtoi (Param2);
|
||||||
Sata->PortMultiplierPortNumber = (UINT16) StrHexToUintn (Param2);
|
Sata->Lun = (UINT16) Strtoi (Param3);
|
||||||
Param2 = Param3;
|
|
||||||
} else {
|
|
||||||
Sata->PortMultiplierPortNumber = SATA_HBA_DIRECT_CONNECT_FLAG;
|
|
||||||
}
|
|
||||||
Sata->Lun = (UINT16) StrHexToUintn (Param2);
|
|
||||||
|
|
||||||
return (EFI_DEVICE_PATH_PROTOCOL *) Sata;
|
return (EFI_DEVICE_PATH_PROTOCOL *) Sata;
|
||||||
}
|
}
|
||||||
|
@ -2904,7 +2920,7 @@ GLOBAL_REMOVE_IF_UNREFERENCED DEVICE_PATH_FROM_TEXT_TABLE mUefiDevicePathLibDevP
|
||||||
{L"Vlan", DevPathFromTextVlan },
|
{L"Vlan", DevPathFromTextVlan },
|
||||||
{L"HD", DevPathFromTextHD },
|
{L"HD", DevPathFromTextHD },
|
||||||
{L"CDROM", DevPathFromTextCDROM },
|
{L"CDROM", DevPathFromTextCDROM },
|
||||||
{L"VenMEDIA", DevPathFromTextVenMEDIA },
|
{L"VenMedia", DevPathFromTextVenMedia },
|
||||||
{L"Media", DevPathFromTextMedia },
|
{L"Media", DevPathFromTextMedia },
|
||||||
{L"Fv", DevPathFromTextFv },
|
{L"Fv", DevPathFromTextFv },
|
||||||
{L"FvFile", DevPathFromTextFvFile },
|
{L"FvFile", DevPathFromTextFvFile },
|
||||||
|
|
|
@ -990,14 +990,6 @@ DevPathToTextSata (
|
||||||
SATA_DEVICE_PATH *Sata;
|
SATA_DEVICE_PATH *Sata;
|
||||||
|
|
||||||
Sata = DevPath;
|
Sata = DevPath;
|
||||||
if ((Sata->PortMultiplierPortNumber & SATA_HBA_DIRECT_CONNECT_FLAG) != 0) {
|
|
||||||
UefiDevicePathLibCatPrint (
|
|
||||||
Str,
|
|
||||||
L"Sata(0x%x,0x%x)",
|
|
||||||
Sata->HBAPortNumber,
|
|
||||||
Sata->Lun
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
UefiDevicePathLibCatPrint (
|
UefiDevicePathLibCatPrint (
|
||||||
Str,
|
Str,
|
||||||
L"Sata(0x%x,0x%x,0x%x)",
|
L"Sata(0x%x,0x%x,0x%x)",
|
||||||
|
@ -1006,7 +998,6 @@ DevPathToTextSata (
|
||||||
Sata->Lun
|
Sata->Lun
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Converts a I20 device path structure to its string representative.
|
Converts a I20 device path structure to its string representative.
|
||||||
|
|
Loading…
Reference in New Issue