forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-09 95099d4622f8cb224d94e314c7a8e0df60b13f87
kernel/drivers/infiniband/ulp/srp/ib_srp.h
....@@ -44,7 +44,6 @@
4444 #include <rdma/ib_verbs.h>
4545 #include <rdma/ib_sa.h>
4646 #include <rdma/ib_cm.h>
47
-#include <rdma/ib_fmr_pool.h>
4847 #include <rdma/rdma_cm.h>
4948
5049 enum {
....@@ -67,6 +66,17 @@
6766 SRP_TAG_TSK_MGMT = 1U << 31,
6867
6968 SRP_MAX_PAGES_PER_MR = 512,
69
+
70
+ SRP_MAX_ADD_CDB_LEN = 16,
71
+
72
+ SRP_MAX_IMM_SGE = 2,
73
+ SRP_MAX_SGE = SRP_MAX_IMM_SGE + 1,
74
+ /*
75
+ * Choose the immediate data offset such that a 32 byte CDB still fits.
76
+ */
77
+ SRP_IMM_DATA_OFFSET = sizeof(struct srp_cmd) +
78
+ SRP_MAX_ADD_CDB_LEN +
79
+ sizeof(struct srp_imm_buf),
7080 };
7181
7282 enum srp_target_state {
....@@ -84,8 +94,7 @@
8494 /*
8595 * @mr_page_mask: HCA memory registration page mask.
8696 * @mr_page_size: HCA memory registration page size.
87
- * @mr_max_size: Maximum size in bytes of a single FMR / FR registration
88
- * request.
97
+ * @mr_max_size: Maximum size in bytes of a single FR registration request.
8998 */
9099 struct srp_device {
91100 struct list_head dev_list;
....@@ -96,9 +105,7 @@
96105 int mr_page_size;
97106 int mr_max_size;
98107 int max_pages_per_mr;
99
- bool has_fmr;
100108 bool has_fr;
101
- bool use_fmr;
102109 bool use_fast_reg;
103110 };
104111
....@@ -116,11 +123,7 @@
116123 struct srp_request {
117124 struct scsi_cmnd *scmnd;
118125 struct srp_iu *cmd;
119
- union {
120
- struct ib_pool_fmr **fmr_list;
121
- struct srp_fr_desc **fr_list;
122
- };
123
- u64 *map_page;
126
+ struct srp_fr_desc **fr_list;
124127 struct srp_direct_buf *indirect_desc;
125128 dma_addr_t indirect_dma_addr;
126129 short nmdesc;
....@@ -130,6 +133,8 @@
130133 /**
131134 * struct srp_rdma_ch
132135 * @comp_vector: Completion vector used by this RDMA channel.
136
+ * @max_it_iu_len: Maximum initiator-to-target information unit length.
137
+ * @max_ti_iu_len: Maximum target-to-initiator information unit length.
133138 */
134139 struct srp_rdma_ch {
135140 /* These are RW in the hot path, and commonly used together */
....@@ -142,10 +147,11 @@
142147 struct ib_cq *send_cq;
143148 struct ib_cq *recv_cq;
144149 struct ib_qp *qp;
145
- union {
146
- struct ib_fmr_pool *fmr_pool;
147
- struct srp_fr_pool *fr_pool;
148
- };
150
+ struct srp_fr_pool *fr_pool;
151
+ uint32_t max_it_iu_len;
152
+ uint32_t max_ti_iu_len;
153
+ u8 max_imm_sge;
154
+ bool use_imm_data;
149155
150156 /* Everything above this point is used in the hot path of
151157 * command processing. Try to keep them packed into cachelines.
....@@ -169,7 +175,6 @@
169175 struct srp_iu **tx_ring;
170176 struct srp_iu **rx_ring;
171177 struct srp_request *req_ring;
172
- int max_ti_iu_len;
173178 int comp_vector;
174179
175180 u64 tsk_mgmt_tag;
....@@ -194,7 +199,7 @@
194199 u32 ch_count;
195200 u32 lkey;
196201 enum srp_target_state state;
197
- unsigned int max_iu_len;
202
+ uint32_t max_it_iu_size;
198203 unsigned int cmd_sg_cnt;
199204 unsigned int indirect_size;
200205 bool allow_ext_sg;
....@@ -231,11 +236,13 @@
231236 union {
232237 struct sockaddr_in ip4;
233238 struct sockaddr_in6 ip6;
239
+ struct sockaddr sa;
234240 struct sockaddr_storage ss;
235241 } src;
236242 union {
237243 struct sockaddr_in ip4;
238244 struct sockaddr_in6 ip6;
245
+ struct sockaddr sa;
239246 struct sockaddr_storage ss;
240247 } dst;
241248 bool src_specified;
....@@ -259,6 +266,8 @@
259266 void *buf;
260267 size_t size;
261268 enum dma_data_direction direction;
269
+ u32 num_sge;
270
+ struct ib_sge sge[SRP_MAX_SGE];
262271 struct ib_cqe cqe;
263272 };
264273
....@@ -289,7 +298,7 @@
289298 int max_page_list_len;
290299 spinlock_t lock;
291300 struct list_head free_list;
292
- struct srp_fr_desc desc[0];
301
+ struct srp_fr_desc desc[];
293302 };
294303
295304 /**
....@@ -299,19 +308,15 @@
299308 * @pages: Array with DMA addresses of pages being considered for
300309 * memory registration.
301310 * @base_dma_addr: DMA address of the first page that has not yet been mapped.
302
- * @dma_len: Number of bytes that will be registered with the next
303
- * FMR or FR memory registration call.
311
+ * @dma_len: Number of bytes that will be registered with the next FR
312
+ * memory registration call.
304313 * @total_len: Total number of bytes in the sg-list being mapped.
305314 * @npages: Number of page addresses in the pages[] array.
306
- * @nmdesc: Number of FMR or FR memory descriptors used for mapping.
315
+ * @nmdesc: Number of FR memory descriptors used for mapping.
307316 * @ndesc: Number of SRP buffer descriptors that have been filled in.
308317 */
309318 struct srp_map_state {
310319 union {
311
- struct {
312
- struct ib_pool_fmr **next;
313
- struct ib_pool_fmr **end;
314
- } fmr;
315320 struct {
316321 struct srp_fr_desc **next;
317322 struct srp_fr_desc **end;