Blame view
include/linux/bsg.h
3.02 KB
3d6392cfb
|
1 2 |
#ifndef BSG_H #define BSG_H |
4ab3b73f8
|
3 |
#include <linux/types.h> |
15d10b611
|
4 5 6 7 8 |
#define BSG_PROTOCOL_SCSI 0 #define BSG_SUB_PROTOCOL_SCSI_CMD 0 #define BSG_SUB_PROTOCOL_SCSI_TMF 1 #define BSG_SUB_PROTOCOL_SCSI_TRANSPORT 2 |
05378940c
|
9 10 11 12 13 14 15 |
/* * For flags member below * sg.h sg_io_hdr also has bits defined for it's flags member. However * none of these bits are implemented/used by bsg. The bits below are * allocated to not conflict with sg.h ones anyway. */ #define BSG_FLAG_Q_AT_TAIL 0x10 /* default, == 0 at this bit, is Q_AT_HEAD */ |
45977d0e8
|
16 |
struct sg_io_v4 { |
3862153b6
|
17 18 19 |
__s32 guard; /* [i] 'Q' to differentiate from v3 */ __u32 protocol; /* [i] 0 -> SCSI , .... */ __u32 subprotocol; /* [i] 0 -> SCSI command, 1 -> SCSI task |
45977d0e8
|
20 |
management function, .... */ |
3862153b6
|
21 22 |
__u32 request_len; /* [i] in bytes */ __u64 request; /* [i], [*i] {SCSI: cdb} */ |
0c6a89ba6
|
23 |
__u64 request_tag; /* [i] {SCSI: task tag (only if flagged)} */ |
3862153b6
|
24 |
__u32 request_attr; /* [i] {SCSI: task attribute} */ |
3862153b6
|
25 |
__u32 request_priority; /* [i] {SCSI: task priority} */ |
0c6a89ba6
|
26 |
__u32 request_extra; /* [i] {spare, for padding} */ |
3862153b6
|
27 28 |
__u32 max_response_len; /* [i] in bytes */ __u64 response; /* [i], [*o] {SCSI: (auto)sense data} */ |
45977d0e8
|
29 |
|
0c6a89ba6
|
30 31 32 |
/* "dout_": data out (to device); "din_": data in (from device) */ __u32 dout_iovec_count; /* [i] 0 -> "flat" dout transfer else dout_xfer points to array of iovec */ |
3862153b6
|
33 |
__u32 dout_xfer_len; /* [i] bytes to be transferred to device */ |
0c6a89ba6
|
34 |
__u32 din_iovec_count; /* [i] 0 -> "flat" din transfer */ |
3862153b6
|
35 36 37 |
__u32 din_xfer_len; /* [i] bytes to be transferred from device */ __u64 dout_xferp; /* [i], [*i] */ __u64 din_xferp; /* [i], [*o] */ |
45977d0e8
|
38 |
|
3862153b6
|
39 40 41 42 |
__u32 timeout; /* [i] units: millisecond */ __u32 flags; /* [i] bit mask */ __u64 usr_ptr; /* [i->o] unused internally */ __u32 spare_in; /* [i] */ |
45977d0e8
|
43 |
|
3862153b6
|
44 45 46 47 48 49 50 |
__u32 driver_status; /* [o] 0 -> ok */ __u32 transport_status; /* [o] 0 -> ok */ __u32 device_status; /* [o] {SCSI: command completion status} */ __u32 retry_delay; /* [o] {SCSI: status auxiliary information} */ __u32 info; /* [o] additional information */ __u32 duration; /* [o] time to complete, in milliseconds */ __u32 response_len; /* [o] bytes of response actually written */ |
0c6a89ba6
|
51 52 53 |
__s32 din_resid; /* [o] din_xfer_len - actual_din_xfer_len */ __s32 dout_resid; /* [o] dout_xfer_len - actual_dout_xfer_len */ __u64 generated_tag; /* [o] {SCSI: transport generated task tag} */ |
3862153b6
|
54 |
__u32 spare_out; /* [o] */ |
45977d0e8
|
55 |
|
3862153b6
|
56 |
__u32 padding; |
45977d0e8
|
57 58 59 |
}; #ifdef __KERNEL__ |
3d6392cfb
|
60 61 |
#if defined(CONFIG_BLK_DEV_BSG) struct bsg_class_device { |
ee959b00c
|
62 |
struct device *class_dev; |
97f46ae45
|
63 |
struct device *parent; |
3d6392cfb
|
64 |
int minor; |
d351af01b
|
65 |
struct request_queue *queue; |
97f46ae45
|
66 67 |
struct kref ref; void (*release)(struct device *); |
3d6392cfb
|
68 |
}; |
97f46ae45
|
69 70 71 |
extern int bsg_register_queue(struct request_queue *q, struct device *parent, const char *name, void (*release)(struct device *)); |
d351af01b
|
72 |
extern void bsg_unregister_queue(struct request_queue *); |
3d6392cfb
|
73 |
#else |
97f46ae45
|
74 75 76 |
static inline int bsg_register_queue(struct request_queue *q, struct device *parent, const char *name, void (*release)(struct device *)) |
a4ee0df8b
|
77 78 79 |
{ return 0; } |
97f46ae45
|
80 |
static inline void bsg_unregister_queue(struct request_queue *q) |
a4ee0df8b
|
81 82 |
{ } |
3d6392cfb
|
83 |
#endif |
45977d0e8
|
84 |
#endif /* __KERNEL__ */ |
3d6392cfb
|
85 |
#endif |