diff options
Diffstat (limited to 'drivers/infiniband/ulp/srp/ib_srp.h')
-rw-r--r-- | drivers/infiniband/ulp/srp/ib_srp.h | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/drivers/infiniband/ulp/srp/ib_srp.h b/drivers/infiniband/ulp/srp/ib_srp.h index c5cd43aae860..5b581fb8eb0d 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.h +++ b/drivers/infiniband/ulp/srp/ib_srp.h | |||
@@ -46,6 +46,7 @@ | |||
46 | #include <rdma/ib_verbs.h> | 46 | #include <rdma/ib_verbs.h> |
47 | #include <rdma/ib_sa.h> | 47 | #include <rdma/ib_sa.h> |
48 | #include <rdma/ib_cm.h> | 48 | #include <rdma/ib_cm.h> |
49 | #include <rdma/ib_fmr_pool.h> | ||
49 | 50 | ||
50 | enum { | 51 | enum { |
51 | SRP_PATH_REC_TIMEOUT_MS = 1000, | 52 | SRP_PATH_REC_TIMEOUT_MS = 1000, |
@@ -55,20 +56,21 @@ enum { | |||
55 | SRP_DLID_REDIRECT = 2, | 56 | SRP_DLID_REDIRECT = 2, |
56 | 57 | ||
57 | SRP_MAX_LUN = 512, | 58 | SRP_MAX_LUN = 512, |
58 | SRP_MAX_IU_LEN = 256, | 59 | SRP_DEF_SG_TABLESIZE = 12, |
59 | 60 | ||
60 | SRP_RQ_SHIFT = 6, | 61 | SRP_RQ_SHIFT = 6, |
61 | SRP_RQ_SIZE = 1 << SRP_RQ_SHIFT, | 62 | SRP_RQ_SIZE = 1 << SRP_RQ_SHIFT, |
62 | SRP_SQ_SIZE = SRP_RQ_SIZE - 1, | 63 | SRP_SQ_SIZE = SRP_RQ_SIZE - 1, |
63 | SRP_CQ_SIZE = SRP_SQ_SIZE + SRP_RQ_SIZE, | 64 | SRP_CQ_SIZE = SRP_SQ_SIZE + SRP_RQ_SIZE, |
64 | 65 | ||
65 | SRP_TAG_TSK_MGMT = 1 << (SRP_RQ_SHIFT + 1) | 66 | SRP_TAG_TSK_MGMT = 1 << (SRP_RQ_SHIFT + 1), |
67 | |||
68 | SRP_FMR_SIZE = 256, | ||
69 | SRP_FMR_POOL_SIZE = 1024, | ||
70 | SRP_FMR_DIRTY_SIZE = SRP_FMR_POOL_SIZE / 4 | ||
66 | }; | 71 | }; |
67 | 72 | ||
68 | #define SRP_OP_RECV (1 << 31) | 73 | #define SRP_OP_RECV (1 << 31) |
69 | #define SRP_MAX_INDIRECT ((SRP_MAX_IU_LEN - \ | ||
70 | sizeof (struct srp_cmd) - \ | ||
71 | sizeof (struct srp_indirect_buf)) / 16) | ||
72 | 74 | ||
73 | enum srp_target_state { | 75 | enum srp_target_state { |
74 | SRP_TARGET_LIVE, | 76 | SRP_TARGET_LIVE, |
@@ -77,15 +79,24 @@ enum srp_target_state { | |||
77 | SRP_TARGET_REMOVED | 79 | SRP_TARGET_REMOVED |
78 | }; | 80 | }; |
79 | 81 | ||
80 | struct srp_host { | 82 | struct srp_device { |
81 | u8 initiator_port_id[16]; | 83 | struct list_head dev_list; |
82 | struct ib_device *dev; | 84 | struct ib_device *dev; |
83 | u8 port; | ||
84 | struct ib_pd *pd; | 85 | struct ib_pd *pd; |
85 | struct ib_mr *mr; | 86 | struct ib_mr *mr; |
87 | struct ib_fmr_pool *fmr_pool; | ||
88 | int fmr_page_shift; | ||
89 | int fmr_page_size; | ||
90 | unsigned long fmr_page_mask; | ||
91 | }; | ||
92 | |||
93 | struct srp_host { | ||
94 | u8 initiator_port_id[16]; | ||
95 | struct srp_device *dev; | ||
96 | u8 port; | ||
86 | struct class_device class_dev; | 97 | struct class_device class_dev; |
87 | struct list_head target_list; | 98 | struct list_head target_list; |
88 | struct mutex target_mutex; | 99 | spinlock_t target_lock; |
89 | struct completion released; | 100 | struct completion released; |
90 | struct list_head list; | 101 | struct list_head list; |
91 | }; | 102 | }; |
@@ -95,6 +106,7 @@ struct srp_request { | |||
95 | struct scsi_cmnd *scmnd; | 106 | struct scsi_cmnd *scmnd; |
96 | struct srp_iu *cmd; | 107 | struct srp_iu *cmd; |
97 | struct srp_iu *tsk_mgmt; | 108 | struct srp_iu *tsk_mgmt; |
109 | struct ib_pool_fmr *fmr; | ||
98 | /* | 110 | /* |
99 | * Fake scatterlist used when scmnd->use_sg==0. Can be killed | 111 | * Fake scatterlist used when scmnd->use_sg==0. Can be killed |
100 | * when the SCSI midlayer no longer generates non-SG commands. | 112 | * when the SCSI midlayer no longer generates non-SG commands. |
@@ -110,6 +122,7 @@ struct srp_target_port { | |||
110 | __be64 id_ext; | 122 | __be64 id_ext; |
111 | __be64 ioc_guid; | 123 | __be64 ioc_guid; |
112 | __be64 service_id; | 124 | __be64 service_id; |
125 | u16 io_class; | ||
113 | struct srp_host *srp_host; | 126 | struct srp_host *srp_host; |
114 | struct Scsi_Host *scsi_host; | 127 | struct Scsi_Host *scsi_host; |
115 | char target_name[32]; | 128 | char target_name[32]; |
@@ -126,6 +139,8 @@ struct srp_target_port { | |||
126 | int max_ti_iu_len; | 139 | int max_ti_iu_len; |
127 | s32 req_lim; | 140 | s32 req_lim; |
128 | 141 | ||
142 | int zero_req_lim; | ||
143 | |||
129 | unsigned rx_head; | 144 | unsigned rx_head; |
130 | struct srp_iu *rx_ring[SRP_RQ_SIZE]; | 145 | struct srp_iu *rx_ring[SRP_RQ_SIZE]; |
131 | 146 | ||