rx_ring
ACX_RX_RING_SIZE, (caddr_t *)&rd->rx_ring,
rd->rx_ring, ACX_RX_RING_SIZE, NULL, BUS_DMA_WAITOK);
bd->rx_buf[i].rb_desc = &rd->rx_ring[i];
if (rd->rx_ring != NULL) {
bzero(&rd->rx_ring[i], sizeof(struct acx_host_desc));
rd->rx_ring[i].h_next_desc = htole32(rd->rx_ring_paddr);
rd->rx_ring[i].h_next_desc = htole32(paddr);
bzero(rd->rx_ring, ACX_RX_RING_SIZE);
struct acx_host_desc *rx_ring;
qwx_dp_rxdma_buf_ring_free(struct qwx_softc *sc, struct dp_rxdma_ring *rx_ring)
for (i = 0; i < rx_ring->bufs_max; i++) {
struct qwx_rx_data *rx_data = &rx_ring->rx_data[i];
free(rx_ring->rx_data, M_DEVBUF,
sizeof(rx_ring->rx_data[0]) * rx_ring->bufs_max);
rx_ring->rx_data = NULL;
rx_ring->bufs_max = 0;
memset(rx_ring->freemap, 0xff, sizeof(rx_ring->freemap));
struct dp_rxdma_ring *rx_ring = &dp->rx_refill_buf_ring;
qwx_dp_rxdma_buf_ring_free(sc, rx_ring);
rx_ring = &dp->rxdma_mon_buf_ring;
qwx_dp_rxdma_buf_ring_free(sc, rx_ring);
rx_ring = &dp->rx_mon_status_refill_ring[i];
qwx_dp_rxdma_buf_ring_free(sc, rx_ring);
qwx_next_free_rxbuf_idx(struct dp_rxdma_ring *rx_ring)
for (i = 0; i < nitems(rx_ring->freemap); i++) {
idx = ffs(rx_ring->freemap[i]);
struct dp_rxdma_ring *rx_ring, int req_entries,
req_entries = MIN(req_entries, rx_ring->bufs_max);
srng = &sc->hal.srng_list[rx_ring->refill_buf_ring.ring_id];
if (!req_entries && (num_free > (rx_ring->bufs_max * 3) / 4))
idx = qwx_next_free_rxbuf_idx(rx_ring);
rx_data = &rx_ring->rx_data[idx];
clrbit(rx_ring->freemap, idx);
struct dp_rxdma_ring *rx_ring, uint32_t ringtype)
num_entries = rx_ring->refill_buf_ring.size /
KASSERT(rx_ring->rx_data == NULL);
rx_ring->rx_data = mallocarray(num_entries, sizeof(rx_ring->rx_data[0]),
rx_ring->bufs_max = num_entries;
memset(rx_ring->freemap, 0xff, sizeof(rx_ring->freemap));
struct qwx_rx_data *rx_data = &rx_ring->rx_data[i];
return qwx_dp_rxbufs_replenish(sc, dp->mac_id, rx_ring, num_entries,
struct dp_rxdma_ring *rx_ring;
rx_ring = &dp->rx_refill_buf_ring;
ret = qwx_dp_rxdma_ring_buf_setup(sc, rx_ring, HAL_RXDMA_BUF);
rx_ring = &dp->rxdma_mon_buf_ring;
ret = qwx_dp_rxdma_ring_buf_setup(sc, rx_ring,
rx_ring = &dp->rx_mon_status_refill_ring[i];
ret = qwx_dp_rxdma_ring_buf_setup(sc, rx_ring,
struct dp_rxdma_ring *rx_ring = &dp->rx_refill_buf_ring;
if (buf_id >= rx_ring->bufs_max || isset(rx_ring->freemap, buf_id))
rx_data = &rx_ring->rx_data[buf_id];
setbit(rx_ring->freemap, buf_id);
struct dp_rxdma_ring *rx_ring;
rx_ring = &sc->pdev_dp.rx_refill_buf_ring;
qwx_dp_rxbufs_replenish(sc, i, rx_ring,
struct dp_rxdma_ring *rx_ring;
rx_ring = &sc->pdev_dp.rx_refill_buf_ring;
if (idx >= rx_ring->bufs_max || isset(rx_ring->freemap, idx))
rx_data = &rx_ring->rx_data[idx];
setbit(rx_ring->freemap, idx);
rx_ring = &sc->pdev_dp.rx_refill_buf_ring;
qwx_dp_rxbufs_replenish(sc, i, rx_ring, num_buffs_reaped[i],
struct dp_rxdma_ring *rx_ring;
rx_ring = &pdev_dp->rx_refill_buf_ring;
if (idx >= rx_ring->bufs_max || isset(rx_ring->freemap, idx))
rx_data = &rx_ring->rx_data[idx];
setbit(rx_ring->freemap, idx);
rx_ring = &sc->pdev_dp.rx_refill_buf_ring;
qwx_dp_rxbufs_replenish(sc, i, rx_ring, num_buffs_reaped[i],
struct dp_rxdma_ring *rx_ring, int *buf_idx)
idx = qwx_next_free_rxbuf_idx(rx_ring);
rx_data = &rx_ring->rx_data[idx];
clrbit(rx_ring->freemap, idx);
struct dp_rxdma_ring *rx_ring;
rx_ring = &dp->rx_mon_status_refill_ring[srng_id];
srng = &sc->hal.srng_list[rx_ring->refill_buf_ring.ring_id];
if (buf_idx >= rx_ring->bufs_max ||
isset(rx_ring->freemap, buf_idx)) {
rx_data = &rx_ring->rx_data[buf_idx];
setbit(rx_ring->freemap, buf_idx);
m = qwx_dp_rx_alloc_mon_status_buf(sc, rx_ring, &buf_idx);
rx_data = &rx_ring->rx_data[buf_idx];
struct dp_rxdma_ring *rx_ring;
rx_ring = &sc->pdev_dp.rx_refill_buf_ring;
if (idx >= rx_ring->bufs_max ||
isset(rx_ring->freemap, idx))
rx_data = &rx_ring->rx_data[idx];
setbit(rx_ring->freemap, idx);
qwx_dp_rxbufs_replenish(sc, mac_id, rx_ring, num_buf_freed,
struct dp_rxdma_mon_ring *rx_ring)
for (i = 0; i < rx_ring->bufs_max; i++) {
struct qwz_rx_data *rx_data = &rx_ring->rx_data[i];
free(rx_ring->rx_data, M_DEVBUF,
sizeof(rx_ring->rx_data[0]) * rx_ring->bufs_max);
rx_ring->rx_data = NULL;
rx_ring->bufs_max = 0;
memset(rx_ring->freemap, 0xff, sizeof(rx_ring->freemap));
qwz_next_free_rxbuf_idx(struct dp_rxdma_mon_ring *rx_ring)
for (i = 0; i < nitems(rx_ring->freemap); i++) {
idx = ffs(rx_ring->freemap[i]);
struct dp_rxdma_ring *rx_ring, void *list,
req_entries = MIN(req_entries, rx_ring->bufs_max);
srng = &sc->hal.srng_list[rx_ring->refill_buf_ring.ring_id];
if (!req_entries && (num_free > (rx_ring->bufs_max * 3) / 4))
struct dp_rxdma_mon_ring *rx_ring, uint32_t ringtype)
num_entries = rx_ring->refill_buf_ring.size /
KASSERT(rx_ring->rx_data == NULL);
rx_ring->rx_data = mallocarray(num_entries, sizeof(rx_ring->rx_data[0]),
if (rx_ring->rx_data == NULL)
rx_ring->bufs_max = num_entries;
memset(rx_ring->freemap, 0xff, sizeof(rx_ring->freemap));
qwz_dp_mon_buf_replenish(sc, rx_ring, num_entries);
struct dp_rxdma_ring *rx_ring)
num_entries = rx_ring->refill_buf_ring.size /
qwz_dp_rxbufs_replenish(sc, rx_ring, &list, 0);
struct dp_rxdma_ring *rx_ring = &dp->rx_refill_buf_ring;
if (buf_id >= rx_ring->bufs_max || isset(rx_ring->freemap, buf_id))
rx_data = &rx_ring->rx_data[buf_id];
setbit(rx_ring->freemap, buf_id);
struct dp_rxdma_ring *rx_ring;
rx_ring = &sc->pdev_dp.rx_refill_buf_ring;
qwz_dp_rxbufs_replenish(sc, i, rx_ring, n_bufs_reaped[i],
struct dp_rxdma_ring *rx_ring;
rx_ring = &sc->pdev_dp.rx_refill_buf_ring;
if (idx >= rx_ring->bufs_max || isset(rx_ring->freemap, idx))
rx_data = &rx_ring->rx_data[idx];
setbit(rx_ring->freemap, idx);
rx_ring = &sc->pdev_dp.rx_refill_buf_ring;
qwz_dp_rxbufs_replenish(sc, i, rx_ring, num_buffs_reaped[i],
struct dp_rxdma_ring *rx_ring, int *buf_idx)
idx = qwz_next_free_rxbuf_idx(rx_ring);
rx_data = &rx_ring->rx_data[idx];
clrbit(rx_ring->freemap, idx);
struct dp_rxdma_ring *rx_ring;
rx_ring = &dp->rx_mon_status_refill_ring[srng_id];
srng = &sc->hal.srng_list[rx_ring->refill_buf_ring.ring_id];
if (buf_idx >= rx_ring->bufs_max ||
isset(rx_ring->freemap, buf_idx)) {
rx_data = &rx_ring->rx_data[buf_idx];
setbit(rx_ring->freemap, buf_idx);
m = qwz_dp_rx_alloc_mon_status_buf(sc, rx_ring, &buf_idx);
rx_data = &rx_ring->rx_data[buf_idx];
struct dp_rxdma_ring *rx_ring;
rx_ring = &sc->pdev_dp.rx_refill_buf_ring;
if (idx >= rx_ring->bufs_max ||
isset(rx_ring->freemap, idx))
rx_data = &rx_ring->rx_data[idx];
setbit(rx_ring->freemap, idx);
qwz_dp_rxbufs_replenish(sc, mac_id, rx_ring, num_buf_freed,
slots = if_rxr_get(&sc->rx_ring, sc->max_rx_bd);
if_rxr_put(&sc->rx_ring, slots);
if_rxr_init(&sc->rx_ring, 16, sc->max_rx_bd);
if (if_rxr_inuse(&sc->rx_ring) == 0)
if_rxr_put(&sc->rx_ring, 1);
if_rxr_livelocked(&sc->rx_ring);
NULL, BNX_MAX_JUMBO_MRU, &sc->rx_ring);
struct if_rxring rx_ring;
rx->rx_ring.phys_id = (uint16_t)HWRM_NA_SIGNATURE;
rx->rx_ring.id = BNXT_RX_RING_ID_BASE + bq->q_index;
rx->rx_ring.doorbell = rx->rx_ring.id * 0x80;
rx->rx_ring.ring_size = PAGE_SIZE / sizeof(struct rx_prod_pkt_bd);
rx->rx_ring.vaddr = BNXT_DMA_KVA(rx->rx_ring_mem);
rx->rx_ring.paddr = BNXT_DMA_DVA(rx->rx_ring_mem);
&rx->rx_ring, cp->ring.phys_id, (uint16_t)HWRM_NA_SIGNATURE,
bnxt_write_rx_doorbell(sc, &rx->rx_ring, 0);
&rx->rx_ag_ring, cp->ring.phys_id, rx->rx_ring.phys_id,
rg->rx_ring_id = rx->rx_ring.phys_id;
rx->rx_slots = mallocarray(sizeof(*bs), rx->rx_ring.ring_size,
for (i = 0; i < rx->rx_ring.ring_size; i++) {
if_rxr_init(&rx->rxr[0], 32, rx->rx_ring.ring_size - 1);
i = rx->rx_ring.ring_size;
bnxt_free_slots(sc, rx->rx_slots, i, rx->rx_ring.ring_size);
&rx->rx_ring);
bnxt_free_slots(sc, rx->rx_slots, rx->rx_ring.ring_size,
rx->rx_ring.ring_size);
&rx->rx_ring);
rss_table[i++] = bq->q_rx.rx_ring.phys_id;
if (rx->rx_cons >= rx->rx_ring.ring_size)
rx->rx_cons -= rx->rx_ring.ring_size;
struct bnxt_ring rx_ring;
slots = if_rxr_get(&rx->rxr[0], rx->rx_ring.ring_size);
slots = bnxt_rx_fill_slots(sc, &rx->rx_ring,
softc->sc_queues[0].q_rx.rx_ring.phys_id;
struct et_rxdesc_ring *rx_ring = &sc->sc_rx_ring[n];
bzero(rx_ring->rr_desc, ET_RX_RING_SIZE);
bus_dmamap_sync(sc->sc_dmat, rx_ring->rr_dmap, 0,
rx_ring->rr_dmap->dm_mapsize, BUS_DMASYNC_PREWRITE);
struct et_rxdesc_ring *rx_ring;
rx_ring = &sc->sc_rx_ring[1];
CSR_WRITE_4(sc, ET_RX_RING1_HI, ET_ADDR_HI(rx_ring->rr_paddr));
CSR_WRITE_4(sc, ET_RX_RING1_LO, ET_ADDR_LO(rx_ring->rr_paddr));
rx_ring->rr_index = 0;
rx_ring->rr_wrap = 1;
rx_ring = &sc->sc_rx_ring[0];
CSR_WRITE_4(sc, ET_RX_RING0_HI, ET_ADDR_HI(rx_ring->rr_paddr));
CSR_WRITE_4(sc, ET_RX_RING0_LO, ET_ADDR_LO(rx_ring->rr_paddr));
rx_ring->rr_index = 0;
rx_ring->rr_wrap = 1;
struct et_rxdesc_ring *rx_ring;
rx_ring = &sc->sc_rx_ring[ring_idx];
if (buf_idx != rx_ring->rr_index) {
ring_idx, buf_idx, rx_ring->rr_index);
KKASSERT(rx_ring->rr_index < ET_RX_NDESC);
if (++rx_ring->rr_index == ET_RX_NDESC) {
rx_ring->rr_index = 0;
rx_ring->rr_wrap ^= 1;
rxring_pos = __SHIFTIN(rx_ring->rr_index, ET_RX_RING_POS_INDEX);
if (rx_ring->rr_wrap)
CSR_WRITE_4(sc, rx_ring->rr_posreg, rxring_pos);
struct et_rxdesc_ring *rx_ring;
rx_ring = rbd->rbd_ring;
desc = &rx_ring->rr_desc[buf_idx];
bus_dmamap_sync(sc->sc_dmat, rx_ring->rr_dmap, 0,
rx_ring->rr_dmap->dm_mapsize, BUS_DMASYNC_PREWRITE);
struct et_rxdesc_ring *rx_ring = &sc->sc_rx_ring[i];
(void **)&rx_ring->rr_desc,
&rx_ring->rr_paddr, &rx_ring->rr_dmap, &rx_ring->rr_seg);
rx_ring->rr_posreg = rx_ring_posreg[i];
struct et_rxdesc_ring *rx_ring = &sc->sc_rx_ring[i];
et_dma_mem_destroy(sc, rx_ring->rr_desc, rx_ring->rr_dmap);
ifr[n].ifr_info = rxr->rx_ring;
for (slots = if_rxr_get(&rxr->rx_ring, sc->num_rx_desc); slots > 0;
if_rxr_put(&rxr->rx_ring, slots);
else if (if_rxr_inuse(&rxr->rx_ring) == 0)
while (if_rxr_inuse(&rxr->rx_ring) > 0) {
if_rxr_inuse(&rxr->rx_ring), rxr->last_desc_filled);
if_rxr_put(&rxr->rx_ring, 1);
if_rxr_livelocked(&rxr->rx_ring);
if_rxr_init(&rxr->rx_ring,
if_rxr_init(&rxr->rx_ring, 0, 0);
if (if_rxr_inuse(&rxr->rx_ring) == 0) {
struct if_rxring rx_ring;
if_rxr_init(&rxr->rx_ring, 2 * ((ifp->if_hardmtu / MCLBYTES) + 1),
if (if_rxr_inuse(&rxr->rx_ring) == 0) {
for (slots = if_rxr_get(&rxr->rx_ring, sc->num_rx_desc);
if_rxr_put(&rxr->rx_ring, slots);
} else if (if_rxr_inuse(&rxr->rx_ring) == 0)
if_rxr_init(&rxr->rx_ring, 0, 0);
while (if_rxr_inuse(&rxr->rx_ring) > 0) {
i, if_rxr_inuse(&rxr->rx_ring),
if_rxr_put(&rxr->rx_ring, 1);
if_rxr_livelocked(&rxr->rx_ring);
ifr[n].ifr_info = rxr->rx_ring;
struct if_rxring rx_ring;
struct rx_ring *rxr = &sc->rx_rings[i];
struct rx_ring *rxr;
sc->rx_rings = mallocarray(sc->sc_nqueues, sizeof(struct rx_ring),
free(sc->rx_rings, M_DEVBUF, sc->sc_nqueues * sizeof(struct rx_ring));
struct rx_ring *rxr;
if_rxr_init(&rxr->rx_ring, 0, 0);
ngbe_free_receive_buffers(struct rx_ring *rxr)
ngbe_allocate_receive_buffers(struct rx_ring *rxr)
int ngbe_get_buf(struct rx_ring *, int);
ngbe_setup_receive_ring(struct rx_ring *rxr)
if_rxr_init(&rxr->rx_ring, 2 * ((ifp->if_hardmtu / MCLBYTES) + 1),
if (if_rxr_inuse(&rxr->rx_ring) == 0) {
struct rx_ring *rxr = sc->rx_rings;
struct rx_ring *rxr = sc->rx_rings;
struct rx_ring *rxr = nq->rxr;
void ngbe_rxeof(struct rx_ring *);
ngbe_get_buf(struct rx_ring *rxr, int i)
ngbe_rxeof(struct rx_ring *rxr)
while (if_rxr_inuse(&rxr->rx_ring) > 0) {
if_rxr_inuse(&rxr->rx_ring), rxr->last_desc_filled);
if_rxr_put(&rxr->rx_ring, 1);
if_rxr_livelocked(&rxr->rx_ring);
struct rx_ring *rxr = xrxr;
else if (if_rxr_inuse(&rxr->rx_ring) == 0)
ngbe_rxfill(struct rx_ring *rxr)
for (slots = if_rxr_get(&rxr->rx_ring, sc->num_rx_desc); slots > 0;
int ngbe_rxfill(struct rx_ring *);
if_rxr_put(&rxr->rx_ring, slots);
struct rx_ring *rxr;
ifr[n].ifr_info = rxr->rx_ring;
void ngbe_free_receive_buffers(struct rx_ring *);
int ngbe_allocate_receive_buffers(struct rx_ring *);
int ngbe_setup_receive_ring(struct rx_ring *);
struct if_rxring rx_ring;
struct rx_ring *rxr;
struct rx_ring *rx_rings;
bus_dmamap_sync(sc->sc_dmat, sc->rx_ring.map, 0,
struct r92c_rx_desc_pci *rx_desc = &sc->rx_ring.desc[i];
struct rtwn_rx_data *rx_data = &sc->rx_ring.rx_data[i];
bus_dmamap_sync(sc->sc_dmat, sc->rx_ring.map, 0,
struct r92c_rx_desc_pci *rx_desc = &sc->rx_ring.desc[i];
struct rtwn_rx_data *rx_data = &sc->rx_ring.rx_data[i];
struct rtwn_rx_ring rx_ring;
rtwn_pci_write_4(sc, R92C_RX_DESA, sc->rx_ring.map->dm_segs[0].ds_addr);
struct rtwn_rx_ring *rx_ring = &sc->rx_ring;
&rx_ring->map);
rx_ring->map = NULL;
error = bus_dmamem_alloc(sc->sc_dmat, size, 0, 0, &rx_ring->seg, 1,
&rx_ring->nsegs, BUS_DMA_NOWAIT | BUS_DMA_ZERO);
error = bus_dmamem_map(sc->sc_dmat, &rx_ring->seg, rx_ring->nsegs,
size, (caddr_t *)&rx_ring->desc,
bus_dmamem_free(sc->sc_dmat, &rx_ring->seg, rx_ring->nsegs);
rx_ring->desc = NULL;
error = bus_dmamap_load_raw(sc->sc_dmat, rx_ring->map, &rx_ring->seg,
bus_dmamap_sync(sc->sc_dmat, rx_ring->map, 0, size,
rx_data = &rx_ring->rx_data[i];
rtwn_setup_rx_desc(sc, &rx_ring->desc[i],
struct rtwn_rx_ring *rx_ring = &sc->rx_ring;
rx_data = &rx_ring->rx_data[i];
rtwn_setup_rx_desc(sc, &rx_ring->desc[i],
struct rtwn_rx_ring *rx_ring = &sc->rx_ring;
if (rx_ring->map) {
if (rx_ring->desc) {
bus_dmamap_unload(sc->sc_dmat, rx_ring->map);
bus_dmamem_unmap(sc->sc_dmat, (caddr_t)rx_ring->desc,
bus_dmamem_free(sc->sc_dmat, &rx_ring->seg,
rx_ring->nsegs);
rx_ring->desc = NULL;
bus_dmamap_destroy(sc->sc_dmat, rx_ring->map);
rx_ring->map = NULL;
rx_data = &rx_ring->rx_data[i];