From 37078a63b1911f8b320bab6d82a2183a84f8858c Mon Sep 17 00:00:00 2001 From: jljusten Date: Thu, 18 Oct 2012 17:07:48 +0000 Subject: OvmfPkg: introduce virtio-scsi driver Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek Reviewed-by: Jordan Justen [jordan.l.justen@intel.com: fix build for VS2012] Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13867 6f19259b-4bc3-4df7-8a09-765794883524 --- OvmfPkg/Include/IndustryStandard/VirtioScsi.h | 100 ++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 OvmfPkg/Include/IndustryStandard/VirtioScsi.h (limited to 'OvmfPkg/Include') diff --git a/OvmfPkg/Include/IndustryStandard/VirtioScsi.h b/OvmfPkg/Include/IndustryStandard/VirtioScsi.h new file mode 100644 index 0000000000..59ce97e070 --- /dev/null +++ b/OvmfPkg/Include/IndustryStandard/VirtioScsi.h @@ -0,0 +1,100 @@ +/** @file + + Virtio SCSI Host Device specific type and macro definitions corresponding to + the virtio-0.9.5 specification. + + Copyright (C) 2012, Red Hat, Inc. + + This program and the accompanying materials are licensed and made available + under the terms and conditions of the BSD License which accompanies this + distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT + WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#ifndef _VIRTIO_SCSI_H_ +#define _VIRTIO_SCSI_H_ + +#include + + +// +// virtio-0.9.5, Appendix I: SCSI Host Device +// +#pragma pack(1) +typedef struct { + VIRTIO_HDR Generic; + UINT32 VhdrNumQueues; + UINT32 VhdrSegMax; + UINT32 VhdrMaxSectors; + UINT32 VhdrCmdPerLun; + UINT32 VhdrEventInfoSize; + UINT32 VhdrSenseSize; + UINT32 VhdrCdbSize; + UINT16 VhdrMaxChannel; + UINT16 VhdrMaxTarget; + UINT32 VhdrMaxLun; +} VSCSI_HDR; +#pragma pack() + +#define OFFSET_OF_VSCSI(Field) OFFSET_OF (VSCSI_HDR, Field) +#define SIZE_OF_VSCSI(Field) (sizeof ((VSCSI_HDR *) 0)->Field) + +#define VIRTIO_SCSI_F_INOUT BIT0 +#define VIRTIO_SCSI_F_HOTPLUG BIT1 + +// +// We expect these maximum sizes from the host. Also we force the CdbLength and +// SenseDataLength parameters of EFI_EXT_SCSI_PASS_THRU_PROTOCOL.PassThru() not +// to exceed these limits. See UEFI 2.3.1 errata C 14.7. +// +#define VIRTIO_SCSI_CDB_SIZE 32 +#define VIRTIO_SCSI_SENSE_SIZE 96 + +// +// We pass the dynamically sized buffers ("dataout", "datain") in separate ring +// descriptors. +// +#pragma pack(1) +typedef struct { + UINT8 Lun[8]; + UINT64 Id; + UINT8 TaskAttr; + UINT8 Prio; + UINT8 Crn; + UINT8 Cdb[VIRTIO_SCSI_CDB_SIZE]; +} VIRTIO_SCSI_REQ; + +typedef struct { + UINT32 SenseLen; + UINT32 Residual; + UINT16 StatusQualifier; + UINT8 Status; + UINT8 Response; + UINT8 Sense[VIRTIO_SCSI_SENSE_SIZE]; +} VIRTIO_SCSI_RESP; +#pragma pack() + +// +// selector of first virtio queue usable for request transfer +// +#define VIRTIO_SCSI_REQUEST_QUEUE 2 + +// +// host response codes +// +#define VIRTIO_SCSI_S_OK 0 +#define VIRTIO_SCSI_S_OVERRUN 1 +#define VIRTIO_SCSI_S_ABORTED 2 +#define VIRTIO_SCSI_S_BAD_TARGET 3 +#define VIRTIO_SCSI_S_RESET 4 +#define VIRTIO_SCSI_S_BUSY 5 +#define VIRTIO_SCSI_S_TRANSPORT_FAILURE 6 +#define VIRTIO_SCSI_S_TARGET_FAILURE 7 +#define VIRTIO_SCSI_S_NEXUS_FAILURE 8 +#define VIRTIO_SCSI_S_FAILURE 9 + +#endif // _VIRTIO_SCSI_H_ -- cgit v1.2.3