File Index
Files and directories
Sign in
FILE

cm.c

File preview with syntax highlighting.

linux-6.19.14/drivers/infiniband/hw/cxgb4/cm.c C
   1/*
   2 * Copyright (c) 2009-2014 Chelsio, Inc. All rights reserved.
   3 *
   4 * This software is available to you under a choice of one of two
   5 * licenses.  You may choose to be licensed under the terms of the GNU
   6 * General Public License (GPL) Version 2, available from the file
   7 * COPYING in the main directory of this source tree, or the
   8 * OpenIB.org BSD license below:
   9 *
  10 *     Redistribution and use in source and binary forms, with or
  11 *     without modification, are permitted provided that the following
  12 *     conditions are met:
  13 *
  14 *      - Redistributions of source code must retain the above
  15 *	  copyright notice, this list of conditions and the following
  16 *	  disclaimer.
  17 *
  18 *      - Redistributions in binary form must reproduce the above
  19 *	  copyright notice, this list of conditions and the following
  20 *	  disclaimer in the documentation and/or other materials
  21 *	  provided with the distribution.
  22 *
  23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  30 * SOFTWARE.
  31 */
  32#include <linux/module.h>
  33#include <linux/list.h>
  34#include <linux/workqueue.h>
  35#include <linux/skbuff.h>
  36#include <linux/timer.h>
  37#include <linux/notifier.h>
  38#include <linux/inetdevice.h>
  39#include <linux/ip.h>
  40#include <linux/tcp.h>
  41#include <linux/if_vlan.h>
  42
  43#include <net/neighbour.h>
  44#include <net/netevent.h>
  45#include <net/route.h>
  46#include <net/tcp.h>
  47#include <net/ip6_route.h>
  48#include <net/addrconf.h>
  49
  50#include <rdma/ib_addr.h>
  51
  52#include <libcxgb_cm.h>
  53#include "iw_cxgb4.h"
  54#include "clip_tbl.h"
  55
  56static char *states[] = {
  57	"idle",
  58	"listen",
  59	"connecting",
  60	"mpa_wait_req",
  61	"mpa_req_sent",
  62	"mpa_req_rcvd",
  63	"mpa_rep_sent",
  64	"fpdu_mode",
  65	"aborting",
  66	"closing",
  67	"moribund",
  68	"dead",
  69	NULL,
  70};
  71
  72static int nocong;
  73module_param(nocong, int, 0644);
  74MODULE_PARM_DESC(nocong, "Turn of congestion control (default=0)");
  75
  76static int enable_ecn;
  77module_param(enable_ecn, int, 0644);
  78MODULE_PARM_DESC(enable_ecn, "Enable ECN (default=0/disabled)");
  79
  80static int dack_mode;
  81module_param(dack_mode, int, 0644);
  82MODULE_PARM_DESC(dack_mode, "Delayed ack mode (default=0)");
  83
  84uint c4iw_max_read_depth = 32;
  85module_param(c4iw_max_read_depth, int, 0644);
  86MODULE_PARM_DESC(c4iw_max_read_depth,
  87		 "Per-connection max ORD/IRD (default=32)");
  88
  89static int enable_tcp_timestamps;
  90module_param(enable_tcp_timestamps, int, 0644);
  91MODULE_PARM_DESC(enable_tcp_timestamps, "Enable tcp timestamps (default=0)");
  92
  93static int enable_tcp_sack;
  94module_param(enable_tcp_sack, int, 0644);
  95MODULE_PARM_DESC(enable_tcp_sack, "Enable tcp SACK (default=0)");
  96
  97static int enable_tcp_window_scaling = 1;
  98module_param(enable_tcp_window_scaling, int, 0644);
  99MODULE_PARM_DESC(enable_tcp_window_scaling,
 100		 "Enable tcp window scaling (default=1)");
 101
 102static int peer2peer = 1;
 103module_param(peer2peer, int, 0644);
 104MODULE_PARM_DESC(peer2peer, "Support peer2peer ULPs (default=1)");
 105
 106static int p2p_type = FW_RI_INIT_P2PTYPE_READ_REQ;
 107module_param(p2p_type, int, 0644);
 108MODULE_PARM_DESC(p2p_type, "RDMAP opcode to use for the RTR message: "
 109			   "1=RDMA_READ 0=RDMA_WRITE (default 1)");
 110
 111static int ep_timeout_secs = 60;
 112module_param(ep_timeout_secs, int, 0644);
 113MODULE_PARM_DESC(ep_timeout_secs, "CM Endpoint operation timeout "
 114				   "in seconds (default=60)");
 115
 116static int mpa_rev = 2;
 117module_param(mpa_rev, int, 0644);
 118MODULE_PARM_DESC(mpa_rev, "MPA Revision, 0 supports amso1100, "
 119		"1 is RFC5044 spec compliant, 2 is IETF MPA Peer Connect Draft"
 120		" compliant (default=2)");
 121
 122static int markers_enabled;
 123module_param(markers_enabled, int, 0644);
 124MODULE_PARM_DESC(markers_enabled, "Enable MPA MARKERS (default(0)=disabled)");
 125
 126static int crc_enabled = 1;
 127module_param(crc_enabled, int, 0644);
 128MODULE_PARM_DESC(crc_enabled, "Enable MPA CRC (default(1)=enabled)");
 129
 130static int rcv_win = 256 * 1024;
 131module_param(rcv_win, int, 0644);
 132MODULE_PARM_DESC(rcv_win, "TCP receive window in bytes (default=256KB)");
 133
 134static int snd_win = 128 * 1024;
 135module_param(snd_win, int, 0644);
 136MODULE_PARM_DESC(snd_win, "TCP send window in bytes (default=128KB)");
 137
 138static struct workqueue_struct *workq;
 139
 140static struct sk_buff_head rxq;
 141
 142static struct sk_buff *get_skb(struct sk_buff *skb, int len, gfp_t gfp);
 143static void ep_timeout(struct timer_list *t);
 144static void connect_reply_upcall(struct c4iw_ep *ep, int status);
 145static int sched(struct c4iw_dev *dev, struct sk_buff *skb);
 146
 147static LIST_HEAD(timeout_list);
 148static DEFINE_SPINLOCK(timeout_lock);
 149
 150static void deref_cm_id(struct c4iw_ep_common *epc)
 151{
 152	epc->cm_id->rem_ref(epc->cm_id);
 153	epc->cm_id = NULL;
 154	set_bit(CM_ID_DEREFED, &epc->history);
 155}
 156
 157static void ref_cm_id(struct c4iw_ep_common *epc)
 158{
 159	set_bit(CM_ID_REFED, &epc->history);
 160	epc->cm_id->add_ref(epc->cm_id);
 161}
 162
 163static void deref_qp(struct c4iw_ep *ep)
 164{
 165	c4iw_qp_rem_ref(&ep->com.qp->ibqp);
 166	clear_bit(QP_REFERENCED, &ep->com.flags);
 167	set_bit(QP_DEREFED, &ep->com.history);
 168}
 169
 170static void ref_qp(struct c4iw_ep *ep)
 171{
 172	set_bit(QP_REFERENCED, &ep->com.flags);
 173	set_bit(QP_REFED, &ep->com.history);
 174	c4iw_qp_add_ref(&ep->com.qp->ibqp);
 175}
 176
 177static void start_ep_timer(struct c4iw_ep *ep)
 178{
 179	pr_debug("ep %p\n", ep);
 180	if (timer_pending(&ep->timer)) {
 181		pr_err("%s timer already started! ep %p\n",
 182		       __func__, ep);
 183		return;
 184	}
 185	clear_bit(TIMEOUT, &ep->com.flags);
 186	c4iw_get_ep(&ep->com);
 187	ep->timer.expires = jiffies + ep_timeout_secs * HZ;
 188	add_timer(&ep->timer);
 189}
 190
 191static int stop_ep_timer(struct c4iw_ep *ep)
 192{
 193	pr_debug("ep %p stopping\n", ep);
 194	timer_delete_sync(&ep->timer);
 195	if (!test_and_set_bit(TIMEOUT, &ep->com.flags)) {
 196		c4iw_put_ep(&ep->com);
 197		return 0;
 198	}
 199	return 1;
 200}
 201
 202static int c4iw_l2t_send(struct c4iw_rdev *rdev, struct sk_buff *skb,
 203		  struct l2t_entry *l2e)
 204{
 205	int	error = 0;
 206
 207	if (c4iw_fatal_error(rdev)) {
 208		kfree_skb(skb);
 209		pr_err("%s - device in error state - dropping\n", __func__);
 210		return -EIO;
 211	}
 212	error = cxgb4_l2t_send(rdev->lldi.ports[0], skb, l2e);
 213	if (error < 0)
 214		kfree_skb(skb);
 215	else if (error == NET_XMIT_DROP)
 216		return -ENOMEM;
 217	return error < 0 ? error : 0;
 218}
 219
 220int c4iw_ofld_send(struct c4iw_rdev *rdev, struct sk_buff *skb)
 221{
 222	int	error = 0;
 223
 224	if (c4iw_fatal_error(rdev)) {
 225		kfree_skb(skb);
 226		pr_err("%s - device in error state - dropping\n", __func__);
 227		return -EIO;
 228	}
 229	error = cxgb4_ofld_send(rdev->lldi.ports[0], skb);
 230	if (error < 0)
 231		kfree_skb(skb);
 232	return error < 0 ? error : 0;
 233}
 234
 235static void release_tid(struct c4iw_rdev *rdev, u32 hwtid, struct sk_buff *skb)
 236{
 237	u32 len = roundup(sizeof(struct cpl_tid_release), 16);
 238
 239	skb = get_skb(skb, len, GFP_KERNEL);
 240	if (!skb)
 241		return;
 242
 243	cxgb_mk_tid_release(skb, len, hwtid, 0);
 244	c4iw_ofld_send(rdev, skb);
 245	return;
 246}
 247
 248static void set_emss(struct c4iw_ep *ep, u16 opt)
 249{
 250	ep->emss = ep->com.dev->rdev.lldi.mtus[TCPOPT_MSS_G(opt)] -
 251		   ((AF_INET == ep->com.remote_addr.ss_family) ?
 252		    sizeof(struct iphdr) : sizeof(struct ipv6hdr)) -
 253		   sizeof(struct tcphdr);
 254	ep->mss = ep->emss;
 255	if (TCPOPT_TSTAMP_G(opt))
 256		ep->emss -= round_up(TCPOLEN_TIMESTAMP, 4);
 257	if (ep->emss < 128)
 258		ep->emss = 128;
 259	if (ep->emss & 7)
 260		pr_debug("Warning: misaligned mtu idx %u mss %u emss=%u\n",
 261			 TCPOPT_MSS_G(opt), ep->mss, ep->emss);
 262	pr_debug("mss_idx %u mss %u emss=%u\n", TCPOPT_MSS_G(opt), ep->mss,
 263		 ep->emss);
 264}
 265
 266static enum c4iw_ep_state state_read(struct c4iw_ep_common *epc)
 267{
 268	enum c4iw_ep_state state;
 269
 270	mutex_lock(&epc->mutex);
 271	state = epc->state;
 272	mutex_unlock(&epc->mutex);
 273	return state;
 274}
 275
 276static void __state_set(struct c4iw_ep_common *epc, enum c4iw_ep_state new)
 277{
 278	epc->state = new;
 279}
 280
 281static void state_set(struct c4iw_ep_common *epc, enum c4iw_ep_state new)
 282{
 283	mutex_lock(&epc->mutex);
 284	pr_debug("%s -> %s\n", states[epc->state], states[new]);
 285	__state_set(epc, new);
 286	mutex_unlock(&epc->mutex);
 287	return;
 288}
 289
 290static int alloc_ep_skb_list(struct sk_buff_head *ep_skb_list, int size)
 291{
 292	struct sk_buff *skb;
 293	unsigned int i;
 294	size_t len;
 295
 296	len = roundup(sizeof(union cpl_wr_size), 16);
 297	for (i = 0; i < size; i++) {
 298		skb = alloc_skb(len, GFP_KERNEL);
 299		if (!skb)
 300			goto fail;
 301		skb_queue_tail(ep_skb_list, skb);
 302	}
 303	return 0;
 304fail:
 305	skb_queue_purge(ep_skb_list);
 306	return -ENOMEM;
 307}
 308
 309static void *alloc_ep(int size, gfp_t gfp)
 310{
 311	struct c4iw_ep_common *epc;
 312
 313	epc = kzalloc(size, gfp);
 314	if (epc) {
 315		epc->wr_waitp = c4iw_alloc_wr_wait(gfp);
 316		if (!epc->wr_waitp) {
 317			kfree(epc);
 318			epc = NULL;
 319			goto out;
 320		}
 321		kref_init(&epc->kref);
 322		mutex_init(&epc->mutex);
 323		c4iw_init_wr_wait(epc->wr_waitp);
 324	}
 325	pr_debug("alloc ep %p\n", epc);
 326out:
 327	return epc;
 328}
 329
 330static void remove_ep_tid(struct c4iw_ep *ep)
 331{
 332	unsigned long flags;
 333
 334	xa_lock_irqsave(&ep->com.dev->hwtids, flags);
 335	__xa_erase(&ep->com.dev->hwtids, ep->hwtid);
 336	if (xa_empty(&ep->com.dev->hwtids))
 337		wake_up(&ep->com.dev->wait);
 338	xa_unlock_irqrestore(&ep->com.dev->hwtids, flags);
 339}
 340
 341static int insert_ep_tid(struct c4iw_ep *ep)
 342{
 343	unsigned long flags;
 344	int err;
 345
 346	xa_lock_irqsave(&ep->com.dev->hwtids, flags);
 347	err = __xa_insert(&ep->com.dev->hwtids, ep->hwtid, ep, GFP_KERNEL);
 348	xa_unlock_irqrestore(&ep->com.dev->hwtids, flags);
 349
 350	return err;
 351}
 352
 353/*
 354 * Atomically lookup the ep ptr given the tid and grab a reference on the ep.
 355 */
 356static struct c4iw_ep *get_ep_from_tid(struct c4iw_dev *dev, unsigned int tid)
 357{
 358	struct c4iw_ep *ep;
 359	unsigned long flags;
 360
 361	xa_lock_irqsave(&dev->hwtids, flags);
 362	ep = xa_load(&dev->hwtids, tid);
 363	if (ep)
 364		c4iw_get_ep(&ep->com);
 365	xa_unlock_irqrestore(&dev->hwtids, flags);
 366	return ep;
 367}
 368
 369/*
 370 * Atomically lookup the ep ptr given the stid and grab a reference on the ep.
 371 */
 372static struct c4iw_listen_ep *get_ep_from_stid(struct c4iw_dev *dev,
 373					       unsigned int stid)
 374{
 375	struct c4iw_listen_ep *ep;
 376	unsigned long flags;
 377
 378	xa_lock_irqsave(&dev->stids, flags);
 379	ep = xa_load(&dev->stids, stid);
 380	if (ep)
 381		c4iw_get_ep(&ep->com);
 382	xa_unlock_irqrestore(&dev->stids, flags);
 383	return ep;
 384}
 385
 386void _c4iw_free_ep(struct kref *kref)
 387{
 388	struct c4iw_ep *ep;
 389
 390	ep = container_of(kref, struct c4iw_ep, com.kref);
 391	pr_debug("ep %p state %s\n", ep, states[ep->com.state]);
 392	if (test_bit(QP_REFERENCED, &ep->com.flags))
 393		deref_qp(ep);
 394	if (test_bit(RELEASE_RESOURCES, &ep->com.flags)) {
 395		if (ep->com.remote_addr.ss_family == AF_INET6) {
 396			struct sockaddr_in6 *sin6 =
 397					(struct sockaddr_in6 *)
 398					&ep->com.local_addr;
 399
 400			cxgb4_clip_release(
 401					ep->com.dev->rdev.lldi.ports[0],
 402					(const u32 *)&sin6->sin6_addr.s6_addr,
 403					1);
 404		}
 405		cxgb4_remove_tid(ep->com.dev->rdev.lldi.tids, 0, ep->hwtid,
 406				 ep->com.local_addr.ss_family);
 407		dst_release(ep->dst);
 408		cxgb4_l2t_release(ep->l2t);
 409		kfree_skb(ep->mpa_skb);
 410	}
 411	if (!skb_queue_empty(&ep->com.ep_skb_list))
 412		skb_queue_purge(&ep->com.ep_skb_list);
 413	c4iw_put_wr_wait(ep->com.wr_waitp);
 414	kfree(ep);
 415}
 416
 417static void release_ep_resources(struct c4iw_ep *ep)
 418{
 419	set_bit(RELEASE_RESOURCES, &ep->com.flags);
 420
 421	/*
 422	 * If we have a hwtid, then remove it from the idr table
 423	 * so lookups will no longer find this endpoint.  Otherwise
 424	 * we have a race where one thread finds the ep ptr just
 425	 * before the other thread is freeing the ep memory.
 426	 */
 427	if (ep->hwtid != -1)
 428		remove_ep_tid(ep);
 429	c4iw_put_ep(&ep->com);
 430}
 431
 432static int status2errno(int status)
 433{
 434	switch (status) {
 435	case CPL_ERR_NONE:
 436		return 0;
 437	case CPL_ERR_CONN_RESET:
 438		return -ECONNRESET;
 439	case CPL_ERR_ARP_MISS:
 440		return -EHOSTUNREACH;
 441	case CPL_ERR_CONN_TIMEDOUT:
 442		return -ETIMEDOUT;
 443	case CPL_ERR_TCAM_FULL:
 444		return -ENOMEM;
 445	case CPL_ERR_CONN_EXIST:
 446		return -EADDRINUSE;
 447	default:
 448		return -EIO;
 449	}
 450}
 451
 452/*
 453 * Try and reuse skbs already allocated...
 454 */
 455static struct sk_buff *get_skb(struct sk_buff *skb, int len, gfp_t gfp)
 456{
 457	if (skb && !skb_is_nonlinear(skb) && !skb_cloned(skb)) {
 458		skb_trim(skb, 0);
 459		skb_get(skb);
 460		skb_reset_transport_header(skb);
 461	} else {
 462		skb = alloc_skb(len, gfp);
 463		if (!skb)
 464			return NULL;
 465	}
 466	t4_set_arp_err_handler(skb, NULL, NULL);
 467	return skb;
 468}
 469
 470static struct net_device *get_real_dev(struct net_device *egress_dev)
 471{
 472	return rdma_vlan_dev_real_dev(egress_dev) ? : egress_dev;
 473}
 474
 475static void arp_failure_discard(void *handle, struct sk_buff *skb)
 476{
 477	pr_err("ARP failure\n");
 478	kfree_skb(skb);
 479}
 480
 481static void mpa_start_arp_failure(void *handle, struct sk_buff *skb)
 482{
 483	pr_err("ARP failure during MPA Negotiation - Closing Connection\n");
 484}
 485
 486enum {
 487	NUM_FAKE_CPLS = 2,
 488	FAKE_CPL_PUT_EP_SAFE = NUM_CPL_CMDS + 0,
 489	FAKE_CPL_PASS_PUT_EP_SAFE = NUM_CPL_CMDS + 1,
 490};
 491
 492static int _put_ep_safe(struct c4iw_dev *dev, struct sk_buff *skb)
 493{
 494	struct c4iw_ep *ep;
 495
 496	ep = *((struct c4iw_ep **)(skb->cb + 2 * sizeof(void *)));
 497	release_ep_resources(ep);
 498	return 0;
 499}
 500
 501static int _put_pass_ep_safe(struct c4iw_dev *dev, struct sk_buff *skb)
 502{
 503	struct c4iw_ep *ep;
 504
 505	ep = *((struct c4iw_ep **)(skb->cb + 2 * sizeof(void *)));
 506	c4iw_put_ep(&ep->parent_ep->com);
 507	release_ep_resources(ep);
 508	return 0;
 509}
 510
 511/*
 512 * Fake up a special CPL opcode and call sched() so process_work() will call
 513 * _put_ep_safe() in a safe context to free the ep resources.  This is needed
 514 * because ARP error handlers are called in an ATOMIC context, and
 515 * _c4iw_free_ep() needs to block.
 516 */
 517static void queue_arp_failure_cpl(struct c4iw_ep *ep, struct sk_buff *skb,
 518				  int cpl)
 519{
 520	struct cpl_act_establish *rpl = cplhdr(skb);
 521
 522	/* Set our special ARP_FAILURE opcode */
 523	rpl->ot.opcode = cpl;
 524
 525	/*
 526	 * Save ep in the skb->cb area, after where sched() will save the dev
 527	 * ptr.
 528	 */
 529	*((struct c4iw_ep **)(skb->cb + 2 * sizeof(void *))) = ep;
 530	sched(ep->com.dev, skb);
 531}
 532
 533/* Handle an ARP failure for an accept */
 534static void pass_accept_rpl_arp_failure(void *handle, struct sk_buff *skb)
 535{
 536	struct c4iw_ep *ep = handle;
 537
 538	pr_err("ARP failure during accept - tid %u - dropping connection\n",
 539	       ep->hwtid);
 540
 541	__state_set(&ep->com, DEAD);
 542	queue_arp_failure_cpl(ep, skb, FAKE_CPL_PASS_PUT_EP_SAFE);
 543}
 544
 545/*
 546 * Handle an ARP failure for an active open.
 547 */
 548static void act_open_req_arp_failure(void *handle, struct sk_buff *skb)
 549{
 550	struct c4iw_ep *ep = handle;
 551
 552	pr_err("ARP failure during connect\n");
 553	connect_reply_upcall(ep, -EHOSTUNREACH);
 554	__state_set(&ep->com, DEAD);
 555	if (ep->com.remote_addr.ss_family == AF_INET6) {
 556		struct sockaddr_in6 *sin6 =
 557			(struct sockaddr_in6 *)&ep->com.local_addr;
 558		cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0],
 559				   (const u32 *)&sin6->sin6_addr.s6_addr, 1);
 560	}
 561	xa_erase_irq(&ep->com.dev->atids, ep->atid);
 562	cxgb4_free_atid(ep->com.dev->rdev.lldi.tids, ep->atid);
 563	queue_arp_failure_cpl(ep, skb, FAKE_CPL_PUT_EP_SAFE);
 564}
 565
 566/*
 567 * Handle an ARP failure for a CPL_ABORT_REQ.  Change it into a no RST variant
 568 * and send it along.
 569 */
 570static void abort_arp_failure(void *handle, struct sk_buff *skb)
 571{
 572	int ret;
 573	struct c4iw_ep *ep = handle;
 574	struct c4iw_rdev *rdev = &ep->com.dev->rdev;
 575	struct cpl_abort_req *req = cplhdr(skb);
 576
 577	pr_debug("rdev %p\n", rdev);
 578	req->cmd = CPL_ABORT_NO_RST;
 579	skb_get(skb);
 580	ret = c4iw_ofld_send(rdev, skb);
 581	if (ret) {
 582		__state_set(&ep->com, DEAD);
 583		queue_arp_failure_cpl(ep, skb, FAKE_CPL_PUT_EP_SAFE);
 584	} else
 585		kfree_skb(skb);
 586}
 587
 588static int send_flowc(struct c4iw_ep *ep)
 589{
 590	struct fw_flowc_wr *flowc;
 591	struct sk_buff *skb = skb_dequeue(&ep->com.ep_skb_list);
 592	u16 vlan = ep->l2t->vlan;
 593	int nparams;
 594	int flowclen, flowclen16;
 595
 596	if (WARN_ON(!skb))
 597		return -ENOMEM;
 598
 599	if (vlan == CPL_L2T_VLAN_NONE)
 600		nparams = 9;
 601	else
 602		nparams = 10;
 603
 604	flowclen = offsetof(struct fw_flowc_wr, mnemval[nparams]);
 605	flowclen16 = DIV_ROUND_UP(flowclen, 16);
 606	flowclen = flowclen16 * 16;
 607
 608	flowc = __skb_put(skb, flowclen);
 609	memset(flowc, 0, flowclen);
 610
 611	flowc->op_to_nparams = cpu_to_be32(FW_WR_OP_V(FW_FLOWC_WR) |
 612					   FW_FLOWC_WR_NPARAMS_V(nparams));
 613	flowc->flowid_len16 = cpu_to_be32(FW_WR_LEN16_V(flowclen16) |
 614					  FW_WR_FLOWID_V(ep->hwtid));
 615
 616	flowc->mnemval[0].mnemonic = FW_FLOWC_MNEM_PFNVFN;
 617	flowc->mnemval[0].val = cpu_to_be32(FW_PFVF_CMD_PFN_V
 618					    (ep->com.dev->rdev.lldi.pf));
 619	flowc->mnemval[1].mnemonic = FW_FLOWC_MNEM_CH;
 620	flowc->mnemval[1].val = cpu_to_be32(ep->tx_chan);
 621	flowc->mnemval[2].mnemonic = FW_FLOWC_MNEM_PORT;
 622	flowc->mnemval[2].val = cpu_to_be32(ep->tx_chan);
 623	flowc->mnemval[3].mnemonic = FW_FLOWC_MNEM_IQID;
 624	flowc->mnemval[3].val = cpu_to_be32(ep->rss_qid);
 625	flowc->mnemval[4].mnemonic = FW_FLOWC_MNEM_SNDNXT;
 626	flowc->mnemval[4].val = cpu_to_be32(ep->snd_seq);
 627	flowc->mnemval[5].mnemonic = FW_FLOWC_MNEM_RCVNXT;
 628	flowc->mnemval[5].val = cpu_to_be32(ep->rcv_seq);
 629	flowc->mnemval[6].mnemonic = FW_FLOWC_MNEM_SNDBUF;
 630	flowc->mnemval[6].val = cpu_to_be32(ep->snd_win);
 631	flowc->mnemval[7].mnemonic = FW_FLOWC_MNEM_MSS;
 632	flowc->mnemval[7].val = cpu_to_be32(ep->emss);
 633	flowc->mnemval[8].mnemonic = FW_FLOWC_MNEM_RCV_SCALE;
 634	flowc->mnemval[8].val = cpu_to_be32(ep->snd_wscale);
 635	if (nparams == 10) {
 636		u16 pri;
 637		pri = (vlan & VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT;
 638		flowc->mnemval[9].mnemonic = FW_FLOWC_MNEM_SCHEDCLASS;
 639		flowc->mnemval[9].val = cpu_to_be32(pri);
 640	}
 641
 642	set_wr_txq(skb, CPL_PRIORITY_DATA, ep->txq_idx);
 643	return c4iw_ofld_send(&ep->com.dev->rdev, skb);
 644}
 645
 646static int send_halfclose(struct c4iw_ep *ep)
 647{
 648	struct sk_buff *skb = skb_dequeue(&ep->com.ep_skb_list);
 649	u32 wrlen = roundup(sizeof(struct cpl_close_con_req), 16);
 650
 651	pr_debug("ep %p tid %u\n", ep, ep->hwtid);
 652	if (WARN_ON(!skb))
 653		return -ENOMEM;
 654
 655	cxgb_mk_close_con_req(skb, wrlen, ep->hwtid, ep->txq_idx,
 656			      NULL, arp_failure_discard);
 657
 658	return c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t);
 659}
 660
 661static void read_tcb(struct c4iw_ep *ep)
 662{
 663	struct sk_buff *skb;
 664	struct cpl_get_tcb *req;
 665	int wrlen = roundup(sizeof(*req), 16);
 666
 667	skb = get_skb(NULL, sizeof(*req), GFP_KERNEL);
 668	if (WARN_ON(!skb))
 669		return;
 670
 671	set_wr_txq(skb, CPL_PRIORITY_CONTROL, ep->ctrlq_idx);
 672	req = (struct cpl_get_tcb *) skb_put(skb, wrlen);
 673	memset(req, 0, wrlen);
 674	INIT_TP_WR(req, ep->hwtid);
 675	OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_GET_TCB, ep->hwtid));
 676	req->reply_ctrl = htons(REPLY_CHAN_V(0) | QUEUENO_V(ep->rss_qid));
 677
 678	/*
 679	 * keep a ref on the ep so the tcb is not unlocked before this
 680	 * cpl completes. The ref is released in read_tcb_rpl().
 681	 */
 682	c4iw_get_ep(&ep->com);
 683	if (WARN_ON(c4iw_ofld_send(&ep->com.dev->rdev, skb)))
 684		c4iw_put_ep(&ep->com);
 685}
 686
 687static int send_abort_req(struct c4iw_ep *ep)
 688{
 689	u32 wrlen = roundup(sizeof(struct cpl_abort_req), 16);
 690	struct sk_buff *req_skb = skb_dequeue(&ep->com.ep_skb_list);
 691
 692	pr_debug("ep %p tid %u\n", ep, ep->hwtid);
 693	if (WARN_ON(!req_skb))
 694		return -ENOMEM;
 695
 696	cxgb_mk_abort_req(req_skb, wrlen, ep->hwtid, ep->txq_idx,
 697			  ep, abort_arp_failure);
 698
 699	return c4iw_l2t_send(&ep->com.dev->rdev, req_skb, ep->l2t);
 700}
 701
 702static int send_abort(struct c4iw_ep *ep)
 703{
 704	if (!ep->com.qp || !ep->com.qp->srq) {
 705		send_abort_req(ep);
 706		return 0;
 707	}
 708	set_bit(ABORT_REQ_IN_PROGRESS, &ep->com.flags);
 709	read_tcb(ep);
 710	return 0;
 711}
 712
 713static int send_connect(struct c4iw_ep *ep)
 714{
 715	struct cpl_act_open_req *req = NULL;
 716	struct cpl_t5_act_open_req *t5req = NULL;
 717	struct cpl_t6_act_open_req *t6req = NULL;
 718	struct cpl_act_open_req6 *req6 = NULL;
 719	struct cpl_t5_act_open_req6 *t5req6 = NULL;
 720	struct cpl_t6_act_open_req6 *t6req6 = NULL;
 721	struct sk_buff *skb;
 722	u64 opt0;
 723	u32 opt2;
 724	unsigned int mtu_idx;
 725	u32 wscale;
 726	int win, sizev4, sizev6, wrlen;
 727	struct sockaddr_in *la = (struct sockaddr_in *)
 728				 &ep->com.local_addr;
 729	struct sockaddr_in *ra = (struct sockaddr_in *)
 730				 &ep->com.remote_addr;
 731	struct sockaddr_in6 *la6 = (struct sockaddr_in6 *)
 732				   &ep->com.local_addr;
 733	struct sockaddr_in6 *ra6 = (struct sockaddr_in6 *)
 734				   &ep->com.remote_addr;
 735	int ret;
 736	enum chip_type adapter_type = ep->com.dev->rdev.lldi.adapter_type;
 737	u32 isn = (get_random_u32() & ~7UL) - 1;
 738	struct net_device *netdev;
 739	u64 params;
 740
 741	netdev = ep->com.dev->rdev.lldi.ports[0];
 742
 743	switch (CHELSIO_CHIP_VERSION(adapter_type)) {
 744	case CHELSIO_T4:
 745		sizev4 = sizeof(struct cpl_act_open_req);
 746		sizev6 = sizeof(struct cpl_act_open_req6);
 747		break;
 748	case CHELSIO_T5:
 749		sizev4 = sizeof(struct cpl_t5_act_open_req);
 750		sizev6 = sizeof(struct cpl_t5_act_open_req6);
 751		break;
 752	case CHELSIO_T6:
 753		sizev4 = sizeof(struct cpl_t6_act_open_req);
 754		sizev6 = sizeof(struct cpl_t6_act_open_req6);
 755		break;
 756	default:
 757		pr_err("T%d Chip is not supported\n",
 758		       CHELSIO_CHIP_VERSION(adapter_type));
 759		return -EINVAL;
 760	}
 761
 762	wrlen = (ep->com.remote_addr.ss_family == AF_INET) ?
 763			roundup(sizev4, 16) :
 764			roundup(sizev6, 16);
 765
 766	pr_debug("ep %p atid %u\n", ep, ep->atid);
 767
 768	skb = get_skb(NULL, wrlen, GFP_KERNEL);
 769	if (!skb) {
 770		pr_err("%s - failed to alloc skb\n", __func__);
 771		return -ENOMEM;
 772	}
 773	set_wr_txq(skb, CPL_PRIORITY_SETUP, ep->ctrlq_idx);
 774
 775	cxgb_best_mtu(ep->com.dev->rdev.lldi.mtus, ep->mtu, &mtu_idx,
 776		      enable_tcp_timestamps,
 777		      (ep->com.remote_addr.ss_family == AF_INET) ? 0 : 1);
 778	wscale = cxgb_compute_wscale(rcv_win);
 779
 780	/*
 781	 * Specify the largest window that will fit in opt0. The
 782	 * remainder will be specified in the rx_data_ack.
 783	 */
 784	win = ep->rcv_win >> 10;
 785	if (win > RCV_BUFSIZ_M)
 786		win = RCV_BUFSIZ_M;
 787
 788	opt0 = (nocong ? NO_CONG_F : 0) |
 789	       KEEP_ALIVE_F |
 790	       DELACK_F |
 791	       WND_SCALE_V(wscale) |
 792	       MSS_IDX_V(mtu_idx) |
 793	       L2T_IDX_V(ep->l2t->idx) |
 794	       TX_CHAN_V(ep->tx_chan) |
 795	       SMAC_SEL_V(ep->smac_idx) |
 796	       DSCP_V(ep->tos >> 2) |
 797	       ULP_MODE_V(ULP_MODE_TCPDDP) |
 798	       RCV_BUFSIZ_V(win);
 799	opt2 = RX_CHANNEL_V(0) |
 800	       CCTRL_ECN_V(enable_ecn) |
 801	       RSS_QUEUE_VALID_F | RSS_QUEUE_V(ep->rss_qid);
 802	if (enable_tcp_timestamps)
 803		opt2 |= TSTAMPS_EN_F;
 804	if (enable_tcp_sack)
 805		opt2 |= SACK_EN_F;
 806	if (wscale && enable_tcp_window_scaling)
 807		opt2 |= WND_SCALE_EN_F;
 808	if (CHELSIO_CHIP_VERSION(adapter_type) > CHELSIO_T4) {
 809		if (peer2peer)
 810			isn += 4;
 811
 812		opt2 |= T5_OPT_2_VALID_F;
 813		opt2 |= CONG_CNTRL_V(CONG_ALG_TAHOE);
 814		opt2 |= T5_ISS_F;
 815	}
 816
 817	params = cxgb4_select_ntuple(netdev, ep->l2t);
 818
 819	if (ep->com.remote_addr.ss_family == AF_INET6)
 820		cxgb4_clip_get(ep->com.dev->rdev.lldi.ports[0],
 821			       (const u32 *)&la6->sin6_addr.s6_addr, 1);
 822
 823	t4_set_arp_err_handler(skb, ep, act_open_req_arp_failure);
 824
 825	if (ep->com.remote_addr.ss_family == AF_INET) {
 826		switch (CHELSIO_CHIP_VERSION(adapter_type)) {
 827		case CHELSIO_T4:
 828			req = skb_put(skb, wrlen);
 829			INIT_TP_WR(req, 0);
 830			break;
 831		case CHELSIO_T5:
 832			t5req = skb_put(skb, wrlen);
 833			INIT_TP_WR(t5req, 0);
 834			req = (struct cpl_act_open_req *)t5req;
 835			break;
 836		case CHELSIO_T6:
 837			t6req = skb_put(skb, wrlen);
 838			INIT_TP_WR(t6req, 0);
 839			req = (struct cpl_act_open_req *)t6req;
 840			t5req = (struct cpl_t5_act_open_req *)t6req;
 841			break;
 842		default:
 843			pr_err("T%d Chip is not supported\n",
 844			       CHELSIO_CHIP_VERSION(adapter_type));
 845			ret = -EINVAL;
 846			goto clip_release;
 847		}
 848
 849		OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ACT_OPEN_REQ,
 850					((ep->rss_qid<<14) | ep->atid)));
 851		req->local_port = la->sin_port;
 852		req->peer_port = ra->sin_port;
 853		req->local_ip = la->sin_addr.s_addr;
 854		req->peer_ip = ra->sin_addr.s_addr;
 855		req->opt0 = cpu_to_be64(opt0);
 856
 857		if (is_t4(ep->com.dev->rdev.lldi.adapter_type)) {
 858			req->params = cpu_to_be32(params);
 859			req->opt2 = cpu_to_be32(opt2);
 860		} else {
 861			if (is_t5(ep->com.dev->rdev.lldi.adapter_type)) {
 862				t5req->params =
 863					  cpu_to_be64(FILTER_TUPLE_V(params));
 864				t5req->rsvd = cpu_to_be32(isn);
 865				pr_debug("snd_isn %u\n", t5req->rsvd);
 866				t5req->opt2 = cpu_to_be32(opt2);
 867			} else {
 868				t6req->params =
 869					  cpu_to_be64(FILTER_TUPLE_V(params));
 870				t6req->rsvd = cpu_to_be32(isn);
 871				pr_debug("snd_isn %u\n", t6req->rsvd);
 872				t6req->opt2 = cpu_to_be32(opt2);
 873			}
 874		}
 875	} else {
 876		switch (CHELSIO_CHIP_VERSION(adapter_type)) {
 877		case CHELSIO_T4:
 878			req6 = skb_put(skb, wrlen);
 879			INIT_TP_WR(req6, 0);
 880			break;
 881		case CHELSIO_T5:
 882			t5req6 = skb_put(skb, wrlen);
 883			INIT_TP_WR(t5req6, 0);
 884			req6 = (struct cpl_act_open_req6 *)t5req6;
 885			break;
 886		case CHELSIO_T6:
 887			t6req6 = skb_put(skb, wrlen);
 888			INIT_TP_WR(t6req6, 0);
 889			req6 = (struct cpl_act_open_req6 *)t6req6;
 890			t5req6 = (struct cpl_t5_act_open_req6 *)t6req6;
 891			break;
 892		default:
 893			pr_err("T%d Chip is not supported\n",
 894			       CHELSIO_CHIP_VERSION(adapter_type));
 895			ret = -EINVAL;
 896			goto clip_release;
 897		}
 898
 899		OPCODE_TID(req6) = cpu_to_be32(MK_OPCODE_TID(CPL_ACT_OPEN_REQ6,
 900					((ep->rss_qid<<14)|ep->atid)));
 901		req6->local_port = la6->sin6_port;
 902		req6->peer_port = ra6->sin6_port;
 903		req6->local_ip_hi = *((__be64 *)(la6->sin6_addr.s6_addr));
 904		req6->local_ip_lo = *((__be64 *)(la6->sin6_addr.s6_addr + 8));
 905		req6->peer_ip_hi = *((__be64 *)(ra6->sin6_addr.s6_addr));
 906		req6->peer_ip_lo = *((__be64 *)(ra6->sin6_addr.s6_addr + 8));
 907		req6->opt0 = cpu_to_be64(opt0);
 908
 909		if (is_t4(ep->com.dev->rdev.lldi.adapter_type)) {
 910			req6->params = cpu_to_be32(cxgb4_select_ntuple(netdev,
 911								      ep->l2t));
 912			req6->opt2 = cpu_to_be32(opt2);
 913		} else {
 914			if (is_t5(ep->com.dev->rdev.lldi.adapter_type)) {
 915				t5req6->params =
 916					    cpu_to_be64(FILTER_TUPLE_V(params));
 917				t5req6->rsvd = cpu_to_be32(isn);
 918				pr_debug("snd_isn %u\n", t5req6->rsvd);
 919				t5req6->opt2 = cpu_to_be32(opt2);
 920			} else {
 921				t6req6->params =
 922					    cpu_to_be64(FILTER_TUPLE_V(params));
 923				t6req6->rsvd = cpu_to_be32(isn);
 924				pr_debug("snd_isn %u\n", t6req6->rsvd);
 925				t6req6->opt2 = cpu_to_be32(opt2);
 926			}
 927
 928		}
 929	}
 930
 931	set_bit(ACT_OPEN_REQ, &ep->com.history);
 932	ret = c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t);
 933clip_release:
 934	if (ret && ep->com.remote_addr.ss_family == AF_INET6)
 935		cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0],
 936				   (const u32 *)&la6->sin6_addr.s6_addr, 1);
 937	return ret;
 938}
 939
 940static int send_mpa_req(struct c4iw_ep *ep, struct sk_buff *skb,
 941			u8 mpa_rev_to_use)
 942{
 943	int mpalen, wrlen, ret;
 944	struct fw_ofld_tx_data_wr *req;
 945	struct mpa_message *mpa;
 946	struct mpa_v2_conn_params mpa_v2_params;
 947
 948	pr_debug("ep %p tid %u pd_len %d\n",
 949		 ep, ep->hwtid, ep->plen);
 950
 951	mpalen = sizeof(*mpa) + ep->plen;
 952	if (mpa_rev_to_use == 2)
 953		mpalen += sizeof(struct mpa_v2_conn_params);
 954	wrlen = roundup(mpalen + sizeof(*req), 16);
 955	skb = get_skb(skb, wrlen, GFP_KERNEL);
 956	if (!skb) {
 957		connect_reply_upcall(ep, -ENOMEM);
 958		return -ENOMEM;
 959	}
 960	set_wr_txq(skb, CPL_PRIORITY_DATA, ep->txq_idx);
 961
 962	req = skb_put_zero(skb, wrlen);
 963	req->op_to_immdlen = cpu_to_be32(
 964		FW_WR_OP_V(FW_OFLD_TX_DATA_WR) |
 965		FW_WR_COMPL_F |
 966		FW_WR_IMMDLEN_V(mpalen));
 967	req->flowid_len16 = cpu_to_be32(
 968		FW_WR_FLOWID_V(ep->hwtid) |
 969		FW_WR_LEN16_V(wrlen >> 4));
 970	req->plen = cpu_to_be32(mpalen);
 971	req->tunnel_to_proxy = cpu_to_be32(
 972		FW_OFLD_TX_DATA_WR_FLUSH_F |
 973		FW_OFLD_TX_DATA_WR_SHOVE_F);
 974
 975	mpa = (struct mpa_message *)(req + 1);
 976	memcpy(mpa->key, MPA_KEY_REQ, sizeof(mpa->key));
 977
 978	mpa->flags = 0;
 979	if (crc_enabled)
 980		mpa->flags |= MPA_CRC;
 981	if (markers_enabled) {
 982		mpa->flags |= MPA_MARKERS;
 983		ep->mpa_attr.recv_marker_enabled = 1;
 984	} else {
 985		ep->mpa_attr.recv_marker_enabled = 0;
 986	}
 987	if (mpa_rev_to_use == 2)
 988		mpa->flags |= MPA_ENHANCED_RDMA_CONN;
 989
 990	mpa->private_data_size = htons(ep->plen);
 991	mpa->revision = mpa_rev_to_use;
 992	if (mpa_rev_to_use == 1) {
 993		ep->tried_with_mpa_v1 = 1;
 994		ep->retry_with_mpa_v1 = 0;
 995	}
 996
 997	if (mpa_rev_to_use == 2) {
 998		mpa->private_data_size =
 999			htons(ntohs(mpa->private_data_size) +
1000			      sizeof(struct mpa_v2_conn_params));
1001		pr_debug("initiator ird %u ord %u\n", ep->ird,
1002			 ep->ord);
1003		mpa_v2_params.ird = htons((u16)ep->ird);
1004		mpa_v2_params.ord = htons((u16)ep->ord);
1005
1006		if (peer2peer) {
1007			mpa_v2_params.ird |= htons(MPA_V2_PEER2PEER_MODEL);
1008			if (p2p_type == FW_RI_INIT_P2PTYPE_RDMA_WRITE)
1009				mpa_v2_params.ord |=
1010					htons(MPA_V2_RDMA_WRITE_RTR);
1011			else if (p2p_type == FW_RI_INIT_P2PTYPE_READ_REQ)
1012				mpa_v2_params.ord |=
1013					htons(MPA_V2_RDMA_READ_RTR);
1014		}
1015		memcpy(mpa->private_data, &mpa_v2_params,
1016		       sizeof(struct mpa_v2_conn_params));
1017
1018		if (ep->plen)
1019			memcpy(mpa->private_data +
1020			       sizeof(struct mpa_v2_conn_params),
1021			       ep->mpa_pkt + sizeof(*mpa), ep->plen);
1022	} else
1023		if (ep->plen)
1024			memcpy(mpa->private_data,
1025					ep->mpa_pkt + sizeof(*mpa), ep->plen);
1026
1027	/*
1028	 * Reference the mpa skb.  This ensures the data area
1029	 * will remain in memory until the hw acks the tx.
1030	 * Function fw4_ack() will deref it.
1031	 */
1032	skb_get(skb);
1033	t4_set_arp_err_handler(skb, NULL, arp_failure_discard);
1034	ep->mpa_skb = skb;
1035	ret = c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t);
1036	if (ret)
1037		return ret;
1038	start_ep_timer(ep);
1039	__state_set(&ep->com, MPA_REQ_SENT);
1040	ep->mpa_attr.initiator = 1;
1041	ep->snd_seq += mpalen;
1042	return ret;
1043}
1044
1045static int send_mpa_reject(struct c4iw_ep *ep, const void *pdata, u8 plen)
1046{
1047	int mpalen, wrlen;
1048	struct fw_ofld_tx_data_wr *req;
1049	struct mpa_message *mpa;
1050	struct sk_buff *skb;
1051	struct mpa_v2_conn_params mpa_v2_params;
1052
1053	pr_debug("ep %p tid %u pd_len %d\n",
1054		 ep, ep->hwtid, ep->plen);
1055
1056	mpalen = sizeof(*mpa) + plen;
1057	if (ep->mpa_attr.version == 2 && ep->mpa_attr.enhanced_rdma_conn)
1058		mpalen += sizeof(struct mpa_v2_conn_params);
1059	wrlen = roundup(mpalen + sizeof(*req), 16);
1060
1061	skb = get_skb(NULL, wrlen, GFP_KERNEL);
1062	if (!skb) {
1063		pr_err("%s - cannot alloc skb!\n", __func__);
1064		return -ENOMEM;
1065	}
1066	set_wr_txq(skb, CPL_PRIORITY_DATA, ep->txq_idx);
1067
1068	req = skb_put_zero(skb, wrlen);
1069	req->op_to_immdlen = cpu_to_be32(
1070		FW_WR_OP_V(FW_OFLD_TX_DATA_WR) |
1071		FW_WR_COMPL_F |
1072		FW_WR_IMMDLEN_V(mpalen));
1073	req->flowid_len16 = cpu_to_be32(
1074		FW_WR_FLOWID_V(ep->hwtid) |
1075		FW_WR_LEN16_V(wrlen >> 4));
1076	req->plen = cpu_to_be32(mpalen);
1077	req->tunnel_to_proxy = cpu_to_be32(
1078		FW_OFLD_TX_DATA_WR_FLUSH_F |
1079		FW_OFLD_TX_DATA_WR_SHOVE_F);
1080
1081	mpa = (struct mpa_message *)(req + 1);
1082	memset(mpa, 0, sizeof(*mpa));
1083	memcpy(mpa->key, MPA_KEY_REP, sizeof(mpa->key));
1084	mpa->flags = MPA_REJECT;
1085	mpa->revision = ep->mpa_attr.version;
1086	mpa->private_data_size = htons(plen);
1087
1088	if (ep->mpa_attr.version == 2 && ep->mpa_attr.enhanced_rdma_conn) {
1089		mpa->flags |= MPA_ENHANCED_RDMA_CONN;
1090		mpa->private_data_size =
1091			htons(ntohs(mpa->private_data_size) +
1092			      sizeof(struct mpa_v2_conn_params));
1093		mpa_v2_params.ird = htons(((u16)ep->ird) |
1094					  (peer2peer ? MPA_V2_PEER2PEER_MODEL :
1095					   0));
1096		mpa_v2_params.ord = htons(((u16)ep->ord) | (peer2peer ?
1097					  (p2p_type ==
1098					   FW_RI_INIT_P2PTYPE_RDMA_WRITE ?
1099					   MPA_V2_RDMA_WRITE_RTR : p2p_type ==
1100					   FW_RI_INIT_P2PTYPE_READ_REQ ?
1101					   MPA_V2_RDMA_READ_RTR : 0) : 0));
1102		memcpy(mpa->private_data, &mpa_v2_params,
1103		       sizeof(struct mpa_v2_conn_params));
1104
1105		if (ep->plen)
1106			memcpy(mpa->private_data +
1107			       sizeof(struct mpa_v2_conn_params), pdata, plen);
1108	} else
1109		if (plen)
1110			memcpy(mpa->private_data, pdata, plen);
1111
1112	/*
1113	 * Reference the mpa skb again.  This ensures the data area
1114	 * will remain in memory until the hw acks the tx.
1115	 * Function fw4_ack() will deref it.
1116	 */
1117	skb_get(skb);
1118	set_wr_txq(skb, CPL_PRIORITY_DATA, ep->txq_idx);
1119	t4_set_arp_err_handler(skb, NULL, mpa_start_arp_failure);
1120	ep->mpa_skb = skb;
1121	ep->snd_seq += mpalen;
1122	return c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t);
1123}
1124
1125static int send_mpa_reply(struct c4iw_ep *ep, const void *pdata, u8 plen)
1126{
1127	int mpalen, wrlen;
1128	struct fw_ofld_tx_data_wr *req;
1129	struct mpa_message *mpa;
1130	struct sk_buff *skb;
1131	struct mpa_v2_conn_params mpa_v2_params;
1132
1133	pr_debug("ep %p tid %u pd_len %d\n",
1134		 ep, ep->hwtid, ep->plen);
1135
1136	mpalen = sizeof(*mpa) + plen;
1137	if (ep->mpa_attr.version == 2 && ep->mpa_attr.enhanced_rdma_conn)
1138		mpalen += sizeof(struct mpa_v2_conn_params);
1139	wrlen = roundup(mpalen + sizeof(*req), 16);
1140
1141	skb = get_skb(NULL, wrlen, GFP_KERNEL);
1142	if (!skb) {
1143		pr_err("%s - cannot alloc skb!\n", __func__);
1144		return -ENOMEM;
1145	}
1146	set_wr_txq(skb, CPL_PRIORITY_DATA, ep->txq_idx);
1147
1148	req = skb_put_zero(skb, wrlen);
1149	req->op_to_immdlen = cpu_to_be32(
1150		FW_WR_OP_V(FW_OFLD_TX_DATA_WR) |
1151		FW_WR_COMPL_F |
1152		FW_WR_IMMDLEN_V(mpalen));
1153	req->flowid_len16 = cpu_to_be32(
1154		FW_WR_FLOWID_V(ep->hwtid) |
1155		FW_WR_LEN16_V(wrlen >> 4));
1156	req->plen = cpu_to_be32(mpalen);
1157	req->tunnel_to_proxy = cpu_to_be32(
1158		FW_OFLD_TX_DATA_WR_FLUSH_F |
1159		FW_OFLD_TX_DATA_WR_SHOVE_F);
1160
1161	mpa = (struct mpa_message *)(req + 1);
1162	memset(mpa, 0, sizeof(*mpa));
1163	memcpy(mpa->key, MPA_KEY_REP, sizeof(mpa->key));
1164	mpa->flags = 0;
1165	if (ep->mpa_attr.crc_enabled)
1166		mpa->flags |= MPA_CRC;
1167	if (ep->mpa_attr.recv_marker_enabled)
1168		mpa->flags |= MPA_MARKERS;
1169	mpa->revision = ep->mpa_attr.version;
1170	mpa->private_data_size = htons(plen);
1171
1172	if (ep->mpa_attr.version == 2 && ep->mpa_attr.enhanced_rdma_conn) {
1173		mpa->flags |= MPA_ENHANCED_RDMA_CONN;
1174		mpa->private_data_size =
1175			htons(ntohs(mpa->private_data_size) +
1176			      sizeof(struct mpa_v2_conn_params));
1177		mpa_v2_params.ird = htons((u16)ep->ird);
1178		mpa_v2_params.ord = htons((u16)ep->ord);
1179		if (peer2peer && (ep->mpa_attr.p2p_type !=
1180					FW_RI_INIT_P2PTYPE_DISABLED)) {
1181			mpa_v2_params.ird |= htons(MPA_V2_PEER2PEER_MODEL);
1182
1183			if (p2p_type == FW_RI_INIT_P2PTYPE_RDMA_WRITE)
1184				mpa_v2_params.ord |=
1185					htons(MPA_V2_RDMA_WRITE_RTR);
1186			else if (p2p_type == FW_RI_INIT_P2PTYPE_READ_REQ)
1187				mpa_v2_params.ord |=
1188					htons(MPA_V2_RDMA_READ_RTR);
1189		}
1190
1191		memcpy(mpa->private_data, &mpa_v2_params,
1192		       sizeof(struct mpa_v2_conn_params));
1193
1194		if (ep->plen)
1195			memcpy(mpa->private_data +
1196			       sizeof(struct mpa_v2_conn_params), pdata, plen);
1197	} else
1198		if (plen)
1199			memcpy(mpa->private_data, pdata, plen);
1200
1201	/*
1202	 * Reference the mpa skb.  This ensures the data area
1203	 * will remain in memory until the hw acks the tx.
1204	 * Function fw4_ack() will deref it.
1205	 */
1206	skb_get(skb);
1207	t4_set_arp_err_handler(skb, NULL, mpa_start_arp_failure);
1208	ep->mpa_skb = skb;
1209	__state_set(&ep->com, MPA_REP_SENT);
1210	ep->snd_seq += mpalen;
1211	return c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t);
1212}
1213
1214static int act_establish(struct c4iw_dev *dev, struct sk_buff *skb)
1215{
1216	struct c4iw_ep *ep;
1217	struct cpl_act_establish *req = cplhdr(skb);
1218	unsigned short tcp_opt = ntohs(req->tcp_opt);
1219	unsigned int tid = GET_TID(req);
1220	unsigned int atid = TID_TID_G(ntohl(req->tos_atid));
1221	struct tid_info *t = dev->rdev.lldi.tids;
1222	int ret;
1223
1224	ep = lookup_atid(t, atid);
1225	if (!ep)
1226		return -EINVAL;
1227
1228	pr_debug("ep %p tid %u snd_isn %u rcv_isn %u\n", ep, tid,
1229		 be32_to_cpu(req->snd_isn), be32_to_cpu(req->rcv_isn));
1230
1231	mutex_lock(&ep->com.mutex);
1232	dst_confirm(ep->dst);
1233
1234	/* setup the hwtid for this connection */
1235	ep->hwtid = tid;
1236	cxgb4_insert_tid(t, ep, tid, ep->com.local_addr.ss_family);
1237	insert_ep_tid(ep);
1238
1239	ep->snd_seq = be32_to_cpu(req->snd_isn);
1240	ep->rcv_seq = be32_to_cpu(req->rcv_isn);
1241	ep->snd_wscale = TCPOPT_SND_WSCALE_G(tcp_opt);
1242
1243	set_emss(ep, tcp_opt);
1244
1245	/* dealloc the atid */
1246	xa_erase_irq(&ep->com.dev->atids, atid);
1247	cxgb4_free_atid(t, atid);
1248	set_bit(ACT_ESTAB, &ep->com.history);
1249
1250	/* start MPA negotiation */
1251	ret = send_flowc(ep);
1252	if (ret)
1253		goto err;
1254	if (ep->retry_with_mpa_v1)
1255		ret = send_mpa_req(ep, skb, 1);
1256	else
1257		ret = send_mpa_req(ep, skb, mpa_rev);
1258	if (ret)
1259		goto err;
1260	mutex_unlock(&ep->com.mutex);
1261	return 0;
1262err:
1263	mutex_unlock(&ep->com.mutex);
1264	connect_reply_upcall(ep, -ENOMEM);
1265	c4iw_ep_disconnect(ep, 0, GFP_KERNEL);
1266	return 0;
1267}
1268
1269static void close_complete_upcall(struct c4iw_ep *ep, int status)
1270{
1271	struct iw_cm_event event;
1272
1273	pr_debug("ep %p tid %u\n", ep, ep->hwtid);
1274	memset(&event, 0, sizeof(event));
1275	event.event = IW_CM_EVENT_CLOSE;
1276	event.status = status;
1277	if (ep->com.cm_id) {
1278		pr_debug("close complete delivered ep %p cm_id %p tid %u\n",
1279			 ep, ep->com.cm_id, ep->hwtid);
1280		ep->com.cm_id->event_handler(ep->com.cm_id, &event);
1281		deref_cm_id(&ep->com);
1282		set_bit(CLOSE_UPCALL, &ep->com.history);
1283	}
1284}
1285
1286static void peer_close_upcall(struct c4iw_ep *ep)
1287{
1288	struct iw_cm_event event;
1289
1290	pr_debug("ep %p tid %u\n", ep, ep->hwtid);
1291	memset(&event, 0, sizeof(event));
1292	event.event = IW_CM_EVENT_DISCONNECT;
1293	if (ep->com.cm_id) {
1294		pr_debug("peer close delivered ep %p cm_id %p tid %u\n",
1295			 ep, ep->com.cm_id, ep->hwtid);
1296		ep->com.cm_id->event_handler(ep->com.cm_id, &event);
1297		set_bit(DISCONN_UPCALL, &ep->com.history);
1298	}
1299}
1300
1301static void peer_abort_upcall(struct c4iw_ep *ep)
1302{
1303	struct iw_cm_event event;
1304
1305	pr_debug("ep %p tid %u\n", ep, ep->hwtid);
1306	memset(&event, 0, sizeof(event));
1307	event.event = IW_CM_EVENT_CLOSE;
1308	event.status = -ECONNRESET;
1309	if (ep->com.cm_id) {
1310		pr_debug("abort delivered ep %p cm_id %p tid %u\n", ep,
1311			 ep->com.cm_id, ep->hwtid);
1312		ep->com.cm_id->event_handler(ep->com.cm_id, &event);
1313		deref_cm_id(&ep->com);
1314		set_bit(ABORT_UPCALL, &ep->com.history);
1315	}
1316}
1317
1318static void connect_reply_upcall(struct c4iw_ep *ep, int status)
1319{
1320	struct iw_cm_event event;
1321
1322	pr_debug("ep %p tid %u status %d\n",
1323		 ep, ep->hwtid, status);
1324	memset(&event, 0, sizeof(event));
1325	event.event = IW_CM_EVENT_CONNECT_REPLY;
1326	event.status = status;
1327	memcpy(&event.local_addr, &ep->com.local_addr,
1328	       sizeof(ep->com.local_addr));
1329	memcpy(&event.remote_addr, &ep->com.remote_addr,
1330	       sizeof(ep->com.remote_addr));
1331
1332	if ((status == 0) || (status == -ECONNREFUSED)) {
1333		if (!ep->tried_with_mpa_v1) {
1334			/* this means MPA_v2 is used */
1335			event.ord = ep->ird;
1336			event.ird = ep->ord;
1337			event.private_data_len = ep->plen -
1338				sizeof(struct mpa_v2_conn_params);
1339			event.private_data = ep->mpa_pkt +
1340				sizeof(struct mpa_message) +
1341				sizeof(struct mpa_v2_conn_params);
1342		} else {
1343			/* this means MPA_v1 is used */
1344			event.ord = cur_max_read_depth(ep->com.dev);
1345			event.ird = cur_max_read_depth(ep->com.dev);
1346			event.private_data_len = ep->plen;
1347			event.private_data = ep->mpa_pkt +
1348				sizeof(struct mpa_message);
1349		}
1350	}
1351
1352	pr_debug("ep %p tid %u status %d\n", ep,
1353		 ep->hwtid, status);
1354	set_bit(CONN_RPL_UPCALL, &ep->com.history);
1355	ep->com.cm_id->event_handler(ep->com.cm_id, &event);
1356
1357	if (status < 0)
1358		deref_cm_id(&ep->com);
1359}
1360
1361static int connect_request_upcall(struct c4iw_ep *ep)
1362{
1363	struct iw_cm_event event;
1364	int ret;
1365
1366	pr_debug("ep %p tid %u\n", ep, ep->hwtid);
1367	memset(&event, 0, sizeof(event));
1368	event.event = IW_CM_EVENT_CONNECT_REQUEST;
1369	memcpy(&event.local_addr, &ep->com.local_addr,
1370	       sizeof(ep->com.local_addr));
1371	memcpy(&event.remote_addr, &ep->com.remote_addr,
1372	       sizeof(ep->com.remote_addr));
1373	event.provider_data = ep;
1374	if (!ep->tried_with_mpa_v1) {
1375		/* this means MPA_v2 is used */
1376		event.ord = ep->ord;
1377		event.ird = ep->ird;
1378		event.private_data_len = ep->plen -
1379			sizeof(struct mpa_v2_conn_params);
1380		event.private_data = ep->mpa_pkt + sizeof(struct mpa_message) +
1381			sizeof(struct mpa_v2_conn_params);
1382	} else {
1383		/* this means MPA_v1 is used. Send max supported */
1384		event.ord = cur_max_read_depth(ep->com.dev);
1385		event.ird = cur_max_read_depth(ep->com.dev);
1386		event.private_data_len = ep->plen;
1387		event.private_data = ep->mpa_pkt + sizeof(struct mpa_message);
1388	}
1389	c4iw_get_ep(&ep->com);
1390	ret = ep->parent_ep->com.cm_id->event_handler(ep->parent_ep->com.cm_id,
1391						      &event);
1392	if (ret)
1393		c4iw_put_ep(&ep->com);
1394	set_bit(CONNREQ_UPCALL, &ep->com.history);
1395	c4iw_put_ep(&ep->parent_ep->com);
1396	return ret;
1397}
1398
1399static void established_upcall(struct c4iw_ep *ep)
1400{
1401	struct iw_cm_event event;
1402
1403	pr_debug("ep %p tid %u\n", ep, ep->hwtid);
1404	memset(&event, 0, sizeof(event));
1405	event.event = IW_CM_EVENT_ESTABLISHED;
1406	event.ird = ep->ord;
1407	event.ord = ep->ird;
1408	if (ep->com.cm_id) {
1409		pr_debug("ep %p tid %u\n", ep, ep->hwtid);
1410		ep->com.cm_id->event_handler(ep->com.cm_id, &event);
1411		set_bit(ESTAB_UPCALL, &ep->com.history);
1412	}
1413}
1414
1415static int update_rx_credits(struct c4iw_ep *ep, u32 credits)
1416{
1417	struct sk_buff *skb;
1418	u32 wrlen = roundup(sizeof(struct cpl_rx_data_ack), 16);
1419	u32 credit_dack;
1420
1421	pr_debug("ep %p tid %u credits %u\n",
1422		 ep, ep->hwtid, credits);
1423	skb = get_skb(NULL, wrlen, GFP_KERNEL);
1424	if (!skb) {
1425		pr_err("update_rx_credits - cannot alloc skb!\n");
1426		return 0;
1427	}
1428
1429	/*
1430	 * If we couldn't specify the entire rcv window at connection setup
1431	 * due to the limit in the number of bits in the RCV_BUFSIZ field,
1432	 * then add the overage in to the credits returned.
1433	 */
1434	if (ep->rcv_win > RCV_BUFSIZ_M * 1024)
1435		credits += ep->rcv_win - RCV_BUFSIZ_M * 1024;
1436
1437	credit_dack = credits | RX_FORCE_ACK_F | RX_DACK_CHANGE_F |
1438		      RX_DACK_MODE_V(dack_mode);
1439
1440	cxgb_mk_rx_data_ack(skb, wrlen, ep->hwtid, ep->ctrlq_idx,
1441			    credit_dack);
1442
1443	c4iw_ofld_send(&ep->com.dev->rdev, skb);
1444	return credits;
1445}
1446
1447#define RELAXED_IRD_NEGOTIATION 1
1448
1449/*
1450 * process_mpa_reply - process streaming mode MPA reply
1451 *
1452 * Returns:
1453 *
1454 * 0 upon success indicating a connect request was delivered to the ULP
1455 * or the mpa request is incomplete but valid so far.
1456 *
1457 * 1 if a failure requires the caller to close the connection.
1458 *
1459 * 2 if a failure requires the caller to abort the connection.
1460 */
1461static int process_mpa_reply(struct c4iw_ep *ep, struct sk_buff *skb)
1462{
1463	struct mpa_message *mpa;
1464	struct mpa_v2_conn_params *mpa_v2_params;
1465	u16 plen;
1466	u16 resp_ird, resp_ord;
1467	u8 rtr_mismatch = 0, insuff_ird = 0;
1468	struct c4iw_qp_attributes attrs;
1469	enum c4iw_qp_attr_mask mask;
1470	int err;
1471	int disconnect = 0;
1472
1473	pr_debug("ep %p tid %u\n", ep, ep->hwtid);
1474
1475	/*
1476	 * If we get more than the supported amount of private data
1477	 * then we must fail this connection.
1478	 */
1479	if (ep->mpa_pkt_len + skb->len > sizeof(ep->mpa_pkt)) {
1480		err = -EINVAL;
1481		goto err_stop_timer;
1482	}
1483
1484	/*
1485	 * copy the new data into our accumulation buffer.
1486	 */
1487	skb_copy_from_linear_data(skb, &(ep->mpa_pkt[ep->mpa_pkt_len]),
1488				  skb->len);
1489	ep->mpa_pkt_len += skb->len;
1490
1491	/*
1492	 * if we don't even have the mpa message, then bail.
1493	 */
1494	if (ep->mpa_pkt_len < sizeof(*mpa))
1495		return 0;
1496	mpa = (struct mpa_message *) ep->mpa_pkt;
1497
1498	/* Validate MPA header. */
1499	if (mpa->revision > mpa_rev) {
1500		pr_err("%s MPA version mismatch. Local = %d, Received = %d\n",
1501		       __func__, mpa_rev, mpa->revision);
1502		err = -EPROTO;
1503		goto err_stop_timer;
1504	}
1505	if (memcmp(mpa->key, MPA_KEY_REP, sizeof(mpa->key))) {
1506		err = -EPROTO;
1507		goto err_stop_timer;
1508	}
1509
1510	plen = ntohs(mpa->private_data_size);
1511
1512	/*
1513	 * Fail if there's too much private data.
1514	 */
1515	if (plen > MPA_MAX_PRIVATE_DATA) {
1516		err = -EPROTO;
1517		goto err_stop_timer;
1518	}
1519
1520	/*
1521	 * If plen does not account for pkt size
1522	 */
1523	if (ep->mpa_pkt_len > (sizeof(*mpa) + plen)) {
1524		err = -EPROTO;
1525		goto err_stop_timer;
1526	}
1527
1528	ep->plen = (u8) plen;
1529
1530	/*
1531	 * If we don't have all the pdata yet, then bail.
1532	 * We'll continue process when more data arrives.
1533	 */
1534	if (ep->mpa_pkt_len < (sizeof(*mpa) + plen))
1535		return 0;
1536
1537	if (mpa->flags & MPA_REJECT) {
1538		err = -ECONNREFUSED;
1539		goto err_stop_timer;
1540	}
1541
1542	/*
1543	 * Stop mpa timer.  If it expired, then
1544	 * we ignore the MPA reply.  process_timeout()
1545	 * will abort the connection.
1546	 */
1547	if (stop_ep_timer(ep))
1548		return 0;
1549
1550	/*
1551	 * If we get here we have accumulated the entire mpa
1552	 * start reply message including private data. And
1553	 * the MPA header is valid.
1554	 */
1555	__state_set(&ep->com, FPDU_MODE);
1556	ep->mpa_attr.crc_enabled = (mpa->flags & MPA_CRC) | crc_enabled ? 1 : 0;
1557	ep->mpa_attr.xmit_marker_enabled = mpa->flags & MPA_MARKERS ? 1 : 0;
1558	ep->mpa_attr.version = mpa->revision;
1559	ep->mpa_attr.p2p_type = FW_RI_INIT_P2PTYPE_DISABLED;
1560
1561	if (mpa->revision == 2) {
1562		ep->mpa_attr.enhanced_rdma_conn =
1563			mpa->flags & MPA_ENHANCED_RDMA_CONN ? 1 : 0;
1564		if (ep->mpa_attr.enhanced_rdma_conn) {
1565			mpa_v2_params = (struct mpa_v2_conn_params *)
1566				(ep->mpa_pkt + sizeof(*mpa));
1567			resp_ird = ntohs(mpa_v2_params->ird) &
1568				MPA_V2_IRD_ORD_MASK;
1569			resp_ord = ntohs(mpa_v2_params->ord) &
1570				MPA_V2_IRD_ORD_MASK;
1571			pr_debug("responder ird %u ord %u ep ird %u ord %u\n",
1572				 resp_ird, resp_ord, ep->ird, ep->ord);
1573
1574			/*
1575			 * This is a double-check. Ideally, below checks are
1576			 * not required since ird/ord stuff has been taken
1577			 * care of in c4iw_accept_cr
1578			 */
1579			if (ep->ird < resp_ord) {
1580				if (RELAXED_IRD_NEGOTIATION && resp_ord <=
1581				    ep->com.dev->rdev.lldi.max_ordird_qp)
1582					ep->ird = resp_ord;
1583				else
1584					insuff_ird = 1;
1585			} else if (ep->ird > resp_ord) {
1586				ep->ird = resp_ord;
1587			}
1588			if (ep->ord > resp_ird) {
1589				if (RELAXED_IRD_NEGOTIATION)
1590					ep->ord = resp_ird;
1591				else
1592					insuff_ird = 1;
1593			}
1594			if (insuff_ird) {
1595				err = -ENOMEM;
1596				ep->ird = resp_ord;
1597				ep->ord = resp_ird;
1598			}
1599
1600			if (ntohs(mpa_v2_params->ird) &
1601					MPA_V2_PEER2PEER_MODEL) {
1602				if (ntohs(mpa_v2_params->ord) &
1603						MPA_V2_RDMA_WRITE_RTR)
1604					ep->mpa_attr.p2p_type =
1605						FW_RI_INIT_P2PTYPE_RDMA_WRITE;
1606				else if (ntohs(mpa_v2_params->ord) &
1607						MPA_V2_RDMA_READ_RTR)
1608					ep->mpa_attr.p2p_type =
1609						FW_RI_INIT_P2PTYPE_READ_REQ;
1610			}
1611		}
1612	} else if (mpa->revision == 1)
1613		if (peer2peer)
1614			ep->mpa_attr.p2p_type = p2p_type;
1615
1616	pr_debug("crc_enabled=%d, recv_marker_enabled=%d, xmit_marker_enabled=%d, version=%d p2p_type=%d local-p2p_type = %d\n",
1617		 ep->mpa_attr.crc_enabled,
1618		 ep->mpa_attr.recv_marker_enabled,
1619		 ep->mpa_attr.xmit_marker_enabled, ep->mpa_attr.version,
1620		 ep->mpa_attr.p2p_type, p2p_type);
1621
1622	/*
1623	 * If responder's RTR does not match with that of initiator, assign
1624	 * FW_RI_INIT_P2PTYPE_DISABLED in mpa attributes so that RTR is not
1625	 * generated when moving QP to RTS state.
1626	 * A TERM message will be sent after QP has moved to RTS state
1627	 */
1628	if ((ep->mpa_attr.version == 2) && peer2peer &&
1629			(ep->mpa_attr.p2p_type != p2p_type)) {
1630		ep->mpa_attr.p2p_type = FW_RI_INIT_P2PTYPE_DISABLED;
1631		rtr_mismatch = 1;
1632	}
1633
1634	attrs.mpa_attr = ep->mpa_attr;
1635	attrs.max_ird = ep->ird;
1636	attrs.max_ord = ep->ord;
1637	attrs.llp_stream_handle = ep;
1638	attrs.next_state = C4IW_QP_STATE_RTS;
1639
1640	mask = C4IW_QP_ATTR_NEXT_STATE |
1641	    C4IW_QP_ATTR_LLP_STREAM_HANDLE | C4IW_QP_ATTR_MPA_ATTR |
1642	    C4IW_QP_ATTR_MAX_IRD | C4IW_QP_ATTR_MAX_ORD;
1643
1644	/* bind QP and TID with INIT_WR */
1645	err = c4iw_modify_qp(ep->com.qp->rhp,
1646			     ep->com.qp, mask, &attrs, 1);
1647	if (err)
1648		goto err;
1649
1650	/*
1651	 * If responder's RTR requirement did not match with what initiator
1652	 * supports, generate TERM message
1653	 */
1654	if (rtr_mismatch) {
1655		pr_err("%s: RTR mismatch, sending TERM\n", __func__);
1656		attrs.layer_etype = LAYER_MPA | DDP_LLP;
1657		attrs.ecode = MPA_NOMATCH_RTR;
1658		attrs.next_state = C4IW_QP_STATE_TERMINATE;
1659		attrs.send_term = 1;
1660		err = c4iw_modify_qp(ep->com.qp->rhp, ep->com.qp,
1661				C4IW_QP_ATTR_NEXT_STATE, &attrs, 1);
1662		err = -ENOMEM;
1663		disconnect = 1;
1664		goto out;
1665	}
1666
1667	/*
1668	 * Generate TERM if initiator IRD is not sufficient for responder
1669	 * provided ORD. Currently, we do the same behaviour even when
1670	 * responder provided IRD is also not sufficient as regards to
1671	 * initiator ORD.
1672	 */
1673	if (insuff_ird) {
1674		pr_err("%s: Insufficient IRD, sending TERM\n", __func__);
1675		attrs.layer_etype = LAYER_MPA | DDP_LLP;
1676		attrs.ecode = MPA_INSUFF_IRD;
1677		attrs.next_state = C4IW_QP_STATE_TERMINATE;
1678		attrs.send_term = 1;
1679		err = c4iw_modify_qp(ep->com.qp->rhp, ep->com.qp,
1680				C4IW_QP_ATTR_NEXT_STATE, &attrs, 1);
1681		err = -ENOMEM;
1682		disconnect = 1;
1683		goto out;
1684	}
1685	goto out;
1686err_stop_timer:
1687	stop_ep_timer(ep);
1688err:
1689	disconnect = 2;
1690out:
1691	connect_reply_upcall(ep, err);
1692	return disconnect;
1693}
1694
1695/*
1696 * process_mpa_request - process streaming mode MPA request
1697 *
1698 * Returns:
1699 *
1700 * 0 upon success indicating a connect request was delivered to the ULP
1701 * or the mpa request is incomplete but valid so far.
1702 *
1703 * 1 if a failure requires the caller to close the connection.
1704 *
1705 * 2 if a failure requires the caller to abort the connection.
1706 */
1707static int process_mpa_request(struct c4iw_ep *ep, struct sk_buff *skb)
1708{
1709	struct mpa_message *mpa;
1710	struct mpa_v2_conn_params *mpa_v2_params;
1711	u16 plen;
1712
1713	pr_debug("ep %p tid %u\n", ep, ep->hwtid);
1714
1715	/*
1716	 * If we get more than the supported amount of private data
1717	 * then we must fail this connection.
1718	 */
1719	if (ep->mpa_pkt_len + skb->len > sizeof(ep->mpa_pkt))
1720		goto err_stop_timer;
1721
1722	pr_debug("enter (%s line %u)\n", __FILE__, __LINE__);
1723
1724	/*
1725	 * Copy the new data into our accumulation buffer.
1726	 */
1727	skb_copy_from_linear_data(skb, &(ep->mpa_pkt[ep->mpa_pkt_len]),
1728				  skb->len);
1729	ep->mpa_pkt_len += skb->len;
1730
1731	/*
1732	 * If we don't even have the mpa message, then bail.
1733	 * We'll continue process when more data arrives.
1734	 */
1735	if (ep->mpa_pkt_len < sizeof(*mpa))
1736		return 0;
1737
1738	pr_debug("enter (%s line %u)\n", __FILE__, __LINE__);
1739	mpa = (struct mpa_message *) ep->mpa_pkt;
1740
1741	/*
1742	 * Validate MPA Header.
1743	 */
1744	if (mpa->revision > mpa_rev) {
1745		pr_err("%s MPA version mismatch. Local = %d, Received = %d\n",
1746		       __func__, mpa_rev, mpa->revision);
1747		goto err_stop_timer;
1748	}
1749
1750	if (memcmp(mpa->key, MPA_KEY_REQ, sizeof(mpa->key)))
1751		goto err_stop_timer;
1752
1753	plen = ntohs(mpa->private_data_size);
1754
1755	/*
1756	 * Fail if there's too much private data.
1757	 */
1758	if (plen > MPA_MAX_PRIVATE_DATA)
1759		goto err_stop_timer;
1760
1761	/*
1762	 * If plen does not account for pkt size
1763	 */
1764	if (ep->mpa_pkt_len > (sizeof(*mpa) + plen))
1765		goto err_stop_timer;
1766	ep->plen = (u8) plen;
1767
1768	/*
1769	 * If we don't have all the pdata yet, then bail.
1770	 */
1771	if (ep->mpa_pkt_len < (sizeof(*mpa) + plen))
1772		return 0;
1773
1774	/*
1775	 * If we get here we have accumulated the entire mpa
1776	 * start reply message including private data.
1777	 */
1778	ep->mpa_attr.initiator = 0;
1779	ep->mpa_attr.crc_enabled = (mpa->flags & MPA_CRC) | crc_enabled ? 1 : 0;
1780	ep->mpa_attr.recv_marker_enabled = markers_enabled;
1781	ep->mpa_attr.xmit_marker_enabled = mpa->flags & MPA_MARKERS ? 1 : 0;
1782	ep->mpa_attr.version = mpa->revision;
1783	if (mpa->revision == 1)
1784		ep->tried_with_mpa_v1 = 1;
1785	ep->mpa_attr.p2p_type = FW_RI_INIT_P2PTYPE_DISABLED;
1786
1787	if (mpa->revision == 2) {
1788		ep->mpa_attr.enhanced_rdma_conn =
1789			mpa->flags & MPA_ENHANCED_RDMA_CONN ? 1 : 0;
1790		if (ep->mpa_attr.enhanced_rdma_conn) {
1791			mpa_v2_params = (struct mpa_v2_conn_params *)
1792				(ep->mpa_pkt + sizeof(*mpa));
1793			ep->ird = ntohs(mpa_v2_params->ird) &
1794				MPA_V2_IRD_ORD_MASK;
1795			ep->ird = min_t(u32, ep->ird,
1796					cur_max_read_depth(ep->com.dev));
1797			ep->ord = ntohs(mpa_v2_params->ord) &
1798				MPA_V2_IRD_ORD_MASK;
1799			ep->ord = min_t(u32, ep->ord,
1800					cur_max_read_depth(ep->com.dev));
1801			pr_debug("initiator ird %u ord %u\n",
1802				 ep->ird, ep->ord);
1803			if (ntohs(mpa_v2_params->ird) & MPA_V2_PEER2PEER_MODEL)
1804				if (peer2peer) {
1805					if (ntohs(mpa_v2_params->ord) &
1806							MPA_V2_RDMA_WRITE_RTR)
1807						ep->mpa_attr.p2p_type =
1808						FW_RI_INIT_P2PTYPE_RDMA_WRITE;
1809					else if (ntohs(mpa_v2_params->ord) &
1810							MPA_V2_RDMA_READ_RTR)
1811						ep->mpa_attr.p2p_type =
1812						FW_RI_INIT_P2PTYPE_READ_REQ;
1813				}
1814		}
1815	} else if (mpa->revision == 1)
1816		if (peer2peer)
1817			ep->mpa_attr.p2p_type = p2p_type;
1818
1819	pr_debug("crc_enabled=%d, recv_marker_enabled=%d, xmit_marker_enabled=%d, version=%d p2p_type=%d\n",
1820		 ep->mpa_attr.crc_enabled, ep->mpa_attr.recv_marker_enabled,
1821		 ep->mpa_attr.xmit_marker_enabled, ep->mpa_attr.version,
1822		 ep->mpa_attr.p2p_type);
1823
1824	__state_set(&ep->com, MPA_REQ_RCVD);
1825
1826	/* drive upcall */
1827	mutex_lock_nested(&ep->parent_ep->com.mutex, SINGLE_DEPTH_NESTING);
1828	if (ep->parent_ep->com.state != DEAD) {
1829		if (connect_request_upcall(ep))
1830			goto err_unlock_parent;
1831	} else {
1832		goto err_unlock_parent;
1833	}
1834	mutex_unlock(&ep->parent_ep->com.mutex);
1835	return 0;
1836
1837err_unlock_parent:
1838	mutex_unlock(&ep->parent_ep->com.mutex);
1839	goto err_out;
1840err_stop_timer:
1841	(void)stop_ep_timer(ep);
1842err_out:
1843	return 2;
1844}
1845
1846static int rx_data(struct c4iw_dev *dev, struct sk_buff *skb)
1847{
1848	struct c4iw_ep *ep;
1849	struct cpl_rx_data *hdr = cplhdr(skb);
1850	unsigned int dlen = ntohs(hdr->len);
1851	unsigned int tid = GET_TID(hdr);
1852	__u8 status = hdr->status;
1853	int disconnect = 0;
1854
1855	ep = get_ep_from_tid(dev, tid);
1856	if (!ep)
1857		return 0;
1858	pr_debug("ep %p tid %u dlen %u\n", ep, ep->hwtid, dlen);
1859	skb_pull(skb, sizeof(*hdr));
1860	skb_trim(skb, dlen);
1861	mutex_lock(&ep->com.mutex);
1862
1863	switch (ep->com.state) {
1864	case MPA_REQ_SENT:
1865		update_rx_credits(ep, dlen);
1866		ep->rcv_seq += dlen;
1867		disconnect = process_mpa_reply(ep, skb);
1868		break;
1869	case MPA_REQ_WAIT:
1870		update_rx_credits(ep, dlen);
1871		ep->rcv_seq += dlen;
1872		disconnect = process_mpa_request(ep, skb);
1873		break;
1874	case FPDU_MODE: {
1875		struct c4iw_qp_attributes attrs;
1876
1877		update_rx_credits(ep, dlen);
1878		if (status)
1879			pr_err("%s Unexpected streaming data." \
1880			       " qpid %u ep %p state %d tid %u status %d\n",
1881			       __func__, ep->com.qp->wq.sq.qid, ep,
1882			       ep->com.state, ep->hwtid, status);
1883		attrs.next_state = C4IW_QP_STATE_TERMINATE;
1884		c4iw_modify_qp(ep->com.qp->rhp, ep->com.qp,
1885			       C4IW_QP_ATTR_NEXT_STATE, &attrs, 1);
1886		disconnect = 1;
1887		break;
1888	}
1889	default:
1890		break;
1891	}
1892	mutex_unlock(&ep->com.mutex);
1893	if (disconnect)
1894		c4iw_ep_disconnect(ep, disconnect == 2, GFP_KERNEL);
1895	c4iw_put_ep(&ep->com);
1896	return 0;
1897}
1898
1899static void complete_cached_srq_buffers(struct c4iw_ep *ep, u32 srqidx)
1900{
1901	enum chip_type adapter_type;
1902
1903	adapter_type = ep->com.dev->rdev.lldi.adapter_type;
1904
1905	/*
1906	 * If this TCB had a srq buffer cached, then we must complete
1907	 * it. For user mode, that means saving the srqidx in the
1908	 * user/kernel status page for this qp.  For kernel mode, just
1909	 * synthesize the CQE now.
1910	 */
1911	if (CHELSIO_CHIP_VERSION(adapter_type) > CHELSIO_T5 && srqidx) {
1912		if (ep->com.qp->ibqp.uobject)
1913			t4_set_wq_in_error(&ep->com.qp->wq, srqidx);
1914		else
1915			c4iw_flush_srqidx(ep->com.qp, srqidx);
1916	}
1917}
1918
1919static int abort_rpl(struct c4iw_dev *dev, struct sk_buff *skb)
1920{
1921	u32 srqidx;
1922	struct c4iw_ep *ep;
1923	struct cpl_abort_rpl_rss6 *rpl = cplhdr(skb);
1924	int release = 0;
1925	unsigned int tid = GET_TID(rpl);
1926
1927	ep = get_ep_from_tid(dev, tid);
1928	if (!ep) {
1929		pr_warn("Abort rpl to freed endpoint\n");
1930		return 0;
1931	}
1932
1933	if (ep->com.qp && ep->com.qp->srq) {
1934		srqidx = ABORT_RSS_SRQIDX_G(be32_to_cpu(rpl->srqidx_status));
1935		complete_cached_srq_buffers(ep, srqidx ? srqidx : ep->srqe_idx);
1936	}
1937
1938	pr_debug("ep %p tid %u\n", ep, ep->hwtid);
1939	mutex_lock(&ep->com.mutex);
1940	switch (ep->com.state) {
1941	case ABORTING:
1942		c4iw_wake_up_noref(ep->com.wr_waitp, -ECONNRESET);
1943		__state_set(&ep->com, DEAD);
1944		release = 1;
1945		break;
1946	default:
1947		pr_err("%s ep %p state %d\n", __func__, ep, ep->com.state);
1948		break;
1949	}
1950	mutex_unlock(&ep->com.mutex);
1951
1952	if (release) {
1953		close_complete_upcall(ep, -ECONNRESET);
1954		release_ep_resources(ep);
1955	}
1956	c4iw_put_ep(&ep->com);
1957	return 0;
1958}
1959
1960static int send_fw_act_open_req(struct c4iw_ep *ep, unsigned int atid)
1961{
1962	struct sk_buff *skb;
1963	struct fw_ofld_connection_wr *req;
1964	unsigned int mtu_idx;
1965	u32 wscale;
1966	struct sockaddr_in *sin;
1967	int win;
1968
1969	skb = get_skb(NULL, sizeof(*req), GFP_KERNEL);
1970	if (!skb)
1971		return -ENOMEM;
1972
1973	req = __skb_put_zero(skb, sizeof(*req));
1974	req->op_compl = htonl(WR_OP_V(FW_OFLD_CONNECTION_WR));
1975	req->len16_pkd = htonl(FW_WR_LEN16_V(DIV_ROUND_UP(sizeof(*req), 16)));
1976	req->le.filter = cpu_to_be32(cxgb4_select_ntuple(
1977				     ep->com.dev->rdev.lldi.ports[0],
1978				     ep->l2t));
1979	sin = (struct sockaddr_in *)&ep->com.local_addr;
1980	req->le.lport = sin->sin_port;
1981	req->le.u.ipv4.lip = sin->sin_addr.s_addr;
1982	sin = (struct sockaddr_in *)&ep->com.remote_addr;
1983	req->le.pport = sin->sin_port;
1984	req->le.u.ipv4.pip = sin->sin_addr.s_addr;
1985	req->tcb.t_state_to_astid =
1986			htonl(FW_OFLD_CONNECTION_WR_T_STATE_V(TCP_SYN_SENT) |
1987			FW_OFLD_CONNECTION_WR_ASTID_V(atid));
1988	req->tcb.cplrxdataack_cplpassacceptrpl =
1989			htons(FW_OFLD_CONNECTION_WR_CPLRXDATAACK_F);
1990	req->tcb.tx_max = (__force __be32) jiffies;
1991	req->tcb.rcv_adv = htons(1);
1992	cxgb_best_mtu(ep->com.dev->rdev.lldi.mtus, ep->mtu, &mtu_idx,
1993		      enable_tcp_timestamps,
1994		      (ep->com.remote_addr.ss_family == AF_INET) ? 0 : 1);
1995	wscale = cxgb_compute_wscale(rcv_win);
1996
1997	/*
1998	 * Specify the largest window that will fit in opt0. The
1999	 * remainder will be specified in the rx_data_ack.
2000	 */
2001	win = ep->rcv_win >> 10;
2002	if (win > RCV_BUFSIZ_M)
2003		win = RCV_BUFSIZ_M;
2004
2005	req->tcb.opt0 = (__force __be64) (TCAM_BYPASS_F |
2006		(nocong ? NO_CONG_F : 0) |
2007		KEEP_ALIVE_F |
2008		DELACK_F |
2009		WND_SCALE_V(wscale) |
2010		MSS_IDX_V(mtu_idx) |
2011		L2T_IDX_V(ep->l2t->idx) |
2012		TX_CHAN_V(ep->tx_chan) |
2013		SMAC_SEL_V(ep->smac_idx) |
2014		DSCP_V(ep->tos >> 2) |
2015		ULP_MODE_V(ULP_MODE_TCPDDP) |
2016		RCV_BUFSIZ_V(win));
2017	req->tcb.opt2 = (__force __be32) (PACE_V(1) |
2018		TX_QUEUE_V(ep->com.dev->rdev.lldi.tx_modq[ep->tx_chan]) |
2019		RX_CHANNEL_V(0) |
2020		CCTRL_ECN_V(enable_ecn) |
2021		RSS_QUEUE_VALID_F | RSS_QUEUE_V(ep->rss_qid));
2022	if (enable_tcp_timestamps)
2023		req->tcb.opt2 |= (__force __be32)TSTAMPS_EN_F;
2024	if (enable_tcp_sack)
2025		req->tcb.opt2 |= (__force __be32)SACK_EN_F;
2026	if (wscale && enable_tcp_window_scaling)
2027		req->tcb.opt2 |= (__force __be32)WND_SCALE_EN_F;
2028	req->tcb.opt0 = cpu_to_be64((__force u64)req->tcb.opt0);
2029	req->tcb.opt2 = cpu_to_be32((__force u32)req->tcb.opt2);
2030	set_wr_txq(skb, CPL_PRIORITY_CONTROL, ep->ctrlq_idx);
2031	set_bit(ACT_OFLD_CONN, &ep->com.history);
2032	return c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t);
2033}
2034
2035/*
2036 * Some of the error codes above implicitly indicate that there is no TID
2037 * allocated with the result of an ACT_OPEN.  We use this predicate to make
2038 * that explicit.
2039 */
2040static inline int act_open_has_tid(int status)
2041{
2042	return (status != CPL_ERR_TCAM_PARITY &&
2043		status != CPL_ERR_TCAM_MISS &&
2044		status != CPL_ERR_TCAM_FULL &&
2045		status != CPL_ERR_CONN_EXIST_SYNRECV &&
2046		status != CPL_ERR_CONN_EXIST);
2047}
2048
2049static char *neg_adv_str(unsigned int status)
2050{
2051	switch (status) {
2052	case CPL_ERR_RTX_NEG_ADVICE:
2053		return "Retransmit timeout";
2054	case CPL_ERR_PERSIST_NEG_ADVICE:
2055		return "Persist timeout";
2056	case CPL_ERR_KEEPALV_NEG_ADVICE:
2057		return "Keepalive timeout";
2058	default:
2059		return "Unknown";
2060	}
2061}
2062
2063static void set_tcp_window(struct c4iw_ep *ep, struct port_info *pi)
2064{
2065	ep->snd_win = snd_win;
2066	ep->rcv_win = rcv_win;
2067	pr_debug("snd_win %d rcv_win %d\n",
2068		 ep->snd_win, ep->rcv_win);
2069}
2070
2071#define ACT_OPEN_RETRY_COUNT 2
2072
2073static int import_ep(struct c4iw_ep *ep, int iptype, __u8 *peer_ip,
2074		     struct dst_entry *dst, struct c4iw_dev *cdev,
2075		     bool clear_mpa_v1, enum chip_type adapter_type, u8 tos)
2076{
2077	struct neighbour *n;
2078	int err, step;
2079	struct net_device *pdev;
2080
2081	n = dst_neigh_lookup(dst, peer_ip);
2082	if (!n)
2083		return -ENODEV;
2084
2085	rcu_read_lock();
2086	err = -ENOMEM;
2087	if (n->dev->flags & IFF_LOOPBACK) {
2088		if (iptype == 4)
2089			pdev = __ip_dev_find(&init_net, *(__be32 *)peer_ip, false);
2090		else if (IS_ENABLED(CONFIG_IPV6))
2091			for_each_netdev(&init_net, pdev) {
2092				if (ipv6_chk_addr(&init_net,
2093						  (struct in6_addr *)peer_ip,
2094						  pdev, 1))
2095					break;
2096			}
2097		else
2098			pdev = NULL;
2099
2100		if (!pdev) {
2101			err = -ENODEV;
2102			goto out;
2103		}
2104		if (is_vlan_dev(pdev))
2105			pdev = vlan_dev_real_dev(pdev);
2106		ep->l2t = cxgb4_l2t_get(cdev->rdev.lldi.l2t,
2107					n, pdev, rt_tos2priority(tos));
2108		if (!ep->l2t)
2109			goto out;
2110		ep->mtu = pdev->mtu;
2111		ep->tx_chan = cxgb4_port_chan(pdev);
2112		ep->smac_idx = ((struct port_info *)netdev_priv(pdev))->smt_idx;
2113		step = cdev->rdev.lldi.ntxq /
2114			cdev->rdev.lldi.nchan;
2115		ep->txq_idx = cxgb4_port_idx(pdev) * step;
2116		step = cdev->rdev.lldi.nrxq /
2117			cdev->rdev.lldi.nchan;
2118		ep->ctrlq_idx = cxgb4_port_idx(pdev);
2119		ep->rss_qid = cdev->rdev.lldi.rxq_ids[
2120			cxgb4_port_idx(pdev) * step];
2121		set_tcp_window(ep, (struct port_info *)netdev_priv(pdev));
2122	} else {
2123		pdev = get_real_dev(n->dev);
2124		ep->l2t = cxgb4_l2t_get(cdev->rdev.lldi.l2t,
2125					n, pdev, rt_tos2priority(tos));
2126		if (!ep->l2t)
2127			goto out;
2128		ep->mtu = dst_mtu(dst);
2129		ep->tx_chan = cxgb4_port_chan(pdev);
2130		ep->smac_idx = ((struct port_info *)netdev_priv(pdev))->smt_idx;
2131		step = cdev->rdev.lldi.ntxq /
2132			cdev->rdev.lldi.nchan;
2133		ep->txq_idx = cxgb4_port_idx(pdev) * step;
2134		ep->ctrlq_idx = cxgb4_port_idx(pdev);
2135		step = cdev->rdev.lldi.nrxq /
2136			cdev->rdev.lldi.nchan;
2137		ep->rss_qid = cdev->rdev.lldi.rxq_ids[
2138			cxgb4_port_idx(pdev) * step];
2139		set_tcp_window(ep, (struct port_info *)netdev_priv(pdev));
2140
2141		if (clear_mpa_v1) {
2142			ep->retry_with_mpa_v1 = 0;
2143			ep->tried_with_mpa_v1 = 0;
2144		}
2145	}
2146	err = 0;
2147out:
2148	rcu_read_unlock();
2149
2150	neigh_release(n);
2151
2152	return err;
2153}
2154
2155static int c4iw_reconnect(struct c4iw_ep *ep)
2156{
2157	int err = 0;
2158	int size = 0;
2159	struct sockaddr_in *laddr = (struct sockaddr_in *)
2160				    &ep->com.cm_id->m_local_addr;
2161	struct sockaddr_in *raddr = (struct sockaddr_in *)
2162				    &ep->com.cm_id->m_remote_addr;
2163	struct sockaddr_in6 *laddr6 = (struct sockaddr_in6 *)
2164				      &ep->com.cm_id->m_local_addr;
2165	struct sockaddr_in6 *raddr6 = (struct sockaddr_in6 *)
2166				      &ep->com.cm_id->m_remote_addr;
2167	int iptype;
2168	__u8 *ra;
2169
2170	pr_debug("qp %p cm_id %p\n", ep->com.qp, ep->com.cm_id);
2171	c4iw_init_wr_wait(ep->com.wr_waitp);
2172
2173	/* When MPA revision is different on nodes, the node with MPA_rev=2
2174	 * tries to reconnect with MPA_rev 1 for the same EP through
2175	 * c4iw_reconnect(), where the same EP is assigned with new tid for
2176	 * further connection establishment. As we are using the same EP pointer
2177	 * for reconnect, few skbs are used during the previous c4iw_connect(),
2178	 * which leaves the EP with inadequate skbs for further
2179	 * c4iw_reconnect(), Further causing a crash due to an empty
2180	 * skb_list() during peer_abort(). Allocate skbs which is already used.
2181	 */
2182	size = (CN_MAX_CON_BUF - skb_queue_len(&ep->com.ep_skb_list));
2183	if (alloc_ep_skb_list(&ep->com.ep_skb_list, size)) {
2184		err = -ENOMEM;
2185		goto fail1;
2186	}
2187
2188	/*
2189	 * Allocate an active TID to initiate a TCP connection.
2190	 */
2191	ep->atid = cxgb4_alloc_atid(ep->com.dev->rdev.lldi.tids, ep);
2192	if (ep->atid == -1) {
2193		pr_err("%s - cannot alloc atid\n", __func__);
2194		err = -ENOMEM;
2195		goto fail2;
2196	}
2197	err = xa_insert_irq(&ep->com.dev->atids, ep->atid, ep, GFP_KERNEL);
2198	if (err)
2199		goto fail2a;
2200
2201	/* find a route */
2202	if (ep->com.cm_id->m_local_addr.ss_family == AF_INET) {
2203		ep->dst = cxgb_find_route(&ep->com.dev->rdev.lldi, get_real_dev,
2204					  laddr->sin_addr.s_addr,
2205					  raddr->sin_addr.s_addr,
2206					  laddr->sin_port,
2207					  raddr->sin_port, ep->com.cm_id->tos);
2208		iptype = 4;
2209		ra = (__u8 *)&raddr->sin_addr;
2210	} else {
2211		ep->dst = cxgb_find_route6(&ep->com.dev->rdev.lldi,
2212					   get_real_dev,
2213					   laddr6->sin6_addr.s6_addr,
2214					   raddr6->sin6_addr.s6_addr,
2215					   laddr6->sin6_port,
2216					   raddr6->sin6_port,
2217					   ep->com.cm_id->tos,
2218					   raddr6->sin6_scope_id);
2219		iptype = 6;
2220		ra = (__u8 *)&raddr6->sin6_addr;
2221	}
2222	if (!ep->dst) {
2223		pr_err("%s - cannot find route\n", __func__);
2224		err = -EHOSTUNREACH;
2225		goto fail3;
2226	}
2227	err = import_ep(ep, iptype, ra, ep->dst, ep->com.dev, false,
2228			ep->com.dev->rdev.lldi.adapter_type,
2229			ep->com.cm_id->tos);
2230	if (err) {
2231		pr_err("%s - cannot alloc l2e\n", __func__);
2232		goto fail4;
2233	}
2234
2235	pr_debug("txq_idx %u tx_chan %u smac_idx %u rss_qid %u l2t_idx %u\n",
2236		 ep->txq_idx, ep->tx_chan, ep->smac_idx, ep->rss_qid,
2237		 ep->l2t->idx);
2238
2239	state_set(&ep->com, CONNECTING);
2240	ep->tos = ep->com.cm_id->tos;
2241
2242	/* send connect request to rnic */
2243	err = send_connect(ep);
2244	if (!err)
2245		goto out;
2246
2247	cxgb4_l2t_release(ep->l2t);
2248fail4:
2249	dst_release(ep->dst);
2250fail3:
2251	xa_erase_irq(&ep->com.dev->atids, ep->atid);
2252fail2a:
2253	cxgb4_free_atid(ep->com.dev->rdev.lldi.tids, ep->atid);
2254fail2:
2255	/*
2256	 * remember to send notification to upper layer.
2257	 * We are in here so the upper layer is not aware that this is
2258	 * re-connect attempt and so, upper layer is still waiting for
2259	 * response of 1st connect request.
2260	 */
2261	connect_reply_upcall(ep, -ECONNRESET);
2262fail1:
2263	c4iw_put_ep(&ep->com);
2264out:
2265	return err;
2266}
2267
2268static int act_open_rpl(struct c4iw_dev *dev, struct sk_buff *skb)
2269{
2270	struct c4iw_ep *ep;
2271	struct cpl_act_open_rpl *rpl = cplhdr(skb);
2272	unsigned int atid = TID_TID_G(AOPEN_ATID_G(
2273				      ntohl(rpl->atid_status)));
2274	struct tid_info *t = dev->rdev.lldi.tids;
2275	int status = AOPEN_STATUS_G(ntohl(rpl->atid_status));
2276	struct sockaddr_in *la;
2277	struct sockaddr_in *ra;
2278	struct sockaddr_in6 *la6;
2279	struct sockaddr_in6 *ra6;
2280	int ret = 0;
2281
2282	ep = lookup_atid(t, atid);
2283	if (!ep)
2284		return -EINVAL;
2285
2286	la = (struct sockaddr_in *)&ep->com.local_addr;
2287	ra = (struct sockaddr_in *)&ep->com.remote_addr;
2288	la6 = (struct sockaddr_in6 *)&ep->com.local_addr;
2289	ra6 = (struct sockaddr_in6 *)&ep->com.remote_addr;
2290
2291	pr_debug("ep %p atid %u status %u errno %d\n", ep, atid,
2292		 status, status2errno(status));
2293
2294	if (cxgb_is_neg_adv(status)) {
2295		pr_debug("Connection problems for atid %u status %u (%s)\n",
2296			 atid, status, neg_adv_str(status));
2297		ep->stats.connect_neg_adv++;
2298		mutex_lock(&dev->rdev.stats.lock);
2299		dev->rdev.stats.neg_adv++;
2300		mutex_unlock(&dev->rdev.stats.lock);
2301		return 0;
2302	}
2303
2304	set_bit(ACT_OPEN_RPL, &ep->com.history);
2305
2306	/*
2307	 * Log interesting failures.
2308	 */
2309	switch (status) {
2310	case CPL_ERR_CONN_RESET:
2311	case CPL_ERR_CONN_TIMEDOUT:
2312		break;
2313	case CPL_ERR_TCAM_FULL:
2314		mutex_lock(&dev->rdev.stats.lock);
2315		dev->rdev.stats.tcam_full++;
2316		mutex_unlock(&dev->rdev.stats.lock);
2317		if (ep->com.local_addr.ss_family == AF_INET &&
2318		    dev->rdev.lldi.enable_fw_ofld_conn) {
2319			ret = send_fw_act_open_req(ep, TID_TID_G(AOPEN_ATID_G(
2320						   ntohl(rpl->atid_status))));
2321			if (ret)
2322				goto fail;
2323			return 0;
2324		}
2325		break;
2326	case CPL_ERR_CONN_EXIST:
2327		if (ep->retry_count++ < ACT_OPEN_RETRY_COUNT) {
2328			set_bit(ACT_RETRY_INUSE, &ep->com.history);
2329			if (ep->com.remote_addr.ss_family == AF_INET6) {
2330				struct sockaddr_in6 *sin6 =
2331						(struct sockaddr_in6 *)
2332						&ep->com.local_addr;
2333				cxgb4_clip_release(
2334						ep->com.dev->rdev.lldi.ports[0],
2335						(const u32 *)
2336						&sin6->sin6_addr.s6_addr, 1);
2337			}
2338			xa_erase_irq(&ep->com.dev->atids, atid);
2339			cxgb4_free_atid(t, atid);
2340			dst_release(ep->dst);
2341			cxgb4_l2t_release(ep->l2t);
2342			c4iw_reconnect(ep);
2343			return 0;
2344		}
2345		break;
2346	default:
2347		if (ep->com.local_addr.ss_family == AF_INET) {
2348			pr_info("Active open failure - atid %u status %u errno %d %pI4:%u->%pI4:%u\n",
2349				atid, status, status2errno(status),
2350				&la->sin_addr.s_addr, ntohs(la->sin_port),
2351				&ra->sin_addr.s_addr, ntohs(ra->sin_port));
2352		} else {
2353			pr_info("Active open failure - atid %u status %u errno %d %pI6:%u->%pI6:%u\n",
2354				atid, status, status2errno(status),
2355				la6->sin6_addr.s6_addr, ntohs(la6->sin6_port),
2356				ra6->sin6_addr.s6_addr, ntohs(ra6->sin6_port));
2357		}
2358		break;
2359	}
2360
2361fail:
2362	connect_reply_upcall(ep, status2errno(status));
2363	state_set(&ep->com, DEAD);
2364
2365	if (ep->com.remote_addr.ss_family == AF_INET6) {
2366		struct sockaddr_in6 *sin6 =
2367			(struct sockaddr_in6 *)&ep->com.local_addr;
2368		cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0],
2369				   (const u32 *)&sin6->sin6_addr.s6_addr, 1);
2370	}
2371	if (status && act_open_has_tid(status))
2372		cxgb4_remove_tid(ep->com.dev->rdev.lldi.tids, 0, GET_TID(rpl),
2373				 ep->com.local_addr.ss_family);
2374
2375	xa_erase_irq(&ep->com.dev->atids, atid);
2376	cxgb4_free_atid(t, atid);
2377	dst_release(ep->dst);
2378	cxgb4_l2t_release(ep->l2t);
2379	c4iw_put_ep(&ep->com);
2380
2381	return 0;
2382}
2383
2384static int pass_open_rpl(struct c4iw_dev *dev, struct sk_buff *skb)
2385{
2386	struct cpl_pass_open_rpl *rpl = cplhdr(skb);
2387	unsigned int stid = GET_TID(rpl);
2388	struct c4iw_listen_ep *ep = get_ep_from_stid(dev, stid);
2389
2390	if (!ep) {
2391		pr_warn("%s stid %d lookup failure!\n", __func__, stid);
2392		goto out;
2393	}
2394	pr_debug("ep %p status %d error %d\n", ep,
2395		 rpl->status, status2errno(rpl->status));
2396	c4iw_wake_up_noref(ep->com.wr_waitp, status2errno(rpl->status));
2397	c4iw_put_ep(&ep->com);
2398out:
2399	return 0;
2400}
2401
2402static int close_listsrv_rpl(struct c4iw_dev *dev, struct sk_buff *skb)
2403{
2404	struct cpl_close_listsvr_rpl *rpl = cplhdr(skb);
2405	unsigned int stid = GET_TID(rpl);
2406	struct c4iw_listen_ep *ep = get_ep_from_stid(dev, stid);
2407
2408	if (!ep) {
2409		pr_warn("%s stid %d lookup failure!\n", __func__, stid);
2410		goto out;
2411	}
2412	pr_debug("ep %p\n", ep);
2413	c4iw_wake_up_noref(ep->com.wr_waitp, status2errno(rpl->status));
2414	c4iw_put_ep(&ep->com);
2415out:
2416	return 0;
2417}
2418
2419static int accept_cr(struct c4iw_ep *ep, struct sk_buff *skb,
2420		     struct cpl_pass_accept_req *req)
2421{
2422	struct cpl_pass_accept_rpl *rpl;
2423	unsigned int mtu_idx;
2424	u64 opt0;
2425	u32 opt2;
2426	u32 wscale;
2427	struct cpl_t5_pass_accept_rpl *rpl5 = NULL;
2428	int win;
2429	enum chip_type adapter_type = ep->com.dev->rdev.lldi.adapter_type;
2430
2431	pr_debug("ep %p tid %u\n", ep, ep->hwtid);
2432	cxgb_best_mtu(ep->com.dev->rdev.lldi.mtus, ep->mtu, &mtu_idx,
2433		      enable_tcp_timestamps && req->tcpopt.tstamp,
2434		      (ep->com.remote_addr.ss_family == AF_INET) ? 0 : 1);
2435	wscale = cxgb_compute_wscale(rcv_win);
2436
2437	/*
2438	 * Specify the largest window that will fit in opt0. The
2439	 * remainder will be specified in the rx_data_ack.
2440	 */
2441	win = ep->rcv_win >> 10;
2442	if (win > RCV_BUFSIZ_M)
2443		win = RCV_BUFSIZ_M;
2444	opt0 = (nocong ? NO_CONG_F : 0) |
2445	       KEEP_ALIVE_F |
2446	       DELACK_F |
2447	       WND_SCALE_V(wscale) |
2448	       MSS_IDX_V(mtu_idx) |
2449	       L2T_IDX_V(ep->l2t->idx) |
2450	       TX_CHAN_V(ep->tx_chan) |
2451	       SMAC_SEL_V(ep->smac_idx) |
2452	       DSCP_V(ep->tos >> 2) |
2453	       ULP_MODE_V(ULP_MODE_TCPDDP) |
2454	       RCV_BUFSIZ_V(win);
2455	opt2 = RX_CHANNEL_V(0) |
2456	       RSS_QUEUE_VALID_F | RSS_QUEUE_V(ep->rss_qid);
2457
2458	if (enable_tcp_timestamps && req->tcpopt.tstamp)
2459		opt2 |= TSTAMPS_EN_F;
2460	if (enable_tcp_sack && req->tcpopt.sack)
2461		opt2 |= SACK_EN_F;
2462	if (wscale && enable_tcp_window_scaling)
2463		opt2 |= WND_SCALE_EN_F;
2464	if (enable_ecn) {
2465		const struct tcphdr *tcph;
2466		u32 hlen = ntohl(req->hdr_len);
2467
2468		if (CHELSIO_CHIP_VERSION(adapter_type) <= CHELSIO_T5)
2469			tcph = (const void *)(req + 1) + ETH_HDR_LEN_G(hlen) +
2470				IP_HDR_LEN_G(hlen);
2471		else
2472			tcph = (const void *)(req + 1) +
2473				T6_ETH_HDR_LEN_G(hlen) + T6_IP_HDR_LEN_G(hlen);
2474		if (tcph->ece && tcph->cwr)
2475			opt2 |= CCTRL_ECN_V(1);
2476	}
2477
2478	if (!is_t4(adapter_type)) {
2479		u32 isn = (get_random_u32() & ~7UL) - 1;
2480
2481		skb = get_skb(skb, roundup(sizeof(*rpl5), 16), GFP_KERNEL);
2482		rpl5 = __skb_put_zero(skb, roundup(sizeof(*rpl5), 16));
2483		rpl = (void *)rpl5;
2484		INIT_TP_WR_CPL(rpl5, CPL_PASS_ACCEPT_RPL, ep->hwtid);
2485		opt2 |= T5_OPT_2_VALID_F;
2486		opt2 |= CONG_CNTRL_V(CONG_ALG_TAHOE);
2487		opt2 |= T5_ISS_F;
2488		if (peer2peer)
2489			isn += 4;
2490		rpl5->iss = cpu_to_be32(isn);
2491		pr_debug("iss %u\n", be32_to_cpu(rpl5->iss));
2492	} else {
2493		skb = get_skb(skb, sizeof(*rpl), GFP_KERNEL);
2494		rpl = __skb_put_zero(skb, sizeof(*rpl));
2495		INIT_TP_WR_CPL(rpl, CPL_PASS_ACCEPT_RPL, ep->hwtid);
2496	}
2497
2498	rpl->opt0 = cpu_to_be64(opt0);
2499	rpl->opt2 = cpu_to_be32(opt2);
2500	set_wr_txq(skb, CPL_PRIORITY_SETUP, ep->ctrlq_idx);
2501	t4_set_arp_err_handler(skb, ep, pass_accept_rpl_arp_failure);
2502
2503	return c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t);
2504}
2505
2506static void reject_cr(struct c4iw_dev *dev, u32 hwtid, struct sk_buff *skb)
2507{
2508	pr_debug("c4iw_dev %p tid %u\n", dev, hwtid);
2509	skb_trim(skb, sizeof(struct cpl_tid_release));
2510	release_tid(&dev->rdev, hwtid, skb);
2511	return;
2512}
2513
2514static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb)
2515{
2516	struct c4iw_ep *child_ep = NULL, *parent_ep;
2517	struct cpl_pass_accept_req *req = cplhdr(skb);
2518	unsigned int stid = PASS_OPEN_TID_G(ntohl(req->tos_stid));
2519	struct tid_info *t = dev->rdev.lldi.tids;
2520	unsigned int hwtid = GET_TID(req);
2521	struct dst_entry *dst;
2522	__u8 local_ip[16], peer_ip[16];
2523	__be16 local_port, peer_port;
2524	struct sockaddr_in6 *sin6;
2525	int err;
2526	u16 peer_mss = ntohs(req->tcpopt.mss);
2527	int iptype;
2528	unsigned short hdrs;
2529	u8 tos;
2530
2531	parent_ep = (struct c4iw_ep *)get_ep_from_stid(dev, stid);
2532	if (!parent_ep) {
2533		pr_err("%s connect request on invalid stid %d\n",
2534		       __func__, stid);
2535		goto reject;
2536	}
2537
2538	if (state_read(&parent_ep->com) != LISTEN) {
2539		pr_err("%s - listening ep not in LISTEN\n", __func__);
2540		goto reject;
2541	}
2542
2543	if (parent_ep->com.cm_id->tos_set)
2544		tos = parent_ep->com.cm_id->tos;
2545	else
2546		tos = PASS_OPEN_TOS_G(ntohl(req->tos_stid));
2547
2548	cxgb_get_4tuple(req, parent_ep->com.dev->rdev.lldi.adapter_type,
2549			&iptype, local_ip, peer_ip, &local_port, &peer_port);
2550
2551	/* Find output route */
2552	if (iptype == 4)  {
2553		pr_debug("parent ep %p hwtid %u laddr %pI4 raddr %pI4 lport %d rport %d peer_mss %d\n"
2554			 , parent_ep, hwtid,
2555			 local_ip, peer_ip, ntohs(local_port),
2556			 ntohs(peer_port), peer_mss);
2557		dst = cxgb_find_route(&dev->rdev.lldi, get_real_dev,
2558				      *(__be32 *)local_ip, *(__be32 *)peer_ip,
2559				      local_port, peer_port, tos);
2560	} else {
2561		pr_debug("parent ep %p hwtid %u laddr %pI6 raddr %pI6 lport %d rport %d peer_mss %d\n"
2562			 , parent_ep, hwtid,
2563			 local_ip, peer_ip, ntohs(local_port),
2564			 ntohs(peer_port), peer_mss);
2565		dst = cxgb_find_route6(&dev->rdev.lldi, get_real_dev,
2566				local_ip, peer_ip, local_port, peer_port,
2567				tos,
2568				((struct sockaddr_in6 *)
2569				 &parent_ep->com.local_addr)->sin6_scope_id);
2570	}
2571	if (!dst) {
2572		pr_err("%s - failed to find dst entry!\n", __func__);
2573		goto reject;
2574	}
2575
2576	child_ep = alloc_ep(sizeof(*child_ep), GFP_KERNEL);
2577	if (!child_ep) {
2578		pr_err("%s - failed to allocate ep entry!\n", __func__);
2579		dst_release(dst);
2580		goto reject;
2581	}
2582
2583	err = import_ep(child_ep, iptype, peer_ip, dst, dev, false,
2584			parent_ep->com.dev->rdev.lldi.adapter_type, tos);
2585	if (err) {
2586		pr_err("%s - failed to allocate l2t entry!\n", __func__);
2587		dst_release(dst);
2588		kfree(child_ep);
2589		goto reject;
2590	}
2591
2592	hdrs = ((iptype == 4) ? sizeof(struct iphdr) : sizeof(struct ipv6hdr)) +
2593	       sizeof(struct tcphdr) +
2594	       ((enable_tcp_timestamps && req->tcpopt.tstamp) ? 12 : 0);
2595	if (peer_mss && child_ep->mtu > (peer_mss + hdrs))
2596		child_ep->mtu = peer_mss + hdrs;
2597
2598	skb_queue_head_init(&child_ep->com.ep_skb_list);
2599	if (alloc_ep_skb_list(&child_ep->com.ep_skb_list, CN_MAX_CON_BUF))
2600		goto fail;
2601
2602	state_set(&child_ep->com, CONNECTING);
2603	child_ep->com.dev = dev;
2604	child_ep->com.cm_id = NULL;
2605
2606	if (iptype == 4) {
2607		struct sockaddr_in *sin = (struct sockaddr_in *)
2608			&child_ep->com.local_addr;
2609
2610		sin->sin_family = AF_INET;
2611		sin->sin_port = local_port;
2612		sin->sin_addr.s_addr = *(__be32 *)local_ip;
2613
2614		sin = (struct sockaddr_in *)&child_ep->com.local_addr;
2615		sin->sin_family = AF_INET;
2616		sin->sin_port = ((struct sockaddr_in *)
2617				 &parent_ep->com.local_addr)->sin_port;
2618		sin->sin_addr.s_addr = *(__be32 *)local_ip;
2619
2620		sin = (struct sockaddr_in *)&child_ep->com.remote_addr;
2621		sin->sin_family = AF_INET;
2622		sin->sin_port = peer_port;
2623		sin->sin_addr.s_addr = *(__be32 *)peer_ip;
2624	} else {
2625		sin6 = (struct sockaddr_in6 *)&child_ep->com.local_addr;
2626		sin6->sin6_family = PF_INET6;
2627		sin6->sin6_port = local_port;
2628		memcpy(sin6->sin6_addr.s6_addr, local_ip, 16);
2629
2630		sin6 = (struct sockaddr_in6 *)&child_ep->com.local_addr;
2631		sin6->sin6_family = PF_INET6;
2632		sin6->sin6_port = ((struct sockaddr_in6 *)
2633				   &parent_ep->com.local_addr)->sin6_port;
2634		memcpy(sin6->sin6_addr.s6_addr, local_ip, 16);
2635
2636		sin6 = (struct sockaddr_in6 *)&child_ep->com.remote_addr;
2637		sin6->sin6_family = PF_INET6;
2638		sin6->sin6_port = peer_port;
2639		memcpy(sin6->sin6_addr.s6_addr, peer_ip, 16);
2640	}
2641
2642	c4iw_get_ep(&parent_ep->com);
2643	child_ep->parent_ep = parent_ep;
2644	child_ep->tos = tos;
2645	child_ep->dst = dst;
2646	child_ep->hwtid = hwtid;
2647
2648	pr_debug("tx_chan %u smac_idx %u rss_qid %u\n",
2649		 child_ep->tx_chan, child_ep->smac_idx, child_ep->rss_qid);
2650
2651	timer_setup(&child_ep->timer, ep_timeout, 0);
2652	cxgb4_insert_tid(t, child_ep, hwtid,
2653			 child_ep->com.local_addr.ss_family);
2654	insert_ep_tid(child_ep);
2655	if (accept_cr(child_ep, skb, req)) {
2656		c4iw_put_ep(&parent_ep->com);
2657		release_ep_resources(child_ep);
2658	} else {
2659		set_bit(PASS_ACCEPT_REQ, &child_ep->com.history);
2660	}
2661	if (iptype == 6) {
2662		sin6 = (struct sockaddr_in6 *)&child_ep->com.local_addr;
2663		cxgb4_clip_get(child_ep->com.dev->rdev.lldi.ports[0],
2664			       (const u32 *)&sin6->sin6_addr.s6_addr, 1);
2665	}
2666	goto out;
2667fail:
2668	c4iw_put_ep(&child_ep->com);
2669reject:
2670	reject_cr(dev, hwtid, skb);
2671out:
2672	if (parent_ep)
2673		c4iw_put_ep(&parent_ep->com);
2674	return 0;
2675}
2676
2677static int pass_establish(struct c4iw_dev *dev, struct sk_buff *skb)
2678{
2679	struct c4iw_ep *ep;
2680	struct cpl_pass_establish *req = cplhdr(skb);
2681	unsigned int tid = GET_TID(req);
2682	int ret;
2683	u16 tcp_opt = ntohs(req->tcp_opt);
2684
2685	ep = get_ep_from_tid(dev, tid);
2686	if (!ep)
2687		return 0;
2688
2689	pr_debug("ep %p tid %u\n", ep, ep->hwtid);
2690	ep->snd_seq = be32_to_cpu(req->snd_isn);
2691	ep->rcv_seq = be32_to_cpu(req->rcv_isn);
2692	ep->snd_wscale = TCPOPT_SND_WSCALE_G(tcp_opt);
2693
2694	pr_debug("ep %p hwtid %u tcp_opt 0x%02x\n", ep, tid, tcp_opt);
2695
2696	set_emss(ep, tcp_opt);
2697
2698	dst_confirm(ep->dst);
2699	mutex_lock(&ep->com.mutex);
2700	ep->com.state = MPA_REQ_WAIT;
2701	start_ep_timer(ep);
2702	set_bit(PASS_ESTAB, &ep->com.history);
2703	ret = send_flowc(ep);
2704	mutex_unlock(&ep->com.mutex);
2705	if (ret)
2706		c4iw_ep_disconnect(ep, 1, GFP_KERNEL);
2707	c4iw_put_ep(&ep->com);
2708
2709	return 0;
2710}
2711
2712static int peer_close(struct c4iw_dev *dev, struct sk_buff *skb)
2713{
2714	struct cpl_peer_close *hdr = cplhdr(skb);
2715	struct c4iw_ep *ep;
2716	struct c4iw_qp_attributes attrs;
2717	int disconnect = 1;
2718	int release = 0;
2719	unsigned int tid = GET_TID(hdr);
2720	int ret;
2721
2722	ep = get_ep_from_tid(dev, tid);
2723	if (!ep)
2724		return 0;
2725
2726	pr_debug("ep %p tid %u\n", ep, ep->hwtid);
2727	dst_confirm(ep->dst);
2728
2729	set_bit(PEER_CLOSE, &ep->com.history);
2730	mutex_lock(&ep->com.mutex);
2731	switch (ep->com.state) {
2732	case MPA_REQ_WAIT:
2733		__state_set(&ep->com, CLOSING);
2734		break;
2735	case MPA_REQ_SENT:
2736		__state_set(&ep->com, CLOSING);
2737		connect_reply_upcall(ep, -ECONNRESET);
2738		break;
2739	case MPA_REQ_RCVD:
2740
2741		/*
2742		 * We're gonna mark this puppy DEAD, but keep
2743		 * the reference on it until the ULP accepts or
2744		 * rejects the CR. Also wake up anyone waiting
2745		 * in rdma connection migration (see c4iw_accept_cr()).
2746		 */
2747		__state_set(&ep->com, CLOSING);
2748		pr_debug("waking up ep %p tid %u\n", ep, ep->hwtid);
2749		c4iw_wake_up_noref(ep->com.wr_waitp, -ECONNRESET);
2750		break;
2751	case MPA_REP_SENT:
2752		__state_set(&ep->com, CLOSING);
2753		pr_debug("waking up ep %p tid %u\n", ep, ep->hwtid);
2754		c4iw_wake_up_noref(ep->com.wr_waitp, -ECONNRESET);
2755		break;
2756	case FPDU_MODE:
2757		start_ep_timer(ep);
2758		__state_set(&ep->com, CLOSING);
2759		attrs.next_state = C4IW_QP_STATE_CLOSING;
2760		ret = c4iw_modify_qp(ep->com.qp->rhp, ep->com.qp,
2761				       C4IW_QP_ATTR_NEXT_STATE, &attrs, 1);
2762		if (ret != -ECONNRESET) {
2763			peer_close_upcall(ep);
2764			disconnect = 1;
2765		}
2766		break;
2767	case ABORTING:
2768		disconnect = 0;
2769		break;
2770	case CLOSING:
2771		__state_set(&ep->com, MORIBUND);
2772		disconnect = 0;
2773		break;
2774	case MORIBUND:
2775		(void)stop_ep_timer(ep);
2776		if (ep->com.cm_id && ep->com.qp) {
2777			attrs.next_state = C4IW_QP_STATE_IDLE;
2778			c4iw_modify_qp(ep->com.qp->rhp, ep->com.qp,
2779				       C4IW_QP_ATTR_NEXT_STATE, &attrs, 1);
2780		}
2781		close_complete_upcall(ep, 0);
2782		__state_set(&ep->com, DEAD);
2783		release = 1;
2784		disconnect = 0;
2785		break;
2786	case DEAD:
2787		disconnect = 0;
2788		break;
2789	default:
2790		WARN_ONCE(1, "Bad endpoint state %u\n", ep->com.state);
2791	}
2792	mutex_unlock(&ep->com.mutex);
2793	if (disconnect)
2794		c4iw_ep_disconnect(ep, 0, GFP_KERNEL);
2795	if (release)
2796		release_ep_resources(ep);
2797	c4iw_put_ep(&ep->com);
2798	return 0;
2799}
2800
2801static void finish_peer_abort(struct c4iw_dev *dev, struct c4iw_ep *ep)
2802{
2803	complete_cached_srq_buffers(ep, ep->srqe_idx);
2804	if (ep->com.cm_id && ep->com.qp) {
2805		struct c4iw_qp_attributes attrs;
2806
2807		attrs.next_state = C4IW_QP_STATE_ERROR;
2808		c4iw_modify_qp(ep->com.qp->rhp, ep->com.qp,
2809			       C4IW_QP_ATTR_NEXT_STATE,	&attrs, 1);
2810	}
2811	peer_abort_upcall(ep);
2812	release_ep_resources(ep);
2813	c4iw_put_ep(&ep->com);
2814}
2815
2816static int peer_abort(struct c4iw_dev *dev, struct sk_buff *skb)
2817{
2818	struct cpl_abort_req_rss6 *req = cplhdr(skb);
2819	struct c4iw_ep *ep;
2820	struct sk_buff *rpl_skb;
2821	struct c4iw_qp_attributes attrs;
2822	int ret;
2823	int release = 0;
2824	unsigned int tid = GET_TID(req);
2825	u8 status;
2826	u32 srqidx;
2827
2828	u32 len = roundup(sizeof(struct cpl_abort_rpl), 16);
2829
2830	ep = get_ep_from_tid(dev, tid);
2831	if (!ep)
2832		return 0;
2833
2834	status = ABORT_RSS_STATUS_G(be32_to_cpu(req->srqidx_status));
2835
2836	if (cxgb_is_neg_adv(status)) {
2837		pr_debug("Negative advice on abort- tid %u status %d (%s)\n",
2838			 ep->hwtid, status, neg_adv_str(status));
2839		ep->stats.abort_neg_adv++;
2840		mutex_lock(&dev->rdev.stats.lock);
2841		dev->rdev.stats.neg_adv++;
2842		mutex_unlock(&dev->rdev.stats.lock);
2843		goto deref_ep;
2844	}
2845
2846	pr_debug("ep %p tid %u state %u\n", ep, ep->hwtid,
2847		 ep->com.state);
2848	set_bit(PEER_ABORT, &ep->com.history);
2849
2850	/*
2851	 * Wake up any threads in rdma_init() or rdma_fini().
2852	 * However, this is not needed if com state is just
2853	 * MPA_REQ_SENT
2854	 */
2855	if (ep->com.state != MPA_REQ_SENT)
2856		c4iw_wake_up_noref(ep->com.wr_waitp, -ECONNRESET);
2857
2858	mutex_lock(&ep->com.mutex);
2859	switch (ep->com.state) {
2860	case CONNECTING:
2861		c4iw_put_ep(&ep->parent_ep->com);
2862		break;
2863	case MPA_REQ_WAIT:
2864		(void)stop_ep_timer(ep);
2865		break;
2866	case MPA_REQ_SENT:
2867		(void)stop_ep_timer(ep);
2868		if (status != CPL_ERR_CONN_RESET || mpa_rev == 1 ||
2869		    (mpa_rev == 2 && ep->tried_with_mpa_v1))
2870			connect_reply_upcall(ep, -ECONNRESET);
2871		else {
2872			/*
2873			 * we just don't send notification upwards because we
2874			 * want to retry with mpa_v1 without upper layers even
2875			 * knowing it.
2876			 *
2877			 * do some housekeeping so as to re-initiate the
2878			 * connection
2879			 */
2880			pr_info("%s: mpa_rev=%d. Retrying with mpav1\n",
2881				__func__, mpa_rev);
2882			ep->retry_with_mpa_v1 = 1;
2883		}
2884		break;
2885	case MPA_REP_SENT:
2886		break;
2887	case MPA_REQ_RCVD:
2888		break;
2889	case MORIBUND:
2890	case CLOSING:
2891		stop_ep_timer(ep);
2892		fallthrough;
2893	case FPDU_MODE:
2894		if (ep->com.qp && ep->com.qp->srq) {
2895			srqidx = ABORT_RSS_SRQIDX_G(
2896					be32_to_cpu(req->srqidx_status));
2897			if (srqidx) {
2898				complete_cached_srq_buffers(ep, srqidx);
2899			} else {
2900				/* Hold ep ref until finish_peer_abort() */
2901				c4iw_get_ep(&ep->com);
2902				__state_set(&ep->com, ABORTING);
2903				set_bit(PEER_ABORT_IN_PROGRESS, &ep->com.flags);
2904				read_tcb(ep);
2905				break;
2906
2907			}
2908		}
2909
2910		if (ep->com.cm_id && ep->com.qp) {
2911			attrs.next_state = C4IW_QP_STATE_ERROR;
2912			ret = c4iw_modify_qp(ep->com.qp->rhp,
2913				     ep->com.qp, C4IW_QP_ATTR_NEXT_STATE,
2914				     &attrs, 1);
2915			if (ret)
2916				pr_err("%s - qp <- error failed!\n", __func__);
2917		}
2918		peer_abort_upcall(ep);
2919		break;
2920	case ABORTING:
2921		break;
2922	case DEAD:
2923		pr_warn("%s PEER_ABORT IN DEAD STATE!!!!\n", __func__);
2924		mutex_unlock(&ep->com.mutex);
2925		goto deref_ep;
2926	default:
2927		WARN_ONCE(1, "Bad endpoint state %u\n", ep->com.state);
2928		break;
2929	}
2930	dst_confirm(ep->dst);
2931	if (ep->com.state != ABORTING) {
2932		__state_set(&ep->com, DEAD);
2933		/* we don't release if we want to retry with mpa_v1 */
2934		if (!ep->retry_with_mpa_v1)
2935			release = 1;
2936	}
2937	mutex_unlock(&ep->com.mutex);
2938
2939	rpl_skb = skb_dequeue(&ep->com.ep_skb_list);
2940	if (WARN_ON(!rpl_skb)) {
2941		release = 1;
2942		goto out;
2943	}
2944
2945	cxgb_mk_abort_rpl(rpl_skb, len, ep->hwtid, ep->txq_idx);
2946
2947	c4iw_ofld_send(&ep->com.dev->rdev, rpl_skb);
2948out:
2949	if (release)
2950		release_ep_resources(ep);
2951	else if (ep->retry_with_mpa_v1) {
2952		if (ep->com.remote_addr.ss_family == AF_INET6) {
2953			struct sockaddr_in6 *sin6 =
2954					(struct sockaddr_in6 *)
2955					&ep->com.local_addr;
2956			cxgb4_clip_release(
2957					ep->com.dev->rdev.lldi.ports[0],
2958					(const u32 *)&sin6->sin6_addr.s6_addr,
2959					1);
2960		}
2961		xa_erase_irq(&ep->com.dev->hwtids, ep->hwtid);
2962		cxgb4_remove_tid(ep->com.dev->rdev.lldi.tids, 0, ep->hwtid,
2963				 ep->com.local_addr.ss_family);
2964		dst_release(ep->dst);
2965		cxgb4_l2t_release(ep->l2t);
2966		c4iw_reconnect(ep);
2967	}
2968
2969deref_ep:
2970	c4iw_put_ep(&ep->com);
2971	/* Dereferencing ep, referenced in peer_abort_intr() */
2972	c4iw_put_ep(&ep->com);
2973	return 0;
2974}
2975
2976static int close_con_rpl(struct c4iw_dev *dev, struct sk_buff *skb)
2977{
2978	struct c4iw_ep *ep;
2979	struct c4iw_qp_attributes attrs;
2980	struct cpl_close_con_rpl *rpl = cplhdr(skb);
2981	int release = 0;
2982	unsigned int tid = GET_TID(rpl);
2983
2984	ep = get_ep_from_tid(dev, tid);
2985	if (!ep)
2986		return 0;
2987
2988	pr_debug("ep %p tid %u\n", ep, ep->hwtid);
2989
2990	/* The cm_id may be null if we failed to connect */
2991	mutex_lock(&ep->com.mutex);
2992	set_bit(CLOSE_CON_RPL, &ep->com.history);
2993	switch (ep->com.state) {
2994	case CLOSING:
2995		__state_set(&ep->com, MORIBUND);
2996		break;
2997	case MORIBUND:
2998		(void)stop_ep_timer(ep);
2999		if ((ep->com.cm_id) && (ep->com.qp)) {
3000			attrs.next_state = C4IW_QP_STATE_IDLE;
3001			c4iw_modify_qp(ep->com.qp->rhp,
3002					     ep->com.qp,
3003					     C4IW_QP_ATTR_NEXT_STATE,
3004					     &attrs, 1);
3005		}
3006		close_complete_upcall(ep, 0);
3007		__state_set(&ep->com, DEAD);
3008		release = 1;
3009		break;
3010	case ABORTING:
3011	case DEAD:
3012		break;
3013	default:
3014		WARN_ONCE(1, "Bad endpoint state %u\n", ep->com.state);
3015		break;
3016	}
3017	mutex_unlock(&ep->com.mutex);
3018	if (release)
3019		release_ep_resources(ep);
3020	c4iw_put_ep(&ep->com);
3021	return 0;
3022}
3023
3024static int terminate(struct c4iw_dev *dev, struct sk_buff *skb)
3025{
3026	struct cpl_rdma_terminate *rpl = cplhdr(skb);
3027	unsigned int tid = GET_TID(rpl);
3028	struct c4iw_ep *ep;
3029	struct c4iw_qp_attributes attrs;
3030
3031	ep = get_ep_from_tid(dev, tid);
3032
3033	if (ep) {
3034		if (ep->com.qp) {
3035			pr_warn("TERM received tid %u qpid %u\n", tid,
3036				ep->com.qp->wq.sq.qid);
3037			attrs.next_state = C4IW_QP_STATE_TERMINATE;
3038			c4iw_modify_qp(ep->com.qp->rhp, ep->com.qp,
3039				       C4IW_QP_ATTR_NEXT_STATE, &attrs, 1);
3040		}
3041
3042		/* As per draft-hilland-iwarp-verbs-v1.0, sec 6.2.3,
3043		 * when entering the TERM state the RNIC MUST initiate a CLOSE.
3044		 */
3045		c4iw_ep_disconnect(ep, 1, GFP_KERNEL);
3046		c4iw_put_ep(&ep->com);
3047	} else
3048		pr_warn("TERM received tid %u no ep/qp\n", tid);
3049
3050	return 0;
3051}
3052
3053/*
3054 * Upcall from the adapter indicating data has been transmitted.
3055 * For us its just the single MPA request or reply.  We can now free
3056 * the skb holding the mpa message.
3057 */
3058static int fw4_ack(struct c4iw_dev *dev, struct sk_buff *skb)
3059{
3060	struct c4iw_ep *ep;
3061	struct cpl_fw4_ack *hdr = cplhdr(skb);
3062	u8 credits = hdr->credits;
3063	unsigned int tid = GET_TID(hdr);
3064
3065
3066	ep = get_ep_from_tid(dev, tid);
3067	if (!ep)
3068		return 0;
3069	pr_debug("ep %p tid %u credits %u\n",
3070		 ep, ep->hwtid, credits);
3071	if (credits == 0) {
3072		pr_debug("0 credit ack ep %p tid %u state %u\n",
3073			 ep, ep->hwtid, state_read(&ep->com));
3074		goto out;
3075	}
3076
3077	dst_confirm(ep->dst);
3078	if (ep->mpa_skb) {
3079		pr_debug("last streaming msg ack ep %p tid %u state %u initiator %u freeing skb\n",
3080			 ep, ep->hwtid, state_read(&ep->com),
3081			 ep->mpa_attr.initiator ? 1 : 0);
3082		mutex_lock(&ep->com.mutex);
3083		kfree_skb(ep->mpa_skb);
3084		ep->mpa_skb = NULL;
3085		if (test_bit(STOP_MPA_TIMER, &ep->com.flags))
3086			stop_ep_timer(ep);
3087		mutex_unlock(&ep->com.mutex);
3088	}
3089out:
3090	c4iw_put_ep(&ep->com);
3091	return 0;
3092}
3093
3094int c4iw_reject_cr(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len)
3095{
3096	int abort;
3097	struct c4iw_ep *ep = to_ep(cm_id);
3098
3099	pr_debug("ep %p tid %u\n", ep, ep->hwtid);
3100
3101	mutex_lock(&ep->com.mutex);
3102	if (ep->com.state != MPA_REQ_RCVD) {
3103		mutex_unlock(&ep->com.mutex);
3104		c4iw_put_ep(&ep->com);
3105		return -ECONNRESET;
3106	}
3107	set_bit(ULP_REJECT, &ep->com.history);
3108	if (mpa_rev == 0)
3109		abort = 1;
3110	else
3111		abort = send_mpa_reject(ep, pdata, pdata_len);
3112	mutex_unlock(&ep->com.mutex);
3113
3114	stop_ep_timer(ep);
3115	c4iw_ep_disconnect(ep, abort != 0, GFP_KERNEL);
3116	c4iw_put_ep(&ep->com);
3117	return 0;
3118}
3119
3120int c4iw_accept_cr(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
3121{
3122	int err;
3123	struct c4iw_qp_attributes attrs;
3124	enum c4iw_qp_attr_mask mask;
3125	struct c4iw_ep *ep = to_ep(cm_id);
3126	struct c4iw_dev *h = to_c4iw_dev(cm_id->device);
3127	struct c4iw_qp *qp = get_qhp(h, conn_param->qpn);
3128	int abort = 0;
3129
3130	pr_debug("ep %p tid %u\n", ep, ep->hwtid);
3131
3132	mutex_lock(&ep->com.mutex);
3133	if (ep->com.state != MPA_REQ_RCVD) {
3134		err = -ECONNRESET;
3135		goto err_out;
3136	}
3137
3138	if (!qp) {
3139		err = -EINVAL;
3140		goto err_out;
3141	}
3142
3143	set_bit(ULP_ACCEPT, &ep->com.history);
3144	if ((conn_param->ord > cur_max_read_depth(ep->com.dev)) ||
3145	    (conn_param->ird > cur_max_read_depth(ep->com.dev))) {
3146		err = -EINVAL;
3147		goto err_abort;
3148	}
3149
3150	if (ep->mpa_attr.version == 2 && ep->mpa_attr.enhanced_rdma_conn) {
3151		if (conn_param->ord > ep->ird) {
3152			if (RELAXED_IRD_NEGOTIATION) {
3153				conn_param->ord = ep->ird;
3154			} else {
3155				ep->ird = conn_param->ird;
3156				ep->ord = conn_param->ord;
3157				send_mpa_reject(ep, conn_param->private_data,
3158						conn_param->private_data_len);
3159				err = -ENOMEM;
3160				goto err_abort;
3161			}
3162		}
3163		if (conn_param->ird < ep->ord) {
3164			if (RELAXED_IRD_NEGOTIATION &&
3165			    ep->ord <= h->rdev.lldi.max_ordird_qp) {
3166				conn_param->ird = ep->ord;
3167			} else {
3168				err = -ENOMEM;
3169				goto err_abort;
3170			}
3171		}
3172	}
3173	ep->ird = conn_param->ird;
3174	ep->ord = conn_param->ord;
3175
3176	if (ep->mpa_attr.version == 1) {
3177		if (peer2peer && ep->ird == 0)
3178			ep->ird = 1;
3179	} else {
3180		if (peer2peer &&
3181		    (ep->mpa_attr.p2p_type != FW_RI_INIT_P2PTYPE_DISABLED) &&
3182		    (p2p_type == FW_RI_INIT_P2PTYPE_READ_REQ) && ep->ird == 0)
3183			ep->ird = 1;
3184	}
3185
3186	pr_debug("ird %d ord %d\n", ep->ird, ep->ord);
3187
3188	ep->com.cm_id = cm_id;
3189	ref_cm_id(&ep->com);
3190	ep->com.qp = qp;
3191	ref_qp(ep);
3192
3193	/* bind QP to EP and move to RTS */
3194	attrs.mpa_attr = ep->mpa_attr;
3195	attrs.max_ird = ep->ird;
3196	attrs.max_ord = ep->ord;
3197	attrs.llp_stream_handle = ep;
3198	attrs.next_state = C4IW_QP_STATE_RTS;
3199
3200	/* bind QP and TID with INIT_WR */
3201	mask = C4IW_QP_ATTR_NEXT_STATE |
3202			     C4IW_QP_ATTR_LLP_STREAM_HANDLE |
3203			     C4IW_QP_ATTR_MPA_ATTR |
3204			     C4IW_QP_ATTR_MAX_IRD |
3205			     C4IW_QP_ATTR_MAX_ORD;
3206
3207	err = c4iw_modify_qp(ep->com.qp->rhp,
3208			     ep->com.qp, mask, &attrs, 1);
3209	if (err)
3210		goto err_deref_cm_id;
3211
3212	set_bit(STOP_MPA_TIMER, &ep->com.flags);
3213	err = send_mpa_reply(ep, conn_param->private_data,
3214			     conn_param->private_data_len);
3215	if (err)
3216		goto err_deref_cm_id;
3217
3218	__state_set(&ep->com, FPDU_MODE);
3219	established_upcall(ep);
3220	mutex_unlock(&ep->com.mutex);
3221	c4iw_put_ep(&ep->com);
3222	return 0;
3223err_deref_cm_id:
3224	deref_cm_id(&ep->com);
3225err_abort:
3226	abort = 1;
3227err_out:
3228	mutex_unlock(&ep->com.mutex);
3229	if (abort)
3230		c4iw_ep_disconnect(ep, 1, GFP_KERNEL);
3231	c4iw_put_ep(&ep->com);
3232	return err;
3233}
3234
3235static int pick_local_ipaddrs(struct c4iw_dev *dev, struct iw_cm_id *cm_id)
3236{
3237	struct in_device *ind;
3238	int found = 0;
3239	struct sockaddr_in *laddr = (struct sockaddr_in *)&cm_id->m_local_addr;
3240	struct sockaddr_in *raddr = (struct sockaddr_in *)&cm_id->m_remote_addr;
3241	const struct in_ifaddr *ifa;
3242
3243	ind = in_dev_get(dev->rdev.lldi.ports[0]);
3244	if (!ind)
3245		return -EADDRNOTAVAIL;
3246	rcu_read_lock();
3247	in_dev_for_each_ifa_rcu(ifa, ind) {
3248		if (ifa->ifa_flags & IFA_F_SECONDARY)
3249			continue;
3250		laddr->sin_addr.s_addr = ifa->ifa_address;
3251		raddr->sin_addr.s_addr = ifa->ifa_address;
3252		found = 1;
3253		break;
3254	}
3255	rcu_read_unlock();
3256
3257	in_dev_put(ind);
3258	return found ? 0 : -EADDRNOTAVAIL;
3259}
3260
3261static int get_lladdr(struct net_device *dev, struct in6_addr *addr,
3262		      unsigned char banned_flags)
3263{
3264	struct inet6_dev *idev;
3265	int err = -EADDRNOTAVAIL;
3266
3267	rcu_read_lock();
3268	idev = __in6_dev_get(dev);
3269	if (idev != NULL) {
3270		struct inet6_ifaddr *ifp;
3271
3272		read_lock_bh(&idev->lock);
3273		list_for_each_entry(ifp, &idev->addr_list, if_list) {
3274			if (ifp->scope == IFA_LINK &&
3275			    !(ifp->flags & banned_flags)) {
3276				memcpy(addr, &ifp->addr, 16);
3277				err = 0;
3278				break;
3279			}
3280		}
3281		read_unlock_bh(&idev->lock);
3282	}
3283	rcu_read_unlock();
3284	return err;
3285}
3286
3287static int pick_local_ip6addrs(struct c4iw_dev *dev, struct iw_cm_id *cm_id)
3288{
3289	struct in6_addr addr;
3290	struct sockaddr_in6 *la6 = (struct sockaddr_in6 *)&cm_id->m_local_addr;
3291	struct sockaddr_in6 *ra6 = (struct sockaddr_in6 *)&cm_id->m_remote_addr;
3292
3293	if (!get_lladdr(dev->rdev.lldi.ports[0], &addr, IFA_F_TENTATIVE)) {
3294		memcpy(la6->sin6_addr.s6_addr, &addr, 16);
3295		memcpy(ra6->sin6_addr.s6_addr, &addr, 16);
3296		return 0;
3297	}
3298	return -EADDRNOTAVAIL;
3299}
3300
3301int c4iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
3302{
3303	struct c4iw_dev *dev = to_c4iw_dev(cm_id->device);
3304	struct c4iw_ep *ep;
3305	int err = 0;
3306	struct sockaddr_in *laddr;
3307	struct sockaddr_in *raddr;
3308	struct sockaddr_in6 *laddr6;
3309	struct sockaddr_in6 *raddr6;
3310	__u8 *ra;
3311	int iptype;
3312
3313	if ((conn_param->ord > cur_max_read_depth(dev)) ||
3314	    (conn_param->ird > cur_max_read_depth(dev))) {
3315		err = -EINVAL;
3316		goto out;
3317	}
3318	ep = alloc_ep(sizeof(*ep), GFP_KERNEL);
3319	if (!ep) {
3320		pr_err("%s - cannot alloc ep\n", __func__);
3321		err = -ENOMEM;
3322		goto out;
3323	}
3324
3325	skb_queue_head_init(&ep->com.ep_skb_list);
3326	if (alloc_ep_skb_list(&ep->com.ep_skb_list, CN_MAX_CON_BUF)) {
3327		err = -ENOMEM;
3328		goto fail1;
3329	}
3330
3331	timer_setup(&ep->timer, ep_timeout, 0);
3332	ep->plen = conn_param->private_data_len;
3333	if (ep->plen)
3334		memcpy(ep->mpa_pkt + sizeof(struct mpa_message),
3335		       conn_param->private_data, ep->plen);
3336	ep->ird = conn_param->ird;
3337	ep->ord = conn_param->ord;
3338
3339	if (peer2peer && ep->ord == 0)
3340		ep->ord = 1;
3341
3342	ep->com.cm_id = cm_id;
3343	ref_cm_id(&ep->com);
3344	cm_id->provider_data = ep;
3345	ep->com.dev = dev;
3346	ep->com.qp = get_qhp(dev, conn_param->qpn);
3347	if (!ep->com.qp) {
3348		pr_warn("%s qpn 0x%x not found!\n", __func__, conn_param->qpn);
3349		err = -EINVAL;
3350		goto fail2;
3351	}
3352	ref_qp(ep);
3353	pr_debug("qpn 0x%x qp %p cm_id %p\n", conn_param->qpn,
3354		 ep->com.qp, cm_id);
3355
3356	/*
3357	 * Allocate an active TID to initiate a TCP connection.
3358	 */
3359	ep->atid = cxgb4_alloc_atid(dev->rdev.lldi.tids, ep);
3360	if (ep->atid == -1) {
3361		pr_err("%s - cannot alloc atid\n", __func__);
3362		err = -ENOMEM;
3363		goto fail2;
3364	}
3365	err = xa_insert_irq(&dev->atids, ep->atid, ep, GFP_KERNEL);
3366	if (err)
3367		goto fail5;
3368
3369	memcpy(&ep->com.local_addr, &cm_id->m_local_addr,
3370	       sizeof(ep->com.local_addr));
3371	memcpy(&ep->com.remote_addr, &cm_id->m_remote_addr,
3372	       sizeof(ep->com.remote_addr));
3373
3374	laddr = (struct sockaddr_in *)&ep->com.local_addr;
3375	raddr = (struct sockaddr_in *)&ep->com.remote_addr;
3376	laddr6 = (struct sockaddr_in6 *)&ep->com.local_addr;
3377	raddr6 = (struct sockaddr_in6 *) &ep->com.remote_addr;
3378
3379	if (cm_id->m_remote_addr.ss_family == AF_INET) {
3380		iptype = 4;
3381		ra = (__u8 *)&raddr->sin_addr;
3382
3383		/*
3384		 * Handle loopback requests to INADDR_ANY.
3385		 */
3386		if (raddr->sin_addr.s_addr == htonl(INADDR_ANY)) {
3387			err = pick_local_ipaddrs(dev, cm_id);
3388			if (err)
3389				goto fail3;
3390		}
3391
3392		/* find a route */
3393		pr_debug("saddr %pI4 sport 0x%x raddr %pI4 rport 0x%x\n",
3394			 &laddr->sin_addr, ntohs(laddr->sin_port),
3395			 ra, ntohs(raddr->sin_port));
3396		ep->dst = cxgb_find_route(&dev->rdev.lldi, get_real_dev,
3397					  laddr->sin_addr.s_addr,
3398					  raddr->sin_addr.s_addr,
3399					  laddr->sin_port,
3400					  raddr->sin_port, cm_id->tos);
3401	} else {
3402		iptype = 6;
3403		ra = (__u8 *)&raddr6->sin6_addr;
3404
3405		/*
3406		 * Handle loopback requests to INADDR_ANY.
3407		 */
3408		if (ipv6_addr_type(&raddr6->sin6_addr) == IPV6_ADDR_ANY) {
3409			err = pick_local_ip6addrs(dev, cm_id);
3410			if (err)
3411				goto fail3;
3412		}
3413
3414		/* find a route */
3415		pr_debug("saddr %pI6 sport 0x%x raddr %pI6 rport 0x%x\n",
3416			 laddr6->sin6_addr.s6_addr,
3417			 ntohs(laddr6->sin6_port),
3418			 raddr6->sin6_addr.s6_addr, ntohs(raddr6->sin6_port));
3419		ep->dst = cxgb_find_route6(&dev->rdev.lldi, get_real_dev,
3420					   laddr6->sin6_addr.s6_addr,
3421					   raddr6->sin6_addr.s6_addr,
3422					   laddr6->sin6_port,
3423					   raddr6->sin6_port, cm_id->tos,
3424					   raddr6->sin6_scope_id);
3425	}
3426	if (!ep->dst) {
3427		pr_err("%s - cannot find route\n", __func__);
3428		err = -EHOSTUNREACH;
3429		goto fail3;
3430	}
3431
3432	err = import_ep(ep, iptype, ra, ep->dst, ep->com.dev, true,
3433			ep->com.dev->rdev.lldi.adapter_type, cm_id->tos);
3434	if (err) {
3435		pr_err("%s - cannot alloc l2e\n", __func__);
3436		goto fail4;
3437	}
3438
3439	pr_debug("txq_idx %u tx_chan %u smac_idx %u rss_qid %u l2t_idx %u\n",
3440		 ep->txq_idx, ep->tx_chan, ep->smac_idx, ep->rss_qid,
3441		 ep->l2t->idx);
3442
3443	state_set(&ep->com, CONNECTING);
3444	ep->tos = cm_id->tos;
3445
3446	/* send connect request to rnic */
3447	err = send_connect(ep);
3448	if (!err)
3449		goto out;
3450
3451	cxgb4_l2t_release(ep->l2t);
3452fail4:
3453	dst_release(ep->dst);
3454fail3:
3455	xa_erase_irq(&ep->com.dev->atids, ep->atid);
3456fail5:
3457	cxgb4_free_atid(ep->com.dev->rdev.lldi.tids, ep->atid);
3458fail2:
3459	skb_queue_purge(&ep->com.ep_skb_list);
3460	deref_cm_id(&ep->com);
3461fail1:
3462	c4iw_put_ep(&ep->com);
3463out:
3464	return err;
3465}
3466
3467static int create_server6(struct c4iw_dev *dev, struct c4iw_listen_ep *ep)
3468{
3469	int err;
3470	struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)
3471				    &ep->com.local_addr;
3472
3473	if (ipv6_addr_type(&sin6->sin6_addr) != IPV6_ADDR_ANY) {
3474		err = cxgb4_clip_get(ep->com.dev->rdev.lldi.ports[0],
3475				     (const u32 *)&sin6->sin6_addr.s6_addr, 1);
3476		if (err)
3477			return err;
3478	}
3479	c4iw_init_wr_wait(ep->com.wr_waitp);
3480	err = cxgb4_create_server6(ep->com.dev->rdev.lldi.ports[0],
3481				   ep->stid, &sin6->sin6_addr,
3482				   sin6->sin6_port,
3483				   ep->com.dev->rdev.lldi.rxq_ids[0]);
3484	if (!err)
3485		err = c4iw_wait_for_reply(&ep->com.dev->rdev,
3486					  ep->com.wr_waitp,
3487					  0, 0, __func__);
3488	else if (err > 0)
3489		err = net_xmit_errno(err);
3490	if (err) {
3491		cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0],
3492				   (const u32 *)&sin6->sin6_addr.s6_addr, 1);
3493		pr_err("cxgb4_create_server6/filter failed err %d stid %d laddr %pI6 lport %d\n",
3494		       err, ep->stid,
3495		       sin6->sin6_addr.s6_addr, ntohs(sin6->sin6_port));
3496	}
3497	return err;
3498}
3499
3500static int create_server4(struct c4iw_dev *dev, struct c4iw_listen_ep *ep)
3501{
3502	int err;
3503	struct sockaddr_in *sin = (struct sockaddr_in *)
3504				  &ep->com.local_addr;
3505
3506	if (dev->rdev.lldi.enable_fw_ofld_conn) {
3507		do {
3508			err = cxgb4_create_server_filter(
3509				ep->com.dev->rdev.lldi.ports[0], ep->stid,
3510				sin->sin_addr.s_addr, sin->sin_port, 0,
3511				ep->com.dev->rdev.lldi.rxq_ids[0], 0, 0);
3512			if (err == -EBUSY) {
3513				if (c4iw_fatal_error(&ep->com.dev->rdev)) {
3514					err = -EIO;
3515					break;
3516				}
3517				set_current_state(TASK_UNINTERRUPTIBLE);
3518				schedule_timeout(usecs_to_jiffies(100));
3519			}
3520		} while (err == -EBUSY);
3521	} else {
3522		c4iw_init_wr_wait(ep->com.wr_waitp);
3523		err = cxgb4_create_server(ep->com.dev->rdev.lldi.ports[0],
3524				ep->stid, sin->sin_addr.s_addr, sin->sin_port,
3525				0, ep->com.dev->rdev.lldi.rxq_ids[0]);
3526		if (!err)
3527			err = c4iw_wait_for_reply(&ep->com.dev->rdev,
3528						  ep->com.wr_waitp,
3529						  0, 0, __func__);
3530		else if (err > 0)
3531			err = net_xmit_errno(err);
3532	}
3533	if (err)
3534		pr_err("cxgb4_create_server/filter failed err %d stid %d laddr %pI4 lport %d\n"
3535		       , err, ep->stid,
3536		       &sin->sin_addr, ntohs(sin->sin_port));
3537	return err;
3538}
3539
3540int c4iw_create_listen(struct iw_cm_id *cm_id, int backlog)
3541{
3542	int err = 0;
3543	struct c4iw_dev *dev = to_c4iw_dev(cm_id->device);
3544	struct c4iw_listen_ep *ep;
3545
3546	might_sleep();
3547
3548	ep = alloc_ep(sizeof(*ep), GFP_KERNEL);
3549	if (!ep) {
3550		pr_err("%s - cannot alloc ep\n", __func__);
3551		err = -ENOMEM;
3552		goto fail1;
3553	}
3554	skb_queue_head_init(&ep->com.ep_skb_list);
3555	pr_debug("ep %p\n", ep);
3556	ep->com.cm_id = cm_id;
3557	ref_cm_id(&ep->com);
3558	ep->com.dev = dev;
3559	ep->backlog = backlog;
3560	memcpy(&ep->com.local_addr, &cm_id->m_local_addr,
3561	       sizeof(ep->com.local_addr));
3562
3563	/*
3564	 * Allocate a server TID.
3565	 */
3566	if (dev->rdev.lldi.enable_fw_ofld_conn &&
3567	    ep->com.local_addr.ss_family == AF_INET)
3568		ep->stid = cxgb4_alloc_sftid(dev->rdev.lldi.tids,
3569					     cm_id->m_local_addr.ss_family, ep);
3570	else
3571		ep->stid = cxgb4_alloc_stid(dev->rdev.lldi.tids,
3572					    cm_id->m_local_addr.ss_family, ep);
3573
3574	if (ep->stid == -1) {
3575		pr_err("%s - cannot alloc stid\n", __func__);
3576		err = -ENOMEM;
3577		goto fail2;
3578	}
3579	err = xa_insert_irq(&dev->stids, ep->stid, ep, GFP_KERNEL);
3580	if (err)
3581		goto fail3;
3582
3583	state_set(&ep->com, LISTEN);
3584	if (ep->com.local_addr.ss_family == AF_INET)
3585		err = create_server4(dev, ep);
3586	else
3587		err = create_server6(dev, ep);
3588	if (!err) {
3589		cm_id->provider_data = ep;
3590		goto out;
3591	}
3592	xa_erase_irq(&ep->com.dev->stids, ep->stid);
3593fail3:
3594	cxgb4_free_stid(ep->com.dev->rdev.lldi.tids, ep->stid,
3595			ep->com.local_addr.ss_family);
3596fail2:
3597	deref_cm_id(&ep->com);
3598	c4iw_put_ep(&ep->com);
3599fail1:
3600out:
3601	return err;
3602}
3603
3604int c4iw_destroy_listen(struct iw_cm_id *cm_id)
3605{
3606	int err;
3607	struct c4iw_listen_ep *ep = to_listen_ep(cm_id);
3608
3609	pr_debug("ep %p\n", ep);
3610
3611	might_sleep();
3612	state_set(&ep->com, DEAD);
3613	if (ep->com.dev->rdev.lldi.enable_fw_ofld_conn &&
3614	    ep->com.local_addr.ss_family == AF_INET) {
3615		err = cxgb4_remove_server_filter(
3616			ep->com.dev->rdev.lldi.ports[0], ep->stid,
3617			ep->com.dev->rdev.lldi.rxq_ids[0], false);
3618	} else {
3619		struct sockaddr_in6 *sin6;
3620		c4iw_init_wr_wait(ep->com.wr_waitp);
3621		err = cxgb4_remove_server(
3622				ep->com.dev->rdev.lldi.ports[0], ep->stid,
3623				ep->com.dev->rdev.lldi.rxq_ids[0],
3624				ep->com.local_addr.ss_family == AF_INET6);
3625		if (err)
3626			goto done;
3627		err = c4iw_wait_for_reply(&ep->com.dev->rdev, ep->com.wr_waitp,
3628					  0, 0, __func__);
3629		sin6 = (struct sockaddr_in6 *)&ep->com.local_addr;
3630		cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0],
3631				   (const u32 *)&sin6->sin6_addr.s6_addr, 1);
3632	}
3633	xa_erase_irq(&ep->com.dev->stids, ep->stid);
3634	cxgb4_free_stid(ep->com.dev->rdev.lldi.tids, ep->stid,
3635			ep->com.local_addr.ss_family);
3636done:
3637	deref_cm_id(&ep->com);
3638	c4iw_put_ep(&ep->com);
3639	return err;
3640}
3641
3642int c4iw_ep_disconnect(struct c4iw_ep *ep, int abrupt, gfp_t gfp)
3643{
3644	int ret = 0;
3645	int close = 0;
3646	int fatal = 0;
3647	struct c4iw_rdev *rdev;
3648
3649	mutex_lock(&ep->com.mutex);
3650
3651	pr_debug("ep %p state %s, abrupt %d\n", ep,
3652		 states[ep->com.state], abrupt);
3653
3654	/*
3655	 * Ref the ep here in case we have fatal errors causing the
3656	 * ep to be released and freed.
3657	 */
3658	c4iw_get_ep(&ep->com);
3659
3660	rdev = &ep->com.dev->rdev;
3661	if (c4iw_fatal_error(rdev)) {
3662		fatal = 1;
3663		close_complete_upcall(ep, -EIO);
3664		ep->com.state = DEAD;
3665	}
3666	switch (ep->com.state) {
3667	case MPA_REQ_WAIT:
3668	case MPA_REQ_SENT:
3669	case MPA_REQ_RCVD:
3670	case MPA_REP_SENT:
3671	case FPDU_MODE:
3672	case CONNECTING:
3673		close = 1;
3674		if (abrupt)
3675			ep->com.state = ABORTING;
3676		else {
3677			ep->com.state = CLOSING;
3678
3679			/*
3680			 * if we close before we see the fw4_ack() then we fix
3681			 * up the timer state since we're reusing it.
3682			 */
3683			if (ep->mpa_skb &&
3684			    test_bit(STOP_MPA_TIMER, &ep->com.flags)) {
3685				clear_bit(STOP_MPA_TIMER, &ep->com.flags);
3686				stop_ep_timer(ep);
3687			}
3688			start_ep_timer(ep);
3689		}
3690		set_bit(CLOSE_SENT, &ep->com.flags);
3691		break;
3692	case CLOSING:
3693		if (!test_and_set_bit(CLOSE_SENT, &ep->com.flags)) {
3694			close = 1;
3695			if (abrupt) {
3696				(void)stop_ep_timer(ep);
3697				ep->com.state = ABORTING;
3698			} else
3699				ep->com.state = MORIBUND;
3700		}
3701		break;
3702	case MORIBUND:
3703	case ABORTING:
3704	case DEAD:
3705		pr_debug("ignoring disconnect ep %p state %u\n",
3706			 ep, ep->com.state);
3707		break;
3708	default:
3709		WARN_ONCE(1, "Bad endpoint state %u\n", ep->com.state);
3710		break;
3711	}
3712
3713	if (close) {
3714		if (abrupt) {
3715			set_bit(EP_DISC_ABORT, &ep->com.history);
3716			ret = send_abort(ep);
3717		} else {
3718			set_bit(EP_DISC_CLOSE, &ep->com.history);
3719			ret = send_halfclose(ep);
3720		}
3721		if (ret) {
3722			set_bit(EP_DISC_FAIL, &ep->com.history);
3723			if (!abrupt) {
3724				stop_ep_timer(ep);
3725				close_complete_upcall(ep, -EIO);
3726			}
3727			if (ep->com.qp) {
3728				struct c4iw_qp_attributes attrs;
3729
3730				attrs.next_state = C4IW_QP_STATE_ERROR;
3731				ret = c4iw_modify_qp(ep->com.qp->rhp,
3732						     ep->com.qp,
3733						     C4IW_QP_ATTR_NEXT_STATE,
3734						     &attrs, 1);
3735				if (ret)
3736					pr_err("%s - qp <- error failed!\n",
3737					       __func__);
3738			}
3739			fatal = 1;
3740		}
3741	}
3742	mutex_unlock(&ep->com.mutex);
3743	c4iw_put_ep(&ep->com);
3744	if (fatal)
3745		release_ep_resources(ep);
3746	return ret;
3747}
3748
3749static void active_ofld_conn_reply(struct c4iw_dev *dev, struct sk_buff *skb,
3750			struct cpl_fw6_msg_ofld_connection_wr_rpl *req)
3751{
3752	struct c4iw_ep *ep;
3753	int atid = be32_to_cpu(req->tid);
3754
3755	ep = (struct c4iw_ep *)lookup_atid(dev->rdev.lldi.tids,
3756					   (__force u32) req->tid);
3757	if (!ep)
3758		return;
3759
3760	switch (req->retval) {
3761	case FW_ENOMEM:
3762		set_bit(ACT_RETRY_NOMEM, &ep->com.history);
3763		if (ep->retry_count++ < ACT_OPEN_RETRY_COUNT) {
3764			send_fw_act_open_req(ep, atid);
3765			return;
3766		}
3767		fallthrough;
3768	case FW_EADDRINUSE:
3769		set_bit(ACT_RETRY_INUSE, &ep->com.history);
3770		if (ep->retry_count++ < ACT_OPEN_RETRY_COUNT) {
3771			send_fw_act_open_req(ep, atid);
3772			return;
3773		}
3774		break;
3775	default:
3776		pr_info("%s unexpected ofld conn wr retval %d\n",
3777		       __func__, req->retval);
3778		break;
3779	}
3780	pr_err("active ofld_connect_wr failure %d atid %d\n",
3781	       req->retval, atid);
3782	mutex_lock(&dev->rdev.stats.lock);
3783	dev->rdev.stats.act_ofld_conn_fails++;
3784	mutex_unlock(&dev->rdev.stats.lock);
3785	connect_reply_upcall(ep, status2errno(req->retval));
3786	state_set(&ep->com, DEAD);
3787	if (ep->com.remote_addr.ss_family == AF_INET6) {
3788		struct sockaddr_in6 *sin6 =
3789			(struct sockaddr_in6 *)&ep->com.local_addr;
3790		cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0],
3791				   (const u32 *)&sin6->sin6_addr.s6_addr, 1);
3792	}
3793	xa_erase_irq(&dev->atids, atid);
3794	cxgb4_free_atid(dev->rdev.lldi.tids, atid);
3795	dst_release(ep->dst);
3796	cxgb4_l2t_release(ep->l2t);
3797	c4iw_put_ep(&ep->com);
3798}
3799
3800static void passive_ofld_conn_reply(struct c4iw_dev *dev, struct sk_buff *skb,
3801			struct cpl_fw6_msg_ofld_connection_wr_rpl *req)
3802{
3803	struct sk_buff *rpl_skb;
3804	struct cpl_pass_accept_req *cpl;
3805	int ret;
3806
3807	rpl_skb = (struct sk_buff *)(unsigned long)req->cookie;
3808	if (req->retval) {
3809		pr_err("%s passive open failure %d\n", __func__, req->retval);
3810		mutex_lock(&dev->rdev.stats.lock);
3811		dev->rdev.stats.pas_ofld_conn_fails++;
3812		mutex_unlock(&dev->rdev.stats.lock);
3813		kfree_skb(rpl_skb);
3814	} else {
3815		cpl = (struct cpl_pass_accept_req *)cplhdr(rpl_skb);
3816		OPCODE_TID(cpl) = htonl(MK_OPCODE_TID(CPL_PASS_ACCEPT_REQ,
3817					(__force u32) htonl(
3818					(__force u32) req->tid)));
3819		ret = pass_accept_req(dev, rpl_skb);
3820		if (!ret)
3821			kfree_skb(rpl_skb);
3822	}
3823	return;
3824}
3825
3826static inline u64 t4_tcb_get_field64(__be64 *tcb, u16 word)
3827{
3828	u64 tlo = be64_to_cpu(tcb[((31 - word) / 2)]);
3829	u64 thi = be64_to_cpu(tcb[((31 - word) / 2) - 1]);
3830	u64 t;
3831	u32 shift = 32;
3832
3833	t = (thi << shift) | (tlo >> shift);
3834
3835	return t;
3836}
3837
3838static inline u32 t4_tcb_get_field32(__be64 *tcb, u16 word, u32 mask, u32 shift)
3839{
3840	u32 v;
3841	u64 t = be64_to_cpu(tcb[(31 - word) / 2]);
3842
3843	if (word & 0x1)
3844		shift += 32;
3845	v = (t >> shift) & mask;
3846	return v;
3847}
3848
3849static int read_tcb_rpl(struct c4iw_dev *dev, struct sk_buff *skb)
3850{
3851	struct cpl_get_tcb_rpl *rpl = cplhdr(skb);
3852	__be64 *tcb = (__be64 *)(rpl + 1);
3853	unsigned int tid = GET_TID(rpl);
3854	struct c4iw_ep *ep;
3855	u64 t_flags_64;
3856	u32 rx_pdu_out;
3857
3858	ep = get_ep_from_tid(dev, tid);
3859	if (!ep)
3860		return 0;
3861	/* Examine the TF_RX_PDU_OUT (bit 49 of the t_flags) in order to
3862	 * determine if there's a rx PDU feedback event pending.
3863	 *
3864	 * If that bit is set, it means we'll need to re-read the TCB's
3865	 * rq_start value. The final value is the one present in a TCB
3866	 * with the TF_RX_PDU_OUT bit cleared.
3867	 */
3868
3869	t_flags_64 = t4_tcb_get_field64(tcb, TCB_T_FLAGS_W);
3870	rx_pdu_out = (t_flags_64 & TF_RX_PDU_OUT_V(1)) >> TF_RX_PDU_OUT_S;
3871
3872	c4iw_put_ep(&ep->com); /* from get_ep_from_tid() */
3873	c4iw_put_ep(&ep->com); /* from read_tcb() */
3874
3875	/* If TF_RX_PDU_OUT bit is set, re-read the TCB */
3876	if (rx_pdu_out) {
3877		if (++ep->rx_pdu_out_cnt >= 2) {
3878			WARN_ONCE(1, "tcb re-read() reached the guard limit, finishing the cleanup\n");
3879			goto cleanup;
3880		}
3881		read_tcb(ep);
3882		return 0;
3883	}
3884
3885	ep->srqe_idx = t4_tcb_get_field32(tcb, TCB_RQ_START_W, TCB_RQ_START_M,
3886					  TCB_RQ_START_S);
3887cleanup:
3888	pr_debug("ep %p tid %u %016x\n", ep, ep->hwtid, ep->srqe_idx);
3889
3890	if (test_bit(PEER_ABORT_IN_PROGRESS, &ep->com.flags))
3891		finish_peer_abort(dev, ep);
3892	else if (test_bit(ABORT_REQ_IN_PROGRESS, &ep->com.flags))
3893		send_abort_req(ep);
3894	else
3895		WARN_ONCE(1, "unexpected state!");
3896
3897	return 0;
3898}
3899
3900static int deferred_fw6_msg(struct c4iw_dev *dev, struct sk_buff *skb)
3901{
3902	struct cpl_fw6_msg *rpl = cplhdr(skb);
3903	struct cpl_fw6_msg_ofld_connection_wr_rpl *req;
3904
3905	switch (rpl->type) {
3906	case FW6_TYPE_CQE:
3907		c4iw_ev_dispatch(dev, (struct t4_cqe *)&rpl->data[0]);
3908		break;
3909	case FW6_TYPE_OFLD_CONNECTION_WR_RPL:
3910		req = (struct cpl_fw6_msg_ofld_connection_wr_rpl *)rpl->data;
3911		switch (req->t_state) {
3912		case TCP_SYN_SENT:
3913			active_ofld_conn_reply(dev, skb, req);
3914			break;
3915		case TCP_SYN_RECV:
3916			passive_ofld_conn_reply(dev, skb, req);
3917			break;
3918		default:
3919			pr_err("%s unexpected ofld conn wr state %d\n",
3920			       __func__, req->t_state);
3921			break;
3922		}
3923		break;
3924	}
3925	return 0;
3926}
3927
3928static void build_cpl_pass_accept_req(struct sk_buff *skb, int stid , u8 tos)
3929{
3930	__be32 l2info;
3931	__be16 hdr_len, vlantag, len;
3932	u16 eth_hdr_len;
3933	int tcp_hdr_len, ip_hdr_len;
3934	u8 intf;
3935	struct cpl_rx_pkt *cpl = cplhdr(skb);
3936	struct cpl_pass_accept_req *req;
3937	struct tcp_options_received tmp_opt;
3938	struct c4iw_dev *dev;
3939	enum chip_type type;
3940
3941	dev = *((struct c4iw_dev **) (skb->cb + sizeof(void *)));
3942	/* Store values from cpl_rx_pkt in temporary location. */
3943	vlantag = cpl->vlan;
3944	len = cpl->len;
3945	l2info  = cpl->l2info;
3946	hdr_len = cpl->hdr_len;
3947	intf = cpl->iff;
3948
3949	__skb_pull(skb, sizeof(*req) + sizeof(struct rss_header));
3950
3951	/*
3952	 * We need to parse the TCP options from SYN packet.
3953	 * to generate cpl_pass_accept_req.
3954	 */
3955	memset(&tmp_opt, 0, sizeof(tmp_opt));
3956	tcp_clear_options(&tmp_opt);
3957	tcp_parse_options(&init_net, skb, &tmp_opt, 0, NULL);
3958
3959	req = __skb_push(skb, sizeof(*req));
3960	memset(req, 0, sizeof(*req));
3961	req->l2info = cpu_to_be16(SYN_INTF_V(intf) |
3962			 SYN_MAC_IDX_V(RX_MACIDX_G(
3963			 be32_to_cpu(l2info))) |
3964			 SYN_XACT_MATCH_F);
3965	type = dev->rdev.lldi.adapter_type;
3966	tcp_hdr_len = RX_TCPHDR_LEN_G(be16_to_cpu(hdr_len));
3967	ip_hdr_len = RX_IPHDR_LEN_G(be16_to_cpu(hdr_len));
3968	req->hdr_len =
3969		cpu_to_be32(SYN_RX_CHAN_V(RX_CHAN_G(be32_to_cpu(l2info))));
3970	if (CHELSIO_CHIP_VERSION(type) <= CHELSIO_T5) {
3971		eth_hdr_len = is_t4(type) ?
3972				RX_ETHHDR_LEN_G(be32_to_cpu(l2info)) :
3973				RX_T5_ETHHDR_LEN_G(be32_to_cpu(l2info));
3974		req->hdr_len |= cpu_to_be32(TCP_HDR_LEN_V(tcp_hdr_len) |
3975					    IP_HDR_LEN_V(ip_hdr_len) |
3976					    ETH_HDR_LEN_V(eth_hdr_len));
3977	} else { /* T6 and later */
3978		eth_hdr_len = RX_T6_ETHHDR_LEN_G(be32_to_cpu(l2info));
3979		req->hdr_len |= cpu_to_be32(T6_TCP_HDR_LEN_V(tcp_hdr_len) |
3980					    T6_IP_HDR_LEN_V(ip_hdr_len) |
3981					    T6_ETH_HDR_LEN_V(eth_hdr_len));
3982	}
3983	req->vlan = vlantag;
3984	req->len = len;
3985	req->tos_stid = cpu_to_be32(PASS_OPEN_TID_V(stid) |
3986				    PASS_OPEN_TOS_V(tos));
3987	req->tcpopt.mss = htons(tmp_opt.mss_clamp);
3988	if (tmp_opt.wscale_ok)
3989		req->tcpopt.wsf = tmp_opt.snd_wscale;
3990	req->tcpopt.tstamp = tmp_opt.saw_tstamp;
3991	if (tmp_opt.sack_ok)
3992		req->tcpopt.sack = 1;
3993	OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_PASS_ACCEPT_REQ, 0));
3994	return;
3995}
3996
3997static void send_fw_pass_open_req(struct c4iw_dev *dev, struct sk_buff *skb,
3998				  __be32 laddr, __be16 lport,
3999				  __be32 raddr, __be16 rport,
4000				  u32 rcv_isn, u32 filter, u16 window,
4001				  u32 rss_qid, u8 port_id)
4002{
4003	struct sk_buff *req_skb;
4004	struct fw_ofld_connection_wr *req;
4005	struct cpl_pass_accept_req *cpl = cplhdr(skb);
4006	int ret;
4007
4008	req_skb = alloc_skb(sizeof(struct fw_ofld_connection_wr), GFP_KERNEL);
4009	if (!req_skb)
4010		return;
4011	req = __skb_put_zero(req_skb, sizeof(*req));
4012	req->op_compl = htonl(WR_OP_V(FW_OFLD_CONNECTION_WR) | FW_WR_COMPL_F);
4013	req->len16_pkd = htonl(FW_WR_LEN16_V(DIV_ROUND_UP(sizeof(*req), 16)));
4014	req->le.version_cpl = htonl(FW_OFLD_CONNECTION_WR_CPL_F);
4015	req->le.filter = (__force __be32) filter;
4016	req->le.lport = lport;
4017	req->le.pport = rport;
4018	req->le.u.ipv4.lip = laddr;
4019	req->le.u.ipv4.pip = raddr;
4020	req->tcb.rcv_nxt = htonl(rcv_isn + 1);
4021	req->tcb.rcv_adv = htons(window);
4022	req->tcb.t_state_to_astid =
4023		 htonl(FW_OFLD_CONNECTION_WR_T_STATE_V(TCP_SYN_RECV) |
4024			FW_OFLD_CONNECTION_WR_RCV_SCALE_V(cpl->tcpopt.wsf) |
4025			FW_OFLD_CONNECTION_WR_ASTID_V(
4026			PASS_OPEN_TID_G(ntohl(cpl->tos_stid))));
4027
4028	/*
4029	 * We store the qid in opt2 which will be used by the firmware
4030	 * to send us the wr response.
4031	 */
4032	req->tcb.opt2 = htonl(RSS_QUEUE_V(rss_qid));
4033
4034	/*
4035	 * We initialize the MSS index in TCB to 0xF.
4036	 * So that when driver sends cpl_pass_accept_rpl
4037	 * TCB picks up the correct value. If this was 0
4038	 * TP will ignore any value > 0 for MSS index.
4039	 */
4040	req->tcb.opt0 = cpu_to_be64(MSS_IDX_V(0xF));
4041	req->cookie = (uintptr_t)skb;
4042
4043	set_wr_txq(req_skb, CPL_PRIORITY_CONTROL, port_id);
4044	ret = cxgb4_ofld_send(dev->rdev.lldi.ports[0], req_skb);
4045	if (ret < 0) {
4046		pr_err("%s - cxgb4_ofld_send error %d - dropping\n", __func__,
4047		       ret);
4048		kfree_skb(skb);
4049		kfree_skb(req_skb);
4050	}
4051}
4052
4053/*
4054 * Handler for CPL_RX_PKT message. Need to handle cpl_rx_pkt
4055 * messages when a filter is being used instead of server to
4056 * redirect a syn packet. When packets hit filter they are redirected
4057 * to the offload queue and driver tries to establish the connection
4058 * using firmware work request.
4059 */
4060static int rx_pkt(struct c4iw_dev *dev, struct sk_buff *skb)
4061{
4062	int stid;
4063	unsigned int filter;
4064	struct ethhdr *eh = NULL;
4065	struct vlan_ethhdr *vlan_eh = NULL;
4066	struct iphdr *iph;
4067	struct tcphdr *tcph;
4068	struct rss_header *rss = (void *)skb->data;
4069	struct cpl_rx_pkt *cpl = (void *)skb->data;
4070	struct cpl_pass_accept_req *req = (void *)(rss + 1);
4071	struct l2t_entry *e;
4072	struct dst_entry *dst;
4073	struct c4iw_ep *lep = NULL;
4074	u16 window;
4075	struct port_info *pi;
4076	struct net_device *pdev;
4077	u16 rss_qid, eth_hdr_len;
4078	int step;
4079	struct neighbour *neigh;
4080
4081	/* Drop all non-SYN packets */
4082	if (!(cpl->l2info & cpu_to_be32(RXF_SYN_F)))
4083		goto reject;
4084
4085	/*
4086	 * Drop all packets which did not hit the filter.
4087	 * Unlikely to happen.
4088	 */
4089	if (!(rss->filter_hit && rss->filter_tid))
4090		goto reject;
4091
4092	/*
4093	 * Calculate the server tid from filter hit index from cpl_rx_pkt.
4094	 */
4095	stid = (__force int) cpu_to_be32((__force u32) rss->hash_val);
4096
4097	lep = (struct c4iw_ep *)get_ep_from_stid(dev, stid);
4098	if (!lep) {
4099		pr_warn("%s connect request on invalid stid %d\n",
4100			__func__, stid);
4101		goto reject;
4102	}
4103
4104	switch (CHELSIO_CHIP_VERSION(dev->rdev.lldi.adapter_type)) {
4105	case CHELSIO_T4:
4106		eth_hdr_len = RX_ETHHDR_LEN_G(be32_to_cpu(cpl->l2info));
4107		break;
4108	case CHELSIO_T5:
4109		eth_hdr_len = RX_T5_ETHHDR_LEN_G(be32_to_cpu(cpl->l2info));
4110		break;
4111	case CHELSIO_T6:
4112		eth_hdr_len = RX_T6_ETHHDR_LEN_G(be32_to_cpu(cpl->l2info));
4113		break;
4114	default:
4115		pr_err("T%d Chip is not supported\n",
4116		       CHELSIO_CHIP_VERSION(dev->rdev.lldi.adapter_type));
4117		goto reject;
4118	}
4119
4120	if (eth_hdr_len == ETH_HLEN) {
4121		eh = (struct ethhdr *)(req + 1);
4122		iph = (struct iphdr *)(eh + 1);
4123	} else {
4124		vlan_eh = (struct vlan_ethhdr *)(req + 1);
4125		iph = (struct iphdr *)(vlan_eh + 1);
4126		__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), ntohs(cpl->vlan));
4127	}
4128
4129	if (iph->version != 0x4)
4130		goto reject;
4131
4132	tcph = (struct tcphdr *)(iph + 1);
4133	skb_set_network_header(skb, (void *)iph - (void *)rss);
4134	skb_set_transport_header(skb, (void *)tcph - (void *)rss);
4135	skb_get(skb);
4136
4137	pr_debug("lip 0x%x lport %u pip 0x%x pport %u tos %d\n",
4138		 ntohl(iph->daddr), ntohs(tcph->dest), ntohl(iph->saddr),
4139		 ntohs(tcph->source), iph->tos);
4140
4141	dst = cxgb_find_route(&dev->rdev.lldi, get_real_dev,
4142			      iph->daddr, iph->saddr, tcph->dest,
4143			      tcph->source, iph->tos);
4144	if (!dst) {
4145		pr_err("%s - failed to find dst entry!\n", __func__);
4146		goto reject;
4147	}
4148	neigh = dst_neigh_lookup_skb(dst, skb);
4149
4150	if (!neigh) {
4151		pr_err("%s - failed to allocate neigh!\n", __func__);
4152		goto free_dst;
4153	}
4154
4155	if (neigh->dev->flags & IFF_LOOPBACK) {
4156		pdev = ip_dev_find(&init_net, iph->daddr);
4157		if (!pdev) {
4158			pr_err("%s - failed to find device!\n", __func__);
4159			goto free_dst;
4160		}
4161		e = cxgb4_l2t_get(dev->rdev.lldi.l2t, neigh,
4162				    pdev, 0);
4163		pi = (struct port_info *)netdev_priv(pdev);
4164		dev_put(pdev);
4165	} else {
4166		pdev = get_real_dev(neigh->dev);
4167		e = cxgb4_l2t_get(dev->rdev.lldi.l2t, neigh,
4168					pdev, 0);
4169		pi = (struct port_info *)netdev_priv(pdev);
4170	}
4171	neigh_release(neigh);
4172	if (!e) {
4173		pr_err("%s - failed to allocate l2t entry!\n",
4174		       __func__);
4175		goto free_dst;
4176	}
4177
4178	step = dev->rdev.lldi.nrxq / dev->rdev.lldi.nchan;
4179	rss_qid = dev->rdev.lldi.rxq_ids[pi->port_id * step];
4180	window = (__force u16) htons((__force u16)tcph->window);
4181
4182	/* Calcuate filter portion for LE region. */
4183	filter = (__force unsigned int) cpu_to_be32(cxgb4_select_ntuple(
4184						    dev->rdev.lldi.ports[0],
4185						    e));
4186
4187	/*
4188	 * Synthesize the cpl_pass_accept_req. We have everything except the
4189	 * TID. Once firmware sends a reply with TID we update the TID field
4190	 * in cpl and pass it through the regular cpl_pass_accept_req path.
4191	 */
4192	build_cpl_pass_accept_req(skb, stid, iph->tos);
4193	send_fw_pass_open_req(dev, skb, iph->daddr, tcph->dest, iph->saddr,
4194			      tcph->source, ntohl(tcph->seq), filter, window,
4195			      rss_qid, pi->port_id);
4196	cxgb4_l2t_release(e);
4197free_dst:
4198	dst_release(dst);
4199reject:
4200	if (lep)
4201		c4iw_put_ep(&lep->com);
4202	return 0;
4203}
4204
4205/*
4206 * These are the real handlers that are called from a
4207 * work queue.
4208 */
4209static c4iw_handler_func work_handlers[NUM_CPL_CMDS + NUM_FAKE_CPLS] = {
4210	[CPL_ACT_ESTABLISH] = act_establish,
4211	[CPL_ACT_OPEN_RPL] = act_open_rpl,
4212	[CPL_RX_DATA] = rx_data,
4213	[CPL_ABORT_RPL_RSS] = abort_rpl,
4214	[CPL_ABORT_RPL] = abort_rpl,
4215	[CPL_PASS_OPEN_RPL] = pass_open_rpl,
4216	[CPL_CLOSE_LISTSRV_RPL] = close_listsrv_rpl,
4217	[CPL_PASS_ACCEPT_REQ] = pass_accept_req,
4218	[CPL_PASS_ESTABLISH] = pass_establish,
4219	[CPL_PEER_CLOSE] = peer_close,
4220	[CPL_ABORT_REQ_RSS] = peer_abort,
4221	[CPL_CLOSE_CON_RPL] = close_con_rpl,
4222	[CPL_RDMA_TERMINATE] = terminate,
4223	[CPL_FW4_ACK] = fw4_ack,
4224	[CPL_GET_TCB_RPL] = read_tcb_rpl,
4225	[CPL_FW6_MSG] = deferred_fw6_msg,
4226	[CPL_RX_PKT] = rx_pkt,
4227	[FAKE_CPL_PUT_EP_SAFE] = _put_ep_safe,
4228	[FAKE_CPL_PASS_PUT_EP_SAFE] = _put_pass_ep_safe
4229};
4230
4231static void process_timeout(struct c4iw_ep *ep)
4232{
4233	struct c4iw_qp_attributes attrs;
4234	int abort = 1;
4235
4236	mutex_lock(&ep->com.mutex);
4237	pr_debug("ep %p tid %u state %d\n", ep, ep->hwtid, ep->com.state);
4238	set_bit(TIMEDOUT, &ep->com.history);
4239	switch (ep->com.state) {
4240	case MPA_REQ_SENT:
4241		connect_reply_upcall(ep, -ETIMEDOUT);
4242		break;
4243	case MPA_REQ_WAIT:
4244	case MPA_REQ_RCVD:
4245	case MPA_REP_SENT:
4246	case FPDU_MODE:
4247		break;
4248	case CLOSING:
4249	case MORIBUND:
4250		if (ep->com.cm_id && ep->com.qp) {
4251			attrs.next_state = C4IW_QP_STATE_ERROR;
4252			c4iw_modify_qp(ep->com.qp->rhp,
4253				     ep->com.qp, C4IW_QP_ATTR_NEXT_STATE,
4254				     &attrs, 1);
4255		}
4256		close_complete_upcall(ep, -ETIMEDOUT);
4257		break;
4258	case ABORTING:
4259	case DEAD:
4260
4261		/*
4262		 * These states are expected if the ep timed out at the same
4263		 * time as another thread was calling stop_ep_timer().
4264		 * So we silently do nothing for these states.
4265		 */
4266		abort = 0;
4267		break;
4268	default:
4269		WARN(1, "%s unexpected state ep %p tid %u state %u\n",
4270			__func__, ep, ep->hwtid, ep->com.state);
4271		abort = 0;
4272	}
4273	mutex_unlock(&ep->com.mutex);
4274	if (abort)
4275		c4iw_ep_disconnect(ep, 1, GFP_KERNEL);
4276	c4iw_put_ep(&ep->com);
4277}
4278
4279static void process_timedout_eps(void)
4280{
4281	struct c4iw_ep *ep;
4282
4283	spin_lock_irq(&timeout_lock);
4284	while (!list_empty(&timeout_list)) {
4285		struct list_head *tmp;
4286
4287		tmp = timeout_list.next;
4288		list_del(tmp);
4289		tmp->next = NULL;
4290		tmp->prev = NULL;
4291		spin_unlock_irq(&timeout_lock);
4292		ep = list_entry(tmp, struct c4iw_ep, entry);
4293		process_timeout(ep);
4294		spin_lock_irq(&timeout_lock);
4295	}
4296	spin_unlock_irq(&timeout_lock);
4297}
4298
4299static void process_work(struct work_struct *work)
4300{
4301	struct sk_buff *skb = NULL;
4302	struct c4iw_dev *dev;
4303	struct cpl_act_establish *rpl;
4304	unsigned int opcode;
4305	int ret;
4306
4307	process_timedout_eps();
4308	while ((skb = skb_dequeue(&rxq))) {
4309		rpl = cplhdr(skb);
4310		dev = *((struct c4iw_dev **) (skb->cb + sizeof(void *)));
4311		opcode = rpl->ot.opcode;
4312
4313		if (opcode >= ARRAY_SIZE(work_handlers) ||
4314		    !work_handlers[opcode]) {
4315			pr_err("No handler for opcode 0x%x.\n", opcode);
4316			kfree_skb(skb);
4317		} else {
4318			ret = work_handlers[opcode](dev, skb);
4319			if (!ret)
4320				kfree_skb(skb);
4321		}
4322		process_timedout_eps();
4323	}
4324}
4325
4326static DECLARE_WORK(skb_work, process_work);
4327
4328static void ep_timeout(struct timer_list *t)
4329{
4330	struct c4iw_ep *ep = timer_container_of(ep, t, timer);
4331	int kickit = 0;
4332
4333	spin_lock(&timeout_lock);
4334	if (!test_and_set_bit(TIMEOUT, &ep->com.flags)) {
4335		/*
4336		 * Only insert if it is not already on the list.
4337		 */
4338		if (!ep->entry.next) {
4339			list_add_tail(&ep->entry, &timeout_list);
4340			kickit = 1;
4341		}
4342	}
4343	spin_unlock(&timeout_lock);
4344	if (kickit)
4345		queue_work(workq, &skb_work);
4346}
4347
4348/*
4349 * All the CM events are handled on a work queue to have a safe context.
4350 */
4351static int sched(struct c4iw_dev *dev, struct sk_buff *skb)
4352{
4353
4354	/*
4355	 * Save dev in the skb->cb area.
4356	 */
4357	*((struct c4iw_dev **) (skb->cb + sizeof(void *))) = dev;
4358
4359	/*
4360	 * Queue the skb and schedule the worker thread.
4361	 */
4362	skb_queue_tail(&rxq, skb);
4363	queue_work(workq, &skb_work);
4364	return 0;
4365}
4366
4367static int set_tcb_rpl(struct c4iw_dev *dev, struct sk_buff *skb)
4368{
4369	struct cpl_set_tcb_rpl *rpl = cplhdr(skb);
4370
4371	if (rpl->status != CPL_ERR_NONE) {
4372		pr_err("Unexpected SET_TCB_RPL status %u for tid %u\n",
4373		       rpl->status, GET_TID(rpl));
4374	}
4375	kfree_skb(skb);
4376	return 0;
4377}
4378
4379static int fw6_msg(struct c4iw_dev *dev, struct sk_buff *skb)
4380{
4381	struct cpl_fw6_msg *rpl = cplhdr(skb);
4382	struct c4iw_wr_wait *wr_waitp;
4383	int ret;
4384
4385	pr_debug("type %u\n", rpl->type);
4386
4387	switch (rpl->type) {
4388	case FW6_TYPE_WR_RPL:
4389		ret = (int)((be64_to_cpu(rpl->data[0]) >> 8) & 0xff);
4390		wr_waitp = (struct c4iw_wr_wait *)(__force unsigned long) rpl->data[1];
4391		pr_debug("wr_waitp %p ret %u\n", wr_waitp, ret);
4392		if (wr_waitp)
4393			c4iw_wake_up_deref(wr_waitp, ret ? -ret : 0);
4394		kfree_skb(skb);
4395		break;
4396	case FW6_TYPE_CQE:
4397	case FW6_TYPE_OFLD_CONNECTION_WR_RPL:
4398		sched(dev, skb);
4399		break;
4400	default:
4401		pr_err("%s unexpected fw6 msg type %u\n",
4402		       __func__, rpl->type);
4403		kfree_skb(skb);
4404		break;
4405	}
4406	return 0;
4407}
4408
4409static int peer_abort_intr(struct c4iw_dev *dev, struct sk_buff *skb)
4410{
4411	struct cpl_abort_req_rss *req = cplhdr(skb);
4412	struct c4iw_ep *ep;
4413	unsigned int tid = GET_TID(req);
4414
4415	ep = get_ep_from_tid(dev, tid);
4416	/* This EP will be dereferenced in peer_abort() */
4417	if (!ep) {
4418		pr_warn("Abort on non-existent endpoint, tid %d\n", tid);
4419		kfree_skb(skb);
4420		return 0;
4421	}
4422	if (cxgb_is_neg_adv(req->status)) {
4423		pr_debug("Negative advice on abort- tid %u status %d (%s)\n",
4424			 ep->hwtid, req->status,
4425			 neg_adv_str(req->status));
4426		goto out;
4427	}
4428	pr_debug("ep %p tid %u state %u\n", ep, ep->hwtid, ep->com.state);
4429
4430	c4iw_wake_up_noref(ep->com.wr_waitp, -ECONNRESET);
4431out:
4432	sched(dev, skb);
4433	return 0;
4434}
4435
4436/*
4437 * Most upcalls from the T4 Core go to sched() to
4438 * schedule the processing on a work queue.
4439 */
4440c4iw_handler_func c4iw_handlers[NUM_CPL_CMDS] = {
4441	[CPL_ACT_ESTABLISH] = sched,
4442	[CPL_ACT_OPEN_RPL] = sched,
4443	[CPL_RX_DATA] = sched,
4444	[CPL_ABORT_RPL_RSS] = sched,
4445	[CPL_ABORT_RPL] = sched,
4446	[CPL_PASS_OPEN_RPL] = sched,
4447	[CPL_CLOSE_LISTSRV_RPL] = sched,
4448	[CPL_PASS_ACCEPT_REQ] = sched,
4449	[CPL_PASS_ESTABLISH] = sched,
4450	[CPL_PEER_CLOSE] = sched,
4451	[CPL_CLOSE_CON_RPL] = sched,
4452	[CPL_ABORT_REQ_RSS] = peer_abort_intr,
4453	[CPL_RDMA_TERMINATE] = sched,
4454	[CPL_FW4_ACK] = sched,
4455	[CPL_SET_TCB_RPL] = set_tcb_rpl,
4456	[CPL_GET_TCB_RPL] = sched,
4457	[CPL_FW6_MSG] = fw6_msg,
4458	[CPL_RX_PKT] = sched
4459};
4460
4461int __init c4iw_cm_init(void)
4462{
4463	skb_queue_head_init(&rxq);
4464
4465	workq = alloc_ordered_workqueue("iw_cxgb4", WQ_MEM_RECLAIM);
4466	if (!workq)
4467		return -ENOMEM;
4468
4469	return 0;
4470}
4471
4472void c4iw_cm_term(void)
4473{
4474	WARN_ON(!list_empty(&timeout_list));
4475	destroy_workqueue(workq);
4476}
~/ Read-only file preview.