Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #ifndef _SCSI_SCSI_REQUEST_H |
| 2 | #define _SCSI_SCSI_REQUEST_H |
| 3 | |
| 4 | #include <scsi/scsi_cmnd.h> |
| 5 | |
| 6 | struct request; |
| 7 | struct scsi_cmnd; |
| 8 | struct scsi_device; |
| 9 | struct Scsi_Host; |
| 10 | |
| 11 | |
| 12 | /* |
| 13 | * This is essentially a slimmed down version of Scsi_Cmnd. The point of |
| 14 | * having this is that requests that are injected into the queue as result |
| 15 | * of things like ioctls and character devices shouldn't be using a |
| 16 | * Scsi_Cmnd until such a time that the command is actually at the head |
| 17 | * of the queue and being sent to the driver. |
| 18 | */ |
| 19 | struct scsi_request { |
| 20 | int sr_magic; |
| 21 | int sr_result; /* Status code from lower level driver */ |
| 22 | unsigned char sr_sense_buffer[SCSI_SENSE_BUFFERSIZE]; /* obtained by REQUEST SENSE |
| 23 | * when CHECK CONDITION is |
| 24 | * received on original command |
| 25 | * (auto-sense) */ |
| 26 | |
| 27 | struct Scsi_Host *sr_host; |
| 28 | struct scsi_device *sr_device; |
| 29 | struct scsi_cmnd *sr_command; |
| 30 | struct request *sr_request; /* A copy of the command we are |
| 31 | working on */ |
| 32 | unsigned sr_bufflen; /* Size of data buffer */ |
| 33 | void *sr_buffer; /* Data buffer */ |
| 34 | int sr_allowed; |
| 35 | enum dma_data_direction sr_data_direction; |
| 36 | unsigned char sr_cmd_len; |
| 37 | unsigned char sr_cmnd[MAX_COMMAND_SIZE]; |
| 38 | void (*sr_done) (struct scsi_cmnd *); /* Mid-level done function */ |
| 39 | int sr_timeout_per_command; |
| 40 | unsigned short sr_use_sg; /* Number of pieces of scatter-gather */ |
| 41 | unsigned short sr_sglist_len; /* size of malloc'd scatter-gather list */ |
| 42 | unsigned sr_underflow; /* Return error if less than |
| 43 | this amount is transferred */ |
| 44 | void *upper_private_data; /* reserved for owner (usually upper |
| 45 | level driver) of this request */ |
| 46 | }; |
| 47 | |
Al Viro | c53033f | 2005-10-21 03:22:08 -0400 | [diff] [blame] | 48 | extern struct scsi_request *scsi_allocate_request(struct scsi_device *, gfp_t); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 49 | extern void scsi_release_request(struct scsi_request *); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 50 | extern void scsi_do_req(struct scsi_request *, const void *cmnd, |
| 51 | void *buffer, unsigned bufflen, |
| 52 | void (*done) (struct scsi_cmnd *), |
| 53 | int timeout, int retries); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 54 | #endif /* _SCSI_SCSI_REQUEST_H */ |