sg.h raw

   1  #ifndef _SCSI_SG_H
   2  #define _SCSI_SG_H
   3  
   4  #define SG_DXFER_NONE -1
   5  #define SG_DXFER_TO_DEV -2
   6  #define SG_DXFER_FROM_DEV -3
   7  #define SG_DXFER_TO_FROM_DEV -4
   8  #define SG_FLAG_DIRECT_IO 1
   9  #define SG_FLAG_LUN_INHIBIT 2
  10  #define SG_FLAG_NO_DXFER 0x10000
  11  #define SG_INFO_OK_MASK 0x1
  12  #define SG_INFO_OK 0x0
  13  #define SG_INFO_CHECK 0x1
  14  #define SG_INFO_DIRECT_IO_MASK 0x6
  15  #define SG_INFO_INDIRECT_IO 0x0
  16  #define SG_INFO_DIRECT_IO 0x2
  17  #define SG_INFO_MIXED_IO 0x4
  18  #define SG_EMULATED_HOST 0x2203
  19  #define SG_SET_TRANSFORM 0x2204
  20  #define SG_GET_TRANSFORM 0x2205
  21  #define SG_SET_RESERVED_SIZE 0x2275
  22  #define SG_GET_RESERVED_SIZE 0x2272
  23  #define SG_GET_SCSI_ID 0x2276
  24  #define SG_SET_FORCE_LOW_DMA 0x2279
  25  #define SG_GET_LOW_DMA 0x227a
  26  #define SG_SET_FORCE_PACK_ID 0x227b
  27  #define SG_GET_PACK_ID 0x227c
  28  #define SG_GET_NUM_WAITING 0x227d
  29  #define SG_GET_SG_TABLESIZE 0x227F
  30  #define SG_GET_VERSION_NUM 0x2282
  31  #define SG_SCSI_RESET 0x2284
  32  #define SG_SCSI_RESET_NOTHING 0
  33  #define SG_SCSI_RESET_DEVICE 1
  34  #define SG_SCSI_RESET_BUS 2
  35  #define SG_SCSI_RESET_HOST 3
  36  #define SG_IO 0x2285
  37  #define SG_GET_REQUEST_TABLE 0x2286
  38  #define SG_SET_KEEP_ORPHAN 0x2287
  39  #define SG_GET_KEEP_ORPHAN 0x2288
  40  #define SG_SCATTER_SZ (8 * 4096)
  41  #define SG_DEFAULT_RETRIES 1
  42  #define SG_DEF_FORCE_LOW_DMA 0
  43  #define SG_DEF_FORCE_PACK_ID 0
  44  #define SG_DEF_KEEP_ORPHAN 0
  45  #define SG_DEF_RESERVED_SIZE SG_SCATTER_SZ
  46  #define SG_MAX_QUEUE 16
  47  #define SG_BIG_BUFF SG_DEF_RESERVED_SIZE
  48  #define SG_MAX_SENSE 16
  49  #define SG_SET_TIMEOUT 0x2201
  50  #define SG_GET_TIMEOUT 0x2202
  51  #define SG_GET_COMMAND_Q 0x2270
  52  #define SG_SET_COMMAND_Q 0x2271
  53  #define SG_SET_DEBUG 0x227e
  54  #define SG_NEXT_CMD_LEN 0x2283
  55  #define SG_DEFAULT_TIMEOUT (60*100) /* 60*HZ */
  56  #define SG_DEF_COMMAND_Q 0
  57  #define SG_DEF_UNDERRUN_FLAG 0
  58  
  59  typedef struct sg_iovec {
  60  	void *iov_base;
  61  	unsigned long iov_len;
  62  } sg_iovec_t;
  63  
  64  typedef struct sg_io_hdr { 
  65  	int interface_id; 
  66  	int dxfer_direction; 
  67  	unsigned char cmd_len;
  68  	unsigned char mx_sb_len;
  69  	unsigned short iovec_count;
  70  	unsigned dxfer_len;
  71  	void *dxferp;
  72  	unsigned char *cmdp;
  73  	unsigned char *sbp;
  74  	unsigned timeout;
  75  	unsigned flags;
  76  	int pack_id;
  77  	void *usr_ptr;
  78  	unsigned char status;
  79  	unsigned char masked_status;
  80  	unsigned char msg_status;
  81  	unsigned char sb_len_wr;
  82  	unsigned short host_status;
  83  	unsigned short driver_status;
  84  	int resid; 
  85  	unsigned int duration;
  86  	unsigned int info;
  87  } sg_io_hdr_t;
  88  
  89  struct sg_scsi_id {
  90  	int host_no;
  91  	int channel;
  92  	int scsi_id;
  93  	int lun;
  94  	int scsi_type;
  95  	short h_cmd_per_lun;
  96  	short d_queue_depth;
  97  	int unused[2];
  98  };
  99  
 100  typedef struct sg_req_info {
 101  	char req_state;
 102  	char orphan;
 103  	char sg_io_owned;
 104  	char problem;
 105  	int pack_id;
 106  	void *usr_ptr;
 107  	unsigned duration; 
 108  	int unused; 
 109  } sg_req_info_t;
 110  
 111  typedef struct sg_io_hdr Sg_io_hdr;
 112  typedef struct sg_io_vec Sg_io_vec;
 113  typedef struct sg_scsi_id Sg_scsi_id;
 114  typedef struct sg_req_info Sg_req_info;
 115  
 116  struct sg_header {
 117  	int pack_len;
 118  	int reply_len;
 119  	int pack_id;
 120  	int result;
 121  	unsigned twelve_byte:1;
 122  	unsigned target_status:5;
 123  	unsigned host_status:8;
 124  	unsigned driver_status:8;
 125  	unsigned other_flags:10;
 126  	unsigned char sense_buffer[SG_MAX_SENSE];
 127  };
 128  
 129  #endif
 130