| | 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 | |