#define VIRTIO_SCSI_CONFIG_NUM_QUEUES 0
#define VIRTIO_SCSI_CONFIG_SEG_MAX 4
#define VIRTIO_SCSI_CONFIG_MAX_SECTORS 8
#define VIRTIO_SCSI_CONFIG_CMD_PER_LUN 12
#define VIRTIO_SCSI_CONFIG_EVENT_INFO_SIZE 16
#define VIRTIO_SCSI_CONFIG_SENSE_SIZE 20
#define VIRTIO_SCSI_CONFIG_CDB_SIZE 24
#define VIRTIO_SCSI_CONFIG_MAX_CHANNEL 28
#define VIRTIO_SCSI_CONFIG_MAX_TARGET 30
#define VIRTIO_SCSI_CONFIG_MAX_LUN 32
#define VIRTIO_SCSI_F_INOUT (1ULL<<0)
#define VIRTIO_SCSI_F_HOTPLUG (1ULL<<1)
#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
#define VIRTIO_SCSI_S_SIMPLE 0
#define VIRTIO_SCSI_S_ORDERED 1
#define VIRTIO_SCSI_S_HEAD 2
#define VIRTIO_SCSI_S_ACA 3
struct virtio_scsi_req_hdr {
uint8_t lun[8];
uint64_t id;
uint8_t task_attr;
uint8_t prio;
uint8_t crn;
uint8_t cdb[32];
} __packed;
struct virtio_scsi_res_hdr {
uint32_t sense_len;
uint32_t residual;
uint16_t status_qualifier;
uint8_t status;
uint8_t response;
uint8_t sense[96];
} __packed;