Lines Matching refs:rcd

156 static inline void *get_egrbuf(const struct hfi1_ctxtdata *rcd, u64 rhf,
161 *update |= !(idx & (rcd->egrbufs.threshold - 1)) && !offset;
162 return (void *)(((u64)(rcd->egrbufs.rcvtids[idx].addr)) +
166 static inline void *hfi1_get_header(struct hfi1_ctxtdata *rcd,
171 return (void *)(rhf_addr - rcd->rhf_offset + offset);
174 static inline struct ib_header *hfi1_get_msgheader(struct hfi1_ctxtdata *rcd,
177 return (struct ib_header *)hfi1_get_header(rcd, rhf_addr);
181 *hfi1_get_16B_header(struct hfi1_ctxtdata *rcd,
184 return (struct hfi1_16b_header *)hfi1_get_header(rcd, rhf_addr);
207 static void rcv_hdrerr(struct hfi1_ctxtdata *rcd, struct hfi1_pportdata *ppd,
213 struct hfi1_ibport *ibp = rcd_to_iport(rcd);
290 hfi1_rc_hdrerr(rcd, packet, qp);
368 static inline void init_packet(struct hfi1_ctxtdata *rcd,
371 packet->rsize = get_hdrqentsize(rcd); /* words */
372 packet->maxcnt = get_hdrq_cnt(rcd) * packet->rsize; /* words */
373 packet->rcd = rcd;
376 packet->rhf_addr = get_rhf_addr(rcd);
378 packet->rhqoff = hfi1_rcd_head(rcd);
493 struct hfi1_ctxtdata *rcd;
504 struct hfi1_ctxtdata *rcd = packet->rcd;
506 mdata->rcd = rcd;
511 if (get_dma_rtail_setting(rcd)) {
512 mdata->ps_tail = get_rcvhdrtail(rcd);
513 if (rcd->ctxt == HFI1_CTRL_CTXT)
514 mdata->ps_seq = hfi1_seq_cnt(rcd);
519 mdata->ps_seq = hfi1_seq_cnt(rcd);
524 struct hfi1_ctxtdata *rcd)
526 if (get_dma_rtail_setting(rcd))
532 struct hfi1_ctxtdata *rcd)
538 if ((rcd->ctxt == HFI1_CTRL_CTXT) && (mdata->ps_head != mdata->ps_tail))
545 struct hfi1_ctxtdata *rcd)
552 if (!get_dma_rtail_setting(rcd) ||
553 rcd->ctxt == HFI1_CTRL_CTXT)
565 #define prescan_rxq(rcd, packet) \
567 if (rcd->ppd->cc_prescan) \
572 struct hfi1_ctxtdata *rcd = packet->rcd;
578 struct hfi1_ibport *ibp = rcd_to_iport(rcd);
579 __le32 *rhf_addr = (__le32 *)rcd->rcvhdrq + mdata.ps_head +
580 packet->rcd->rhf_offset;
583 struct rvt_dev_info *rdi = &rcd->dd->verbs_dev.rdi;
588 if (ps_done(&mdata, rhf, rcd))
591 if (ps_skip(&mdata, rhf, rcd))
597 packet->hdr = hfi1_get_msgheader(packet->rcd, rhf_addr);
631 update_ps_mdata(&mdata, rcd);
638 struct hfi1_ctxtdata *rcd = packet->rcd;
644 list_for_each_entry_safe(qp, nqp, &rcd->qp_wait_list, rspwait) {
674 this_cpu_inc(*packet->rcd->dd->rcv_limit);
692 packet->rcd->dd->ctx0_seq_drop++;
701 packet->rhf_addr = (__le32 *)packet->rcd->rcvhdrq + packet->rhqoff +
702 packet->rcd->rhf_offset;
716 packet->ebuf = get_egrbuf(packet->rcd, packet->rhf,
724 packet->tlen - ((packet->rcd->rcvhdrqentsize -
728 packet->rcd->rhf_rcv_function_map[packet->etype](packet);
736 packet->rhf_addr = (__le32 *)packet->rcd->rcvhdrq + packet->rhqoff +
737 packet->rcd->rhf_offset;
753 packet->ebuf = get_egrbuf(packet->rcd, packet->rhf,
761 packet->tlen - ((get_hdrqentsize(packet->rcd) -
774 packet->rcd->rhf_rcv_function_map[packet->etype](packet);
784 packet->rhf_addr = (__le32 *)packet->rcd->rcvhdrq + packet->rhqoff +
785 packet->rcd->rhf_offset;
800 update_usrhead(packet->rcd, packet->rhqoff, packet->updegr,
815 update_usrhead(packet->rcd, hfi1_rcd_head(packet->rcd), packet->updegr,
821 * @rcd: the context
828 int handle_receive_interrupt_napi_fp(struct hfi1_ctxtdata *rcd, int budget)
832 init_packet(rcd, &packet);
833 if (last_rcv_seq(rcd, rhf_rcv_seq(packet.rhf)))
838 if (hfi1_seq_incr(rcd, rhf_rcv_seq(packet.rhf)))
843 hfi1_set_rcd_head(rcd, packet.rhqoff);
852 int handle_receive_interrupt_nodma_rtail(struct hfi1_ctxtdata *rcd, int thread)
857 init_packet(rcd, &packet);
858 if (last_rcv_seq(rcd, rhf_rcv_seq(packet.rhf))) {
863 prescan_rxq(rcd, &packet);
867 if (hfi1_seq_incr(rcd, rhf_rcv_seq(packet.rhf)))
872 hfi1_set_rcd_head(rcd, packet.rhqoff);
878 int handle_receive_interrupt_dma_rtail(struct hfi1_ctxtdata *rcd, int thread)
884 init_packet(rcd, &packet);
885 hdrqtail = get_rcvhdrtail(rcd);
892 prescan_rxq(rcd, &packet);
901 hfi1_set_rcd_head(rcd, packet.rhqoff);
907 static void set_all_fastpath(struct hfi1_devdata *dd, struct hfi1_ctxtdata *rcd)
916 if (rcd->ctxt >= dd->first_dyn_alloc_ctxt && !rcd->is_vnic) {
917 hfi1_rcd_get(rcd);
918 hfi1_set_fast(rcd);
919 hfi1_rcd_put(rcd);
924 rcd = hfi1_rcd_get_by_index(dd, i);
925 if (rcd && (i < dd->first_dyn_alloc_ctxt || rcd->is_vnic))
926 hfi1_set_fast(rcd);
927 hfi1_rcd_put(rcd);
933 struct hfi1_ctxtdata *rcd;
938 rcd = hfi1_rcd_get_by_index(dd, i);
939 if (!rcd)
941 if (i < dd->first_dyn_alloc_ctxt || rcd->is_vnic)
942 rcd->do_interrupt = rcd->slow_handler;
944 hfi1_rcd_put(rcd);
954 struct ib_header *hdr = hfi1_get_msgheader(packet->rcd,
959 packet->rcd,
964 int hwstate = driver_lstate(packet->rcd->ppd);
966 &packet->rcd->ppd->linkstate_active_work;
969 dd_dev_info(packet->rcd->dd,
975 queue_work(packet->rcd->ppd->link_wq, lsaw);
989 if (likely(packet->rcd->ppd->host_link_state != HLS_UP_ARMED))
996 * @rcd: the context
1001 int handle_receive_interrupt(struct hfi1_ctxtdata *rcd, int thread)
1003 struct hfi1_devdata *dd = rcd->dd;
1009 if (!rcd->rcvhdrq)
1012 needset = (rcd->ctxt == HFI1_CTRL_CTXT) ? 0 : 1;
1014 init_packet(rcd, &packet);
1016 if (!get_dma_rtail_setting(rcd)) {
1017 if (last_rcv_seq(rcd, rhf_rcv_seq(packet.rhf))) {
1023 hdrqtail = get_rcvhdrtail(rcd);
1034 if (rcd->ctxt == HFI1_CTRL_CTXT)
1035 if (last_rcv_seq(rcd, rhf_rcv_seq(packet.rhf)))
1039 prescan_rxq(rcd, &packet);
1045 packet.rhf_addr = (__le32 *)rcd->rcvhdrq +
1047 rcd->rhf_offset;
1059 if (!get_dma_rtail_setting(rcd)) {
1060 if (hfi1_seq_incr(rcd, rhf_rcv_seq(packet.rhf)))
1069 if (rcd->ctxt == HFI1_CTRL_CTXT) {
1072 lseq = hfi1_seq_incr(rcd,
1081 set_all_fastpath(dd, rcd);
1087 hfi1_set_rcd_head(rcd, packet.rhqoff);
1100 * @rcd: the context
1107 int handle_receive_interrupt_napi_sp(struct hfi1_ctxtdata *rcd, int budget)
1109 struct hfi1_devdata *dd = rcd->dd;
1114 init_packet(rcd, &packet);
1115 if (last_rcv_seq(rcd, rhf_rcv_seq(packet.rhf)))
1122 packet.rhf_addr = (__le32 *)rcd->rcvhdrq +
1124 rcd->rhf_offset;
1133 if (hfi1_seq_incr(rcd, rhf_rcv_seq(packet.rhf)))
1138 set_all_fastpath(dd, rcd);
1144 hfi1_set_rcd_head(rcd, packet.rhqoff);
1168 * The rcd is freed in hfi1_free_ctxtdata after hfi1_postinit_cleanup invokes
1170 * so we're safe from use-after-free of the rcd.
1177 struct hfi1_ctxtdata *rcd;
1189 rcd = hfi1_rcd_get_by_index(dd, i);
1190 if (rcd)
1191 force_recv_intr(rcd);
1192 hfi1_rcd_put(rcd);
1404 if (dd->rcd)
1439 hfi1_get_msgheader(packet->rcd,
1446 struct hfi1_pportdata *ppd = packet->rcd->ppd;
1475 struct hfi1_ibport *ibp = rcd_to_iport(packet->rcd);
1534 struct hfi1_ctxtdata *rcd = packet->rcd;
1535 struct hfi1_pportdata *ppd = rcd->ppd;
1540 hfi1_get_16B_header(packet->rcd,
1607 struct hfi1_ctxtdata *rcd = packet->rcd;
1610 dd_dev_err(rcd->dd,
1612 rcd->ctxt, packet->rhf,
1625 struct hfi1_ctxtdata *rcd = packet->rcd;
1627 rcv_hdrerr(rcd, rcd->ppd, packet);
1636 struct hfi1_ctxtdata *rcd = packet->rcd;
1637 struct napi_struct *napi = rcd->napi;
1658 netdev = hfi1_netdev_get_data(rcd->dd, qpnum);
1662 trace_input_ibhdr(rcd->dd, packet, !!(rhf_dc_info(packet->rhf)));
1663 trace_ctxt_rsm_hist(rcd->ctxt);
1702 ibp = rcd_to_iport(packet->rcd);
1730 struct hfi1_devdata *dd = packet->rcd->dd;
1768 hfi1_dbg_fault_suppress_err(&packet->rcd->dd->verbs_dev) &&
1777 dd_dev_err(packet->rcd->dd,
1788 struct hfi1_ctxtdata *rcd = packet->rcd;
1790 if (hfi1_handle_kdeth_eflags(rcd, rcd->ppd, packet))
1805 struct hfi1_ctxtdata *rcd = packet->rcd;
1808 if (hfi1_handle_kdeth_eflags(rcd, rcd->ppd, packet))
1817 dd_dev_err(packet->rcd->dd, "Invalid packet type %d. Dropping\n",
1823 void seqfile_dump_rcd(struct seq_file *s, struct hfi1_ctxtdata *rcd)
1830 rcd->ctxt, get_hdrq_cnt(rcd), get_hdrqentsize(rcd),
1831 get_dma_rtail_setting(rcd) ?
1833 read_kctxt_csr(rcd->dd, rcd->ctxt, RCV_CTXT_CTRL),
1834 read_kctxt_csr(rcd->dd, rcd->ctxt, RCV_CTXT_STATUS),
1835 read_uctxt_csr(rcd->dd, rcd->ctxt, RCV_HDR_HEAD) &
1837 read_uctxt_csr(rcd->dd, rcd->ctxt, RCV_HDR_TAIL),
1838 rcd->head);
1840 init_packet(rcd, &packet);
1844 __le32 *rhf_addr = (__le32 *)rcd->rcvhdrq + mdata.ps_head +
1845 rcd->rhf_offset;
1853 if (ps_done(&mdata, rhf, rcd))
1856 if (ps_skip(&mdata, rhf, rcd))
1862 packet.hdr = hfi1_get_msgheader(rcd, rhf_addr);
1881 update_ps_mdata(&mdata, rcd);