Lines Matching refs:ep
146 static void connect_reply_upcall(struct c4iw_ep *ep, int status);
151 static void deref_qp(struct c4iw_ep *ep) in deref_qp() argument
153 c4iw_qp_rem_ref(&ep->com.qp->ibqp); in deref_qp()
154 clear_bit(QP_REFERENCED, &ep->com.flags); in deref_qp()
157 static void ref_qp(struct c4iw_ep *ep) in ref_qp() argument
159 set_bit(QP_REFERENCED, &ep->com.flags); in ref_qp()
160 c4iw_qp_add_ref(&ep->com.qp->ibqp); in ref_qp()
163 static void start_ep_timer(struct c4iw_ep *ep) in start_ep_timer() argument
165 PDBG("%s ep %p\n", __func__, ep); in start_ep_timer()
166 if (timer_pending(&ep->timer)) { in start_ep_timer()
168 __func__, ep); in start_ep_timer()
171 clear_bit(TIMEOUT, &ep->com.flags); in start_ep_timer()
172 c4iw_get_ep(&ep->com); in start_ep_timer()
173 ep->timer.expires = jiffies + ep_timeout_secs * HZ; in start_ep_timer()
174 ep->timer.data = (unsigned long)ep; in start_ep_timer()
175 ep->timer.function = ep_timeout; in start_ep_timer()
176 add_timer(&ep->timer); in start_ep_timer()
179 static int stop_ep_timer(struct c4iw_ep *ep) in stop_ep_timer() argument
181 PDBG("%s ep %p stopping\n", __func__, ep); in stop_ep_timer()
182 del_timer_sync(&ep->timer); in stop_ep_timer()
183 if (!test_and_set_bit(TIMEOUT, &ep->com.flags)) { in stop_ep_timer()
184 c4iw_put_ep(&ep->com); in stop_ep_timer()
236 static void set_emss(struct c4iw_ep *ep, u16 opt) in set_emss() argument
238 ep->emss = ep->com.dev->rdev.lldi.mtus[TCPOPT_MSS_G(opt)] - in set_emss()
239 ((AF_INET == ep->com.remote_addr.ss_family) ? in set_emss()
242 ep->mss = ep->emss; in set_emss()
244 ep->emss -= round_up(TCPOLEN_TIMESTAMP, 4); in set_emss()
245 if (ep->emss < 128) in set_emss()
246 ep->emss = 128; in set_emss()
247 if (ep->emss & 7) in set_emss()
249 TCPOPT_MSS_G(opt), ep->mss, ep->emss); in set_emss()
251 ep->mss, ep->emss); in set_emss()
294 struct c4iw_ep *ep; in _c4iw_free_ep() local
296 ep = container_of(kref, struct c4iw_ep, com.kref); in _c4iw_free_ep()
297 PDBG("%s ep %p state %s\n", __func__, ep, states[state_read(&ep->com)]); in _c4iw_free_ep()
298 if (test_bit(QP_REFERENCED, &ep->com.flags)) in _c4iw_free_ep()
299 deref_qp(ep); in _c4iw_free_ep()
300 if (test_bit(RELEASE_RESOURCES, &ep->com.flags)) { in _c4iw_free_ep()
301 remove_handle(ep->com.dev, &ep->com.dev->hwtid_idr, ep->hwtid); in _c4iw_free_ep()
302 cxgb4_remove_tid(ep->com.dev->rdev.lldi.tids, 0, ep->hwtid); in _c4iw_free_ep()
303 dst_release(ep->dst); in _c4iw_free_ep()
304 cxgb4_l2t_release(ep->l2t); in _c4iw_free_ep()
306 if (test_bit(RELEASE_MAPINFO, &ep->com.flags)) { in _c4iw_free_ep()
307 print_addr(&ep->com, __func__, "remove_mapinfo/mapping"); in _c4iw_free_ep()
308 iwpm_remove_mapinfo(&ep->com.local_addr, in _c4iw_free_ep()
309 &ep->com.mapped_local_addr); in _c4iw_free_ep()
310 iwpm_remove_mapping(&ep->com.local_addr, RDMA_NL_C4IW); in _c4iw_free_ep()
312 kfree(ep); in _c4iw_free_ep()
315 static void release_ep_resources(struct c4iw_ep *ep) in release_ep_resources() argument
317 set_bit(RELEASE_RESOURCES, &ep->com.flags); in release_ep_resources()
318 c4iw_put_ep(&ep->com); in release_ep_resources()
439 struct c4iw_ep *ep = handle; in act_open_req_arp_failure() local
443 connect_reply_upcall(ep, -EHOSTUNREACH); in act_open_req_arp_failure()
444 state_set(&ep->com, DEAD); in act_open_req_arp_failure()
445 remove_handle(ep->com.dev, &ep->com.dev->atid_idr, ep->atid); in act_open_req_arp_failure()
446 cxgb4_free_atid(ep->com.dev->rdev.lldi.tids, ep->atid); in act_open_req_arp_failure()
447 dst_release(ep->dst); in act_open_req_arp_failure()
448 cxgb4_l2t_release(ep->l2t); in act_open_req_arp_failure()
449 c4iw_put_ep(&ep->com); in act_open_req_arp_failure()
466 static void send_flowc(struct c4iw_ep *ep, struct sk_buff *skb) in send_flowc() argument
478 16)) | FW_WR_FLOWID_V(ep->hwtid)); in send_flowc()
482 (ep->com.dev->rdev.lldi.pf)); in send_flowc()
484 flowc->mnemval[1].val = cpu_to_be32(ep->tx_chan); in send_flowc()
486 flowc->mnemval[2].val = cpu_to_be32(ep->tx_chan); in send_flowc()
488 flowc->mnemval[3].val = cpu_to_be32(ep->rss_qid); in send_flowc()
490 flowc->mnemval[4].val = cpu_to_be32(ep->snd_seq); in send_flowc()
492 flowc->mnemval[5].val = cpu_to_be32(ep->rcv_seq); in send_flowc()
494 flowc->mnemval[6].val = cpu_to_be32(ep->snd_win); in send_flowc()
496 flowc->mnemval[7].val = cpu_to_be32(ep->emss); in send_flowc()
506 set_wr_txq(skb, CPL_PRIORITY_DATA, ep->txq_idx); in send_flowc()
507 c4iw_ofld_send(&ep->com.dev->rdev, skb); in send_flowc()
510 static int send_halfclose(struct c4iw_ep *ep, gfp_t gfp) in send_halfclose() argument
516 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in send_halfclose()
522 set_wr_txq(skb, CPL_PRIORITY_DATA, ep->txq_idx); in send_halfclose()
526 INIT_TP_WR(req, ep->hwtid); in send_halfclose()
528 ep->hwtid)); in send_halfclose()
529 return c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t); in send_halfclose()
532 static int send_abort(struct c4iw_ep *ep, struct sk_buff *skb, gfp_t gfp) in send_abort() argument
537 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in send_abort()
544 set_wr_txq(skb, CPL_PRIORITY_DATA, ep->txq_idx); in send_abort()
545 t4_set_arp_err_handler(skb, &ep->com.dev->rdev, abort_arp_failure); in send_abort()
548 INIT_TP_WR(req, ep->hwtid); in send_abort()
549 OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ABORT_REQ, ep->hwtid)); in send_abort()
551 return c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t); in send_abort()
557 static void c4iw_form_pm_msg(struct c4iw_ep *ep, in c4iw_form_pm_msg() argument
560 memcpy(&pm_msg->loc_addr, &ep->com.local_addr, in c4iw_form_pm_msg()
561 sizeof(ep->com.local_addr)); in c4iw_form_pm_msg()
562 memcpy(&pm_msg->rem_addr, &ep->com.remote_addr, in c4iw_form_pm_msg()
563 sizeof(ep->com.remote_addr)); in c4iw_form_pm_msg()
577 static void c4iw_record_pm_msg(struct c4iw_ep *ep, in c4iw_record_pm_msg() argument
580 memcpy(&ep->com.mapped_local_addr, &pm_msg->mapped_loc_addr, in c4iw_record_pm_msg()
581 sizeof(ep->com.mapped_local_addr)); in c4iw_record_pm_msg()
582 memcpy(&ep->com.mapped_remote_addr, &pm_msg->mapped_rem_addr, in c4iw_record_pm_msg()
583 sizeof(ep->com.mapped_remote_addr)); in c4iw_record_pm_msg()
616 static int send_connect(struct c4iw_ep *ep) in send_connect() argument
628 int sizev4 = is_t4(ep->com.dev->rdev.lldi.adapter_type) ? in send_connect()
631 int sizev6 = is_t4(ep->com.dev->rdev.lldi.adapter_type) ? in send_connect()
635 &ep->com.mapped_local_addr; in send_connect()
637 &ep->com.mapped_remote_addr; in send_connect()
639 &ep->com.mapped_local_addr; in send_connect()
641 &ep->com.mapped_remote_addr; in send_connect()
644 wrlen = (ep->com.remote_addr.ss_family == AF_INET) ? in send_connect()
648 PDBG("%s ep %p atid %u\n", __func__, ep, ep->atid); in send_connect()
656 set_wr_txq(skb, CPL_PRIORITY_SETUP, ep->ctrlq_idx); in send_connect()
658 best_mtu(ep->com.dev->rdev.lldi.mtus, ep->mtu, &mtu_idx, in send_connect()
660 (AF_INET == ep->com.remote_addr.ss_family) ? 0 : 1); in send_connect()
667 win = ep->rcv_win >> 10; in send_connect()
676 L2T_IDX_V(ep->l2t->idx) | in send_connect()
677 TX_CHAN_V(ep->tx_chan) | in send_connect()
678 SMAC_SEL_V(ep->smac_idx) | in send_connect()
679 DSCP_V(ep->tos) | in send_connect()
684 RSS_QUEUE_VALID_F | RSS_QUEUE_V(ep->rss_qid); in send_connect()
691 if (is_t5(ep->com.dev->rdev.lldi.adapter_type)) { in send_connect()
696 t4_set_arp_err_handler(skb, ep, act_open_req_arp_failure); in send_connect()
698 if (is_t4(ep->com.dev->rdev.lldi.adapter_type)) { in send_connect()
699 if (ep->com.remote_addr.ss_family == AF_INET) { in send_connect()
704 ((ep->rss_qid << 14) | ep->atid))); in send_connect()
711 ep->com.dev->rdev.lldi.ports[0], in send_connect()
712 ep->l2t)); in send_connect()
720 ((ep->rss_qid<<14)|ep->atid))); in send_connect()
733 ep->com.dev->rdev.lldi.ports[0], in send_connect()
734 ep->l2t)); in send_connect()
743 if (ep->com.remote_addr.ss_family == AF_INET) { in send_connect()
749 ((ep->rss_qid << 14) | ep->atid))); in send_connect()
757 ep->com.dev->rdev.lldi.ports[0], in send_connect()
758 ep->l2t))); in send_connect()
769 ((ep->rss_qid<<14)|ep->atid))); in send_connect()
783 ep->com.dev->rdev.lldi.ports[0], in send_connect()
784 ep->l2t))); in send_connect()
792 set_bit(ACT_OPEN_REQ, &ep->com.history); in send_connect()
793 return c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t); in send_connect()
796 static void send_mpa_req(struct c4iw_ep *ep, struct sk_buff *skb, in send_mpa_req() argument
804 PDBG("%s ep %p tid %u pd_len %d\n", __func__, ep, ep->hwtid, ep->plen); in send_mpa_req()
808 mpalen = sizeof(*mpa) + ep->plen; in send_mpa_req()
814 connect_reply_upcall(ep, -ENOMEM); in send_mpa_req()
817 set_wr_txq(skb, CPL_PRIORITY_DATA, ep->txq_idx); in send_mpa_req()
826 FW_WR_FLOWID_V(ep->hwtid) | in send_mpa_req()
838 mpa->private_data_size = htons(ep->plen); in send_mpa_req()
841 ep->tried_with_mpa_v1 = 1; in send_mpa_req()
842 ep->retry_with_mpa_v1 = 0; in send_mpa_req()
848 PDBG("%s initiator ird %u ord %u\n", __func__, ep->ird, in send_mpa_req()
849 ep->ord); in send_mpa_req()
850 mpa_v2_params.ird = htons((u16)ep->ird); in send_mpa_req()
851 mpa_v2_params.ord = htons((u16)ep->ord); in send_mpa_req()
865 if (ep->plen) in send_mpa_req()
868 ep->mpa_pkt + sizeof(*mpa), ep->plen); in send_mpa_req()
870 if (ep->plen) in send_mpa_req()
872 ep->mpa_pkt + sizeof(*mpa), ep->plen); in send_mpa_req()
881 BUG_ON(ep->mpa_skb); in send_mpa_req()
882 ep->mpa_skb = skb; in send_mpa_req()
883 c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t); in send_mpa_req()
884 start_ep_timer(ep); in send_mpa_req()
885 __state_set(&ep->com, MPA_REQ_SENT); in send_mpa_req()
886 ep->mpa_attr.initiator = 1; in send_mpa_req()
887 ep->snd_seq += mpalen; in send_mpa_req()
891 static int send_mpa_reject(struct c4iw_ep *ep, const void *pdata, u8 plen) in send_mpa_reject() argument
899 PDBG("%s ep %p tid %u pd_len %d\n", __func__, ep, ep->hwtid, ep->plen); in send_mpa_reject()
902 if (ep->mpa_attr.version == 2 && ep->mpa_attr.enhanced_rdma_conn) in send_mpa_reject()
911 set_wr_txq(skb, CPL_PRIORITY_DATA, ep->txq_idx); in send_mpa_reject()
920 FW_WR_FLOWID_V(ep->hwtid) | in send_mpa_reject()
931 mpa->revision = ep->mpa_attr.version; in send_mpa_reject()
934 if (ep->mpa_attr.version == 2 && ep->mpa_attr.enhanced_rdma_conn) { in send_mpa_reject()
938 mpa_v2_params.ird = htons(((u16)ep->ird) | in send_mpa_reject()
941 mpa_v2_params.ord = htons(((u16)ep->ord) | (peer2peer ? in send_mpa_reject()
950 if (ep->plen) in send_mpa_reject()
963 set_wr_txq(skb, CPL_PRIORITY_DATA, ep->txq_idx); in send_mpa_reject()
965 BUG_ON(ep->mpa_skb); in send_mpa_reject()
966 ep->mpa_skb = skb; in send_mpa_reject()
967 ep->snd_seq += mpalen; in send_mpa_reject()
968 return c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t); in send_mpa_reject()
971 static int send_mpa_reply(struct c4iw_ep *ep, const void *pdata, u8 plen) in send_mpa_reply() argument
979 PDBG("%s ep %p tid %u pd_len %d\n", __func__, ep, ep->hwtid, ep->plen); in send_mpa_reply()
982 if (ep->mpa_attr.version == 2 && ep->mpa_attr.enhanced_rdma_conn) in send_mpa_reply()
991 set_wr_txq(skb, CPL_PRIORITY_DATA, ep->txq_idx); in send_mpa_reply()
1000 FW_WR_FLOWID_V(ep->hwtid) | in send_mpa_reply()
1010 mpa->flags = (ep->mpa_attr.crc_enabled ? MPA_CRC : 0) | in send_mpa_reply()
1012 mpa->revision = ep->mpa_attr.version; in send_mpa_reply()
1015 if (ep->mpa_attr.version == 2 && ep->mpa_attr.enhanced_rdma_conn) { in send_mpa_reply()
1019 mpa_v2_params.ird = htons((u16)ep->ird); in send_mpa_reply()
1020 mpa_v2_params.ord = htons((u16)ep->ord); in send_mpa_reply()
1021 if (peer2peer && (ep->mpa_attr.p2p_type != in send_mpa_reply()
1036 if (ep->plen) in send_mpa_reply()
1050 ep->mpa_skb = skb; in send_mpa_reply()
1051 __state_set(&ep->com, MPA_REP_SENT); in send_mpa_reply()
1052 ep->snd_seq += mpalen; in send_mpa_reply()
1053 return c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t); in send_mpa_reply()
1058 struct c4iw_ep *ep; in act_establish() local
1064 ep = lookup_atid(t, atid); in act_establish()
1066 PDBG("%s ep %p tid %u snd_isn %u rcv_isn %u\n", __func__, ep, tid, in act_establish()
1069 mutex_lock(&ep->com.mutex); in act_establish()
1070 dst_confirm(ep->dst); in act_establish()
1073 ep->hwtid = tid; in act_establish()
1074 cxgb4_insert_tid(t, ep, tid); in act_establish()
1075 insert_handle(dev, &dev->hwtid_idr, ep, ep->hwtid); in act_establish()
1077 ep->snd_seq = be32_to_cpu(req->snd_isn); in act_establish()
1078 ep->rcv_seq = be32_to_cpu(req->rcv_isn); in act_establish()
1080 set_emss(ep, ntohs(req->tcp_opt)); in act_establish()
1083 remove_handle(ep->com.dev, &ep->com.dev->atid_idr, atid); in act_establish()
1085 set_bit(ACT_ESTAB, &ep->com.history); in act_establish()
1088 send_flowc(ep, NULL); in act_establish()
1089 if (ep->retry_with_mpa_v1) in act_establish()
1090 send_mpa_req(ep, skb, 1); in act_establish()
1092 send_mpa_req(ep, skb, mpa_rev); in act_establish()
1093 mutex_unlock(&ep->com.mutex); in act_establish()
1097 static void close_complete_upcall(struct c4iw_ep *ep, int status) in close_complete_upcall() argument
1101 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in close_complete_upcall()
1105 if (ep->com.cm_id) { in close_complete_upcall()
1107 ep, ep->com.cm_id, ep->hwtid); in close_complete_upcall()
1108 ep->com.cm_id->event_handler(ep->com.cm_id, &event); in close_complete_upcall()
1109 ep->com.cm_id->rem_ref(ep->com.cm_id); in close_complete_upcall()
1110 ep->com.cm_id = NULL; in close_complete_upcall()
1111 set_bit(CLOSE_UPCALL, &ep->com.history); in close_complete_upcall()
1115 static int abort_connection(struct c4iw_ep *ep, struct sk_buff *skb, gfp_t gfp) in abort_connection() argument
1117 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in abort_connection()
1118 __state_set(&ep->com, ABORTING); in abort_connection()
1119 set_bit(ABORT_CONN, &ep->com.history); in abort_connection()
1120 return send_abort(ep, skb, gfp); in abort_connection()
1123 static void peer_close_upcall(struct c4iw_ep *ep) in peer_close_upcall() argument
1127 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in peer_close_upcall()
1130 if (ep->com.cm_id) { in peer_close_upcall()
1132 ep, ep->com.cm_id, ep->hwtid); in peer_close_upcall()
1133 ep->com.cm_id->event_handler(ep->com.cm_id, &event); in peer_close_upcall()
1134 set_bit(DISCONN_UPCALL, &ep->com.history); in peer_close_upcall()
1138 static void peer_abort_upcall(struct c4iw_ep *ep) in peer_abort_upcall() argument
1142 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in peer_abort_upcall()
1146 if (ep->com.cm_id) { in peer_abort_upcall()
1147 PDBG("abort delivered ep %p cm_id %p tid %u\n", ep, in peer_abort_upcall()
1148 ep->com.cm_id, ep->hwtid); in peer_abort_upcall()
1149 ep->com.cm_id->event_handler(ep->com.cm_id, &event); in peer_abort_upcall()
1150 ep->com.cm_id->rem_ref(ep->com.cm_id); in peer_abort_upcall()
1151 ep->com.cm_id = NULL; in peer_abort_upcall()
1152 set_bit(ABORT_UPCALL, &ep->com.history); in peer_abort_upcall()
1156 static void connect_reply_upcall(struct c4iw_ep *ep, int status) in connect_reply_upcall() argument
1160 PDBG("%s ep %p tid %u status %d\n", __func__, ep, ep->hwtid, status); in connect_reply_upcall()
1164 memcpy(&event.local_addr, &ep->com.local_addr, in connect_reply_upcall()
1165 sizeof(ep->com.local_addr)); in connect_reply_upcall()
1166 memcpy(&event.remote_addr, &ep->com.remote_addr, in connect_reply_upcall()
1167 sizeof(ep->com.remote_addr)); in connect_reply_upcall()
1170 if (!ep->tried_with_mpa_v1) { in connect_reply_upcall()
1172 event.private_data_len = ep->plen - in connect_reply_upcall()
1174 event.private_data = ep->mpa_pkt + in connect_reply_upcall()
1179 event.private_data_len = ep->plen; in connect_reply_upcall()
1180 event.private_data = ep->mpa_pkt + in connect_reply_upcall()
1185 PDBG("%s ep %p tid %u status %d\n", __func__, ep, in connect_reply_upcall()
1186 ep->hwtid, status); in connect_reply_upcall()
1187 set_bit(CONN_RPL_UPCALL, &ep->com.history); in connect_reply_upcall()
1188 ep->com.cm_id->event_handler(ep->com.cm_id, &event); in connect_reply_upcall()
1191 ep->com.cm_id->rem_ref(ep->com.cm_id); in connect_reply_upcall()
1192 ep->com.cm_id = NULL; in connect_reply_upcall()
1196 static int connect_request_upcall(struct c4iw_ep *ep) in connect_request_upcall() argument
1201 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in connect_request_upcall()
1204 memcpy(&event.local_addr, &ep->com.local_addr, in connect_request_upcall()
1205 sizeof(ep->com.local_addr)); in connect_request_upcall()
1206 memcpy(&event.remote_addr, &ep->com.remote_addr, in connect_request_upcall()
1207 sizeof(ep->com.remote_addr)); in connect_request_upcall()
1208 event.provider_data = ep; in connect_request_upcall()
1209 if (!ep->tried_with_mpa_v1) { in connect_request_upcall()
1211 event.ord = ep->ord; in connect_request_upcall()
1212 event.ird = ep->ird; in connect_request_upcall()
1213 event.private_data_len = ep->plen - in connect_request_upcall()
1215 event.private_data = ep->mpa_pkt + sizeof(struct mpa_message) + in connect_request_upcall()
1219 event.ord = cur_max_read_depth(ep->com.dev); in connect_request_upcall()
1220 event.ird = cur_max_read_depth(ep->com.dev); in connect_request_upcall()
1221 event.private_data_len = ep->plen; in connect_request_upcall()
1222 event.private_data = ep->mpa_pkt + sizeof(struct mpa_message); in connect_request_upcall()
1224 c4iw_get_ep(&ep->com); in connect_request_upcall()
1225 ret = ep->parent_ep->com.cm_id->event_handler(ep->parent_ep->com.cm_id, in connect_request_upcall()
1228 c4iw_put_ep(&ep->com); in connect_request_upcall()
1229 set_bit(CONNREQ_UPCALL, &ep->com.history); in connect_request_upcall()
1230 c4iw_put_ep(&ep->parent_ep->com); in connect_request_upcall()
1234 static void established_upcall(struct c4iw_ep *ep) in established_upcall() argument
1238 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in established_upcall()
1241 event.ird = ep->ird; in established_upcall()
1242 event.ord = ep->ord; in established_upcall()
1243 if (ep->com.cm_id) { in established_upcall()
1244 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in established_upcall()
1245 ep->com.cm_id->event_handler(ep->com.cm_id, &event); in established_upcall()
1246 set_bit(ESTAB_UPCALL, &ep->com.history); in established_upcall()
1250 static int update_rx_credits(struct c4iw_ep *ep, u32 credits) in update_rx_credits() argument
1256 PDBG("%s ep %p tid %u credits %u\n", __func__, ep, ep->hwtid, credits); in update_rx_credits()
1268 if (ep->rcv_win > RCV_BUFSIZ_M * 1024) in update_rx_credits()
1269 credits += ep->rcv_win - RCV_BUFSIZ_M * 1024; in update_rx_credits()
1273 INIT_TP_WR(req, ep->hwtid); in update_rx_credits()
1275 ep->hwtid)); in update_rx_credits()
1279 set_wr_txq(skb, CPL_PRIORITY_ACK, ep->ctrlq_idx); in update_rx_credits()
1280 c4iw_ofld_send(&ep->com.dev->rdev, skb); in update_rx_credits()
1286 static int process_mpa_reply(struct c4iw_ep *ep, struct sk_buff *skb) in process_mpa_reply() argument
1298 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in process_mpa_reply()
1305 if (stop_ep_timer(ep)) in process_mpa_reply()
1312 if (ep->mpa_pkt_len + skb->len > sizeof(ep->mpa_pkt)) { in process_mpa_reply()
1320 skb_copy_from_linear_data(skb, &(ep->mpa_pkt[ep->mpa_pkt_len]), in process_mpa_reply()
1322 ep->mpa_pkt_len += skb->len; in process_mpa_reply()
1327 if (ep->mpa_pkt_len < sizeof(*mpa)) in process_mpa_reply()
1329 mpa = (struct mpa_message *) ep->mpa_pkt; in process_mpa_reply()
1356 if (ep->mpa_pkt_len > (sizeof(*mpa) + plen)) { in process_mpa_reply()
1361 ep->plen = (u8) plen; in process_mpa_reply()
1367 if (ep->mpa_pkt_len < (sizeof(*mpa) + plen)) in process_mpa_reply()
1380 __state_set(&ep->com, FPDU_MODE); in process_mpa_reply()
1381 ep->mpa_attr.crc_enabled = (mpa->flags & MPA_CRC) | crc_enabled ? 1 : 0; in process_mpa_reply()
1382 ep->mpa_attr.recv_marker_enabled = markers_enabled; in process_mpa_reply()
1383 ep->mpa_attr.xmit_marker_enabled = mpa->flags & MPA_MARKERS ? 1 : 0; in process_mpa_reply()
1384 ep->mpa_attr.version = mpa->revision; in process_mpa_reply()
1385 ep->mpa_attr.p2p_type = FW_RI_INIT_P2PTYPE_DISABLED; in process_mpa_reply()
1388 ep->mpa_attr.enhanced_rdma_conn = in process_mpa_reply()
1390 if (ep->mpa_attr.enhanced_rdma_conn) { in process_mpa_reply()
1392 (ep->mpa_pkt + sizeof(*mpa)); in process_mpa_reply()
1398 __func__, resp_ird, resp_ord, ep->ird, ep->ord); in process_mpa_reply()
1405 if (ep->ird < resp_ord) { in process_mpa_reply()
1407 ep->com.dev->rdev.lldi.max_ordird_qp) in process_mpa_reply()
1408 ep->ird = resp_ord; in process_mpa_reply()
1411 } else if (ep->ird > resp_ord) { in process_mpa_reply()
1412 ep->ird = resp_ord; in process_mpa_reply()
1414 if (ep->ord > resp_ird) { in process_mpa_reply()
1416 ep->ord = resp_ird; in process_mpa_reply()
1422 ep->ird = resp_ord; in process_mpa_reply()
1423 ep->ord = resp_ird; in process_mpa_reply()
1430 ep->mpa_attr.p2p_type = in process_mpa_reply()
1434 ep->mpa_attr.p2p_type = in process_mpa_reply()
1440 ep->mpa_attr.p2p_type = p2p_type; in process_mpa_reply()
1444 "%d\n", __func__, ep->mpa_attr.crc_enabled, in process_mpa_reply()
1445 ep->mpa_attr.recv_marker_enabled, in process_mpa_reply()
1446 ep->mpa_attr.xmit_marker_enabled, ep->mpa_attr.version, in process_mpa_reply()
1447 ep->mpa_attr.p2p_type, p2p_type); in process_mpa_reply()
1455 if ((ep->mpa_attr.version == 2) && peer2peer && in process_mpa_reply()
1456 (ep->mpa_attr.p2p_type != p2p_type)) { in process_mpa_reply()
1457 ep->mpa_attr.p2p_type = FW_RI_INIT_P2PTYPE_DISABLED; in process_mpa_reply()
1461 attrs.mpa_attr = ep->mpa_attr; in process_mpa_reply()
1462 attrs.max_ird = ep->ird; in process_mpa_reply()
1463 attrs.max_ord = ep->ord; in process_mpa_reply()
1464 attrs.llp_stream_handle = ep; in process_mpa_reply()
1472 err = c4iw_modify_qp(ep->com.qp->rhp, in process_mpa_reply()
1473 ep->com.qp, mask, &attrs, 1); in process_mpa_reply()
1487 err = c4iw_modify_qp(ep->com.qp->rhp, ep->com.qp, in process_mpa_reply()
1507 err = c4iw_modify_qp(ep->com.qp->rhp, ep->com.qp, in process_mpa_reply()
1515 __state_set(&ep->com, ABORTING); in process_mpa_reply()
1516 send_abort(ep, skb, GFP_KERNEL); in process_mpa_reply()
1518 connect_reply_upcall(ep, err); in process_mpa_reply()
1522 static void process_mpa_request(struct c4iw_ep *ep, struct sk_buff *skb) in process_mpa_request() argument
1528 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in process_mpa_request()
1534 if (ep->mpa_pkt_len + skb->len > sizeof(ep->mpa_pkt)) { in process_mpa_request()
1535 (void)stop_ep_timer(ep); in process_mpa_request()
1536 abort_connection(ep, skb, GFP_KERNEL); in process_mpa_request()
1545 skb_copy_from_linear_data(skb, &(ep->mpa_pkt[ep->mpa_pkt_len]), in process_mpa_request()
1547 ep->mpa_pkt_len += skb->len; in process_mpa_request()
1553 if (ep->mpa_pkt_len < sizeof(*mpa)) in process_mpa_request()
1557 mpa = (struct mpa_message *) ep->mpa_pkt; in process_mpa_request()
1565 (void)stop_ep_timer(ep); in process_mpa_request()
1566 abort_connection(ep, skb, GFP_KERNEL); in process_mpa_request()
1571 (void)stop_ep_timer(ep); in process_mpa_request()
1572 abort_connection(ep, skb, GFP_KERNEL); in process_mpa_request()
1582 (void)stop_ep_timer(ep); in process_mpa_request()
1583 abort_connection(ep, skb, GFP_KERNEL); in process_mpa_request()
1590 if (ep->mpa_pkt_len > (sizeof(*mpa) + plen)) { in process_mpa_request()
1591 (void)stop_ep_timer(ep); in process_mpa_request()
1592 abort_connection(ep, skb, GFP_KERNEL); in process_mpa_request()
1595 ep->plen = (u8) plen; in process_mpa_request()
1600 if (ep->mpa_pkt_len < (sizeof(*mpa) + plen)) in process_mpa_request()
1607 ep->mpa_attr.initiator = 0; in process_mpa_request()
1608 ep->mpa_attr.crc_enabled = (mpa->flags & MPA_CRC) | crc_enabled ? 1 : 0; in process_mpa_request()
1609 ep->mpa_attr.recv_marker_enabled = markers_enabled; in process_mpa_request()
1610 ep->mpa_attr.xmit_marker_enabled = mpa->flags & MPA_MARKERS ? 1 : 0; in process_mpa_request()
1611 ep->mpa_attr.version = mpa->revision; in process_mpa_request()
1613 ep->tried_with_mpa_v1 = 1; in process_mpa_request()
1614 ep->mpa_attr.p2p_type = FW_RI_INIT_P2PTYPE_DISABLED; in process_mpa_request()
1617 ep->mpa_attr.enhanced_rdma_conn = in process_mpa_request()
1619 if (ep->mpa_attr.enhanced_rdma_conn) { in process_mpa_request()
1621 (ep->mpa_pkt + sizeof(*mpa)); in process_mpa_request()
1622 ep->ird = ntohs(mpa_v2_params->ird) & in process_mpa_request()
1624 ep->ord = ntohs(mpa_v2_params->ord) & in process_mpa_request()
1626 PDBG("%s initiator ird %u ord %u\n", __func__, ep->ird, in process_mpa_request()
1627 ep->ord); in process_mpa_request()
1632 ep->mpa_attr.p2p_type = in process_mpa_request()
1636 ep->mpa_attr.p2p_type = in process_mpa_request()
1642 ep->mpa_attr.p2p_type = p2p_type; in process_mpa_request()
1646 ep->mpa_attr.crc_enabled, ep->mpa_attr.recv_marker_enabled, in process_mpa_request()
1647 ep->mpa_attr.xmit_marker_enabled, ep->mpa_attr.version, in process_mpa_request()
1648 ep->mpa_attr.p2p_type); in process_mpa_request()
1655 if (!stop_ep_timer(ep)) { in process_mpa_request()
1656 __state_set(&ep->com, MPA_REQ_RCVD); in process_mpa_request()
1659 mutex_lock_nested(&ep->parent_ep->com.mutex, in process_mpa_request()
1661 if (ep->parent_ep->com.state != DEAD) { in process_mpa_request()
1662 if (connect_request_upcall(ep)) in process_mpa_request()
1663 abort_connection(ep, skb, GFP_KERNEL); in process_mpa_request()
1665 abort_connection(ep, skb, GFP_KERNEL); in process_mpa_request()
1667 mutex_unlock(&ep->parent_ep->com.mutex); in process_mpa_request()
1674 struct c4iw_ep *ep; in rx_data() local
1682 ep = lookup_tid(t, tid); in rx_data()
1683 if (!ep) in rx_data()
1685 PDBG("%s ep %p tid %u dlen %u\n", __func__, ep, ep->hwtid, dlen); in rx_data()
1688 mutex_lock(&ep->com.mutex); in rx_data()
1691 update_rx_credits(ep, dlen); in rx_data()
1693 switch (ep->com.state) { in rx_data()
1695 ep->rcv_seq += dlen; in rx_data()
1696 disconnect = process_mpa_reply(ep, skb); in rx_data()
1699 ep->rcv_seq += dlen; in rx_data()
1700 process_mpa_request(ep, skb); in rx_data()
1704 BUG_ON(!ep->com.qp); in rx_data()
1708 __func__, ep->com.qp->wq.sq.qid, ep, in rx_data()
1709 ep->com.state, ep->hwtid, status); in rx_data()
1711 c4iw_modify_qp(ep->com.qp->rhp, ep->com.qp, in rx_data()
1719 mutex_unlock(&ep->com.mutex); in rx_data()
1721 c4iw_ep_disconnect(ep, 0, GFP_KERNEL); in rx_data()
1727 struct c4iw_ep *ep; in abort_rpl() local
1733 ep = lookup_tid(t, tid); in abort_rpl()
1734 if (!ep) { in abort_rpl()
1738 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in abort_rpl()
1739 mutex_lock(&ep->com.mutex); in abort_rpl()
1740 switch (ep->com.state) { in abort_rpl()
1742 c4iw_wake_up(&ep->com.wr_wait, -ECONNRESET); in abort_rpl()
1743 __state_set(&ep->com, DEAD); in abort_rpl()
1748 __func__, ep, ep->com.state); in abort_rpl()
1751 mutex_unlock(&ep->com.mutex); in abort_rpl()
1754 release_ep_resources(ep); in abort_rpl()
1758 static void send_fw_act_open_req(struct c4iw_ep *ep, unsigned int atid) in send_fw_act_open_req() argument
1773 ep->com.dev->rdev.lldi.ports[0], in send_fw_act_open_req()
1774 ep->l2t)); in send_fw_act_open_req()
1775 sin = (struct sockaddr_in *)&ep->com.mapped_local_addr; in send_fw_act_open_req()
1778 sin = (struct sockaddr_in *)&ep->com.mapped_remote_addr; in send_fw_act_open_req()
1788 best_mtu(ep->com.dev->rdev.lldi.mtus, ep->mtu, &mtu_idx, in send_fw_act_open_req()
1790 (AF_INET == ep->com.remote_addr.ss_family) ? 0 : 1); in send_fw_act_open_req()
1797 win = ep->rcv_win >> 10; in send_fw_act_open_req()
1807 L2T_IDX_V(ep->l2t->idx) | in send_fw_act_open_req()
1808 TX_CHAN_V(ep->tx_chan) | in send_fw_act_open_req()
1809 SMAC_SEL_V(ep->smac_idx) | in send_fw_act_open_req()
1810 DSCP_V(ep->tos) | in send_fw_act_open_req()
1814 TX_QUEUE_V(ep->com.dev->rdev.lldi.tx_modq[ep->tx_chan]) | in send_fw_act_open_req()
1817 RSS_QUEUE_VALID_F | RSS_QUEUE_V(ep->rss_qid)); in send_fw_act_open_req()
1826 set_wr_txq(skb, CPL_PRIORITY_CONTROL, ep->ctrlq_idx); in send_fw_act_open_req()
1827 set_bit(ACT_OFLD_CONN, &ep->com.history); in send_fw_act_open_req()
1828 c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t); in send_fw_act_open_req()
1863 static void set_tcp_window(struct c4iw_ep *ep, struct port_info *pi) in set_tcp_window() argument
1865 ep->snd_win = snd_win; in set_tcp_window()
1866 ep->rcv_win = rcv_win; in set_tcp_window()
1867 PDBG("%s snd_win %d rcv_win %d\n", __func__, ep->snd_win, ep->rcv_win); in set_tcp_window()
1872 static int import_ep(struct c4iw_ep *ep, int iptype, __u8 *peer_ip, in import_ep() argument
1903 ep->l2t = cxgb4_l2t_get(cdev->rdev.lldi.l2t, in import_ep()
1905 if (!ep->l2t) in import_ep()
1907 ep->mtu = pdev->mtu; in import_ep()
1908 ep->tx_chan = cxgb4_port_chan(pdev); in import_ep()
1909 ep->smac_idx = (cxgb4_port_viid(pdev) & 0x7F) << 1; in import_ep()
1912 ep->txq_idx = cxgb4_port_idx(pdev) * step; in import_ep()
1915 ep->ctrlq_idx = cxgb4_port_idx(pdev); in import_ep()
1916 ep->rss_qid = cdev->rdev.lldi.rxq_ids[ in import_ep()
1918 set_tcp_window(ep, (struct port_info *)netdev_priv(pdev)); in import_ep()
1922 ep->l2t = cxgb4_l2t_get(cdev->rdev.lldi.l2t, in import_ep()
1924 if (!ep->l2t) in import_ep()
1926 ep->mtu = dst_mtu(dst); in import_ep()
1927 ep->tx_chan = cxgb4_port_chan(pdev); in import_ep()
1928 ep->smac_idx = (cxgb4_port_viid(pdev) & 0x7F) << 1; in import_ep()
1931 ep->txq_idx = cxgb4_port_idx(pdev) * step; in import_ep()
1932 ep->ctrlq_idx = cxgb4_port_idx(pdev); in import_ep()
1935 ep->rss_qid = cdev->rdev.lldi.rxq_ids[ in import_ep()
1937 set_tcp_window(ep, (struct port_info *)netdev_priv(pdev)); in import_ep()
1940 ep->retry_with_mpa_v1 = 0; in import_ep()
1941 ep->tried_with_mpa_v1 = 0; in import_ep()
1953 static int c4iw_reconnect(struct c4iw_ep *ep) in c4iw_reconnect() argument
1957 &ep->com.cm_id->local_addr; in c4iw_reconnect()
1959 &ep->com.cm_id->remote_addr; in c4iw_reconnect()
1961 &ep->com.cm_id->local_addr; in c4iw_reconnect()
1963 &ep->com.cm_id->remote_addr; in c4iw_reconnect()
1967 PDBG("%s qp %p cm_id %p\n", __func__, ep->com.qp, ep->com.cm_id); in c4iw_reconnect()
1968 init_timer(&ep->timer); in c4iw_reconnect()
1973 ep->atid = cxgb4_alloc_atid(ep->com.dev->rdev.lldi.tids, ep); in c4iw_reconnect()
1974 if (ep->atid == -1) { in c4iw_reconnect()
1979 insert_handle(ep->com.dev, &ep->com.dev->atid_idr, ep, ep->atid); in c4iw_reconnect()
1982 if (ep->com.cm_id->local_addr.ss_family == AF_INET) { in c4iw_reconnect()
1983 ep->dst = find_route(ep->com.dev, laddr->sin_addr.s_addr, in c4iw_reconnect()
1989 ep->dst = find_route6(ep->com.dev, laddr6->sin6_addr.s6_addr, in c4iw_reconnect()
1996 if (!ep->dst) { in c4iw_reconnect()
2001 err = import_ep(ep, iptype, ra, ep->dst, ep->com.dev, false); in c4iw_reconnect()
2008 __func__, ep->txq_idx, ep->tx_chan, ep->smac_idx, ep->rss_qid, in c4iw_reconnect()
2009 ep->l2t->idx); in c4iw_reconnect()
2011 state_set(&ep->com, CONNECTING); in c4iw_reconnect()
2012 ep->tos = 0; in c4iw_reconnect()
2015 err = send_connect(ep); in c4iw_reconnect()
2019 cxgb4_l2t_release(ep->l2t); in c4iw_reconnect()
2021 dst_release(ep->dst); in c4iw_reconnect()
2023 remove_handle(ep->com.dev, &ep->com.dev->atid_idr, ep->atid); in c4iw_reconnect()
2024 cxgb4_free_atid(ep->com.dev->rdev.lldi.tids, ep->atid); in c4iw_reconnect()
2032 connect_reply_upcall(ep, -ECONNRESET); in c4iw_reconnect()
2033 c4iw_put_ep(&ep->com); in c4iw_reconnect()
2040 struct c4iw_ep *ep; in act_open_rpl() local
2051 ep = lookup_atid(t, atid); in act_open_rpl()
2052 la = (struct sockaddr_in *)&ep->com.mapped_local_addr; in act_open_rpl()
2053 ra = (struct sockaddr_in *)&ep->com.mapped_remote_addr; in act_open_rpl()
2054 la6 = (struct sockaddr_in6 *)&ep->com.mapped_local_addr; in act_open_rpl()
2055 ra6 = (struct sockaddr_in6 *)&ep->com.mapped_remote_addr; in act_open_rpl()
2057 PDBG("%s ep %p atid %u status %u errno %d\n", __func__, ep, atid, in act_open_rpl()
2063 ep->stats.connect_neg_adv++; in act_open_rpl()
2070 set_bit(ACT_OPEN_RPL, &ep->com.history); in act_open_rpl()
2083 if (ep->com.local_addr.ss_family == AF_INET && in act_open_rpl()
2085 send_fw_act_open_req(ep, in act_open_rpl()
2092 if (ep->retry_count++ < ACT_OPEN_RETRY_COUNT) { in act_open_rpl()
2093 set_bit(ACT_RETRY_INUSE, &ep->com.history); in act_open_rpl()
2094 remove_handle(ep->com.dev, &ep->com.dev->atid_idr, in act_open_rpl()
2097 dst_release(ep->dst); in act_open_rpl()
2098 cxgb4_l2t_release(ep->l2t); in act_open_rpl()
2099 c4iw_reconnect(ep); in act_open_rpl()
2104 if (ep->com.local_addr.ss_family == AF_INET) { in act_open_rpl()
2118 connect_reply_upcall(ep, status2errno(status)); in act_open_rpl()
2119 state_set(&ep->com, DEAD); in act_open_rpl()
2122 cxgb4_remove_tid(ep->com.dev->rdev.lldi.tids, 0, GET_TID(rpl)); in act_open_rpl()
2124 remove_handle(ep->com.dev, &ep->com.dev->atid_idr, atid); in act_open_rpl()
2126 dst_release(ep->dst); in act_open_rpl()
2127 cxgb4_l2t_release(ep->l2t); in act_open_rpl()
2128 c4iw_put_ep(&ep->com); in act_open_rpl()
2138 struct c4iw_listen_ep *ep = lookup_stid(t, stid); in pass_open_rpl() local
2140 if (!ep) { in pass_open_rpl()
2144 PDBG("%s ep %p status %d error %d\n", __func__, ep, in pass_open_rpl()
2146 c4iw_wake_up(&ep->com.wr_wait, status2errno(rpl->status)); in pass_open_rpl()
2157 struct c4iw_listen_ep *ep = lookup_stid(t, stid); in close_listsrv_rpl() local
2159 PDBG("%s ep %p\n", __func__, ep); in close_listsrv_rpl()
2160 c4iw_wake_up(&ep->com.wr_wait, status2errno(rpl->status)); in close_listsrv_rpl()
2164 static void accept_cr(struct c4iw_ep *ep, struct sk_buff *skb, in accept_cr() argument
2175 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in accept_cr()
2180 if (is_t5(ep->com.dev->rdev.lldi.adapter_type)) { in accept_cr()
2183 INIT_TP_WR(rpl5, ep->hwtid); in accept_cr()
2186 INIT_TP_WR(rpl, ep->hwtid); in accept_cr()
2189 ep->hwtid)); in accept_cr()
2191 best_mtu(ep->com.dev->rdev.lldi.mtus, ep->mtu, &mtu_idx, in accept_cr()
2193 (AF_INET == ep->com.remote_addr.ss_family) ? 0 : 1); in accept_cr()
2200 win = ep->rcv_win >> 10; in accept_cr()
2208 L2T_IDX_V(ep->l2t->idx) | in accept_cr()
2209 TX_CHAN_V(ep->tx_chan) | in accept_cr()
2210 SMAC_SEL_V(ep->smac_idx) | in accept_cr()
2211 DSCP_V(ep->tos >> 2) | in accept_cr()
2215 RSS_QUEUE_VALID_F | RSS_QUEUE_V(ep->rss_qid); in accept_cr()
2232 if (is_t5(ep->com.dev->rdev.lldi.adapter_type)) { in accept_cr()
2247 set_wr_txq(skb, CPL_PRIORITY_SETUP, ep->ctrlq_idx); in accept_cr()
2249 c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t); in accept_cr()
2448 struct c4iw_ep *ep; in pass_establish() local
2453 ep = lookup_tid(t, tid); in pass_establish()
2454 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in pass_establish()
2455 ep->snd_seq = be32_to_cpu(req->snd_isn); in pass_establish()
2456 ep->rcv_seq = be32_to_cpu(req->rcv_isn); in pass_establish()
2458 PDBG("%s ep %p hwtid %u tcp_opt 0x%02x\n", __func__, ep, tid, in pass_establish()
2461 set_emss(ep, ntohs(req->tcp_opt)); in pass_establish()
2463 dst_confirm(ep->dst); in pass_establish()
2464 state_set(&ep->com, MPA_REQ_WAIT); in pass_establish()
2465 start_ep_timer(ep); in pass_establish()
2466 send_flowc(ep, skb); in pass_establish()
2467 set_bit(PASS_ESTAB, &ep->com.history); in pass_establish()
2475 struct c4iw_ep *ep; in peer_close() local
2483 ep = lookup_tid(t, tid); in peer_close()
2484 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in peer_close()
2485 dst_confirm(ep->dst); in peer_close()
2487 set_bit(PEER_CLOSE, &ep->com.history); in peer_close()
2488 mutex_lock(&ep->com.mutex); in peer_close()
2489 switch (ep->com.state) { in peer_close()
2491 __state_set(&ep->com, CLOSING); in peer_close()
2494 __state_set(&ep->com, CLOSING); in peer_close()
2495 connect_reply_upcall(ep, -ECONNRESET); in peer_close()
2505 __state_set(&ep->com, CLOSING); in peer_close()
2506 PDBG("waking up ep %p tid %u\n", ep, ep->hwtid); in peer_close()
2507 c4iw_wake_up(&ep->com.wr_wait, -ECONNRESET); in peer_close()
2510 __state_set(&ep->com, CLOSING); in peer_close()
2511 PDBG("waking up ep %p tid %u\n", ep, ep->hwtid); in peer_close()
2512 c4iw_wake_up(&ep->com.wr_wait, -ECONNRESET); in peer_close()
2515 start_ep_timer(ep); in peer_close()
2516 __state_set(&ep->com, CLOSING); in peer_close()
2518 ret = c4iw_modify_qp(ep->com.qp->rhp, ep->com.qp, in peer_close()
2521 peer_close_upcall(ep); in peer_close()
2529 __state_set(&ep->com, MORIBUND); in peer_close()
2533 (void)stop_ep_timer(ep); in peer_close()
2534 if (ep->com.cm_id && ep->com.qp) { in peer_close()
2536 c4iw_modify_qp(ep->com.qp->rhp, ep->com.qp, in peer_close()
2539 close_complete_upcall(ep, 0); in peer_close()
2540 __state_set(&ep->com, DEAD); in peer_close()
2550 mutex_unlock(&ep->com.mutex); in peer_close()
2552 c4iw_ep_disconnect(ep, 0, GFP_KERNEL); in peer_close()
2554 release_ep_resources(ep); in peer_close()
2561 struct c4iw_ep *ep; in peer_abort() local
2570 ep = lookup_tid(t, tid); in peer_abort()
2573 __func__, ep->hwtid, req->status, in peer_abort()
2575 ep->stats.abort_neg_adv++; in peer_abort()
2581 PDBG("%s ep %p tid %u state %u\n", __func__, ep, ep->hwtid, in peer_abort()
2582 ep->com.state); in peer_abort()
2583 set_bit(PEER_ABORT, &ep->com.history); in peer_abort()
2590 if (ep->com.state != MPA_REQ_SENT) in peer_abort()
2591 c4iw_wake_up(&ep->com.wr_wait, -ECONNRESET); in peer_abort()
2593 mutex_lock(&ep->com.mutex); in peer_abort()
2594 switch (ep->com.state) { in peer_abort()
2598 (void)stop_ep_timer(ep); in peer_abort()
2601 (void)stop_ep_timer(ep); in peer_abort()
2602 if (mpa_rev == 1 || (mpa_rev == 2 && ep->tried_with_mpa_v1)) in peer_abort()
2603 connect_reply_upcall(ep, -ECONNRESET); in peer_abort()
2615 ep->retry_with_mpa_v1 = 1; in peer_abort()
2624 stop_ep_timer(ep); in peer_abort()
2627 if (ep->com.cm_id && ep->com.qp) { in peer_abort()
2629 ret = c4iw_modify_qp(ep->com.qp->rhp, in peer_abort()
2630 ep->com.qp, C4IW_QP_ATTR_NEXT_STATE, in peer_abort()
2637 peer_abort_upcall(ep); in peer_abort()
2643 mutex_unlock(&ep->com.mutex); in peer_abort()
2649 dst_confirm(ep->dst); in peer_abort()
2650 if (ep->com.state != ABORTING) { in peer_abort()
2651 __state_set(&ep->com, DEAD); in peer_abort()
2653 if (!ep->retry_with_mpa_v1) in peer_abort()
2656 mutex_unlock(&ep->com.mutex); in peer_abort()
2665 set_wr_txq(skb, CPL_PRIORITY_DATA, ep->txq_idx); in peer_abort()
2667 INIT_TP_WR(rpl, ep->hwtid); in peer_abort()
2668 OPCODE_TID(rpl) = cpu_to_be32(MK_OPCODE_TID(CPL_ABORT_RPL, ep->hwtid)); in peer_abort()
2670 c4iw_ofld_send(&ep->com.dev->rdev, rpl_skb); in peer_abort()
2673 release_ep_resources(ep); in peer_abort()
2674 else if (ep->retry_with_mpa_v1) { in peer_abort()
2675 remove_handle(ep->com.dev, &ep->com.dev->hwtid_idr, ep->hwtid); in peer_abort()
2676 cxgb4_remove_tid(ep->com.dev->rdev.lldi.tids, 0, ep->hwtid); in peer_abort()
2677 dst_release(ep->dst); in peer_abort()
2678 cxgb4_l2t_release(ep->l2t); in peer_abort()
2679 c4iw_reconnect(ep); in peer_abort()
2687 struct c4iw_ep *ep; in close_con_rpl() local
2694 ep = lookup_tid(t, tid); in close_con_rpl()
2696 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in close_con_rpl()
2697 BUG_ON(!ep); in close_con_rpl()
2700 mutex_lock(&ep->com.mutex); in close_con_rpl()
2701 switch (ep->com.state) { in close_con_rpl()
2703 __state_set(&ep->com, MORIBUND); in close_con_rpl()
2706 (void)stop_ep_timer(ep); in close_con_rpl()
2707 if ((ep->com.cm_id) && (ep->com.qp)) { in close_con_rpl()
2709 c4iw_modify_qp(ep->com.qp->rhp, in close_con_rpl()
2710 ep->com.qp, in close_con_rpl()
2714 close_complete_upcall(ep, 0); in close_con_rpl()
2715 __state_set(&ep->com, DEAD); in close_con_rpl()
2725 mutex_unlock(&ep->com.mutex); in close_con_rpl()
2727 release_ep_resources(ep); in close_con_rpl()
2736 struct c4iw_ep *ep; in terminate() local
2739 ep = lookup_tid(t, tid); in terminate()
2740 BUG_ON(!ep); in terminate()
2742 if (ep && ep->com.qp) { in terminate()
2744 ep->com.qp->wq.sq.qid); in terminate()
2746 c4iw_modify_qp(ep->com.qp->rhp, ep->com.qp, in terminate()
2761 struct c4iw_ep *ep; in fw4_ack() local
2768 ep = lookup_tid(t, tid); in fw4_ack()
2769 PDBG("%s ep %p tid %u credits %u\n", __func__, ep, ep->hwtid, credits); in fw4_ack()
2772 __func__, ep, ep->hwtid, state_read(&ep->com)); in fw4_ack()
2776 dst_confirm(ep->dst); in fw4_ack()
2777 if (ep->mpa_skb) { in fw4_ack()
2779 "initiator %u freeing skb\n", __func__, ep, ep->hwtid, in fw4_ack()
2780 state_read(&ep->com), ep->mpa_attr.initiator ? 1 : 0); in fw4_ack()
2781 kfree_skb(ep->mpa_skb); in fw4_ack()
2782 ep->mpa_skb = NULL; in fw4_ack()
2791 struct c4iw_ep *ep = to_ep(cm_id); in c4iw_reject_cr() local
2792 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in c4iw_reject_cr()
2794 mutex_lock(&ep->com.mutex); in c4iw_reject_cr()
2795 if (ep->com.state == DEAD) { in c4iw_reject_cr()
2796 mutex_unlock(&ep->com.mutex); in c4iw_reject_cr()
2797 c4iw_put_ep(&ep->com); in c4iw_reject_cr()
2800 set_bit(ULP_REJECT, &ep->com.history); in c4iw_reject_cr()
2801 BUG_ON(ep->com.state != MPA_REQ_RCVD); in c4iw_reject_cr()
2803 abort_connection(ep, NULL, GFP_KERNEL); in c4iw_reject_cr()
2805 err = send_mpa_reject(ep, pdata, pdata_len); in c4iw_reject_cr()
2808 mutex_unlock(&ep->com.mutex); in c4iw_reject_cr()
2810 err = c4iw_ep_disconnect(ep, 0, GFP_KERNEL); in c4iw_reject_cr()
2811 c4iw_put_ep(&ep->com); in c4iw_reject_cr()
2820 struct c4iw_ep *ep = to_ep(cm_id); in c4iw_accept_cr() local
2824 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); in c4iw_accept_cr()
2826 mutex_lock(&ep->com.mutex); in c4iw_accept_cr()
2827 if (ep->com.state == DEAD) { in c4iw_accept_cr()
2832 BUG_ON(ep->com.state != MPA_REQ_RCVD); in c4iw_accept_cr()
2835 set_bit(ULP_ACCEPT, &ep->com.history); in c4iw_accept_cr()
2836 if ((conn_param->ord > cur_max_read_depth(ep->com.dev)) || in c4iw_accept_cr()
2837 (conn_param->ird > cur_max_read_depth(ep->com.dev))) { in c4iw_accept_cr()
2838 abort_connection(ep, NULL, GFP_KERNEL); in c4iw_accept_cr()
2843 if (ep->mpa_attr.version == 2 && ep->mpa_attr.enhanced_rdma_conn) { in c4iw_accept_cr()
2844 if (conn_param->ord > ep->ird) { in c4iw_accept_cr()
2846 ep->ord = ep->ird; in c4iw_accept_cr()
2848 ep->ird = conn_param->ird; in c4iw_accept_cr()
2849 ep->ord = conn_param->ord; in c4iw_accept_cr()
2850 send_mpa_reject(ep, conn_param->private_data, in c4iw_accept_cr()
2852 abort_connection(ep, NULL, GFP_KERNEL); in c4iw_accept_cr()
2857 if (conn_param->ird < ep->ord) { in c4iw_accept_cr()
2859 ep->ord <= h->rdev.lldi.max_ordird_qp) { in c4iw_accept_cr()
2860 conn_param->ird = ep->ord; in c4iw_accept_cr()
2862 abort_connection(ep, NULL, GFP_KERNEL); in c4iw_accept_cr()
2868 ep->ird = conn_param->ird; in c4iw_accept_cr()
2869 ep->ord = conn_param->ord; in c4iw_accept_cr()
2871 if (ep->mpa_attr.version == 1) { in c4iw_accept_cr()
2872 if (peer2peer && ep->ird == 0) in c4iw_accept_cr()
2873 ep->ird = 1; in c4iw_accept_cr()
2876 (ep->mpa_attr.p2p_type != FW_RI_INIT_P2PTYPE_DISABLED) && in c4iw_accept_cr()
2877 (p2p_type == FW_RI_INIT_P2PTYPE_READ_REQ) && ep->ord == 0) in c4iw_accept_cr()
2878 ep->ird = 1; in c4iw_accept_cr()
2881 PDBG("%s %d ird %d ord %d\n", __func__, __LINE__, ep->ird, ep->ord); in c4iw_accept_cr()
2884 ep->com.cm_id = cm_id; in c4iw_accept_cr()
2885 ep->com.qp = qp; in c4iw_accept_cr()
2886 ref_qp(ep); in c4iw_accept_cr()
2889 attrs.mpa_attr = ep->mpa_attr; in c4iw_accept_cr()
2890 attrs.max_ird = ep->ird; in c4iw_accept_cr()
2891 attrs.max_ord = ep->ord; in c4iw_accept_cr()
2892 attrs.llp_stream_handle = ep; in c4iw_accept_cr()
2902 err = c4iw_modify_qp(ep->com.qp->rhp, in c4iw_accept_cr()
2903 ep->com.qp, mask, &attrs, 1); in c4iw_accept_cr()
2906 err = send_mpa_reply(ep, conn_param->private_data, in c4iw_accept_cr()
2911 __state_set(&ep->com, FPDU_MODE); in c4iw_accept_cr()
2912 established_upcall(ep); in c4iw_accept_cr()
2913 mutex_unlock(&ep->com.mutex); in c4iw_accept_cr()
2914 c4iw_put_ep(&ep->com); in c4iw_accept_cr()
2917 ep->com.cm_id = NULL; in c4iw_accept_cr()
2918 abort_connection(ep, NULL, GFP_KERNEL); in c4iw_accept_cr()
2921 mutex_unlock(&ep->com.mutex); in c4iw_accept_cr()
2922 c4iw_put_ep(&ep->com); in c4iw_accept_cr()
2990 struct c4iw_ep *ep; in c4iw_connect() local
3007 ep = alloc_ep(sizeof(*ep), GFP_KERNEL); in c4iw_connect()
3008 if (!ep) { in c4iw_connect()
3013 init_timer(&ep->timer); in c4iw_connect()
3014 ep->plen = conn_param->private_data_len; in c4iw_connect()
3015 if (ep->plen) in c4iw_connect()
3016 memcpy(ep->mpa_pkt + sizeof(struct mpa_message), in c4iw_connect()
3017 conn_param->private_data, ep->plen); in c4iw_connect()
3018 ep->ird = conn_param->ird; in c4iw_connect()
3019 ep->ord = conn_param->ord; in c4iw_connect()
3021 if (peer2peer && ep->ord == 0) in c4iw_connect()
3022 ep->ord = 1; in c4iw_connect()
3025 ep->com.dev = dev; in c4iw_connect()
3026 ep->com.cm_id = cm_id; in c4iw_connect()
3027 ep->com.qp = get_qhp(dev, conn_param->qpn); in c4iw_connect()
3028 if (!ep->com.qp) { in c4iw_connect()
3033 ref_qp(ep); in c4iw_connect()
3035 ep->com.qp, cm_id); in c4iw_connect()
3040 ep->atid = cxgb4_alloc_atid(dev->rdev.lldi.tids, ep); in c4iw_connect()
3041 if (ep->atid == -1) { in c4iw_connect()
3046 insert_handle(dev, &dev->atid_idr, ep, ep->atid); in c4iw_connect()
3048 memcpy(&ep->com.local_addr, &cm_id->local_addr, in c4iw_connect()
3049 sizeof(ep->com.local_addr)); in c4iw_connect()
3050 memcpy(&ep->com.remote_addr, &cm_id->remote_addr, in c4iw_connect()
3051 sizeof(ep->com.remote_addr)); in c4iw_connect()
3054 memcpy(&ep->com.mapped_local_addr, &cm_id->local_addr, in c4iw_connect()
3055 sizeof(ep->com.mapped_local_addr)); in c4iw_connect()
3056 memcpy(&ep->com.mapped_remote_addr, &cm_id->remote_addr, in c4iw_connect()
3057 sizeof(ep->com.mapped_remote_addr)); in c4iw_connect()
3066 c4iw_form_pm_msg(ep, &pm_msg); in c4iw_connect()
3072 c4iw_record_pm_msg(ep, &pm_msg); in c4iw_connect()
3074 if (iwpm_create_mapinfo(&ep->com.local_addr, in c4iw_connect()
3075 &ep->com.mapped_local_addr, RDMA_NL_C4IW)) { in c4iw_connect()
3076 iwpm_remove_mapping(&ep->com.local_addr, RDMA_NL_C4IW); in c4iw_connect()
3080 print_addr(&ep->com, __func__, "add_query/create_mapinfo"); in c4iw_connect()
3081 set_bit(RELEASE_MAPINFO, &ep->com.flags); in c4iw_connect()
3083 laddr = (struct sockaddr_in *)&ep->com.mapped_local_addr; in c4iw_connect()
3084 raddr = (struct sockaddr_in *)&ep->com.mapped_remote_addr; in c4iw_connect()
3085 laddr6 = (struct sockaddr_in6 *)&ep->com.mapped_local_addr; in c4iw_connect()
3086 raddr6 = (struct sockaddr_in6 *) &ep->com.mapped_remote_addr; in c4iw_connect()
3105 ep->dst = find_route(dev, laddr->sin_addr.s_addr, in c4iw_connect()
3126 ep->dst = find_route6(dev, laddr6->sin6_addr.s6_addr, in c4iw_connect()
3131 if (!ep->dst) { in c4iw_connect()
3137 err = import_ep(ep, iptype, ra, ep->dst, ep->com.dev, true); in c4iw_connect()
3144 __func__, ep->txq_idx, ep->tx_chan, ep->smac_idx, ep->rss_qid, in c4iw_connect()
3145 ep->l2t->idx); in c4iw_connect()
3147 state_set(&ep->com, CONNECTING); in c4iw_connect()
3148 ep->tos = 0; in c4iw_connect()
3151 err = send_connect(ep); in c4iw_connect()
3155 cxgb4_l2t_release(ep->l2t); in c4iw_connect()
3157 dst_release(ep->dst); in c4iw_connect()
3159 remove_handle(ep->com.dev, &ep->com.dev->atid_idr, ep->atid); in c4iw_connect()
3160 cxgb4_free_atid(ep->com.dev->rdev.lldi.tids, ep->atid); in c4iw_connect()
3163 c4iw_put_ep(&ep->com); in c4iw_connect()
3168 static int create_server6(struct c4iw_dev *dev, struct c4iw_listen_ep *ep) in create_server6() argument
3172 &ep->com.mapped_local_addr; in create_server6()
3174 c4iw_init_wr_wait(&ep->com.wr_wait); in create_server6()
3175 err = cxgb4_create_server6(ep->com.dev->rdev.lldi.ports[0], in create_server6()
3176 ep->stid, &sin6->sin6_addr, in create_server6()
3178 ep->com.dev->rdev.lldi.rxq_ids[0]); in create_server6()
3180 err = c4iw_wait_for_reply(&ep->com.dev->rdev, in create_server6()
3181 &ep->com.wr_wait, in create_server6()
3187 err, ep->stid, in create_server6()
3192 static int create_server4(struct c4iw_dev *dev, struct c4iw_listen_ep *ep) in create_server4() argument
3196 &ep->com.mapped_local_addr; in create_server4()
3201 ep->com.dev->rdev.lldi.ports[0], ep->stid, in create_server4()
3203 ep->com.dev->rdev.lldi.rxq_ids[0], 0, 0); in create_server4()
3210 c4iw_init_wr_wait(&ep->com.wr_wait); in create_server4()
3211 err = cxgb4_create_server(ep->com.dev->rdev.lldi.ports[0], in create_server4()
3212 ep->stid, sin->sin_addr.s_addr, sin->sin_port, in create_server4()
3213 0, ep->com.dev->rdev.lldi.rxq_ids[0]); in create_server4()
3215 err = c4iw_wait_for_reply(&ep->com.dev->rdev, in create_server4()
3216 &ep->com.wr_wait, in create_server4()
3223 , err, ep->stid, in create_server4()
3232 struct c4iw_listen_ep *ep; in c4iw_create_listen() local
3239 ep = alloc_ep(sizeof(*ep), GFP_KERNEL); in c4iw_create_listen()
3240 if (!ep) { in c4iw_create_listen()
3245 PDBG("%s ep %p\n", __func__, ep); in c4iw_create_listen()
3247 ep->com.cm_id = cm_id; in c4iw_create_listen()
3248 ep->com.dev = dev; in c4iw_create_listen()
3249 ep->backlog = backlog; in c4iw_create_listen()
3250 memcpy(&ep->com.local_addr, &cm_id->local_addr, in c4iw_create_listen()
3251 sizeof(ep->com.local_addr)); in c4iw_create_listen()
3257 ep->com.local_addr.ss_family == AF_INET) in c4iw_create_listen()
3258 ep->stid = cxgb4_alloc_sftid(dev->rdev.lldi.tids, in c4iw_create_listen()
3259 cm_id->local_addr.ss_family, ep); in c4iw_create_listen()
3261 ep->stid = cxgb4_alloc_stid(dev->rdev.lldi.tids, in c4iw_create_listen()
3262 cm_id->local_addr.ss_family, ep); in c4iw_create_listen()
3264 if (ep->stid == -1) { in c4iw_create_listen()
3269 insert_handle(dev, &dev->stid_idr, ep, ep->stid); in c4iw_create_listen()
3272 memcpy(&ep->com.mapped_local_addr, &cm_id->local_addr, in c4iw_create_listen()
3273 sizeof(ep->com.mapped_local_addr)); in c4iw_create_listen()
3282 memcpy(&pm_msg.loc_addr, &ep->com.local_addr, in c4iw_create_listen()
3283 sizeof(ep->com.local_addr)); in c4iw_create_listen()
3289 memcpy(&ep->com.mapped_local_addr, in c4iw_create_listen()
3291 sizeof(ep->com.mapped_local_addr)); in c4iw_create_listen()
3293 if (iwpm_create_mapinfo(&ep->com.local_addr, in c4iw_create_listen()
3294 &ep->com.mapped_local_addr, RDMA_NL_C4IW)) { in c4iw_create_listen()
3298 print_addr(&ep->com, __func__, "add_mapping/create_mapinfo"); in c4iw_create_listen()
3300 set_bit(RELEASE_MAPINFO, &ep->com.flags); in c4iw_create_listen()
3301 state_set(&ep->com, LISTEN); in c4iw_create_listen()
3302 if (ep->com.local_addr.ss_family == AF_INET) in c4iw_create_listen()
3303 err = create_server4(dev, ep); in c4iw_create_listen()
3305 err = create_server6(dev, ep); in c4iw_create_listen()
3307 cm_id->provider_data = ep; in c4iw_create_listen()
3312 cxgb4_free_stid(ep->com.dev->rdev.lldi.tids, ep->stid, in c4iw_create_listen()
3313 ep->com.local_addr.ss_family); in c4iw_create_listen()
3316 c4iw_put_ep(&ep->com); in c4iw_create_listen()
3325 struct c4iw_listen_ep *ep = to_listen_ep(cm_id); in c4iw_destroy_listen() local
3327 PDBG("%s ep %p\n", __func__, ep); in c4iw_destroy_listen()
3330 state_set(&ep->com, DEAD); in c4iw_destroy_listen()
3331 if (ep->com.dev->rdev.lldi.enable_fw_ofld_conn && in c4iw_destroy_listen()
3332 ep->com.local_addr.ss_family == AF_INET) { in c4iw_destroy_listen()
3334 ep->com.dev->rdev.lldi.ports[0], ep->stid, in c4iw_destroy_listen()
3335 ep->com.dev->rdev.lldi.rxq_ids[0], 0); in c4iw_destroy_listen()
3337 c4iw_init_wr_wait(&ep->com.wr_wait); in c4iw_destroy_listen()
3339 ep->com.dev->rdev.lldi.ports[0], ep->stid, in c4iw_destroy_listen()
3340 ep->com.dev->rdev.lldi.rxq_ids[0], 0); in c4iw_destroy_listen()
3343 err = c4iw_wait_for_reply(&ep->com.dev->rdev, &ep->com.wr_wait, in c4iw_destroy_listen()
3346 remove_handle(ep->com.dev, &ep->com.dev->stid_idr, ep->stid); in c4iw_destroy_listen()
3347 cxgb4_free_stid(ep->com.dev->rdev.lldi.tids, ep->stid, in c4iw_destroy_listen()
3348 ep->com.local_addr.ss_family); in c4iw_destroy_listen()
3351 c4iw_put_ep(&ep->com); in c4iw_destroy_listen()
3355 int c4iw_ep_disconnect(struct c4iw_ep *ep, int abrupt, gfp_t gfp) in c4iw_ep_disconnect() argument
3362 mutex_lock(&ep->com.mutex); in c4iw_ep_disconnect()
3364 PDBG("%s ep %p state %s, abrupt %d\n", __func__, ep, in c4iw_ep_disconnect()
3365 states[ep->com.state], abrupt); in c4iw_ep_disconnect()
3367 rdev = &ep->com.dev->rdev; in c4iw_ep_disconnect()
3370 close_complete_upcall(ep, -EIO); in c4iw_ep_disconnect()
3371 ep->com.state = DEAD; in c4iw_ep_disconnect()
3373 switch (ep->com.state) { in c4iw_ep_disconnect()
3381 ep->com.state = ABORTING; in c4iw_ep_disconnect()
3383 ep->com.state = CLOSING; in c4iw_ep_disconnect()
3384 start_ep_timer(ep); in c4iw_ep_disconnect()
3386 set_bit(CLOSE_SENT, &ep->com.flags); in c4iw_ep_disconnect()
3389 if (!test_and_set_bit(CLOSE_SENT, &ep->com.flags)) { in c4iw_ep_disconnect()
3392 (void)stop_ep_timer(ep); in c4iw_ep_disconnect()
3393 ep->com.state = ABORTING; in c4iw_ep_disconnect()
3395 ep->com.state = MORIBUND; in c4iw_ep_disconnect()
3402 __func__, ep, ep->com.state); in c4iw_ep_disconnect()
3411 set_bit(EP_DISC_ABORT, &ep->com.history); in c4iw_ep_disconnect()
3412 close_complete_upcall(ep, -ECONNRESET); in c4iw_ep_disconnect()
3413 ret = send_abort(ep, NULL, gfp); in c4iw_ep_disconnect()
3415 set_bit(EP_DISC_CLOSE, &ep->com.history); in c4iw_ep_disconnect()
3416 ret = send_halfclose(ep, gfp); in c4iw_ep_disconnect()
3421 mutex_unlock(&ep->com.mutex); in c4iw_ep_disconnect()
3423 release_ep_resources(ep); in c4iw_ep_disconnect()
3430 struct c4iw_ep *ep; in active_ofld_conn_reply() local
3433 ep = (struct c4iw_ep *)lookup_atid(dev->rdev.lldi.tids, in active_ofld_conn_reply()
3435 if (!ep) in active_ofld_conn_reply()
3440 set_bit(ACT_RETRY_NOMEM, &ep->com.history); in active_ofld_conn_reply()
3441 if (ep->retry_count++ < ACT_OPEN_RETRY_COUNT) { in active_ofld_conn_reply()
3442 send_fw_act_open_req(ep, atid); in active_ofld_conn_reply()
3446 set_bit(ACT_RETRY_INUSE, &ep->com.history); in active_ofld_conn_reply()
3447 if (ep->retry_count++ < ACT_OPEN_RETRY_COUNT) { in active_ofld_conn_reply()
3448 send_fw_act_open_req(ep, atid); in active_ofld_conn_reply()
3462 connect_reply_upcall(ep, status2errno(req->retval)); in active_ofld_conn_reply()
3463 state_set(&ep->com, DEAD); in active_ofld_conn_reply()
3466 dst_release(ep->dst); in active_ofld_conn_reply()
3467 cxgb4_l2t_release(ep->l2t); in active_ofld_conn_reply()
3468 c4iw_put_ep(&ep->com); in active_ofld_conn_reply()
3798 static void process_timeout(struct c4iw_ep *ep) in process_timeout() argument
3803 mutex_lock(&ep->com.mutex); in process_timeout()
3804 PDBG("%s ep %p tid %u state %d\n", __func__, ep, ep->hwtid, in process_timeout()
3805 ep->com.state); in process_timeout()
3806 set_bit(TIMEDOUT, &ep->com.history); in process_timeout()
3807 switch (ep->com.state) { in process_timeout()
3809 __state_set(&ep->com, ABORTING); in process_timeout()
3810 connect_reply_upcall(ep, -ETIMEDOUT); in process_timeout()
3813 __state_set(&ep->com, ABORTING); in process_timeout()
3817 if (ep->com.cm_id && ep->com.qp) { in process_timeout()
3819 c4iw_modify_qp(ep->com.qp->rhp, in process_timeout()
3820 ep->com.qp, C4IW_QP_ATTR_NEXT_STATE, in process_timeout()
3823 __state_set(&ep->com, ABORTING); in process_timeout()
3824 close_complete_upcall(ep, -ETIMEDOUT); in process_timeout()
3838 __func__, ep, ep->hwtid, ep->com.state); in process_timeout()
3842 abort_connection(ep, NULL, GFP_KERNEL); in process_timeout()
3843 mutex_unlock(&ep->com.mutex); in process_timeout()
3844 c4iw_put_ep(&ep->com); in process_timeout()
3849 struct c4iw_ep *ep; in process_timedout_eps() local
3860 ep = list_entry(tmp, struct c4iw_ep, entry); in process_timedout_eps()
3861 process_timeout(ep); in process_timedout_eps()
3893 struct c4iw_ep *ep = (struct c4iw_ep *)arg; in ep_timeout() local
3897 if (!test_and_set_bit(TIMEOUT, &ep->com.flags)) { in ep_timeout()
3901 if (!ep->entry.next) { in ep_timeout()
3902 list_add_tail(&ep->entry, &timeout_list); in ep_timeout()
3975 struct c4iw_ep *ep; in peer_abort_intr() local
3979 ep = lookup_tid(t, tid); in peer_abort_intr()
3980 if (!ep) { in peer_abort_intr()
3988 __func__, ep->hwtid, req->status, in peer_abort_intr()
3990 ep->stats.abort_neg_adv++; in peer_abort_intr()
3995 PDBG("%s ep %p tid %u state %u\n", __func__, ep, ep->hwtid, in peer_abort_intr()
3996 ep->com.state); in peer_abort_intr()
4003 if (mpa_rev == 2 && !ep->tried_with_mpa_v1) { in peer_abort_intr()
4004 if (ep->com.state != MPA_REQ_SENT) in peer_abort_intr()
4005 c4iw_wake_up(&ep->com.wr_wait, -ECONNRESET); in peer_abort_intr()
4007 c4iw_wake_up(&ep->com.wr_wait, -ECONNRESET); in peer_abort_intr()