2012-10-18 19:07:48 +02:00
|
|
|
/** @file
|
|
|
|
|
|
|
|
Virtio SCSI Host Device specific type and macro definitions corresponding to
|
|
|
|
the virtio-0.9.5 specification.
|
|
|
|
|
|
|
|
Copyright (C) 2012, Red Hat, Inc.
|
|
|
|
|
2019-04-04 01:06:33 +02:00
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
2012-10-18 19:07:48 +02:00
|
|
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
#ifndef _VIRTIO_SCSI_H_
|
|
|
|
#define _VIRTIO_SCSI_H_
|
|
|
|
|
|
|
|
#include <IndustryStandard/Virtio.h>
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// virtio-0.9.5, Appendix I: SCSI Host Device
|
|
|
|
//
|
|
|
|
#pragma pack(1)
|
|
|
|
typedef struct {
|
2013-12-11 17:58:22 +01:00
|
|
|
UINT32 NumQueues;
|
|
|
|
UINT32 SegMax;
|
|
|
|
UINT32 MaxSectors;
|
|
|
|
UINT32 CmdPerLun;
|
|
|
|
UINT32 EventInfoSize;
|
|
|
|
UINT32 SenseSize;
|
|
|
|
UINT32 CdbSize;
|
|
|
|
UINT16 MaxChannel;
|
|
|
|
UINT16 MaxTarget;
|
|
|
|
UINT32 MaxLun;
|
|
|
|
} VIRTIO_SCSI_CONFIG;
|
2012-10-18 19:07:48 +02:00
|
|
|
#pragma pack()
|
|
|
|
|
2013-12-11 17:58:22 +01:00
|
|
|
#define OFFSET_OF_VSCSI(Field) OFFSET_OF (VIRTIO_SCSI_CONFIG, Field)
|
|
|
|
#define SIZE_OF_VSCSI(Field) (sizeof ((VIRTIO_SCSI_CONFIG *) 0)->Field)
|
2012-10-18 19:07:48 +02:00
|
|
|
|
|
|
|
#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_
|