master
  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
 59typedef struct sg_iovec {
 60	void *iov_base;
 61	unsigned long iov_len;
 62} sg_iovec_t;
 63
 64typedef 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
 89struct 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
100typedef 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
111typedef struct sg_io_hdr Sg_io_hdr;
112typedef struct sg_io_vec Sg_io_vec;
113typedef struct sg_scsi_id Sg_scsi_id;
114typedef struct sg_req_info Sg_req_info;
115
116struct 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