aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/bsg.h
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-16 13:50:19 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-16 13:50:19 -0400
commite245befce7af0a1e1347079ed62695b059594bd4 (patch)
tree08270a503c8945b4e6ba142728dc289de2b55542 /include/linux/bsg.h
parent14dc5249728ff699b1ca4dac01ad416a350a147a (diff)
parent58ff411e0d21592565ac9ab34f33a434f26e018b (diff)
Merge branch 'bsg' of git://git.kernel.dk/data/git/linux-2.6-block
* 'bsg' of git://git.kernel.dk/data/git/linux-2.6-block: (25 commits) bsg: Kconfig updates bsg: add SCSI transport-level request support bsg: add bidi support add a struct request pointer to the request structure bsg: fix the deadlock on discarding done commands bsg: fix a blocking read bug bsg: minor bug fixes improve bsg device allocation bind bsg to all SCSI devices bsg: bind bsg to request_queue instead of gendisk bsg: add a request_queue argument to scsi_cmd_ioctl() bsg: simplify __bsg_alloc_command failpath bsg: add cheasy error checks for sysfs stuff Add queue resizing support Replace s32, u32 and u64 with __s32, __u32 and __u64 in bsg.h for userspace bsg: silence a bogus gcc warning bsg: style cleanup bsg: use u32 etc instead of uint32_t bsg: add SG_IO to SG v4 bsg: replace SG v3 with SG v4 ...
Diffstat (limited to 'include/linux/bsg.h')
-rw-r--r--include/linux/bsg.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/include/linux/bsg.h b/include/linux/bsg.h
new file mode 100644
index 000000000000..bd998ca6cb2e
--- /dev/null
+++ b/include/linux/bsg.h
@@ -0,0 +1,70 @@
1#ifndef BSG_H
2#define BSG_H
3
4#define BSG_PROTOCOL_SCSI 0
5
6#define BSG_SUB_PROTOCOL_SCSI_CMD 0
7#define BSG_SUB_PROTOCOL_SCSI_TMF 1
8#define BSG_SUB_PROTOCOL_SCSI_TRANSPORT 2
9
10struct sg_io_v4 {
11 __s32 guard; /* [i] 'Q' to differentiate from v3 */
12 __u32 protocol; /* [i] 0 -> SCSI , .... */
13 __u32 subprotocol; /* [i] 0 -> SCSI command, 1 -> SCSI task
14 management function, .... */
15
16 __u32 request_len; /* [i] in bytes */
17 __u64 request; /* [i], [*i] {SCSI: cdb} */
18 __u32 request_attr; /* [i] {SCSI: task attribute} */
19 __u32 request_tag; /* [i] {SCSI: task tag (only if flagged)} */
20 __u32 request_priority; /* [i] {SCSI: task priority} */
21 __u32 max_response_len; /* [i] in bytes */
22 __u64 response; /* [i], [*o] {SCSI: (auto)sense data} */
23
24 /* "din_" for data in (from device); "dout_" for data out (to device) */
25 __u32 dout_xfer_len; /* [i] bytes to be transferred to device */
26 __u32 din_xfer_len; /* [i] bytes to be transferred from device */
27 __u64 dout_xferp; /* [i], [*i] */
28 __u64 din_xferp; /* [i], [*o] */
29
30 __u32 timeout; /* [i] units: millisecond */
31 __u32 flags; /* [i] bit mask */
32 __u64 usr_ptr; /* [i->o] unused internally */
33 __u32 spare_in; /* [i] */
34
35 __u32 driver_status; /* [o] 0 -> ok */
36 __u32 transport_status; /* [o] 0 -> ok */
37 __u32 device_status; /* [o] {SCSI: command completion status} */
38 __u32 retry_delay; /* [o] {SCSI: status auxiliary information} */
39 __u32 info; /* [o] additional information */
40 __u32 duration; /* [o] time to complete, in milliseconds */
41 __u32 response_len; /* [o] bytes of response actually written */
42 __s32 din_resid; /* [o] actual_din_xfer_len - din_xfer_len */
43 __u32 generated_tag; /* [o] {SCSI: task tag that transport chose} */
44 __u32 spare_out; /* [o] */
45
46 __u32 padding;
47};
48
49#ifdef __KERNEL__
50
51#if defined(CONFIG_BLK_DEV_BSG)
52struct bsg_class_device {
53 struct class_device *class_dev;
54 struct device *dev;
55 int minor;
56 struct list_head list;
57 struct request_queue *queue;
58};
59
60extern int bsg_register_queue(struct request_queue *, const char *);
61extern void bsg_unregister_queue(struct request_queue *);
62#else
63struct bsg_class_device { };
64#define bsg_register_queue(disk, name) (0)
65#define bsg_unregister_queue(disk) do { } while (0)
66#endif
67
68#endif /* __KERNEL__ */
69
70#endif