| 15 | /* |
| 16 | * MAX_COMMAND_SIZE is: |
| 17 | * The longest fixed-length SCSI CDB as per the SCSI standard. |
| 18 | * fixed-length means: commands that their size can be determined |
| 19 | * by their opcode and the CDB does not carry a length specifier, (unlike |
| 20 | * the VARIABLE_LENGTH_CMD(0x7f) command). This is actually not exactly |
| 21 | * true and the SCSI standard also defines extended commands and |
| 22 | * vendor specific commands that can be bigger than 16 bytes. The kernel |
| 23 | * will support these using the same infrastructure used for VARLEN CDB's. |
| 24 | * So in effect MAX_COMMAND_SIZE means the maximum size command scsi-ml |
| 25 | * supports without specifying a cmd_len by ULD's |
| 26 | */ |
| 27 | #define MAX_COMMAND_SIZE 16 |
| 28 | #if (MAX_COMMAND_SIZE > BLK_MAX_CDB) |
| 29 | # error MAX_COMMAND_SIZE can not be bigger than BLK_MAX_CDB |
| 30 | #endif |
| 31 | |
| 32 | struct scsi_data_buffer { |
| 33 | struct sg_table table; |
| 34 | unsigned length; |
| 35 | int resid; |
| 36 | }; |
41 | | * has been completed. It currently doesn't have much use other |
42 | | * than printk's. Some lldd's use this number for other purposes. |
43 | | * It's almost certain that such usages are either incorrect or |
44 | | * meaningless. Please kill all usages other than printk's. Also, |
45 | | * as this number is always identical to ->pid, please convert |
46 | | * printk's to use ->pid, so that we can kill this field. |
| 64 | * has been completed. It is a bug for LLDDs to use this number |
| 65 | * for purposes other than printk (and even that is only useful |
| 66 | * for debugging). |
121 | | /* |
122 | | * These are the values that scsi_cmd->state can take. |
123 | | */ |
124 | | #define SCSI_STATE_TIMEOUT 0x1000 |
125 | | #define SCSI_STATE_FINISHED 0x1001 |
126 | | #define SCSI_STATE_FAILED 0x1002 |
127 | | #define SCSI_STATE_QUEUED 0x1003 |
128 | | #define SCSI_STATE_UNUSED 0x1006 |
129 | | #define SCSI_STATE_DISCONNECTING 0x1008 |
130 | | #define SCSI_STATE_INITIALIZING 0x1009 |
131 | | #define SCSI_STATE_BHQUEUE 0x100a |
132 | | #define SCSI_STATE_MLQUEUE 0x100b |
133 | | |
134 | | |
| 144 | extern int scsi_init_io(struct scsi_cmnd *cmd, gfp_t gfp_mask); |
| 145 | extern void scsi_release_buffers(struct scsi_cmnd *cmd); |
| 146 | |
| 147 | extern int scsi_dma_map(struct scsi_cmnd *cmd); |
| 148 | extern void scsi_dma_unmap(struct scsi_cmnd *cmd); |
| 149 | |
| 150 | struct scsi_cmnd *scsi_allocate_command(gfp_t gfp_mask); |
| 151 | void scsi_free_command(gfp_t gfp_mask, struct scsi_cmnd *cmd); |
| 152 | |
| 153 | static inline unsigned scsi_sg_count(struct scsi_cmnd *cmd) |
| 154 | { |
| 155 | return cmd->sdb.table.nents; |
| 156 | } |
| 157 | |
| 158 | static inline struct scatterlist *scsi_sglist(struct scsi_cmnd *cmd) |
| 159 | { |
| 160 | return cmd->sdb.table.sgl; |
| 161 | } |
| 162 | |
| 163 | static inline unsigned scsi_bufflen(struct scsi_cmnd *cmd) |
| 164 | { |
| 165 | return cmd->sdb.length; |
| 166 | } |
| 167 | |
| 168 | static inline void scsi_set_resid(struct scsi_cmnd *cmd, int resid) |
| 169 | { |
| 170 | cmd->sdb.resid = resid; |
| 171 | } |
| 172 | |
| 173 | static inline int scsi_get_resid(struct scsi_cmnd *cmd) |
| 174 | { |
| 175 | return cmd->sdb.resid; |
| 176 | } |
| 177 | |
| 178 | #define scsi_for_each_sg(cmd, sg, nseg, __i) \ |
| 179 | for_each_sg(scsi_sglist(cmd), sg, nseg, __i) |
| 180 | |
| 181 | static inline int scsi_bidi_cmnd(struct scsi_cmnd *cmd) |
| 182 | { |
| 183 | return blk_bidi_rq(cmd->request) && |
| 184 | (cmd->request->next_rq->special != NULL); |
| 185 | } |
| 186 | |
| 187 | static inline struct scsi_data_buffer *scsi_in(struct scsi_cmnd *cmd) |
| 188 | { |
| 189 | return scsi_bidi_cmnd(cmd) ? |
| 190 | cmd->request->next_rq->special : &cmd->sdb; |
| 191 | } |
| 192 | |
| 193 | static inline struct scsi_data_buffer *scsi_out(struct scsi_cmnd *cmd) |
| 194 | { |
| 195 | return &cmd->sdb; |
| 196 | } |
| 197 | |
| 198 | static inline int scsi_sg_copy_from_buffer(struct scsi_cmnd *cmd, |
| 199 | void *buf, int buflen) |
| 200 | { |
| 201 | return sg_copy_from_buffer(scsi_sglist(cmd), scsi_sg_count(cmd), |
| 202 | buf, buflen); |
| 203 | } |
| 204 | |
| 205 | static inline int scsi_sg_copy_to_buffer(struct scsi_cmnd *cmd, |
| 206 | void *buf, int buflen) |
| 207 | { |
| 208 | return sg_copy_to_buffer(scsi_sglist(cmd), scsi_sg_count(cmd), |
| 209 | buf, buflen); |
| 210 | } |
| 211 | |