Lines Matching refs:rxring
1269 struct aq_rxring rxring;
2161 aq_rx_intr, &sc->sc_queue[i].rxring, intr_xname);
4730 aq_rxring_alloc(struct aq_softc *sc, struct aq_rxring *rxring)
4736 &rxring->rxr_rxdesc_size, (void **)&rxring->rxr_rxdesc,
4737 &rxring->rxr_rxdesc_dmamap, rxring->rxr_rxdesc_seg);
4741 memset(rxring->rxr_rxdesc, 0, sizeof(aq_rx_desc_t) * AQ_RXD_NUM);
4743 /* fill rxring with dmamaps */
4745 rxring->rxr_mbufs[i].m = NULL;
4748 &rxring->rxr_mbufs[i].dmamap);
4754 aq_rxdrain(struct aq_softc *sc, struct aq_rxring *rxring)
4760 if (rxring->rxr_mbufs[i].m != NULL) {
4762 rxring->rxr_mbufs[i].dmamap);
4763 m_freem(rxring->rxr_mbufs[i].m);
4764 rxring->rxr_mbufs[i].m = NULL;
4770 aq_rxring_free(struct aq_softc *sc, struct aq_rxring *rxring)
4775 aq_rxdrain(sc, rxring);
4777 if (rxring->rxr_mbufs[i].dmamap != NULL) {
4779 rxring->rxr_mbufs[i].dmamap);
4780 rxring->rxr_mbufs[i].dmamap = NULL;
4785 _free_dma(sc, &rxring->rxr_rxdesc_size, (void **)&rxring->rxr_rxdesc,
4786 &rxring->rxr_rxdesc_dmamap, rxring->rxr_rxdesc_seg);
4790 aq_rxring_setmbuf(struct aq_softc *sc, struct aq_rxring *rxring, int idx,
4796 if (rxring->rxr_mbufs[idx].m != NULL) {
4797 bus_dmamap_unload(sc->sc_dmat, rxring->rxr_mbufs[idx].dmamap);
4798 m_freem(rxring->rxr_mbufs[idx].m);
4799 rxring->rxr_mbufs[idx].m = NULL;
4802 rxring->rxr_mbufs[idx].m = m;
4805 error = bus_dmamap_load_mbuf(sc->sc_dmat, rxring->rxr_mbufs[idx].dmamap,
4813 bus_dmamap_sync(sc->sc_dmat, rxring->rxr_mbufs[idx].dmamap, 0,
4814 rxring->rxr_mbufs[idx].dmamap->dm_mapsize, BUS_DMASYNC_PREREAD);
4818 aq_rxring_reset_desc(struct aq_softc *sc, struct aq_rxring *rxring, int idx)
4821 rxring->rxr_rxdesc[idx].read.buf_addr =
4822 htole64(rxring->rxr_mbufs[idx].dmamap->dm_segs[0].ds_addr);
4823 rxring->rxr_rxdesc[idx].read.hdr_addr = 0;
4824 bus_dmamap_sync(sc->sc_dmat, rxring->rxr_rxdesc_dmamap,
4849 aq_rxring_add(struct aq_softc *sc, struct aq_rxring *rxring, int idx)
4857 aq_rxring_setmbuf(sc, rxring, idx, m);
4880 sc->sc_queue[n].rxring.rxr_sc = sc;
4881 sc->sc_queue[n].rxring.rxr_index = n;
4882 mutex_init(&sc->sc_queue[n].rxring.rxr_mutex, MUTEX_DEFAULT,
4884 error = aq_rxring_alloc(sc, &sc->sc_queue[n].rxring);
4904 aq_rxring_free(sc, &sc->sc_queue[n].rxring);
4905 mutex_destroy(&sc->sc_queue[n].rxring.rxr_mutex);
5092 nintr += aq_rx_intr(&sc->sc_queue[0].rxring);
5108 struct aq_rxring *rxring = &queue->rxring;
5114 rxringidx = rxring->rxr_index;
5124 nintr += aq_rx_intr(rxring);
5212 aq_rxring_reset(struct aq_softc *sc, struct aq_rxring *rxring, bool start)
5214 const int ringidx = rxring->rxr_index;
5218 mutex_enter(&rxring->rxr_mutex);
5219 rxring->rxr_active = false;
5220 rxring->rxr_discarding = false;
5221 if (rxring->rxr_receiving_m != NULL) {
5222 m_freem(rxring->rxr_receiving_m);
5223 rxring->rxr_receiving_m = NULL;
5224 rxring->rxr_receiving_m_last = NULL;
5231 aq_rxdrain(sc, rxring);
5235 error = aq_rxring_add(sc, rxring, i);
5237 aq_rxdrain(sc, rxring);
5240 aq_rxring_reset_desc(sc, rxring, i);
5244 paddr_t paddr = rxring->rxr_rxdesc_dmamap->dm_segs[0].ds_addr;
5270 rxring->rxr_readidx = AQ_READ_REG_BIT(sc,
5273 (rxring->rxr_readidx + AQ_RXD_NUM - 1) % AQ_RXD_NUM);
5297 rxring->rxr_active = true;
5300 mutex_exit(&rxring->rxr_mutex);
5469 struct aq_rxring * const rxring = arg;
5470 struct aq_softc * const sc = rxring->rxr_sc;
5472 const int ringidx = rxring->rxr_index;
5481 mutex_enter(&rxring->rxr_mutex);
5483 if (!rxring->rxr_active)
5486 if (rxring->rxr_readidx == AQ_READ_REG_BIT(sc,
5494 discarding = rxring->rxr_discarding;
5495 m0 = rxring->rxr_receiving_m;
5496 mprev = rxring->rxr_receiving_m_last;
5498 for (idx = rxring->rxr_readidx;
5502 bus_dmamap_sync(sc->sc_dmat, rxring->rxr_rxdesc_dmamap,
5506 rxd = &rxring->rxr_rxdesc[idx];
5536 bus_dmamap_sync(sc->sc_dmat, rxring->rxr_mbufs[idx].dmamap, 0,
5537 rxring->rxr_mbufs[idx].dmamap->dm_mapsize,
5539 m = rxring->rxr_mbufs[idx].m;
5555 rxring->rxr_mbufs[idx].m = NULL;
5556 aq_rxring_setmbuf(sc, rxring, idx, new_m);
5668 aq_rxring_reset_desc(sc, rxring, idx);
5672 rxring->rxr_readidx = idx;
5673 rxring->rxr_discarding = discarding;
5674 rxring->rxr_receiving_m = m0;
5675 rxring->rxr_receiving_m_last = mprev;
5680 mutex_exit(&rxring->rxr_mutex);
5772 error = aq_rxring_reset(sc, &sc->sc_queue[i].rxring, true);
5918 struct aq_rxring *rxr = &sc->sc_queue[i].rxring;
5941 struct aq_rxring *rxr = &sc->sc_queue[i].rxring;
5995 aq_rxring_reset(sc, &sc->sc_queue[i].rxring, false);