Lines Matching +full:rx +full:- +full:m

3 /*-
74 desc->rxdw0 = htole32(SM(RTWN_RXDW0_PKTLEN, len) | in rtwn_pci_setup_rx_desc()
75 ((idx == RTWN_PCI_RX_LIST_COUNT - 1) ? RTWN_RXDW0_EOR : 0)); in rtwn_pci_setup_rx_desc()
76 desc->rxbufaddr = htole32(addr); in rtwn_pci_setup_rx_desc()
77 bus_space_barrier(pc->pc_st, pc->pc_sh, 0, pc->pc_mapsize, in rtwn_pci_setup_rx_desc()
79 desc->rxdw0 |= htole32(RTWN_RXDW0_OWN); in rtwn_pci_setup_rx_desc()
85 struct rtwn_softc *sc = &pc->pc_sc; in rtwn_pci_rx_frame()
86 struct rtwn_rx_ring *ring = &pc->rx_ring; in rtwn_pci_rx_frame()
87 struct rtwn_rx_stat_pci *rx_desc = &ring->desc[ring->cur]; in rtwn_pci_rx_frame()
88 struct rtwn_rx_data *rx_data = &ring->rx_data[ring->cur]; in rtwn_pci_rx_frame()
89 struct ieee80211com *ic = &sc->sc_ic; in rtwn_pci_rx_frame()
92 struct mbuf *m, *m1; in rtwn_pci_rx_frame() local
95 /* Dump Rx descriptor. */ in rtwn_pci_rx_frame()
99 __func__, le32toh(rx_desc->rxdw0), le32toh(rx_desc->rxdw1), in rtwn_pci_rx_frame()
100 le32toh(rx_desc->rxdw2), le32toh(rx_desc->rxdw3), in rtwn_pci_rx_frame()
101 le32toh(rx_desc->rxdw4), le32toh(rx_desc->tsf_low), in rtwn_pci_rx_frame()
102 le32toh(rx_desc->rxbufaddr), le32toh(rx_desc->rxbufaddr64)); in rtwn_pci_rx_frame()
104 rxdw0 = le32toh(rx_desc->rxdw0); in rtwn_pci_rx_frame()
107 * This should not happen since we setup our Rx filter in rtwn_pci_rx_frame()
111 "%s: RX flags error (%s)\n", __func__, in rtwn_pci_rx_frame()
129 device_printf(sc->sc_dev, "%s: could not allocate RX mbuf\n", in rtwn_pci_rx_frame()
133 bus_dmamap_sync(ring->data_dmat, rx_data->map, BUS_DMASYNC_POSTREAD); in rtwn_pci_rx_frame()
134 bus_dmamap_unload(ring->data_dmat, rx_data->map); in rtwn_pci_rx_frame()
136 error = bus_dmamap_load(ring->data_dmat, rx_data->map, mtod(m1, void *), in rtwn_pci_rx_frame()
137 MJUMPAGESIZE, rtwn_pci_dma_map_addr, &rx_data->paddr, 0); in rtwn_pci_rx_frame()
141 error = bus_dmamap_load(ring->data_dmat, rx_data->map, in rtwn_pci_rx_frame()
142 mtod(rx_data->m, void *), MJUMPAGESIZE, in rtwn_pci_rx_frame()
143 rtwn_pci_dma_map_addr, &rx_data->paddr, BUS_DMA_NOWAIT); in rtwn_pci_rx_frame()
145 panic("%s: could not load old RX mbuf", in rtwn_pci_rx_frame()
146 device_get_name(sc->sc_dev)); in rtwn_pci_rx_frame()
152 m = rx_data->m; in rtwn_pci_rx_frame()
153 rx_data->m = m1; in rtwn_pci_rx_frame()
154 m->m_pkthdr.len = m->m_len = pktlen + infosz + shift; in rtwn_pci_rx_frame()
156 ni = rtwn_rx_common(sc, m, rx_desc); in rtwn_pci_rx_frame()
159 "%s: Rx frame len %d, infosz %d, shift %d\n", in rtwn_pci_rx_frame()
165 (void)ieee80211_input_mimo(ni, m); in rtwn_pci_rx_frame()
169 (void)ieee80211_input_mimo_all(ic, m); in rtwn_pci_rx_frame()
176 counter_u64_add(ic->ic_ierrors, 1); in rtwn_pci_rx_frame()
182 struct rtwn_rx_ring *ring = &pc->rx_ring; in rtwn_pci_rx_buf_copy()
183 struct rtwn_rx_stat_pci *rx_desc = &ring->desc[ring->cur]; in rtwn_pci_rx_buf_copy()
184 struct rtwn_rx_data *rx_data = &ring->rx_data[ring->cur]; in rtwn_pci_rx_buf_copy()
189 * NB: tx_report() / c2h_report() expects to see USB Rx in rtwn_pci_rx_buf_copy()
190 * descriptor - same as for PCIe, but without rxbufaddr* fields. in rtwn_pci_rx_buf_copy()
193 KASSERT(sizeof(pc->pc_rx_buf) >= desc_size, in rtwn_pci_rx_buf_copy()
194 ("adjust size for PCIe Rx buffer!")); in rtwn_pci_rx_buf_copy()
196 memcpy(pc->pc_rx_buf, rx_desc, desc_size); in rtwn_pci_rx_buf_copy()
198 rxdw0 = le32toh(rx_desc->rxdw0); in rtwn_pci_rx_buf_copy()
201 if (pktlen > sizeof(pc->pc_rx_buf) - desc_size) in rtwn_pci_rx_buf_copy()
203 /* Looks like an ordinary Rx frame. */ in rtwn_pci_rx_buf_copy()
207 bus_dmamap_sync(ring->data_dmat, rx_data->map, BUS_DMASYNC_POSTREAD); in rtwn_pci_rx_buf_copy()
208 memcpy(pc->pc_rx_buf + desc_size, mtod(rx_data->m, void *), pktlen); in rtwn_pci_rx_buf_copy()
216 struct rtwn_softc *sc = &pc->pc_sc; in rtwn_pci_tx_report()
218 if (sc->sc_ratectl != RTWN_RATECTL_NET80211) { in rtwn_pci_tx_report()
220 device_printf(sc->sc_dev, in rtwn_pci_tx_report()
222 __func__, sc->sc_ratectl); in rtwn_pci_tx_report()
227 rtwn_handle_tx_report(sc, pc->pc_rx_buf, len); in rtwn_pci_tx_report()
234 if (sc->sc_tx_n_active > 0 && --sc->sc_tx_n_active <= 1) in rtwn_pci_tx_report()
242 struct rtwn_softc *sc = &pc->pc_sc; in rtwn_pci_tx_report2()
244 if (sc->sc_ratectl != RTWN_RATECTL_NET80211) { in rtwn_pci_tx_report2()
246 device_printf(sc->sc_dev, in rtwn_pci_tx_report2()
248 __func__, sc->sc_ratectl); in rtwn_pci_tx_report2()
253 rtwn_handle_tx_report2(sc, pc->pc_rx_buf, len); in rtwn_pci_tx_report2()
260 if (sc->sc_tx_n_active > 0 && --sc->sc_tx_n_active <= 1) in rtwn_pci_tx_report2()
269 rtwn_handle_c2h_report(&pc->pc_sc, pc->pc_rx_buf, len); in rtwn_pci_c2h_report()
276 struct rtwn_tx_ring *ring = &pc->tx_ring[qid]; in rtwn_pci_tx_done()
281 __func__, qid, ring->last, ring->cur); in rtwn_pci_tx_done()
283 bus_dmamap_sync(ring->desc_dmat, ring->desc_map, in rtwn_pci_tx_done()
286 while(ring->last != ring->cur) { in rtwn_pci_tx_done()
287 data = &ring->tx_data[ring->last]; in rtwn_pci_tx_done()
289 ((uint8_t *)ring->desc + sc->txdesc_len * ring->last); in rtwn_pci_tx_done()
291 KASSERT(data->m != NULL, ("no mbuf")); in rtwn_pci_tx_done()
293 if (desc->flags0 & RTWN_FLAGS0_OWN) in rtwn_pci_tx_done()
297 bus_dmamap_sync(ring->data_dmat, data->map, in rtwn_pci_tx_done()
299 bus_dmamap_unload(ring->data_dmat, data->map); in rtwn_pci_tx_done()
301 if (data->ni != NULL) { /* not a beacon frame */ in rtwn_pci_tx_done()
302 ieee80211_tx_complete(data->ni, data->m, 0); in rtwn_pci_tx_done()
304 data->ni = NULL; in rtwn_pci_tx_done()
305 ring->queued--; in rtwn_pci_tx_done()
306 KASSERT(ring->queued >= 0, in rtwn_pci_tx_done()
307 ("ring->queued (qid %d) underflow!\n", qid)); in rtwn_pci_tx_done()
309 m_freem(data->m); in rtwn_pci_tx_done()
311 data->m = NULL; in rtwn_pci_tx_done()
312 ring->last = (ring->last + 1) % RTWN_PCI_TX_LIST_COUNT; in rtwn_pci_tx_done()
314 if (ring->queued > 0) in rtwn_pci_tx_done()
315 sc->sc_tx_timer = 5; in rtwn_pci_tx_done()
317 sc->sc_tx_timer = 0; in rtwn_pci_tx_done()
321 if ((sc->qfullmsk & (1 << qid)) != 0 && in rtwn_pci_tx_done()
322 ring->queued < (RTWN_PCI_TX_LIST_COUNT - 1)) { in rtwn_pci_tx_done()
323 sc->qfullmsk &= ~(1 << qid); in rtwn_pci_tx_done()
330 * threshold, ensure we age fast-frames out so they're in rtwn_pci_tx_done()
333 if (sc->sc_ratectl != RTWN_RATECTL_NET80211 && ring->queued <= 1) { in rtwn_pci_tx_done()
348 struct rtwn_rx_ring *ring = &pc->rx_ring; in rtwn_pci_rx_done()
353 bus_dmamap_sync(ring->desc_dmat, ring->desc_map, BUS_DMASYNC_POSTREAD); in rtwn_pci_rx_done()
356 rx_desc = &ring->desc[ring->cur]; in rtwn_pci_rx_done()
357 rx_data = &ring->rx_data[ring->cur]; in rtwn_pci_rx_done()
359 if (le32toh(rx_desc->rxdw0) & RTWN_RXDW0_OWN) in rtwn_pci_rx_done()
364 switch (rtwn_classify_intr(sc, pc->pc_rx_buf, len)) { in rtwn_pci_rx_done()
379 KASSERT(0, ("unknown Rx classification code")); in rtwn_pci_rx_done()
383 /* Update / reset RX descriptor (and set OWN bit). */ in rtwn_pci_rx_done()
384 rtwn_pci_setup_rx_desc(pc, rx_desc, rx_data->paddr, in rtwn_pci_rx_done()
385 MJUMPAGESIZE, ring->cur); in rtwn_pci_rx_done()
387 if (!(sc->sc_flags & RTWN_RUNNING)) in rtwn_pci_rx_done()
391 bus_dmamap_sync(ring->desc_dmat, ring->desc_map, in rtwn_pci_rx_done()
394 if (le32toh(rx_desc->rxdw0) & RTWN_RXDW0_OWN) in rtwn_pci_rx_done()
395 ring->cur = (ring->cur + 1) % RTWN_PCI_RX_LIST_COUNT; in rtwn_pci_rx_done()
415 if (!(sc->sc_flags & RTWN_RUNNING)) in rtwn_pci_intr()
424 if (sc->sc_flags & RTWN_RUNNING) in rtwn_pci_intr()