1 /*
2  * Copyright (c) 2016 Chelsio Communications, Inc.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  */
8 
9 #include <linux/module.h>
10 #include <linux/list.h>
11 #include <linux/workqueue.h>
12 #include <linux/skbuff.h>
13 #include <linux/timer.h>
14 #include <linux/notifier.h>
15 #include <linux/inetdevice.h>
16 #include <linux/ip.h>
17 #include <linux/tcp.h>
18 #include <linux/if_vlan.h>
19 
20 #include <net/neighbour.h>
21 #include <net/netevent.h>
22 #include <net/route.h>
23 #include <net/tcp.h>
24 #include <net/ip6_route.h>
25 #include <net/addrconf.h>
26 
27 #include "cxgbit.h"
28 #include "clip_tbl.h"
29 
30 static void cxgbit_init_wr_wait(struct cxgbit_wr_wait *wr_waitp)
31 {
32 	wr_waitp->ret = 0;
33 	reinit_completion(&wr_waitp->completion);
34 }
35 
36 static void
37 cxgbit_wake_up(struct cxgbit_wr_wait *wr_waitp, const char *func, u8 ret)
38 {
39 	if (ret == CPL_ERR_NONE)
40 		wr_waitp->ret = 0;
41 	else
42 		wr_waitp->ret = -EIO;
43 
44 	if (wr_waitp->ret)
45 		pr_err("%s: err:%u", func, ret);
46 
47 	complete(&wr_waitp->completion);
48 }
49 
50 static int
51 cxgbit_wait_for_reply(struct cxgbit_device *cdev,
52 		      struct cxgbit_wr_wait *wr_waitp, u32 tid, u32 timeout,
53 		      const char *func)
54 {
55 	int ret;
56 
57 	if (!test_bit(CDEV_STATE_UP, &cdev->flags)) {
58 		wr_waitp->ret = -EIO;
59 		goto out;
60 	}
61 
62 	ret = wait_for_completion_timeout(&wr_waitp->completion, timeout * HZ);
63 	if (!ret) {
64 		pr_info("%s - Device %s not responding tid %u\n",
65 			func, pci_name(cdev->lldi.pdev), tid);
66 		wr_waitp->ret = -ETIMEDOUT;
67 	}
68 out:
69 	if (wr_waitp->ret)
70 		pr_info("%s: FW reply %d tid %u\n",
71 			pci_name(cdev->lldi.pdev), wr_waitp->ret, tid);
72 	return wr_waitp->ret;
73 }
74 
75 /* Returns whether a CPL status conveys negative advice.
76  */
77 static int cxgbit_is_neg_adv(unsigned int status)
78 {
79 	return status == CPL_ERR_RTX_NEG_ADVICE ||
80 		status == CPL_ERR_PERSIST_NEG_ADVICE ||
81 		status == CPL_ERR_KEEPALV_NEG_ADVICE;
82 }
83 
84 static int cxgbit_np_hashfn(const struct cxgbit_np *cnp)
85 {
86 	return ((unsigned long)cnp >> 10) & (NP_INFO_HASH_SIZE - 1);
87 }
88 
89 static struct np_info *
90 cxgbit_np_hash_add(struct cxgbit_device *cdev, struct cxgbit_np *cnp,
91 		   unsigned int stid)
92 {
93 	struct np_info *p = kzalloc(sizeof(*p), GFP_KERNEL);
94 
95 	if (p) {
96 		int bucket = cxgbit_np_hashfn(cnp);
97 
98 		p->cnp = cnp;
99 		p->stid = stid;
100 		spin_lock(&cdev->np_lock);
101 		p->next = cdev->np_hash_tab[bucket];
102 		cdev->np_hash_tab[bucket] = p;
103 		spin_unlock(&cdev->np_lock);
104 	}
105 
106 	return p;
107 }
108 
109 static int
110 cxgbit_np_hash_find(struct cxgbit_device *cdev, struct cxgbit_np *cnp)
111 {
112 	int stid = -1, bucket = cxgbit_np_hashfn(cnp);
113 	struct np_info *p;
114 
115 	spin_lock(&cdev->np_lock);
116 	for (p = cdev->np_hash_tab[bucket]; p; p = p->next) {
117 		if (p->cnp == cnp) {
118 			stid = p->stid;
119 			break;
120 		}
121 	}
122 	spin_unlock(&cdev->np_lock);
123 
124 	return stid;
125 }
126 
127 static int cxgbit_np_hash_del(struct cxgbit_device *cdev, struct cxgbit_np *cnp)
128 {
129 	int stid = -1, bucket = cxgbit_np_hashfn(cnp);
130 	struct np_info *p, **prev = &cdev->np_hash_tab[bucket];
131 
132 	spin_lock(&cdev->np_lock);
133 	for (p = *prev; p; prev = &p->next, p = p->next) {
134 		if (p->cnp == cnp) {
135 			stid = p->stid;
136 			*prev = p->next;
137 			kfree(p);
138 			break;
139 		}
140 	}
141 	spin_unlock(&cdev->np_lock);
142 
143 	return stid;
144 }
145 
146 void _cxgbit_free_cnp(struct kref *kref)
147 {
148 	struct cxgbit_np *cnp;
149 
150 	cnp = container_of(kref, struct cxgbit_np, kref);
151 	kfree(cnp);
152 }
153 
154 static int
155 cxgbit_create_server6(struct cxgbit_device *cdev, unsigned int stid,
156 		      struct cxgbit_np *cnp)
157 {
158 	struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)
159 				     &cnp->com.local_addr;
160 	int addr_type;
161 	int ret;
162 
163 	pr_debug("%s: dev = %s; stid = %u; sin6_port = %u\n",
164 		 __func__, cdev->lldi.ports[0]->name, stid, sin6->sin6_port);
165 
166 	addr_type = ipv6_addr_type((const struct in6_addr *)
167 				   &sin6->sin6_addr);
168 	if (addr_type != IPV6_ADDR_ANY) {
169 		ret = cxgb4_clip_get(cdev->lldi.ports[0],
170 				     (const u32 *)&sin6->sin6_addr.s6_addr, 1);
171 		if (ret) {
172 			pr_err("Unable to find clip table entry. laddr %pI6. Error:%d.\n",
173 			       sin6->sin6_addr.s6_addr, ret);
174 			return -ENOMEM;
175 		}
176 	}
177 
178 	cxgbit_get_cnp(cnp);
179 	cxgbit_init_wr_wait(&cnp->com.wr_wait);
180 
181 	ret = cxgb4_create_server6(cdev->lldi.ports[0],
182 				   stid, &sin6->sin6_addr,
183 				   sin6->sin6_port,
184 				   cdev->lldi.rxq_ids[0]);
185 	if (!ret)
186 		ret = cxgbit_wait_for_reply(cdev, &cnp->com.wr_wait,
187 					    0, 10, __func__);
188 	else if (ret > 0)
189 		ret = net_xmit_errno(ret);
190 	else
191 		cxgbit_put_cnp(cnp);
192 
193 	if (ret) {
194 		if (ret != -ETIMEDOUT)
195 			cxgb4_clip_release(cdev->lldi.ports[0],
196 				   (const u32 *)&sin6->sin6_addr.s6_addr, 1);
197 
198 		pr_err("create server6 err %d stid %d laddr %pI6 lport %d\n",
199 		       ret, stid, sin6->sin6_addr.s6_addr,
200 		       ntohs(sin6->sin6_port));
201 	}
202 
203 	return ret;
204 }
205 
206 static int
207 cxgbit_create_server4(struct cxgbit_device *cdev, unsigned int stid,
208 		      struct cxgbit_np *cnp)
209 {
210 	struct sockaddr_in *sin = (struct sockaddr_in *)
211 				   &cnp->com.local_addr;
212 	int ret;
213 
214 	pr_debug("%s: dev = %s; stid = %u; sin_port = %u\n",
215 		 __func__, cdev->lldi.ports[0]->name, stid, sin->sin_port);
216 
217 	cxgbit_get_cnp(cnp);
218 	cxgbit_init_wr_wait(&cnp->com.wr_wait);
219 
220 	ret = cxgb4_create_server(cdev->lldi.ports[0],
221 				  stid, sin->sin_addr.s_addr,
222 				  sin->sin_port, 0,
223 				  cdev->lldi.rxq_ids[0]);
224 	if (!ret)
225 		ret = cxgbit_wait_for_reply(cdev,
226 					    &cnp->com.wr_wait,
227 					    0, 10, __func__);
228 	else if (ret > 0)
229 		ret = net_xmit_errno(ret);
230 	else
231 		cxgbit_put_cnp(cnp);
232 
233 	if (ret)
234 		pr_err("create server failed err %d stid %d laddr %pI4 lport %d\n",
235 		       ret, stid, &sin->sin_addr, ntohs(sin->sin_port));
236 	return ret;
237 }
238 
239 struct cxgbit_device *cxgbit_find_device(struct net_device *ndev, u8 *port_id)
240 {
241 	struct cxgbit_device *cdev;
242 	u8 i;
243 
244 	list_for_each_entry(cdev, &cdev_list_head, list) {
245 		struct cxgb4_lld_info *lldi = &cdev->lldi;
246 
247 		for (i = 0; i < lldi->nports; i++) {
248 			if (lldi->ports[i] == ndev) {
249 				if (port_id)
250 					*port_id = i;
251 				return cdev;
252 			}
253 		}
254 	}
255 
256 	return NULL;
257 }
258 
259 static struct net_device *cxgbit_get_real_dev(struct net_device *ndev)
260 {
261 	if (ndev->priv_flags & IFF_BONDING) {
262 		pr_err("Bond devices are not supported. Interface:%s\n",
263 		       ndev->name);
264 		return NULL;
265 	}
266 
267 	if (is_vlan_dev(ndev))
268 		return vlan_dev_real_dev(ndev);
269 
270 	return ndev;
271 }
272 
273 static struct net_device *cxgbit_ipv4_netdev(__be32 saddr)
274 {
275 	struct net_device *ndev;
276 
277 	ndev = __ip_dev_find(&init_net, saddr, false);
278 	if (!ndev)
279 		return NULL;
280 
281 	return cxgbit_get_real_dev(ndev);
282 }
283 
284 static struct net_device *cxgbit_ipv6_netdev(struct in6_addr *addr6)
285 {
286 	struct net_device *ndev = NULL;
287 	bool found = false;
288 
289 	if (IS_ENABLED(CONFIG_IPV6)) {
290 		for_each_netdev_rcu(&init_net, ndev)
291 			if (ipv6_chk_addr(&init_net, addr6, ndev, 1)) {
292 				found = true;
293 				break;
294 			}
295 	}
296 	if (!found)
297 		return NULL;
298 	return cxgbit_get_real_dev(ndev);
299 }
300 
301 static struct cxgbit_device *cxgbit_find_np_cdev(struct cxgbit_np *cnp)
302 {
303 	struct sockaddr_storage *sockaddr = &cnp->com.local_addr;
304 	int ss_family = sockaddr->ss_family;
305 	struct net_device *ndev = NULL;
306 	struct cxgbit_device *cdev = NULL;
307 
308 	rcu_read_lock();
309 	if (ss_family == AF_INET) {
310 		struct sockaddr_in *sin;
311 
312 		sin = (struct sockaddr_in *)sockaddr;
313 		ndev = cxgbit_ipv4_netdev(sin->sin_addr.s_addr);
314 	} else if (ss_family == AF_INET6) {
315 		struct sockaddr_in6 *sin6;
316 
317 		sin6 = (struct sockaddr_in6 *)sockaddr;
318 		ndev = cxgbit_ipv6_netdev(&sin6->sin6_addr);
319 	}
320 	if (!ndev)
321 		goto out;
322 
323 	cdev = cxgbit_find_device(ndev, NULL);
324 out:
325 	rcu_read_unlock();
326 	return cdev;
327 }
328 
329 static bool cxgbit_inaddr_any(struct cxgbit_np *cnp)
330 {
331 	struct sockaddr_storage *sockaddr = &cnp->com.local_addr;
332 	int ss_family = sockaddr->ss_family;
333 	int addr_type;
334 
335 	if (ss_family == AF_INET) {
336 		struct sockaddr_in *sin;
337 
338 		sin = (struct sockaddr_in *)sockaddr;
339 		if (sin->sin_addr.s_addr == htonl(INADDR_ANY))
340 			return true;
341 	} else if (ss_family == AF_INET6) {
342 		struct sockaddr_in6 *sin6;
343 
344 		sin6 = (struct sockaddr_in6 *)sockaddr;
345 		addr_type = ipv6_addr_type((const struct in6_addr *)
346 				&sin6->sin6_addr);
347 		if (addr_type == IPV6_ADDR_ANY)
348 			return true;
349 	}
350 	return false;
351 }
352 
353 static int
354 __cxgbit_setup_cdev_np(struct cxgbit_device *cdev, struct cxgbit_np *cnp)
355 {
356 	int stid, ret;
357 	int ss_family = cnp->com.local_addr.ss_family;
358 
359 	if (!test_bit(CDEV_STATE_UP, &cdev->flags))
360 		return -EINVAL;
361 
362 	stid = cxgb4_alloc_stid(cdev->lldi.tids, ss_family, cnp);
363 	if (stid < 0)
364 		return -EINVAL;
365 
366 	if (!cxgbit_np_hash_add(cdev, cnp, stid)) {
367 		cxgb4_free_stid(cdev->lldi.tids, stid, ss_family);
368 		return -EINVAL;
369 	}
370 
371 	if (ss_family == AF_INET)
372 		ret = cxgbit_create_server4(cdev, stid, cnp);
373 	else
374 		ret = cxgbit_create_server6(cdev, stid, cnp);
375 
376 	if (ret) {
377 		if (ret != -ETIMEDOUT)
378 			cxgb4_free_stid(cdev->lldi.tids, stid,
379 					ss_family);
380 		cxgbit_np_hash_del(cdev, cnp);
381 		return ret;
382 	}
383 	return ret;
384 }
385 
386 static int cxgbit_setup_cdev_np(struct cxgbit_np *cnp)
387 {
388 	struct cxgbit_device *cdev;
389 	int ret = -1;
390 
391 	mutex_lock(&cdev_list_lock);
392 	cdev = cxgbit_find_np_cdev(cnp);
393 	if (!cdev)
394 		goto out;
395 
396 	if (cxgbit_np_hash_find(cdev, cnp) >= 0)
397 		goto out;
398 
399 	if (__cxgbit_setup_cdev_np(cdev, cnp))
400 		goto out;
401 
402 	cnp->com.cdev = cdev;
403 	ret = 0;
404 out:
405 	mutex_unlock(&cdev_list_lock);
406 	return ret;
407 }
408 
409 static int cxgbit_setup_all_np(struct cxgbit_np *cnp)
410 {
411 	struct cxgbit_device *cdev;
412 	int ret;
413 	u32 count = 0;
414 
415 	mutex_lock(&cdev_list_lock);
416 	list_for_each_entry(cdev, &cdev_list_head, list) {
417 		if (cxgbit_np_hash_find(cdev, cnp) >= 0) {
418 			mutex_unlock(&cdev_list_lock);
419 			return -1;
420 		}
421 	}
422 
423 	list_for_each_entry(cdev, &cdev_list_head, list) {
424 		ret = __cxgbit_setup_cdev_np(cdev, cnp);
425 		if (ret == -ETIMEDOUT)
426 			break;
427 		if (ret != 0)
428 			continue;
429 		count++;
430 	}
431 	mutex_unlock(&cdev_list_lock);
432 
433 	return count ? 0 : -1;
434 }
435 
436 int cxgbit_setup_np(struct iscsi_np *np, struct sockaddr_storage *ksockaddr)
437 {
438 	struct cxgbit_np *cnp;
439 	int ret;
440 
441 	if ((ksockaddr->ss_family != AF_INET) &&
442 	    (ksockaddr->ss_family != AF_INET6))
443 		return -EINVAL;
444 
445 	cnp = kzalloc(sizeof(*cnp), GFP_KERNEL);
446 	if (!cnp)
447 		return -ENOMEM;
448 
449 	init_waitqueue_head(&cnp->accept_wait);
450 	init_completion(&cnp->com.wr_wait.completion);
451 	init_completion(&cnp->accept_comp);
452 	INIT_LIST_HEAD(&cnp->np_accept_list);
453 	spin_lock_init(&cnp->np_accept_lock);
454 	kref_init(&cnp->kref);
455 	memcpy(&np->np_sockaddr, ksockaddr,
456 	       sizeof(struct sockaddr_storage));
457 	memcpy(&cnp->com.local_addr, &np->np_sockaddr,
458 	       sizeof(cnp->com.local_addr));
459 
460 	cnp->np = np;
461 	cnp->com.cdev = NULL;
462 
463 	if (cxgbit_inaddr_any(cnp))
464 		ret = cxgbit_setup_all_np(cnp);
465 	else
466 		ret = cxgbit_setup_cdev_np(cnp);
467 
468 	if (ret) {
469 		cxgbit_put_cnp(cnp);
470 		return -EINVAL;
471 	}
472 
473 	np->np_context = cnp;
474 	cnp->com.state = CSK_STATE_LISTEN;
475 	return 0;
476 }
477 
478 static void
479 cxgbit_set_conn_info(struct iscsi_np *np, struct iscsi_conn *conn,
480 		     struct cxgbit_sock *csk)
481 {
482 	conn->login_family = np->np_sockaddr.ss_family;
483 	conn->login_sockaddr = csk->com.remote_addr;
484 	conn->local_sockaddr = csk->com.local_addr;
485 }
486 
487 int cxgbit_accept_np(struct iscsi_np *np, struct iscsi_conn *conn)
488 {
489 	struct cxgbit_np *cnp = np->np_context;
490 	struct cxgbit_sock *csk;
491 	int ret = 0;
492 
493 accept_wait:
494 	ret = wait_for_completion_interruptible(&cnp->accept_comp);
495 	if (ret)
496 		return -ENODEV;
497 
498 	spin_lock_bh(&np->np_thread_lock);
499 	if (np->np_thread_state >= ISCSI_NP_THREAD_RESET) {
500 		spin_unlock_bh(&np->np_thread_lock);
501 		/**
502 		 * No point in stalling here when np_thread
503 		 * is in state RESET/SHUTDOWN/EXIT - bail
504 		 **/
505 		return -ENODEV;
506 	}
507 	spin_unlock_bh(&np->np_thread_lock);
508 
509 	spin_lock_bh(&cnp->np_accept_lock);
510 	if (list_empty(&cnp->np_accept_list)) {
511 		spin_unlock_bh(&cnp->np_accept_lock);
512 		goto accept_wait;
513 	}
514 
515 	csk = list_first_entry(&cnp->np_accept_list,
516 			       struct cxgbit_sock,
517 			       accept_node);
518 
519 	list_del_init(&csk->accept_node);
520 	spin_unlock_bh(&cnp->np_accept_lock);
521 	conn->context = csk;
522 	csk->conn = conn;
523 
524 	cxgbit_set_conn_info(np, conn, csk);
525 	return 0;
526 }
527 
528 static int
529 __cxgbit_free_cdev_np(struct cxgbit_device *cdev, struct cxgbit_np *cnp)
530 {
531 	int stid, ret;
532 	bool ipv6 = false;
533 
534 	stid = cxgbit_np_hash_del(cdev, cnp);
535 	if (stid < 0)
536 		return -EINVAL;
537 	if (!test_bit(CDEV_STATE_UP, &cdev->flags))
538 		return -EINVAL;
539 
540 	if (cnp->np->np_sockaddr.ss_family == AF_INET6)
541 		ipv6 = true;
542 
543 	cxgbit_get_cnp(cnp);
544 	cxgbit_init_wr_wait(&cnp->com.wr_wait);
545 	ret = cxgb4_remove_server(cdev->lldi.ports[0], stid,
546 				  cdev->lldi.rxq_ids[0], ipv6);
547 
548 	if (ret > 0)
549 		ret = net_xmit_errno(ret);
550 
551 	if (ret) {
552 		cxgbit_put_cnp(cnp);
553 		return ret;
554 	}
555 
556 	ret = cxgbit_wait_for_reply(cdev, &cnp->com.wr_wait,
557 				    0, 10, __func__);
558 	if (ret == -ETIMEDOUT)
559 		return ret;
560 
561 	if (ipv6 && cnp->com.cdev) {
562 		struct sockaddr_in6 *sin6;
563 
564 		sin6 = (struct sockaddr_in6 *)&cnp->com.local_addr;
565 		cxgb4_clip_release(cdev->lldi.ports[0],
566 				   (const u32 *)&sin6->sin6_addr.s6_addr,
567 				   1);
568 	}
569 
570 	cxgb4_free_stid(cdev->lldi.tids, stid,
571 			cnp->com.local_addr.ss_family);
572 	return 0;
573 }
574 
575 static void cxgbit_free_all_np(struct cxgbit_np *cnp)
576 {
577 	struct cxgbit_device *cdev;
578 	int ret;
579 
580 	mutex_lock(&cdev_list_lock);
581 	list_for_each_entry(cdev, &cdev_list_head, list) {
582 		ret = __cxgbit_free_cdev_np(cdev, cnp);
583 		if (ret == -ETIMEDOUT)
584 			break;
585 	}
586 	mutex_unlock(&cdev_list_lock);
587 }
588 
589 static void cxgbit_free_cdev_np(struct cxgbit_np *cnp)
590 {
591 	struct cxgbit_device *cdev;
592 	bool found = false;
593 
594 	mutex_lock(&cdev_list_lock);
595 	list_for_each_entry(cdev, &cdev_list_head, list) {
596 		if (cdev == cnp->com.cdev) {
597 			found = true;
598 			break;
599 		}
600 	}
601 	if (!found)
602 		goto out;
603 
604 	__cxgbit_free_cdev_np(cdev, cnp);
605 out:
606 	mutex_unlock(&cdev_list_lock);
607 }
608 
609 void cxgbit_free_np(struct iscsi_np *np)
610 {
611 	struct cxgbit_np *cnp = np->np_context;
612 
613 	cnp->com.state = CSK_STATE_DEAD;
614 	if (cnp->com.cdev)
615 		cxgbit_free_cdev_np(cnp);
616 	else
617 		cxgbit_free_all_np(cnp);
618 
619 	np->np_context = NULL;
620 	cxgbit_put_cnp(cnp);
621 }
622 
623 static void cxgbit_send_halfclose(struct cxgbit_sock *csk)
624 {
625 	struct sk_buff *skb;
626 	struct cpl_close_con_req *req;
627 	unsigned int len = roundup(sizeof(struct cpl_close_con_req), 16);
628 
629 	skb = alloc_skb(len, GFP_ATOMIC);
630 	if (!skb)
631 		return;
632 
633 	req = (struct cpl_close_con_req *)__skb_put(skb, len);
634 	memset(req, 0, len);
635 
636 	set_wr_txq(skb, CPL_PRIORITY_DATA, csk->txq_idx);
637 	INIT_TP_WR(req, csk->tid);
638 	OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_CLOSE_CON_REQ,
639 						    csk->tid));
640 	req->rsvd = 0;
641 
642 	cxgbit_skcb_flags(skb) |= SKCBF_TX_FLAG_COMPL;
643 	__skb_queue_tail(&csk->txq, skb);
644 	cxgbit_push_tx_frames(csk);
645 }
646 
647 static void cxgbit_arp_failure_discard(void *handle, struct sk_buff *skb)
648 {
649 	pr_debug("%s cxgbit_device %p\n", __func__, handle);
650 	kfree_skb(skb);
651 }
652 
653 static void cxgbit_abort_arp_failure(void *handle, struct sk_buff *skb)
654 {
655 	struct cxgbit_device *cdev = handle;
656 	struct cpl_abort_req *req = cplhdr(skb);
657 
658 	pr_debug("%s cdev %p\n", __func__, cdev);
659 	req->cmd = CPL_ABORT_NO_RST;
660 	cxgbit_ofld_send(cdev, skb);
661 }
662 
663 static int cxgbit_send_abort_req(struct cxgbit_sock *csk)
664 {
665 	struct cpl_abort_req *req;
666 	unsigned int len = roundup(sizeof(*req), 16);
667 	struct sk_buff *skb;
668 
669 	pr_debug("%s: csk %p tid %u; state %d\n",
670 		 __func__, csk, csk->tid, csk->com.state);
671 
672 	__skb_queue_purge(&csk->txq);
673 
674 	if (!test_and_set_bit(CSK_TX_DATA_SENT, &csk->com.flags))
675 		cxgbit_send_tx_flowc_wr(csk);
676 
677 	skb = __skb_dequeue(&csk->skbq);
678 	req = (struct cpl_abort_req *)__skb_put(skb, len);
679 	memset(req, 0, len);
680 
681 	set_wr_txq(skb, CPL_PRIORITY_DATA, csk->txq_idx);
682 	t4_set_arp_err_handler(skb, csk->com.cdev, cxgbit_abort_arp_failure);
683 	INIT_TP_WR(req, csk->tid);
684 	OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ABORT_REQ,
685 						    csk->tid));
686 	req->cmd = CPL_ABORT_SEND_RST;
687 	return cxgbit_l2t_send(csk->com.cdev, skb, csk->l2t);
688 }
689 
690 void cxgbit_free_conn(struct iscsi_conn *conn)
691 {
692 	struct cxgbit_sock *csk = conn->context;
693 	bool release = false;
694 
695 	pr_debug("%s: state %d\n",
696 		 __func__, csk->com.state);
697 
698 	spin_lock_bh(&csk->lock);
699 	switch (csk->com.state) {
700 	case CSK_STATE_ESTABLISHED:
701 		if (conn->conn_state == TARG_CONN_STATE_IN_LOGOUT) {
702 			csk->com.state = CSK_STATE_CLOSING;
703 			cxgbit_send_halfclose(csk);
704 		} else {
705 			csk->com.state = CSK_STATE_ABORTING;
706 			cxgbit_send_abort_req(csk);
707 		}
708 		break;
709 	case CSK_STATE_CLOSING:
710 		csk->com.state = CSK_STATE_MORIBUND;
711 		cxgbit_send_halfclose(csk);
712 		break;
713 	case CSK_STATE_DEAD:
714 		release = true;
715 		break;
716 	default:
717 		pr_err("%s: csk %p; state %d\n",
718 		       __func__, csk, csk->com.state);
719 	}
720 	spin_unlock_bh(&csk->lock);
721 
722 	if (release)
723 		cxgbit_put_csk(csk);
724 }
725 
726 static void cxgbit_set_emss(struct cxgbit_sock *csk, u16 opt)
727 {
728 	csk->emss = csk->com.cdev->lldi.mtus[TCPOPT_MSS_G(opt)] -
729 			((csk->com.remote_addr.ss_family == AF_INET) ?
730 			sizeof(struct iphdr) : sizeof(struct ipv6hdr)) -
731 			sizeof(struct tcphdr);
732 	csk->mss = csk->emss;
733 	if (TCPOPT_TSTAMP_G(opt))
734 		csk->emss -= round_up(TCPOLEN_TIMESTAMP, 4);
735 	if (csk->emss < 128)
736 		csk->emss = 128;
737 	if (csk->emss & 7)
738 		pr_info("Warning: misaligned mtu idx %u mss %u emss=%u\n",
739 			TCPOPT_MSS_G(opt), csk->mss, csk->emss);
740 	pr_debug("%s mss_idx %u mss %u emss=%u\n", __func__, TCPOPT_MSS_G(opt),
741 		 csk->mss, csk->emss);
742 }
743 
744 static void cxgbit_free_skb(struct cxgbit_sock *csk)
745 {
746 	struct sk_buff *skb;
747 
748 	__skb_queue_purge(&csk->txq);
749 	__skb_queue_purge(&csk->rxq);
750 	__skb_queue_purge(&csk->backlogq);
751 	__skb_queue_purge(&csk->ppodq);
752 	__skb_queue_purge(&csk->skbq);
753 
754 	while ((skb = cxgbit_sock_dequeue_wr(csk)))
755 		kfree_skb(skb);
756 
757 	__kfree_skb(csk->lro_hskb);
758 }
759 
760 void _cxgbit_free_csk(struct kref *kref)
761 {
762 	struct cxgbit_sock *csk;
763 	struct cxgbit_device *cdev;
764 
765 	csk = container_of(kref, struct cxgbit_sock, kref);
766 
767 	pr_debug("%s csk %p state %d\n", __func__, csk, csk->com.state);
768 
769 	if (csk->com.local_addr.ss_family == AF_INET6) {
770 		struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)
771 					     &csk->com.local_addr;
772 		cxgb4_clip_release(csk->com.cdev->lldi.ports[0],
773 				   (const u32 *)
774 				   &sin6->sin6_addr.s6_addr, 1);
775 	}
776 
777 	cxgb4_remove_tid(csk->com.cdev->lldi.tids, 0, csk->tid);
778 	dst_release(csk->dst);
779 	cxgb4_l2t_release(csk->l2t);
780 
781 	cdev = csk->com.cdev;
782 	spin_lock_bh(&cdev->cskq.lock);
783 	list_del(&csk->list);
784 	spin_unlock_bh(&cdev->cskq.lock);
785 
786 	cxgbit_free_skb(csk);
787 	cxgbit_put_cdev(cdev);
788 
789 	kfree(csk);
790 }
791 
792 static void
793 cxgbit_get_tuple_info(struct cpl_pass_accept_req *req, int *iptype,
794 		      __u8 *local_ip, __u8 *peer_ip, __be16 *local_port,
795 		      __be16 *peer_port)
796 {
797 	u32 eth_len = ETH_HDR_LEN_G(be32_to_cpu(req->hdr_len));
798 	u32 ip_len = IP_HDR_LEN_G(be32_to_cpu(req->hdr_len));
799 	struct iphdr *ip = (struct iphdr *)((u8 *)(req + 1) + eth_len);
800 	struct ipv6hdr *ip6 = (struct ipv6hdr *)((u8 *)(req + 1) + eth_len);
801 	struct tcphdr *tcp = (struct tcphdr *)
802 			      ((u8 *)(req + 1) + eth_len + ip_len);
803 
804 	if (ip->version == 4) {
805 		pr_debug("%s saddr 0x%x daddr 0x%x sport %u dport %u\n",
806 			 __func__,
807 			 ntohl(ip->saddr), ntohl(ip->daddr),
808 			 ntohs(tcp->source),
809 			 ntohs(tcp->dest));
810 		*iptype = 4;
811 		memcpy(peer_ip, &ip->saddr, 4);
812 		memcpy(local_ip, &ip->daddr, 4);
813 	} else {
814 		pr_debug("%s saddr %pI6 daddr %pI6 sport %u dport %u\n",
815 			 __func__,
816 			 ip6->saddr.s6_addr, ip6->daddr.s6_addr,
817 			 ntohs(tcp->source),
818 			 ntohs(tcp->dest));
819 		*iptype = 6;
820 		memcpy(peer_ip, ip6->saddr.s6_addr, 16);
821 		memcpy(local_ip, ip6->daddr.s6_addr, 16);
822 	}
823 
824 	*peer_port = tcp->source;
825 	*local_port = tcp->dest;
826 }
827 
828 static int
829 cxgbit_our_interface(struct cxgbit_device *cdev, struct net_device *egress_dev)
830 {
831 	u8 i;
832 
833 	egress_dev = cxgbit_get_real_dev(egress_dev);
834 	for (i = 0; i < cdev->lldi.nports; i++)
835 		if (cdev->lldi.ports[i] == egress_dev)
836 			return 1;
837 	return 0;
838 }
839 
840 static struct dst_entry *
841 cxgbit_find_route6(struct cxgbit_device *cdev, __u8 *local_ip, __u8 *peer_ip,
842 		   __be16 local_port, __be16 peer_port, u8 tos,
843 		   __u32 sin6_scope_id)
844 {
845 	struct dst_entry *dst = NULL;
846 
847 	if (IS_ENABLED(CONFIG_IPV6)) {
848 		struct flowi6 fl6;
849 
850 		memset(&fl6, 0, sizeof(fl6));
851 		memcpy(&fl6.daddr, peer_ip, 16);
852 		memcpy(&fl6.saddr, local_ip, 16);
853 		if (ipv6_addr_type(&fl6.daddr) & IPV6_ADDR_LINKLOCAL)
854 			fl6.flowi6_oif = sin6_scope_id;
855 		dst = ip6_route_output(&init_net, NULL, &fl6);
856 		if (!dst)
857 			goto out;
858 		if (!cxgbit_our_interface(cdev, ip6_dst_idev(dst)->dev) &&
859 		    !(ip6_dst_idev(dst)->dev->flags & IFF_LOOPBACK)) {
860 			dst_release(dst);
861 			dst = NULL;
862 		}
863 	}
864 out:
865 	return dst;
866 }
867 
868 static struct dst_entry *
869 cxgbit_find_route(struct cxgbit_device *cdev, __be32 local_ip, __be32 peer_ip,
870 		  __be16 local_port, __be16 peer_port, u8 tos)
871 {
872 	struct rtable *rt;
873 	struct flowi4 fl4;
874 	struct neighbour *n;
875 
876 	rt = ip_route_output_ports(&init_net, &fl4, NULL, peer_ip,
877 				   local_ip,
878 				   peer_port, local_port, IPPROTO_TCP,
879 				   tos, 0);
880 	if (IS_ERR(rt))
881 		return NULL;
882 	n = dst_neigh_lookup(&rt->dst, &peer_ip);
883 	if (!n)
884 		return NULL;
885 	if (!cxgbit_our_interface(cdev, n->dev) &&
886 	    !(n->dev->flags & IFF_LOOPBACK)) {
887 		neigh_release(n);
888 		dst_release(&rt->dst);
889 		return NULL;
890 	}
891 	neigh_release(n);
892 	return &rt->dst;
893 }
894 
895 static void cxgbit_set_tcp_window(struct cxgbit_sock *csk, struct port_info *pi)
896 {
897 	unsigned int linkspeed;
898 	u8 scale;
899 
900 	linkspeed = pi->link_cfg.speed;
901 	scale = linkspeed / SPEED_10000;
902 
903 #define CXGBIT_10G_RCV_WIN (256 * 1024)
904 	csk->rcv_win = CXGBIT_10G_RCV_WIN;
905 	if (scale)
906 		csk->rcv_win *= scale;
907 
908 #define CXGBIT_10G_SND_WIN (256 * 1024)
909 	csk->snd_win = CXGBIT_10G_SND_WIN;
910 	if (scale)
911 		csk->snd_win *= scale;
912 
913 	pr_debug("%s snd_win %d rcv_win %d\n",
914 		 __func__, csk->snd_win, csk->rcv_win);
915 }
916 
917 #ifdef CONFIG_CHELSIO_T4_DCB
918 static u8 cxgbit_get_iscsi_dcb_state(struct net_device *ndev)
919 {
920 	return ndev->dcbnl_ops->getstate(ndev);
921 }
922 
923 static int cxgbit_select_priority(int pri_mask)
924 {
925 	if (!pri_mask)
926 		return 0;
927 
928 	return (ffs(pri_mask) - 1);
929 }
930 
931 static u8 cxgbit_get_iscsi_dcb_priority(struct net_device *ndev, u16 local_port)
932 {
933 	int ret;
934 	u8 caps;
935 
936 	struct dcb_app iscsi_dcb_app = {
937 		.protocol = local_port
938 	};
939 
940 	ret = (int)ndev->dcbnl_ops->getcap(ndev, DCB_CAP_ATTR_DCBX, &caps);
941 
942 	if (ret)
943 		return 0;
944 
945 	if (caps & DCB_CAP_DCBX_VER_IEEE) {
946 		iscsi_dcb_app.selector = IEEE_8021QAZ_APP_SEL_ANY;
947 
948 		ret = dcb_ieee_getapp_mask(ndev, &iscsi_dcb_app);
949 
950 	} else if (caps & DCB_CAP_DCBX_VER_CEE) {
951 		iscsi_dcb_app.selector = DCB_APP_IDTYPE_PORTNUM;
952 
953 		ret = dcb_getapp(ndev, &iscsi_dcb_app);
954 	}
955 
956 	pr_info("iSCSI priority is set to %u\n", cxgbit_select_priority(ret));
957 
958 	return cxgbit_select_priority(ret);
959 }
960 #endif
961 
962 static int
963 cxgbit_offload_init(struct cxgbit_sock *csk, int iptype, __u8 *peer_ip,
964 		    u16 local_port, struct dst_entry *dst,
965 		    struct cxgbit_device *cdev)
966 {
967 	struct neighbour *n;
968 	int ret, step;
969 	struct net_device *ndev;
970 	u16 rxq_idx, port_id;
971 #ifdef CONFIG_CHELSIO_T4_DCB
972 	u8 priority = 0;
973 #endif
974 
975 	n = dst_neigh_lookup(dst, peer_ip);
976 	if (!n)
977 		return -ENODEV;
978 
979 	rcu_read_lock();
980 	ret = -ENOMEM;
981 	if (n->dev->flags & IFF_LOOPBACK) {
982 		if (iptype == 4)
983 			ndev = cxgbit_ipv4_netdev(*(__be32 *)peer_ip);
984 		else if (IS_ENABLED(CONFIG_IPV6))
985 			ndev = cxgbit_ipv6_netdev((struct in6_addr *)peer_ip);
986 		else
987 			ndev = NULL;
988 
989 		if (!ndev) {
990 			ret = -ENODEV;
991 			goto out;
992 		}
993 
994 		csk->l2t = cxgb4_l2t_get(cdev->lldi.l2t,
995 					 n, ndev, 0);
996 		if (!csk->l2t)
997 			goto out;
998 		csk->mtu = ndev->mtu;
999 		csk->tx_chan = cxgb4_port_chan(ndev);
1000 		csk->smac_idx = (cxgb4_port_viid(ndev) & 0x7F) << 1;
1001 		step = cdev->lldi.ntxq /
1002 			cdev->lldi.nchan;
1003 		csk->txq_idx = cxgb4_port_idx(ndev) * step;
1004 		step = cdev->lldi.nrxq /
1005 			cdev->lldi.nchan;
1006 		csk->ctrlq_idx = cxgb4_port_idx(ndev);
1007 		csk->rss_qid = cdev->lldi.rxq_ids[
1008 				cxgb4_port_idx(ndev) * step];
1009 		csk->port_id = cxgb4_port_idx(ndev);
1010 		cxgbit_set_tcp_window(csk,
1011 				      (struct port_info *)netdev_priv(ndev));
1012 	} else {
1013 		ndev = cxgbit_get_real_dev(n->dev);
1014 		if (!ndev) {
1015 			ret = -ENODEV;
1016 			goto out;
1017 		}
1018 
1019 #ifdef CONFIG_CHELSIO_T4_DCB
1020 		if (cxgbit_get_iscsi_dcb_state(ndev))
1021 			priority = cxgbit_get_iscsi_dcb_priority(ndev,
1022 								 local_port);
1023 
1024 		csk->dcb_priority = priority;
1025 
1026 		csk->l2t = cxgb4_l2t_get(cdev->lldi.l2t, n, ndev, priority);
1027 #else
1028 		csk->l2t = cxgb4_l2t_get(cdev->lldi.l2t, n, ndev, 0);
1029 #endif
1030 		if (!csk->l2t)
1031 			goto out;
1032 		port_id = cxgb4_port_idx(ndev);
1033 		csk->mtu = dst_mtu(dst);
1034 		csk->tx_chan = cxgb4_port_chan(ndev);
1035 		csk->smac_idx = (cxgb4_port_viid(ndev) & 0x7F) << 1;
1036 		step = cdev->lldi.ntxq /
1037 			cdev->lldi.nports;
1038 		csk->txq_idx = (port_id * step) +
1039 				(cdev->selectq[port_id][0]++ % step);
1040 		csk->ctrlq_idx = cxgb4_port_idx(ndev);
1041 		step = cdev->lldi.nrxq /
1042 			cdev->lldi.nports;
1043 		rxq_idx = (port_id * step) +
1044 				(cdev->selectq[port_id][1]++ % step);
1045 		csk->rss_qid = cdev->lldi.rxq_ids[rxq_idx];
1046 		csk->port_id = port_id;
1047 		cxgbit_set_tcp_window(csk,
1048 				      (struct port_info *)netdev_priv(ndev));
1049 	}
1050 	ret = 0;
1051 out:
1052 	rcu_read_unlock();
1053 	neigh_release(n);
1054 	return ret;
1055 }
1056 
1057 int cxgbit_ofld_send(struct cxgbit_device *cdev, struct sk_buff *skb)
1058 {
1059 	int ret = 0;
1060 
1061 	if (!test_bit(CDEV_STATE_UP, &cdev->flags)) {
1062 		kfree_skb(skb);
1063 		pr_err("%s - device not up - dropping\n", __func__);
1064 		return -EIO;
1065 	}
1066 
1067 	ret = cxgb4_ofld_send(cdev->lldi.ports[0], skb);
1068 	if (ret < 0)
1069 		kfree_skb(skb);
1070 	return ret < 0 ? ret : 0;
1071 }
1072 
1073 static void cxgbit_release_tid(struct cxgbit_device *cdev, u32 tid)
1074 {
1075 	struct cpl_tid_release *req;
1076 	unsigned int len = roundup(sizeof(*req), 16);
1077 	struct sk_buff *skb;
1078 
1079 	skb = alloc_skb(len, GFP_ATOMIC);
1080 	if (!skb)
1081 		return;
1082 
1083 	req = (struct cpl_tid_release *)__skb_put(skb, len);
1084 	memset(req, 0, len);
1085 
1086 	INIT_TP_WR(req, tid);
1087 	OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(
1088 		   CPL_TID_RELEASE, tid));
1089 	set_wr_txq(skb, CPL_PRIORITY_SETUP, 0);
1090 	cxgbit_ofld_send(cdev, skb);
1091 }
1092 
1093 int
1094 cxgbit_l2t_send(struct cxgbit_device *cdev, struct sk_buff *skb,
1095 		struct l2t_entry *l2e)
1096 {
1097 	int ret = 0;
1098 
1099 	if (!test_bit(CDEV_STATE_UP, &cdev->flags)) {
1100 		kfree_skb(skb);
1101 		pr_err("%s - device not up - dropping\n", __func__);
1102 		return -EIO;
1103 	}
1104 
1105 	ret = cxgb4_l2t_send(cdev->lldi.ports[0], skb, l2e);
1106 	if (ret < 0)
1107 		kfree_skb(skb);
1108 	return ret < 0 ? ret : 0;
1109 }
1110 
1111 static void
1112 cxgbit_best_mtu(const unsigned short *mtus, unsigned short mtu,
1113 		unsigned int *idx, int use_ts, int ipv6)
1114 {
1115 	unsigned short hdr_size = (ipv6 ? sizeof(struct ipv6hdr) :
1116 				   sizeof(struct iphdr)) +
1117 				   sizeof(struct tcphdr) +
1118 				   (use_ts ? round_up(TCPOLEN_TIMESTAMP,
1119 				    4) : 0);
1120 	unsigned short data_size = mtu - hdr_size;
1121 
1122 	cxgb4_best_aligned_mtu(mtus, hdr_size, data_size, 8, idx);
1123 }
1124 
1125 static void cxgbit_send_rx_credits(struct cxgbit_sock *csk, struct sk_buff *skb)
1126 {
1127 	if (csk->com.state != CSK_STATE_ESTABLISHED) {
1128 		__kfree_skb(skb);
1129 		return;
1130 	}
1131 
1132 	cxgbit_ofld_send(csk->com.cdev, skb);
1133 }
1134 
1135 /*
1136  * CPL connection rx data ack: host ->
1137  * Send RX credits through an RX_DATA_ACK CPL message.
1138  * Returns the number of credits sent.
1139  */
1140 int cxgbit_rx_data_ack(struct cxgbit_sock *csk)
1141 {
1142 	struct sk_buff *skb;
1143 	struct cpl_rx_data_ack *req;
1144 	unsigned int len = roundup(sizeof(*req), 16);
1145 
1146 	skb = alloc_skb(len, GFP_KERNEL);
1147 	if (!skb)
1148 		return -1;
1149 
1150 	req = (struct cpl_rx_data_ack *)__skb_put(skb, len);
1151 	memset(req, 0, len);
1152 
1153 	set_wr_txq(skb, CPL_PRIORITY_ACK, csk->ctrlq_idx);
1154 	INIT_TP_WR(req, csk->tid);
1155 	OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_RX_DATA_ACK,
1156 						    csk->tid));
1157 	req->credit_dack = cpu_to_be32(RX_DACK_CHANGE_F | RX_DACK_MODE_V(1) |
1158 				       RX_CREDITS_V(csk->rx_credits));
1159 
1160 	csk->rx_credits = 0;
1161 
1162 	spin_lock_bh(&csk->lock);
1163 	if (csk->lock_owner) {
1164 		cxgbit_skcb_rx_backlog_fn(skb) = cxgbit_send_rx_credits;
1165 		__skb_queue_tail(&csk->backlogq, skb);
1166 		spin_unlock_bh(&csk->lock);
1167 		return 0;
1168 	}
1169 
1170 	cxgbit_send_rx_credits(csk, skb);
1171 	spin_unlock_bh(&csk->lock);
1172 
1173 	return 0;
1174 }
1175 
1176 #define FLOWC_WR_NPARAMS_MIN    9
1177 #define FLOWC_WR_NPARAMS_MAX	11
1178 static int cxgbit_alloc_csk_skb(struct cxgbit_sock *csk)
1179 {
1180 	struct sk_buff *skb;
1181 	u32 len, flowclen;
1182 	u8 i;
1183 
1184 	flowclen = offsetof(struct fw_flowc_wr,
1185 			    mnemval[FLOWC_WR_NPARAMS_MAX]);
1186 
1187 	len = max_t(u32, sizeof(struct cpl_abort_req),
1188 		    sizeof(struct cpl_abort_rpl));
1189 
1190 	len = max(len, flowclen);
1191 	len = roundup(len, 16);
1192 
1193 	for (i = 0; i < 3; i++) {
1194 		skb = alloc_skb(len, GFP_ATOMIC);
1195 		if (!skb)
1196 			goto out;
1197 		__skb_queue_tail(&csk->skbq, skb);
1198 	}
1199 
1200 	skb = alloc_skb(LRO_SKB_MIN_HEADROOM, GFP_ATOMIC);
1201 	if (!skb)
1202 		goto out;
1203 
1204 	memset(skb->data, 0, LRO_SKB_MIN_HEADROOM);
1205 	csk->lro_hskb = skb;
1206 
1207 	return 0;
1208 out:
1209 	__skb_queue_purge(&csk->skbq);
1210 	return -ENOMEM;
1211 }
1212 
1213 static u32 cxgbit_compute_wscale(u32 win)
1214 {
1215 	u32 wscale = 0;
1216 
1217 	while (wscale < 14 && (65535 << wscale) < win)
1218 		wscale++;
1219 	return wscale;
1220 }
1221 
1222 static void
1223 cxgbit_pass_accept_rpl(struct cxgbit_sock *csk, struct cpl_pass_accept_req *req)
1224 {
1225 	struct sk_buff *skb;
1226 	const struct tcphdr *tcph;
1227 	struct cpl_t5_pass_accept_rpl *rpl5;
1228 	unsigned int len = roundup(sizeof(*rpl5), 16);
1229 	unsigned int mtu_idx;
1230 	u64 opt0;
1231 	u32 opt2, hlen;
1232 	u32 wscale;
1233 	u32 win;
1234 
1235 	pr_debug("%s csk %p tid %u\n", __func__, csk, csk->tid);
1236 
1237 	skb = alloc_skb(len, GFP_ATOMIC);
1238 	if (!skb) {
1239 		cxgbit_put_csk(csk);
1240 		return;
1241 	}
1242 
1243 	rpl5 = (struct cpl_t5_pass_accept_rpl *)__skb_put(skb, len);
1244 	memset(rpl5, 0, len);
1245 
1246 	INIT_TP_WR(rpl5, csk->tid);
1247 	OPCODE_TID(rpl5) = cpu_to_be32(MK_OPCODE_TID(CPL_PASS_ACCEPT_RPL,
1248 						     csk->tid));
1249 	cxgbit_best_mtu(csk->com.cdev->lldi.mtus, csk->mtu, &mtu_idx,
1250 			req->tcpopt.tstamp,
1251 			(csk->com.remote_addr.ss_family == AF_INET) ? 0 : 1);
1252 	wscale = cxgbit_compute_wscale(csk->rcv_win);
1253 	/*
1254 	 * Specify the largest window that will fit in opt0. The
1255 	 * remainder will be specified in the rx_data_ack.
1256 	 */
1257 	win = csk->rcv_win >> 10;
1258 	if (win > RCV_BUFSIZ_M)
1259 		win = RCV_BUFSIZ_M;
1260 	opt0 =  TCAM_BYPASS_F |
1261 		WND_SCALE_V(wscale) |
1262 		MSS_IDX_V(mtu_idx) |
1263 		L2T_IDX_V(csk->l2t->idx) |
1264 		TX_CHAN_V(csk->tx_chan) |
1265 		SMAC_SEL_V(csk->smac_idx) |
1266 		DSCP_V(csk->tos >> 2) |
1267 		ULP_MODE_V(ULP_MODE_ISCSI) |
1268 		RCV_BUFSIZ_V(win);
1269 
1270 	opt2 = RX_CHANNEL_V(0) |
1271 		RSS_QUEUE_VALID_F | RSS_QUEUE_V(csk->rss_qid);
1272 
1273 	if (req->tcpopt.tstamp)
1274 		opt2 |= TSTAMPS_EN_F;
1275 	if (req->tcpopt.sack)
1276 		opt2 |= SACK_EN_F;
1277 	if (wscale)
1278 		opt2 |= WND_SCALE_EN_F;
1279 
1280 	hlen = ntohl(req->hdr_len);
1281 	tcph = (const void *)(req + 1) + ETH_HDR_LEN_G(hlen) +
1282 		IP_HDR_LEN_G(hlen);
1283 
1284 	if (tcph->ece && tcph->cwr)
1285 		opt2 |= CCTRL_ECN_V(1);
1286 
1287 	opt2 |= RX_COALESCE_V(3);
1288 	opt2 |= CONG_CNTRL_V(CONG_ALG_NEWRENO);
1289 
1290 	opt2 |= T5_ISS_F;
1291 	rpl5->iss = cpu_to_be32((prandom_u32() & ~7UL) - 1);
1292 
1293 	opt2 |= T5_OPT_2_VALID_F;
1294 
1295 	rpl5->opt0 = cpu_to_be64(opt0);
1296 	rpl5->opt2 = cpu_to_be32(opt2);
1297 	set_wr_txq(skb, CPL_PRIORITY_SETUP, csk->ctrlq_idx);
1298 	t4_set_arp_err_handler(skb, NULL, cxgbit_arp_failure_discard);
1299 	cxgbit_l2t_send(csk->com.cdev, skb, csk->l2t);
1300 }
1301 
1302 static void
1303 cxgbit_pass_accept_req(struct cxgbit_device *cdev, struct sk_buff *skb)
1304 {
1305 	struct cxgbit_sock *csk = NULL;
1306 	struct cxgbit_np *cnp;
1307 	struct cpl_pass_accept_req *req = cplhdr(skb);
1308 	unsigned int stid = PASS_OPEN_TID_G(ntohl(req->tos_stid));
1309 	struct tid_info *t = cdev->lldi.tids;
1310 	unsigned int tid = GET_TID(req);
1311 	u16 peer_mss = ntohs(req->tcpopt.mss);
1312 	unsigned short hdrs;
1313 
1314 	struct dst_entry *dst;
1315 	__u8 local_ip[16], peer_ip[16];
1316 	__be16 local_port, peer_port;
1317 	int ret;
1318 	int iptype;
1319 
1320 	pr_debug("%s: cdev = %p; stid = %u; tid = %u\n",
1321 		 __func__, cdev, stid, tid);
1322 
1323 	cnp = lookup_stid(t, stid);
1324 	if (!cnp) {
1325 		pr_err("%s connect request on invalid stid %d\n",
1326 		       __func__, stid);
1327 		goto rel_skb;
1328 	}
1329 
1330 	if (cnp->com.state != CSK_STATE_LISTEN) {
1331 		pr_err("%s - listening parent not in CSK_STATE_LISTEN\n",
1332 		       __func__);
1333 		goto reject;
1334 	}
1335 
1336 	csk = lookup_tid(t, tid);
1337 	if (csk) {
1338 		pr_err("%s csk not null tid %u\n",
1339 		       __func__, tid);
1340 		goto rel_skb;
1341 	}
1342 
1343 	cxgbit_get_tuple_info(req, &iptype, local_ip, peer_ip,
1344 			      &local_port, &peer_port);
1345 
1346 	/* Find output route */
1347 	if (iptype == 4)  {
1348 		pr_debug("%s parent sock %p tid %u laddr %pI4 raddr %pI4 "
1349 			 "lport %d rport %d peer_mss %d\n"
1350 			 , __func__, cnp, tid,
1351 			 local_ip, peer_ip, ntohs(local_port),
1352 			 ntohs(peer_port), peer_mss);
1353 		dst = cxgbit_find_route(cdev, *(__be32 *)local_ip,
1354 					*(__be32 *)peer_ip,
1355 					local_port, peer_port,
1356 					PASS_OPEN_TOS_G(ntohl(req->tos_stid)));
1357 	} else {
1358 		pr_debug("%s parent sock %p tid %u laddr %pI6 raddr %pI6 "
1359 			 "lport %d rport %d peer_mss %d\n"
1360 			 , __func__, cnp, tid,
1361 			 local_ip, peer_ip, ntohs(local_port),
1362 			 ntohs(peer_port), peer_mss);
1363 		dst = cxgbit_find_route6(cdev, local_ip, peer_ip,
1364 					 local_port, peer_port,
1365 					 PASS_OPEN_TOS_G(ntohl(req->tos_stid)),
1366 					 ((struct sockaddr_in6 *)
1367 					 &cnp->com.local_addr)->sin6_scope_id);
1368 	}
1369 	if (!dst) {
1370 		pr_err("%s - failed to find dst entry!\n",
1371 		       __func__);
1372 		goto reject;
1373 	}
1374 
1375 	csk = kzalloc(sizeof(*csk), GFP_ATOMIC);
1376 	if (!csk) {
1377 		dst_release(dst);
1378 		goto rel_skb;
1379 	}
1380 
1381 	ret = cxgbit_offload_init(csk, iptype, peer_ip, ntohs(local_port),
1382 				  dst, cdev);
1383 	if (ret) {
1384 		pr_err("%s - failed to allocate l2t entry!\n",
1385 		       __func__);
1386 		dst_release(dst);
1387 		kfree(csk);
1388 		goto reject;
1389 	}
1390 
1391 	kref_init(&csk->kref);
1392 	init_completion(&csk->com.wr_wait.completion);
1393 
1394 	INIT_LIST_HEAD(&csk->accept_node);
1395 
1396 	hdrs = (iptype == 4 ? sizeof(struct iphdr) : sizeof(struct ipv6hdr)) +
1397 		sizeof(struct tcphdr) +	(req->tcpopt.tstamp ? 12 : 0);
1398 	if (peer_mss && csk->mtu > (peer_mss + hdrs))
1399 		csk->mtu = peer_mss + hdrs;
1400 
1401 	csk->com.state = CSK_STATE_CONNECTING;
1402 	csk->com.cdev = cdev;
1403 	csk->cnp = cnp;
1404 	csk->tos = PASS_OPEN_TOS_G(ntohl(req->tos_stid));
1405 	csk->dst = dst;
1406 	csk->tid = tid;
1407 	csk->wr_cred = cdev->lldi.wr_cred -
1408 			DIV_ROUND_UP(sizeof(struct cpl_abort_req), 16);
1409 	csk->wr_max_cred = csk->wr_cred;
1410 	csk->wr_una_cred = 0;
1411 
1412 	if (iptype == 4) {
1413 		struct sockaddr_in *sin = (struct sockaddr_in *)
1414 					  &csk->com.local_addr;
1415 		sin->sin_family = AF_INET;
1416 		sin->sin_port = local_port;
1417 		sin->sin_addr.s_addr = *(__be32 *)local_ip;
1418 
1419 		sin = (struct sockaddr_in *)&csk->com.remote_addr;
1420 		sin->sin_family = AF_INET;
1421 		sin->sin_port = peer_port;
1422 		sin->sin_addr.s_addr = *(__be32 *)peer_ip;
1423 	} else {
1424 		struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)
1425 					    &csk->com.local_addr;
1426 
1427 		sin6->sin6_family = PF_INET6;
1428 		sin6->sin6_port = local_port;
1429 		memcpy(sin6->sin6_addr.s6_addr, local_ip, 16);
1430 		cxgb4_clip_get(cdev->lldi.ports[0],
1431 			       (const u32 *)&sin6->sin6_addr.s6_addr,
1432 			       1);
1433 
1434 		sin6 = (struct sockaddr_in6 *)&csk->com.remote_addr;
1435 		sin6->sin6_family = PF_INET6;
1436 		sin6->sin6_port = peer_port;
1437 		memcpy(sin6->sin6_addr.s6_addr, peer_ip, 16);
1438 	}
1439 
1440 	skb_queue_head_init(&csk->rxq);
1441 	skb_queue_head_init(&csk->txq);
1442 	skb_queue_head_init(&csk->ppodq);
1443 	skb_queue_head_init(&csk->backlogq);
1444 	skb_queue_head_init(&csk->skbq);
1445 	cxgbit_sock_reset_wr_list(csk);
1446 	spin_lock_init(&csk->lock);
1447 	init_waitqueue_head(&csk->waitq);
1448 	init_waitqueue_head(&csk->ack_waitq);
1449 	csk->lock_owner = false;
1450 
1451 	if (cxgbit_alloc_csk_skb(csk)) {
1452 		dst_release(dst);
1453 		kfree(csk);
1454 		goto rel_skb;
1455 	}
1456 
1457 	cxgbit_get_cdev(cdev);
1458 
1459 	spin_lock(&cdev->cskq.lock);
1460 	list_add_tail(&csk->list, &cdev->cskq.list);
1461 	spin_unlock(&cdev->cskq.lock);
1462 
1463 	cxgb4_insert_tid(t, csk, tid);
1464 	cxgbit_pass_accept_rpl(csk, req);
1465 	goto rel_skb;
1466 
1467 reject:
1468 	cxgbit_release_tid(cdev, tid);
1469 rel_skb:
1470 	__kfree_skb(skb);
1471 }
1472 
1473 static u32
1474 cxgbit_tx_flowc_wr_credits(struct cxgbit_sock *csk, u32 *nparamsp,
1475 			   u32 *flowclenp)
1476 {
1477 	u32 nparams, flowclen16, flowclen;
1478 
1479 	nparams = FLOWC_WR_NPARAMS_MIN;
1480 
1481 	if (csk->snd_wscale)
1482 		nparams++;
1483 
1484 #ifdef CONFIG_CHELSIO_T4_DCB
1485 	nparams++;
1486 #endif
1487 	flowclen = offsetof(struct fw_flowc_wr, mnemval[nparams]);
1488 	flowclen16 = DIV_ROUND_UP(flowclen, 16);
1489 	flowclen = flowclen16 * 16;
1490 	/*
1491 	 * Return the number of 16-byte credits used by the flowc request.
1492 	 * Pass back the nparams and actual flowc length if requested.
1493 	 */
1494 	if (nparamsp)
1495 		*nparamsp = nparams;
1496 	if (flowclenp)
1497 		*flowclenp = flowclen;
1498 	return flowclen16;
1499 }
1500 
1501 u32 cxgbit_send_tx_flowc_wr(struct cxgbit_sock *csk)
1502 {
1503 	struct cxgbit_device *cdev = csk->com.cdev;
1504 	struct fw_flowc_wr *flowc;
1505 	u32 nparams, flowclen16, flowclen;
1506 	struct sk_buff *skb;
1507 	u8 index;
1508 
1509 #ifdef CONFIG_CHELSIO_T4_DCB
1510 	u16 vlan = ((struct l2t_entry *)csk->l2t)->vlan;
1511 #endif
1512 
1513 	flowclen16 = cxgbit_tx_flowc_wr_credits(csk, &nparams, &flowclen);
1514 
1515 	skb = __skb_dequeue(&csk->skbq);
1516 	flowc = (struct fw_flowc_wr *)__skb_put(skb, flowclen);
1517 	memset(flowc, 0, flowclen);
1518 
1519 	flowc->op_to_nparams = cpu_to_be32(FW_WR_OP_V(FW_FLOWC_WR) |
1520 					   FW_FLOWC_WR_NPARAMS_V(nparams));
1521 	flowc->flowid_len16 = cpu_to_be32(FW_WR_LEN16_V(flowclen16) |
1522 					  FW_WR_FLOWID_V(csk->tid));
1523 	flowc->mnemval[0].mnemonic = FW_FLOWC_MNEM_PFNVFN;
1524 	flowc->mnemval[0].val = cpu_to_be32(FW_PFVF_CMD_PFN_V
1525 					    (csk->com.cdev->lldi.pf));
1526 	flowc->mnemval[1].mnemonic = FW_FLOWC_MNEM_CH;
1527 	flowc->mnemval[1].val = cpu_to_be32(csk->tx_chan);
1528 	flowc->mnemval[2].mnemonic = FW_FLOWC_MNEM_PORT;
1529 	flowc->mnemval[2].val = cpu_to_be32(csk->tx_chan);
1530 	flowc->mnemval[3].mnemonic = FW_FLOWC_MNEM_IQID;
1531 	flowc->mnemval[3].val = cpu_to_be32(csk->rss_qid);
1532 	flowc->mnemval[4].mnemonic = FW_FLOWC_MNEM_SNDNXT;
1533 	flowc->mnemval[4].val = cpu_to_be32(csk->snd_nxt);
1534 	flowc->mnemval[5].mnemonic = FW_FLOWC_MNEM_RCVNXT;
1535 	flowc->mnemval[5].val = cpu_to_be32(csk->rcv_nxt);
1536 	flowc->mnemval[6].mnemonic = FW_FLOWC_MNEM_SNDBUF;
1537 	flowc->mnemval[6].val = cpu_to_be32(csk->snd_win);
1538 	flowc->mnemval[7].mnemonic = FW_FLOWC_MNEM_MSS;
1539 	flowc->mnemval[7].val = cpu_to_be32(csk->emss);
1540 
1541 	flowc->mnemval[8].mnemonic = FW_FLOWC_MNEM_TXDATAPLEN_MAX;
1542 	if (test_bit(CDEV_ISO_ENABLE, &cdev->flags))
1543 		flowc->mnemval[8].val = cpu_to_be32(CXGBIT_MAX_ISO_PAYLOAD);
1544 	else
1545 		flowc->mnemval[8].val = cpu_to_be32(16384);
1546 
1547 	index = 9;
1548 
1549 	if (csk->snd_wscale) {
1550 		flowc->mnemval[index].mnemonic = FW_FLOWC_MNEM_RCV_SCALE;
1551 		flowc->mnemval[index].val = cpu_to_be32(csk->snd_wscale);
1552 		index++;
1553 	}
1554 
1555 #ifdef CONFIG_CHELSIO_T4_DCB
1556 	flowc->mnemval[index].mnemonic = FW_FLOWC_MNEM_DCBPRIO;
1557 	if (vlan == VLAN_NONE) {
1558 		pr_warn("csk %u without VLAN Tag on DCB Link\n", csk->tid);
1559 		flowc->mnemval[index].val = cpu_to_be32(0);
1560 	} else
1561 		flowc->mnemval[index].val = cpu_to_be32(
1562 				(vlan & VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT);
1563 #endif
1564 
1565 	pr_debug("%s: csk %p; tx_chan = %u; rss_qid = %u; snd_seq = %u;"
1566 		 " rcv_seq = %u; snd_win = %u; emss = %u\n",
1567 		 __func__, csk, csk->tx_chan, csk->rss_qid, csk->snd_nxt,
1568 		 csk->rcv_nxt, csk->snd_win, csk->emss);
1569 	set_wr_txq(skb, CPL_PRIORITY_DATA, csk->txq_idx);
1570 	cxgbit_ofld_send(csk->com.cdev, skb);
1571 	return flowclen16;
1572 }
1573 
1574 int cxgbit_setup_conn_digest(struct cxgbit_sock *csk)
1575 {
1576 	struct sk_buff *skb;
1577 	struct cpl_set_tcb_field *req;
1578 	u8 hcrc = csk->submode & CXGBIT_SUBMODE_HCRC;
1579 	u8 dcrc = csk->submode & CXGBIT_SUBMODE_DCRC;
1580 	unsigned int len = roundup(sizeof(*req), 16);
1581 	int ret;
1582 
1583 	skb = alloc_skb(len, GFP_KERNEL);
1584 	if (!skb)
1585 		return -ENOMEM;
1586 
1587 	/*  set up ulp submode */
1588 	req = (struct cpl_set_tcb_field *)__skb_put(skb, len);
1589 	memset(req, 0, len);
1590 
1591 	INIT_TP_WR(req, csk->tid);
1592 	OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, csk->tid));
1593 	req->reply_ctrl = htons(NO_REPLY_V(0) | QUEUENO_V(csk->rss_qid));
1594 	req->word_cookie = htons(0);
1595 	req->mask = cpu_to_be64(0x3 << 4);
1596 	req->val = cpu_to_be64(((hcrc ? ULP_CRC_HEADER : 0) |
1597 				(dcrc ? ULP_CRC_DATA : 0)) << 4);
1598 	set_wr_txq(skb, CPL_PRIORITY_CONTROL, csk->ctrlq_idx);
1599 
1600 	cxgbit_get_csk(csk);
1601 	cxgbit_init_wr_wait(&csk->com.wr_wait);
1602 
1603 	cxgbit_ofld_send(csk->com.cdev, skb);
1604 
1605 	ret = cxgbit_wait_for_reply(csk->com.cdev,
1606 				    &csk->com.wr_wait,
1607 				    csk->tid, 5, __func__);
1608 	if (ret)
1609 		return -1;
1610 
1611 	return 0;
1612 }
1613 
1614 int cxgbit_setup_conn_pgidx(struct cxgbit_sock *csk, u32 pg_idx)
1615 {
1616 	struct sk_buff *skb;
1617 	struct cpl_set_tcb_field *req;
1618 	unsigned int len = roundup(sizeof(*req), 16);
1619 	int ret;
1620 
1621 	skb = alloc_skb(len, GFP_KERNEL);
1622 	if (!skb)
1623 		return -ENOMEM;
1624 
1625 	req = (struct cpl_set_tcb_field *)__skb_put(skb, len);
1626 	memset(req, 0, len);
1627 
1628 	INIT_TP_WR(req, csk->tid);
1629 	OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, csk->tid));
1630 	req->reply_ctrl = htons(NO_REPLY_V(0) | QUEUENO_V(csk->rss_qid));
1631 	req->word_cookie = htons(0);
1632 	req->mask = cpu_to_be64(0x3 << 8);
1633 	req->val = cpu_to_be64(pg_idx << 8);
1634 	set_wr_txq(skb, CPL_PRIORITY_CONTROL, csk->ctrlq_idx);
1635 
1636 	cxgbit_get_csk(csk);
1637 	cxgbit_init_wr_wait(&csk->com.wr_wait);
1638 
1639 	cxgbit_ofld_send(csk->com.cdev, skb);
1640 
1641 	ret = cxgbit_wait_for_reply(csk->com.cdev,
1642 				    &csk->com.wr_wait,
1643 				    csk->tid, 5, __func__);
1644 	if (ret)
1645 		return -1;
1646 
1647 	return 0;
1648 }
1649 
1650 static void
1651 cxgbit_pass_open_rpl(struct cxgbit_device *cdev, struct sk_buff *skb)
1652 {
1653 	struct cpl_pass_open_rpl *rpl = cplhdr(skb);
1654 	struct tid_info *t = cdev->lldi.tids;
1655 	unsigned int stid = GET_TID(rpl);
1656 	struct cxgbit_np *cnp = lookup_stid(t, stid);
1657 
1658 	pr_debug("%s: cnp = %p; stid = %u; status = %d\n",
1659 		 __func__, cnp, stid, rpl->status);
1660 
1661 	if (!cnp) {
1662 		pr_info("%s stid %d lookup failure\n", __func__, stid);
1663 		return;
1664 	}
1665 
1666 	cxgbit_wake_up(&cnp->com.wr_wait, __func__, rpl->status);
1667 	cxgbit_put_cnp(cnp);
1668 }
1669 
1670 static void
1671 cxgbit_close_listsrv_rpl(struct cxgbit_device *cdev, struct sk_buff *skb)
1672 {
1673 	struct cpl_close_listsvr_rpl *rpl = cplhdr(skb);
1674 	struct tid_info *t = cdev->lldi.tids;
1675 	unsigned int stid = GET_TID(rpl);
1676 	struct cxgbit_np *cnp = lookup_stid(t, stid);
1677 
1678 	pr_debug("%s: cnp = %p; stid = %u; status = %d\n",
1679 		 __func__, cnp, stid, rpl->status);
1680 
1681 	if (!cnp) {
1682 		pr_info("%s stid %d lookup failure\n", __func__, stid);
1683 		return;
1684 	}
1685 
1686 	cxgbit_wake_up(&cnp->com.wr_wait, __func__, rpl->status);
1687 	cxgbit_put_cnp(cnp);
1688 }
1689 
1690 static void
1691 cxgbit_pass_establish(struct cxgbit_device *cdev, struct sk_buff *skb)
1692 {
1693 	struct cpl_pass_establish *req = cplhdr(skb);
1694 	struct tid_info *t = cdev->lldi.tids;
1695 	unsigned int tid = GET_TID(req);
1696 	struct cxgbit_sock *csk;
1697 	struct cxgbit_np *cnp;
1698 	u16 tcp_opt = be16_to_cpu(req->tcp_opt);
1699 	u32 snd_isn = be32_to_cpu(req->snd_isn);
1700 	u32 rcv_isn = be32_to_cpu(req->rcv_isn);
1701 
1702 	csk = lookup_tid(t, tid);
1703 	if (unlikely(!csk)) {
1704 		pr_err("can't find connection for tid %u.\n", tid);
1705 		goto rel_skb;
1706 	}
1707 	cnp = csk->cnp;
1708 
1709 	pr_debug("%s: csk %p; tid %u; cnp %p\n",
1710 		 __func__, csk, tid, cnp);
1711 
1712 	csk->write_seq = snd_isn;
1713 	csk->snd_una = snd_isn;
1714 	csk->snd_nxt = snd_isn;
1715 
1716 	csk->rcv_nxt = rcv_isn;
1717 
1718 	if (csk->rcv_win > (RCV_BUFSIZ_M << 10))
1719 		csk->rx_credits = (csk->rcv_win - (RCV_BUFSIZ_M << 10));
1720 
1721 	csk->snd_wscale = TCPOPT_SND_WSCALE_G(tcp_opt);
1722 	cxgbit_set_emss(csk, tcp_opt);
1723 	dst_confirm(csk->dst);
1724 	csk->com.state = CSK_STATE_ESTABLISHED;
1725 	spin_lock_bh(&cnp->np_accept_lock);
1726 	list_add_tail(&csk->accept_node, &cnp->np_accept_list);
1727 	spin_unlock_bh(&cnp->np_accept_lock);
1728 	complete(&cnp->accept_comp);
1729 rel_skb:
1730 	__kfree_skb(skb);
1731 }
1732 
1733 static void cxgbit_queue_rx_skb(struct cxgbit_sock *csk, struct sk_buff *skb)
1734 {
1735 	cxgbit_skcb_flags(skb) = 0;
1736 	spin_lock_bh(&csk->rxq.lock);
1737 	__skb_queue_tail(&csk->rxq, skb);
1738 	spin_unlock_bh(&csk->rxq.lock);
1739 	wake_up(&csk->waitq);
1740 }
1741 
1742 static void cxgbit_peer_close(struct cxgbit_sock *csk, struct sk_buff *skb)
1743 {
1744 	pr_debug("%s: csk %p; tid %u; state %d\n",
1745 		 __func__, csk, csk->tid, csk->com.state);
1746 
1747 	switch (csk->com.state) {
1748 	case CSK_STATE_ESTABLISHED:
1749 		csk->com.state = CSK_STATE_CLOSING;
1750 		cxgbit_queue_rx_skb(csk, skb);
1751 		return;
1752 	case CSK_STATE_CLOSING:
1753 		/* simultaneous close */
1754 		csk->com.state = CSK_STATE_MORIBUND;
1755 		break;
1756 	case CSK_STATE_MORIBUND:
1757 		csk->com.state = CSK_STATE_DEAD;
1758 		cxgbit_put_csk(csk);
1759 		break;
1760 	case CSK_STATE_ABORTING:
1761 		break;
1762 	default:
1763 		pr_info("%s: cpl_peer_close in bad state %d\n",
1764 			__func__, csk->com.state);
1765 	}
1766 
1767 	__kfree_skb(skb);
1768 }
1769 
1770 static void cxgbit_close_con_rpl(struct cxgbit_sock *csk, struct sk_buff *skb)
1771 {
1772 	pr_debug("%s: csk %p; tid %u; state %d\n",
1773 		 __func__, csk, csk->tid, csk->com.state);
1774 
1775 	switch (csk->com.state) {
1776 	case CSK_STATE_CLOSING:
1777 		csk->com.state = CSK_STATE_MORIBUND;
1778 		break;
1779 	case CSK_STATE_MORIBUND:
1780 		csk->com.state = CSK_STATE_DEAD;
1781 		cxgbit_put_csk(csk);
1782 		break;
1783 	case CSK_STATE_ABORTING:
1784 	case CSK_STATE_DEAD:
1785 		break;
1786 	default:
1787 		pr_info("%s: cpl_close_con_rpl in bad state %d\n",
1788 			__func__, csk->com.state);
1789 	}
1790 
1791 	__kfree_skb(skb);
1792 }
1793 
1794 static void cxgbit_abort_req_rss(struct cxgbit_sock *csk, struct sk_buff *skb)
1795 {
1796 	struct cpl_abort_req_rss *hdr = cplhdr(skb);
1797 	unsigned int tid = GET_TID(hdr);
1798 	struct cpl_abort_rpl *rpl;
1799 	struct sk_buff *rpl_skb;
1800 	bool release = false;
1801 	bool wakeup_thread = false;
1802 	unsigned int len = roundup(sizeof(*rpl), 16);
1803 
1804 	pr_debug("%s: csk %p; tid %u; state %d\n",
1805 		 __func__, csk, tid, csk->com.state);
1806 
1807 	if (cxgbit_is_neg_adv(hdr->status)) {
1808 		pr_err("%s: got neg advise %d on tid %u\n",
1809 		       __func__, hdr->status, tid);
1810 		goto rel_skb;
1811 	}
1812 
1813 	switch (csk->com.state) {
1814 	case CSK_STATE_CONNECTING:
1815 	case CSK_STATE_MORIBUND:
1816 		csk->com.state = CSK_STATE_DEAD;
1817 		release = true;
1818 		break;
1819 	case CSK_STATE_ESTABLISHED:
1820 		csk->com.state = CSK_STATE_DEAD;
1821 		wakeup_thread = true;
1822 		break;
1823 	case CSK_STATE_CLOSING:
1824 		csk->com.state = CSK_STATE_DEAD;
1825 		if (!csk->conn)
1826 			release = true;
1827 		break;
1828 	case CSK_STATE_ABORTING:
1829 		break;
1830 	default:
1831 		pr_info("%s: cpl_abort_req_rss in bad state %d\n",
1832 			__func__, csk->com.state);
1833 		csk->com.state = CSK_STATE_DEAD;
1834 	}
1835 
1836 	__skb_queue_purge(&csk->txq);
1837 
1838 	if (!test_and_set_bit(CSK_TX_DATA_SENT, &csk->com.flags))
1839 		cxgbit_send_tx_flowc_wr(csk);
1840 
1841 	rpl_skb = __skb_dequeue(&csk->skbq);
1842 	set_wr_txq(skb, CPL_PRIORITY_DATA, csk->txq_idx);
1843 
1844 	rpl = (struct cpl_abort_rpl *)__skb_put(rpl_skb, len);
1845 	memset(rpl, 0, len);
1846 
1847 	INIT_TP_WR(rpl, csk->tid);
1848 	OPCODE_TID(rpl) = cpu_to_be32(MK_OPCODE_TID(CPL_ABORT_RPL, tid));
1849 	rpl->cmd = CPL_ABORT_NO_RST;
1850 	cxgbit_ofld_send(csk->com.cdev, rpl_skb);
1851 
1852 	if (wakeup_thread) {
1853 		cxgbit_queue_rx_skb(csk, skb);
1854 		return;
1855 	}
1856 
1857 	if (release)
1858 		cxgbit_put_csk(csk);
1859 rel_skb:
1860 	__kfree_skb(skb);
1861 }
1862 
1863 static void cxgbit_abort_rpl_rss(struct cxgbit_sock *csk, struct sk_buff *skb)
1864 {
1865 	pr_debug("%s: csk %p; tid %u; state %d\n",
1866 		 __func__, csk, csk->tid, csk->com.state);
1867 
1868 	switch (csk->com.state) {
1869 	case CSK_STATE_ABORTING:
1870 		csk->com.state = CSK_STATE_DEAD;
1871 		cxgbit_put_csk(csk);
1872 		break;
1873 	default:
1874 		pr_info("%s: cpl_abort_rpl_rss in state %d\n",
1875 			__func__, csk->com.state);
1876 	}
1877 
1878 	__kfree_skb(skb);
1879 }
1880 
1881 static bool cxgbit_credit_err(const struct cxgbit_sock *csk)
1882 {
1883 	const struct sk_buff *skb = csk->wr_pending_head;
1884 	u32 credit = 0;
1885 
1886 	if (unlikely(csk->wr_cred > csk->wr_max_cred)) {
1887 		pr_err("csk 0x%p, tid %u, credit %u > %u\n",
1888 		       csk, csk->tid, csk->wr_cred, csk->wr_max_cred);
1889 		return true;
1890 	}
1891 
1892 	while (skb) {
1893 		credit += skb->csum;
1894 		skb = cxgbit_skcb_tx_wr_next(skb);
1895 	}
1896 
1897 	if (unlikely((csk->wr_cred + credit) != csk->wr_max_cred)) {
1898 		pr_err("csk 0x%p, tid %u, credit %u + %u != %u.\n",
1899 		       csk, csk->tid, csk->wr_cred,
1900 		       credit, csk->wr_max_cred);
1901 
1902 		return true;
1903 	}
1904 
1905 	return false;
1906 }
1907 
1908 static void cxgbit_fw4_ack(struct cxgbit_sock *csk, struct sk_buff *skb)
1909 {
1910 	struct cpl_fw4_ack *rpl = (struct cpl_fw4_ack *)cplhdr(skb);
1911 	u32 credits = rpl->credits;
1912 	u32 snd_una = ntohl(rpl->snd_una);
1913 
1914 	csk->wr_cred += credits;
1915 	if (csk->wr_una_cred > (csk->wr_max_cred - csk->wr_cred))
1916 		csk->wr_una_cred = csk->wr_max_cred - csk->wr_cred;
1917 
1918 	while (credits) {
1919 		struct sk_buff *p = cxgbit_sock_peek_wr(csk);
1920 
1921 		if (unlikely(!p)) {
1922 			pr_err("csk 0x%p,%u, cr %u,%u+%u, empty.\n",
1923 			       csk, csk->tid, credits,
1924 			       csk->wr_cred, csk->wr_una_cred);
1925 			break;
1926 		}
1927 
1928 		if (unlikely(credits < p->csum)) {
1929 			pr_warn("csk 0x%p,%u, cr %u,%u+%u, < %u.\n",
1930 				csk,  csk->tid,
1931 				credits, csk->wr_cred, csk->wr_una_cred,
1932 				p->csum);
1933 			p->csum -= credits;
1934 			break;
1935 		}
1936 
1937 		cxgbit_sock_dequeue_wr(csk);
1938 		credits -= p->csum;
1939 		kfree_skb(p);
1940 	}
1941 
1942 	if (unlikely(cxgbit_credit_err(csk))) {
1943 		cxgbit_queue_rx_skb(csk, skb);
1944 		return;
1945 	}
1946 
1947 	if (rpl->seq_vld & CPL_FW4_ACK_FLAGS_SEQVAL) {
1948 		if (unlikely(before(snd_una, csk->snd_una))) {
1949 			pr_warn("csk 0x%p,%u, snd_una %u/%u.",
1950 				csk, csk->tid, snd_una,
1951 				csk->snd_una);
1952 			goto rel_skb;
1953 		}
1954 
1955 		if (csk->snd_una != snd_una) {
1956 			csk->snd_una = snd_una;
1957 			dst_confirm(csk->dst);
1958 			wake_up(&csk->ack_waitq);
1959 		}
1960 	}
1961 
1962 	if (skb_queue_len(&csk->txq))
1963 		cxgbit_push_tx_frames(csk);
1964 
1965 rel_skb:
1966 	__kfree_skb(skb);
1967 }
1968 
1969 static void cxgbit_set_tcb_rpl(struct cxgbit_device *cdev, struct sk_buff *skb)
1970 {
1971 	struct cxgbit_sock *csk;
1972 	struct cpl_set_tcb_rpl *rpl = (struct cpl_set_tcb_rpl *)skb->data;
1973 	unsigned int tid = GET_TID(rpl);
1974 	struct cxgb4_lld_info *lldi = &cdev->lldi;
1975 	struct tid_info *t = lldi->tids;
1976 
1977 	csk = lookup_tid(t, tid);
1978 	if (unlikely(!csk))
1979 		pr_err("can't find connection for tid %u.\n", tid);
1980 	else
1981 		cxgbit_wake_up(&csk->com.wr_wait, __func__, rpl->status);
1982 
1983 	cxgbit_put_csk(csk);
1984 }
1985 
1986 static void cxgbit_rx_data(struct cxgbit_device *cdev, struct sk_buff *skb)
1987 {
1988 	struct cxgbit_sock *csk;
1989 	struct cpl_rx_data *cpl = cplhdr(skb);
1990 	unsigned int tid = GET_TID(cpl);
1991 	struct cxgb4_lld_info *lldi = &cdev->lldi;
1992 	struct tid_info *t = lldi->tids;
1993 
1994 	csk = lookup_tid(t, tid);
1995 	if (unlikely(!csk)) {
1996 		pr_err("can't find conn. for tid %u.\n", tid);
1997 		goto rel_skb;
1998 	}
1999 
2000 	cxgbit_queue_rx_skb(csk, skb);
2001 	return;
2002 rel_skb:
2003 	__kfree_skb(skb);
2004 }
2005 
2006 static void
2007 __cxgbit_process_rx_cpl(struct cxgbit_sock *csk, struct sk_buff *skb)
2008 {
2009 	spin_lock(&csk->lock);
2010 	if (csk->lock_owner) {
2011 		__skb_queue_tail(&csk->backlogq, skb);
2012 		spin_unlock(&csk->lock);
2013 		return;
2014 	}
2015 
2016 	cxgbit_skcb_rx_backlog_fn(skb)(csk, skb);
2017 	spin_unlock(&csk->lock);
2018 }
2019 
2020 static void cxgbit_process_rx_cpl(struct cxgbit_sock *csk, struct sk_buff *skb)
2021 {
2022 	cxgbit_get_csk(csk);
2023 	__cxgbit_process_rx_cpl(csk, skb);
2024 	cxgbit_put_csk(csk);
2025 }
2026 
2027 static void cxgbit_rx_cpl(struct cxgbit_device *cdev, struct sk_buff *skb)
2028 {
2029 	struct cxgbit_sock *csk;
2030 	struct cpl_tx_data *cpl = cplhdr(skb);
2031 	struct cxgb4_lld_info *lldi = &cdev->lldi;
2032 	struct tid_info *t = lldi->tids;
2033 	unsigned int tid = GET_TID(cpl);
2034 	u8 opcode = cxgbit_skcb_rx_opcode(skb);
2035 	bool ref = true;
2036 
2037 	switch (opcode) {
2038 	case CPL_FW4_ACK:
2039 			cxgbit_skcb_rx_backlog_fn(skb) = cxgbit_fw4_ack;
2040 			ref = false;
2041 			break;
2042 	case CPL_PEER_CLOSE:
2043 			cxgbit_skcb_rx_backlog_fn(skb) = cxgbit_peer_close;
2044 			break;
2045 	case CPL_CLOSE_CON_RPL:
2046 			cxgbit_skcb_rx_backlog_fn(skb) = cxgbit_close_con_rpl;
2047 			break;
2048 	case CPL_ABORT_REQ_RSS:
2049 			cxgbit_skcb_rx_backlog_fn(skb) = cxgbit_abort_req_rss;
2050 			break;
2051 	case CPL_ABORT_RPL_RSS:
2052 			cxgbit_skcb_rx_backlog_fn(skb) = cxgbit_abort_rpl_rss;
2053 			break;
2054 	default:
2055 		goto rel_skb;
2056 	}
2057 
2058 	csk = lookup_tid(t, tid);
2059 	if (unlikely(!csk)) {
2060 		pr_err("can't find conn. for tid %u.\n", tid);
2061 		goto rel_skb;
2062 	}
2063 
2064 	if (ref)
2065 		cxgbit_process_rx_cpl(csk, skb);
2066 	else
2067 		__cxgbit_process_rx_cpl(csk, skb);
2068 
2069 	return;
2070 rel_skb:
2071 	__kfree_skb(skb);
2072 }
2073 
2074 cxgbit_cplhandler_func cxgbit_cplhandlers[NUM_CPL_CMDS] = {
2075 	[CPL_PASS_OPEN_RPL]	= cxgbit_pass_open_rpl,
2076 	[CPL_CLOSE_LISTSRV_RPL] = cxgbit_close_listsrv_rpl,
2077 	[CPL_PASS_ACCEPT_REQ]	= cxgbit_pass_accept_req,
2078 	[CPL_PASS_ESTABLISH]	= cxgbit_pass_establish,
2079 	[CPL_SET_TCB_RPL]	= cxgbit_set_tcb_rpl,
2080 	[CPL_RX_DATA]		= cxgbit_rx_data,
2081 	[CPL_FW4_ACK]		= cxgbit_rx_cpl,
2082 	[CPL_PEER_CLOSE]	= cxgbit_rx_cpl,
2083 	[CPL_CLOSE_CON_RPL]	= cxgbit_rx_cpl,
2084 	[CPL_ABORT_REQ_RSS]	= cxgbit_rx_cpl,
2085 	[CPL_ABORT_RPL_RSS]	= cxgbit_rx_cpl,
2086 };
2087