xref: /linux/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c (revision 3932b9ca55b0be314a36d3e84faff3e823c081f5)
1 /*
2  * cxgb4i.c: Chelsio T4 iSCSI driver.
3  *
4  * Copyright (c) 2010 Chelsio Communications, Inc.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation.
9  *
10  * Written by:	Karen Xie (kxie@chelsio.com)
11  *		Rakesh Ranjan (rranjan@chelsio.com)
12  */
13 
14 #define pr_fmt(fmt) KBUILD_MODNAME ":%s: " fmt, __func__
15 
16 #include <linux/module.h>
17 #include <linux/moduleparam.h>
18 #include <scsi/scsi_host.h>
19 #include <net/tcp.h>
20 #include <net/dst.h>
21 #include <linux/netdevice.h>
22 #include <net/addrconf.h>
23 
24 #include "t4_regs.h"
25 #include "t4_msg.h"
26 #include "cxgb4.h"
27 #include "cxgb4_uld.h"
28 #include "t4fw_api.h"
29 #include "l2t.h"
30 #include "cxgb4i.h"
31 
32 static unsigned int dbg_level;
33 
34 #include "../libcxgbi.h"
35 
36 #define	DRV_MODULE_NAME		"cxgb4i"
37 #define DRV_MODULE_DESC		"Chelsio T4/T5 iSCSI Driver"
38 #define	DRV_MODULE_VERSION	"0.9.4"
39 
40 static char version[] =
41 	DRV_MODULE_DESC " " DRV_MODULE_NAME
42 	" v" DRV_MODULE_VERSION "\n";
43 
44 MODULE_AUTHOR("Chelsio Communications, Inc.");
45 MODULE_DESCRIPTION(DRV_MODULE_DESC);
46 MODULE_VERSION(DRV_MODULE_VERSION);
47 MODULE_LICENSE("GPL");
48 
49 module_param(dbg_level, uint, 0644);
50 MODULE_PARM_DESC(dbg_level, "Debug flag (default=0)");
51 
52 static int cxgb4i_rcv_win = 256 * 1024;
53 module_param(cxgb4i_rcv_win, int, 0644);
54 MODULE_PARM_DESC(cxgb4i_rcv_win, "TCP reveive window in bytes");
55 
56 static int cxgb4i_snd_win = 128 * 1024;
57 module_param(cxgb4i_snd_win, int, 0644);
58 MODULE_PARM_DESC(cxgb4i_snd_win, "TCP send window in bytes");
59 
60 static int cxgb4i_rx_credit_thres = 10 * 1024;
61 module_param(cxgb4i_rx_credit_thres, int, 0644);
62 MODULE_PARM_DESC(cxgb4i_rx_credit_thres,
63 		"RX credits return threshold in bytes (default=10KB)");
64 
65 static unsigned int cxgb4i_max_connect = (8 * 1024);
66 module_param(cxgb4i_max_connect, uint, 0644);
67 MODULE_PARM_DESC(cxgb4i_max_connect, "Maximum number of connections");
68 
69 static unsigned short cxgb4i_sport_base = 20000;
70 module_param(cxgb4i_sport_base, ushort, 0644);
71 MODULE_PARM_DESC(cxgb4i_sport_base, "Starting port number (default 20000)");
72 
73 typedef void (*cxgb4i_cplhandler_func)(struct cxgbi_device *, struct sk_buff *);
74 
75 static void *t4_uld_add(const struct cxgb4_lld_info *);
76 static int t4_uld_rx_handler(void *, const __be64 *, const struct pkt_gl *);
77 static int t4_uld_state_change(void *, enum cxgb4_state state);
78 
79 static const struct cxgb4_uld_info cxgb4i_uld_info = {
80 	.name = DRV_MODULE_NAME,
81 	.add = t4_uld_add,
82 	.rx_handler = t4_uld_rx_handler,
83 	.state_change = t4_uld_state_change,
84 };
85 
86 static struct scsi_host_template cxgb4i_host_template = {
87 	.module		= THIS_MODULE,
88 	.name		= DRV_MODULE_NAME,
89 	.proc_name	= DRV_MODULE_NAME,
90 	.can_queue	= CXGB4I_SCSI_HOST_QDEPTH,
91 	.queuecommand	= iscsi_queuecommand,
92 	.change_queue_depth = iscsi_change_queue_depth,
93 	.sg_tablesize	= SG_ALL,
94 	.max_sectors	= 0xFFFF,
95 	.cmd_per_lun	= ISCSI_DEF_CMD_PER_LUN,
96 	.eh_abort_handler = iscsi_eh_abort,
97 	.eh_device_reset_handler = iscsi_eh_device_reset,
98 	.eh_target_reset_handler = iscsi_eh_recover_target,
99 	.target_alloc	= iscsi_target_alloc,
100 	.use_clustering	= DISABLE_CLUSTERING,
101 	.this_id	= -1,
102 };
103 
104 static struct iscsi_transport cxgb4i_iscsi_transport = {
105 	.owner		= THIS_MODULE,
106 	.name		= DRV_MODULE_NAME,
107 	.caps		= CAP_RECOVERY_L0 | CAP_MULTI_R2T | CAP_HDRDGST |
108 				CAP_DATADGST | CAP_DIGEST_OFFLOAD |
109 				CAP_PADDING_OFFLOAD | CAP_TEXT_NEGO,
110 	.attr_is_visible	= cxgbi_attr_is_visible,
111 	.get_host_param	= cxgbi_get_host_param,
112 	.set_host_param	= cxgbi_set_host_param,
113 	/* session management */
114 	.create_session	= cxgbi_create_session,
115 	.destroy_session	= cxgbi_destroy_session,
116 	.get_session_param = iscsi_session_get_param,
117 	/* connection management */
118 	.create_conn	= cxgbi_create_conn,
119 	.bind_conn		= cxgbi_bind_conn,
120 	.destroy_conn	= iscsi_tcp_conn_teardown,
121 	.start_conn		= iscsi_conn_start,
122 	.stop_conn		= iscsi_conn_stop,
123 	.get_conn_param	= iscsi_conn_get_param,
124 	.set_param	= cxgbi_set_conn_param,
125 	.get_stats	= cxgbi_get_conn_stats,
126 	/* pdu xmit req from user space */
127 	.send_pdu	= iscsi_conn_send_pdu,
128 	/* task */
129 	.init_task	= iscsi_tcp_task_init,
130 	.xmit_task	= iscsi_tcp_task_xmit,
131 	.cleanup_task	= cxgbi_cleanup_task,
132 	/* pdu */
133 	.alloc_pdu	= cxgbi_conn_alloc_pdu,
134 	.init_pdu	= cxgbi_conn_init_pdu,
135 	.xmit_pdu	= cxgbi_conn_xmit_pdu,
136 	.parse_pdu_itt	= cxgbi_parse_pdu_itt,
137 	/* TCP connect/disconnect */
138 	.get_ep_param	= cxgbi_get_ep_param,
139 	.ep_connect	= cxgbi_ep_connect,
140 	.ep_poll	= cxgbi_ep_poll,
141 	.ep_disconnect	= cxgbi_ep_disconnect,
142 	/* Error recovery timeout call */
143 	.session_recovery_timedout = iscsi_session_recovery_timedout,
144 };
145 
146 static struct scsi_transport_template *cxgb4i_stt;
147 
148 /*
149  * CPL (Chelsio Protocol Language) defines a message passing interface between
150  * the host driver and Chelsio asic.
151  * The section below implments CPLs that related to iscsi tcp connection
152  * open/close/abort and data send/receive.
153  */
154 
155 #define DIV_ROUND_UP(n, d)	(((n) + (d) - 1) / (d))
156 #define RCV_BUFSIZ_MASK		0x3FFU
157 #define MAX_IMM_TX_PKT_LEN	128
158 
159 static inline void set_queue(struct sk_buff *skb, unsigned int queue,
160 				const struct cxgbi_sock *csk)
161 {
162 	skb->queue_mapping = queue;
163 }
164 
165 static int push_tx_frames(struct cxgbi_sock *, int);
166 
167 /*
168  * is_ofld_imm - check whether a packet can be sent as immediate data
169  * @skb: the packet
170  *
171  * Returns true if a packet can be sent as an offload WR with immediate
172  * data.  We currently use the same limit as for Ethernet packets.
173  */
174 static inline int is_ofld_imm(const struct sk_buff *skb)
175 {
176 	return skb->len <= (MAX_IMM_TX_PKT_LEN -
177 			sizeof(struct fw_ofld_tx_data_wr));
178 }
179 
180 static void send_act_open_req(struct cxgbi_sock *csk, struct sk_buff *skb,
181 				struct l2t_entry *e)
182 {
183 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(csk->cdev);
184 	int t4 = is_t4(lldi->adapter_type);
185 	int wscale = cxgbi_sock_compute_wscale(csk->mss_idx);
186 	unsigned long long opt0;
187 	unsigned int opt2;
188 	unsigned int qid_atid = ((unsigned int)csk->atid) |
189 				 (((unsigned int)csk->rss_qid) << 14);
190 
191 	opt0 = KEEP_ALIVE(1) |
192 		WND_SCALE(wscale) |
193 		MSS_IDX(csk->mss_idx) |
194 		L2T_IDX(((struct l2t_entry *)csk->l2t)->idx) |
195 		TX_CHAN(csk->tx_chan) |
196 		SMAC_SEL(csk->smac_idx) |
197 		ULP_MODE(ULP_MODE_ISCSI) |
198 		RCV_BUFSIZ(cxgb4i_rcv_win >> 10);
199 	opt2 = RX_CHANNEL(0) |
200 		RSS_QUEUE_VALID |
201 		(1 << 20) |
202 		RSS_QUEUE(csk->rss_qid);
203 
204 	if (is_t4(lldi->adapter_type)) {
205 		struct cpl_act_open_req *req =
206 				(struct cpl_act_open_req *)skb->head;
207 
208 		INIT_TP_WR(req, 0);
209 		OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ACT_OPEN_REQ,
210 					qid_atid));
211 		req->local_port = csk->saddr.sin_port;
212 		req->peer_port = csk->daddr.sin_port;
213 		req->local_ip = csk->saddr.sin_addr.s_addr;
214 		req->peer_ip = csk->daddr.sin_addr.s_addr;
215 		req->opt0 = cpu_to_be64(opt0);
216 		req->params = cpu_to_be32(cxgb4_select_ntuple(
217 					csk->cdev->ports[csk->port_id],
218 					csk->l2t));
219 		opt2 |= 1 << 22;
220 		req->opt2 = cpu_to_be32(opt2);
221 
222 		log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
223 			"csk t4 0x%p, %pI4:%u-%pI4:%u, atid %d, qid %u.\n",
224 			csk, &req->local_ip, ntohs(req->local_port),
225 			&req->peer_ip, ntohs(req->peer_port),
226 			csk->atid, csk->rss_qid);
227 	} else {
228 		struct cpl_t5_act_open_req *req =
229 				(struct cpl_t5_act_open_req *)skb->head;
230 
231 		INIT_TP_WR(req, 0);
232 		OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ACT_OPEN_REQ,
233 					qid_atid));
234 		req->local_port = csk->saddr.sin_port;
235 		req->peer_port = csk->daddr.sin_port;
236 		req->local_ip = csk->saddr.sin_addr.s_addr;
237 		req->peer_ip = csk->daddr.sin_addr.s_addr;
238 		req->opt0 = cpu_to_be64(opt0);
239 		req->params = cpu_to_be64(V_FILTER_TUPLE(
240 				cxgb4_select_ntuple(
241 					csk->cdev->ports[csk->port_id],
242 					csk->l2t)));
243 		opt2 |= 1 << 31;
244 		req->opt2 = cpu_to_be32(opt2);
245 
246 		log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
247 			"csk t5 0x%p, %pI4:%u-%pI4:%u, atid %d, qid %u.\n",
248 			csk, &req->local_ip, ntohs(req->local_port),
249 			&req->peer_ip, ntohs(req->peer_port),
250 			csk->atid, csk->rss_qid);
251 	}
252 
253 	set_wr_txq(skb, CPL_PRIORITY_SETUP, csk->port_id);
254 
255 	pr_info_ipaddr("t%d csk 0x%p,%u,0x%lx,%u, rss_qid %u.\n",
256 		       (&csk->saddr), (&csk->daddr), t4 ? 4 : 5, csk,
257 		       csk->state, csk->flags, csk->atid, csk->rss_qid);
258 
259 	cxgb4_l2t_send(csk->cdev->ports[csk->port_id], skb, csk->l2t);
260 }
261 
262 static void send_act_open_req6(struct cxgbi_sock *csk, struct sk_buff *skb,
263 			       struct l2t_entry *e)
264 {
265 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(csk->cdev);
266 	int t4 = is_t4(lldi->adapter_type);
267 	int wscale = cxgbi_sock_compute_wscale(csk->mss_idx);
268 	unsigned long long opt0;
269 	unsigned int opt2;
270 	unsigned int qid_atid = ((unsigned int)csk->atid) |
271 				 (((unsigned int)csk->rss_qid) << 14);
272 
273 	opt0 = KEEP_ALIVE(1) |
274 		WND_SCALE(wscale) |
275 		MSS_IDX(csk->mss_idx) |
276 		L2T_IDX(((struct l2t_entry *)csk->l2t)->idx) |
277 		TX_CHAN(csk->tx_chan) |
278 		SMAC_SEL(csk->smac_idx) |
279 		ULP_MODE(ULP_MODE_ISCSI) |
280 		RCV_BUFSIZ(cxgb4i_rcv_win >> 10);
281 
282 	opt2 = RX_CHANNEL(0) |
283 		RSS_QUEUE_VALID |
284 		RX_FC_DISABLE |
285 		RSS_QUEUE(csk->rss_qid);
286 
287 	if (t4) {
288 		struct cpl_act_open_req6 *req =
289 			    (struct cpl_act_open_req6 *)skb->head;
290 
291 		INIT_TP_WR(req, 0);
292 		OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ACT_OPEN_REQ6,
293 							    qid_atid));
294 		req->local_port = csk->saddr6.sin6_port;
295 		req->peer_port = csk->daddr6.sin6_port;
296 
297 		req->local_ip_hi = *(__be64 *)(csk->saddr6.sin6_addr.s6_addr);
298 		req->local_ip_lo = *(__be64 *)(csk->saddr6.sin6_addr.s6_addr +
299 								    8);
300 		req->peer_ip_hi = *(__be64 *)(csk->daddr6.sin6_addr.s6_addr);
301 		req->peer_ip_lo = *(__be64 *)(csk->daddr6.sin6_addr.s6_addr +
302 								    8);
303 
304 		req->opt0 = cpu_to_be64(opt0);
305 
306 		opt2 |= RX_FC_VALID;
307 		req->opt2 = cpu_to_be32(opt2);
308 
309 		req->params = cpu_to_be32(cxgb4_select_ntuple(
310 					  csk->cdev->ports[csk->port_id],
311 					  csk->l2t));
312 	} else {
313 		struct cpl_t5_act_open_req6 *req =
314 				(struct cpl_t5_act_open_req6 *)skb->head;
315 
316 		INIT_TP_WR(req, 0);
317 		OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ACT_OPEN_REQ6,
318 							    qid_atid));
319 		req->local_port = csk->saddr6.sin6_port;
320 		req->peer_port = csk->daddr6.sin6_port;
321 		req->local_ip_hi = *(__be64 *)(csk->saddr6.sin6_addr.s6_addr);
322 		req->local_ip_lo = *(__be64 *)(csk->saddr6.sin6_addr.s6_addr +
323 									8);
324 		req->peer_ip_hi = *(__be64 *)(csk->daddr6.sin6_addr.s6_addr);
325 		req->peer_ip_lo = *(__be64 *)(csk->daddr6.sin6_addr.s6_addr +
326 									8);
327 		req->opt0 = cpu_to_be64(opt0);
328 
329 		opt2 |= T5_OPT_2_VALID;
330 		req->opt2 = cpu_to_be32(opt2);
331 
332 		req->params = cpu_to_be64(V_FILTER_TUPLE(cxgb4_select_ntuple(
333 					  csk->cdev->ports[csk->port_id],
334 					  csk->l2t)));
335 	}
336 
337 	set_wr_txq(skb, CPL_PRIORITY_SETUP, csk->port_id);
338 
339 	pr_info("t%d csk 0x%p,%u,0x%lx,%u, [%pI6]:%u-[%pI6]:%u, rss_qid %u.\n",
340 		t4 ? 4 : 5, csk, csk->state, csk->flags, csk->atid,
341 		&csk->saddr6.sin6_addr, ntohs(csk->saddr.sin_port),
342 		&csk->daddr6.sin6_addr, ntohs(csk->daddr.sin_port),
343 		csk->rss_qid);
344 
345 	cxgb4_l2t_send(csk->cdev->ports[csk->port_id], skb, csk->l2t);
346 }
347 
348 static void send_close_req(struct cxgbi_sock *csk)
349 {
350 	struct sk_buff *skb = csk->cpl_close;
351 	struct cpl_close_con_req *req = (struct cpl_close_con_req *)skb->head;
352 	unsigned int tid = csk->tid;
353 
354 	log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
355 		"csk 0x%p,%u,0x%lx, tid %u.\n",
356 		csk, csk->state, csk->flags, csk->tid);
357 	csk->cpl_close = NULL;
358 	set_wr_txq(skb, CPL_PRIORITY_DATA, csk->port_id);
359 	INIT_TP_WR(req, tid);
360 	OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_CLOSE_CON_REQ, tid));
361 	req->rsvd = 0;
362 
363 	cxgbi_sock_skb_entail(csk, skb);
364 	if (csk->state >= CTP_ESTABLISHED)
365 		push_tx_frames(csk, 1);
366 }
367 
368 static void abort_arp_failure(void *handle, struct sk_buff *skb)
369 {
370 	struct cxgbi_sock *csk = (struct cxgbi_sock *)handle;
371 	struct cpl_abort_req *req;
372 
373 	log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
374 		"csk 0x%p,%u,0x%lx, tid %u, abort.\n",
375 		csk, csk->state, csk->flags, csk->tid);
376 	req = (struct cpl_abort_req *)skb->data;
377 	req->cmd = CPL_ABORT_NO_RST;
378 	cxgb4_ofld_send(csk->cdev->ports[csk->port_id], skb);
379 }
380 
381 static void send_abort_req(struct cxgbi_sock *csk)
382 {
383 	struct cpl_abort_req *req;
384 	struct sk_buff *skb = csk->cpl_abort_req;
385 
386 	if (unlikely(csk->state == CTP_ABORTING) || !skb || !csk->cdev)
387 		return;
388 	cxgbi_sock_set_state(csk, CTP_ABORTING);
389 	cxgbi_sock_set_flag(csk, CTPF_ABORT_RPL_PENDING);
390 	cxgbi_sock_purge_write_queue(csk);
391 
392 	csk->cpl_abort_req = NULL;
393 	req = (struct cpl_abort_req *)skb->head;
394 	set_queue(skb, CPL_PRIORITY_DATA, csk);
395 	req->cmd = CPL_ABORT_SEND_RST;
396 	t4_set_arp_err_handler(skb, csk, abort_arp_failure);
397 	INIT_TP_WR(req, csk->tid);
398 	OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ABORT_REQ, csk->tid));
399 	req->rsvd0 = htonl(csk->snd_nxt);
400 	req->rsvd1 = !cxgbi_sock_flag(csk, CTPF_TX_DATA_SENT);
401 
402 	log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
403 		"csk 0x%p,%u,0x%lx,%u, snd_nxt %u, 0x%x.\n",
404 		csk, csk->state, csk->flags, csk->tid, csk->snd_nxt,
405 		req->rsvd1);
406 
407 	cxgb4_l2t_send(csk->cdev->ports[csk->port_id], skb, csk->l2t);
408 }
409 
410 static void send_abort_rpl(struct cxgbi_sock *csk, int rst_status)
411 {
412 	struct sk_buff *skb = csk->cpl_abort_rpl;
413 	struct cpl_abort_rpl *rpl = (struct cpl_abort_rpl *)skb->head;
414 
415 	log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
416 		"csk 0x%p,%u,0x%lx,%u, status %d.\n",
417 		csk, csk->state, csk->flags, csk->tid, rst_status);
418 
419 	csk->cpl_abort_rpl = NULL;
420 	set_queue(skb, CPL_PRIORITY_DATA, csk);
421 	INIT_TP_WR(rpl, csk->tid);
422 	OPCODE_TID(rpl) = cpu_to_be32(MK_OPCODE_TID(CPL_ABORT_RPL, csk->tid));
423 	rpl->cmd = rst_status;
424 	cxgb4_ofld_send(csk->cdev->ports[csk->port_id], skb);
425 }
426 
427 /*
428  * CPL connection rx data ack: host ->
429  * Send RX credits through an RX_DATA_ACK CPL message. Returns the number of
430  * credits sent.
431  */
432 static u32 send_rx_credits(struct cxgbi_sock *csk, u32 credits)
433 {
434 	struct sk_buff *skb;
435 	struct cpl_rx_data_ack *req;
436 
437 	log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_PDU_RX,
438 		"csk 0x%p,%u,0x%lx,%u, credit %u.\n",
439 		csk, csk->state, csk->flags, csk->tid, credits);
440 
441 	skb = alloc_wr(sizeof(*req), 0, GFP_ATOMIC);
442 	if (!skb) {
443 		pr_info("csk 0x%p, credit %u, OOM.\n", csk, credits);
444 		return 0;
445 	}
446 	req = (struct cpl_rx_data_ack *)skb->head;
447 
448 	set_wr_txq(skb, CPL_PRIORITY_ACK, csk->port_id);
449 	INIT_TP_WR(req, csk->tid);
450 	OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_RX_DATA_ACK,
451 				      csk->tid));
452 	req->credit_dack = cpu_to_be32(RX_CREDITS(credits) | RX_FORCE_ACK(1));
453 	cxgb4_ofld_send(csk->cdev->ports[csk->port_id], skb);
454 	return credits;
455 }
456 
457 /*
458  * sgl_len - calculates the size of an SGL of the given capacity
459  * @n: the number of SGL entries
460  * Calculates the number of flits needed for a scatter/gather list that
461  * can hold the given number of entries.
462  */
463 static inline unsigned int sgl_len(unsigned int n)
464 {
465 	n--;
466 	return (3 * n) / 2 + (n & 1) + 2;
467 }
468 
469 /*
470  * calc_tx_flits_ofld - calculate # of flits for an offload packet
471  * @skb: the packet
472  *
473  * Returns the number of flits needed for the given offload packet.
474  * These packets are already fully constructed and no additional headers
475  * will be added.
476  */
477 static inline unsigned int calc_tx_flits_ofld(const struct sk_buff *skb)
478 {
479 	unsigned int flits, cnt;
480 
481 	if (is_ofld_imm(skb))
482 		return DIV_ROUND_UP(skb->len, 8);
483 	flits = skb_transport_offset(skb) / 8;
484 	cnt = skb_shinfo(skb)->nr_frags;
485 	if (skb_tail_pointer(skb) != skb_transport_header(skb))
486 		cnt++;
487 	return flits + sgl_len(cnt);
488 }
489 
490 static inline void send_tx_flowc_wr(struct cxgbi_sock *csk)
491 {
492 	struct sk_buff *skb;
493 	struct fw_flowc_wr *flowc;
494 	int flowclen, i;
495 
496 	flowclen = 80;
497 	skb = alloc_wr(flowclen, 0, GFP_ATOMIC);
498 	flowc = (struct fw_flowc_wr *)skb->head;
499 	flowc->op_to_nparams =
500 		htonl(FW_WR_OP(FW_FLOWC_WR) | FW_FLOWC_WR_NPARAMS(8));
501 	flowc->flowid_len16 =
502 		htonl(FW_WR_LEN16(DIV_ROUND_UP(72, 16)) |
503 				FW_WR_FLOWID(csk->tid));
504 	flowc->mnemval[0].mnemonic = FW_FLOWC_MNEM_PFNVFN;
505 	flowc->mnemval[0].val = htonl(csk->cdev->pfvf);
506 	flowc->mnemval[1].mnemonic = FW_FLOWC_MNEM_CH;
507 	flowc->mnemval[1].val = htonl(csk->tx_chan);
508 	flowc->mnemval[2].mnemonic = FW_FLOWC_MNEM_PORT;
509 	flowc->mnemval[2].val = htonl(csk->tx_chan);
510 	flowc->mnemval[3].mnemonic = FW_FLOWC_MNEM_IQID;
511 	flowc->mnemval[3].val = htonl(csk->rss_qid);
512 	flowc->mnemval[4].mnemonic = FW_FLOWC_MNEM_SNDNXT;
513 	flowc->mnemval[4].val = htonl(csk->snd_nxt);
514 	flowc->mnemval[5].mnemonic = FW_FLOWC_MNEM_RCVNXT;
515 	flowc->mnemval[5].val = htonl(csk->rcv_nxt);
516 	flowc->mnemval[6].mnemonic = FW_FLOWC_MNEM_SNDBUF;
517 	flowc->mnemval[6].val = htonl(cxgb4i_snd_win);
518 	flowc->mnemval[7].mnemonic = FW_FLOWC_MNEM_MSS;
519 	flowc->mnemval[7].val = htonl(csk->advmss);
520 	flowc->mnemval[8].mnemonic = 0;
521 	flowc->mnemval[8].val = 0;
522 	for (i = 0; i < 9; i++) {
523 		flowc->mnemval[i].r4[0] = 0;
524 		flowc->mnemval[i].r4[1] = 0;
525 		flowc->mnemval[i].r4[2] = 0;
526 	}
527 	set_queue(skb, CPL_PRIORITY_DATA, csk);
528 
529 	log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
530 		"csk 0x%p, tid 0x%x, %u,%u,%u,%u,%u,%u,%u.\n",
531 		csk, csk->tid, 0, csk->tx_chan, csk->rss_qid,
532 		csk->snd_nxt, csk->rcv_nxt, cxgb4i_snd_win,
533 		csk->advmss);
534 
535 	cxgb4_ofld_send(csk->cdev->ports[csk->port_id], skb);
536 }
537 
538 static inline void make_tx_data_wr(struct cxgbi_sock *csk, struct sk_buff *skb,
539 				   int dlen, int len, u32 credits, int compl)
540 {
541 	struct fw_ofld_tx_data_wr *req;
542 	unsigned int submode = cxgbi_skcb_ulp_mode(skb) & 3;
543 	unsigned int wr_ulp_mode = 0;
544 
545 	req = (struct fw_ofld_tx_data_wr *)__skb_push(skb, sizeof(*req));
546 
547 	if (is_ofld_imm(skb)) {
548 		req->op_to_immdlen = htonl(FW_WR_OP(FW_OFLD_TX_DATA_WR) |
549 					FW_WR_COMPL(1) |
550 					FW_WR_IMMDLEN(dlen));
551 		req->flowid_len16 = htonl(FW_WR_FLOWID(csk->tid) |
552 						FW_WR_LEN16(credits));
553 	} else {
554 		req->op_to_immdlen =
555 			cpu_to_be32(FW_WR_OP(FW_OFLD_TX_DATA_WR) |
556 					FW_WR_COMPL(1) |
557 					FW_WR_IMMDLEN(0));
558 		req->flowid_len16 =
559 			cpu_to_be32(FW_WR_FLOWID(csk->tid) |
560 					FW_WR_LEN16(credits));
561 	}
562 	if (submode)
563 		wr_ulp_mode = FW_OFLD_TX_DATA_WR_ULPMODE(ULP2_MODE_ISCSI) |
564 				FW_OFLD_TX_DATA_WR_ULPSUBMODE(submode);
565 	req->tunnel_to_proxy = htonl(wr_ulp_mode |
566 		 FW_OFLD_TX_DATA_WR_SHOVE(skb_peek(&csk->write_queue) ? 0 : 1));
567 	req->plen = htonl(len);
568 	if (!cxgbi_sock_flag(csk, CTPF_TX_DATA_SENT))
569 		cxgbi_sock_set_flag(csk, CTPF_TX_DATA_SENT);
570 }
571 
572 static void arp_failure_skb_discard(void *handle, struct sk_buff *skb)
573 {
574 	kfree_skb(skb);
575 }
576 
577 static int push_tx_frames(struct cxgbi_sock *csk, int req_completion)
578 {
579 	int total_size = 0;
580 	struct sk_buff *skb;
581 
582 	if (unlikely(csk->state < CTP_ESTABLISHED ||
583 		csk->state == CTP_CLOSE_WAIT_1 || csk->state >= CTP_ABORTING)) {
584 		log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK |
585 			 1 << CXGBI_DBG_PDU_TX,
586 			"csk 0x%p,%u,0x%lx,%u, in closing state.\n",
587 			csk, csk->state, csk->flags, csk->tid);
588 		return 0;
589 	}
590 
591 	while (csk->wr_cred && (skb = skb_peek(&csk->write_queue)) != NULL) {
592 		int dlen = skb->len;
593 		int len = skb->len;
594 		unsigned int credits_needed;
595 
596 		skb_reset_transport_header(skb);
597 		if (is_ofld_imm(skb))
598 			credits_needed = DIV_ROUND_UP(dlen +
599 					sizeof(struct fw_ofld_tx_data_wr), 16);
600 		else
601 			credits_needed = DIV_ROUND_UP(8*calc_tx_flits_ofld(skb)
602 					+ sizeof(struct fw_ofld_tx_data_wr),
603 					16);
604 
605 		if (csk->wr_cred < credits_needed) {
606 			log_debug(1 << CXGBI_DBG_PDU_TX,
607 				"csk 0x%p, skb %u/%u, wr %d < %u.\n",
608 				csk, skb->len, skb->data_len,
609 				credits_needed, csk->wr_cred);
610 			break;
611 		}
612 		__skb_unlink(skb, &csk->write_queue);
613 		set_queue(skb, CPL_PRIORITY_DATA, csk);
614 		skb->csum = credits_needed;
615 		csk->wr_cred -= credits_needed;
616 		csk->wr_una_cred += credits_needed;
617 		cxgbi_sock_enqueue_wr(csk, skb);
618 
619 		log_debug(1 << CXGBI_DBG_PDU_TX,
620 			"csk 0x%p, skb %u/%u, wr %d, left %u, unack %u.\n",
621 			csk, skb->len, skb->data_len, credits_needed,
622 			csk->wr_cred, csk->wr_una_cred);
623 
624 		if (likely(cxgbi_skcb_test_flag(skb, SKCBF_TX_NEED_HDR))) {
625 			if (!cxgbi_sock_flag(csk, CTPF_TX_DATA_SENT)) {
626 				send_tx_flowc_wr(csk);
627 				skb->csum += 5;
628 				csk->wr_cred -= 5;
629 				csk->wr_una_cred += 5;
630 			}
631 			len += cxgbi_ulp_extra_len(cxgbi_skcb_ulp_mode(skb));
632 			make_tx_data_wr(csk, skb, dlen, len, credits_needed,
633 					req_completion);
634 			csk->snd_nxt += len;
635 			cxgbi_skcb_clear_flag(skb, SKCBF_TX_NEED_HDR);
636 		}
637 		total_size += skb->truesize;
638 		t4_set_arp_err_handler(skb, csk, arp_failure_skb_discard);
639 
640 		log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_PDU_TX,
641 			"csk 0x%p,%u,0x%lx,%u, skb 0x%p, %u.\n",
642 			csk, csk->state, csk->flags, csk->tid, skb, len);
643 
644 		cxgb4_l2t_send(csk->cdev->ports[csk->port_id], skb, csk->l2t);
645 	}
646 	return total_size;
647 }
648 
649 static inline void free_atid(struct cxgbi_sock *csk)
650 {
651 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(csk->cdev);
652 
653 	if (cxgbi_sock_flag(csk, CTPF_HAS_ATID)) {
654 		cxgb4_free_atid(lldi->tids, csk->atid);
655 		cxgbi_sock_clear_flag(csk, CTPF_HAS_ATID);
656 		cxgbi_sock_put(csk);
657 	}
658 }
659 
660 static void do_act_establish(struct cxgbi_device *cdev, struct sk_buff *skb)
661 {
662 	struct cxgbi_sock *csk;
663 	struct cpl_act_establish *req = (struct cpl_act_establish *)skb->data;
664 	unsigned short tcp_opt = ntohs(req->tcp_opt);
665 	unsigned int tid = GET_TID(req);
666 	unsigned int atid = GET_TID_TID(ntohl(req->tos_atid));
667 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(cdev);
668 	struct tid_info *t = lldi->tids;
669 	u32 rcv_isn = be32_to_cpu(req->rcv_isn);
670 
671 	csk = lookup_atid(t, atid);
672 	if (unlikely(!csk)) {
673 		pr_err("NO conn. for atid %u, cdev 0x%p.\n", atid, cdev);
674 		goto rel_skb;
675 	}
676 
677 	if (csk->atid != atid) {
678 		pr_err("bad conn atid %u, csk 0x%p,%u,0x%lx,tid %u, atid %u.\n",
679 			atid, csk, csk->state, csk->flags, csk->tid, csk->atid);
680 		goto rel_skb;
681 	}
682 
683 	pr_info_ipaddr("atid 0x%x, tid 0x%x, csk 0x%p,%u,0x%lx, isn %u.\n",
684 		       (&csk->saddr), (&csk->daddr),
685 		       atid, tid, csk, csk->state, csk->flags, rcv_isn);
686 
687 	module_put(THIS_MODULE);
688 
689 	cxgbi_sock_get(csk);
690 	csk->tid = tid;
691 	cxgb4_insert_tid(lldi->tids, csk, tid);
692 	cxgbi_sock_set_flag(csk, CTPF_HAS_TID);
693 
694 	free_atid(csk);
695 
696 	spin_lock_bh(&csk->lock);
697 	if (unlikely(csk->state != CTP_ACTIVE_OPEN))
698 		pr_info("csk 0x%p,%u,0x%lx,%u, got EST.\n",
699 			csk, csk->state, csk->flags, csk->tid);
700 
701 	if (csk->retry_timer.function) {
702 		del_timer(&csk->retry_timer);
703 		csk->retry_timer.function = NULL;
704 	}
705 
706 	csk->copied_seq = csk->rcv_wup = csk->rcv_nxt = rcv_isn;
707 	/*
708 	 * Causes the first RX_DATA_ACK to supply any Rx credits we couldn't
709 	 * pass through opt0.
710 	 */
711 	if (cxgb4i_rcv_win > (RCV_BUFSIZ_MASK << 10))
712 		csk->rcv_wup -= cxgb4i_rcv_win - (RCV_BUFSIZ_MASK << 10);
713 
714 	csk->advmss = lldi->mtus[GET_TCPOPT_MSS(tcp_opt)] - 40;
715 	if (GET_TCPOPT_TSTAMP(tcp_opt))
716 		csk->advmss -= 12;
717 	if (csk->advmss < 128)
718 		csk->advmss = 128;
719 
720 	log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
721 		"csk 0x%p, mss_idx %u, advmss %u.\n",
722 			csk, GET_TCPOPT_MSS(tcp_opt), csk->advmss);
723 
724 	cxgbi_sock_established(csk, ntohl(req->snd_isn), ntohs(req->tcp_opt));
725 
726 	if (unlikely(cxgbi_sock_flag(csk, CTPF_ACTIVE_CLOSE_NEEDED)))
727 		send_abort_req(csk);
728 	else {
729 		if (skb_queue_len(&csk->write_queue))
730 			push_tx_frames(csk, 0);
731 		cxgbi_conn_tx_open(csk);
732 	}
733 	spin_unlock_bh(&csk->lock);
734 
735 rel_skb:
736 	__kfree_skb(skb);
737 }
738 
739 static int act_open_rpl_status_to_errno(int status)
740 {
741 	switch (status) {
742 	case CPL_ERR_CONN_RESET:
743 		return -ECONNREFUSED;
744 	case CPL_ERR_ARP_MISS:
745 		return -EHOSTUNREACH;
746 	case CPL_ERR_CONN_TIMEDOUT:
747 		return -ETIMEDOUT;
748 	case CPL_ERR_TCAM_FULL:
749 		return -ENOMEM;
750 	case CPL_ERR_CONN_EXIST:
751 		return -EADDRINUSE;
752 	default:
753 		return -EIO;
754 	}
755 }
756 
757 static void csk_act_open_retry_timer(unsigned long data)
758 {
759 	struct sk_buff *skb;
760 	struct cxgbi_sock *csk = (struct cxgbi_sock *)data;
761 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(csk->cdev);
762 	void (*send_act_open_func)(struct cxgbi_sock *, struct sk_buff *,
763 				   struct l2t_entry *);
764 	int t4 = is_t4(lldi->adapter_type), size, size6;
765 
766 	log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
767 		"csk 0x%p,%u,0x%lx,%u.\n",
768 		csk, csk->state, csk->flags, csk->tid);
769 
770 	cxgbi_sock_get(csk);
771 	spin_lock_bh(&csk->lock);
772 
773 	if (t4) {
774 		size = sizeof(struct cpl_act_open_req);
775 		size6 = sizeof(struct cpl_act_open_req6);
776 	} else {
777 		size = sizeof(struct cpl_t5_act_open_req);
778 		size6 = sizeof(struct cpl_t5_act_open_req6);
779 	}
780 
781 	if (csk->csk_family == AF_INET) {
782 		send_act_open_func = send_act_open_req;
783 		skb = alloc_wr(size, 0, GFP_ATOMIC);
784 	} else {
785 		send_act_open_func = send_act_open_req6;
786 		skb = alloc_wr(size6, 0, GFP_ATOMIC);
787 	}
788 
789 	if (!skb)
790 		cxgbi_sock_fail_act_open(csk, -ENOMEM);
791 	else {
792 		skb->sk = (struct sock *)csk;
793 		t4_set_arp_err_handler(skb, csk,
794 				       cxgbi_sock_act_open_req_arp_failure);
795 		send_act_open_func(csk, skb, csk->l2t);
796 	}
797 
798 	spin_unlock_bh(&csk->lock);
799 	cxgbi_sock_put(csk);
800 
801 }
802 
803 static void do_act_open_rpl(struct cxgbi_device *cdev, struct sk_buff *skb)
804 {
805 	struct cxgbi_sock *csk;
806 	struct cpl_act_open_rpl *rpl = (struct cpl_act_open_rpl *)skb->data;
807 	unsigned int tid = GET_TID(rpl);
808 	unsigned int atid =
809 		GET_TID_TID(GET_AOPEN_ATID(be32_to_cpu(rpl->atid_status)));
810 	unsigned int status = GET_AOPEN_STATUS(be32_to_cpu(rpl->atid_status));
811 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(cdev);
812 	struct tid_info *t = lldi->tids;
813 
814 	csk = lookup_atid(t, atid);
815 	if (unlikely(!csk)) {
816 		pr_err("NO matching conn. atid %u, tid %u.\n", atid, tid);
817 		goto rel_skb;
818 	}
819 
820 	pr_info_ipaddr("tid %u/%u, status %u.\n"
821 		       "csk 0x%p,%u,0x%lx. ", (&csk->saddr), (&csk->daddr),
822 		       atid, tid, status, csk, csk->state, csk->flags);
823 
824 	if (status == CPL_ERR_RTX_NEG_ADVICE)
825 		goto rel_skb;
826 
827 	if (status && status != CPL_ERR_TCAM_FULL &&
828 	    status != CPL_ERR_CONN_EXIST &&
829 	    status != CPL_ERR_ARP_MISS)
830 		cxgb4_remove_tid(lldi->tids, csk->port_id, GET_TID(rpl));
831 
832 	cxgbi_sock_get(csk);
833 	spin_lock_bh(&csk->lock);
834 
835 	if (status == CPL_ERR_CONN_EXIST &&
836 	    csk->retry_timer.function != csk_act_open_retry_timer) {
837 		csk->retry_timer.function = csk_act_open_retry_timer;
838 		mod_timer(&csk->retry_timer, jiffies + HZ / 2);
839 	} else
840 		cxgbi_sock_fail_act_open(csk,
841 					act_open_rpl_status_to_errno(status));
842 
843 	spin_unlock_bh(&csk->lock);
844 	cxgbi_sock_put(csk);
845 rel_skb:
846 	__kfree_skb(skb);
847 }
848 
849 static void do_peer_close(struct cxgbi_device *cdev, struct sk_buff *skb)
850 {
851 	struct cxgbi_sock *csk;
852 	struct cpl_peer_close *req = (struct cpl_peer_close *)skb->data;
853 	unsigned int tid = GET_TID(req);
854 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(cdev);
855 	struct tid_info *t = lldi->tids;
856 
857 	csk = lookup_tid(t, tid);
858 	if (unlikely(!csk)) {
859 		pr_err("can't find connection for tid %u.\n", tid);
860 		goto rel_skb;
861 	}
862 	pr_info_ipaddr("csk 0x%p,%u,0x%lx,%u.\n",
863 		       (&csk->saddr), (&csk->daddr),
864 		       csk, csk->state, csk->flags, csk->tid);
865 	cxgbi_sock_rcv_peer_close(csk);
866 rel_skb:
867 	__kfree_skb(skb);
868 }
869 
870 static void do_close_con_rpl(struct cxgbi_device *cdev, struct sk_buff *skb)
871 {
872 	struct cxgbi_sock *csk;
873 	struct cpl_close_con_rpl *rpl = (struct cpl_close_con_rpl *)skb->data;
874 	unsigned int tid = GET_TID(rpl);
875 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(cdev);
876 	struct tid_info *t = lldi->tids;
877 
878 	csk = lookup_tid(t, tid);
879 	if (unlikely(!csk)) {
880 		pr_err("can't find connection for tid %u.\n", tid);
881 		goto rel_skb;
882 	}
883 	pr_info_ipaddr("csk 0x%p,%u,0x%lx,%u.\n",
884 		       (&csk->saddr), (&csk->daddr),
885 		       csk, csk->state, csk->flags, csk->tid);
886 	cxgbi_sock_rcv_close_conn_rpl(csk, ntohl(rpl->snd_nxt));
887 rel_skb:
888 	__kfree_skb(skb);
889 }
890 
891 static int abort_status_to_errno(struct cxgbi_sock *csk, int abort_reason,
892 								int *need_rst)
893 {
894 	switch (abort_reason) {
895 	case CPL_ERR_BAD_SYN: /* fall through */
896 	case CPL_ERR_CONN_RESET:
897 		return csk->state > CTP_ESTABLISHED ?
898 			-EPIPE : -ECONNRESET;
899 	case CPL_ERR_XMIT_TIMEDOUT:
900 	case CPL_ERR_PERSIST_TIMEDOUT:
901 	case CPL_ERR_FINWAIT2_TIMEDOUT:
902 	case CPL_ERR_KEEPALIVE_TIMEDOUT:
903 		return -ETIMEDOUT;
904 	default:
905 		return -EIO;
906 	}
907 }
908 
909 static void do_abort_req_rss(struct cxgbi_device *cdev, struct sk_buff *skb)
910 {
911 	struct cxgbi_sock *csk;
912 	struct cpl_abort_req_rss *req = (struct cpl_abort_req_rss *)skb->data;
913 	unsigned int tid = GET_TID(req);
914 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(cdev);
915 	struct tid_info *t = lldi->tids;
916 	int rst_status = CPL_ABORT_NO_RST;
917 
918 	csk = lookup_tid(t, tid);
919 	if (unlikely(!csk)) {
920 		pr_err("can't find connection for tid %u.\n", tid);
921 		goto rel_skb;
922 	}
923 
924 	pr_info_ipaddr("csk 0x%p,%u,0x%lx,%u, status %u.\n",
925 		       (&csk->saddr), (&csk->daddr),
926 		       csk, csk->state, csk->flags, csk->tid, req->status);
927 
928 	if (req->status == CPL_ERR_RTX_NEG_ADVICE ||
929 	    req->status == CPL_ERR_PERSIST_NEG_ADVICE)
930 		goto rel_skb;
931 
932 	cxgbi_sock_get(csk);
933 	spin_lock_bh(&csk->lock);
934 
935 	if (!cxgbi_sock_flag(csk, CTPF_ABORT_REQ_RCVD)) {
936 		cxgbi_sock_set_flag(csk, CTPF_ABORT_REQ_RCVD);
937 		cxgbi_sock_set_state(csk, CTP_ABORTING);
938 		goto done;
939 	}
940 
941 	cxgbi_sock_clear_flag(csk, CTPF_ABORT_REQ_RCVD);
942 	send_abort_rpl(csk, rst_status);
943 
944 	if (!cxgbi_sock_flag(csk, CTPF_ABORT_RPL_PENDING)) {
945 		csk->err = abort_status_to_errno(csk, req->status, &rst_status);
946 		cxgbi_sock_closed(csk);
947 	}
948 done:
949 	spin_unlock_bh(&csk->lock);
950 	cxgbi_sock_put(csk);
951 rel_skb:
952 	__kfree_skb(skb);
953 }
954 
955 static void do_abort_rpl_rss(struct cxgbi_device *cdev, struct sk_buff *skb)
956 {
957 	struct cxgbi_sock *csk;
958 	struct cpl_abort_rpl_rss *rpl = (struct cpl_abort_rpl_rss *)skb->data;
959 	unsigned int tid = GET_TID(rpl);
960 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(cdev);
961 	struct tid_info *t = lldi->tids;
962 
963 	csk = lookup_tid(t, tid);
964 	if (!csk)
965 		goto rel_skb;
966 
967 	if (csk)
968 		pr_info_ipaddr("csk 0x%p,%u,0x%lx,%u, status %u.\n",
969 			       (&csk->saddr), (&csk->daddr), csk,
970 			       csk->state, csk->flags, csk->tid, rpl->status);
971 
972 	if (rpl->status == CPL_ERR_ABORT_FAILED)
973 		goto rel_skb;
974 
975 	cxgbi_sock_rcv_abort_rpl(csk);
976 rel_skb:
977 	__kfree_skb(skb);
978 }
979 
980 static void do_rx_iscsi_hdr(struct cxgbi_device *cdev, struct sk_buff *skb)
981 {
982 	struct cxgbi_sock *csk;
983 	struct cpl_iscsi_hdr *cpl = (struct cpl_iscsi_hdr *)skb->data;
984 	unsigned short pdu_len_ddp = be16_to_cpu(cpl->pdu_len_ddp);
985 	unsigned int tid = GET_TID(cpl);
986 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(cdev);
987 	struct tid_info *t = lldi->tids;
988 
989 	csk = lookup_tid(t, tid);
990 	if (unlikely(!csk)) {
991 		pr_err("can't find conn. for tid %u.\n", tid);
992 		goto rel_skb;
993 	}
994 
995 	log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_PDU_RX,
996 		"csk 0x%p,%u,0x%lx, tid %u, skb 0x%p,%u, 0x%x.\n",
997 		csk, csk->state, csk->flags, csk->tid, skb, skb->len,
998 		pdu_len_ddp);
999 
1000 	spin_lock_bh(&csk->lock);
1001 
1002 	if (unlikely(csk->state >= CTP_PASSIVE_CLOSE)) {
1003 		log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
1004 			"csk 0x%p,%u,0x%lx,%u, bad state.\n",
1005 			csk, csk->state, csk->flags, csk->tid);
1006 		if (csk->state != CTP_ABORTING)
1007 			goto abort_conn;
1008 		else
1009 			goto discard;
1010 	}
1011 
1012 	cxgbi_skcb_tcp_seq(skb) = ntohl(cpl->seq);
1013 	cxgbi_skcb_flags(skb) = 0;
1014 
1015 	skb_reset_transport_header(skb);
1016 	__skb_pull(skb, sizeof(*cpl));
1017 	__pskb_trim(skb, ntohs(cpl->len));
1018 
1019 	if (!csk->skb_ulp_lhdr) {
1020 		unsigned char *bhs;
1021 		unsigned int hlen, dlen, plen;
1022 
1023 		log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_PDU_RX,
1024 			"csk 0x%p,%u,0x%lx, tid %u, skb 0x%p header.\n",
1025 			csk, csk->state, csk->flags, csk->tid, skb);
1026 		csk->skb_ulp_lhdr = skb;
1027 		cxgbi_skcb_set_flag(skb, SKCBF_RX_HDR);
1028 
1029 		if (cxgbi_skcb_tcp_seq(skb) != csk->rcv_nxt) {
1030 			pr_info("tid %u, CPL_ISCSI_HDR, bad seq, 0x%x/0x%x.\n",
1031 				csk->tid, cxgbi_skcb_tcp_seq(skb),
1032 				csk->rcv_nxt);
1033 			goto abort_conn;
1034 		}
1035 
1036 		bhs = skb->data;
1037 		hlen = ntohs(cpl->len);
1038 		dlen = ntohl(*(unsigned int *)(bhs + 4)) & 0xFFFFFF;
1039 
1040 		plen = ISCSI_PDU_LEN(pdu_len_ddp);
1041 		if (is_t4(lldi->adapter_type))
1042 			plen -= 40;
1043 
1044 		if ((hlen + dlen) != plen) {
1045 			pr_info("tid 0x%x, CPL_ISCSI_HDR, pdu len "
1046 				"mismatch %u != %u + %u, seq 0x%x.\n",
1047 				csk->tid, plen, hlen, dlen,
1048 				cxgbi_skcb_tcp_seq(skb));
1049 			goto abort_conn;
1050 		}
1051 
1052 		cxgbi_skcb_rx_pdulen(skb) = (hlen + dlen + 3) & (~0x3);
1053 		if (dlen)
1054 			cxgbi_skcb_rx_pdulen(skb) += csk->dcrc_len;
1055 		csk->rcv_nxt += cxgbi_skcb_rx_pdulen(skb);
1056 
1057 		log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_PDU_RX,
1058 			"csk 0x%p, skb 0x%p, 0x%x,%u+%u,0x%x,0x%x.\n",
1059 			csk, skb, *bhs, hlen, dlen,
1060 			ntohl(*((unsigned int *)(bhs + 16))),
1061 			ntohl(*((unsigned int *)(bhs + 24))));
1062 
1063 	} else {
1064 		struct sk_buff *lskb = csk->skb_ulp_lhdr;
1065 
1066 		cxgbi_skcb_set_flag(lskb, SKCBF_RX_DATA);
1067 		log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_PDU_RX,
1068 			"csk 0x%p,%u,0x%lx, skb 0x%p data, 0x%p.\n",
1069 			csk, csk->state, csk->flags, skb, lskb);
1070 	}
1071 
1072 	__skb_queue_tail(&csk->receive_queue, skb);
1073 	spin_unlock_bh(&csk->lock);
1074 	return;
1075 
1076 abort_conn:
1077 	send_abort_req(csk);
1078 discard:
1079 	spin_unlock_bh(&csk->lock);
1080 rel_skb:
1081 	__kfree_skb(skb);
1082 }
1083 
1084 static void do_rx_data_ddp(struct cxgbi_device *cdev,
1085 				  struct sk_buff *skb)
1086 {
1087 	struct cxgbi_sock *csk;
1088 	struct sk_buff *lskb;
1089 	struct cpl_rx_data_ddp *rpl = (struct cpl_rx_data_ddp *)skb->data;
1090 	unsigned int tid = GET_TID(rpl);
1091 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(cdev);
1092 	struct tid_info *t = lldi->tids;
1093 	unsigned int status = ntohl(rpl->ddpvld);
1094 
1095 	csk = lookup_tid(t, tid);
1096 	if (unlikely(!csk)) {
1097 		pr_err("can't find connection for tid %u.\n", tid);
1098 		goto rel_skb;
1099 	}
1100 
1101 	log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_PDU_RX,
1102 		"csk 0x%p,%u,0x%lx, skb 0x%p,0x%x, lhdr 0x%p.\n",
1103 		csk, csk->state, csk->flags, skb, status, csk->skb_ulp_lhdr);
1104 
1105 	spin_lock_bh(&csk->lock);
1106 
1107 	if (unlikely(csk->state >= CTP_PASSIVE_CLOSE)) {
1108 		log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
1109 			"csk 0x%p,%u,0x%lx,%u, bad state.\n",
1110 			csk, csk->state, csk->flags, csk->tid);
1111 		if (csk->state != CTP_ABORTING)
1112 			goto abort_conn;
1113 		else
1114 			goto discard;
1115 	}
1116 
1117 	if (!csk->skb_ulp_lhdr) {
1118 		pr_err("tid 0x%x, rcv RX_DATA_DDP w/o pdu bhs.\n", csk->tid);
1119 		goto abort_conn;
1120 	}
1121 
1122 	lskb = csk->skb_ulp_lhdr;
1123 	csk->skb_ulp_lhdr = NULL;
1124 
1125 	cxgbi_skcb_rx_ddigest(lskb) = ntohl(rpl->ulp_crc);
1126 
1127 	if (ntohs(rpl->len) != cxgbi_skcb_rx_pdulen(lskb))
1128 		pr_info("tid 0x%x, RX_DATA_DDP pdulen %u != %u.\n",
1129 			csk->tid, ntohs(rpl->len), cxgbi_skcb_rx_pdulen(lskb));
1130 
1131 	if (status & (1 << CPL_RX_DDP_STATUS_HCRC_SHIFT)) {
1132 		pr_info("csk 0x%p, lhdr 0x%p, status 0x%x, hcrc bad 0x%lx.\n",
1133 			csk, lskb, status, cxgbi_skcb_flags(lskb));
1134 		cxgbi_skcb_set_flag(lskb, SKCBF_RX_HCRC_ERR);
1135 	}
1136 	if (status & (1 << CPL_RX_DDP_STATUS_DCRC_SHIFT)) {
1137 		pr_info("csk 0x%p, lhdr 0x%p, status 0x%x, dcrc bad 0x%lx.\n",
1138 			csk, lskb, status, cxgbi_skcb_flags(lskb));
1139 		cxgbi_skcb_set_flag(lskb, SKCBF_RX_DCRC_ERR);
1140 	}
1141 	if (status & (1 << CPL_RX_DDP_STATUS_PAD_SHIFT)) {
1142 		log_debug(1 << CXGBI_DBG_PDU_RX,
1143 			"csk 0x%p, lhdr 0x%p, status 0x%x, pad bad.\n",
1144 			csk, lskb, status);
1145 		cxgbi_skcb_set_flag(lskb, SKCBF_RX_PAD_ERR);
1146 	}
1147 	if ((status & (1 << CPL_RX_DDP_STATUS_DDP_SHIFT)) &&
1148 		!cxgbi_skcb_test_flag(lskb, SKCBF_RX_DATA)) {
1149 		log_debug(1 << CXGBI_DBG_PDU_RX,
1150 			"csk 0x%p, lhdr 0x%p, 0x%x, data ddp'ed.\n",
1151 			csk, lskb, status);
1152 		cxgbi_skcb_set_flag(lskb, SKCBF_RX_DATA_DDPD);
1153 	}
1154 	log_debug(1 << CXGBI_DBG_PDU_RX,
1155 		"csk 0x%p, lskb 0x%p, f 0x%lx.\n",
1156 		csk, lskb, cxgbi_skcb_flags(lskb));
1157 
1158 	cxgbi_skcb_set_flag(lskb, SKCBF_RX_STATUS);
1159 	cxgbi_conn_pdu_ready(csk);
1160 	spin_unlock_bh(&csk->lock);
1161 	goto rel_skb;
1162 
1163 abort_conn:
1164 	send_abort_req(csk);
1165 discard:
1166 	spin_unlock_bh(&csk->lock);
1167 rel_skb:
1168 	__kfree_skb(skb);
1169 }
1170 
1171 static void do_fw4_ack(struct cxgbi_device *cdev, struct sk_buff *skb)
1172 {
1173 	struct cxgbi_sock *csk;
1174 	struct cpl_fw4_ack *rpl = (struct cpl_fw4_ack *)skb->data;
1175 	unsigned int tid = GET_TID(rpl);
1176 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(cdev);
1177 	struct tid_info *t = lldi->tids;
1178 
1179 	csk = lookup_tid(t, tid);
1180 	if (unlikely(!csk))
1181 		pr_err("can't find connection for tid %u.\n", tid);
1182 	else {
1183 		log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
1184 			"csk 0x%p,%u,0x%lx,%u.\n",
1185 			csk, csk->state, csk->flags, csk->tid);
1186 		cxgbi_sock_rcv_wr_ack(csk, rpl->credits, ntohl(rpl->snd_una),
1187 					rpl->seq_vld);
1188 	}
1189 	__kfree_skb(skb);
1190 }
1191 
1192 static void do_set_tcb_rpl(struct cxgbi_device *cdev, struct sk_buff *skb)
1193 {
1194 	struct cpl_set_tcb_rpl *rpl = (struct cpl_set_tcb_rpl *)skb->data;
1195 	unsigned int tid = GET_TID(rpl);
1196 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(cdev);
1197 	struct tid_info *t = lldi->tids;
1198 	struct cxgbi_sock *csk;
1199 
1200 	csk = lookup_tid(t, tid);
1201 	if (!csk)
1202 		pr_err("can't find conn. for tid %u.\n", tid);
1203 
1204 	log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
1205 		"csk 0x%p,%u,%lx,%u, status 0x%x.\n",
1206 		csk, csk->state, csk->flags, csk->tid, rpl->status);
1207 
1208 	if (rpl->status != CPL_ERR_NONE)
1209 		pr_err("csk 0x%p,%u, SET_TCB_RPL status %u.\n",
1210 			csk, tid, rpl->status);
1211 
1212 	__kfree_skb(skb);
1213 }
1214 
1215 static int alloc_cpls(struct cxgbi_sock *csk)
1216 {
1217 	csk->cpl_close = alloc_wr(sizeof(struct cpl_close_con_req),
1218 					0, GFP_KERNEL);
1219 	if (!csk->cpl_close)
1220 		return -ENOMEM;
1221 
1222 	csk->cpl_abort_req = alloc_wr(sizeof(struct cpl_abort_req),
1223 					0, GFP_KERNEL);
1224 	if (!csk->cpl_abort_req)
1225 		goto free_cpls;
1226 
1227 	csk->cpl_abort_rpl = alloc_wr(sizeof(struct cpl_abort_rpl),
1228 					0, GFP_KERNEL);
1229 	if (!csk->cpl_abort_rpl)
1230 		goto free_cpls;
1231 	return 0;
1232 
1233 free_cpls:
1234 	cxgbi_sock_free_cpl_skbs(csk);
1235 	return -ENOMEM;
1236 }
1237 
1238 static inline void l2t_put(struct cxgbi_sock *csk)
1239 {
1240 	if (csk->l2t) {
1241 		cxgb4_l2t_release(csk->l2t);
1242 		csk->l2t = NULL;
1243 		cxgbi_sock_put(csk);
1244 	}
1245 }
1246 
1247 static void release_offload_resources(struct cxgbi_sock *csk)
1248 {
1249 	struct cxgb4_lld_info *lldi;
1250 
1251 	log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
1252 		"csk 0x%p,%u,0x%lx,%u.\n",
1253 		csk, csk->state, csk->flags, csk->tid);
1254 
1255 	cxgbi_sock_free_cpl_skbs(csk);
1256 	if (csk->wr_cred != csk->wr_max_cred) {
1257 		cxgbi_sock_purge_wr_queue(csk);
1258 		cxgbi_sock_reset_wr_list(csk);
1259 	}
1260 
1261 	l2t_put(csk);
1262 	if (cxgbi_sock_flag(csk, CTPF_HAS_ATID))
1263 		free_atid(csk);
1264 	else if (cxgbi_sock_flag(csk, CTPF_HAS_TID)) {
1265 		lldi = cxgbi_cdev_priv(csk->cdev);
1266 		cxgb4_remove_tid(lldi->tids, 0, csk->tid);
1267 		cxgbi_sock_clear_flag(csk, CTPF_HAS_TID);
1268 		cxgbi_sock_put(csk);
1269 	}
1270 	csk->dst = NULL;
1271 	csk->cdev = NULL;
1272 }
1273 
1274 static int init_act_open(struct cxgbi_sock *csk)
1275 {
1276 	struct cxgbi_device *cdev = csk->cdev;
1277 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(cdev);
1278 	struct net_device *ndev = cdev->ports[csk->port_id];
1279 	struct sk_buff *skb = NULL;
1280 	struct neighbour *n = NULL;
1281 	void *daddr;
1282 	unsigned int step;
1283 	unsigned int size, size6;
1284 	int t4 = is_t4(lldi->adapter_type);
1285 
1286 	log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
1287 		"csk 0x%p,%u,0x%lx,%u.\n",
1288 		csk, csk->state, csk->flags, csk->tid);
1289 
1290 	if (csk->csk_family == AF_INET)
1291 		daddr = &csk->daddr.sin_addr.s_addr;
1292 #if IS_ENABLED(CONFIG_IPV6)
1293 	else if (csk->csk_family == AF_INET6)
1294 		daddr = &csk->daddr6.sin6_addr;
1295 #endif
1296 	else {
1297 		pr_err("address family 0x%x not supported\n", csk->csk_family);
1298 		goto rel_resource;
1299 	}
1300 
1301 	n = dst_neigh_lookup(csk->dst, daddr);
1302 
1303 	if (!n) {
1304 		pr_err("%s, can't get neighbour of csk->dst.\n", ndev->name);
1305 		goto rel_resource;
1306 	}
1307 
1308 	csk->atid = cxgb4_alloc_atid(lldi->tids, csk);
1309 	if (csk->atid < 0) {
1310 		pr_err("%s, NO atid available.\n", ndev->name);
1311 		return -EINVAL;
1312 	}
1313 	cxgbi_sock_set_flag(csk, CTPF_HAS_ATID);
1314 	cxgbi_sock_get(csk);
1315 
1316 	n = dst_neigh_lookup(csk->dst, &csk->daddr.sin_addr.s_addr);
1317 	if (!n) {
1318 		pr_err("%s, can't get neighbour of csk->dst.\n", ndev->name);
1319 		goto rel_resource;
1320 	}
1321 	csk->l2t = cxgb4_l2t_get(lldi->l2t, n, ndev, 0);
1322 	if (!csk->l2t) {
1323 		pr_err("%s, cannot alloc l2t.\n", ndev->name);
1324 		goto rel_resource;
1325 	}
1326 	cxgbi_sock_get(csk);
1327 
1328 	if (t4) {
1329 		size = sizeof(struct cpl_act_open_req);
1330 		size6 = sizeof(struct cpl_act_open_req6);
1331 	} else {
1332 		size = sizeof(struct cpl_t5_act_open_req);
1333 		size6 = sizeof(struct cpl_t5_act_open_req6);
1334 	}
1335 
1336 	if (csk->csk_family == AF_INET)
1337 		skb = alloc_wr(size, 0, GFP_NOIO);
1338 	else
1339 		skb = alloc_wr(size6, 0, GFP_NOIO);
1340 
1341 	if (!skb)
1342 		goto rel_resource;
1343 	skb->sk = (struct sock *)csk;
1344 	t4_set_arp_err_handler(skb, csk, cxgbi_sock_act_open_req_arp_failure);
1345 
1346 	if (!csk->mtu)
1347 		csk->mtu = dst_mtu(csk->dst);
1348 	cxgb4_best_mtu(lldi->mtus, csk->mtu, &csk->mss_idx);
1349 	csk->tx_chan = cxgb4_port_chan(ndev);
1350 	/* SMT two entries per row */
1351 	csk->smac_idx = ((cxgb4_port_viid(ndev) & 0x7F)) << 1;
1352 	step = lldi->ntxq / lldi->nchan;
1353 	csk->txq_idx = cxgb4_port_idx(ndev) * step;
1354 	step = lldi->nrxq / lldi->nchan;
1355 	csk->rss_qid = lldi->rxq_ids[cxgb4_port_idx(ndev) * step];
1356 	csk->wr_cred = lldi->wr_cred -
1357 		       DIV_ROUND_UP(sizeof(struct cpl_abort_req), 16);
1358 	csk->wr_max_cred = csk->wr_cred;
1359 	csk->wr_una_cred = 0;
1360 	cxgbi_sock_reset_wr_list(csk);
1361 	csk->err = 0;
1362 
1363 	pr_info_ipaddr("csk 0x%p,%u,0x%lx,%u,%u,%u, mtu %u,%u, smac %u.\n",
1364 		       (&csk->saddr), (&csk->daddr), csk, csk->state,
1365 		       csk->flags, csk->tx_chan, csk->txq_idx, csk->rss_qid,
1366 		       csk->mtu, csk->mss_idx, csk->smac_idx);
1367 
1368 	/* must wait for either a act_open_rpl or act_open_establish */
1369 	try_module_get(THIS_MODULE);
1370 	cxgbi_sock_set_state(csk, CTP_ACTIVE_OPEN);
1371 	if (csk->csk_family == AF_INET)
1372 		send_act_open_req(csk, skb, csk->l2t);
1373 	else
1374 		send_act_open_req6(csk, skb, csk->l2t);
1375 	neigh_release(n);
1376 
1377 	return 0;
1378 
1379 rel_resource:
1380 	if (n)
1381 		neigh_release(n);
1382 	if (skb)
1383 		__kfree_skb(skb);
1384 	return -EINVAL;
1385 }
1386 
1387 cxgb4i_cplhandler_func cxgb4i_cplhandlers[NUM_CPL_CMDS] = {
1388 	[CPL_ACT_ESTABLISH] = do_act_establish,
1389 	[CPL_ACT_OPEN_RPL] = do_act_open_rpl,
1390 	[CPL_PEER_CLOSE] = do_peer_close,
1391 	[CPL_ABORT_REQ_RSS] = do_abort_req_rss,
1392 	[CPL_ABORT_RPL_RSS] = do_abort_rpl_rss,
1393 	[CPL_CLOSE_CON_RPL] = do_close_con_rpl,
1394 	[CPL_FW4_ACK] = do_fw4_ack,
1395 	[CPL_ISCSI_HDR] = do_rx_iscsi_hdr,
1396 	[CPL_ISCSI_DATA] = do_rx_iscsi_hdr,
1397 	[CPL_SET_TCB_RPL] = do_set_tcb_rpl,
1398 	[CPL_RX_DATA_DDP] = do_rx_data_ddp,
1399 	[CPL_RX_ISCSI_DDP] = do_rx_data_ddp,
1400 };
1401 
1402 int cxgb4i_ofld_init(struct cxgbi_device *cdev)
1403 {
1404 	int rc;
1405 
1406 	if (cxgb4i_max_connect > CXGB4I_MAX_CONN)
1407 		cxgb4i_max_connect = CXGB4I_MAX_CONN;
1408 
1409 	rc = cxgbi_device_portmap_create(cdev, cxgb4i_sport_base,
1410 					cxgb4i_max_connect);
1411 	if (rc < 0)
1412 		return rc;
1413 
1414 	cdev->csk_release_offload_resources = release_offload_resources;
1415 	cdev->csk_push_tx_frames = push_tx_frames;
1416 	cdev->csk_send_abort_req = send_abort_req;
1417 	cdev->csk_send_close_req = send_close_req;
1418 	cdev->csk_send_rx_credits = send_rx_credits;
1419 	cdev->csk_alloc_cpls = alloc_cpls;
1420 	cdev->csk_init_act_open = init_act_open;
1421 
1422 	pr_info("cdev 0x%p, offload up, added.\n", cdev);
1423 	return 0;
1424 }
1425 
1426 /*
1427  * functions to program the pagepod in h/w
1428  */
1429 #define ULPMEM_IDATA_MAX_NPPODS	4 /* 256/PPOD_SIZE */
1430 static inline void ulp_mem_io_set_hdr(struct cxgb4_lld_info *lldi,
1431 				struct ulp_mem_io *req,
1432 				unsigned int wr_len, unsigned int dlen,
1433 				unsigned int pm_addr)
1434 {
1435 	struct ulptx_idata *idata = (struct ulptx_idata *)(req + 1);
1436 
1437 	INIT_ULPTX_WR(req, wr_len, 0, 0);
1438 	if (is_t4(lldi->adapter_type))
1439 		req->cmd = htonl(ULPTX_CMD(ULP_TX_MEM_WRITE) |
1440 					(ULP_MEMIO_ORDER(1)));
1441 	else
1442 		req->cmd = htonl(ULPTX_CMD(ULP_TX_MEM_WRITE) |
1443 					(V_T5_ULP_MEMIO_IMM(1)));
1444 	req->dlen = htonl(ULP_MEMIO_DATA_LEN(dlen >> 5));
1445 	req->lock_addr = htonl(ULP_MEMIO_ADDR(pm_addr >> 5));
1446 	req->len16 = htonl(DIV_ROUND_UP(wr_len - sizeof(req->wr), 16));
1447 
1448 	idata->cmd_more = htonl(ULPTX_CMD(ULP_TX_SC_IMM));
1449 	idata->len = htonl(dlen);
1450 }
1451 
1452 static int ddp_ppod_write_idata(struct cxgbi_device *cdev, unsigned int port_id,
1453 				struct cxgbi_pagepod_hdr *hdr, unsigned int idx,
1454 				unsigned int npods,
1455 				struct cxgbi_gather_list *gl,
1456 				unsigned int gl_pidx)
1457 {
1458 	struct cxgbi_ddp_info *ddp = cdev->ddp;
1459 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(cdev);
1460 	struct sk_buff *skb;
1461 	struct ulp_mem_io *req;
1462 	struct ulptx_idata *idata;
1463 	struct cxgbi_pagepod *ppod;
1464 	unsigned int pm_addr = idx * PPOD_SIZE + ddp->llimit;
1465 	unsigned int dlen = PPOD_SIZE * npods;
1466 	unsigned int wr_len = roundup(sizeof(struct ulp_mem_io) +
1467 				sizeof(struct ulptx_idata) + dlen, 16);
1468 	unsigned int i;
1469 
1470 	skb = alloc_wr(wr_len, 0, GFP_ATOMIC);
1471 	if (!skb) {
1472 		pr_err("cdev 0x%p, idx %u, npods %u, OOM.\n",
1473 			cdev, idx, npods);
1474 		return -ENOMEM;
1475 	}
1476 	req = (struct ulp_mem_io *)skb->head;
1477 	set_queue(skb, CPL_PRIORITY_CONTROL, NULL);
1478 
1479 	ulp_mem_io_set_hdr(lldi, req, wr_len, dlen, pm_addr);
1480 	idata = (struct ulptx_idata *)(req + 1);
1481 	ppod = (struct cxgbi_pagepod *)(idata + 1);
1482 
1483 	for (i = 0; i < npods; i++, ppod++, gl_pidx += PPOD_PAGES_MAX) {
1484 		if (!hdr && !gl)
1485 			cxgbi_ddp_ppod_clear(ppod);
1486 		else
1487 			cxgbi_ddp_ppod_set(ppod, hdr, gl, gl_pidx);
1488 	}
1489 
1490 	cxgb4_ofld_send(cdev->ports[port_id], skb);
1491 	return 0;
1492 }
1493 
1494 static int ddp_set_map(struct cxgbi_sock *csk, struct cxgbi_pagepod_hdr *hdr,
1495 			unsigned int idx, unsigned int npods,
1496 			struct cxgbi_gather_list *gl)
1497 {
1498 	unsigned int i, cnt;
1499 	int err = 0;
1500 
1501 	for (i = 0; i < npods; i += cnt, idx += cnt) {
1502 		cnt = npods - i;
1503 		if (cnt > ULPMEM_IDATA_MAX_NPPODS)
1504 			cnt = ULPMEM_IDATA_MAX_NPPODS;
1505 		err = ddp_ppod_write_idata(csk->cdev, csk->port_id, hdr,
1506 					idx, cnt, gl, 4 * i);
1507 		if (err < 0)
1508 			break;
1509 	}
1510 	return err;
1511 }
1512 
1513 static void ddp_clear_map(struct cxgbi_hba *chba, unsigned int tag,
1514 			  unsigned int idx, unsigned int npods)
1515 {
1516 	unsigned int i, cnt;
1517 	int err;
1518 
1519 	for (i = 0; i < npods; i += cnt, idx += cnt) {
1520 		cnt = npods - i;
1521 		if (cnt > ULPMEM_IDATA_MAX_NPPODS)
1522 			cnt = ULPMEM_IDATA_MAX_NPPODS;
1523 		err = ddp_ppod_write_idata(chba->cdev, chba->port_id, NULL,
1524 					idx, cnt, NULL, 0);
1525 		if (err < 0)
1526 			break;
1527 	}
1528 }
1529 
1530 static int ddp_setup_conn_pgidx(struct cxgbi_sock *csk, unsigned int tid,
1531 				int pg_idx, bool reply)
1532 {
1533 	struct sk_buff *skb;
1534 	struct cpl_set_tcb_field *req;
1535 
1536 	if (!pg_idx || pg_idx >= DDP_PGIDX_MAX)
1537 		return 0;
1538 
1539 	skb = alloc_wr(sizeof(*req), 0, GFP_KERNEL);
1540 	if (!skb)
1541 		return -ENOMEM;
1542 
1543 	/*  set up ulp page size */
1544 	req = (struct cpl_set_tcb_field *)skb->head;
1545 	INIT_TP_WR(req, csk->tid);
1546 	OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, csk->tid));
1547 	req->reply_ctrl = htons(NO_REPLY(reply) | QUEUENO(csk->rss_qid));
1548 	req->word_cookie = htons(0);
1549 	req->mask = cpu_to_be64(0x3 << 8);
1550 	req->val = cpu_to_be64(pg_idx << 8);
1551 	set_wr_txq(skb, CPL_PRIORITY_CONTROL, csk->port_id);
1552 
1553 	log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
1554 		"csk 0x%p, tid 0x%x, pg_idx %u.\n", csk, csk->tid, pg_idx);
1555 
1556 	cxgb4_ofld_send(csk->cdev->ports[csk->port_id], skb);
1557 	return 0;
1558 }
1559 
1560 static int ddp_setup_conn_digest(struct cxgbi_sock *csk, unsigned int tid,
1561 				 int hcrc, int dcrc, int reply)
1562 {
1563 	struct sk_buff *skb;
1564 	struct cpl_set_tcb_field *req;
1565 
1566 	if (!hcrc && !dcrc)
1567 		return 0;
1568 
1569 	skb = alloc_wr(sizeof(*req), 0, GFP_KERNEL);
1570 	if (!skb)
1571 		return -ENOMEM;
1572 
1573 	csk->hcrc_len = (hcrc ? 4 : 0);
1574 	csk->dcrc_len = (dcrc ? 4 : 0);
1575 	/*  set up ulp submode */
1576 	req = (struct cpl_set_tcb_field *)skb->head;
1577 	INIT_TP_WR(req, tid);
1578 	OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, tid));
1579 	req->reply_ctrl = htons(NO_REPLY(reply) | QUEUENO(csk->rss_qid));
1580 	req->word_cookie = htons(0);
1581 	req->mask = cpu_to_be64(0x3 << 4);
1582 	req->val = cpu_to_be64(((hcrc ? ULP_CRC_HEADER : 0) |
1583 				(dcrc ? ULP_CRC_DATA : 0)) << 4);
1584 	set_wr_txq(skb, CPL_PRIORITY_CONTROL, csk->port_id);
1585 
1586 	log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
1587 		"csk 0x%p, tid 0x%x, crc %d,%d.\n", csk, csk->tid, hcrc, dcrc);
1588 
1589 	cxgb4_ofld_send(csk->cdev->ports[csk->port_id], skb);
1590 	return 0;
1591 }
1592 
1593 static int cxgb4i_ddp_init(struct cxgbi_device *cdev)
1594 {
1595 	struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(cdev);
1596 	struct cxgbi_ddp_info *ddp = cdev->ddp;
1597 	unsigned int tagmask, pgsz_factor[4];
1598 	int err;
1599 
1600 	if (ddp) {
1601 		kref_get(&ddp->refcnt);
1602 		pr_warn("cdev 0x%p, ddp 0x%p already set up.\n",
1603 			cdev, cdev->ddp);
1604 		return -EALREADY;
1605 	}
1606 
1607 	err = cxgbi_ddp_init(cdev, lldi->vr->iscsi.start,
1608 			lldi->vr->iscsi.start + lldi->vr->iscsi.size - 1,
1609 			lldi->iscsi_iolen, lldi->iscsi_iolen);
1610 	if (err < 0)
1611 		return err;
1612 
1613 	ddp = cdev->ddp;
1614 
1615 	tagmask = ddp->idx_mask << PPOD_IDX_SHIFT;
1616 	cxgbi_ddp_page_size_factor(pgsz_factor);
1617 	cxgb4_iscsi_init(lldi->ports[0], tagmask, pgsz_factor);
1618 
1619 	cdev->csk_ddp_setup_digest = ddp_setup_conn_digest;
1620 	cdev->csk_ddp_setup_pgidx = ddp_setup_conn_pgidx;
1621 	cdev->csk_ddp_set = ddp_set_map;
1622 	cdev->csk_ddp_clear = ddp_clear_map;
1623 
1624 	pr_info("cxgb4i 0x%p tag: sw %u, rsvd %u,%u, mask 0x%x.\n",
1625 		cdev, cdev->tag_format.sw_bits, cdev->tag_format.rsvd_bits,
1626 		cdev->tag_format.rsvd_shift, cdev->tag_format.rsvd_mask);
1627 	pr_info("cxgb4i 0x%p, nppods %u, bits %u, mask 0x%x,0x%x pkt %u/%u, "
1628 		" %u/%u.\n",
1629 		cdev, ddp->nppods, ddp->idx_bits, ddp->idx_mask,
1630 		ddp->rsvd_tag_mask, ddp->max_txsz, lldi->iscsi_iolen,
1631 		ddp->max_rxsz, lldi->iscsi_iolen);
1632 	pr_info("cxgb4i 0x%p max payload size: %u/%u, %u/%u.\n",
1633 		cdev, cdev->tx_max_size, ddp->max_txsz, cdev->rx_max_size,
1634 		ddp->max_rxsz);
1635 	return 0;
1636 }
1637 
1638 #if IS_ENABLED(CONFIG_IPV6)
1639 static int cxgbi_inet6addr_handler(struct notifier_block *this,
1640 				   unsigned long event, void *data)
1641 {
1642 	struct inet6_ifaddr *ifa = data;
1643 	struct net_device *event_dev = ifa->idev->dev;
1644 	struct cxgbi_device *cdev;
1645 	int ret = NOTIFY_DONE;
1646 
1647 	if (event_dev->priv_flags & IFF_802_1Q_VLAN)
1648 		event_dev = vlan_dev_real_dev(event_dev);
1649 
1650 	cdev = cxgbi_device_find_by_netdev_rcu(event_dev, NULL);
1651 
1652 	if (!cdev)
1653 		return ret;
1654 
1655 	switch (event) {
1656 	case NETDEV_UP:
1657 		ret = cxgb4_clip_get(event_dev,
1658 				     (const struct in6_addr *)
1659 				     ((ifa)->addr.s6_addr));
1660 		if (ret < 0)
1661 			return ret;
1662 
1663 		ret = NOTIFY_OK;
1664 		break;
1665 
1666 	case NETDEV_DOWN:
1667 		cxgb4_clip_release(event_dev,
1668 				   (const struct in6_addr *)
1669 				   ((ifa)->addr.s6_addr));
1670 		ret = NOTIFY_OK;
1671 		break;
1672 
1673 	default:
1674 		break;
1675 	}
1676 
1677 	return ret;
1678 }
1679 
1680 static struct notifier_block cxgbi_inet6addr_notifier = {
1681 	.notifier_call = cxgbi_inet6addr_handler
1682 };
1683 
1684 /* Retrieve IPv6 addresses from a root device (bond, vlan) associated with
1685  * a physical device.
1686  * The physical device reference is needed to send the actual CLIP command.
1687  */
1688 static int update_dev_clip(struct net_device *root_dev, struct net_device *dev)
1689 {
1690 	struct inet6_dev *idev = NULL;
1691 	struct inet6_ifaddr *ifa;
1692 	int ret = 0;
1693 
1694 	idev = __in6_dev_get(root_dev);
1695 	if (!idev)
1696 		return ret;
1697 
1698 	read_lock_bh(&idev->lock);
1699 	list_for_each_entry(ifa, &idev->addr_list, if_list) {
1700 		pr_info("updating the clip for addr %pI6\n",
1701 			ifa->addr.s6_addr);
1702 		ret = cxgb4_clip_get(dev, (const struct in6_addr *)
1703 				     ifa->addr.s6_addr);
1704 		if (ret < 0)
1705 			break;
1706 	}
1707 
1708 	read_unlock_bh(&idev->lock);
1709 	return ret;
1710 }
1711 
1712 static int update_root_dev_clip(struct net_device *dev)
1713 {
1714 	struct net_device *root_dev = NULL;
1715 	int i, ret = 0;
1716 
1717 	/* First populate the real net device's IPv6 address */
1718 	ret = update_dev_clip(dev, dev);
1719 	if (ret)
1720 		return ret;
1721 
1722 	/* Parse all bond and vlan devices layered on top of the physical dev */
1723 	root_dev = netdev_master_upper_dev_get(dev);
1724 	if (root_dev) {
1725 		ret = update_dev_clip(root_dev, dev);
1726 		if (ret)
1727 			return ret;
1728 	}
1729 
1730 	for (i = 0; i < VLAN_N_VID; i++) {
1731 		root_dev = __vlan_find_dev_deep_rcu(dev, htons(ETH_P_8021Q), i);
1732 		if (!root_dev)
1733 			continue;
1734 
1735 		ret = update_dev_clip(root_dev, dev);
1736 		if (ret)
1737 			break;
1738 	}
1739 	return ret;
1740 }
1741 
1742 static void cxgbi_update_clip(struct cxgbi_device *cdev)
1743 {
1744 	int i;
1745 
1746 	rcu_read_lock();
1747 
1748 	for (i = 0; i < cdev->nports; i++) {
1749 		struct net_device *dev = cdev->ports[i];
1750 		int ret = 0;
1751 
1752 		if (dev)
1753 			ret = update_root_dev_clip(dev);
1754 		if (ret < 0)
1755 			break;
1756 	}
1757 	rcu_read_unlock();
1758 }
1759 #endif /* IS_ENABLED(CONFIG_IPV6) */
1760 
1761 static void *t4_uld_add(const struct cxgb4_lld_info *lldi)
1762 {
1763 	struct cxgbi_device *cdev;
1764 	struct port_info *pi;
1765 	int i, rc;
1766 
1767 	cdev = cxgbi_device_register(sizeof(*lldi), lldi->nports);
1768 	if (!cdev) {
1769 		pr_info("t4 device 0x%p, register failed.\n", lldi);
1770 		return NULL;
1771 	}
1772 	pr_info("0x%p,0x%x, ports %u,%s, chan %u, q %u,%u, wr %u.\n",
1773 		cdev, lldi->adapter_type, lldi->nports,
1774 		lldi->ports[0]->name, lldi->nchan, lldi->ntxq,
1775 		lldi->nrxq, lldi->wr_cred);
1776 	for (i = 0; i < lldi->nrxq; i++)
1777 		log_debug(1 << CXGBI_DBG_DEV,
1778 			"t4 0x%p, rxq id #%d: %u.\n",
1779 			cdev, i, lldi->rxq_ids[i]);
1780 
1781 	memcpy(cxgbi_cdev_priv(cdev), lldi, sizeof(*lldi));
1782 	cdev->flags = CXGBI_FLAG_DEV_T4;
1783 	cdev->pdev = lldi->pdev;
1784 	cdev->ports = lldi->ports;
1785 	cdev->nports = lldi->nports;
1786 	cdev->mtus = lldi->mtus;
1787 	cdev->nmtus = NMTUS;
1788 	cdev->snd_win = cxgb4i_snd_win;
1789 	cdev->rcv_win = cxgb4i_rcv_win;
1790 	cdev->rx_credit_thres = cxgb4i_rx_credit_thres;
1791 	cdev->skb_tx_rsvd = CXGB4I_TX_HEADER_LEN;
1792 	cdev->skb_rx_extra = sizeof(struct cpl_iscsi_hdr);
1793 	cdev->itp = &cxgb4i_iscsi_transport;
1794 
1795 	cdev->pfvf = FW_VIID_PFN_GET(cxgb4_port_viid(lldi->ports[0])) << 8;
1796 	pr_info("cdev 0x%p,%s, pfvf %u.\n",
1797 		cdev, lldi->ports[0]->name, cdev->pfvf);
1798 
1799 	rc = cxgb4i_ddp_init(cdev);
1800 	if (rc) {
1801 		pr_info("t4 0x%p ddp init failed.\n", cdev);
1802 		goto err_out;
1803 	}
1804 	rc = cxgb4i_ofld_init(cdev);
1805 	if (rc) {
1806 		pr_info("t4 0x%p ofld init failed.\n", cdev);
1807 		goto err_out;
1808 	}
1809 
1810 	rc = cxgbi_hbas_add(cdev, CXGB4I_MAX_LUN, CXGBI_MAX_CONN,
1811 				&cxgb4i_host_template, cxgb4i_stt);
1812 	if (rc)
1813 		goto err_out;
1814 
1815 	for (i = 0; i < cdev->nports; i++) {
1816 		pi = netdev_priv(lldi->ports[i]);
1817 		cdev->hbas[i]->port_id = pi->port_id;
1818 	}
1819 	return cdev;
1820 
1821 err_out:
1822 	cxgbi_device_unregister(cdev);
1823 	return ERR_PTR(-ENOMEM);
1824 }
1825 
1826 #define RX_PULL_LEN	128
1827 static int t4_uld_rx_handler(void *handle, const __be64 *rsp,
1828 				const struct pkt_gl *pgl)
1829 {
1830 	const struct cpl_act_establish *rpl;
1831 	struct sk_buff *skb;
1832 	unsigned int opc;
1833 	struct cxgbi_device *cdev = handle;
1834 
1835 	if (pgl == NULL) {
1836 		unsigned int len = 64 - sizeof(struct rsp_ctrl) - 8;
1837 
1838 		skb = alloc_wr(len, 0, GFP_ATOMIC);
1839 		if (!skb)
1840 			goto nomem;
1841 		skb_copy_to_linear_data(skb, &rsp[1], len);
1842 	} else {
1843 		if (unlikely(*(u8 *)rsp != *(u8 *)pgl->va)) {
1844 			pr_info("? FL 0x%p,RSS%#llx,FL %#llx,len %u.\n",
1845 				pgl->va, be64_to_cpu(*rsp),
1846 				be64_to_cpu(*(u64 *)pgl->va),
1847 				pgl->tot_len);
1848 			return 0;
1849 		}
1850 		skb = cxgb4_pktgl_to_skb(pgl, RX_PULL_LEN, RX_PULL_LEN);
1851 		if (unlikely(!skb))
1852 			goto nomem;
1853 	}
1854 
1855 	rpl = (struct cpl_act_establish *)skb->data;
1856 	opc = rpl->ot.opcode;
1857 	log_debug(1 << CXGBI_DBG_TOE,
1858 		"cdev %p, opcode 0x%x(0x%x,0x%x), skb %p.\n",
1859 		 cdev, opc, rpl->ot.opcode_tid, ntohl(rpl->ot.opcode_tid), skb);
1860 	if (cxgb4i_cplhandlers[opc])
1861 		cxgb4i_cplhandlers[opc](cdev, skb);
1862 	else {
1863 		pr_err("No handler for opcode 0x%x.\n", opc);
1864 		__kfree_skb(skb);
1865 	}
1866 	return 0;
1867 nomem:
1868 	log_debug(1 << CXGBI_DBG_TOE, "OOM bailing out.\n");
1869 	return 1;
1870 }
1871 
1872 static int t4_uld_state_change(void *handle, enum cxgb4_state state)
1873 {
1874 	struct cxgbi_device *cdev = handle;
1875 
1876 	switch (state) {
1877 	case CXGB4_STATE_UP:
1878 		pr_info("cdev 0x%p, UP.\n", cdev);
1879 #if IS_ENABLED(CONFIG_IPV6)
1880 		cxgbi_update_clip(cdev);
1881 #endif
1882 		/* re-initialize */
1883 		break;
1884 	case CXGB4_STATE_START_RECOVERY:
1885 		pr_info("cdev 0x%p, RECOVERY.\n", cdev);
1886 		/* close all connections */
1887 		break;
1888 	case CXGB4_STATE_DOWN:
1889 		pr_info("cdev 0x%p, DOWN.\n", cdev);
1890 		break;
1891 	case CXGB4_STATE_DETACH:
1892 		pr_info("cdev 0x%p, DETACH.\n", cdev);
1893 		cxgbi_device_unregister(cdev);
1894 		break;
1895 	default:
1896 		pr_info("cdev 0x%p, unknown state %d.\n", cdev, state);
1897 		break;
1898 	}
1899 	return 0;
1900 }
1901 
1902 static int __init cxgb4i_init_module(void)
1903 {
1904 	int rc;
1905 
1906 	printk(KERN_INFO "%s", version);
1907 
1908 	rc = cxgbi_iscsi_init(&cxgb4i_iscsi_transport, &cxgb4i_stt);
1909 	if (rc < 0)
1910 		return rc;
1911 	cxgb4_register_uld(CXGB4_ULD_ISCSI, &cxgb4i_uld_info);
1912 
1913 #if IS_ENABLED(CONFIG_IPV6)
1914 	register_inet6addr_notifier(&cxgbi_inet6addr_notifier);
1915 #endif
1916 	return 0;
1917 }
1918 
1919 static void __exit cxgb4i_exit_module(void)
1920 {
1921 #if IS_ENABLED(CONFIG_IPV6)
1922 	unregister_inet6addr_notifier(&cxgbi_inet6addr_notifier);
1923 #endif
1924 	cxgb4_unregister_uld(CXGB4_ULD_ISCSI);
1925 	cxgbi_device_unregister_all(CXGBI_FLAG_DEV_T4);
1926 	cxgbi_iscsi_cleanup(&cxgb4i_iscsi_transport, &cxgb4i_stt);
1927 }
1928 
1929 module_init(cxgb4i_init_module);
1930 module_exit(cxgb4i_exit_module);
1931