Lines Matching refs:csk
181 static void send_act_open_req(struct cxgbi_sock *csk, struct sk_buff *skb, in send_act_open_req() argument
184 struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(csk->cdev); in send_act_open_req()
186 int wscale = cxgbi_sock_compute_wscale(csk->mss_idx); in send_act_open_req()
189 unsigned int qid_atid = ((unsigned int)csk->atid) | in send_act_open_req()
190 (((unsigned int)csk->rss_qid) << 14); in send_act_open_req()
194 MSS_IDX_V(csk->mss_idx) | in send_act_open_req()
195 L2T_IDX_V(((struct l2t_entry *)csk->l2t)->idx) | in send_act_open_req()
196 TX_CHAN_V(csk->tx_chan) | in send_act_open_req()
197 SMAC_SEL_V(csk->smac_idx) | in send_act_open_req()
203 RSS_QUEUE_V(csk->rss_qid); in send_act_open_req()
212 req->local_port = csk->saddr.sin_port; in send_act_open_req()
213 req->peer_port = csk->daddr.sin_port; in send_act_open_req()
214 req->local_ip = csk->saddr.sin_addr.s_addr; in send_act_open_req()
215 req->peer_ip = csk->daddr.sin_addr.s_addr; in send_act_open_req()
218 csk->cdev->ports[csk->port_id], in send_act_open_req()
219 csk->l2t)); in send_act_open_req()
225 csk, &req->local_ip, ntohs(req->local_port), in send_act_open_req()
227 csk->atid, csk->rss_qid); in send_act_open_req()
235 req->local_port = csk->saddr.sin_port; in send_act_open_req()
236 req->peer_port = csk->daddr.sin_port; in send_act_open_req()
237 req->local_ip = csk->saddr.sin_addr.s_addr; in send_act_open_req()
238 req->peer_ip = csk->daddr.sin_addr.s_addr; in send_act_open_req()
242 csk->cdev->ports[csk->port_id], in send_act_open_req()
243 csk->l2t))); in send_act_open_req()
249 csk, &req->local_ip, ntohs(req->local_port), in send_act_open_req()
251 csk->atid, csk->rss_qid); in send_act_open_req()
254 set_wr_txq(skb, CPL_PRIORITY_SETUP, csk->port_id); in send_act_open_req()
257 (&csk->saddr), (&csk->daddr), t4 ? 4 : 5, csk, in send_act_open_req()
258 csk->state, csk->flags, csk->atid, csk->rss_qid); in send_act_open_req()
260 cxgb4_l2t_send(csk->cdev->ports[csk->port_id], skb, csk->l2t); in send_act_open_req()
264 static void send_act_open_req6(struct cxgbi_sock *csk, struct sk_buff *skb, in send_act_open_req6() argument
267 struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(csk->cdev); in send_act_open_req6()
269 int wscale = cxgbi_sock_compute_wscale(csk->mss_idx); in send_act_open_req6()
272 unsigned int qid_atid = ((unsigned int)csk->atid) | in send_act_open_req6()
273 (((unsigned int)csk->rss_qid) << 14); in send_act_open_req6()
277 MSS_IDX_V(csk->mss_idx) | in send_act_open_req6()
278 L2T_IDX_V(((struct l2t_entry *)csk->l2t)->idx) | in send_act_open_req6()
279 TX_CHAN_V(csk->tx_chan) | in send_act_open_req6()
280 SMAC_SEL_V(csk->smac_idx) | in send_act_open_req6()
287 RSS_QUEUE_V(csk->rss_qid); in send_act_open_req6()
296 req->local_port = csk->saddr6.sin6_port; in send_act_open_req6()
297 req->peer_port = csk->daddr6.sin6_port; in send_act_open_req6()
299 req->local_ip_hi = *(__be64 *)(csk->saddr6.sin6_addr.s6_addr); in send_act_open_req6()
300 req->local_ip_lo = *(__be64 *)(csk->saddr6.sin6_addr.s6_addr + in send_act_open_req6()
302 req->peer_ip_hi = *(__be64 *)(csk->daddr6.sin6_addr.s6_addr); in send_act_open_req6()
303 req->peer_ip_lo = *(__be64 *)(csk->daddr6.sin6_addr.s6_addr + in send_act_open_req6()
312 csk->cdev->ports[csk->port_id], in send_act_open_req6()
313 csk->l2t)); in send_act_open_req6()
321 req->local_port = csk->saddr6.sin6_port; in send_act_open_req6()
322 req->peer_port = csk->daddr6.sin6_port; in send_act_open_req6()
323 req->local_ip_hi = *(__be64 *)(csk->saddr6.sin6_addr.s6_addr); in send_act_open_req6()
324 req->local_ip_lo = *(__be64 *)(csk->saddr6.sin6_addr.s6_addr + in send_act_open_req6()
326 req->peer_ip_hi = *(__be64 *)(csk->daddr6.sin6_addr.s6_addr); in send_act_open_req6()
327 req->peer_ip_lo = *(__be64 *)(csk->daddr6.sin6_addr.s6_addr + in send_act_open_req6()
335 csk->cdev->ports[csk->port_id], in send_act_open_req6()
336 csk->l2t))); in send_act_open_req6()
339 set_wr_txq(skb, CPL_PRIORITY_SETUP, csk->port_id); in send_act_open_req6()
342 t4 ? 4 : 5, csk, csk->state, csk->flags, csk->atid, in send_act_open_req6()
343 &csk->saddr6.sin6_addr, ntohs(csk->saddr.sin_port), in send_act_open_req6()
344 &csk->daddr6.sin6_addr, ntohs(csk->daddr.sin_port), in send_act_open_req6()
345 csk->rss_qid); in send_act_open_req6()
347 cxgb4_l2t_send(csk->cdev->ports[csk->port_id], skb, csk->l2t); in send_act_open_req6()
351 static void send_close_req(struct cxgbi_sock *csk) in send_close_req() argument
353 struct sk_buff *skb = csk->cpl_close; in send_close_req()
355 unsigned int tid = csk->tid; in send_close_req()
359 csk, csk->state, csk->flags, csk->tid); in send_close_req()
360 csk->cpl_close = NULL; in send_close_req()
361 set_wr_txq(skb, CPL_PRIORITY_DATA, csk->port_id); in send_close_req()
366 cxgbi_sock_skb_entail(csk, skb); in send_close_req()
367 if (csk->state >= CTP_ESTABLISHED) in send_close_req()
368 push_tx_frames(csk, 1); in send_close_req()
373 struct cxgbi_sock *csk = (struct cxgbi_sock *)handle; in abort_arp_failure() local
378 csk, csk->state, csk->flags, csk->tid); in abort_arp_failure()
381 cxgb4_ofld_send(csk->cdev->ports[csk->port_id], skb); in abort_arp_failure()
384 static void send_abort_req(struct cxgbi_sock *csk) in send_abort_req() argument
387 struct sk_buff *skb = csk->cpl_abort_req; in send_abort_req()
389 if (unlikely(csk->state == CTP_ABORTING) || !skb || !csk->cdev) in send_abort_req()
392 if (!cxgbi_sock_flag(csk, CTPF_TX_DATA_SENT)) { in send_abort_req()
393 send_tx_flowc_wr(csk); in send_abort_req()
394 cxgbi_sock_set_flag(csk, CTPF_TX_DATA_SENT); in send_abort_req()
397 cxgbi_sock_set_state(csk, CTP_ABORTING); in send_abort_req()
398 cxgbi_sock_set_flag(csk, CTPF_ABORT_RPL_PENDING); in send_abort_req()
399 cxgbi_sock_purge_write_queue(csk); in send_abort_req()
401 csk->cpl_abort_req = NULL; in send_abort_req()
403 set_wr_txq(skb, CPL_PRIORITY_DATA, csk->port_id); in send_abort_req()
405 t4_set_arp_err_handler(skb, csk, abort_arp_failure); in send_abort_req()
406 INIT_TP_WR(req, csk->tid); in send_abort_req()
407 OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ABORT_REQ, csk->tid)); in send_abort_req()
408 req->rsvd0 = htonl(csk->snd_nxt); in send_abort_req()
409 req->rsvd1 = !cxgbi_sock_flag(csk, CTPF_TX_DATA_SENT); in send_abort_req()
413 csk, csk->state, csk->flags, csk->tid, csk->snd_nxt, in send_abort_req()
416 cxgb4_l2t_send(csk->cdev->ports[csk->port_id], skb, csk->l2t); in send_abort_req()
419 static void send_abort_rpl(struct cxgbi_sock *csk, int rst_status) in send_abort_rpl() argument
421 struct sk_buff *skb = csk->cpl_abort_rpl; in send_abort_rpl()
426 csk, csk->state, csk->flags, csk->tid, rst_status); in send_abort_rpl()
428 csk->cpl_abort_rpl = NULL; in send_abort_rpl()
429 set_wr_txq(skb, CPL_PRIORITY_DATA, csk->port_id); in send_abort_rpl()
430 INIT_TP_WR(rpl, csk->tid); in send_abort_rpl()
431 OPCODE_TID(rpl) = cpu_to_be32(MK_OPCODE_TID(CPL_ABORT_RPL, csk->tid)); in send_abort_rpl()
433 cxgb4_ofld_send(csk->cdev->ports[csk->port_id], skb); in send_abort_rpl()
441 static u32 send_rx_credits(struct cxgbi_sock *csk, u32 credits) in send_rx_credits() argument
448 csk, csk->state, csk->flags, csk->tid, credits); in send_rx_credits()
452 pr_info("csk 0x%p, credit %u, OOM.\n", csk, credits); in send_rx_credits()
457 set_wr_txq(skb, CPL_PRIORITY_ACK, csk->port_id); in send_rx_credits()
458 INIT_TP_WR(req, csk->tid); in send_rx_credits()
460 csk->tid)); in send_rx_credits()
463 cxgb4_ofld_send(csk->cdev->ports[csk->port_id], skb); in send_rx_credits()
521 static inline int send_tx_flowc_wr(struct cxgbi_sock *csk) in send_tx_flowc_wr() argument
533 htonl(FW_WR_LEN16_V(flowclen16) | FW_WR_FLOWID_V(csk->tid)); in send_tx_flowc_wr()
535 flowc->mnemval[0].val = htonl(csk->cdev->pfvf); in send_tx_flowc_wr()
537 flowc->mnemval[1].val = htonl(csk->tx_chan); in send_tx_flowc_wr()
539 flowc->mnemval[2].val = htonl(csk->tx_chan); in send_tx_flowc_wr()
541 flowc->mnemval[3].val = htonl(csk->rss_qid); in send_tx_flowc_wr()
543 flowc->mnemval[4].val = htonl(csk->snd_nxt); in send_tx_flowc_wr()
545 flowc->mnemval[5].val = htonl(csk->rcv_nxt); in send_tx_flowc_wr()
549 flowc->mnemval[7].val = htonl(csk->advmss); in send_tx_flowc_wr()
555 set_wr_txq(skb, CPL_PRIORITY_DATA, csk->port_id); in send_tx_flowc_wr()
559 csk, csk->tid, 0, csk->tx_chan, csk->rss_qid, in send_tx_flowc_wr()
560 csk->snd_nxt, csk->rcv_nxt, cxgb4i_snd_win, in send_tx_flowc_wr()
561 csk->advmss); in send_tx_flowc_wr()
563 cxgb4_ofld_send(csk->cdev->ports[csk->port_id], skb); in send_tx_flowc_wr()
568 static inline void make_tx_data_wr(struct cxgbi_sock *csk, struct sk_buff *skb, in make_tx_data_wr() argument
582 req->flowid_len16 = htonl(FW_WR_FLOWID_V(csk->tid) | in make_tx_data_wr()
590 cpu_to_be32(FW_WR_FLOWID_V(csk->tid) | in make_tx_data_wr()
596 val = skb_peek(&csk->write_queue) ? 0 : 1; in make_tx_data_wr()
600 if (!cxgbi_sock_flag(csk, CTPF_TX_DATA_SENT)) in make_tx_data_wr()
601 cxgbi_sock_set_flag(csk, CTPF_TX_DATA_SENT); in make_tx_data_wr()
609 static int push_tx_frames(struct cxgbi_sock *csk, int req_completion) in push_tx_frames() argument
614 if (unlikely(csk->state < CTP_ESTABLISHED || in push_tx_frames()
615 csk->state == CTP_CLOSE_WAIT_1 || csk->state >= CTP_ABORTING)) { in push_tx_frames()
619 csk, csk->state, csk->flags, csk->tid); in push_tx_frames()
623 while (csk->wr_cred && (skb = skb_peek(&csk->write_queue)) != NULL) { in push_tx_frames()
646 if (!cxgbi_sock_flag(csk, CTPF_TX_DATA_SENT)) { in push_tx_frames()
647 flowclen16 = send_tx_flowc_wr(csk); in push_tx_frames()
648 csk->wr_cred -= flowclen16; in push_tx_frames()
649 csk->wr_una_cred += flowclen16; in push_tx_frames()
650 cxgbi_sock_set_flag(csk, CTPF_TX_DATA_SENT); in push_tx_frames()
653 if (csk->wr_cred < credits_needed) { in push_tx_frames()
656 csk, skb->len, skb->data_len, in push_tx_frames()
657 credits_needed, csk->wr_cred); in push_tx_frames()
660 __skb_unlink(skb, &csk->write_queue); in push_tx_frames()
661 set_wr_txq(skb, CPL_PRIORITY_DATA, csk->port_id); in push_tx_frames()
663 csk->wr_cred -= credits_needed; in push_tx_frames()
664 csk->wr_una_cred += credits_needed; in push_tx_frames()
665 cxgbi_sock_enqueue_wr(csk, skb); in push_tx_frames()
669 csk, skb->len, skb->data_len, credits_needed, in push_tx_frames()
670 csk->wr_cred, csk->wr_una_cred); in push_tx_frames()
674 make_tx_data_wr(csk, skb, dlen, len, credits_needed, in push_tx_frames()
676 csk->snd_nxt += len; in push_tx_frames()
680 t4_set_arp_err_handler(skb, csk, arp_failure_skb_discard); in push_tx_frames()
684 csk, csk->state, csk->flags, csk->tid, skb, len); in push_tx_frames()
686 cxgb4_l2t_send(csk->cdev->ports[csk->port_id], skb, csk->l2t); in push_tx_frames()
691 static inline void free_atid(struct cxgbi_sock *csk) in free_atid() argument
693 struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(csk->cdev); in free_atid()
695 if (cxgbi_sock_flag(csk, CTPF_HAS_ATID)) { in free_atid()
696 cxgb4_free_atid(lldi->tids, csk->atid); in free_atid()
697 cxgbi_sock_clear_flag(csk, CTPF_HAS_ATID); in free_atid()
698 cxgbi_sock_put(csk); in free_atid()
704 struct cxgbi_sock *csk; in do_act_establish() local
713 csk = lookup_atid(t, atid); in do_act_establish()
714 if (unlikely(!csk)) { in do_act_establish()
719 if (csk->atid != atid) { in do_act_establish()
721 atid, csk, csk->state, csk->flags, csk->tid, csk->atid); in do_act_establish()
726 (&csk->saddr), (&csk->daddr), in do_act_establish()
727 atid, tid, csk, csk->state, csk->flags, rcv_isn); in do_act_establish()
731 cxgbi_sock_get(csk); in do_act_establish()
732 csk->tid = tid; in do_act_establish()
733 cxgb4_insert_tid(lldi->tids, csk, tid); in do_act_establish()
734 cxgbi_sock_set_flag(csk, CTPF_HAS_TID); in do_act_establish()
736 free_atid(csk); in do_act_establish()
738 spin_lock_bh(&csk->lock); in do_act_establish()
739 if (unlikely(csk->state != CTP_ACTIVE_OPEN)) in do_act_establish()
741 csk, csk->state, csk->flags, csk->tid); in do_act_establish()
743 if (csk->retry_timer.function) { in do_act_establish()
744 del_timer(&csk->retry_timer); in do_act_establish()
745 csk->retry_timer.function = NULL; in do_act_establish()
748 csk->copied_seq = csk->rcv_wup = csk->rcv_nxt = rcv_isn; in do_act_establish()
754 csk->rcv_wup -= cxgb4i_rcv_win - (RCV_BUFSIZ_MASK << 10); in do_act_establish()
756 csk->advmss = lldi->mtus[TCPOPT_MSS_G(tcp_opt)] - 40; in do_act_establish()
758 csk->advmss -= 12; in do_act_establish()
759 if (csk->advmss < 128) in do_act_establish()
760 csk->advmss = 128; in do_act_establish()
764 csk, TCPOPT_MSS_G(tcp_opt), csk->advmss); in do_act_establish()
766 cxgbi_sock_established(csk, ntohl(req->snd_isn), ntohs(req->tcp_opt)); in do_act_establish()
768 if (unlikely(cxgbi_sock_flag(csk, CTPF_ACTIVE_CLOSE_NEEDED))) in do_act_establish()
769 send_abort_req(csk); in do_act_establish()
771 if (skb_queue_len(&csk->write_queue)) in do_act_establish()
772 push_tx_frames(csk, 0); in do_act_establish()
773 cxgbi_conn_tx_open(csk); in do_act_establish()
775 spin_unlock_bh(&csk->lock); in do_act_establish()
802 struct cxgbi_sock *csk = (struct cxgbi_sock *)data; in csk_act_open_retry_timer() local
803 struct cxgb4_lld_info *lldi = cxgbi_cdev_priv(csk->cdev); in csk_act_open_retry_timer()
810 csk, csk->state, csk->flags, csk->tid); in csk_act_open_retry_timer()
812 cxgbi_sock_get(csk); in csk_act_open_retry_timer()
813 spin_lock_bh(&csk->lock); in csk_act_open_retry_timer()
823 if (csk->csk_family == AF_INET) { in csk_act_open_retry_timer()
834 cxgbi_sock_fail_act_open(csk, -ENOMEM); in csk_act_open_retry_timer()
836 skb->sk = (struct sock *)csk; in csk_act_open_retry_timer()
837 t4_set_arp_err_handler(skb, csk, in csk_act_open_retry_timer()
839 send_act_open_func(csk, skb, csk->l2t); in csk_act_open_retry_timer()
842 spin_unlock_bh(&csk->lock); in csk_act_open_retry_timer()
843 cxgbi_sock_put(csk); in csk_act_open_retry_timer()
856 struct cxgbi_sock *csk; in do_act_open_rpl() local
865 csk = lookup_atid(t, atid); in do_act_open_rpl()
866 if (unlikely(!csk)) { in do_act_open_rpl()
872 "csk 0x%p,%u,0x%lx. ", (&csk->saddr), (&csk->daddr), in do_act_open_rpl()
873 atid, tid, status, csk, csk->state, csk->flags); in do_act_open_rpl()
883 cxgb4_remove_tid(lldi->tids, csk->port_id, GET_TID(rpl)); in do_act_open_rpl()
885 cxgbi_sock_get(csk); in do_act_open_rpl()
886 spin_lock_bh(&csk->lock); in do_act_open_rpl()
889 csk->retry_timer.function != csk_act_open_retry_timer) { in do_act_open_rpl()
890 csk->retry_timer.function = csk_act_open_retry_timer; in do_act_open_rpl()
891 mod_timer(&csk->retry_timer, jiffies + HZ / 2); in do_act_open_rpl()
893 cxgbi_sock_fail_act_open(csk, in do_act_open_rpl()
896 spin_unlock_bh(&csk->lock); in do_act_open_rpl()
897 cxgbi_sock_put(csk); in do_act_open_rpl()
904 struct cxgbi_sock *csk; in do_peer_close() local
910 csk = lookup_tid(t, tid); in do_peer_close()
911 if (unlikely(!csk)) { in do_peer_close()
916 (&csk->saddr), (&csk->daddr), in do_peer_close()
917 csk, csk->state, csk->flags, csk->tid); in do_peer_close()
918 cxgbi_sock_rcv_peer_close(csk); in do_peer_close()
925 struct cxgbi_sock *csk; in do_close_con_rpl() local
931 csk = lookup_tid(t, tid); in do_close_con_rpl()
932 if (unlikely(!csk)) { in do_close_con_rpl()
937 (&csk->saddr), (&csk->daddr), in do_close_con_rpl()
938 csk, csk->state, csk->flags, csk->tid); in do_close_con_rpl()
939 cxgbi_sock_rcv_close_conn_rpl(csk, ntohl(rpl->snd_nxt)); in do_close_con_rpl()
944 static int abort_status_to_errno(struct cxgbi_sock *csk, int abort_reason, in abort_status_to_errno() argument
950 return csk->state > CTP_ESTABLISHED ? in abort_status_to_errno()
964 struct cxgbi_sock *csk; in do_abort_req_rss() local
971 csk = lookup_tid(t, tid); in do_abort_req_rss()
972 if (unlikely(!csk)) { in do_abort_req_rss()
978 (&csk->saddr), (&csk->daddr), in do_abort_req_rss()
979 csk, csk->state, csk->flags, csk->tid, req->status); in do_abort_req_rss()
984 cxgbi_sock_get(csk); in do_abort_req_rss()
985 spin_lock_bh(&csk->lock); in do_abort_req_rss()
987 cxgbi_sock_clear_flag(csk, CTPF_ABORT_REQ_RCVD); in do_abort_req_rss()
989 if (!cxgbi_sock_flag(csk, CTPF_TX_DATA_SENT)) { in do_abort_req_rss()
990 send_tx_flowc_wr(csk); in do_abort_req_rss()
991 cxgbi_sock_set_flag(csk, CTPF_TX_DATA_SENT); in do_abort_req_rss()
994 cxgbi_sock_set_flag(csk, CTPF_ABORT_REQ_RCVD); in do_abort_req_rss()
995 cxgbi_sock_set_state(csk, CTP_ABORTING); in do_abort_req_rss()
997 send_abort_rpl(csk, rst_status); in do_abort_req_rss()
999 if (!cxgbi_sock_flag(csk, CTPF_ABORT_RPL_PENDING)) { in do_abort_req_rss()
1000 csk->err = abort_status_to_errno(csk, req->status, &rst_status); in do_abort_req_rss()
1001 cxgbi_sock_closed(csk); in do_abort_req_rss()
1004 spin_unlock_bh(&csk->lock); in do_abort_req_rss()
1005 cxgbi_sock_put(csk); in do_abort_req_rss()
1012 struct cxgbi_sock *csk; in do_abort_rpl_rss() local
1018 csk = lookup_tid(t, tid); in do_abort_rpl_rss()
1019 if (!csk) in do_abort_rpl_rss()
1022 if (csk) in do_abort_rpl_rss()
1024 (&csk->saddr), (&csk->daddr), csk, in do_abort_rpl_rss()
1025 csk->state, csk->flags, csk->tid, rpl->status); in do_abort_rpl_rss()
1030 cxgbi_sock_rcv_abort_rpl(csk); in do_abort_rpl_rss()
1037 struct cxgbi_sock *csk; in do_rx_data() local
1043 csk = lookup_tid(t, tid); in do_rx_data()
1044 if (!csk) { in do_rx_data()
1048 pr_err("csk 0x%p, tid %u, rcv cpl_rx_data.\n", csk, tid); in do_rx_data()
1049 spin_lock_bh(&csk->lock); in do_rx_data()
1050 send_abort_req(csk); in do_rx_data()
1051 spin_unlock_bh(&csk->lock); in do_rx_data()
1058 struct cxgbi_sock *csk; in do_rx_iscsi_hdr() local
1065 csk = lookup_tid(t, tid); in do_rx_iscsi_hdr()
1066 if (unlikely(!csk)) { in do_rx_iscsi_hdr()
1073 csk, csk->state, csk->flags, csk->tid, skb, skb->len, in do_rx_iscsi_hdr()
1076 spin_lock_bh(&csk->lock); in do_rx_iscsi_hdr()
1078 if (unlikely(csk->state >= CTP_PASSIVE_CLOSE)) { in do_rx_iscsi_hdr()
1081 csk, csk->state, csk->flags, csk->tid); in do_rx_iscsi_hdr()
1082 if (csk->state != CTP_ABORTING) in do_rx_iscsi_hdr()
1095 if (!csk->skb_ulp_lhdr) { in do_rx_iscsi_hdr()
1101 csk, csk->state, csk->flags, csk->tid, skb); in do_rx_iscsi_hdr()
1102 csk->skb_ulp_lhdr = skb; in do_rx_iscsi_hdr()
1105 if (cxgbi_skcb_tcp_seq(skb) != csk->rcv_nxt) { in do_rx_iscsi_hdr()
1107 csk->tid, cxgbi_skcb_tcp_seq(skb), in do_rx_iscsi_hdr()
1108 csk->rcv_nxt); in do_rx_iscsi_hdr()
1123 csk->tid, plen, hlen, dlen, in do_rx_iscsi_hdr()
1130 cxgbi_skcb_rx_pdulen(skb) += csk->dcrc_len; in do_rx_iscsi_hdr()
1131 csk->rcv_nxt += cxgbi_skcb_rx_pdulen(skb); in do_rx_iscsi_hdr()
1135 csk, skb, *bhs, hlen, dlen, in do_rx_iscsi_hdr()
1140 struct sk_buff *lskb = csk->skb_ulp_lhdr; in do_rx_iscsi_hdr()
1145 csk, csk->state, csk->flags, skb, lskb); in do_rx_iscsi_hdr()
1148 __skb_queue_tail(&csk->receive_queue, skb); in do_rx_iscsi_hdr()
1149 spin_unlock_bh(&csk->lock); in do_rx_iscsi_hdr()
1153 send_abort_req(csk); in do_rx_iscsi_hdr()
1155 spin_unlock_bh(&csk->lock); in do_rx_iscsi_hdr()
1163 struct cxgbi_sock *csk; in do_rx_data_ddp() local
1171 csk = lookup_tid(t, tid); in do_rx_data_ddp()
1172 if (unlikely(!csk)) { in do_rx_data_ddp()
1179 csk, csk->state, csk->flags, skb, status, csk->skb_ulp_lhdr); in do_rx_data_ddp()
1181 spin_lock_bh(&csk->lock); in do_rx_data_ddp()
1183 if (unlikely(csk->state >= CTP_PASSIVE_CLOSE)) { in do_rx_data_ddp()
1186 csk, csk->state, csk->flags, csk->tid); in do_rx_data_ddp()
1187 if (csk->state != CTP_ABORTING) in do_rx_data_ddp()
1193 if (!csk->skb_ulp_lhdr) { in do_rx_data_ddp()
1194 pr_err("tid 0x%x, rcv RX_DATA_DDP w/o pdu bhs.\n", csk->tid); in do_rx_data_ddp()
1198 lskb = csk->skb_ulp_lhdr; in do_rx_data_ddp()
1199 csk->skb_ulp_lhdr = NULL; in do_rx_data_ddp()
1205 csk->tid, ntohs(rpl->len), cxgbi_skcb_rx_pdulen(lskb)); in do_rx_data_ddp()
1209 csk, lskb, status, cxgbi_skcb_flags(lskb)); in do_rx_data_ddp()
1214 csk, lskb, status, cxgbi_skcb_flags(lskb)); in do_rx_data_ddp()
1220 csk, lskb, status); in do_rx_data_ddp()
1227 csk, lskb, status); in do_rx_data_ddp()
1232 csk, lskb, cxgbi_skcb_flags(lskb)); in do_rx_data_ddp()
1235 cxgbi_conn_pdu_ready(csk); in do_rx_data_ddp()
1236 spin_unlock_bh(&csk->lock); in do_rx_data_ddp()
1240 send_abort_req(csk); in do_rx_data_ddp()
1242 spin_unlock_bh(&csk->lock); in do_rx_data_ddp()
1249 struct cxgbi_sock *csk; in do_fw4_ack() local
1255 csk = lookup_tid(t, tid); in do_fw4_ack()
1256 if (unlikely(!csk)) in do_fw4_ack()
1261 csk, csk->state, csk->flags, csk->tid); in do_fw4_ack()
1262 cxgbi_sock_rcv_wr_ack(csk, rpl->credits, ntohl(rpl->snd_una), in do_fw4_ack()
1274 struct cxgbi_sock *csk; in do_set_tcb_rpl() local
1276 csk = lookup_tid(t, tid); in do_set_tcb_rpl()
1277 if (!csk) in do_set_tcb_rpl()
1282 csk, csk->state, csk->flags, csk->tid, rpl->status); in do_set_tcb_rpl()
1286 csk, tid, rpl->status); in do_set_tcb_rpl()
1291 static int alloc_cpls(struct cxgbi_sock *csk) in alloc_cpls() argument
1293 csk->cpl_close = alloc_wr(sizeof(struct cpl_close_con_req), in alloc_cpls()
1295 if (!csk->cpl_close) in alloc_cpls()
1298 csk->cpl_abort_req = alloc_wr(sizeof(struct cpl_abort_req), in alloc_cpls()
1300 if (!csk->cpl_abort_req) in alloc_cpls()
1303 csk->cpl_abort_rpl = alloc_wr(sizeof(struct cpl_abort_rpl), in alloc_cpls()
1305 if (!csk->cpl_abort_rpl) in alloc_cpls()
1310 cxgbi_sock_free_cpl_skbs(csk); in alloc_cpls()
1314 static inline void l2t_put(struct cxgbi_sock *csk) in l2t_put() argument
1316 if (csk->l2t) { in l2t_put()
1317 cxgb4_l2t_release(csk->l2t); in l2t_put()
1318 csk->l2t = NULL; in l2t_put()
1319 cxgbi_sock_put(csk); in l2t_put()
1323 static void release_offload_resources(struct cxgbi_sock *csk) in release_offload_resources() argument
1327 struct net_device *ndev = csk->cdev->ports[csk->port_id]; in release_offload_resources()
1332 csk, csk->state, csk->flags, csk->tid); in release_offload_resources()
1334 cxgbi_sock_free_cpl_skbs(csk); in release_offload_resources()
1335 if (csk->wr_cred != csk->wr_max_cred) { in release_offload_resources()
1336 cxgbi_sock_purge_wr_queue(csk); in release_offload_resources()
1337 cxgbi_sock_reset_wr_list(csk); in release_offload_resources()
1340 l2t_put(csk); in release_offload_resources()
1342 if (csk->csk_family == AF_INET6) in release_offload_resources()
1344 (const u32 *)&csk->saddr6.sin6_addr, 1); in release_offload_resources()
1347 if (cxgbi_sock_flag(csk, CTPF_HAS_ATID)) in release_offload_resources()
1348 free_atid(csk); in release_offload_resources()
1349 else if (cxgbi_sock_flag(csk, CTPF_HAS_TID)) { in release_offload_resources()
1350 lldi = cxgbi_cdev_priv(csk->cdev); in release_offload_resources()
1351 cxgb4_remove_tid(lldi->tids, 0, csk->tid); in release_offload_resources()
1352 cxgbi_sock_clear_flag(csk, CTPF_HAS_TID); in release_offload_resources()
1353 cxgbi_sock_put(csk); in release_offload_resources()
1355 csk->dst = NULL; in release_offload_resources()
1356 csk->cdev = NULL; in release_offload_resources()
1359 static int init_act_open(struct cxgbi_sock *csk) in init_act_open() argument
1361 struct cxgbi_device *cdev = csk->cdev; in init_act_open()
1363 struct net_device *ndev = cdev->ports[csk->port_id]; in init_act_open()
1373 csk, csk->state, csk->flags, csk->tid); in init_act_open()
1375 if (csk->csk_family == AF_INET) in init_act_open()
1376 daddr = &csk->daddr.sin_addr.s_addr; in init_act_open()
1378 else if (csk->csk_family == AF_INET6) in init_act_open()
1379 daddr = &csk->daddr6.sin6_addr; in init_act_open()
1382 pr_err("address family 0x%x not supported\n", csk->csk_family); in init_act_open()
1386 n = dst_neigh_lookup(csk->dst, daddr); in init_act_open()
1393 csk->atid = cxgb4_alloc_atid(lldi->tids, csk); in init_act_open()
1394 if (csk->atid < 0) { in init_act_open()
1398 cxgbi_sock_set_flag(csk, CTPF_HAS_ATID); in init_act_open()
1399 cxgbi_sock_get(csk); in init_act_open()
1401 csk->l2t = cxgb4_l2t_get(lldi->l2t, n, ndev, 0); in init_act_open()
1402 if (!csk->l2t) { in init_act_open()
1406 cxgbi_sock_get(csk); in init_act_open()
1409 if (csk->csk_family == AF_INET6) in init_act_open()
1410 cxgb4_clip_get(ndev, (const u32 *)&csk->saddr6.sin6_addr, 1); in init_act_open()
1421 if (csk->csk_family == AF_INET) in init_act_open()
1430 skb->sk = (struct sock *)csk; in init_act_open()
1431 t4_set_arp_err_handler(skb, csk, cxgbi_sock_act_open_req_arp_failure); in init_act_open()
1433 if (!csk->mtu) in init_act_open()
1434 csk->mtu = dst_mtu(csk->dst); in init_act_open()
1435 cxgb4_best_mtu(lldi->mtus, csk->mtu, &csk->mss_idx); in init_act_open()
1436 csk->tx_chan = cxgb4_port_chan(ndev); in init_act_open()
1438 csk->smac_idx = ((cxgb4_port_viid(ndev) & 0x7F)) << 1; in init_act_open()
1440 csk->txq_idx = cxgb4_port_idx(ndev) * step; in init_act_open()
1442 csk->rss_qid = lldi->rxq_ids[cxgb4_port_idx(ndev) * step]; in init_act_open()
1443 csk->wr_cred = lldi->wr_cred - in init_act_open()
1445 csk->wr_max_cred = csk->wr_cred; in init_act_open()
1446 csk->wr_una_cred = 0; in init_act_open()
1447 cxgbi_sock_reset_wr_list(csk); in init_act_open()
1448 csk->err = 0; in init_act_open()
1451 (&csk->saddr), (&csk->daddr), csk, csk->state, in init_act_open()
1452 csk->flags, csk->tx_chan, csk->txq_idx, csk->rss_qid, in init_act_open()
1453 csk->mtu, csk->mss_idx, csk->smac_idx); in init_act_open()
1457 cxgbi_sock_set_state(csk, CTP_ACTIVE_OPEN); in init_act_open()
1458 if (csk->csk_family == AF_INET) in init_act_open()
1459 send_act_open_req(csk, skb, csk->l2t); in init_act_open()
1462 send_act_open_req6(csk, skb, csk->l2t); in init_act_open()
1470 if (csk->csk_family == AF_INET6) in init_act_open()
1472 (const u32 *)&csk->saddr6.sin6_addr, 1); in init_act_open()
1590 static int ddp_set_map(struct cxgbi_sock *csk, struct cxgbi_pagepod_hdr *hdr, in ddp_set_map() argument
1601 err = ddp_ppod_write_idata(csk->cdev, csk->port_id, hdr, in ddp_set_map()
1626 static int ddp_setup_conn_pgidx(struct cxgbi_sock *csk, unsigned int tid, in ddp_setup_conn_pgidx() argument
1641 INIT_TP_WR(req, csk->tid); in ddp_setup_conn_pgidx()
1642 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, csk->tid)); in ddp_setup_conn_pgidx()
1643 req->reply_ctrl = htons(NO_REPLY_V(reply) | QUEUENO_V(csk->rss_qid)); in ddp_setup_conn_pgidx()
1647 set_wr_txq(skb, CPL_PRIORITY_CONTROL, csk->port_id); in ddp_setup_conn_pgidx()
1650 "csk 0x%p, tid 0x%x, pg_idx %u.\n", csk, csk->tid, pg_idx); in ddp_setup_conn_pgidx()
1652 cxgb4_ofld_send(csk->cdev->ports[csk->port_id], skb); in ddp_setup_conn_pgidx()
1656 static int ddp_setup_conn_digest(struct cxgbi_sock *csk, unsigned int tid, in ddp_setup_conn_digest() argument
1669 csk->hcrc_len = (hcrc ? 4 : 0); in ddp_setup_conn_digest()
1670 csk->dcrc_len = (dcrc ? 4 : 0); in ddp_setup_conn_digest()
1675 req->reply_ctrl = htons(NO_REPLY_V(reply) | QUEUENO_V(csk->rss_qid)); in ddp_setup_conn_digest()
1680 set_wr_txq(skb, CPL_PRIORITY_CONTROL, csk->port_id); in ddp_setup_conn_digest()
1683 "csk 0x%p, tid 0x%x, crc %d,%d.\n", csk, csk->tid, hcrc, dcrc); in ddp_setup_conn_digest()
1685 cxgb4_ofld_send(csk->cdev->ports[csk->port_id], skb); in ddp_setup_conn_digest()