1 #ifndef _SCSI_SCSI_CMND_H 2 #define _SCSI_SCSI_CMND_H 3 4 #include <linux/dma-mapping.h> 5 #include <linux/blkdev.h> 6 #include <linux/list.h> 7 #include <linux/types.h> 8 #include <linux/timer.h> 9 #include <linux/scatterlist.h> 10 11 struct Scsi_Host; 12 struct scsi_device; 13 14 struct scsi_data_buffer { 15 struct sg_table table; 16 unsigned length; 17 int resid; 18 }; 19 20 /* embedded in scsi_cmnd */ 21 struct scsi_pointer { 22 char *ptr; /* data pointer */ 23 int this_residual; /* left in this buffer */ 24 struct scatterlist *buffer; /* which buffer */ 25 int buffers_residual; /* how many buffers left */ 26 27 dma_addr_t dma_handle; 28 29 volatile int Status; 30 volatile int Message; 31 volatile int have_data_in; 32 volatile int sent_command; 33 volatile int phase; 34 }; 35 36 struct scsi_cmnd { 37 struct scsi_device *device; 38 struct list_head list; /* scsi_cmnd participates in queue lists */ 39 struct list_head eh_entry; /* entry for the host eh_cmd_q */ 40 int eh_eflags; /* Used by error handlr */ 41 42 /* 43 * A SCSI Command is assigned a nonzero serial_number before passed 44 * to the driver's queue command function. The serial_number is 45 * cleared when scsi_done is entered indicating that the command 46 * has been completed. It is a bug for LLDDs to use this number 47 * for purposes other than printk (and even that is only useful 48 * for debugging). 49 */ 50 unsigned long serial_number; 51 52 /* 53 * This is set to jiffies as it was when the command was first 54 * allocated. It is used to time how long the command has 55 * been outstanding 56 */ 57 unsigned long jiffies_at_alloc; 58 59 int retries; 60 int allowed; 61 int timeout_per_command; 62 63 unsigned char cmd_len; 64 enum dma_data_direction sc_data_direction; 65 66 /* These elements define the operation we are about to perform */ 67 #define MAX_COMMAND_SIZE 16 68 unsigned char cmnd[MAX_COMMAND_SIZE]; 69 70 struct timer_list eh_timeout; /* Used to time out the command. */ 71 72 /* These elements define the operation we ultimately want to perform */ 73 struct scsi_data_buffer sdb; 74 unsigned underflow; /* Return error if less than 75 this amount is transferred */ 76 77 unsigned transfersize; /* How much we are guaranteed to 78 transfer with each SCSI transfer 79 (ie, between disconnect / 80 reconnects. Probably == sector 81 size */ 82 83 struct request *request; /* The command we are 84 working on */ 85 86 #define SCSI_SENSE_BUFFERSIZE 96 87 unsigned char *sense_buffer; 88 /* obtained by REQUEST SENSE when 89 * CHECK CONDITION is received on original 90 * command (auto-sense) */ 91 92 /* Low-level done function - can be used by low-level driver to point 93 * to completion function. Not used by mid/upper level code. */ 94 void (*scsi_done) (struct scsi_cmnd *); 95 96 /* 97 * The following fields can be written to by the host specific code. 98 * Everything else should be left alone. 99 */ 100 struct scsi_pointer SCp; /* Scratchpad used by some host adapters */ 101 102 unsigned char *host_scribble; /* The host adapter is allowed to 103 * call scsi_malloc and get some memory 104 * and hang it here. The host adapter 105 * is also expected to call scsi_free 106 * to release this memory. (The memory 107 * obtained by scsi_malloc is guaranteed 108 * to be at an address < 16Mb). */ 109 110 int result; /* Status code from lower level driver */ 111 112 unsigned char tag; /* SCSI-II queued command tag */ 113 }; 114 115 extern struct scsi_cmnd *scsi_get_command(struct scsi_device *, gfp_t); 116 extern struct scsi_cmnd *__scsi_get_command(struct Scsi_Host *, gfp_t); 117 extern void scsi_put_command(struct scsi_cmnd *); 118 extern void __scsi_put_command(struct Scsi_Host *, struct scsi_cmnd *, 119 struct device *); 120 extern void scsi_finish_command(struct scsi_cmnd *cmd); 121 extern void scsi_req_abort_cmd(struct scsi_cmnd *cmd); 122 123 extern void *scsi_kmap_atomic_sg(struct scatterlist *sg, int sg_count, 124 size_t *offset, size_t *len); 125 extern void scsi_kunmap_atomic_sg(void *virt); 126 127 extern int scsi_init_io(struct scsi_cmnd *cmd, gfp_t gfp_mask); 128 extern void scsi_release_buffers(struct scsi_cmnd *cmd); 129 130 extern int scsi_dma_map(struct scsi_cmnd *cmd); 131 extern void scsi_dma_unmap(struct scsi_cmnd *cmd); 132 133 static inline unsigned scsi_sg_count(struct scsi_cmnd *cmd) 134 { 135 return cmd->sdb.table.nents; 136 } 137 138 static inline struct scatterlist *scsi_sglist(struct scsi_cmnd *cmd) 139 { 140 return cmd->sdb.table.sgl; 141 } 142 143 static inline unsigned scsi_bufflen(struct scsi_cmnd *cmd) 144 { 145 return cmd->sdb.length; 146 } 147 148 static inline void scsi_set_resid(struct scsi_cmnd *cmd, int resid) 149 { 150 cmd->sdb.resid = resid; 151 } 152 153 static inline int scsi_get_resid(struct scsi_cmnd *cmd) 154 { 155 return cmd->sdb.resid; 156 } 157 158 #define scsi_for_each_sg(cmd, sg, nseg, __i) \ 159 for_each_sg(scsi_sglist(cmd), sg, nseg, __i) 160 161 static inline int scsi_bidi_cmnd(struct scsi_cmnd *cmd) 162 { 163 return blk_bidi_rq(cmd->request) && 164 (cmd->request->next_rq->special != NULL); 165 } 166 167 static inline struct scsi_data_buffer *scsi_in(struct scsi_cmnd *cmd) 168 { 169 return scsi_bidi_cmnd(cmd) ? 170 cmd->request->next_rq->special : &cmd->sdb; 171 } 172 173 static inline struct scsi_data_buffer *scsi_out(struct scsi_cmnd *cmd) 174 { 175 return &cmd->sdb; 176 } 177 178 #endif /* _SCSI_SCSI_CMND_H */ 179