Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -923,19 +923,23 @@ BBTestGetNextDeviceConformanceAutoTest (
//
// Check Point1
//
// Per UEFI 2.10A (Mantis 2359): when no port multiplier is connected,
// GetNextDevice() may return EFI_NOT_FOUND, making it impossible to
// derive an invalid PortMultiplierPort. Skip this checkpoint in that case.
//
Status = GetInvalidPortMultiplierPort (AtaPassThru, Port, &InvalidPortMultiplierPort);
if (EFI_ERROR(Status)) {
StandardLib->RecordAssertion (
StandardLib,
EFI_TEST_ASSERTION_FAILED,
EFI_TEST_ASSERTION_WARNING,
gTestGenericFailureGuid,
L"Get invalid PortMultiplierPort fail",
L"Get invalid PortMultiplierPort - no devices enumerable, skipping checkpoint 1",
L"%a:%d:Status - %r\n",
__FILE__,
(UINTN)__LINE__,
Status
);
return Status;
return EFI_SUCCESS;
}

Status = AtaPassThru->GetNextDevice (AtaPassThru, Port, &InvalidPortMultiplierPort);
Expand All @@ -962,19 +966,24 @@ BBTestGetNextDeviceConformanceAutoTest (
//
// Check Point2.
//
// Per UEFI 2.10A (Mantis 2359): when no port multiplier is connected,
// GetNextDevice() may return EFI_NOT_FOUND instead of EFI_SUCCESS with
// PortMultiplierPort = 0xFFFF. Skip this checkpoint if no device is
// enumerable on this port.
//
Status = AtaPassThru->GetNextDevice (AtaPassThru, Port, &PortMultiplierPort1);
if (EFI_ERROR(Status)) {
StandardLib->RecordAssertion (
StandardLib,
EFI_TEST_ASSERTION_FAILED,
EFI_TEST_ASSERTION_WARNING,
gTestGenericFailureGuid,
L"Get 1st PortMultiplierPort fail",
L"Get 1st PortMultiplierPort - no device enumerable, skipping checkpoint 2",
L"%a:%d:Status - %r\n",
__FILE__,
(UINTN)__LINE__,
Status
);
return Status;
return EFI_SUCCESS;
}

PortMultiplierPort2 = PortMultiplierPort1;
Expand All @@ -983,15 +992,15 @@ BBTestGetNextDeviceConformanceAutoTest (
if (EFI_ERROR(Status)) {
StandardLib->RecordAssertion (
StandardLib,
EFI_TEST_ASSERTION_FAILED,
EFI_TEST_ASSERTION_WARNING,
gTestGenericFailureGuid,
L"Get 2nd PortMultiplierPort fail",
L"Get 2nd PortMultiplierPort - only one device on port, skipping checkpoint 2",
L"%a:%d:Status - %r\n",
__FILE__,
(UINTN)__LINE__,
Status
);
return Status;
return EFI_SUCCESS;
}

Status = AtaPassThru->GetNextDevice (AtaPassThru, Port, &PortMultiplierPort2);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -631,8 +631,15 @@ BBTestGetNextDeviceFunctionAutoTest (
}
}

//
// Per UEFI 2.10A (Mantis 2359): when no port multiplier is connected,
// GetNextDevice() may either return EFI_NOT_FOUND or return EFI_SUCCESS
// with PortMultiplierPort set to 0xFFFF.
//
if (Status == EFI_NOT_FOUND) {
AssertionType = EFI_TEST_ASSERTION_PASSED;
} else if ((Status == EFI_SUCCESS) && (PortMultiplierPort == 0xFFFF)) {
AssertionType = EFI_TEST_ASSERTION_PASSED;
} else {
AssertionType = EFI_TEST_ASSERTION_FAILED;
}
Expand All @@ -642,10 +649,11 @@ BBTestGetNextDeviceFunctionAutoTest (
AssertionType,
gAtaPassThruBBTestFunctionAssertionGuid006,
L"EFI_ATA_PASS_THRU_PROTOCOL.GetNextDevice - Invoke GetNextDevice() and verify interface correctness within test case",
L"%a:%d:Status - %r",
L"%a:%d:Status - %r, PortMultiplierPort - 0x%x",
__FILE__,
(UINTN)__LINE__,
Status
Status,
PortMultiplierPort
);
}
}
Expand Down
Loading