xref: /OK3568_Linux_fs/kernel/include/linux/qed/qed_rdma_if.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
2*4882a593Smuzhiyun /* QLogic qed NIC Driver
3*4882a593Smuzhiyun  * Copyright (c) 2015-2017  QLogic Corporation
4*4882a593Smuzhiyun  * Copyright (c) 2019-2020 Marvell International Ltd.
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef _QED_RDMA_IF_H
8*4882a593Smuzhiyun #define _QED_RDMA_IF_H
9*4882a593Smuzhiyun #include <linux/types.h>
10*4882a593Smuzhiyun #include <linux/delay.h>
11*4882a593Smuzhiyun #include <linux/list.h>
12*4882a593Smuzhiyun #include <linux/slab.h>
13*4882a593Smuzhiyun #include <linux/qed/qed_if.h>
14*4882a593Smuzhiyun #include <linux/qed/qed_ll2_if.h>
15*4882a593Smuzhiyun #include <linux/qed/rdma_common.h>
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #define QED_RDMA_MAX_CNQ_SIZE               (0xFFFF)
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun /* rdma interface */
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun enum qed_roce_qp_state {
22*4882a593Smuzhiyun 	QED_ROCE_QP_STATE_RESET,
23*4882a593Smuzhiyun 	QED_ROCE_QP_STATE_INIT,
24*4882a593Smuzhiyun 	QED_ROCE_QP_STATE_RTR,
25*4882a593Smuzhiyun 	QED_ROCE_QP_STATE_RTS,
26*4882a593Smuzhiyun 	QED_ROCE_QP_STATE_SQD,
27*4882a593Smuzhiyun 	QED_ROCE_QP_STATE_ERR,
28*4882a593Smuzhiyun 	QED_ROCE_QP_STATE_SQE
29*4882a593Smuzhiyun };
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun enum qed_rdma_qp_type {
32*4882a593Smuzhiyun 	QED_RDMA_QP_TYPE_RC,
33*4882a593Smuzhiyun 	QED_RDMA_QP_TYPE_XRC_INI,
34*4882a593Smuzhiyun 	QED_RDMA_QP_TYPE_XRC_TGT,
35*4882a593Smuzhiyun 	QED_RDMA_QP_TYPE_INVAL = 0xffff,
36*4882a593Smuzhiyun };
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun enum qed_rdma_tid_type {
39*4882a593Smuzhiyun 	QED_RDMA_TID_REGISTERED_MR,
40*4882a593Smuzhiyun 	QED_RDMA_TID_FMR,
41*4882a593Smuzhiyun 	QED_RDMA_TID_MW
42*4882a593Smuzhiyun };
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun struct qed_rdma_events {
45*4882a593Smuzhiyun 	void *context;
46*4882a593Smuzhiyun 	void (*affiliated_event)(void *context, u8 fw_event_code,
47*4882a593Smuzhiyun 				 void *fw_handle);
48*4882a593Smuzhiyun 	void (*unaffiliated_event)(void *context, u8 event_code);
49*4882a593Smuzhiyun };
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun struct qed_rdma_device {
52*4882a593Smuzhiyun 	u32 vendor_id;
53*4882a593Smuzhiyun 	u32 vendor_part_id;
54*4882a593Smuzhiyun 	u32 hw_ver;
55*4882a593Smuzhiyun 	u64 fw_ver;
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun 	u64 node_guid;
58*4882a593Smuzhiyun 	u64 sys_image_guid;
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun 	u8 max_cnq;
61*4882a593Smuzhiyun 	u8 max_sge;
62*4882a593Smuzhiyun 	u8 max_srq_sge;
63*4882a593Smuzhiyun 	u16 max_inline;
64*4882a593Smuzhiyun 	u32 max_wqe;
65*4882a593Smuzhiyun 	u32 max_srq_wqe;
66*4882a593Smuzhiyun 	u8 max_qp_resp_rd_atomic_resc;
67*4882a593Smuzhiyun 	u8 max_qp_req_rd_atomic_resc;
68*4882a593Smuzhiyun 	u64 max_dev_resp_rd_atomic_resc;
69*4882a593Smuzhiyun 	u32 max_cq;
70*4882a593Smuzhiyun 	u32 max_qp;
71*4882a593Smuzhiyun 	u32 max_srq;
72*4882a593Smuzhiyun 	u32 max_mr;
73*4882a593Smuzhiyun 	u64 max_mr_size;
74*4882a593Smuzhiyun 	u32 max_cqe;
75*4882a593Smuzhiyun 	u32 max_mw;
76*4882a593Smuzhiyun 	u32 max_mr_mw_fmr_pbl;
77*4882a593Smuzhiyun 	u64 max_mr_mw_fmr_size;
78*4882a593Smuzhiyun 	u32 max_pd;
79*4882a593Smuzhiyun 	u32 max_ah;
80*4882a593Smuzhiyun 	u8 max_pkey;
81*4882a593Smuzhiyun 	u16 max_srq_wr;
82*4882a593Smuzhiyun 	u8 max_stats_queues;
83*4882a593Smuzhiyun 	u32 dev_caps;
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun 	/* Abilty to support RNR-NAK generation */
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_RNR_NAK_MASK                           0x1
88*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_RNR_NAK_SHIFT                  0
89*4882a593Smuzhiyun 	/* Abilty to support shutdown port */
90*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_SHUTDOWN_PORT_MASK                     0x1
91*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_SHUTDOWN_PORT_SHIFT                    1
92*4882a593Smuzhiyun 	/* Abilty to support port active event */
93*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_PORT_ACTIVE_EVENT_MASK         0x1
94*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_PORT_ACTIVE_EVENT_SHIFT                2
95*4882a593Smuzhiyun 	/* Abilty to support port change event */
96*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_PORT_CHANGE_EVENT_MASK         0x1
97*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_PORT_CHANGE_EVENT_SHIFT                3
98*4882a593Smuzhiyun 	/* Abilty to support system image GUID */
99*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_SYS_IMAGE_MASK                 0x1
100*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_SYS_IMAGE_SHIFT                        4
101*4882a593Smuzhiyun 	/* Abilty to support bad P_Key counter support */
102*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_BAD_PKEY_CNT_MASK                      0x1
103*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_BAD_PKEY_CNT_SHIFT                     5
104*4882a593Smuzhiyun 	/* Abilty to support atomic operations */
105*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_ATOMIC_OP_MASK                 0x1
106*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_ATOMIC_OP_SHIFT                        6
107*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_RESIZE_CQ_MASK                 0x1
108*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_RESIZE_CQ_SHIFT                        7
109*4882a593Smuzhiyun 	/* Abilty to support modifying the maximum number of
110*4882a593Smuzhiyun 	 * outstanding work requests per QP
111*4882a593Smuzhiyun 	 */
112*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_RESIZE_MAX_WR_MASK                     0x1
113*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_RESIZE_MAX_WR_SHIFT                    8
114*4882a593Smuzhiyun 	/* Abilty to support automatic path migration */
115*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_AUTO_PATH_MIG_MASK                     0x1
116*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_AUTO_PATH_MIG_SHIFT                    9
117*4882a593Smuzhiyun 	/* Abilty to support the base memory management extensions */
118*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_BASE_MEMORY_EXT_MASK                   0x1
119*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_BASE_MEMORY_EXT_SHIFT          10
120*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_BASE_QUEUE_EXT_MASK                    0x1
121*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_BASE_QUEUE_EXT_SHIFT                   11
122*4882a593Smuzhiyun 	/* Abilty to support multipile page sizes per memory region */
123*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_MULTI_PAGE_PER_MR_EXT_MASK             0x1
124*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_MULTI_PAGE_PER_MR_EXT_SHIFT            12
125*4882a593Smuzhiyun 	/* Abilty to support block list physical buffer list */
126*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_BLOCK_MODE_MASK                        0x1
127*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_BLOCK_MODE_SHIFT                       13
128*4882a593Smuzhiyun 	/* Abilty to support zero based virtual addresses */
129*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_ZBVA_MASK                              0x1
130*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_ZBVA_SHIFT                             14
131*4882a593Smuzhiyun 	/* Abilty to support local invalidate fencing */
132*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_LOCAL_INV_FENCE_MASK                   0x1
133*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_LOCAL_INV_FENCE_SHIFT          15
134*4882a593Smuzhiyun 	/* Abilty to support Loopback on QP */
135*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_LB_INDICATOR_MASK                      0x1
136*4882a593Smuzhiyun #define QED_RDMA_DEV_CAP_LB_INDICATOR_SHIFT                     16
137*4882a593Smuzhiyun 	u64 page_size_caps;
138*4882a593Smuzhiyun 	u8 dev_ack_delay;
139*4882a593Smuzhiyun 	u32 reserved_lkey;
140*4882a593Smuzhiyun 	u32 bad_pkey_counter;
141*4882a593Smuzhiyun 	struct qed_rdma_events events;
142*4882a593Smuzhiyun };
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun enum qed_port_state {
145*4882a593Smuzhiyun 	QED_RDMA_PORT_UP,
146*4882a593Smuzhiyun 	QED_RDMA_PORT_DOWN,
147*4882a593Smuzhiyun };
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun enum qed_roce_capability {
150*4882a593Smuzhiyun 	QED_ROCE_V1 = 1 << 0,
151*4882a593Smuzhiyun 	QED_ROCE_V2 = 1 << 1,
152*4882a593Smuzhiyun };
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun struct qed_rdma_port {
155*4882a593Smuzhiyun 	enum qed_port_state port_state;
156*4882a593Smuzhiyun 	int link_speed;
157*4882a593Smuzhiyun 	u64 max_msg_size;
158*4882a593Smuzhiyun 	u8 source_gid_table_len;
159*4882a593Smuzhiyun 	void *source_gid_table_ptr;
160*4882a593Smuzhiyun 	u8 pkey_table_len;
161*4882a593Smuzhiyun 	void *pkey_table_ptr;
162*4882a593Smuzhiyun 	u32 pkey_bad_counter;
163*4882a593Smuzhiyun 	enum qed_roce_capability capability;
164*4882a593Smuzhiyun };
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun struct qed_rdma_cnq_params {
167*4882a593Smuzhiyun 	u8 num_pbl_pages;
168*4882a593Smuzhiyun 	u64 pbl_ptr;
169*4882a593Smuzhiyun };
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun /* The CQ Mode affects the CQ doorbell transaction size.
172*4882a593Smuzhiyun  * 64/32 bit machines should configure to 32/16 bits respectively.
173*4882a593Smuzhiyun  */
174*4882a593Smuzhiyun enum qed_rdma_cq_mode {
175*4882a593Smuzhiyun 	QED_RDMA_CQ_MODE_16_BITS,
176*4882a593Smuzhiyun 	QED_RDMA_CQ_MODE_32_BITS,
177*4882a593Smuzhiyun };
178*4882a593Smuzhiyun 
179*4882a593Smuzhiyun struct qed_roce_dcqcn_params {
180*4882a593Smuzhiyun 	u8 notification_point;
181*4882a593Smuzhiyun 	u8 reaction_point;
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun 	/* fields for notification point */
184*4882a593Smuzhiyun 	u32 cnp_send_timeout;
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun 	/* fields for reaction point */
187*4882a593Smuzhiyun 	u32 rl_bc_rate;
188*4882a593Smuzhiyun 	u16 rl_max_rate;
189*4882a593Smuzhiyun 	u16 rl_r_ai;
190*4882a593Smuzhiyun 	u16 rl_r_hai;
191*4882a593Smuzhiyun 	u16 dcqcn_g;
192*4882a593Smuzhiyun 	u32 dcqcn_k_us;
193*4882a593Smuzhiyun 	u32 dcqcn_timeout_us;
194*4882a593Smuzhiyun };
195*4882a593Smuzhiyun 
196*4882a593Smuzhiyun struct qed_rdma_start_in_params {
197*4882a593Smuzhiyun 	struct qed_rdma_events *events;
198*4882a593Smuzhiyun 	struct qed_rdma_cnq_params cnq_pbl_list[128];
199*4882a593Smuzhiyun 	u8 desired_cnq;
200*4882a593Smuzhiyun 	enum qed_rdma_cq_mode cq_mode;
201*4882a593Smuzhiyun 	struct qed_roce_dcqcn_params dcqcn_params;
202*4882a593Smuzhiyun 	u16 max_mtu;
203*4882a593Smuzhiyun 	u8 mac_addr[ETH_ALEN];
204*4882a593Smuzhiyun 	u8 iwarp_flags;
205*4882a593Smuzhiyun };
206*4882a593Smuzhiyun 
207*4882a593Smuzhiyun struct qed_rdma_add_user_out_params {
208*4882a593Smuzhiyun 	u16 dpi;
209*4882a593Smuzhiyun 	void __iomem *dpi_addr;
210*4882a593Smuzhiyun 	u64 dpi_phys_addr;
211*4882a593Smuzhiyun 	u32 dpi_size;
212*4882a593Smuzhiyun 	u16 wid_count;
213*4882a593Smuzhiyun };
214*4882a593Smuzhiyun 
215*4882a593Smuzhiyun enum roce_mode {
216*4882a593Smuzhiyun 	ROCE_V1,
217*4882a593Smuzhiyun 	ROCE_V2_IPV4,
218*4882a593Smuzhiyun 	ROCE_V2_IPV6,
219*4882a593Smuzhiyun 	MAX_ROCE_MODE
220*4882a593Smuzhiyun };
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun union qed_gid {
223*4882a593Smuzhiyun 	u8 bytes[16];
224*4882a593Smuzhiyun 	u16 words[8];
225*4882a593Smuzhiyun 	u32 dwords[4];
226*4882a593Smuzhiyun 	u64 qwords[2];
227*4882a593Smuzhiyun 	u32 ipv4_addr;
228*4882a593Smuzhiyun };
229*4882a593Smuzhiyun 
230*4882a593Smuzhiyun struct qed_rdma_register_tid_in_params {
231*4882a593Smuzhiyun 	u32 itid;
232*4882a593Smuzhiyun 	enum qed_rdma_tid_type tid_type;
233*4882a593Smuzhiyun 	u8 key;
234*4882a593Smuzhiyun 	u16 pd;
235*4882a593Smuzhiyun 	bool local_read;
236*4882a593Smuzhiyun 	bool local_write;
237*4882a593Smuzhiyun 	bool remote_read;
238*4882a593Smuzhiyun 	bool remote_write;
239*4882a593Smuzhiyun 	bool remote_atomic;
240*4882a593Smuzhiyun 	bool mw_bind;
241*4882a593Smuzhiyun 	u64 pbl_ptr;
242*4882a593Smuzhiyun 	bool pbl_two_level;
243*4882a593Smuzhiyun 	u8 pbl_page_size_log;
244*4882a593Smuzhiyun 	u8 page_size_log;
245*4882a593Smuzhiyun 	u64 length;
246*4882a593Smuzhiyun 	u64 vaddr;
247*4882a593Smuzhiyun 	bool phy_mr;
248*4882a593Smuzhiyun 	bool dma_mr;
249*4882a593Smuzhiyun 
250*4882a593Smuzhiyun 	bool dif_enabled;
251*4882a593Smuzhiyun 	u64 dif_error_addr;
252*4882a593Smuzhiyun };
253*4882a593Smuzhiyun 
254*4882a593Smuzhiyun struct qed_rdma_create_cq_in_params {
255*4882a593Smuzhiyun 	u32 cq_handle_lo;
256*4882a593Smuzhiyun 	u32 cq_handle_hi;
257*4882a593Smuzhiyun 	u32 cq_size;
258*4882a593Smuzhiyun 	u16 dpi;
259*4882a593Smuzhiyun 	bool pbl_two_level;
260*4882a593Smuzhiyun 	u64 pbl_ptr;
261*4882a593Smuzhiyun 	u16 pbl_num_pages;
262*4882a593Smuzhiyun 	u8 pbl_page_size_log;
263*4882a593Smuzhiyun 	u8 cnq_id;
264*4882a593Smuzhiyun 	u16 int_timeout;
265*4882a593Smuzhiyun };
266*4882a593Smuzhiyun 
267*4882a593Smuzhiyun struct qed_rdma_create_srq_in_params {
268*4882a593Smuzhiyun 	u64 pbl_base_addr;
269*4882a593Smuzhiyun 	u64 prod_pair_addr;
270*4882a593Smuzhiyun 	u16 num_pages;
271*4882a593Smuzhiyun 	u16 pd_id;
272*4882a593Smuzhiyun 	u16 page_size;
273*4882a593Smuzhiyun 
274*4882a593Smuzhiyun 	/* XRC related only */
275*4882a593Smuzhiyun 	bool reserved_key_en;
276*4882a593Smuzhiyun 	bool is_xrc;
277*4882a593Smuzhiyun 	u32 cq_cid;
278*4882a593Smuzhiyun 	u16 xrcd_id;
279*4882a593Smuzhiyun };
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun struct qed_rdma_destroy_cq_in_params {
282*4882a593Smuzhiyun 	u16 icid;
283*4882a593Smuzhiyun };
284*4882a593Smuzhiyun 
285*4882a593Smuzhiyun struct qed_rdma_destroy_cq_out_params {
286*4882a593Smuzhiyun 	u16 num_cq_notif;
287*4882a593Smuzhiyun };
288*4882a593Smuzhiyun 
289*4882a593Smuzhiyun struct qed_rdma_create_qp_in_params {
290*4882a593Smuzhiyun 	u32 qp_handle_lo;
291*4882a593Smuzhiyun 	u32 qp_handle_hi;
292*4882a593Smuzhiyun 	u32 qp_handle_async_lo;
293*4882a593Smuzhiyun 	u32 qp_handle_async_hi;
294*4882a593Smuzhiyun 	bool use_srq;
295*4882a593Smuzhiyun 	bool signal_all;
296*4882a593Smuzhiyun 	bool fmr_and_reserved_lkey;
297*4882a593Smuzhiyun 	u16 pd;
298*4882a593Smuzhiyun 	u16 dpi;
299*4882a593Smuzhiyun 	u16 sq_cq_id;
300*4882a593Smuzhiyun 	u16 sq_num_pages;
301*4882a593Smuzhiyun 	u64 sq_pbl_ptr;
302*4882a593Smuzhiyun 	u8 max_sq_sges;
303*4882a593Smuzhiyun 	u16 rq_cq_id;
304*4882a593Smuzhiyun 	u16 rq_num_pages;
305*4882a593Smuzhiyun 	u64 rq_pbl_ptr;
306*4882a593Smuzhiyun 	u16 srq_id;
307*4882a593Smuzhiyun 	u16 xrcd_id;
308*4882a593Smuzhiyun 	u8 stats_queue;
309*4882a593Smuzhiyun 	enum qed_rdma_qp_type qp_type;
310*4882a593Smuzhiyun 	u8 flags;
311*4882a593Smuzhiyun #define QED_ROCE_EDPM_MODE_MASK      0x1
312*4882a593Smuzhiyun #define QED_ROCE_EDPM_MODE_SHIFT     0
313*4882a593Smuzhiyun };
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun struct qed_rdma_create_qp_out_params {
316*4882a593Smuzhiyun 	u32 qp_id;
317*4882a593Smuzhiyun 	u16 icid;
318*4882a593Smuzhiyun 	void *rq_pbl_virt;
319*4882a593Smuzhiyun 	dma_addr_t rq_pbl_phys;
320*4882a593Smuzhiyun 	void *sq_pbl_virt;
321*4882a593Smuzhiyun 	dma_addr_t sq_pbl_phys;
322*4882a593Smuzhiyun };
323*4882a593Smuzhiyun 
324*4882a593Smuzhiyun struct qed_rdma_modify_qp_in_params {
325*4882a593Smuzhiyun 	u32 modify_flags;
326*4882a593Smuzhiyun #define QED_RDMA_MODIFY_QP_VALID_NEW_STATE_MASK               0x1
327*4882a593Smuzhiyun #define QED_RDMA_MODIFY_QP_VALID_NEW_STATE_SHIFT              0
328*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_PKEY_MASK                    0x1
329*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_PKEY_SHIFT                   1
330*4882a593Smuzhiyun #define QED_RDMA_MODIFY_QP_VALID_RDMA_OPS_EN_MASK             0x1
331*4882a593Smuzhiyun #define QED_RDMA_MODIFY_QP_VALID_RDMA_OPS_EN_SHIFT            2
332*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_DEST_QP_MASK                 0x1
333*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_DEST_QP_SHIFT                3
334*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_ADDRESS_VECTOR_MASK          0x1
335*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_ADDRESS_VECTOR_SHIFT         4
336*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_RQ_PSN_MASK                  0x1
337*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_RQ_PSN_SHIFT                 5
338*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_SQ_PSN_MASK                  0x1
339*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_SQ_PSN_SHIFT                 6
340*4882a593Smuzhiyun #define QED_RDMA_MODIFY_QP_VALID_MAX_RD_ATOMIC_REQ_MASK       0x1
341*4882a593Smuzhiyun #define QED_RDMA_MODIFY_QP_VALID_MAX_RD_ATOMIC_REQ_SHIFT      7
342*4882a593Smuzhiyun #define QED_RDMA_MODIFY_QP_VALID_MAX_RD_ATOMIC_RESP_MASK      0x1
343*4882a593Smuzhiyun #define QED_RDMA_MODIFY_QP_VALID_MAX_RD_ATOMIC_RESP_SHIFT     8
344*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_ACK_TIMEOUT_MASK             0x1
345*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_ACK_TIMEOUT_SHIFT            9
346*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_RETRY_CNT_MASK               0x1
347*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_RETRY_CNT_SHIFT              10
348*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_RNR_RETRY_CNT_MASK           0x1
349*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_RNR_RETRY_CNT_SHIFT          11
350*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_MIN_RNR_NAK_TIMER_MASK       0x1
351*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_MIN_RNR_NAK_TIMER_SHIFT      12
352*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_E2E_FLOW_CONTROL_EN_MASK     0x1
353*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_E2E_FLOW_CONTROL_EN_SHIFT    13
354*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_ROCE_MODE_MASK               0x1
355*4882a593Smuzhiyun #define QED_ROCE_MODIFY_QP_VALID_ROCE_MODE_SHIFT              14
356*4882a593Smuzhiyun 
357*4882a593Smuzhiyun 	enum qed_roce_qp_state new_state;
358*4882a593Smuzhiyun 	u16 pkey;
359*4882a593Smuzhiyun 	bool incoming_rdma_read_en;
360*4882a593Smuzhiyun 	bool incoming_rdma_write_en;
361*4882a593Smuzhiyun 	bool incoming_atomic_en;
362*4882a593Smuzhiyun 	bool e2e_flow_control_en;
363*4882a593Smuzhiyun 	u32 dest_qp;
364*4882a593Smuzhiyun 	bool lb_indication;
365*4882a593Smuzhiyun 	u16 mtu;
366*4882a593Smuzhiyun 	u8 traffic_class_tos;
367*4882a593Smuzhiyun 	u8 hop_limit_ttl;
368*4882a593Smuzhiyun 	u32 flow_label;
369*4882a593Smuzhiyun 	union qed_gid sgid;
370*4882a593Smuzhiyun 	union qed_gid dgid;
371*4882a593Smuzhiyun 	u16 udp_src_port;
372*4882a593Smuzhiyun 
373*4882a593Smuzhiyun 	u16 vlan_id;
374*4882a593Smuzhiyun 
375*4882a593Smuzhiyun 	u32 rq_psn;
376*4882a593Smuzhiyun 	u32 sq_psn;
377*4882a593Smuzhiyun 	u8 max_rd_atomic_resp;
378*4882a593Smuzhiyun 	u8 max_rd_atomic_req;
379*4882a593Smuzhiyun 	u32 ack_timeout;
380*4882a593Smuzhiyun 	u8 retry_cnt;
381*4882a593Smuzhiyun 	u8 rnr_retry_cnt;
382*4882a593Smuzhiyun 	u8 min_rnr_nak_timer;
383*4882a593Smuzhiyun 	bool sqd_async;
384*4882a593Smuzhiyun 	u8 remote_mac_addr[6];
385*4882a593Smuzhiyun 	u8 local_mac_addr[6];
386*4882a593Smuzhiyun 	bool use_local_mac;
387*4882a593Smuzhiyun 	enum roce_mode roce_mode;
388*4882a593Smuzhiyun };
389*4882a593Smuzhiyun 
390*4882a593Smuzhiyun struct qed_rdma_query_qp_out_params {
391*4882a593Smuzhiyun 	enum qed_roce_qp_state state;
392*4882a593Smuzhiyun 	u32 rq_psn;
393*4882a593Smuzhiyun 	u32 sq_psn;
394*4882a593Smuzhiyun 	bool draining;
395*4882a593Smuzhiyun 	u16 mtu;
396*4882a593Smuzhiyun 	u32 dest_qp;
397*4882a593Smuzhiyun 	bool incoming_rdma_read_en;
398*4882a593Smuzhiyun 	bool incoming_rdma_write_en;
399*4882a593Smuzhiyun 	bool incoming_atomic_en;
400*4882a593Smuzhiyun 	bool e2e_flow_control_en;
401*4882a593Smuzhiyun 	union qed_gid sgid;
402*4882a593Smuzhiyun 	union qed_gid dgid;
403*4882a593Smuzhiyun 	u32 flow_label;
404*4882a593Smuzhiyun 	u8 hop_limit_ttl;
405*4882a593Smuzhiyun 	u8 traffic_class_tos;
406*4882a593Smuzhiyun 	u32 timeout;
407*4882a593Smuzhiyun 	u8 rnr_retry;
408*4882a593Smuzhiyun 	u8 retry_cnt;
409*4882a593Smuzhiyun 	u8 min_rnr_nak_timer;
410*4882a593Smuzhiyun 	u16 pkey_index;
411*4882a593Smuzhiyun 	u8 max_rd_atomic;
412*4882a593Smuzhiyun 	u8 max_dest_rd_atomic;
413*4882a593Smuzhiyun 	bool sqd_async;
414*4882a593Smuzhiyun };
415*4882a593Smuzhiyun 
416*4882a593Smuzhiyun struct qed_rdma_create_srq_out_params {
417*4882a593Smuzhiyun 	u16 srq_id;
418*4882a593Smuzhiyun };
419*4882a593Smuzhiyun 
420*4882a593Smuzhiyun struct qed_rdma_destroy_srq_in_params {
421*4882a593Smuzhiyun 	u16 srq_id;
422*4882a593Smuzhiyun 	bool is_xrc;
423*4882a593Smuzhiyun };
424*4882a593Smuzhiyun 
425*4882a593Smuzhiyun struct qed_rdma_modify_srq_in_params {
426*4882a593Smuzhiyun 	u32 wqe_limit;
427*4882a593Smuzhiyun 	u16 srq_id;
428*4882a593Smuzhiyun 	bool is_xrc;
429*4882a593Smuzhiyun };
430*4882a593Smuzhiyun 
431*4882a593Smuzhiyun struct qed_rdma_stats_out_params {
432*4882a593Smuzhiyun 	u64 sent_bytes;
433*4882a593Smuzhiyun 	u64 sent_pkts;
434*4882a593Smuzhiyun 	u64 rcv_bytes;
435*4882a593Smuzhiyun 	u64 rcv_pkts;
436*4882a593Smuzhiyun };
437*4882a593Smuzhiyun 
438*4882a593Smuzhiyun struct qed_rdma_counters_out_params {
439*4882a593Smuzhiyun 	u64 pd_count;
440*4882a593Smuzhiyun 	u64 max_pd;
441*4882a593Smuzhiyun 	u64 dpi_count;
442*4882a593Smuzhiyun 	u64 max_dpi;
443*4882a593Smuzhiyun 	u64 cq_count;
444*4882a593Smuzhiyun 	u64 max_cq;
445*4882a593Smuzhiyun 	u64 qp_count;
446*4882a593Smuzhiyun 	u64 max_qp;
447*4882a593Smuzhiyun 	u64 tid_count;
448*4882a593Smuzhiyun 	u64 max_tid;
449*4882a593Smuzhiyun };
450*4882a593Smuzhiyun 
451*4882a593Smuzhiyun #define QED_ROCE_TX_HEAD_FAILURE        (1)
452*4882a593Smuzhiyun #define QED_ROCE_TX_FRAG_FAILURE        (2)
453*4882a593Smuzhiyun 
454*4882a593Smuzhiyun enum qed_iwarp_event_type {
455*4882a593Smuzhiyun 	QED_IWARP_EVENT_MPA_REQUEST,	  /* Passive side request received */
456*4882a593Smuzhiyun 	QED_IWARP_EVENT_PASSIVE_COMPLETE, /* ack on mpa response */
457*4882a593Smuzhiyun 	QED_IWARP_EVENT_ACTIVE_COMPLETE,  /* Active side reply received */
458*4882a593Smuzhiyun 	QED_IWARP_EVENT_DISCONNECT,
459*4882a593Smuzhiyun 	QED_IWARP_EVENT_CLOSE,
460*4882a593Smuzhiyun 	QED_IWARP_EVENT_IRQ_FULL,
461*4882a593Smuzhiyun 	QED_IWARP_EVENT_RQ_EMPTY,
462*4882a593Smuzhiyun 	QED_IWARP_EVENT_LLP_TIMEOUT,
463*4882a593Smuzhiyun 	QED_IWARP_EVENT_REMOTE_PROTECTION_ERROR,
464*4882a593Smuzhiyun 	QED_IWARP_EVENT_CQ_OVERFLOW,
465*4882a593Smuzhiyun 	QED_IWARP_EVENT_QP_CATASTROPHIC,
466*4882a593Smuzhiyun 	QED_IWARP_EVENT_ACTIVE_MPA_REPLY,
467*4882a593Smuzhiyun 	QED_IWARP_EVENT_LOCAL_ACCESS_ERROR,
468*4882a593Smuzhiyun 	QED_IWARP_EVENT_REMOTE_OPERATION_ERROR,
469*4882a593Smuzhiyun 	QED_IWARP_EVENT_TERMINATE_RECEIVED,
470*4882a593Smuzhiyun 	QED_IWARP_EVENT_SRQ_LIMIT,
471*4882a593Smuzhiyun 	QED_IWARP_EVENT_SRQ_EMPTY,
472*4882a593Smuzhiyun };
473*4882a593Smuzhiyun 
474*4882a593Smuzhiyun enum qed_tcp_ip_version {
475*4882a593Smuzhiyun 	QED_TCP_IPV4,
476*4882a593Smuzhiyun 	QED_TCP_IPV6,
477*4882a593Smuzhiyun };
478*4882a593Smuzhiyun 
479*4882a593Smuzhiyun struct qed_iwarp_cm_info {
480*4882a593Smuzhiyun 	enum qed_tcp_ip_version ip_version;
481*4882a593Smuzhiyun 	u32 remote_ip[4];
482*4882a593Smuzhiyun 	u32 local_ip[4];
483*4882a593Smuzhiyun 	u16 remote_port;
484*4882a593Smuzhiyun 	u16 local_port;
485*4882a593Smuzhiyun 	u16 vlan;
486*4882a593Smuzhiyun 	u8 ord;
487*4882a593Smuzhiyun 	u8 ird;
488*4882a593Smuzhiyun 	u16 private_data_len;
489*4882a593Smuzhiyun 	const void *private_data;
490*4882a593Smuzhiyun };
491*4882a593Smuzhiyun 
492*4882a593Smuzhiyun struct qed_iwarp_cm_event_params {
493*4882a593Smuzhiyun 	enum qed_iwarp_event_type event;
494*4882a593Smuzhiyun 	const struct qed_iwarp_cm_info *cm_info;
495*4882a593Smuzhiyun 	void *ep_context;	/* To be passed to accept call */
496*4882a593Smuzhiyun 	int status;
497*4882a593Smuzhiyun };
498*4882a593Smuzhiyun 
499*4882a593Smuzhiyun typedef int (*iwarp_event_handler) (void *context,
500*4882a593Smuzhiyun 				    struct qed_iwarp_cm_event_params *event);
501*4882a593Smuzhiyun 
502*4882a593Smuzhiyun struct qed_iwarp_connect_in {
503*4882a593Smuzhiyun 	iwarp_event_handler event_cb;
504*4882a593Smuzhiyun 	void *cb_context;
505*4882a593Smuzhiyun 	struct qed_rdma_qp *qp;
506*4882a593Smuzhiyun 	struct qed_iwarp_cm_info cm_info;
507*4882a593Smuzhiyun 	u16 mss;
508*4882a593Smuzhiyun 	u8 remote_mac_addr[ETH_ALEN];
509*4882a593Smuzhiyun 	u8 local_mac_addr[ETH_ALEN];
510*4882a593Smuzhiyun };
511*4882a593Smuzhiyun 
512*4882a593Smuzhiyun struct qed_iwarp_connect_out {
513*4882a593Smuzhiyun 	void *ep_context;
514*4882a593Smuzhiyun };
515*4882a593Smuzhiyun 
516*4882a593Smuzhiyun struct qed_iwarp_listen_in {
517*4882a593Smuzhiyun 	iwarp_event_handler event_cb;
518*4882a593Smuzhiyun 	void *cb_context;	/* passed to event_cb */
519*4882a593Smuzhiyun 	u32 max_backlog;
520*4882a593Smuzhiyun 	enum qed_tcp_ip_version ip_version;
521*4882a593Smuzhiyun 	u32 ip_addr[4];
522*4882a593Smuzhiyun 	u16 port;
523*4882a593Smuzhiyun 	u16 vlan;
524*4882a593Smuzhiyun };
525*4882a593Smuzhiyun 
526*4882a593Smuzhiyun struct qed_iwarp_listen_out {
527*4882a593Smuzhiyun 	void *handle;
528*4882a593Smuzhiyun };
529*4882a593Smuzhiyun 
530*4882a593Smuzhiyun struct qed_iwarp_accept_in {
531*4882a593Smuzhiyun 	void *ep_context;
532*4882a593Smuzhiyun 	void *cb_context;
533*4882a593Smuzhiyun 	struct qed_rdma_qp *qp;
534*4882a593Smuzhiyun 	const void *private_data;
535*4882a593Smuzhiyun 	u16 private_data_len;
536*4882a593Smuzhiyun 	u8 ord;
537*4882a593Smuzhiyun 	u8 ird;
538*4882a593Smuzhiyun };
539*4882a593Smuzhiyun 
540*4882a593Smuzhiyun struct qed_iwarp_reject_in {
541*4882a593Smuzhiyun 	void *ep_context;
542*4882a593Smuzhiyun 	void *cb_context;
543*4882a593Smuzhiyun 	const void *private_data;
544*4882a593Smuzhiyun 	u16 private_data_len;
545*4882a593Smuzhiyun };
546*4882a593Smuzhiyun 
547*4882a593Smuzhiyun struct qed_iwarp_send_rtr_in {
548*4882a593Smuzhiyun 	void *ep_context;
549*4882a593Smuzhiyun };
550*4882a593Smuzhiyun 
551*4882a593Smuzhiyun struct qed_roce_ll2_header {
552*4882a593Smuzhiyun 	void *vaddr;
553*4882a593Smuzhiyun 	dma_addr_t baddr;
554*4882a593Smuzhiyun 	size_t len;
555*4882a593Smuzhiyun };
556*4882a593Smuzhiyun 
557*4882a593Smuzhiyun struct qed_roce_ll2_buffer {
558*4882a593Smuzhiyun 	dma_addr_t baddr;
559*4882a593Smuzhiyun 	size_t len;
560*4882a593Smuzhiyun };
561*4882a593Smuzhiyun 
562*4882a593Smuzhiyun struct qed_roce_ll2_packet {
563*4882a593Smuzhiyun 	struct qed_roce_ll2_header header;
564*4882a593Smuzhiyun 	int n_seg;
565*4882a593Smuzhiyun 	struct qed_roce_ll2_buffer payload[RDMA_MAX_SGE_PER_SQ_WQE];
566*4882a593Smuzhiyun 	int roce_mode;
567*4882a593Smuzhiyun 	enum qed_ll2_tx_dest tx_dest;
568*4882a593Smuzhiyun };
569*4882a593Smuzhiyun 
570*4882a593Smuzhiyun enum qed_rdma_type {
571*4882a593Smuzhiyun 	QED_RDMA_TYPE_ROCE,
572*4882a593Smuzhiyun 	QED_RDMA_TYPE_IWARP
573*4882a593Smuzhiyun };
574*4882a593Smuzhiyun 
575*4882a593Smuzhiyun struct qed_dev_rdma_info {
576*4882a593Smuzhiyun 	struct qed_dev_info common;
577*4882a593Smuzhiyun 	enum qed_rdma_type rdma_type;
578*4882a593Smuzhiyun 	u8 user_dpm_enabled;
579*4882a593Smuzhiyun };
580*4882a593Smuzhiyun 
581*4882a593Smuzhiyun struct qed_rdma_ops {
582*4882a593Smuzhiyun 	const struct qed_common_ops *common;
583*4882a593Smuzhiyun 
584*4882a593Smuzhiyun 	int (*fill_dev_info)(struct qed_dev *cdev,
585*4882a593Smuzhiyun 			     struct qed_dev_rdma_info *info);
586*4882a593Smuzhiyun 	void *(*rdma_get_rdma_ctx)(struct qed_dev *cdev);
587*4882a593Smuzhiyun 
588*4882a593Smuzhiyun 	int (*rdma_init)(struct qed_dev *dev,
589*4882a593Smuzhiyun 			 struct qed_rdma_start_in_params *iparams);
590*4882a593Smuzhiyun 
591*4882a593Smuzhiyun 	int (*rdma_add_user)(void *rdma_cxt,
592*4882a593Smuzhiyun 			     struct qed_rdma_add_user_out_params *oparams);
593*4882a593Smuzhiyun 
594*4882a593Smuzhiyun 	void (*rdma_remove_user)(void *rdma_cxt, u16 dpi);
595*4882a593Smuzhiyun 	int (*rdma_stop)(void *rdma_cxt);
596*4882a593Smuzhiyun 	struct qed_rdma_device* (*rdma_query_device)(void *rdma_cxt);
597*4882a593Smuzhiyun 	struct qed_rdma_port* (*rdma_query_port)(void *rdma_cxt);
598*4882a593Smuzhiyun 	int (*rdma_get_start_sb)(struct qed_dev *cdev);
599*4882a593Smuzhiyun 	int (*rdma_get_min_cnq_msix)(struct qed_dev *cdev);
600*4882a593Smuzhiyun 	void (*rdma_cnq_prod_update)(void *rdma_cxt, u8 cnq_index, u16 prod);
601*4882a593Smuzhiyun 	int (*rdma_get_rdma_int)(struct qed_dev *cdev,
602*4882a593Smuzhiyun 				 struct qed_int_info *info);
603*4882a593Smuzhiyun 	int (*rdma_set_rdma_int)(struct qed_dev *cdev, u16 cnt);
604*4882a593Smuzhiyun 	int (*rdma_alloc_pd)(void *rdma_cxt, u16 *pd);
605*4882a593Smuzhiyun 	void (*rdma_dealloc_pd)(void *rdma_cxt, u16 pd);
606*4882a593Smuzhiyun 	int (*rdma_alloc_xrcd)(void *rdma_cxt, u16 *xrcd);
607*4882a593Smuzhiyun 	void (*rdma_dealloc_xrcd)(void *rdma_cxt, u16 xrcd);
608*4882a593Smuzhiyun 	int (*rdma_create_cq)(void *rdma_cxt,
609*4882a593Smuzhiyun 			      struct qed_rdma_create_cq_in_params *params,
610*4882a593Smuzhiyun 			      u16 *icid);
611*4882a593Smuzhiyun 	int (*rdma_destroy_cq)(void *rdma_cxt,
612*4882a593Smuzhiyun 			       struct qed_rdma_destroy_cq_in_params *iparams,
613*4882a593Smuzhiyun 			       struct qed_rdma_destroy_cq_out_params *oparams);
614*4882a593Smuzhiyun 	struct qed_rdma_qp *
615*4882a593Smuzhiyun 	(*rdma_create_qp)(void *rdma_cxt,
616*4882a593Smuzhiyun 			  struct qed_rdma_create_qp_in_params *iparams,
617*4882a593Smuzhiyun 			  struct qed_rdma_create_qp_out_params *oparams);
618*4882a593Smuzhiyun 
619*4882a593Smuzhiyun 	int (*rdma_modify_qp)(void *roce_cxt, struct qed_rdma_qp *qp,
620*4882a593Smuzhiyun 			      struct qed_rdma_modify_qp_in_params *iparams);
621*4882a593Smuzhiyun 
622*4882a593Smuzhiyun 	int (*rdma_query_qp)(void *rdma_cxt, struct qed_rdma_qp *qp,
623*4882a593Smuzhiyun 			     struct qed_rdma_query_qp_out_params *oparams);
624*4882a593Smuzhiyun 	int (*rdma_destroy_qp)(void *rdma_cxt, struct qed_rdma_qp *qp);
625*4882a593Smuzhiyun 
626*4882a593Smuzhiyun 	int
627*4882a593Smuzhiyun 	(*rdma_register_tid)(void *rdma_cxt,
628*4882a593Smuzhiyun 			     struct qed_rdma_register_tid_in_params *iparams);
629*4882a593Smuzhiyun 
630*4882a593Smuzhiyun 	int (*rdma_deregister_tid)(void *rdma_cxt, u32 itid);
631*4882a593Smuzhiyun 	int (*rdma_alloc_tid)(void *rdma_cxt, u32 *itid);
632*4882a593Smuzhiyun 	void (*rdma_free_tid)(void *rdma_cxt, u32 itid);
633*4882a593Smuzhiyun 
634*4882a593Smuzhiyun 	int (*rdma_create_srq)(void *rdma_cxt,
635*4882a593Smuzhiyun 			       struct qed_rdma_create_srq_in_params *iparams,
636*4882a593Smuzhiyun 			       struct qed_rdma_create_srq_out_params *oparams);
637*4882a593Smuzhiyun 	int (*rdma_destroy_srq)(void *rdma_cxt,
638*4882a593Smuzhiyun 				struct qed_rdma_destroy_srq_in_params *iparams);
639*4882a593Smuzhiyun 	int (*rdma_modify_srq)(void *rdma_cxt,
640*4882a593Smuzhiyun 			       struct qed_rdma_modify_srq_in_params *iparams);
641*4882a593Smuzhiyun 
642*4882a593Smuzhiyun 	int (*ll2_acquire_connection)(void *rdma_cxt,
643*4882a593Smuzhiyun 				      struct qed_ll2_acquire_data *data);
644*4882a593Smuzhiyun 
645*4882a593Smuzhiyun 	int (*ll2_establish_connection)(void *rdma_cxt, u8 connection_handle);
646*4882a593Smuzhiyun 	int (*ll2_terminate_connection)(void *rdma_cxt, u8 connection_handle);
647*4882a593Smuzhiyun 	void (*ll2_release_connection)(void *rdma_cxt, u8 connection_handle);
648*4882a593Smuzhiyun 
649*4882a593Smuzhiyun 	int (*ll2_prepare_tx_packet)(void *rdma_cxt,
650*4882a593Smuzhiyun 				     u8 connection_handle,
651*4882a593Smuzhiyun 				     struct qed_ll2_tx_pkt_info *pkt,
652*4882a593Smuzhiyun 				     bool notify_fw);
653*4882a593Smuzhiyun 
654*4882a593Smuzhiyun 	int (*ll2_set_fragment_of_tx_packet)(void *rdma_cxt,
655*4882a593Smuzhiyun 					     u8 connection_handle,
656*4882a593Smuzhiyun 					     dma_addr_t addr,
657*4882a593Smuzhiyun 					     u16 nbytes);
658*4882a593Smuzhiyun 	int (*ll2_post_rx_buffer)(void *rdma_cxt, u8 connection_handle,
659*4882a593Smuzhiyun 				  dma_addr_t addr, u16 buf_len, void *cookie,
660*4882a593Smuzhiyun 				  u8 notify_fw);
661*4882a593Smuzhiyun 	int (*ll2_get_stats)(void *rdma_cxt,
662*4882a593Smuzhiyun 			     u8 connection_handle,
663*4882a593Smuzhiyun 			     struct qed_ll2_stats *p_stats);
664*4882a593Smuzhiyun 	int (*ll2_set_mac_filter)(struct qed_dev *cdev,
665*4882a593Smuzhiyun 				  u8 *old_mac_address, u8 *new_mac_address);
666*4882a593Smuzhiyun 
667*4882a593Smuzhiyun 	int (*iwarp_set_engine_affin)(struct qed_dev *cdev, bool b_reset);
668*4882a593Smuzhiyun 
669*4882a593Smuzhiyun 	int (*iwarp_connect)(void *rdma_cxt,
670*4882a593Smuzhiyun 			     struct qed_iwarp_connect_in *iparams,
671*4882a593Smuzhiyun 			     struct qed_iwarp_connect_out *oparams);
672*4882a593Smuzhiyun 
673*4882a593Smuzhiyun 	int (*iwarp_create_listen)(void *rdma_cxt,
674*4882a593Smuzhiyun 				   struct qed_iwarp_listen_in *iparams,
675*4882a593Smuzhiyun 				   struct qed_iwarp_listen_out *oparams);
676*4882a593Smuzhiyun 
677*4882a593Smuzhiyun 	int (*iwarp_accept)(void *rdma_cxt,
678*4882a593Smuzhiyun 			    struct qed_iwarp_accept_in *iparams);
679*4882a593Smuzhiyun 
680*4882a593Smuzhiyun 	int (*iwarp_reject)(void *rdma_cxt,
681*4882a593Smuzhiyun 			    struct qed_iwarp_reject_in *iparams);
682*4882a593Smuzhiyun 
683*4882a593Smuzhiyun 	int (*iwarp_destroy_listen)(void *rdma_cxt, void *handle);
684*4882a593Smuzhiyun 
685*4882a593Smuzhiyun 	int (*iwarp_send_rtr)(void *rdma_cxt,
686*4882a593Smuzhiyun 			      struct qed_iwarp_send_rtr_in *iparams);
687*4882a593Smuzhiyun };
688*4882a593Smuzhiyun 
689*4882a593Smuzhiyun const struct qed_rdma_ops *qed_get_rdma_ops(void);
690*4882a593Smuzhiyun 
691*4882a593Smuzhiyun #endif
692