linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / infiniband / ulp / srp / ib_srp.h
index 5b581fb..4e7727d 100644 (file)
@@ -38,7 +38,6 @@
 #include <linux/types.h>
 #include <linux/list.h>
 #include <linux/mutex.h>
-#include <linux/scatterlist.h>
 
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_cmnd.h>
@@ -46,7 +45,6 @@
 #include <rdma/ib_verbs.h>
 #include <rdma/ib_sa.h>
 #include <rdma/ib_cm.h>
-#include <rdma/ib_fmr_pool.h>
 
 enum {
        SRP_PATH_REC_TIMEOUT_MS = 1000,
@@ -56,21 +54,20 @@ enum {
        SRP_DLID_REDIRECT       = 2,
 
        SRP_MAX_LUN             = 512,
-       SRP_DEF_SG_TABLESIZE    = 12,
+       SRP_MAX_IU_LEN          = 256,
 
        SRP_RQ_SHIFT            = 6,
        SRP_RQ_SIZE             = 1 << SRP_RQ_SHIFT,
        SRP_SQ_SIZE             = SRP_RQ_SIZE - 1,
        SRP_CQ_SIZE             = SRP_SQ_SIZE + SRP_RQ_SIZE,
 
-       SRP_TAG_TSK_MGMT        = 1 << (SRP_RQ_SHIFT + 1),
-
-       SRP_FMR_SIZE            = 256,
-       SRP_FMR_POOL_SIZE       = 1024,
-       SRP_FMR_DIRTY_SIZE      = SRP_FMR_POOL_SIZE / 4
+       SRP_TAG_TSK_MGMT        = 1 << (SRP_RQ_SHIFT + 1)
 };
 
 #define SRP_OP_RECV            (1 << 31)
+#define SRP_MAX_INDIRECT       ((SRP_MAX_IU_LEN -                      \
+                                 sizeof (struct srp_cmd) -             \
+                                 sizeof (struct srp_indirect_buf)) / 16)
 
 enum srp_target_state {
        SRP_TARGET_LIVE,
@@ -79,24 +76,15 @@ enum srp_target_state {
        SRP_TARGET_REMOVED
 };
 
-struct srp_device {
-       struct list_head        dev_list;
+struct srp_host {
+       u8                      initiator_port_id[16];
        struct ib_device       *dev;
+       u8                      port;
        struct ib_pd           *pd;
        struct ib_mr           *mr;
-       struct ib_fmr_pool     *fmr_pool;
-       int                     fmr_page_shift;
-       int                     fmr_page_size;
-       unsigned long           fmr_page_mask;
-};
-
-struct srp_host {
-       u8                      initiator_port_id[16];
-       struct srp_device      *dev;
-       u8                      port;
        struct class_device     class_dev;
        struct list_head        target_list;
-       spinlock_t              target_lock;
+       struct mutex            target_mutex;
        struct completion       released;
        struct list_head        list;
 };
@@ -106,14 +94,9 @@ struct srp_request {
        struct scsi_cmnd       *scmnd;
        struct srp_iu          *cmd;
        struct srp_iu          *tsk_mgmt;
-       struct ib_pool_fmr     *fmr;
-       /*
-        * Fake scatterlist used when scmnd->use_sg==0.  Can be killed
-        * when the SCSI midlayer no longer generates non-SG commands.
-        */
-       struct scatterlist      fake_sg;
+       DECLARE_PCI_UNMAP_ADDR(direct_mapping)
        struct completion       done;
-       short                   index;
+       short                   next;
        u8                      cmd_done;
        u8                      tsk_status;
 };
@@ -122,7 +105,6 @@ struct srp_target_port {
        __be64                  id_ext;
        __be64                  ioc_guid;
        __be64                  service_id;
-       u16                     io_class;
        struct srp_host        *srp_host;
        struct Scsi_Host       *scsi_host;
        char                    target_name[32];
@@ -139,8 +121,6 @@ struct srp_target_port {
        int                     max_ti_iu_len;
        s32                     req_lim;
 
-       int                     zero_req_lim;
-
        unsigned                rx_head;
        struct srp_iu          *rx_ring[SRP_RQ_SIZE];
 
@@ -148,7 +128,7 @@ struct srp_target_port {
        unsigned                tx_tail;
        struct srp_iu          *tx_ring[SRP_SQ_SIZE + 1];
 
-       struct list_head        free_reqs;
+       int                     req_head;
        struct list_head        req_queue;
        struct srp_request      req_ring[SRP_SQ_SIZE];