diff options
author | Brijesh Singh <brijesh.singh@amd.com> | 2017-08-31 10:25:27 -0400 |
---|---|---|
committer | Laszlo Ersek <lersek@redhat.com> | 2017-08-31 21:01:31 +0200 |
commit | 1b15eb06c7f2687ee92cf90f1581c7044691d71f (patch) | |
tree | 24f41ebf559b12e88ac3607cdfda532e62127775 /OvmfPkg/VirtioScsiDxe | |
parent | fc2168feb24827b3691d85a00f23c35ac4eb2910 (diff) | |
download | edk2-1b15eb06c7f2687ee92cf90f1581c7044691d71f.tar.gz edk2-1b15eb06c7f2687ee92cf90f1581c7044691d71f.tar.bz2 edk2-1b15eb06c7f2687ee92cf90f1581c7044691d71f.zip |
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>
Diffstat (limited to 'OvmfPkg/VirtioScsiDxe')
-rw-r--r-- | OvmfPkg/VirtioScsiDxe/VirtioScsi.c | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/OvmfPkg/VirtioScsiDxe/VirtioScsi.c b/OvmfPkg/VirtioScsiDxe/VirtioScsi.c index 5e72b1a24b..5e5ad88e5e 100644 --- a/OvmfPkg/VirtioScsiDxe/VirtioScsi.c +++ b/OvmfPkg/VirtioScsiDxe/VirtioScsi.c @@ -97,7 +97,7 @@ // 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
// easier validation of PopulateRequest(), ParseResponse(), and
-// VirtioScsiPassThru() below.
+// ReportHostAdapterError() below.
//
// - InTransferLength
// - 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
// 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,
&Indices, NULL) != EFI_SUCCESS) {
- 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;
+ return ReportHostAdapterError (Packet);
}
return ParseResponse (Packet, &Response);
|