mirror of https://github.com/acidanthera/audk.git
OvmfPkg/VirtioScsiDxe: add helper to create a fake host adapter error
When virtio request fails we return EFI_DEVICE_ERROR, as per the spec EFI_EXT_SCSI_PASS_THRU_PROTOCOL.PassThru() member function is required to implement elaborated error reporting. The patch refactors out entire block of the code that creates the host adapter error into a separate helper function (ReportHostAdapterError). Suggested-by: Laszlo Ersek <lersek@redhat.com> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Tom Lendacky <thomas.lendacky@amd.com> Cc: Laszlo Ersek <lersek@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Brijesh Singh <brijesh.singh@amd.com> [lersek@redhat.com: fix style & typo in ReportHostAdapterError() comment] Reviewed-by: Laszlo Ersek <lersek@redhat.com> Regression-tested-by: Laszlo Ersek <lersek@redhat.com> Tested-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
parent
fc2168feb2
commit
1b15eb06c7
|
@ -97,7 +97,7 @@
|
||||||
// set some fields in the EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET in/out
|
// set some fields in the EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET in/out
|
||||||
// parameter on return. The following is a full list of those fields, for
|
// parameter on return. The following is a full list of those fields, for
|
||||||
// easier validation of PopulateRequest(), ParseResponse(), and
|
// easier validation of PopulateRequest(), ParseResponse(), and
|
||||||
// VirtioScsiPassThru() below.
|
// ReportHostAdapterError() below.
|
||||||
//
|
//
|
||||||
// - InTransferLength
|
// - InTransferLength
|
||||||
// - OutTransferLength
|
// - OutTransferLength
|
||||||
|
@ -388,6 +388,37 @@ ParseResponse (
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
|
||||||
|
The function can be used to create a fake host adapter error.
|
||||||
|
|
||||||
|
When VirtioScsiPassThru() is failed due to some reasons then this function
|
||||||
|
can be called to construct a host adapter error.
|
||||||
|
|
||||||
|
@param[out] Packet The Extended SCSI Pass Thru Protocol packet that the host
|
||||||
|
adapter error shall be placed in.
|
||||||
|
|
||||||
|
|
||||||
|
@retval EFI_DEVICE_ERROR The function returns this status code
|
||||||
|
unconditionally, to be propagated by
|
||||||
|
VirtioScsiPassThru().
|
||||||
|
|
||||||
|
**/
|
||||||
|
STATIC
|
||||||
|
EFI_STATUS
|
||||||
|
ReportHostAdapterError (
|
||||||
|
OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet
|
||||||
|
)
|
||||||
|
{
|
||||||
|
Packet->InTransferLength = 0;
|
||||||
|
Packet->OutTransferLength = 0;
|
||||||
|
Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OTHER;
|
||||||
|
Packet->TargetStatus = EFI_EXT_SCSI_STATUS_TARGET_GOOD;
|
||||||
|
Packet->SenseDataLength = 0;
|
||||||
|
return EFI_DEVICE_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// The next seven functions implement EFI_EXT_SCSI_PASS_THRU_PROTOCOL
|
// The next seven functions implement EFI_EXT_SCSI_PASS_THRU_PROTOCOL
|
||||||
// for the virtio-scsi HBA. Refer to UEFI Spec 2.3.1 + Errata C, sections
|
// for the virtio-scsi HBA. Refer to UEFI Spec 2.3.1 + Errata C, sections
|
||||||
|
@ -472,12 +503,7 @@ VirtioScsiPassThru (
|
||||||
//
|
//
|
||||||
if (VirtioFlush (Dev->VirtIo, VIRTIO_SCSI_REQUEST_QUEUE, &Dev->Ring,
|
if (VirtioFlush (Dev->VirtIo, VIRTIO_SCSI_REQUEST_QUEUE, &Dev->Ring,
|
||||||
&Indices, NULL) != EFI_SUCCESS) {
|
&Indices, NULL) != EFI_SUCCESS) {
|
||||||
Packet->InTransferLength = 0;
|
return ReportHostAdapterError (Packet);
|
||||||
Packet->OutTransferLength = 0;
|
|
||||||
Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OTHER;
|
|
||||||
Packet->TargetStatus = EFI_EXT_SCSI_STATUS_TARGET_GOOD;
|
|
||||||
Packet->SenseDataLength = 0;
|
|
||||||
return EFI_DEVICE_ERROR;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ParseResponse (Packet, &Response);
|
return ParseResponse (Packet, &Response);
|
||||||
|
|
Loading…
Reference in New Issue