]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - include/scsi/scsi_transport_fc.h
Merge remote-tracking branches 'asoc/fix/arizona', 'asoc/fix/dpcm', 'asoc/fix/dwc...
[karo-tx-linux.git] / include / scsi / scsi_transport_fc.h
index bf66ea6bed2b024467841e840f1f2b597f4fae81..924c8e614b451684ae0f4623cf9921d7274800fc 100644 (file)
 #define SCSI_TRANSPORT_FC_H
 
 #include <linux/sched.h>
+#include <linux/bsg-lib.h>
 #include <asm/unaligned.h>
 #include <scsi/scsi.h>
 #include <scsi/scsi_netlink.h>
+#include <scsi/scsi_host.h>
 
 struct scsi_transport_template;
 
@@ -624,48 +626,6 @@ struct fc_host_attrs {
 #define fc_host_dev_loss_tmo(x) \
        (((struct fc_host_attrs *)(x)->shost_data)->dev_loss_tmo)
 
-
-struct fc_bsg_buffer {
-       unsigned int payload_len;
-       int sg_cnt;
-       struct scatterlist *sg_list;
-};
-
-/* Values for fc_bsg_job->state_flags (bitflags) */
-#define FC_RQST_STATE_INPROGRESS       0
-#define FC_RQST_STATE_DONE             1
-
-struct fc_bsg_job {
-       struct Scsi_Host *shost;
-       struct fc_rport *rport;
-       struct device *dev;
-       struct request *req;
-       spinlock_t job_lock;
-       unsigned int state_flags;
-       unsigned int ref_cnt;
-       void (*job_done)(struct fc_bsg_job *);
-
-       struct fc_bsg_request *request;
-       struct fc_bsg_reply *reply;
-       unsigned int request_len;
-       unsigned int reply_len;
-       /*
-        * On entry : reply_len indicates the buffer size allocated for
-        * the reply.
-        *
-        * Upon completion : the message handler must set reply_len
-        *  to indicates the size of the reply to be returned to the
-        *  caller.
-        */
-
-       /* DMA payloads for the request/response */
-       struct fc_bsg_buffer request_payload;
-       struct fc_bsg_buffer reply_payload;
-
-       void *dd_data;                  /* Used for driver-specific storage */
-};
-
-
 /* The functions by which the transport class and the driver communicate */
 struct fc_function_template {
        void    (*get_rport_dev_loss_tmo)(struct fc_rport *);
@@ -702,8 +662,8 @@ struct fc_function_template {
        int     (* it_nexus_response)(struct Scsi_Host *, u64, int);
 
        /* bsg support */
-       int     (*bsg_request)(struct fc_bsg_job *);
-       int     (*bsg_timeout)(struct fc_bsg_job *);
+       int     (*bsg_request)(struct bsg_job *);
+       int     (*bsg_timeout)(struct bsg_job *);
 
        /* allocation lengths for host-specific data */
        u32                             dd_fcrport_size;
@@ -849,4 +809,18 @@ struct fc_vport *fc_vport_create(struct Scsi_Host *shost, int channel,
 int fc_vport_terminate(struct fc_vport *vport);
 int fc_block_scsi_eh(struct scsi_cmnd *cmnd);
 
+static inline struct Scsi_Host *fc_bsg_to_shost(struct bsg_job *job)
+{
+       if (scsi_is_host_device(job->dev))
+               return dev_to_shost(job->dev);
+       return rport_to_shost(dev_to_rport(job->dev));
+}
+
+static inline struct fc_rport *fc_bsg_to_rport(struct bsg_job *job)
+{
+       if (scsi_is_fc_rport(job->dev))
+               return dev_to_rport(job->dev);
+       return NULL;
+}
+
 #endif /* SCSI_TRANSPORT_FC_H */