linux/include/uapi/linux/virtio_scsi.h
<<
>>
Prefs
   1/*
   2 * This header is BSD licensed so anyone can use the definitions to implement
   3 * compatible drivers/servers.
   4 *
   5 * Redistribution and use in source and binary forms, with or without
   6 * modification, are permitted provided that the following conditions
   7 * are met:
   8 * 1. Redistributions of source code must retain the above copyright
   9 *    notice, this list of conditions and the following disclaimer.
  10 * 2. Redistributions in binary form must reproduce the above copyright
  11 *    notice, this list of conditions and the following disclaimer in the
  12 *    documentation and/or other materials provided with the distribution.
  13 *
  14 * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  17 * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
  18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  24 * SUCH DAMAGE.
  25 */
  26
  27#ifndef _LINUX_VIRTIO_SCSI_H
  28#define _LINUX_VIRTIO_SCSI_H
  29
  30#include <linux/virtio_types.h>
  31
  32#define VIRTIO_SCSI_CDB_SIZE   32
  33#define VIRTIO_SCSI_SENSE_SIZE 96
  34
  35/* SCSI command request, followed by data-out */
  36struct virtio_scsi_cmd_req {
  37        __u8 lun[8];            /* Logical Unit Number */
  38        __virtio64 tag;         /* Command identifier */
  39        __u8 task_attr;         /* Task attribute */
  40        __u8 prio;              /* SAM command priority field */
  41        __u8 crn;
  42        __u8 cdb[VIRTIO_SCSI_CDB_SIZE];
  43} __attribute__((packed));
  44
  45/* Response, followed by sense data and data-in */
  46struct virtio_scsi_cmd_resp {
  47        __virtio32 sense_len;           /* Sense data length */
  48        __virtio32 resid;               /* Residual bytes in data buffer */
  49        __virtio16 status_qualifier;    /* Status qualifier */
  50        __u8 status;            /* Command completion status */
  51        __u8 response;          /* Response values */
  52        __u8 sense[VIRTIO_SCSI_SENSE_SIZE];
  53} __attribute__((packed));
  54
  55/* Task Management Request */
  56struct virtio_scsi_ctrl_tmf_req {
  57        __virtio32 type;
  58        __virtio32 subtype;
  59        __u8 lun[8];
  60        __virtio64 tag;
  61} __attribute__((packed));
  62
  63struct virtio_scsi_ctrl_tmf_resp {
  64        __u8 response;
  65} __attribute__((packed));
  66
  67/* Asynchronous notification query/subscription */
  68struct virtio_scsi_ctrl_an_req {
  69        __virtio32 type;
  70        __u8 lun[8];
  71        __virtio32 event_requested;
  72} __attribute__((packed));
  73
  74struct virtio_scsi_ctrl_an_resp {
  75        __virtio32 event_actual;
  76        __u8 response;
  77} __attribute__((packed));
  78
  79struct virtio_scsi_event {
  80        __virtio32 event;
  81        __u8 lun[8];
  82        __virtio32 reason;
  83} __attribute__((packed));
  84
  85struct virtio_scsi_config {
  86        __u32 num_queues;
  87        __u32 seg_max;
  88        __u32 max_sectors;
  89        __u32 cmd_per_lun;
  90        __u32 event_info_size;
  91        __u32 sense_size;
  92        __u32 cdb_size;
  93        __u16 max_channel;
  94        __u16 max_target;
  95        __u32 max_lun;
  96} __attribute__((packed));
  97
  98/* Feature Bits */
  99#define VIRTIO_SCSI_F_INOUT                    0
 100#define VIRTIO_SCSI_F_HOTPLUG                  1
 101#define VIRTIO_SCSI_F_CHANGE                   2
 102
 103/* Response codes */
 104#define VIRTIO_SCSI_S_OK                       0
 105#define VIRTIO_SCSI_S_OVERRUN                  1
 106#define VIRTIO_SCSI_S_ABORTED                  2
 107#define VIRTIO_SCSI_S_BAD_TARGET               3
 108#define VIRTIO_SCSI_S_RESET                    4
 109#define VIRTIO_SCSI_S_BUSY                     5
 110#define VIRTIO_SCSI_S_TRANSPORT_FAILURE        6
 111#define VIRTIO_SCSI_S_TARGET_FAILURE           7
 112#define VIRTIO_SCSI_S_NEXUS_FAILURE            8
 113#define VIRTIO_SCSI_S_FAILURE                  9
 114#define VIRTIO_SCSI_S_FUNCTION_SUCCEEDED       10
 115#define VIRTIO_SCSI_S_FUNCTION_REJECTED        11
 116#define VIRTIO_SCSI_S_INCORRECT_LUN            12
 117
 118/* Controlq type codes.  */
 119#define VIRTIO_SCSI_T_TMF                      0
 120#define VIRTIO_SCSI_T_AN_QUERY                 1
 121#define VIRTIO_SCSI_T_AN_SUBSCRIBE             2
 122
 123/* Valid TMF subtypes.  */
 124#define VIRTIO_SCSI_T_TMF_ABORT_TASK           0
 125#define VIRTIO_SCSI_T_TMF_ABORT_TASK_SET       1
 126#define VIRTIO_SCSI_T_TMF_CLEAR_ACA            2
 127#define VIRTIO_SCSI_T_TMF_CLEAR_TASK_SET       3
 128#define VIRTIO_SCSI_T_TMF_I_T_NEXUS_RESET      4
 129#define VIRTIO_SCSI_T_TMF_LOGICAL_UNIT_RESET   5
 130#define VIRTIO_SCSI_T_TMF_QUERY_TASK           6
 131#define VIRTIO_SCSI_T_TMF_QUERY_TASK_SET       7
 132
 133/* Events.  */
 134#define VIRTIO_SCSI_T_EVENTS_MISSED            0x80000000
 135#define VIRTIO_SCSI_T_NO_EVENT                 0
 136#define VIRTIO_SCSI_T_TRANSPORT_RESET          1
 137#define VIRTIO_SCSI_T_ASYNC_NOTIFY             2
 138#define VIRTIO_SCSI_T_PARAM_CHANGE             3
 139
 140/* Reasons of transport reset event */
 141#define VIRTIO_SCSI_EVT_RESET_HARD             0
 142#define VIRTIO_SCSI_EVT_RESET_RESCAN           1
 143#define VIRTIO_SCSI_EVT_RESET_REMOVED          2
 144
 145#define VIRTIO_SCSI_S_SIMPLE                   0
 146#define VIRTIO_SCSI_S_ORDERED                  1
 147#define VIRTIO_SCSI_S_HEAD                     2
 148#define VIRTIO_SCSI_S_ACA                      3
 149
 150
 151#endif /* _LINUX_VIRTIO_SCSI_H */
 152