diff options
Diffstat (limited to 'drivers/infiniband/ulp/srp/ib_srp.h')
-rw-r--r-- | drivers/infiniband/ulp/srp/ib_srp.h | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/drivers/infiniband/ulp/srp/ib_srp.h b/drivers/infiniband/ulp/srp/ib_srp.h index 9dc6fc3fd89..020caf0c378 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.h +++ b/drivers/infiniband/ulp/srp/ib_srp.h | |||
@@ -69,9 +69,13 @@ enum { | |||
69 | SRP_TAG_NO_REQ = ~0U, | 69 | SRP_TAG_NO_REQ = ~0U, |
70 | SRP_TAG_TSK_MGMT = 1U << 31, | 70 | SRP_TAG_TSK_MGMT = 1U << 31, |
71 | 71 | ||
72 | SRP_FMR_SIZE = 256, | 72 | SRP_FMR_SIZE = 512, |
73 | SRP_FMR_MIN_SIZE = 128, | ||
73 | SRP_FMR_POOL_SIZE = 1024, | 74 | SRP_FMR_POOL_SIZE = 1024, |
74 | SRP_FMR_DIRTY_SIZE = SRP_FMR_POOL_SIZE / 4 | 75 | SRP_FMR_DIRTY_SIZE = SRP_FMR_POOL_SIZE / 4, |
76 | |||
77 | SRP_MAP_ALLOW_FMR = 0, | ||
78 | SRP_MAP_NO_FMR = 1, | ||
75 | }; | 79 | }; |
76 | 80 | ||
77 | enum srp_target_state { | 81 | enum srp_target_state { |
@@ -93,9 +97,9 @@ struct srp_device { | |||
93 | struct ib_pd *pd; | 97 | struct ib_pd *pd; |
94 | struct ib_mr *mr; | 98 | struct ib_mr *mr; |
95 | struct ib_fmr_pool *fmr_pool; | 99 | struct ib_fmr_pool *fmr_pool; |
96 | int fmr_page_shift; | ||
97 | int fmr_page_size; | ||
98 | u64 fmr_page_mask; | 100 | u64 fmr_page_mask; |
101 | int fmr_page_size; | ||
102 | int fmr_max_size; | ||
99 | }; | 103 | }; |
100 | 104 | ||
101 | struct srp_host { | 105 | struct srp_host { |
@@ -112,7 +116,11 @@ struct srp_request { | |||
112 | struct list_head list; | 116 | struct list_head list; |
113 | struct scsi_cmnd *scmnd; | 117 | struct scsi_cmnd *scmnd; |
114 | struct srp_iu *cmd; | 118 | struct srp_iu *cmd; |
115 | struct ib_pool_fmr *fmr; | 119 | struct ib_pool_fmr **fmr_list; |
120 | u64 *map_page; | ||
121 | struct srp_direct_buf *indirect_desc; | ||
122 | dma_addr_t indirect_dma_addr; | ||
123 | short nfmr; | ||
116 | short index; | 124 | short index; |
117 | }; | 125 | }; |
118 | 126 | ||
@@ -130,6 +138,10 @@ struct srp_target_port { | |||
130 | u32 lkey; | 138 | u32 lkey; |
131 | u32 rkey; | 139 | u32 rkey; |
132 | enum srp_target_state state; | 140 | enum srp_target_state state; |
141 | unsigned int max_iu_len; | ||
142 | unsigned int cmd_sg_cnt; | ||
143 | unsigned int indirect_size; | ||
144 | bool allow_ext_sg; | ||
133 | 145 | ||
134 | /* Everything above this point is used in the hot path of | 146 | /* Everything above this point is used in the hot path of |
135 | * command processing. Try to keep them packed into cachelines. | 147 | * command processing. Try to keep them packed into cachelines. |
@@ -144,6 +156,7 @@ struct srp_target_port { | |||
144 | struct Scsi_Host *scsi_host; | 156 | struct Scsi_Host *scsi_host; |
145 | char target_name[32]; | 157 | char target_name[32]; |
146 | unsigned int scsi_id; | 158 | unsigned int scsi_id; |
159 | unsigned int sg_tablesize; | ||
147 | 160 | ||
148 | struct ib_sa_path_rec path; | 161 | struct ib_sa_path_rec path; |
149 | __be16 orig_dgid[8]; | 162 | __be16 orig_dgid[8]; |
@@ -179,4 +192,19 @@ struct srp_iu { | |||
179 | enum dma_data_direction direction; | 192 | enum dma_data_direction direction; |
180 | }; | 193 | }; |
181 | 194 | ||
195 | struct srp_map_state { | ||
196 | struct ib_pool_fmr **next_fmr; | ||
197 | struct srp_direct_buf *desc; | ||
198 | u64 *pages; | ||
199 | dma_addr_t base_dma_addr; | ||
200 | u32 fmr_len; | ||
201 | u32 total_len; | ||
202 | unsigned int npages; | ||
203 | unsigned int nfmr; | ||
204 | unsigned int ndesc; | ||
205 | struct scatterlist *unmapped_sg; | ||
206 | int unmapped_index; | ||
207 | dma_addr_t unmapped_addr; | ||
208 | }; | ||
209 | |||
182 | #endif /* IB_SRP_H */ | 210 | #endif /* IB_SRP_H */ |