// set some fields in the EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET in/out\r
// parameter on return. The following is a full list of those fields, for\r
// easier validation of PopulateRequest(), ParseResponse(), and\r
-// VirtioScsiPassThru() below.\r
+// ReportHostAdapterError() below.\r
//\r
// - InTransferLength\r
// - OutTransferLength\r
}\r
\r
\r
+/**\r
+\r
+ The function can be used to create a fake host adapter error.\r
+\r
+ When VirtioScsiPassThru() is failed due to some reasons then this function\r
+ can be called to construct a host adapter error.\r
+\r
+ @param[out] Packet The Extended SCSI Pass Thru Protocol packet that the host\r
+ adapter error shall be placed in.\r
+\r
+\r
+ @retval EFI_DEVICE_ERROR The function returns this status code\r
+ unconditionally, to be propagated by\r
+ VirtioScsiPassThru().\r
+\r
+**/\r
+STATIC\r
+EFI_STATUS\r
+ReportHostAdapterError (\r
+ OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet\r
+ )\r
+{\r
+ Packet->InTransferLength = 0;\r
+ Packet->OutTransferLength = 0;\r
+ Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OTHER;\r
+ Packet->TargetStatus = EFI_EXT_SCSI_STATUS_TARGET_GOOD;\r
+ Packet->SenseDataLength = 0;\r
+ return EFI_DEVICE_ERROR;\r
+}\r
+\r
+\r
//\r
// The next seven functions implement EFI_EXT_SCSI_PASS_THRU_PROTOCOL\r
// for the virtio-scsi HBA. Refer to UEFI Spec 2.3.1 + Errata C, sections\r
//\r
if (VirtioFlush (Dev->VirtIo, VIRTIO_SCSI_REQUEST_QUEUE, &Dev->Ring,\r
&Indices, NULL) != EFI_SUCCESS) {\r
- Packet->InTransferLength = 0;\r
- Packet->OutTransferLength = 0;\r
- Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OTHER;\r
- Packet->TargetStatus = EFI_EXT_SCSI_STATUS_TARGET_GOOD;\r
- Packet->SenseDataLength = 0;\r
- return EFI_DEVICE_ERROR;\r
+ return ReportHostAdapterError (Packet);\r
}\r
\r
return ParseResponse (Packet, &Response);\r