Lines Matching defs:ring

955 iwm_alloc_rx_ring(struct iwm_softc *sc, struct iwm_rx_ring *ring)
960 ring->cur = 0;
964 error = iwm_dma_contig_alloc(sc->sc_dmat, &ring->desc_dma, size, 256);
967 "could not allocate RX ring DMA memory\n");
970 ring->desc = ring->desc_dma.vaddr;
973 error = iwm_dma_contig_alloc(sc->sc_dmat, &ring->stat_dma,
974 sizeof(*ring->stat), 16);
980 ring->stat = ring->stat_dma.vaddr;
985 IWM_RBUF_SIZE, 1, IWM_RBUF_SIZE, 0, NULL, NULL, &ring->data_dmat);
994 error = bus_dmamap_create(ring->data_dmat, 0, &ring->spare_map);
1005 struct iwm_rx_data *data = &ring->data[i];
1006 error = bus_dmamap_create(ring->data_dmat, 0, &data->map);
1021 fail: iwm_free_rx_ring(sc, ring);
1026 iwm_reset_rx_ring(struct iwm_softc *sc, struct iwm_rx_ring *ring)
1028 /* Reset the ring state */
1029 ring->cur = 0;
1032 * The hw rx ring index in shared memory must also be cleared,
1040 iwm_free_rx_ring(struct iwm_softc *sc, struct iwm_rx_ring *ring)
1044 iwm_dma_contig_free(&ring->desc_dma);
1045 iwm_dma_contig_free(&ring->stat_dma);
1048 struct iwm_rx_data *data = &ring->data[i];
1051 bus_dmamap_sync(ring->data_dmat, data->map,
1053 bus_dmamap_unload(ring->data_dmat, data->map);
1058 bus_dmamap_destroy(ring->data_dmat, data->map);
1062 if (ring->spare_map != NULL) {
1063 bus_dmamap_destroy(ring->data_dmat, ring->spare_map);
1064 ring->spare_map = NULL;
1066 if (ring->data_dmat != NULL) {
1067 bus_dma_tag_destroy(ring->data_dmat);
1068 ring->data_dmat = NULL;
1073 iwm_alloc_tx_ring(struct iwm_softc *sc, struct iwm_tx_ring *ring, int qid)
1081 ring->qid = qid;
1082 ring->queued = 0;
1083 ring->cur = 0;
1087 error = iwm_dma_contig_alloc(sc->sc_dmat, &ring->desc_dma, size, 256);
1090 "could not allocate TX ring DMA memory\n");
1093 ring->desc = ring->desc_dma.vaddr;
1103 error = iwm_dma_contig_alloc(sc->sc_dmat, &ring->cmd_dma, size, 4);
1109 ring->cmd = ring->cmd_dma.vaddr;
1122 nsegments, maxsize, 0, NULL, NULL, &ring->data_dmat);
1128 paddr = ring->cmd_dma.paddr;
1130 struct iwm_tx_data *data = &ring->data[i];
1137 error = bus_dmamap_create(ring->data_dmat, 0, &data->map);
1144 KASSERT(paddr == ring->cmd_dma.paddr + size,
1148 fail: iwm_free_tx_ring(sc, ring);
1153 iwm_reset_tx_ring(struct iwm_softc *sc, struct iwm_tx_ring *ring)
1158 struct iwm_tx_data *data = &ring->data[i];
1161 bus_dmamap_sync(ring->data_dmat, data->map,
1163 bus_dmamap_unload(ring->data_dmat, data->map);
1169 memset(ring->desc, 0, ring->desc_dma.size);
1170 bus_dmamap_sync(ring->desc_dma.tag, ring->desc_dma.map,
1172 sc->qfullmsk &= ~(1 << ring->qid);
1173 ring->queued = 0;
1174 ring->cur = 0;
1176 if (ring->qid == IWM_MVM_CMD_QUEUE && sc->cmd_hold_nic_awake)
1181 iwm_free_tx_ring(struct iwm_softc *sc, struct iwm_tx_ring *ring)
1185 iwm_dma_contig_free(&ring->desc_dma);
1186 iwm_dma_contig_free(&ring->cmd_dma);
1189 struct iwm_tx_data *data = &ring->data[i];
1192 bus_dmamap_sync(ring->data_dmat, data->map,
1194 bus_dmamap_unload(ring->data_dmat, data->map);
1199 bus_dmamap_destroy(ring->data_dmat, data->map);
1203 if (ring->data_dmat != NULL) {
1204 bus_dma_tag_destroy(ring->data_dmat);
1205 ring->data_dmat = NULL;
1318 /* Stop RX ring. */
1405 * Initialize RX ring. This is from the iwn driver.
1421 /* Set physical address of RX ring (256-byte aligned). */
1483 /* Set physical address of TX ring (256-byte aligned). */
1487 "%s: loading ring %d descriptors (%p) at %lx\n",
3047 /* (re)stock rx ring, called at init-time and at runtime */
3051 struct iwm_rx_ring *ring = &sc->rxq;
3052 struct iwm_rx_data *data = &ring->data[idx];
3063 error = bus_dmamap_load_mbuf_sg(ring->data_dmat, ring->spare_map, m,
3073 bus_dmamap_unload(ring->data_dmat, data->map);
3075 /* Swap ring->spare_map with data->map */
3077 data->map = ring->spare_map;
3078 ring->spare_map = dmamap;
3080 bus_dmamap_sync(ring->data_dmat, data->map, BUS_DMASYNC_PREREAD);
3085 ring->desc[idx] = htole32(seg.ds_addr >> 8);
3086 bus_dmamap_sync(ring->desc_dma.tag, ring->desc_dma.map,
3224 /* replenish ring for the buffer we're going to feed to the sharks */
3353 struct iwm_tx_ring *ring = &sc->txq[qid];
3354 struct iwm_tx_data *txd = &ring->data[idx];
3368 bus_dmamap_sync(ring->data_dmat, txd->map, BUS_DMASYNC_POSTWRITE);
3369 bus_dmamap_unload(ring->data_dmat, txd->map);
3379 if (--ring->queued < IWM_TX_RING_LOMARK) {
3380 sc->qfullmsk &= ~(1 << ring->qid);
3399 struct iwm_tx_ring *ring = &sc->txq[IWM_MVM_CMD_QUEUE];
3411 data = &ring->data[pkt->hdr.idx];
3415 bus_dmamap_sync(ring->data_dmat, data->map,
3417 bus_dmamap_unload(ring->data_dmat, data->map);
3421 wakeup(&ring->desc[pkt->hdr.idx]);
3423 if (((pkt->hdr.idx + ring->queued) % IWM_TX_RING_COUNT) != ring->cur) {
3426 __func__, pkt->hdr.idx, ring->queued, ring->cur);
3430 KASSERT(ring->queued > 0, ("ring->queued is empty?"));
3431 ring->queued--;
3432 if (ring->queued == 0)
3603 struct iwm_tx_ring *ring;
3623 ring = &sc->txq[ac];
3624 desc = &ring->desc[ring->cur];
3626 data = &ring->data[ring->cur];
3629 cmd = &ring->cmd[ring->cur];
3632 cmd->hdr.qid = ring->qid;
3633 cmd->hdr.idx = ring->cur;
3727 error = bus_dmamap_load_mbuf_sg(ring->data_dmat, data->map, m,
3746 error = bus_dmamap_load_mbuf_sg(ring->data_dmat, data->map, m,
3765 ring->qid, ring->cur, totlen, nsegs,
3791 bus_dmamap_sync(ring->data_dmat, data->map,
3793 bus_dmamap_sync(ring->cmd_dma.tag, ring->cmd_dma.map,
3795 bus_dmamap_sync(ring->desc_dma.tag, ring->desc_dma.map,
3799 iwm_update_sched(sc, ring->qid, ring->cur, tx->sta_id, le16toh(tx->len));
3802 /* Kick TX ring. */
3803 ring->cur = (ring->cur + 1) % IWM_TX_RING_COUNT;
3804 IWM_WRITE(sc, IWM_HBUS_TARG_WRPTR, ring->qid << 8 | ring->cur);
3806 /* Mark TX ring as full if we reach a certain threshold. */
3807 if (++ring->queued > IWM_TX_RING_HIMARK) {
3808 sc->qfullmsk |= 1 << ring->qid;
5375 * the ring, when iwm_mvm_rx_rx_mpdu() fails.
5657 struct iwm_rx_ring *ring = &sc->rxq;
5658 struct iwm_rx_data *data = &ring->data[ring->cur];
5660 bus_dmamap_sync(ring->data_dmat, data->map,
5664 "%s: hw = %d cur = %d\n", __func__, hw, ring->cur);
5667 ring->cur = (ring->cur + 1) % IWM_RX_RING_COUNT;
5671 * Tell the firmware that it can reuse the ring entries that
5745 struct iwm_tx_ring *ring = &sc->txq[i];
5747 " tx ring %2d: qid=%-2d cur=%-3d "
5749 i, ring->qid, ring->cur, ring->queued);
5752 " rx ring: cur=%d\n", sc->rxq.cur);
6108 "could not allocate TX ring %d\n",
6114 /* Allocate RX ring. */
6116 device_printf(dev, "could not allocate RX ring\n");