// // TDS 4.1 // EFI_STATUS BBTestGetNextDeviceConformanceAutoTest ( IN EFI_BB_TEST_PROTOCOL *This, IN VOID *ClientInterface, IN EFI_TEST_LEVEL TestLevel, IN EFI_HANDLE SupportHandle ) { EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib; EFI_STATUS Status; EFI_SCSI_PASS_THRU_PROTOCOL *ScsiPassThru; EFI_TEST_ASSERTION AssertionType; UINT32 Target; UINT64 Lun; UINT32 NewTarget; UINT64 NewLun; // // Get the Standard Library Interface // Status = gtBS->HandleProtocol ( SupportHandle, &gEfiStandardTestLibraryGuid, &StandardLib ); if (EFI_ERROR(Status)) { StandardLib->RecordAssertion ( StandardLib, EFI_TEST_ASSERTION_FAILED, gTestGenericFailureGuid, L"BS.HandleProtocol - Handle standard test library", L"%a:%d:Status - %r", __FILE__, __LINE__, Status ); return Status; } ScsiPassThru = (EFI_SCSI_PASS_THRU_PROTOCOL *)ClientInterface; // // Assertion Point 4.1.2.1 // Call GetNextDevice() with invalid parameter. // NewTarget = 0xFFFFFFFF; // // Get First Device Target and Lun. // Status = ScsiPassThru->GetNextDevice (ScsiPassThru, &NewTarget, &NewLun); if (EFI_ERROR(Status)) { StandardLib->RecordAssertion ( StandardLib, EFI_TEST_ASSERTION_FAILED, gTestGenericFailureGuid, L"EFI_SCSI_PASS_THRU_PROTOCOL.GetNextDevice", L"%a:%d:Status - %r", __FILE__, __LINE__, Status ); return EFI_UNSUPPORTED; } // // Check point 1, call GetNextDevice with invalid Target. // Target = 0xEEEEEEEE; Lun = NewLun; Status = ScsiPassThru->GetNextDevice (ScsiPassThru, &Target, &Lun); if (Status == EFI_INVALID_PARAMETER) { AssertionType = EFI_TEST_ASSERTION_PASSED; } else { AssertionType = EFI_TEST_ASSERTION_FAILED; } StandardLib->RecordAssertion ( StandardLib, AssertionType, gScsiPassThruBBTestConformanceAssertionGuid002, L"EFI_SCSI_PASS_THRU_PROTOCOL.GetNextDevice - call GetNextDevice with invalid Target.", L"%a:%d:Status - %r, Target - %d, Lun - %ld", __FILE__, __LINE__, Status, Target, Lun ); // // Check point 2, call GetNextDevice with invalid Lun. // Target = NewTarget; Lun = 0xEEEEEEEE; Status = ScsiPassThru->GetNextDevice (ScsiPassThru, &Target, &Lun); if (Status == EFI_INVALID_PARAMETER) { AssertionType = EFI_TEST_ASSERTION_PASSED; } else { AssertionType = EFI_TEST_ASSERTION_FAILED; } StandardLib->RecordAssertion ( StandardLib, AssertionType, gScsiPassThruBBTestConformanceAssertionGuid003, L"EFI_SCSI_PASS_THRU_PROTOCOL.GetNextDevice - call GetNextDevice with invalid Lun.", L"%a:%d:Status - %r, Target - %d, Lun - %ld", __FILE__, __LINE__, Status, Target, Lun ); // // Check point 3, Call GetNextDevice() with Target=0xFFFFFFFF to get the // first device. Then call it again to get the next device. // Use the Target and Lun return from the first call to call // the function. // Target = NewTarget; Lun = NewLun; // // Get the second Device Target and Lun. // Status = ScsiPassThru->GetNextDevice (ScsiPassThru, &NewTarget, &NewLun); if (EFI_ERROR(Status)) { StandardLib->RecordAssertion ( StandardLib, EFI_TEST_ASSERTION_FAILED, gTestGenericFailureGuid, L"EFI_SCSI_PASS_THRU_PROTOCOL.GetNextDevice", L"%a:%d:Status - %r", __FILE__, __LINE__, Status ); return EFI_UNSUPPORTED; } return EFI_SUCCESS; }
// // TDS 3.1 // EFI_STATUS BBTestGetNextDeviceFunctionAutoTest ( IN EFI_BB_TEST_PROTOCOL *This, IN VOID *ClientInterface, IN EFI_TEST_LEVEL TestLevel, IN EFI_HANDLE SupportHandle ) { EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib; EFI_STATUS Status; EFI_SCSI_PASS_THRU_PROTOCOL *ScsiPassThru; EFI_TEST_ASSERTION AssertionType; UINT32 Target; UINT64 Lun; // // Get the Standard Library Interface // Status = gtBS->HandleProtocol ( SupportHandle, &gEfiStandardTestLibraryGuid, &StandardLib ); if ( EFI_ERROR(Status) ) { StandardLib->RecordAssertion ( StandardLib, EFI_TEST_ASSERTION_FAILED, gTestGenericFailureGuid, L"BS.HandleProtocol - Handle standard test library", L"%a:%d:Status - %r\n", __FILE__, (UINTN)__LINE__, Status ); return Status; } ScsiPassThru = (EFI_SCSI_PASS_THRU_PROTOCOL *)ClientInterface; // // Assertion Point 3.1.2.1 // Retrieve the list of legal Target IDs and LUNs for SCSI devices on a SCSI channel. // Target = 0xFFFFFFFF; Status = EFI_SUCCESS; while (!EFI_ERROR(Status)) { Status = ScsiPassThru->GetNextDevice (ScsiPassThru, &Target, &Lun); if (!EFI_ERROR(Status )) { StandardLib->RecordMessage ( StandardLib, EFI_VERBOSE_LEVEL_QUIET, L"SCSI device: Target - %d, Lun - %ld\n", Target, Lun ); } } if (Status == EFI_NOT_FOUND) { AssertionType = EFI_TEST_ASSERTION_PASSED; } else { AssertionType = EFI_TEST_ASSERTION_FAILED; } StandardLib->RecordAssertion ( StandardLib, AssertionType, gScsiPassThruBBTestFunctionAssertionGuid001, L"EFI_SCSI_PASS_THRU_PROTOCOL.GetNextDevice - Invoke GetNextDevice() and verify interface correctness within test case", L"%a:%d:Status - %r\n", __FILE__, (UINTN)__LINE__, Status ); return EFI_SUCCESS; }