);\r
\r
AcpiEx->HID = EisaIdFromText (HIDStr);\r
- AcpiEx->CID = EisaIdFromText (CIDStr);\r
+ //\r
+ // According to UEFI spec, the CID parametr is optional and has a default value of 0.\r
+ // So when the CID parametr is not specified or specified as 0 in the text device node.\r
+ // Set the CID to 0 in the ACPI extension device path structure.\r
+ //\r
+ if (*CIDStr == L'\0' || *CIDStr == L'0') {\r
+ AcpiEx->CID = 0;\r
+ } else {\r
+ AcpiEx->CID = EisaIdFromText (CIDStr);\r
+ }\r
AcpiEx->UID = 0;\r
\r
AsciiStr = (CHAR8 *) ((UINT8 *)AcpiEx + sizeof (ACPI_EXTENDED_HID_DEVICE_PATH));\r
CHAR16 *TextDeviceNode\r
)\r
{\r
- VENDOR_DEFINED_MESSAGING_DEVICE_PATH *Vend;\r
+ VENDOR_DEVICE_PATH *Vend;\r
\r
- Vend = (VENDOR_DEFINED_MESSAGING_DEVICE_PATH *) CreateDeviceNode (\r
+ Vend = (VENDOR_DEVICE_PATH *) CreateDeviceNode (\r
MESSAGING_DEVICE_PATH,\r
MSG_VENDOR_DP,\r
- (UINT16) sizeof (VENDOR_DEFINED_MESSAGING_DEVICE_PATH)\r
+ (UINT16) sizeof (VENDOR_DEVICE_PATH)\r
);\r
\r
- CopyGuid (&Vend->Guid, &gEfiDebugPortDevicePathGuid);\r
+ CopyGuid (&Vend->Guid, &gEfiDebugPortProtocolGuid);\r
\r
return (EFI_DEVICE_PATH_PROTOCOL *) Vend;\r
}\r
PIDStr = GetNextParamStr (&TextDeviceNode);\r
if (UsbClassText->ClassExist) {\r
ClassStr = GetNextParamStr (&TextDeviceNode);\r
- UsbClass->DeviceClass = (UINT8) Strtoi (ClassStr);\r
+ if (*ClassStr == L'\0') {\r
+ UsbClass->DeviceClass = 0xFF;\r
+ } else {\r
+ UsbClass->DeviceClass = (UINT8) Strtoi (ClassStr);\r
+ }\r
} else {\r
UsbClass->DeviceClass = UsbClassText->Class;\r
}\r
if (UsbClassText->SubClassExist) {\r
SubClassStr = GetNextParamStr (&TextDeviceNode);\r
- UsbClass->DeviceSubClass = (UINT8) Strtoi (SubClassStr);\r
+ if (*SubClassStr == L'\0') {\r
+ UsbClass->DeviceSubClass = 0xFF;\r
+ } else {\r
+ UsbClass->DeviceSubClass = (UINT8) Strtoi (SubClassStr);\r
+ }\r
} else {\r
UsbClass->DeviceSubClass = UsbClassText->SubClass;\r
}\r
\r
ProtocolStr = GetNextParamStr (&TextDeviceNode);\r
\r
- UsbClass->VendorId = (UINT16) Strtoi (VIDStr);\r
- UsbClass->ProductId = (UINT16) Strtoi (PIDStr);\r
- UsbClass->DeviceProtocol = (UINT8) Strtoi (ProtocolStr);\r
+ if (*VIDStr == L'\0') {\r
+ UsbClass->VendorId = 0xFFFF;\r
+ } else {\r
+ UsbClass->VendorId = (UINT16) Strtoi (VIDStr);\r
+ }\r
+ if (*PIDStr == L'\0') {\r
+ UsbClass->ProductId = 0xFFFF;\r
+ } else {\r
+ UsbClass->ProductId = (UINT16) Strtoi (PIDStr);\r
+ }\r
+ if (*ProtocolStr == L'\0') {\r
+ UsbClass->DeviceProtocol = 0xFF;\r
+ } else {\r
+ UsbClass->DeviceProtocol = (UINT8) Strtoi (ProtocolStr);\r
+ }\r
\r
return (EFI_DEVICE_PATH_PROTOCOL *) UsbClass;\r
}\r
(UINT16) sizeof (SATA_DEVICE_PATH)\r
);\r
Sata->HBAPortNumber = (UINT16) Strtoi (Param1);\r
- Sata->PortMultiplierPortNumber = (UINT16) Strtoi (Param2);\r
+\r
+ //\r
+ // According to UEFI spec, if PMPN is not provided, the default is 0xFFFF\r
+ //\r
+ if (*Param2 == L'\0' ) {\r
+ Sata->PortMultiplierPortNumber = 0xFFFF;\r
+ } else {\r
+ Sata->PortMultiplierPortNumber = (UINT16) Strtoi (Param2);\r
+ }\r
Sata->Lun = (UINT16) Strtoi (Param3);\r
\r
return (EFI_DEVICE_PATH_PROTOCOL *) Sata;\r