GNU Linux-libre 4.19.286-gnu1
[releases.git] / drivers / infiniband / hw / cxgb3 / iwch_cm.c
1 /*
2  * Copyright (c) 2006 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/slab.h>
35 #include <linux/workqueue.h>
36 #include <linux/skbuff.h>
37 #include <linux/timer.h>
38 #include <linux/notifier.h>
39 #include <linux/inetdevice.h>
40
41 #include <net/neighbour.h>
42 #include <net/netevent.h>
43 #include <net/route.h>
44
45 #include "tcb.h"
46 #include "cxgb3_offload.h"
47 #include "iwch.h"
48 #include "iwch_provider.h"
49 #include "iwch_cm.h"
50
51 static char *states[] = {
52         "idle",
53         "listen",
54         "connecting",
55         "mpa_wait_req",
56         "mpa_req_sent",
57         "mpa_req_rcvd",
58         "mpa_rep_sent",
59         "fpdu_mode",
60         "aborting",
61         "closing",
62         "moribund",
63         "dead",
64         NULL,
65 };
66
67 int peer2peer = 0;
68 module_param(peer2peer, int, 0644);
69 MODULE_PARM_DESC(peer2peer, "Support peer2peer ULPs (default=0)");
70
71 static int ep_timeout_secs = 60;
72 module_param(ep_timeout_secs, int, 0644);
73 MODULE_PARM_DESC(ep_timeout_secs, "CM Endpoint operation timeout "
74                                    "in seconds (default=60)");
75
76 static int mpa_rev = 1;
77 module_param(mpa_rev, int, 0644);
78 MODULE_PARM_DESC(mpa_rev, "MPA Revision, 0 supports amso1100, "
79                  "1 is spec compliant. (default=1)");
80
81 static int markers_enabled = 0;
82 module_param(markers_enabled, int, 0644);
83 MODULE_PARM_DESC(markers_enabled, "Enable MPA MARKERS (default(0)=disabled)");
84
85 static int crc_enabled = 1;
86 module_param(crc_enabled, int, 0644);
87 MODULE_PARM_DESC(crc_enabled, "Enable MPA CRC (default(1)=enabled)");
88
89 static int rcv_win = 256 * 1024;
90 module_param(rcv_win, int, 0644);
91 MODULE_PARM_DESC(rcv_win, "TCP receive window in bytes (default=256)");
92
93 static int snd_win = 32 * 1024;
94 module_param(snd_win, int, 0644);
95 MODULE_PARM_DESC(snd_win, "TCP send window in bytes (default=32KB)");
96
97 static unsigned int nocong = 0;
98 module_param(nocong, uint, 0644);
99 MODULE_PARM_DESC(nocong, "Turn off congestion control (default=0)");
100
101 static unsigned int cong_flavor = 1;
102 module_param(cong_flavor, uint, 0644);
103 MODULE_PARM_DESC(cong_flavor, "TCP Congestion control flavor (default=1)");
104
105 static struct workqueue_struct *workq;
106
107 static struct sk_buff_head rxq;
108
109 static struct sk_buff *get_skb(struct sk_buff *skb, int len, gfp_t gfp);
110 static void ep_timeout(struct timer_list *t);
111 static void connect_reply_upcall(struct iwch_ep *ep, int status);
112
113 static void start_ep_timer(struct iwch_ep *ep)
114 {
115         pr_debug("%s ep %p\n", __func__, ep);
116         if (timer_pending(&ep->timer)) {
117                 pr_debug("%s stopped / restarted timer ep %p\n", __func__, ep);
118                 del_timer_sync(&ep->timer);
119         } else
120                 get_ep(&ep->com);
121         ep->timer.expires = jiffies + ep_timeout_secs * HZ;
122         add_timer(&ep->timer);
123 }
124
125 static void stop_ep_timer(struct iwch_ep *ep)
126 {
127         pr_debug("%s ep %p\n", __func__, ep);
128         if (!timer_pending(&ep->timer)) {
129                 WARN(1, "%s timer stopped when its not running!  ep %p state %u\n",
130                         __func__, ep, ep->com.state);
131                 return;
132         }
133         del_timer_sync(&ep->timer);
134         put_ep(&ep->com);
135 }
136
137 static int iwch_l2t_send(struct t3cdev *tdev, struct sk_buff *skb, struct l2t_entry *l2e)
138 {
139         int     error = 0;
140         struct cxio_rdev *rdev;
141
142         rdev = (struct cxio_rdev *)tdev->ulp;
143         if (cxio_fatal_error(rdev)) {
144                 kfree_skb(skb);
145                 return -EIO;
146         }
147         error = l2t_send(tdev, skb, l2e);
148         if (error < 0)
149                 kfree_skb(skb);
150         return error < 0 ? error : 0;
151 }
152
153 int iwch_cxgb3_ofld_send(struct t3cdev *tdev, struct sk_buff *skb)
154 {
155         int     error = 0;
156         struct cxio_rdev *rdev;
157
158         rdev = (struct cxio_rdev *)tdev->ulp;
159         if (cxio_fatal_error(rdev)) {
160                 kfree_skb(skb);
161                 return -EIO;
162         }
163         error = cxgb3_ofld_send(tdev, skb);
164         if (error < 0)
165                 kfree_skb(skb);
166         return error < 0 ? error : 0;
167 }
168
169 static void release_tid(struct t3cdev *tdev, u32 hwtid, struct sk_buff *skb)
170 {
171         struct cpl_tid_release *req;
172
173         skb = get_skb(skb, sizeof *req, GFP_KERNEL);
174         if (!skb)
175                 return;
176         req = skb_put(skb, sizeof(*req));
177         req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
178         OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_TID_RELEASE, hwtid));
179         skb->priority = CPL_PRIORITY_SETUP;
180         iwch_cxgb3_ofld_send(tdev, skb);
181         return;
182 }
183
184 int iwch_quiesce_tid(struct iwch_ep *ep)
185 {
186         struct cpl_set_tcb_field *req;
187         struct sk_buff *skb = get_skb(NULL, sizeof(*req), GFP_KERNEL);
188
189         if (!skb)
190                 return -ENOMEM;
191         req = skb_put(skb, sizeof(*req));
192         req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
193         req->wr.wr_lo = htonl(V_WR_TID(ep->hwtid));
194         OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, ep->hwtid));
195         req->reply = 0;
196         req->cpu_idx = 0;
197         req->word = htons(W_TCB_RX_QUIESCE);
198         req->mask = cpu_to_be64(1ULL << S_TCB_RX_QUIESCE);
199         req->val = cpu_to_be64(1 << S_TCB_RX_QUIESCE);
200
201         skb->priority = CPL_PRIORITY_DATA;
202         return iwch_cxgb3_ofld_send(ep->com.tdev, skb);
203 }
204
205 int iwch_resume_tid(struct iwch_ep *ep)
206 {
207         struct cpl_set_tcb_field *req;
208         struct sk_buff *skb = get_skb(NULL, sizeof(*req), GFP_KERNEL);
209
210         if (!skb)
211                 return -ENOMEM;
212         req = skb_put(skb, sizeof(*req));
213         req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
214         req->wr.wr_lo = htonl(V_WR_TID(ep->hwtid));
215         OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, ep->hwtid));
216         req->reply = 0;
217         req->cpu_idx = 0;
218         req->word = htons(W_TCB_RX_QUIESCE);
219         req->mask = cpu_to_be64(1ULL << S_TCB_RX_QUIESCE);
220         req->val = 0;
221
222         skb->priority = CPL_PRIORITY_DATA;
223         return iwch_cxgb3_ofld_send(ep->com.tdev, skb);
224 }
225
226 static void set_emss(struct iwch_ep *ep, u16 opt)
227 {
228         pr_debug("%s ep %p opt %u\n", __func__, ep, opt);
229         ep->emss = T3C_DATA(ep->com.tdev)->mtus[G_TCPOPT_MSS(opt)] - 40;
230         if (G_TCPOPT_TSTAMP(opt))
231                 ep->emss -= 12;
232         if (ep->emss < 128)
233                 ep->emss = 128;
234         pr_debug("emss=%d\n", ep->emss);
235 }
236
237 static enum iwch_ep_state state_read(struct iwch_ep_common *epc)
238 {
239         unsigned long flags;
240         enum iwch_ep_state state;
241
242         spin_lock_irqsave(&epc->lock, flags);
243         state = epc->state;
244         spin_unlock_irqrestore(&epc->lock, flags);
245         return state;
246 }
247
248 static void __state_set(struct iwch_ep_common *epc, enum iwch_ep_state new)
249 {
250         epc->state = new;
251 }
252
253 static void state_set(struct iwch_ep_common *epc, enum iwch_ep_state new)
254 {
255         unsigned long flags;
256
257         spin_lock_irqsave(&epc->lock, flags);
258         pr_debug("%s - %s -> %s\n", __func__, states[epc->state], states[new]);
259         __state_set(epc, new);
260         spin_unlock_irqrestore(&epc->lock, flags);
261         return;
262 }
263
264 static void *alloc_ep(int size, gfp_t gfp)
265 {
266         struct iwch_ep_common *epc;
267
268         epc = kzalloc(size, gfp);
269         if (epc) {
270                 kref_init(&epc->kref);
271                 spin_lock_init(&epc->lock);
272                 init_waitqueue_head(&epc->waitq);
273         }
274         pr_debug("%s alloc ep %p\n", __func__, epc);
275         return epc;
276 }
277
278 void __free_ep(struct kref *kref)
279 {
280         struct iwch_ep *ep;
281         ep = container_of(container_of(kref, struct iwch_ep_common, kref),
282                           struct iwch_ep, com);
283         pr_debug("%s ep %p state %s\n",
284                  __func__, ep, states[state_read(&ep->com)]);
285         if (test_bit(RELEASE_RESOURCES, &ep->com.flags)) {
286                 cxgb3_remove_tid(ep->com.tdev, (void *)ep, ep->hwtid);
287                 dst_release(ep->dst);
288                 l2t_release(ep->com.tdev, ep->l2t);
289         }
290         kfree(ep);
291 }
292
293 static void release_ep_resources(struct iwch_ep *ep)
294 {
295         pr_debug("%s ep %p tid %d\n", __func__, ep, ep->hwtid);
296         set_bit(RELEASE_RESOURCES, &ep->com.flags);
297         put_ep(&ep->com);
298 }
299
300 static int status2errno(int status)
301 {
302         switch (status) {
303         case CPL_ERR_NONE:
304                 return 0;
305         case CPL_ERR_CONN_RESET:
306                 return -ECONNRESET;
307         case CPL_ERR_ARP_MISS:
308                 return -EHOSTUNREACH;
309         case CPL_ERR_CONN_TIMEDOUT:
310                 return -ETIMEDOUT;
311         case CPL_ERR_TCAM_FULL:
312                 return -ENOMEM;
313         case CPL_ERR_CONN_EXIST:
314                 return -EADDRINUSE;
315         default:
316                 return -EIO;
317         }
318 }
319
320 /*
321  * Try and reuse skbs already allocated...
322  */
323 static struct sk_buff *get_skb(struct sk_buff *skb, int len, gfp_t gfp)
324 {
325         if (skb && !skb_is_nonlinear(skb) && !skb_cloned(skb)) {
326                 skb_trim(skb, 0);
327                 skb_get(skb);
328         } else {
329                 skb = alloc_skb(len, gfp);
330         }
331         return skb;
332 }
333
334 static struct rtable *find_route(struct t3cdev *dev, __be32 local_ip,
335                                  __be32 peer_ip, __be16 local_port,
336                                  __be16 peer_port, u8 tos)
337 {
338         struct rtable *rt;
339         struct flowi4 fl4;
340
341         rt = ip_route_output_ports(&init_net, &fl4, NULL, peer_ip, local_ip,
342                                    peer_port, local_port, IPPROTO_TCP,
343                                    tos, 0);
344         if (IS_ERR(rt))
345                 return NULL;
346         return rt;
347 }
348
349 static unsigned int find_best_mtu(const struct t3c_data *d, unsigned short mtu)
350 {
351         int i = 0;
352
353         while (i < d->nmtus - 1 && d->mtus[i + 1] <= mtu)
354                 ++i;
355         return i;
356 }
357
358 static void arp_failure_discard(struct t3cdev *dev, struct sk_buff *skb)
359 {
360         pr_debug("%s t3cdev %p\n", __func__, dev);
361         kfree_skb(skb);
362 }
363
364 /*
365  * Handle an ARP failure for an active open.
366  */
367 static void act_open_req_arp_failure(struct t3cdev *dev, struct sk_buff *skb)
368 {
369         pr_err("ARP failure during connect\n");
370         kfree_skb(skb);
371 }
372
373 /*
374  * Handle an ARP failure for a CPL_ABORT_REQ.  Change it into a no RST variant
375  * and send it along.
376  */
377 static void abort_arp_failure(struct t3cdev *dev, struct sk_buff *skb)
378 {
379         struct cpl_abort_req *req = cplhdr(skb);
380
381         pr_debug("%s t3cdev %p\n", __func__, dev);
382         req->cmd = CPL_ABORT_NO_RST;
383         iwch_cxgb3_ofld_send(dev, skb);
384 }
385
386 static int send_halfclose(struct iwch_ep *ep, gfp_t gfp)
387 {
388         struct cpl_close_con_req *req;
389         struct sk_buff *skb;
390
391         pr_debug("%s ep %p\n", __func__, ep);
392         skb = get_skb(NULL, sizeof(*req), gfp);
393         if (!skb) {
394                 pr_err("%s - failed to alloc skb\n", __func__);
395                 return -ENOMEM;
396         }
397         skb->priority = CPL_PRIORITY_DATA;
398         set_arp_failure_handler(skb, arp_failure_discard);
399         req = skb_put(skb, sizeof(*req));
400         req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_OFLD_CLOSE_CON));
401         req->wr.wr_lo = htonl(V_WR_TID(ep->hwtid));
402         OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_CLOSE_CON_REQ, ep->hwtid));
403         return iwch_l2t_send(ep->com.tdev, skb, ep->l2t);
404 }
405
406 static int send_abort(struct iwch_ep *ep, struct sk_buff *skb, gfp_t gfp)
407 {
408         struct cpl_abort_req *req;
409
410         pr_debug("%s ep %p\n", __func__, ep);
411         skb = get_skb(skb, sizeof(*req), gfp);
412         if (!skb) {
413                 pr_err("%s - failed to alloc skb\n", __func__);
414                 return -ENOMEM;
415         }
416         skb->priority = CPL_PRIORITY_DATA;
417         set_arp_failure_handler(skb, abort_arp_failure);
418         req = skb_put_zero(skb, sizeof(*req));
419         req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_OFLD_HOST_ABORT_CON_REQ));
420         req->wr.wr_lo = htonl(V_WR_TID(ep->hwtid));
421         OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_ABORT_REQ, ep->hwtid));
422         req->cmd = CPL_ABORT_SEND_RST;
423         return iwch_l2t_send(ep->com.tdev, skb, ep->l2t);
424 }
425
426 static int send_connect(struct iwch_ep *ep)
427 {
428         struct cpl_act_open_req *req;
429         struct sk_buff *skb;
430         u32 opt0h, opt0l, opt2;
431         unsigned int mtu_idx;
432         int wscale;
433
434         pr_debug("%s ep %p\n", __func__, ep);
435
436         skb = get_skb(NULL, sizeof(*req), GFP_KERNEL);
437         if (!skb) {
438                 pr_err("%s - failed to alloc skb\n", __func__);
439                 return -ENOMEM;
440         }
441         mtu_idx = find_best_mtu(T3C_DATA(ep->com.tdev), dst_mtu(ep->dst));
442         wscale = compute_wscale(rcv_win);
443         opt0h = V_NAGLE(0) |
444             V_NO_CONG(nocong) |
445             V_KEEP_ALIVE(1) |
446             F_TCAM_BYPASS |
447             V_WND_SCALE(wscale) |
448             V_MSS_IDX(mtu_idx) |
449             V_L2T_IDX(ep->l2t->idx) | V_TX_CHANNEL(ep->l2t->smt_idx);
450         opt0l = V_TOS((ep->tos >> 2) & M_TOS) | V_RCV_BUFSIZ(rcv_win>>10);
451         opt2 = F_RX_COALESCE_VALID | V_RX_COALESCE(0) | V_FLAVORS_VALID(1) |
452                V_CONG_CONTROL_FLAVOR(cong_flavor);
453         skb->priority = CPL_PRIORITY_SETUP;
454         set_arp_failure_handler(skb, act_open_req_arp_failure);
455
456         req = skb_put(skb, sizeof(*req));
457         req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
458         OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_ACT_OPEN_REQ, ep->atid));
459         req->local_port = ep->com.local_addr.sin_port;
460         req->peer_port = ep->com.remote_addr.sin_port;
461         req->local_ip = ep->com.local_addr.sin_addr.s_addr;
462         req->peer_ip = ep->com.remote_addr.sin_addr.s_addr;
463         req->opt0h = htonl(opt0h);
464         req->opt0l = htonl(opt0l);
465         req->params = 0;
466         req->opt2 = htonl(opt2);
467         return iwch_l2t_send(ep->com.tdev, skb, ep->l2t);
468 }
469
470 static void send_mpa_req(struct iwch_ep *ep, struct sk_buff *skb)
471 {
472         int mpalen;
473         struct tx_data_wr *req;
474         struct mpa_message *mpa;
475         int len;
476
477         pr_debug("%s ep %p pd_len %d\n", __func__, ep, ep->plen);
478
479         BUG_ON(skb_cloned(skb));
480
481         mpalen = sizeof(*mpa) + ep->plen;
482         if (skb->data + mpalen + sizeof(*req) > skb_end_pointer(skb)) {
483                 kfree_skb(skb);
484                 skb=alloc_skb(mpalen + sizeof(*req), GFP_KERNEL);
485                 if (!skb) {
486                         connect_reply_upcall(ep, -ENOMEM);
487                         return;
488                 }
489         }
490         skb_trim(skb, 0);
491         skb_reserve(skb, sizeof(*req));
492         skb_put(skb, mpalen);
493         skb->priority = CPL_PRIORITY_DATA;
494         mpa = (struct mpa_message *) skb->data;
495         memset(mpa, 0, sizeof(*mpa));
496         memcpy(mpa->key, MPA_KEY_REQ, sizeof(mpa->key));
497         mpa->flags = (crc_enabled ? MPA_CRC : 0) |
498                      (markers_enabled ? MPA_MARKERS : 0);
499         mpa->private_data_size = htons(ep->plen);
500         mpa->revision = mpa_rev;
501
502         if (ep->plen)
503                 memcpy(mpa->private_data, ep->mpa_pkt + sizeof(*mpa), ep->plen);
504
505         /*
506          * Reference the mpa skb.  This ensures the data area
507          * will remain in memory until the hw acks the tx.
508          * Function tx_ack() will deref it.
509          */
510         skb_get(skb);
511         set_arp_failure_handler(skb, arp_failure_discard);
512         skb_reset_transport_header(skb);
513         len = skb->len;
514         req = skb_push(skb, sizeof(*req));
515         req->wr_hi = htonl(V_WR_OP(FW_WROPCODE_OFLD_TX_DATA)|F_WR_COMPL);
516         req->wr_lo = htonl(V_WR_TID(ep->hwtid));
517         req->len = htonl(len);
518         req->param = htonl(V_TX_PORT(ep->l2t->smt_idx) |
519                            V_TX_SNDBUF(snd_win>>15));
520         req->flags = htonl(F_TX_INIT);
521         req->sndseq = htonl(ep->snd_seq);
522         BUG_ON(ep->mpa_skb);
523         ep->mpa_skb = skb;
524         iwch_l2t_send(ep->com.tdev, skb, ep->l2t);
525         start_ep_timer(ep);
526         state_set(&ep->com, MPA_REQ_SENT);
527         return;
528 }
529
530 static int send_mpa_reject(struct iwch_ep *ep, const void *pdata, u8 plen)
531 {
532         int mpalen;
533         struct tx_data_wr *req;
534         struct mpa_message *mpa;
535         struct sk_buff *skb;
536
537         pr_debug("%s ep %p plen %d\n", __func__, ep, plen);
538
539         mpalen = sizeof(*mpa) + plen;
540
541         skb = get_skb(NULL, mpalen + sizeof(*req), GFP_KERNEL);
542         if (!skb) {
543                 pr_err("%s - cannot alloc skb!\n", __func__);
544                 return -ENOMEM;
545         }
546         skb_reserve(skb, sizeof(*req));
547         mpa = skb_put(skb, mpalen);
548         memset(mpa, 0, sizeof(*mpa));
549         memcpy(mpa->key, MPA_KEY_REP, sizeof(mpa->key));
550         mpa->flags = MPA_REJECT;
551         mpa->revision = mpa_rev;
552         mpa->private_data_size = htons(plen);
553         if (plen)
554                 memcpy(mpa->private_data, pdata, plen);
555
556         /*
557          * Reference the mpa skb again.  This ensures the data area
558          * will remain in memory until the hw acks the tx.
559          * Function tx_ack() will deref it.
560          */
561         skb_get(skb);
562         skb->priority = CPL_PRIORITY_DATA;
563         set_arp_failure_handler(skb, arp_failure_discard);
564         skb_reset_transport_header(skb);
565         req = skb_push(skb, sizeof(*req));
566         req->wr_hi = htonl(V_WR_OP(FW_WROPCODE_OFLD_TX_DATA)|F_WR_COMPL);
567         req->wr_lo = htonl(V_WR_TID(ep->hwtid));
568         req->len = htonl(mpalen);
569         req->param = htonl(V_TX_PORT(ep->l2t->smt_idx) |
570                            V_TX_SNDBUF(snd_win>>15));
571         req->flags = htonl(F_TX_INIT);
572         req->sndseq = htonl(ep->snd_seq);
573         BUG_ON(ep->mpa_skb);
574         ep->mpa_skb = skb;
575         return iwch_l2t_send(ep->com.tdev, skb, ep->l2t);
576 }
577
578 static int send_mpa_reply(struct iwch_ep *ep, const void *pdata, u8 plen)
579 {
580         int mpalen;
581         struct tx_data_wr *req;
582         struct mpa_message *mpa;
583         int len;
584         struct sk_buff *skb;
585
586         pr_debug("%s ep %p plen %d\n", __func__, ep, plen);
587
588         mpalen = sizeof(*mpa) + plen;
589
590         skb = get_skb(NULL, mpalen + sizeof(*req), GFP_KERNEL);
591         if (!skb) {
592                 pr_err("%s - cannot alloc skb!\n", __func__);
593                 return -ENOMEM;
594         }
595         skb->priority = CPL_PRIORITY_DATA;
596         skb_reserve(skb, sizeof(*req));
597         mpa = skb_put(skb, mpalen);
598         memset(mpa, 0, sizeof(*mpa));
599         memcpy(mpa->key, MPA_KEY_REP, sizeof(mpa->key));
600         mpa->flags = (ep->mpa_attr.crc_enabled ? MPA_CRC : 0) |
601                      (markers_enabled ? MPA_MARKERS : 0);
602         mpa->revision = mpa_rev;
603         mpa->private_data_size = htons(plen);
604         if (plen)
605                 memcpy(mpa->private_data, pdata, plen);
606
607         /*
608          * Reference the mpa skb.  This ensures the data area
609          * will remain in memory until the hw acks the tx.
610          * Function tx_ack() will deref it.
611          */
612         skb_get(skb);
613         set_arp_failure_handler(skb, arp_failure_discard);
614         skb_reset_transport_header(skb);
615         len = skb->len;
616         req = skb_push(skb, sizeof(*req));
617         req->wr_hi = htonl(V_WR_OP(FW_WROPCODE_OFLD_TX_DATA)|F_WR_COMPL);
618         req->wr_lo = htonl(V_WR_TID(ep->hwtid));
619         req->len = htonl(len);
620         req->param = htonl(V_TX_PORT(ep->l2t->smt_idx) |
621                            V_TX_SNDBUF(snd_win>>15));
622         req->flags = htonl(F_TX_INIT);
623         req->sndseq = htonl(ep->snd_seq);
624         ep->mpa_skb = skb;
625         state_set(&ep->com, MPA_REP_SENT);
626         return iwch_l2t_send(ep->com.tdev, skb, ep->l2t);
627 }
628
629 static int act_establish(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
630 {
631         struct iwch_ep *ep = ctx;
632         struct cpl_act_establish *req = cplhdr(skb);
633         unsigned int tid = GET_TID(req);
634
635         pr_debug("%s ep %p tid %d\n", __func__, ep, tid);
636
637         dst_confirm(ep->dst);
638
639         /* setup the hwtid for this connection */
640         ep->hwtid = tid;
641         cxgb3_insert_tid(ep->com.tdev, &t3c_client, ep, tid);
642
643         ep->snd_seq = ntohl(req->snd_isn);
644         ep->rcv_seq = ntohl(req->rcv_isn);
645
646         set_emss(ep, ntohs(req->tcp_opt));
647
648         /* dealloc the atid */
649         cxgb3_free_atid(ep->com.tdev, ep->atid);
650
651         /* start MPA negotiation */
652         send_mpa_req(ep, skb);
653
654         return 0;
655 }
656
657 static void abort_connection(struct iwch_ep *ep, struct sk_buff *skb, gfp_t gfp)
658 {
659         pr_debug("%s ep %p\n", __FILE__, ep);
660         state_set(&ep->com, ABORTING);
661         send_abort(ep, skb, gfp);
662 }
663
664 static void close_complete_upcall(struct iwch_ep *ep)
665 {
666         struct iw_cm_event event;
667
668         pr_debug("%s ep %p\n", __func__, ep);
669         memset(&event, 0, sizeof(event));
670         event.event = IW_CM_EVENT_CLOSE;
671         if (ep->com.cm_id) {
672                 pr_debug("close complete delivered ep %p cm_id %p tid %d\n",
673                          ep, ep->com.cm_id, ep->hwtid);
674                 ep->com.cm_id->event_handler(ep->com.cm_id, &event);
675                 ep->com.cm_id->rem_ref(ep->com.cm_id);
676                 ep->com.cm_id = NULL;
677                 ep->com.qp = NULL;
678         }
679 }
680
681 static void peer_close_upcall(struct iwch_ep *ep)
682 {
683         struct iw_cm_event event;
684
685         pr_debug("%s ep %p\n", __func__, ep);
686         memset(&event, 0, sizeof(event));
687         event.event = IW_CM_EVENT_DISCONNECT;
688         if (ep->com.cm_id) {
689                 pr_debug("peer close delivered ep %p cm_id %p tid %d\n",
690                          ep, ep->com.cm_id, ep->hwtid);
691                 ep->com.cm_id->event_handler(ep->com.cm_id, &event);
692         }
693 }
694
695 static void peer_abort_upcall(struct iwch_ep *ep)
696 {
697         struct iw_cm_event event;
698
699         pr_debug("%s ep %p\n", __func__, ep);
700         memset(&event, 0, sizeof(event));
701         event.event = IW_CM_EVENT_CLOSE;
702         event.status = -ECONNRESET;
703         if (ep->com.cm_id) {
704                 pr_debug("abort delivered ep %p cm_id %p tid %d\n", ep,
705                          ep->com.cm_id, ep->hwtid);
706                 ep->com.cm_id->event_handler(ep->com.cm_id, &event);
707                 ep->com.cm_id->rem_ref(ep->com.cm_id);
708                 ep->com.cm_id = NULL;
709                 ep->com.qp = NULL;
710         }
711 }
712
713 static void connect_reply_upcall(struct iwch_ep *ep, int status)
714 {
715         struct iw_cm_event event;
716
717         pr_debug("%s ep %p status %d\n", __func__, ep, status);
718         memset(&event, 0, sizeof(event));
719         event.event = IW_CM_EVENT_CONNECT_REPLY;
720         event.status = status;
721         memcpy(&event.local_addr, &ep->com.local_addr,
722                sizeof(ep->com.local_addr));
723         memcpy(&event.remote_addr, &ep->com.remote_addr,
724                sizeof(ep->com.remote_addr));
725
726         if ((status == 0) || (status == -ECONNREFUSED)) {
727                 event.private_data_len = ep->plen;
728                 event.private_data = ep->mpa_pkt + sizeof(struct mpa_message);
729         }
730         if (ep->com.cm_id) {
731                 pr_debug("%s ep %p tid %d status %d\n", __func__, ep,
732                          ep->hwtid, status);
733                 ep->com.cm_id->event_handler(ep->com.cm_id, &event);
734         }
735         if (status < 0) {
736                 ep->com.cm_id->rem_ref(ep->com.cm_id);
737                 ep->com.cm_id = NULL;
738                 ep->com.qp = NULL;
739         }
740 }
741
742 static void connect_request_upcall(struct iwch_ep *ep)
743 {
744         struct iw_cm_event event;
745
746         pr_debug("%s ep %p tid %d\n", __func__, ep, ep->hwtid);
747         memset(&event, 0, sizeof(event));
748         event.event = IW_CM_EVENT_CONNECT_REQUEST;
749         memcpy(&event.local_addr, &ep->com.local_addr,
750                sizeof(ep->com.local_addr));
751         memcpy(&event.remote_addr, &ep->com.remote_addr,
752                sizeof(ep->com.local_addr));
753         event.private_data_len = ep->plen;
754         event.private_data = ep->mpa_pkt + sizeof(struct mpa_message);
755         event.provider_data = ep;
756         /*
757          * Until ird/ord negotiation via MPAv2 support is added, send max
758          * supported values
759          */
760         event.ird = event.ord = 8;
761         if (state_read(&ep->parent_ep->com) != DEAD) {
762                 get_ep(&ep->com);
763                 ep->parent_ep->com.cm_id->event_handler(
764                                                 ep->parent_ep->com.cm_id,
765                                                 &event);
766         }
767         put_ep(&ep->parent_ep->com);
768         ep->parent_ep = NULL;
769 }
770
771 static void established_upcall(struct iwch_ep *ep)
772 {
773         struct iw_cm_event event;
774
775         pr_debug("%s ep %p\n", __func__, ep);
776         memset(&event, 0, sizeof(event));
777         event.event = IW_CM_EVENT_ESTABLISHED;
778         /*
779          * Until ird/ord negotiation via MPAv2 support is added, send max
780          * supported values
781          */
782         event.ird = event.ord = 8;
783         if (ep->com.cm_id) {
784                 pr_debug("%s ep %p tid %d\n", __func__, ep, ep->hwtid);
785                 ep->com.cm_id->event_handler(ep->com.cm_id, &event);
786         }
787 }
788
789 static int update_rx_credits(struct iwch_ep *ep, u32 credits)
790 {
791         struct cpl_rx_data_ack *req;
792         struct sk_buff *skb;
793
794         pr_debug("%s ep %p credits %u\n", __func__, ep, credits);
795         skb = get_skb(NULL, sizeof(*req), GFP_KERNEL);
796         if (!skb) {
797                 pr_err("update_rx_credits - cannot alloc skb!\n");
798                 return 0;
799         }
800
801         req = skb_put(skb, sizeof(*req));
802         req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
803         OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_RX_DATA_ACK, ep->hwtid));
804         req->credit_dack = htonl(V_RX_CREDITS(credits) | V_RX_FORCE_ACK(1));
805         skb->priority = CPL_PRIORITY_ACK;
806         iwch_cxgb3_ofld_send(ep->com.tdev, skb);
807         return credits;
808 }
809
810 static void process_mpa_reply(struct iwch_ep *ep, struct sk_buff *skb)
811 {
812         struct mpa_message *mpa;
813         u16 plen;
814         struct iwch_qp_attributes attrs;
815         enum iwch_qp_attr_mask mask;
816         int err;
817
818         pr_debug("%s ep %p\n", __func__, ep);
819
820         /*
821          * Stop mpa timer.  If it expired, then the state has
822          * changed and we bail since ep_timeout already aborted
823          * the connection.
824          */
825         stop_ep_timer(ep);
826         if (state_read(&ep->com) != MPA_REQ_SENT)
827                 return;
828
829         /*
830          * If we get more than the supported amount of private data
831          * then we must fail this connection.
832          */
833         if (ep->mpa_pkt_len + skb->len > sizeof(ep->mpa_pkt)) {
834                 err = -EINVAL;
835                 goto err;
836         }
837
838         /*
839          * copy the new data into our accumulation buffer.
840          */
841         skb_copy_from_linear_data(skb, &(ep->mpa_pkt[ep->mpa_pkt_len]),
842                                   skb->len);
843         ep->mpa_pkt_len += skb->len;
844
845         /*
846          * if we don't even have the mpa message, then bail.
847          */
848         if (ep->mpa_pkt_len < sizeof(*mpa))
849                 return;
850         mpa = (struct mpa_message *) ep->mpa_pkt;
851
852         /* Validate MPA header. */
853         if (mpa->revision != mpa_rev) {
854                 err = -EPROTO;
855                 goto err;
856         }
857         if (memcmp(mpa->key, MPA_KEY_REP, sizeof(mpa->key))) {
858                 err = -EPROTO;
859                 goto err;
860         }
861
862         plen = ntohs(mpa->private_data_size);
863
864         /*
865          * Fail if there's too much private data.
866          */
867         if (plen > MPA_MAX_PRIVATE_DATA) {
868                 err = -EPROTO;
869                 goto err;
870         }
871
872         /*
873          * If plen does not account for pkt size
874          */
875         if (ep->mpa_pkt_len > (sizeof(*mpa) + plen)) {
876                 err = -EPROTO;
877                 goto err;
878         }
879
880         ep->plen = (u8) plen;
881
882         /*
883          * If we don't have all the pdata yet, then bail.
884          * We'll continue process when more data arrives.
885          */
886         if (ep->mpa_pkt_len < (sizeof(*mpa) + plen))
887                 return;
888
889         if (mpa->flags & MPA_REJECT) {
890                 err = -ECONNREFUSED;
891                 goto err;
892         }
893
894         /*
895          * If we get here we have accumulated the entire mpa
896          * start reply message including private data. And
897          * the MPA header is valid.
898          */
899         state_set(&ep->com, FPDU_MODE);
900         ep->mpa_attr.initiator = 1;
901         ep->mpa_attr.crc_enabled = (mpa->flags & MPA_CRC) | crc_enabled ? 1 : 0;
902         ep->mpa_attr.recv_marker_enabled = markers_enabled;
903         ep->mpa_attr.xmit_marker_enabled = mpa->flags & MPA_MARKERS ? 1 : 0;
904         ep->mpa_attr.version = mpa_rev;
905         pr_debug("%s - crc_enabled=%d, recv_marker_enabled=%d, xmit_marker_enabled=%d, version=%d\n",
906                  __func__,
907                  ep->mpa_attr.crc_enabled, ep->mpa_attr.recv_marker_enabled,
908                  ep->mpa_attr.xmit_marker_enabled, ep->mpa_attr.version);
909
910         attrs.mpa_attr = ep->mpa_attr;
911         attrs.max_ird = ep->ird;
912         attrs.max_ord = ep->ord;
913         attrs.llp_stream_handle = ep;
914         attrs.next_state = IWCH_QP_STATE_RTS;
915
916         mask = IWCH_QP_ATTR_NEXT_STATE |
917             IWCH_QP_ATTR_LLP_STREAM_HANDLE | IWCH_QP_ATTR_MPA_ATTR |
918             IWCH_QP_ATTR_MAX_IRD | IWCH_QP_ATTR_MAX_ORD;
919
920         /* bind QP and TID with INIT_WR */
921         err = iwch_modify_qp(ep->com.qp->rhp,
922                              ep->com.qp, mask, &attrs, 1);
923         if (err)
924                 goto err;
925
926         if (peer2peer && iwch_rqes_posted(ep->com.qp) == 0) {
927                 iwch_post_zb_read(ep);
928         }
929
930         goto out;
931 err:
932         abort_connection(ep, skb, GFP_KERNEL);
933 out:
934         connect_reply_upcall(ep, err);
935         return;
936 }
937
938 static void process_mpa_request(struct iwch_ep *ep, struct sk_buff *skb)
939 {
940         struct mpa_message *mpa;
941         u16 plen;
942
943         pr_debug("%s ep %p\n", __func__, ep);
944
945         /*
946          * Stop mpa timer.  If it expired, then the state has
947          * changed and we bail since ep_timeout already aborted
948          * the connection.
949          */
950         stop_ep_timer(ep);
951         if (state_read(&ep->com) != MPA_REQ_WAIT)
952                 return;
953
954         /*
955          * If we get more than the supported amount of private data
956          * then we must fail this connection.
957          */
958         if (ep->mpa_pkt_len + skb->len > sizeof(ep->mpa_pkt)) {
959                 abort_connection(ep, skb, GFP_KERNEL);
960                 return;
961         }
962
963         pr_debug("%s enter (%s line %u)\n", __func__, __FILE__, __LINE__);
964
965         /*
966          * Copy the new data into our accumulation buffer.
967          */
968         skb_copy_from_linear_data(skb, &(ep->mpa_pkt[ep->mpa_pkt_len]),
969                                   skb->len);
970         ep->mpa_pkt_len += skb->len;
971
972         /*
973          * If we don't even have the mpa message, then bail.
974          * We'll continue process when more data arrives.
975          */
976         if (ep->mpa_pkt_len < sizeof(*mpa))
977                 return;
978         pr_debug("%s enter (%s line %u)\n", __func__, __FILE__, __LINE__);
979         mpa = (struct mpa_message *) ep->mpa_pkt;
980
981         /*
982          * Validate MPA Header.
983          */
984         if (mpa->revision != mpa_rev) {
985                 abort_connection(ep, skb, GFP_KERNEL);
986                 return;
987         }
988
989         if (memcmp(mpa->key, MPA_KEY_REQ, sizeof(mpa->key))) {
990                 abort_connection(ep, skb, GFP_KERNEL);
991                 return;
992         }
993
994         plen = ntohs(mpa->private_data_size);
995
996         /*
997          * Fail if there's too much private data.
998          */
999         if (plen > MPA_MAX_PRIVATE_DATA) {
1000                 abort_connection(ep, skb, GFP_KERNEL);
1001                 return;
1002         }
1003
1004         /*
1005          * If plen does not account for pkt size
1006          */
1007         if (ep->mpa_pkt_len > (sizeof(*mpa) + plen)) {
1008                 abort_connection(ep, skb, GFP_KERNEL);
1009                 return;
1010         }
1011         ep->plen = (u8) plen;
1012
1013         /*
1014          * If we don't have all the pdata yet, then bail.
1015          */
1016         if (ep->mpa_pkt_len < (sizeof(*mpa) + plen))
1017                 return;
1018
1019         /*
1020          * If we get here we have accumulated the entire mpa
1021          * start reply message including private data.
1022          */
1023         ep->mpa_attr.initiator = 0;
1024         ep->mpa_attr.crc_enabled = (mpa->flags & MPA_CRC) | crc_enabled ? 1 : 0;
1025         ep->mpa_attr.recv_marker_enabled = markers_enabled;
1026         ep->mpa_attr.xmit_marker_enabled = mpa->flags & MPA_MARKERS ? 1 : 0;
1027         ep->mpa_attr.version = mpa_rev;
1028         pr_debug("%s - crc_enabled=%d, recv_marker_enabled=%d, xmit_marker_enabled=%d, version=%d\n",
1029                  __func__,
1030                  ep->mpa_attr.crc_enabled, ep->mpa_attr.recv_marker_enabled,
1031                  ep->mpa_attr.xmit_marker_enabled, ep->mpa_attr.version);
1032
1033         state_set(&ep->com, MPA_REQ_RCVD);
1034
1035         /* drive upcall */
1036         connect_request_upcall(ep);
1037         return;
1038 }
1039
1040 static int rx_data(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
1041 {
1042         struct iwch_ep *ep = ctx;
1043         struct cpl_rx_data *hdr = cplhdr(skb);
1044         unsigned int dlen = ntohs(hdr->len);
1045
1046         pr_debug("%s ep %p dlen %u\n", __func__, ep, dlen);
1047
1048         skb_pull(skb, sizeof(*hdr));
1049         skb_trim(skb, dlen);
1050
1051         ep->rcv_seq += dlen;
1052         BUG_ON(ep->rcv_seq != (ntohl(hdr->seq) + dlen));
1053
1054         switch (state_read(&ep->com)) {
1055         case MPA_REQ_SENT:
1056                 process_mpa_reply(ep, skb);
1057                 break;
1058         case MPA_REQ_WAIT:
1059                 process_mpa_request(ep, skb);
1060                 break;
1061         case MPA_REP_SENT:
1062                 break;
1063         default:
1064                 pr_err("%s Unexpected streaming data. ep %p state %d tid %d\n",
1065                        __func__, ep, state_read(&ep->com), ep->hwtid);
1066
1067                 /*
1068                  * The ep will timeout and inform the ULP of the failure.
1069                  * See ep_timeout().
1070                  */
1071                 break;
1072         }
1073
1074         /* update RX credits */
1075         update_rx_credits(ep, dlen);
1076
1077         return CPL_RET_BUF_DONE;
1078 }
1079
1080 /*
1081  * Upcall from the adapter indicating data has been transmitted.
1082  * For us its just the single MPA request or reply.  We can now free
1083  * the skb holding the mpa message.
1084  */
1085 static int tx_ack(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
1086 {
1087         struct iwch_ep *ep = ctx;
1088         struct cpl_wr_ack *hdr = cplhdr(skb);
1089         unsigned int credits = ntohs(hdr->credits);
1090         unsigned long flags;
1091         int post_zb = 0;
1092
1093         pr_debug("%s ep %p credits %u\n", __func__, ep, credits);
1094
1095         if (credits == 0) {
1096                 pr_debug("%s 0 credit ack  ep %p state %u\n",
1097                          __func__, ep, state_read(&ep->com));
1098                 return CPL_RET_BUF_DONE;
1099         }
1100
1101         spin_lock_irqsave(&ep->com.lock, flags);
1102         BUG_ON(credits != 1);
1103         dst_confirm(ep->dst);
1104         if (!ep->mpa_skb) {
1105                 pr_debug("%s rdma_init wr_ack ep %p state %u\n",
1106                          __func__, ep, ep->com.state);
1107                 if (ep->mpa_attr.initiator) {
1108                         pr_debug("%s initiator ep %p state %u\n",
1109                                  __func__, ep, ep->com.state);
1110                         if (peer2peer && ep->com.state == FPDU_MODE)
1111                                 post_zb = 1;
1112                 } else {
1113                         pr_debug("%s responder ep %p state %u\n",
1114                                  __func__, ep, ep->com.state);
1115                         if (ep->com.state == MPA_REQ_RCVD) {
1116                                 ep->com.rpl_done = 1;
1117                                 wake_up(&ep->com.waitq);
1118                         }
1119                 }
1120         } else {
1121                 pr_debug("%s lsm ack ep %p state %u freeing skb\n",
1122                          __func__, ep, ep->com.state);
1123                 kfree_skb(ep->mpa_skb);
1124                 ep->mpa_skb = NULL;
1125         }
1126         spin_unlock_irqrestore(&ep->com.lock, flags);
1127         if (post_zb)
1128                 iwch_post_zb_read(ep);
1129         return CPL_RET_BUF_DONE;
1130 }
1131
1132 static int abort_rpl(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
1133 {
1134         struct iwch_ep *ep = ctx;
1135         unsigned long flags;
1136         int release = 0;
1137
1138         pr_debug("%s ep %p\n", __func__, ep);
1139         BUG_ON(!ep);
1140
1141         /*
1142          * We get 2 abort replies from the HW.  The first one must
1143          * be ignored except for scribbling that we need one more.
1144          */
1145         if (!test_and_set_bit(ABORT_REQ_IN_PROGRESS, &ep->com.flags)) {
1146                 return CPL_RET_BUF_DONE;
1147         }
1148
1149         spin_lock_irqsave(&ep->com.lock, flags);
1150         switch (ep->com.state) {
1151         case ABORTING:
1152                 close_complete_upcall(ep);
1153                 __state_set(&ep->com, DEAD);
1154                 release = 1;
1155                 break;
1156         default:
1157                 pr_err("%s ep %p state %d\n", __func__, ep, ep->com.state);
1158                 break;
1159         }
1160         spin_unlock_irqrestore(&ep->com.lock, flags);
1161
1162         if (release)
1163                 release_ep_resources(ep);
1164         return CPL_RET_BUF_DONE;
1165 }
1166
1167 /*
1168  * Return whether a failed active open has allocated a TID
1169  */
1170 static inline int act_open_has_tid(int status)
1171 {
1172         return status != CPL_ERR_TCAM_FULL && status != CPL_ERR_CONN_EXIST &&
1173                status != CPL_ERR_ARP_MISS;
1174 }
1175
1176 static int act_open_rpl(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
1177 {
1178         struct iwch_ep *ep = ctx;
1179         struct cpl_act_open_rpl *rpl = cplhdr(skb);
1180
1181         pr_debug("%s ep %p status %u errno %d\n", __func__, ep, rpl->status,
1182                  status2errno(rpl->status));
1183         connect_reply_upcall(ep, status2errno(rpl->status));
1184         state_set(&ep->com, DEAD);
1185         if (ep->com.tdev->type != T3A && act_open_has_tid(rpl->status))
1186                 release_tid(ep->com.tdev, GET_TID(rpl), NULL);
1187         cxgb3_free_atid(ep->com.tdev, ep->atid);
1188         dst_release(ep->dst);
1189         l2t_release(ep->com.tdev, ep->l2t);
1190         put_ep(&ep->com);
1191         return CPL_RET_BUF_DONE;
1192 }
1193
1194 static int listen_start(struct iwch_listen_ep *ep)
1195 {
1196         struct sk_buff *skb;
1197         struct cpl_pass_open_req *req;
1198
1199         pr_debug("%s ep %p\n", __func__, ep);
1200         skb = get_skb(NULL, sizeof(*req), GFP_KERNEL);
1201         if (!skb) {
1202                 pr_err("t3c_listen_start failed to alloc skb!\n");
1203                 return -ENOMEM;
1204         }
1205
1206         req = skb_put(skb, sizeof(*req));
1207         req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
1208         OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_PASS_OPEN_REQ, ep->stid));
1209         req->local_port = ep->com.local_addr.sin_port;
1210         req->local_ip = ep->com.local_addr.sin_addr.s_addr;
1211         req->peer_port = 0;
1212         req->peer_ip = 0;
1213         req->peer_netmask = 0;
1214         req->opt0h = htonl(F_DELACK | F_TCAM_BYPASS);
1215         req->opt0l = htonl(V_RCV_BUFSIZ(rcv_win>>10));
1216         req->opt1 = htonl(V_CONN_POLICY(CPL_CONN_POLICY_ASK));
1217
1218         skb->priority = 1;
1219         return iwch_cxgb3_ofld_send(ep->com.tdev, skb);
1220 }
1221
1222 static int pass_open_rpl(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
1223 {
1224         struct iwch_listen_ep *ep = ctx;
1225         struct cpl_pass_open_rpl *rpl = cplhdr(skb);
1226
1227         pr_debug("%s ep %p status %d error %d\n", __func__, ep,
1228                  rpl->status, status2errno(rpl->status));
1229         ep->com.rpl_err = status2errno(rpl->status);
1230         ep->com.rpl_done = 1;
1231         wake_up(&ep->com.waitq);
1232
1233         return CPL_RET_BUF_DONE;
1234 }
1235
1236 static int listen_stop(struct iwch_listen_ep *ep)
1237 {
1238         struct sk_buff *skb;
1239         struct cpl_close_listserv_req *req;
1240
1241         pr_debug("%s ep %p\n", __func__, ep);
1242         skb = get_skb(NULL, sizeof(*req), GFP_KERNEL);
1243         if (!skb) {
1244                 pr_err("%s - failed to alloc skb\n", __func__);
1245                 return -ENOMEM;
1246         }
1247         req = skb_put(skb, sizeof(*req));
1248         req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
1249         req->cpu_idx = 0;
1250         OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_CLOSE_LISTSRV_REQ, ep->stid));
1251         skb->priority = 1;
1252         return iwch_cxgb3_ofld_send(ep->com.tdev, skb);
1253 }
1254
1255 static int close_listsrv_rpl(struct t3cdev *tdev, struct sk_buff *skb,
1256                              void *ctx)
1257 {
1258         struct iwch_listen_ep *ep = ctx;
1259         struct cpl_close_listserv_rpl *rpl = cplhdr(skb);
1260
1261         pr_debug("%s ep %p\n", __func__, ep);
1262         ep->com.rpl_err = status2errno(rpl->status);
1263         ep->com.rpl_done = 1;
1264         wake_up(&ep->com.waitq);
1265         return CPL_RET_BUF_DONE;
1266 }
1267
1268 static void accept_cr(struct iwch_ep *ep, __be32 peer_ip, struct sk_buff *skb)
1269 {
1270         struct cpl_pass_accept_rpl *rpl;
1271         unsigned int mtu_idx;
1272         u32 opt0h, opt0l, opt2;
1273         int wscale;
1274
1275         pr_debug("%s ep %p\n", __func__, ep);
1276         BUG_ON(skb_cloned(skb));
1277         skb_trim(skb, sizeof(*rpl));
1278         skb_get(skb);
1279         mtu_idx = find_best_mtu(T3C_DATA(ep->com.tdev), dst_mtu(ep->dst));
1280         wscale = compute_wscale(rcv_win);
1281         opt0h = V_NAGLE(0) |
1282             V_NO_CONG(nocong) |
1283             V_KEEP_ALIVE(1) |
1284             F_TCAM_BYPASS |
1285             V_WND_SCALE(wscale) |
1286             V_MSS_IDX(mtu_idx) |
1287             V_L2T_IDX(ep->l2t->idx) | V_TX_CHANNEL(ep->l2t->smt_idx);
1288         opt0l = V_TOS((ep->tos >> 2) & M_TOS) | V_RCV_BUFSIZ(rcv_win>>10);
1289         opt2 = F_RX_COALESCE_VALID | V_RX_COALESCE(0) | V_FLAVORS_VALID(1) |
1290                V_CONG_CONTROL_FLAVOR(cong_flavor);
1291
1292         rpl = cplhdr(skb);
1293         rpl->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
1294         OPCODE_TID(rpl) = htonl(MK_OPCODE_TID(CPL_PASS_ACCEPT_RPL, ep->hwtid));
1295         rpl->peer_ip = peer_ip;
1296         rpl->opt0h = htonl(opt0h);
1297         rpl->opt0l_status = htonl(opt0l | CPL_PASS_OPEN_ACCEPT);
1298         rpl->opt2 = htonl(opt2);
1299         rpl->rsvd = rpl->opt2;  /* workaround for HW bug */
1300         skb->priority = CPL_PRIORITY_SETUP;
1301         iwch_l2t_send(ep->com.tdev, skb, ep->l2t);
1302
1303         return;
1304 }
1305
1306 static void reject_cr(struct t3cdev *tdev, u32 hwtid, __be32 peer_ip,
1307                       struct sk_buff *skb)
1308 {
1309         pr_debug("%s t3cdev %p tid %u peer_ip %x\n", __func__, tdev, hwtid,
1310                  peer_ip);
1311         BUG_ON(skb_cloned(skb));
1312         skb_trim(skb, sizeof(struct cpl_tid_release));
1313         skb_get(skb);
1314
1315         if (tdev->type != T3A)
1316                 release_tid(tdev, hwtid, skb);
1317         else {
1318                 struct cpl_pass_accept_rpl *rpl;
1319
1320                 rpl = cplhdr(skb);
1321                 skb->priority = CPL_PRIORITY_SETUP;
1322                 rpl->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
1323                 OPCODE_TID(rpl) = htonl(MK_OPCODE_TID(CPL_PASS_ACCEPT_RPL,
1324                                                       hwtid));
1325                 rpl->peer_ip = peer_ip;
1326                 rpl->opt0h = htonl(F_TCAM_BYPASS);
1327                 rpl->opt0l_status = htonl(CPL_PASS_OPEN_REJECT);
1328                 rpl->opt2 = 0;
1329                 rpl->rsvd = rpl->opt2;
1330                 iwch_cxgb3_ofld_send(tdev, skb);
1331         }
1332 }
1333
1334 static int pass_accept_req(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
1335 {
1336         struct iwch_ep *child_ep, *parent_ep = ctx;
1337         struct cpl_pass_accept_req *req = cplhdr(skb);
1338         unsigned int hwtid = GET_TID(req);
1339         struct dst_entry *dst;
1340         struct l2t_entry *l2t;
1341         struct rtable *rt;
1342         struct iff_mac tim;
1343
1344         pr_debug("%s parent ep %p tid %u\n", __func__, parent_ep, hwtid);
1345
1346         if (state_read(&parent_ep->com) != LISTEN) {
1347                 pr_err("%s - listening ep not in LISTEN\n", __func__);
1348                 goto reject;
1349         }
1350
1351         /*
1352          * Find the netdev for this connection request.
1353          */
1354         tim.mac_addr = req->dst_mac;
1355         tim.vlan_tag = ntohs(req->vlan_tag);
1356         if (tdev->ctl(tdev, GET_IFF_FROM_MAC, &tim) < 0 || !tim.dev) {
1357                 pr_err("%s bad dst mac %pM\n", __func__, req->dst_mac);
1358                 goto reject;
1359         }
1360
1361         /* Find output route */
1362         rt = find_route(tdev,
1363                         req->local_ip,
1364                         req->peer_ip,
1365                         req->local_port,
1366                         req->peer_port, G_PASS_OPEN_TOS(ntohl(req->tos_tid)));
1367         if (!rt) {
1368                 pr_err("%s - failed to find dst entry!\n", __func__);
1369                 goto reject;
1370         }
1371         dst = &rt->dst;
1372         l2t = t3_l2t_get(tdev, dst, NULL, &req->peer_ip);
1373         if (!l2t) {
1374                 pr_err("%s - failed to allocate l2t entry!\n", __func__);
1375                 dst_release(dst);
1376                 goto reject;
1377         }
1378         child_ep = alloc_ep(sizeof(*child_ep), GFP_KERNEL);
1379         if (!child_ep) {
1380                 pr_err("%s - failed to allocate ep entry!\n", __func__);
1381                 l2t_release(tdev, l2t);
1382                 dst_release(dst);
1383                 goto reject;
1384         }
1385         state_set(&child_ep->com, CONNECTING);
1386         child_ep->com.tdev = tdev;
1387         child_ep->com.cm_id = NULL;
1388         child_ep->com.local_addr.sin_family = AF_INET;
1389         child_ep->com.local_addr.sin_port = req->local_port;
1390         child_ep->com.local_addr.sin_addr.s_addr = req->local_ip;
1391         child_ep->com.remote_addr.sin_family = AF_INET;
1392         child_ep->com.remote_addr.sin_port = req->peer_port;
1393         child_ep->com.remote_addr.sin_addr.s_addr = req->peer_ip;
1394         get_ep(&parent_ep->com);
1395         child_ep->parent_ep = parent_ep;
1396         child_ep->tos = G_PASS_OPEN_TOS(ntohl(req->tos_tid));
1397         child_ep->l2t = l2t;
1398         child_ep->dst = dst;
1399         child_ep->hwtid = hwtid;
1400         timer_setup(&child_ep->timer, ep_timeout, 0);
1401         cxgb3_insert_tid(tdev, &t3c_client, child_ep, hwtid);
1402         accept_cr(child_ep, req->peer_ip, skb);
1403         goto out;
1404 reject:
1405         reject_cr(tdev, hwtid, req->peer_ip, skb);
1406 out:
1407         return CPL_RET_BUF_DONE;
1408 }
1409
1410 static int pass_establish(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
1411 {
1412         struct iwch_ep *ep = ctx;
1413         struct cpl_pass_establish *req = cplhdr(skb);
1414
1415         pr_debug("%s ep %p\n", __func__, ep);
1416         ep->snd_seq = ntohl(req->snd_isn);
1417         ep->rcv_seq = ntohl(req->rcv_isn);
1418
1419         set_emss(ep, ntohs(req->tcp_opt));
1420
1421         dst_confirm(ep->dst);
1422         state_set(&ep->com, MPA_REQ_WAIT);
1423         start_ep_timer(ep);
1424
1425         return CPL_RET_BUF_DONE;
1426 }
1427
1428 static int peer_close(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
1429 {
1430         struct iwch_ep *ep = ctx;
1431         struct iwch_qp_attributes attrs;
1432         unsigned long flags;
1433         int disconnect = 1;
1434         int release = 0;
1435
1436         pr_debug("%s ep %p\n", __func__, ep);
1437         dst_confirm(ep->dst);
1438
1439         spin_lock_irqsave(&ep->com.lock, flags);
1440         switch (ep->com.state) {
1441         case MPA_REQ_WAIT:
1442                 __state_set(&ep->com, CLOSING);
1443                 break;
1444         case MPA_REQ_SENT:
1445                 __state_set(&ep->com, CLOSING);
1446                 connect_reply_upcall(ep, -ECONNRESET);
1447                 break;
1448         case MPA_REQ_RCVD:
1449
1450                 /*
1451                  * We're gonna mark this puppy DEAD, but keep
1452                  * the reference on it until the ULP accepts or
1453                  * rejects the CR. Also wake up anyone waiting
1454                  * in rdma connection migration (see iwch_accept_cr()).
1455                  */
1456                 __state_set(&ep->com, CLOSING);
1457                 ep->com.rpl_done = 1;
1458                 ep->com.rpl_err = -ECONNRESET;
1459                 pr_debug("waking up ep %p\n", ep);
1460                 wake_up(&ep->com.waitq);
1461                 break;
1462         case MPA_REP_SENT:
1463                 __state_set(&ep->com, CLOSING);
1464                 ep->com.rpl_done = 1;
1465                 ep->com.rpl_err = -ECONNRESET;
1466                 pr_debug("waking up ep %p\n", ep);
1467                 wake_up(&ep->com.waitq);
1468                 break;
1469         case FPDU_MODE:
1470                 start_ep_timer(ep);
1471                 __state_set(&ep->com, CLOSING);
1472                 attrs.next_state = IWCH_QP_STATE_CLOSING;
1473                 iwch_modify_qp(ep->com.qp->rhp, ep->com.qp,
1474                                IWCH_QP_ATTR_NEXT_STATE, &attrs, 1);
1475                 peer_close_upcall(ep);
1476                 break;
1477         case ABORTING:
1478                 disconnect = 0;
1479                 break;
1480         case CLOSING:
1481                 __state_set(&ep->com, MORIBUND);
1482                 disconnect = 0;
1483                 break;
1484         case MORIBUND:
1485                 stop_ep_timer(ep);
1486                 if (ep->com.cm_id && ep->com.qp) {
1487                         attrs.next_state = IWCH_QP_STATE_IDLE;
1488                         iwch_modify_qp(ep->com.qp->rhp, ep->com.qp,
1489                                        IWCH_QP_ATTR_NEXT_STATE, &attrs, 1);
1490                 }
1491                 close_complete_upcall(ep);
1492                 __state_set(&ep->com, DEAD);
1493                 release = 1;
1494                 disconnect = 0;
1495                 break;
1496         case DEAD:
1497                 disconnect = 0;
1498                 break;
1499         default:
1500                 BUG_ON(1);
1501         }
1502         spin_unlock_irqrestore(&ep->com.lock, flags);
1503         if (disconnect)
1504                 iwch_ep_disconnect(ep, 0, GFP_KERNEL);
1505         if (release)
1506                 release_ep_resources(ep);
1507         return CPL_RET_BUF_DONE;
1508 }
1509
1510 /*
1511  * Returns whether an ABORT_REQ_RSS message is a negative advice.
1512  */
1513 static int is_neg_adv_abort(unsigned int status)
1514 {
1515         return status == CPL_ERR_RTX_NEG_ADVICE ||
1516                status == CPL_ERR_PERSIST_NEG_ADVICE;
1517 }
1518
1519 static int peer_abort(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
1520 {
1521         struct cpl_abort_req_rss *req = cplhdr(skb);
1522         struct iwch_ep *ep = ctx;
1523         struct cpl_abort_rpl *rpl;
1524         struct sk_buff *rpl_skb;
1525         struct iwch_qp_attributes attrs;
1526         int ret;
1527         int release = 0;
1528         unsigned long flags;
1529
1530         if (is_neg_adv_abort(req->status)) {
1531                 pr_debug("%s neg_adv_abort ep %p tid %d\n", __func__, ep,
1532                          ep->hwtid);
1533                 t3_l2t_send_event(ep->com.tdev, ep->l2t);
1534                 return CPL_RET_BUF_DONE;
1535         }
1536
1537         /*
1538          * We get 2 peer aborts from the HW.  The first one must
1539          * be ignored except for scribbling that we need one more.
1540          */
1541         if (!test_and_set_bit(PEER_ABORT_IN_PROGRESS, &ep->com.flags)) {
1542                 return CPL_RET_BUF_DONE;
1543         }
1544
1545         spin_lock_irqsave(&ep->com.lock, flags);
1546         pr_debug("%s ep %p state %u\n", __func__, ep, ep->com.state);
1547         switch (ep->com.state) {
1548         case CONNECTING:
1549                 break;
1550         case MPA_REQ_WAIT:
1551                 stop_ep_timer(ep);
1552                 break;
1553         case MPA_REQ_SENT:
1554                 stop_ep_timer(ep);
1555                 connect_reply_upcall(ep, -ECONNRESET);
1556                 break;
1557         case MPA_REP_SENT:
1558                 ep->com.rpl_done = 1;
1559                 ep->com.rpl_err = -ECONNRESET;
1560                 pr_debug("waking up ep %p\n", ep);
1561                 wake_up(&ep->com.waitq);
1562                 break;
1563         case MPA_REQ_RCVD:
1564
1565                 /*
1566                  * We're gonna mark this puppy DEAD, but keep
1567                  * the reference on it until the ULP accepts or
1568                  * rejects the CR. Also wake up anyone waiting
1569                  * in rdma connection migration (see iwch_accept_cr()).
1570                  */
1571                 ep->com.rpl_done = 1;
1572                 ep->com.rpl_err = -ECONNRESET;
1573                 pr_debug("waking up ep %p\n", ep);
1574                 wake_up(&ep->com.waitq);
1575                 break;
1576         case MORIBUND:
1577         case CLOSING:
1578                 stop_ep_timer(ep);
1579                 /*FALLTHROUGH*/
1580         case FPDU_MODE:
1581                 if (ep->com.cm_id && ep->com.qp) {
1582                         attrs.next_state = IWCH_QP_STATE_ERROR;
1583                         ret = iwch_modify_qp(ep->com.qp->rhp,
1584                                      ep->com.qp, IWCH_QP_ATTR_NEXT_STATE,
1585                                      &attrs, 1);
1586                         if (ret)
1587                                 pr_err("%s - qp <- error failed!\n", __func__);
1588                 }
1589                 peer_abort_upcall(ep);
1590                 break;
1591         case ABORTING:
1592                 break;
1593         case DEAD:
1594                 pr_debug("%s PEER_ABORT IN DEAD STATE!!!!\n", __func__);
1595                 spin_unlock_irqrestore(&ep->com.lock, flags);
1596                 return CPL_RET_BUF_DONE;
1597         default:
1598                 BUG_ON(1);
1599                 break;
1600         }
1601         dst_confirm(ep->dst);
1602         if (ep->com.state != ABORTING) {
1603                 __state_set(&ep->com, DEAD);
1604                 release = 1;
1605         }
1606         spin_unlock_irqrestore(&ep->com.lock, flags);
1607
1608         rpl_skb = get_skb(skb, sizeof(*rpl), GFP_KERNEL);
1609         if (!rpl_skb) {
1610                 pr_err("%s - cannot allocate skb!\n", __func__);
1611                 release = 1;
1612                 goto out;
1613         }
1614         rpl_skb->priority = CPL_PRIORITY_DATA;
1615         rpl = skb_put(rpl_skb, sizeof(*rpl));
1616         rpl->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_OFLD_HOST_ABORT_CON_RPL));
1617         rpl->wr.wr_lo = htonl(V_WR_TID(ep->hwtid));
1618         OPCODE_TID(rpl) = htonl(MK_OPCODE_TID(CPL_ABORT_RPL, ep->hwtid));
1619         rpl->cmd = CPL_ABORT_NO_RST;
1620         iwch_cxgb3_ofld_send(ep->com.tdev, rpl_skb);
1621 out:
1622         if (release)
1623                 release_ep_resources(ep);
1624         return CPL_RET_BUF_DONE;
1625 }
1626
1627 static int close_con_rpl(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
1628 {
1629         struct iwch_ep *ep = ctx;
1630         struct iwch_qp_attributes attrs;
1631         unsigned long flags;
1632         int release = 0;
1633
1634         pr_debug("%s ep %p\n", __func__, ep);
1635         BUG_ON(!ep);
1636
1637         /* The cm_id may be null if we failed to connect */
1638         spin_lock_irqsave(&ep->com.lock, flags);
1639         switch (ep->com.state) {
1640         case CLOSING:
1641                 __state_set(&ep->com, MORIBUND);
1642                 break;
1643         case MORIBUND:
1644                 stop_ep_timer(ep);
1645                 if ((ep->com.cm_id) && (ep->com.qp)) {
1646                         attrs.next_state = IWCH_QP_STATE_IDLE;
1647                         iwch_modify_qp(ep->com.qp->rhp,
1648                                              ep->com.qp,
1649                                              IWCH_QP_ATTR_NEXT_STATE,
1650                                              &attrs, 1);
1651                 }
1652                 close_complete_upcall(ep);
1653                 __state_set(&ep->com, DEAD);
1654                 release = 1;
1655                 break;
1656         case ABORTING:
1657         case DEAD:
1658                 break;
1659         default:
1660                 BUG_ON(1);
1661                 break;
1662         }
1663         spin_unlock_irqrestore(&ep->com.lock, flags);
1664         if (release)
1665                 release_ep_resources(ep);
1666         return CPL_RET_BUF_DONE;
1667 }
1668
1669 /*
1670  * T3A does 3 things when a TERM is received:
1671  * 1) send up a CPL_RDMA_TERMINATE message with the TERM packet
1672  * 2) generate an async event on the QP with the TERMINATE opcode
1673  * 3) post a TERMINATE opcode cqe into the associated CQ.
1674  *
1675  * For (1), we save the message in the qp for later consumer consumption.
1676  * For (2), we move the QP into TERMINATE, post a QP event and disconnect.
1677  * For (3), we toss the CQE in cxio_poll_cq().
1678  *
1679  * terminate() handles case (1)...
1680  */
1681 static int terminate(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
1682 {
1683         struct iwch_ep *ep = ctx;
1684
1685         if (state_read(&ep->com) != FPDU_MODE)
1686                 return CPL_RET_BUF_DONE;
1687
1688         pr_debug("%s ep %p\n", __func__, ep);
1689         skb_pull(skb, sizeof(struct cpl_rdma_terminate));
1690         pr_debug("%s saving %d bytes of term msg\n", __func__, skb->len);
1691         skb_copy_from_linear_data(skb, ep->com.qp->attr.terminate_buffer,
1692                                   skb->len);
1693         ep->com.qp->attr.terminate_msg_len = skb->len;
1694         ep->com.qp->attr.is_terminate_local = 0;
1695         return CPL_RET_BUF_DONE;
1696 }
1697
1698 static int ec_status(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
1699 {
1700         struct cpl_rdma_ec_status *rep = cplhdr(skb);
1701         struct iwch_ep *ep = ctx;
1702
1703         pr_debug("%s ep %p tid %u status %d\n", __func__, ep, ep->hwtid,
1704                  rep->status);
1705         if (rep->status) {
1706                 struct iwch_qp_attributes attrs;
1707
1708                 pr_err("%s BAD CLOSE - Aborting tid %u\n",
1709                        __func__, ep->hwtid);
1710                 stop_ep_timer(ep);
1711                 attrs.next_state = IWCH_QP_STATE_ERROR;
1712                 iwch_modify_qp(ep->com.qp->rhp,
1713                                ep->com.qp, IWCH_QP_ATTR_NEXT_STATE,
1714                                &attrs, 1);
1715                 abort_connection(ep, NULL, GFP_KERNEL);
1716         }
1717         return CPL_RET_BUF_DONE;
1718 }
1719
1720 static void ep_timeout(struct timer_list *t)
1721 {
1722         struct iwch_ep *ep = from_timer(ep, t, timer);
1723         struct iwch_qp_attributes attrs;
1724         unsigned long flags;
1725         int abort = 1;
1726
1727         spin_lock_irqsave(&ep->com.lock, flags);
1728         pr_debug("%s ep %p tid %u state %d\n", __func__, ep, ep->hwtid,
1729                  ep->com.state);
1730         switch (ep->com.state) {
1731         case MPA_REQ_SENT:
1732                 __state_set(&ep->com, ABORTING);
1733                 connect_reply_upcall(ep, -ETIMEDOUT);
1734                 break;
1735         case MPA_REQ_WAIT:
1736                 __state_set(&ep->com, ABORTING);
1737                 break;
1738         case CLOSING:
1739         case MORIBUND:
1740                 if (ep->com.cm_id && ep->com.qp) {
1741                         attrs.next_state = IWCH_QP_STATE_ERROR;
1742                         iwch_modify_qp(ep->com.qp->rhp,
1743                                      ep->com.qp, IWCH_QP_ATTR_NEXT_STATE,
1744                                      &attrs, 1);
1745                 }
1746                 __state_set(&ep->com, ABORTING);
1747                 break;
1748         default:
1749                 WARN(1, "%s unexpected state ep %p state %u\n",
1750                         __func__, ep, ep->com.state);
1751                 abort = 0;
1752         }
1753         spin_unlock_irqrestore(&ep->com.lock, flags);
1754         if (abort)
1755                 abort_connection(ep, NULL, GFP_ATOMIC);
1756         put_ep(&ep->com);
1757 }
1758
1759 int iwch_reject_cr(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len)
1760 {
1761         struct iwch_ep *ep = to_ep(cm_id);
1762
1763         pr_debug("%s ep %p tid %u\n", __func__, ep, ep->hwtid);
1764
1765         if (state_read(&ep->com) == DEAD) {
1766                 put_ep(&ep->com);
1767                 return -ECONNRESET;
1768         }
1769         BUG_ON(state_read(&ep->com) != MPA_REQ_RCVD);
1770         if (mpa_rev == 0)
1771                 abort_connection(ep, NULL, GFP_KERNEL);
1772         else {
1773                 send_mpa_reject(ep, pdata, pdata_len);
1774                 iwch_ep_disconnect(ep, 0, GFP_KERNEL);
1775         }
1776         put_ep(&ep->com);
1777         return 0;
1778 }
1779
1780 int iwch_accept_cr(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
1781 {
1782         int err;
1783         struct iwch_qp_attributes attrs;
1784         enum iwch_qp_attr_mask mask;
1785         struct iwch_ep *ep = to_ep(cm_id);
1786         struct iwch_dev *h = to_iwch_dev(cm_id->device);
1787         struct iwch_qp *qp = get_qhp(h, conn_param->qpn);
1788
1789         pr_debug("%s ep %p tid %u\n", __func__, ep, ep->hwtid);
1790         if (state_read(&ep->com) == DEAD) {
1791                 err = -ECONNRESET;
1792                 goto err;
1793         }
1794
1795         BUG_ON(state_read(&ep->com) != MPA_REQ_RCVD);
1796         BUG_ON(!qp);
1797
1798         if ((conn_param->ord > qp->rhp->attr.max_rdma_read_qp_depth) ||
1799             (conn_param->ird > qp->rhp->attr.max_rdma_reads_per_qp)) {
1800                 abort_connection(ep, NULL, GFP_KERNEL);
1801                 err = -EINVAL;
1802                 goto err;
1803         }
1804
1805         cm_id->add_ref(cm_id);
1806         ep->com.cm_id = cm_id;
1807         ep->com.qp = qp;
1808
1809         ep->ird = conn_param->ird;
1810         ep->ord = conn_param->ord;
1811
1812         if (peer2peer && ep->ird == 0)
1813                 ep->ird = 1;
1814
1815         pr_debug("%s %d ird %d ord %d\n", __func__, __LINE__, ep->ird, ep->ord);
1816
1817         /* bind QP to EP and move to RTS */
1818         attrs.mpa_attr = ep->mpa_attr;
1819         attrs.max_ird = ep->ird;
1820         attrs.max_ord = ep->ord;
1821         attrs.llp_stream_handle = ep;
1822         attrs.next_state = IWCH_QP_STATE_RTS;
1823
1824         /* bind QP and TID with INIT_WR */
1825         mask = IWCH_QP_ATTR_NEXT_STATE |
1826                              IWCH_QP_ATTR_LLP_STREAM_HANDLE |
1827                              IWCH_QP_ATTR_MPA_ATTR |
1828                              IWCH_QP_ATTR_MAX_IRD |
1829                              IWCH_QP_ATTR_MAX_ORD;
1830
1831         err = iwch_modify_qp(ep->com.qp->rhp,
1832                              ep->com.qp, mask, &attrs, 1);
1833         if (err)
1834                 goto err1;
1835
1836         /* if needed, wait for wr_ack */
1837         if (iwch_rqes_posted(qp)) {
1838                 wait_event(ep->com.waitq, ep->com.rpl_done);
1839                 err = ep->com.rpl_err;
1840                 if (err)
1841                         goto err1;
1842         }
1843
1844         err = send_mpa_reply(ep, conn_param->private_data,
1845                              conn_param->private_data_len);
1846         if (err)
1847                 goto err1;
1848
1849
1850         state_set(&ep->com, FPDU_MODE);
1851         established_upcall(ep);
1852         put_ep(&ep->com);
1853         return 0;
1854 err1:
1855         ep->com.cm_id = NULL;
1856         ep->com.qp = NULL;
1857         cm_id->rem_ref(cm_id);
1858 err:
1859         put_ep(&ep->com);
1860         return err;
1861 }
1862
1863 static int is_loopback_dst(struct iw_cm_id *cm_id)
1864 {
1865         struct net_device *dev;
1866         struct sockaddr_in *raddr = (struct sockaddr_in *)&cm_id->m_remote_addr;
1867
1868         dev = ip_dev_find(&init_net, raddr->sin_addr.s_addr);
1869         if (!dev)
1870                 return 0;
1871         dev_put(dev);
1872         return 1;
1873 }
1874
1875 int iwch_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
1876 {
1877         struct iwch_dev *h = to_iwch_dev(cm_id->device);
1878         struct iwch_ep *ep;
1879         struct rtable *rt;
1880         int err = 0;
1881         struct sockaddr_in *laddr = (struct sockaddr_in *)&cm_id->m_local_addr;
1882         struct sockaddr_in *raddr = (struct sockaddr_in *)&cm_id->m_remote_addr;
1883
1884         if (cm_id->m_remote_addr.ss_family != PF_INET) {
1885                 err = -ENOSYS;
1886                 goto out;
1887         }
1888
1889         if (is_loopback_dst(cm_id)) {
1890                 err = -ENOSYS;
1891                 goto out;
1892         }
1893
1894         ep = alloc_ep(sizeof(*ep), GFP_KERNEL);
1895         if (!ep) {
1896                 pr_err("%s - cannot alloc ep\n", __func__);
1897                 err = -ENOMEM;
1898                 goto out;
1899         }
1900         timer_setup(&ep->timer, ep_timeout, 0);
1901         ep->plen = conn_param->private_data_len;
1902         if (ep->plen)
1903                 memcpy(ep->mpa_pkt + sizeof(struct mpa_message),
1904                        conn_param->private_data, ep->plen);
1905         ep->ird = conn_param->ird;
1906         ep->ord = conn_param->ord;
1907
1908         if (peer2peer && ep->ord == 0)
1909                 ep->ord = 1;
1910
1911         ep->com.tdev = h->rdev.t3cdev_p;
1912
1913         cm_id->add_ref(cm_id);
1914         ep->com.cm_id = cm_id;
1915         ep->com.qp = get_qhp(h, conn_param->qpn);
1916         BUG_ON(!ep->com.qp);
1917         pr_debug("%s qpn 0x%x qp %p cm_id %p\n", __func__, conn_param->qpn,
1918                  ep->com.qp, cm_id);
1919
1920         /*
1921          * Allocate an active TID to initiate a TCP connection.
1922          */
1923         ep->atid = cxgb3_alloc_atid(h->rdev.t3cdev_p, &t3c_client, ep);
1924         if (ep->atid == -1) {
1925                 pr_err("%s - cannot alloc atid\n", __func__);
1926                 err = -ENOMEM;
1927                 goto fail2;
1928         }
1929
1930         /* find a route */
1931         rt = find_route(h->rdev.t3cdev_p, laddr->sin_addr.s_addr,
1932                         raddr->sin_addr.s_addr, laddr->sin_port,
1933                         raddr->sin_port, IPTOS_LOWDELAY);
1934         if (!rt) {
1935                 pr_err("%s - cannot find route\n", __func__);
1936                 err = -EHOSTUNREACH;
1937                 goto fail3;
1938         }
1939         ep->dst = &rt->dst;
1940         ep->l2t = t3_l2t_get(ep->com.tdev, ep->dst, NULL,
1941                              &raddr->sin_addr.s_addr);
1942         if (!ep->l2t) {
1943                 pr_err("%s - cannot alloc l2e\n", __func__);
1944                 err = -ENOMEM;
1945                 goto fail4;
1946         }
1947
1948         state_set(&ep->com, CONNECTING);
1949         ep->tos = IPTOS_LOWDELAY;
1950         memcpy(&ep->com.local_addr, &cm_id->m_local_addr,
1951                sizeof(ep->com.local_addr));
1952         memcpy(&ep->com.remote_addr, &cm_id->m_remote_addr,
1953                sizeof(ep->com.remote_addr));
1954
1955         /* send connect request to rnic */
1956         err = send_connect(ep);
1957         if (!err)
1958                 goto out;
1959
1960         l2t_release(h->rdev.t3cdev_p, ep->l2t);
1961 fail4:
1962         dst_release(ep->dst);
1963 fail3:
1964         cxgb3_free_atid(ep->com.tdev, ep->atid);
1965 fail2:
1966         cm_id->rem_ref(cm_id);
1967         put_ep(&ep->com);
1968 out:
1969         return err;
1970 }
1971
1972 int iwch_create_listen(struct iw_cm_id *cm_id, int backlog)
1973 {
1974         int err = 0;
1975         struct iwch_dev *h = to_iwch_dev(cm_id->device);
1976         struct iwch_listen_ep *ep;
1977
1978
1979         might_sleep();
1980
1981         if (cm_id->m_local_addr.ss_family != PF_INET) {
1982                 err = -ENOSYS;
1983                 goto fail1;
1984         }
1985
1986         ep = alloc_ep(sizeof(*ep), GFP_KERNEL);
1987         if (!ep) {
1988                 pr_err("%s - cannot alloc ep\n", __func__);
1989                 err = -ENOMEM;
1990                 goto fail1;
1991         }
1992         pr_debug("%s ep %p\n", __func__, ep);
1993         ep->com.tdev = h->rdev.t3cdev_p;
1994         cm_id->add_ref(cm_id);
1995         ep->com.cm_id = cm_id;
1996         ep->backlog = backlog;
1997         memcpy(&ep->com.local_addr, &cm_id->m_local_addr,
1998                sizeof(ep->com.local_addr));
1999
2000         /*
2001          * Allocate a server TID.
2002          */
2003         ep->stid = cxgb3_alloc_stid(h->rdev.t3cdev_p, &t3c_client, ep);
2004         if (ep->stid == -1) {
2005                 pr_err("%s - cannot alloc atid\n", __func__);
2006                 err = -ENOMEM;
2007                 goto fail2;
2008         }
2009
2010         state_set(&ep->com, LISTEN);
2011         err = listen_start(ep);
2012         if (err)
2013                 goto fail3;
2014
2015         /* wait for pass_open_rpl */
2016         wait_event(ep->com.waitq, ep->com.rpl_done);
2017         err = ep->com.rpl_err;
2018         if (!err) {
2019                 cm_id->provider_data = ep;
2020                 goto out;
2021         }
2022 fail3:
2023         cxgb3_free_stid(ep->com.tdev, ep->stid);
2024 fail2:
2025         cm_id->rem_ref(cm_id);
2026         put_ep(&ep->com);
2027 fail1:
2028 out:
2029         return err;
2030 }
2031
2032 int iwch_destroy_listen(struct iw_cm_id *cm_id)
2033 {
2034         int err;
2035         struct iwch_listen_ep *ep = to_listen_ep(cm_id);
2036
2037         pr_debug("%s ep %p\n", __func__, ep);
2038
2039         might_sleep();
2040         state_set(&ep->com, DEAD);
2041         ep->com.rpl_done = 0;
2042         ep->com.rpl_err = 0;
2043         err = listen_stop(ep);
2044         if (err)
2045                 goto done;
2046         wait_event(ep->com.waitq, ep->com.rpl_done);
2047         cxgb3_free_stid(ep->com.tdev, ep->stid);
2048 done:
2049         err = ep->com.rpl_err;
2050         cm_id->rem_ref(cm_id);
2051         put_ep(&ep->com);
2052         return err;
2053 }
2054
2055 int iwch_ep_disconnect(struct iwch_ep *ep, int abrupt, gfp_t gfp)
2056 {
2057         int ret=0;
2058         unsigned long flags;
2059         int close = 0;
2060         int fatal = 0;
2061         struct t3cdev *tdev;
2062         struct cxio_rdev *rdev;
2063
2064         spin_lock_irqsave(&ep->com.lock, flags);
2065
2066         pr_debug("%s ep %p state %s, abrupt %d\n", __func__, ep,
2067                  states[ep->com.state], abrupt);
2068
2069         tdev = (struct t3cdev *)ep->com.tdev;
2070         rdev = (struct cxio_rdev *)tdev->ulp;
2071         if (cxio_fatal_error(rdev)) {
2072                 fatal = 1;
2073                 close_complete_upcall(ep);
2074                 ep->com.state = DEAD;
2075         }
2076         switch (ep->com.state) {
2077         case MPA_REQ_WAIT:
2078         case MPA_REQ_SENT:
2079         case MPA_REQ_RCVD:
2080         case MPA_REP_SENT:
2081         case FPDU_MODE:
2082                 close = 1;
2083                 if (abrupt)
2084                         ep->com.state = ABORTING;
2085                 else {
2086                         ep->com.state = CLOSING;
2087                         start_ep_timer(ep);
2088                 }
2089                 set_bit(CLOSE_SENT, &ep->com.flags);
2090                 break;
2091         case CLOSING:
2092                 if (!test_and_set_bit(CLOSE_SENT, &ep->com.flags)) {
2093                         close = 1;
2094                         if (abrupt) {
2095                                 stop_ep_timer(ep);
2096                                 ep->com.state = ABORTING;
2097                         } else
2098                                 ep->com.state = MORIBUND;
2099                 }
2100                 break;
2101         case MORIBUND:
2102         case ABORTING:
2103         case DEAD:
2104                 pr_debug("%s ignoring disconnect ep %p state %u\n",
2105                          __func__, ep, ep->com.state);
2106                 break;
2107         default:
2108                 BUG();
2109                 break;
2110         }
2111
2112         spin_unlock_irqrestore(&ep->com.lock, flags);
2113         if (close) {
2114                 if (abrupt)
2115                         ret = send_abort(ep, NULL, gfp);
2116                 else
2117                         ret = send_halfclose(ep, gfp);
2118                 if (ret)
2119                         fatal = 1;
2120         }
2121         if (fatal)
2122                 release_ep_resources(ep);
2123         return ret;
2124 }
2125
2126 int iwch_ep_redirect(void *ctx, struct dst_entry *old, struct dst_entry *new,
2127                      struct l2t_entry *l2t)
2128 {
2129         struct iwch_ep *ep = ctx;
2130
2131         if (ep->dst != old)
2132                 return 0;
2133
2134         pr_debug("%s ep %p redirect to dst %p l2t %p\n", __func__, ep, new,
2135                  l2t);
2136         dst_hold(new);
2137         l2t_release(ep->com.tdev, ep->l2t);
2138         ep->l2t = l2t;
2139         dst_release(old);
2140         ep->dst = new;
2141         return 1;
2142 }
2143
2144 /*
2145  * All the CM events are handled on a work queue to have a safe context.
2146  * These are the real handlers that are called from the work queue.
2147  */
2148 static const cxgb3_cpl_handler_func work_handlers[NUM_CPL_CMDS] = {
2149         [CPL_ACT_ESTABLISH]     = act_establish,
2150         [CPL_ACT_OPEN_RPL]      = act_open_rpl,
2151         [CPL_RX_DATA]           = rx_data,
2152         [CPL_TX_DMA_ACK]        = tx_ack,
2153         [CPL_ABORT_RPL_RSS]     = abort_rpl,
2154         [CPL_ABORT_RPL]         = abort_rpl,
2155         [CPL_PASS_OPEN_RPL]     = pass_open_rpl,
2156         [CPL_CLOSE_LISTSRV_RPL] = close_listsrv_rpl,
2157         [CPL_PASS_ACCEPT_REQ]   = pass_accept_req,
2158         [CPL_PASS_ESTABLISH]    = pass_establish,
2159         [CPL_PEER_CLOSE]        = peer_close,
2160         [CPL_ABORT_REQ_RSS]     = peer_abort,
2161         [CPL_CLOSE_CON_RPL]     = close_con_rpl,
2162         [CPL_RDMA_TERMINATE]    = terminate,
2163         [CPL_RDMA_EC_STATUS]    = ec_status,
2164 };
2165
2166 static void process_work(struct work_struct *work)
2167 {
2168         struct sk_buff *skb = NULL;
2169         void *ep;
2170         struct t3cdev *tdev;
2171         int ret;
2172
2173         while ((skb = skb_dequeue(&rxq))) {
2174                 ep = *((void **) (skb->cb));
2175                 tdev = *((struct t3cdev **) (skb->cb + sizeof(void *)));
2176                 ret = work_handlers[G_OPCODE(ntohl((__force __be32)skb->csum))](tdev, skb, ep);
2177                 if (ret & CPL_RET_BUF_DONE)
2178                         kfree_skb(skb);
2179
2180                 /*
2181                  * ep was referenced in sched(), and is freed here.
2182                  */
2183                 put_ep((struct iwch_ep_common *)ep);
2184         }
2185 }
2186
2187 static DECLARE_WORK(skb_work, process_work);
2188
2189 static int sched(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
2190 {
2191         struct iwch_ep_common *epc = ctx;
2192
2193         get_ep(epc);
2194
2195         /*
2196          * Save ctx and tdev in the skb->cb area.
2197          */
2198         *((void **) skb->cb) = ctx;
2199         *((struct t3cdev **) (skb->cb + sizeof(void *))) = tdev;
2200
2201         /*
2202          * Queue the skb and schedule the worker thread.
2203          */
2204         skb_queue_tail(&rxq, skb);
2205         queue_work(workq, &skb_work);
2206         return 0;
2207 }
2208
2209 static int set_tcb_rpl(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
2210 {
2211         struct cpl_set_tcb_rpl *rpl = cplhdr(skb);
2212
2213         if (rpl->status != CPL_ERR_NONE) {
2214                 pr_err("Unexpected SET_TCB_RPL status %u for tid %u\n",
2215                        rpl->status, GET_TID(rpl));
2216         }
2217         return CPL_RET_BUF_DONE;
2218 }
2219
2220 /*
2221  * All upcalls from the T3 Core go to sched() to schedule the
2222  * processing on a work queue.
2223  */
2224 cxgb3_cpl_handler_func t3c_handlers[NUM_CPL_CMDS] = {
2225         [CPL_ACT_ESTABLISH]     = sched,
2226         [CPL_ACT_OPEN_RPL]      = sched,
2227         [CPL_RX_DATA]           = sched,
2228         [CPL_TX_DMA_ACK]        = sched,
2229         [CPL_ABORT_RPL_RSS]     = sched,
2230         [CPL_ABORT_RPL]         = sched,
2231         [CPL_PASS_OPEN_RPL]     = sched,
2232         [CPL_CLOSE_LISTSRV_RPL] = sched,
2233         [CPL_PASS_ACCEPT_REQ]   = sched,
2234         [CPL_PASS_ESTABLISH]    = sched,
2235         [CPL_PEER_CLOSE]        = sched,
2236         [CPL_CLOSE_CON_RPL]     = sched,
2237         [CPL_ABORT_REQ_RSS]     = sched,
2238         [CPL_RDMA_TERMINATE]    = sched,
2239         [CPL_RDMA_EC_STATUS]    = sched,
2240         [CPL_SET_TCB_RPL]       = set_tcb_rpl,
2241 };
2242
2243 int __init iwch_cm_init(void)
2244 {
2245         skb_queue_head_init(&rxq);
2246
2247         workq = alloc_ordered_workqueue("iw_cxgb3", WQ_MEM_RECLAIM);
2248         if (!workq)
2249                 return -ENOMEM;
2250
2251         return 0;
2252 }
2253
2254 void __exit iwch_cm_term(void)
2255 {
2256         flush_workqueue(workq);
2257         destroy_workqueue(workq);
2258 }