1 #ifndef _SCSI_SCSI_REQUEST_H
2 #define _SCSI_SCSI_REQUEST_H
4 #include <scsi/scsi_cmnd.h>
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.
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
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
32 unsigned sr_bufflen
; /* Size of data buffer */
33 void *sr_buffer
; /* Data buffer */
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 */
48 extern struct scsi_request
*scsi_allocate_request(struct scsi_device
*, gfp_t
);
49 extern void scsi_release_request(struct scsi_request
*);
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
);
54 #endif /* _SCSI_SCSI_REQUEST_H */