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