Lines Matching refs:rcd

203 static inline void *get_egrbuf(const struct hfi1_ctxtdata *rcd, u64 rhf,
208 *update |= !(idx & (rcd->egrbufs.threshold - 1)) && !offset;
209 return (void *)(((u64)(rcd->egrbufs.rcvtids[idx].addr)) +
213 static inline void *hfi1_get_header(struct hfi1_ctxtdata *rcd,
218 return (void *)(rhf_addr - rcd->rhf_offset + offset);
221 static inline struct ib_header *hfi1_get_msgheader(struct hfi1_ctxtdata *rcd,
224 return (struct ib_header *)hfi1_get_header(rcd, rhf_addr);
228 *hfi1_get_16B_header(struct hfi1_ctxtdata *rcd,
231 return (struct hfi1_16b_header *)hfi1_get_header(rcd, rhf_addr);
254 static void rcv_hdrerr(struct hfi1_ctxtdata *rcd, struct hfi1_pportdata *ppd,
260 struct hfi1_ibport *ibp = rcd_to_iport(rcd);
337 hfi1_rc_hdrerr(rcd, packet, qp);
415 static inline void init_packet(struct hfi1_ctxtdata *rcd,
418 packet->rsize = get_hdrqentsize(rcd); /* words */
419 packet->maxcnt = get_hdrq_cnt(rcd) * packet->rsize; /* words */
420 packet->rcd = rcd;
423 packet->rhf_addr = get_rhf_addr(rcd);
425 packet->rhqoff = hfi1_rcd_head(rcd);
540 struct hfi1_ctxtdata *rcd;
551 struct hfi1_ctxtdata *rcd = packet->rcd;
553 mdata->rcd = rcd;
558 if (get_dma_rtail_setting(rcd)) {
559 mdata->ps_tail = get_rcvhdrtail(rcd);
560 if (rcd->ctxt == HFI1_CTRL_CTXT)
561 mdata->ps_seq = hfi1_seq_cnt(rcd);
566 mdata->ps_seq = hfi1_seq_cnt(rcd);
571 struct hfi1_ctxtdata *rcd)
573 if (get_dma_rtail_setting(rcd))
579 struct hfi1_ctxtdata *rcd)
585 if ((rcd->ctxt == HFI1_CTRL_CTXT) && (mdata->ps_head != mdata->ps_tail))
592 struct hfi1_ctxtdata *rcd)
599 if (!get_dma_rtail_setting(rcd) ||
600 rcd->ctxt == HFI1_CTRL_CTXT)
612 #define prescan_rxq(rcd, packet) \
614 if (rcd->ppd->cc_prescan) \
619 struct hfi1_ctxtdata *rcd = packet->rcd;
625 struct hfi1_ibport *ibp = rcd_to_iport(rcd);
626 __le32 *rhf_addr = (__le32 *)rcd->rcvhdrq + mdata.ps_head +
627 packet->rcd->rhf_offset;
630 struct rvt_dev_info *rdi = &rcd->dd->verbs_dev.rdi;
635 if (ps_done(&mdata, rhf, rcd))
638 if (ps_skip(&mdata, rhf, rcd))
644 packet->hdr = hfi1_get_msgheader(packet->rcd, rhf_addr);
678 update_ps_mdata(&mdata, rcd);
685 struct hfi1_ctxtdata *rcd = packet->rcd;
691 list_for_each_entry_safe(qp, nqp, &rcd->qp_wait_list, rspwait) {
721 this_cpu_inc(*packet->rcd->dd->rcv_limit);
739 packet->rcd->dd->ctx0_seq_drop++;
748 packet->rhf_addr = (__le32 *)packet->rcd->rcvhdrq + packet->rhqoff +
749 packet->rcd->rhf_offset;
763 packet->ebuf = get_egrbuf(packet->rcd, packet->rhf,
771 packet->tlen - ((packet->rcd->rcvhdrqentsize -
775 packet->rcd->rhf_rcv_function_map[packet->etype](packet);
783 packet->rhf_addr = (__le32 *)packet->rcd->rcvhdrq + packet->rhqoff +
784 packet->rcd->rhf_offset;
800 packet->ebuf = get_egrbuf(packet->rcd, packet->rhf,
808 packet->tlen - ((get_hdrqentsize(packet->rcd) -
821 packet->rcd->rhf_rcv_function_map[packet->etype](packet);
831 packet->rhf_addr = (__le32 *)packet->rcd->rcvhdrq + packet->rhqoff +
832 packet->rcd->rhf_offset;
847 update_usrhead(packet->rcd, packet->rhqoff, packet->updegr,
862 update_usrhead(packet->rcd, hfi1_rcd_head(packet->rcd), packet->updegr,
868 * @rcd: the context
875 int handle_receive_interrupt_napi_fp(struct hfi1_ctxtdata *rcd, int budget)
879 init_packet(rcd, &packet);
880 if (last_rcv_seq(rcd, rhf_rcv_seq(packet.rhf)))
885 if (hfi1_seq_incr(rcd, rhf_rcv_seq(packet.rhf)))
890 hfi1_set_rcd_head(rcd, packet.rhqoff);
899 int handle_receive_interrupt_nodma_rtail(struct hfi1_ctxtdata *rcd, int thread)
904 init_packet(rcd, &packet);
905 if (last_rcv_seq(rcd, rhf_rcv_seq(packet.rhf))) {
910 prescan_rxq(rcd, &packet);
914 if (hfi1_seq_incr(rcd, rhf_rcv_seq(packet.rhf)))
919 hfi1_set_rcd_head(rcd, packet.rhqoff);
925 int handle_receive_interrupt_dma_rtail(struct hfi1_ctxtdata *rcd, int thread)
931 init_packet(rcd, &packet);
932 hdrqtail = get_rcvhdrtail(rcd);
939 prescan_rxq(rcd, &packet);
948 hfi1_set_rcd_head(rcd, packet.rhqoff);
954 static void set_all_fastpath(struct hfi1_devdata *dd, struct hfi1_ctxtdata *rcd)
963 if (rcd->ctxt >= dd->first_dyn_alloc_ctxt && !rcd->is_vnic) {
964 hfi1_rcd_get(rcd);
965 hfi1_set_fast(rcd);
966 hfi1_rcd_put(rcd);
971 rcd = hfi1_rcd_get_by_index(dd, i);
972 if (rcd && (i < dd->first_dyn_alloc_ctxt || rcd->is_vnic))
973 hfi1_set_fast(rcd);
974 hfi1_rcd_put(rcd);
980 struct hfi1_ctxtdata *rcd;
985 rcd = hfi1_rcd_get_by_index(dd, i);
986 if (!rcd)
988 if (i < dd->first_dyn_alloc_ctxt || rcd->is_vnic)
989 rcd->do_interrupt = rcd->slow_handler;
991 hfi1_rcd_put(rcd);
1001 struct ib_header *hdr = hfi1_get_msgheader(packet->rcd,
1006 packet->rcd,
1011 int hwstate = driver_lstate(packet->rcd->ppd);
1013 &packet->rcd->ppd->linkstate_active_work;
1016 dd_dev_info(packet->rcd->dd,
1022 queue_work(packet->rcd->ppd->link_wq, lsaw);
1036 if (likely(packet->rcd->ppd->host_link_state != HLS_UP_ARMED))
1043 * @rcd: the context
1048 int handle_receive_interrupt(struct hfi1_ctxtdata *rcd, int thread)
1050 struct hfi1_devdata *dd = rcd->dd;
1056 if (!rcd->rcvhdrq)
1059 needset = (rcd->ctxt == HFI1_CTRL_CTXT) ? 0 : 1;
1061 init_packet(rcd, &packet);
1063 if (!get_dma_rtail_setting(rcd)) {
1064 if (last_rcv_seq(rcd, rhf_rcv_seq(packet.rhf))) {
1070 hdrqtail = get_rcvhdrtail(rcd);
1081 if (rcd->ctxt == HFI1_CTRL_CTXT)
1082 if (last_rcv_seq(rcd, rhf_rcv_seq(packet.rhf)))
1086 prescan_rxq(rcd, &packet);
1092 packet.rhf_addr = (__le32 *)rcd->rcvhdrq +
1094 rcd->rhf_offset;
1106 if (!get_dma_rtail_setting(rcd)) {
1107 if (hfi1_seq_incr(rcd, rhf_rcv_seq(packet.rhf)))
1116 if (rcd->ctxt == HFI1_CTRL_CTXT) {
1119 lseq = hfi1_seq_incr(rcd,
1128 set_all_fastpath(dd, rcd);
1134 hfi1_set_rcd_head(rcd, packet.rhqoff);
1147 * @rcd: the context
1154 int handle_receive_interrupt_napi_sp(struct hfi1_ctxtdata *rcd, int budget)
1156 struct hfi1_devdata *dd = rcd->dd;
1161 init_packet(rcd, &packet);
1162 if (last_rcv_seq(rcd, rhf_rcv_seq(packet.rhf)))
1169 packet.rhf_addr = (__le32 *)rcd->rcvhdrq +
1171 rcd->rhf_offset;
1180 if (hfi1_seq_incr(rcd, rhf_rcv_seq(packet.rhf)))
1185 set_all_fastpath(dd, rcd);
1191 hfi1_set_rcd_head(rcd, packet.rhqoff);
1215 * The rcd is freed in hfi1_free_ctxtdata after hfi1_postinit_cleanup invokes
1217 * so we're safe from use-after-free of the rcd.
1224 struct hfi1_ctxtdata *rcd;
1236 rcd = hfi1_rcd_get_by_index(dd, i);
1237 if (rcd)
1238 force_recv_intr(rcd);
1239 hfi1_rcd_put(rcd);
1451 if (dd->rcd)
1486 hfi1_get_msgheader(packet->rcd,
1493 struct hfi1_pportdata *ppd = packet->rcd->ppd;
1522 struct hfi1_ibport *ibp = rcd_to_iport(packet->rcd);
1581 struct hfi1_ctxtdata *rcd = packet->rcd;
1582 struct hfi1_pportdata *ppd = rcd->ppd;
1587 hfi1_get_16B_header(packet->rcd,
1654 struct hfi1_ctxtdata *rcd = packet->rcd;
1657 dd_dev_err(rcd->dd,
1659 rcd->ctxt, packet->rhf,
1672 struct hfi1_ctxtdata *rcd = packet->rcd;
1674 rcv_hdrerr(rcd, rcd->ppd, packet);
1683 struct hfi1_ctxtdata *rcd = packet->rcd;
1684 struct napi_struct *napi = rcd->napi;
1706 netdev = hfi1_netdev_get_data(rcd->dd, qpnum);
1710 trace_input_ibhdr(rcd->dd, packet, !!(rhf_dc_info(packet->rhf)));
1711 trace_ctxt_rsm_hist(rcd->ctxt);
1751 ibp = rcd_to_iport(packet->rcd);
1779 struct hfi1_devdata *dd = packet->rcd->dd;
1817 hfi1_dbg_fault_suppress_err(&packet->rcd->dd->verbs_dev) &&
1826 dd_dev_err(packet->rcd->dd,
1837 struct hfi1_ctxtdata *rcd = packet->rcd;
1839 if (hfi1_handle_kdeth_eflags(rcd, rcd->ppd, packet))
1854 struct hfi1_ctxtdata *rcd = packet->rcd;
1857 if (hfi1_handle_kdeth_eflags(rcd, rcd->ppd, packet))
1866 dd_dev_err(packet->rcd->dd, "Invalid packet type %d. Dropping\n",
1872 void seqfile_dump_rcd(struct seq_file *s, struct hfi1_ctxtdata *rcd)
1879 rcd->ctxt, get_hdrq_cnt(rcd), get_hdrqentsize(rcd),
1880 get_dma_rtail_setting(rcd) ?
1882 read_kctxt_csr(rcd->dd, rcd->ctxt, RCV_CTXT_CTRL),
1883 read_kctxt_csr(rcd->dd, rcd->ctxt, RCV_CTXT_STATUS),
1884 read_uctxt_csr(rcd->dd, rcd->ctxt, RCV_HDR_HEAD) &
1886 read_uctxt_csr(rcd->dd, rcd->ctxt, RCV_HDR_TAIL),
1887 rcd->head);
1889 init_packet(rcd, &packet);
1893 __le32 *rhf_addr = (__le32 *)rcd->rcvhdrq + mdata.ps_head +
1894 rcd->rhf_offset;
1902 if (ps_done(&mdata, rhf, rcd))
1905 if (ps_skip(&mdata, rhf, rcd))
1911 packet.hdr = hfi1_get_msgheader(rcd, rhf_addr);
1930 update_ps_mdata(&mdata, rcd);