X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=include%2Flinux%2Fbsg.h;h=cf0303a6061195de840a22d97ff24a7b41d4d49e;hb=982f8184f9a9251ba4e5c6d79ec32d25c0ad3cc8;hp=f968726cfadc69ff0f0d350f6480fe125ccb397c;hpb=1594a3f0eb526c73bc3915e8da13f2abf0ea1acd;p=safe%2Fjmp%2Flinux-2.6 diff --git a/include/linux/bsg.h b/include/linux/bsg.h index f968726..cf0303a6 100644 --- a/include/linux/bsg.h +++ b/include/linux/bsg.h @@ -1,62 +1,82 @@ #ifndef BSG_H #define BSG_H +#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 + struct sg_io_v4 { - s32 guard; /* [i] 'Q' to differentiate from v3 */ - u32 protocol; /* [i] 0 -> SCSI , .... */ - u32 subprotocol; /* [i] 0 -> SCSI command, 1 -> SCSI task + __s32 guard; /* [i] 'Q' to differentiate from v3 */ + __u32 protocol; /* [i] 0 -> SCSI , .... */ + __u32 subprotocol; /* [i] 0 -> SCSI command, 1 -> SCSI task management function, .... */ - u32 request_len; /* [i] in bytes */ - u64 request; /* [i], [*i] {SCSI: cdb} */ - u32 request_attr; /* [i] {SCSI: task attribute} */ - u32 request_tag; /* [i] {SCSI: task tag (only if flagged)} */ - u32 request_priority; /* [i] {SCSI: task priority} */ - u32 max_response_len; /* [i] in bytes */ - u64 response; /* [i], [*o] {SCSI: (auto)sense data} */ + __u32 request_len; /* [i] in bytes */ + __u64 request; /* [i], [*i] {SCSI: cdb} */ + __u64 request_tag; /* [i] {SCSI: task tag (only if flagged)} */ + __u32 request_attr; /* [i] {SCSI: task attribute} */ + __u32 request_priority; /* [i] {SCSI: task priority} */ + __u32 request_extra; /* [i] {spare, for padding} */ + __u32 max_response_len; /* [i] in bytes */ + __u64 response; /* [i], [*o] {SCSI: (auto)sense data} */ - /* "din_" for data in (from device); "dout_" for data out (to device) */ - u32 dout_xfer_len; /* [i] bytes to be transferred to device */ - u32 din_xfer_len; /* [i] bytes to be transferred from device */ - u64 dout_xferp; /* [i], [*i] */ - u64 din_xferp; /* [i], [*o] */ + /* "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 */ + __u32 dout_xfer_len; /* [i] bytes to be transferred to device */ + __u32 din_iovec_count; /* [i] 0 -> "flat" din transfer */ + __u32 din_xfer_len; /* [i] bytes to be transferred from device */ + __u64 dout_xferp; /* [i], [*i] */ + __u64 din_xferp; /* [i], [*o] */ - u32 timeout; /* [i] units: millisecond */ - u32 flags; /* [i] bit mask */ - u64 usr_ptr; /* [i->o] unused internally */ - u32 spare_in; /* [i] */ + __u32 timeout; /* [i] units: millisecond */ + __u32 flags; /* [i] bit mask */ + __u64 usr_ptr; /* [i->o] unused internally */ + __u32 spare_in; /* [i] */ - 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 */ - s32 din_resid; /* [o] actual_din_xfer_len - din_xfer_len */ - u32 generated_tag; /* [o] {SCSI: task tag that transport chose} */ - u32 spare_out; /* [o] */ + __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 */ + __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} */ + __u32 spare_out; /* [o] */ - u32 padding; + __u32 padding; }; #ifdef __KERNEL__ #if defined(CONFIG_BLK_DEV_BSG) struct bsg_class_device { - struct class_device *class_dev; - struct device *dev; + struct device *class_dev; + struct device *parent; int minor; - struct gendisk *disk; - struct list_head list; + struct request_queue *queue; + struct kref ref; + void (*release)(struct device *); }; -extern int bsg_register_disk(struct gendisk *); -extern void bsg_unregister_disk(struct gendisk *); +extern int bsg_register_queue(struct request_queue *q, + struct device *parent, const char *name, + void (*release)(struct device *)); +extern void bsg_unregister_queue(struct request_queue *); #else -struct bsg_class_device { }; -#define bsg_register_disk(disk) (0) -#define bsg_unregister_disk(disk) do { } while (0) +static inline int bsg_register_queue(struct request_queue *q, + struct device *parent, const char *name, + void (*release)(struct device *)) +{ + return 0; +} +static inline void bsg_unregister_queue(struct request_queue *q) +{ +} #endif #endif /* __KERNEL__ */