0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 #ifndef _LINUX_VIRTIO_SCSI_H
0028 #define _LINUX_VIRTIO_SCSI_H
0029
0030 #include <linux/virtio_types.h>
0031
0032
0033 #define VIRTIO_SCSI_CDB_DEFAULT_SIZE 32
0034 #define VIRTIO_SCSI_SENSE_DEFAULT_SIZE 96
0035
0036 #ifndef VIRTIO_SCSI_CDB_SIZE
0037 #define VIRTIO_SCSI_CDB_SIZE VIRTIO_SCSI_CDB_DEFAULT_SIZE
0038 #endif
0039 #ifndef VIRTIO_SCSI_SENSE_SIZE
0040 #define VIRTIO_SCSI_SENSE_SIZE VIRTIO_SCSI_SENSE_DEFAULT_SIZE
0041 #endif
0042
0043
0044 struct virtio_scsi_cmd_req {
0045 __u8 lun[8];
0046 __virtio64 tag;
0047 __u8 task_attr;
0048 __u8 prio;
0049 __u8 crn;
0050 __u8 cdb[VIRTIO_SCSI_CDB_SIZE];
0051 } __attribute__((packed));
0052
0053
0054 struct virtio_scsi_cmd_req_pi {
0055 __u8 lun[8];
0056 __virtio64 tag;
0057 __u8 task_attr;
0058 __u8 prio;
0059 __u8 crn;
0060 __virtio32 pi_bytesout;
0061 __virtio32 pi_bytesin;
0062 __u8 cdb[VIRTIO_SCSI_CDB_SIZE];
0063 } __attribute__((packed));
0064
0065
0066 struct virtio_scsi_cmd_resp {
0067 __virtio32 sense_len;
0068 __virtio32 resid;
0069 __virtio16 status_qualifier;
0070 __u8 status;
0071 __u8 response;
0072 __u8 sense[VIRTIO_SCSI_SENSE_SIZE];
0073 } __attribute__((packed));
0074
0075
0076 struct virtio_scsi_ctrl_tmf_req {
0077 __virtio32 type;
0078 __virtio32 subtype;
0079 __u8 lun[8];
0080 __virtio64 tag;
0081 } __attribute__((packed));
0082
0083 struct virtio_scsi_ctrl_tmf_resp {
0084 __u8 response;
0085 } __attribute__((packed));
0086
0087
0088 struct virtio_scsi_ctrl_an_req {
0089 __virtio32 type;
0090 __u8 lun[8];
0091 __virtio32 event_requested;
0092 } __attribute__((packed));
0093
0094 struct virtio_scsi_ctrl_an_resp {
0095 __virtio32 event_actual;
0096 __u8 response;
0097 } __attribute__((packed));
0098
0099 struct virtio_scsi_event {
0100 __virtio32 event;
0101 __u8 lun[8];
0102 __virtio32 reason;
0103 } __attribute__((packed));
0104
0105 struct virtio_scsi_config {
0106 __virtio32 num_queues;
0107 __virtio32 seg_max;
0108 __virtio32 max_sectors;
0109 __virtio32 cmd_per_lun;
0110 __virtio32 event_info_size;
0111 __virtio32 sense_size;
0112 __virtio32 cdb_size;
0113 __virtio16 max_channel;
0114 __virtio16 max_target;
0115 __virtio32 max_lun;
0116 } __attribute__((packed));
0117
0118
0119 #define VIRTIO_SCSI_F_INOUT 0
0120 #define VIRTIO_SCSI_F_HOTPLUG 1
0121 #define VIRTIO_SCSI_F_CHANGE 2
0122 #define VIRTIO_SCSI_F_T10_PI 3
0123
0124
0125 #define VIRTIO_SCSI_S_OK 0
0126 #define VIRTIO_SCSI_S_OVERRUN 1
0127 #define VIRTIO_SCSI_S_ABORTED 2
0128 #define VIRTIO_SCSI_S_BAD_TARGET 3
0129 #define VIRTIO_SCSI_S_RESET 4
0130 #define VIRTIO_SCSI_S_BUSY 5
0131 #define VIRTIO_SCSI_S_TRANSPORT_FAILURE 6
0132 #define VIRTIO_SCSI_S_TARGET_FAILURE 7
0133 #define VIRTIO_SCSI_S_NEXUS_FAILURE 8
0134 #define VIRTIO_SCSI_S_FAILURE 9
0135 #define VIRTIO_SCSI_S_FUNCTION_SUCCEEDED 10
0136 #define VIRTIO_SCSI_S_FUNCTION_REJECTED 11
0137 #define VIRTIO_SCSI_S_INCORRECT_LUN 12
0138
0139
0140 #define VIRTIO_SCSI_T_TMF 0
0141 #define VIRTIO_SCSI_T_AN_QUERY 1
0142 #define VIRTIO_SCSI_T_AN_SUBSCRIBE 2
0143
0144
0145 #define VIRTIO_SCSI_T_TMF_ABORT_TASK 0
0146 #define VIRTIO_SCSI_T_TMF_ABORT_TASK_SET 1
0147 #define VIRTIO_SCSI_T_TMF_CLEAR_ACA 2
0148 #define VIRTIO_SCSI_T_TMF_CLEAR_TASK_SET 3
0149 #define VIRTIO_SCSI_T_TMF_I_T_NEXUS_RESET 4
0150 #define VIRTIO_SCSI_T_TMF_LOGICAL_UNIT_RESET 5
0151 #define VIRTIO_SCSI_T_TMF_QUERY_TASK 6
0152 #define VIRTIO_SCSI_T_TMF_QUERY_TASK_SET 7
0153
0154
0155 #define VIRTIO_SCSI_T_EVENTS_MISSED 0x80000000
0156 #define VIRTIO_SCSI_T_NO_EVENT 0
0157 #define VIRTIO_SCSI_T_TRANSPORT_RESET 1
0158 #define VIRTIO_SCSI_T_ASYNC_NOTIFY 2
0159 #define VIRTIO_SCSI_T_PARAM_CHANGE 3
0160
0161
0162 #define VIRTIO_SCSI_EVT_RESET_HARD 0
0163 #define VIRTIO_SCSI_EVT_RESET_RESCAN 1
0164 #define VIRTIO_SCSI_EVT_RESET_REMOVED 2
0165
0166 #define VIRTIO_SCSI_S_SIMPLE 0
0167 #define VIRTIO_SCSI_S_ORDERED 1
0168 #define VIRTIO_SCSI_S_HEAD 2
0169 #define VIRTIO_SCSI_S_ACA 3
0170
0171
0172 #endif