MdePkg: Handle AcpiExp device path when optional para is not specified

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1243

AcpiExp text device path: AcpiExp(HID,CID,UIDSTR)
And according to UEFI spec, the CID parameter is optional
and has a default value of 0. But current implementation
miss to check following cases for the AcpiExp.
FromText:when text device is AcpiExp(HID,,UIDSTR)/AcpiExp(HID,0,UIDSTR)
ToText: when the CID is 0 in the node structure

This commit is to do the enhancement.

Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
This commit is contained in:
Dandan Bi 2018-10-12 10:18:28 +08:00 committed by Liming Gao
parent 3874108034
commit a8b5750901
2 changed files with 26 additions and 8 deletions

View File

@ -919,7 +919,16 @@ DevPathFromTextAcpiExp (
); );
AcpiEx->HID = EisaIdFromText (HIDStr); AcpiEx->HID = EisaIdFromText (HIDStr);
AcpiEx->CID = EisaIdFromText (CIDStr); //
// According to UEFI spec, the CID parametr is optional and has a default value of 0.
// So when the CID parametr is not specified or specified as 0 in the text device node.
// Set the CID to 0 in the ACPI extension device path structure.
//
if (*CIDStr == L'\0' || *CIDStr == L'0') {
AcpiEx->CID = 0;
} else {
AcpiEx->CID = EisaIdFromText (CIDStr);
}
AcpiEx->UID = 0; AcpiEx->UID = 0;
AsciiStr = (CHAR8 *) ((UINT8 *)AcpiEx + sizeof (ACPI_EXTENDED_HID_DEVICE_PATH)); AsciiStr = (CHAR8 *) ((UINT8 *)AcpiEx + sizeof (ACPI_EXTENDED_HID_DEVICE_PATH));

View File

@ -480,13 +480,22 @@ DevPathToTextAcpiEx (
// //
// use AcpiExp() // use AcpiExp()
// //
UefiDevicePathLibCatPrint ( if (AcpiEx->CID == 0) {
Str, UefiDevicePathLibCatPrint (
L"AcpiExp(%s,%s,%a)", Str,
HIDText, L"AcpiExp(%s,0,%a)",
CIDText, HIDText,
UIDStr UIDStr
); );
} else {
UefiDevicePathLibCatPrint (
Str,
L"AcpiExp(%s,%s,%a)",
HIDText,
CIDText,
UIDStr
);
}
} else { } else {
if (AllowShortcuts) { if (AllowShortcuts) {
// //