Lines Matching defs:tx_ring
9871 qwx_dp_srng_cleanup(sc, &dp->tx_ring[i].tcl_data_ring);
9872 qwx_dp_srng_cleanup(sc, &dp->tx_ring[i].tcl_comp_ring);
10326 ret = qwx_dp_srng_setup(sc, &dp->tx_ring[i].tcl_data_ring,
10334 ret = qwx_dp_srng_setup(sc, &dp->tx_ring[i].tcl_comp_ring,
10342 srng = &sc->hal.srng_list[dp->tx_ring[i].tcl_data_ring.ring_id];
10347 dp->tx_ring[i].tcl_data_ring.ring_id);
10422 qwx_dp_tx_ring_free_tx_data(struct qwx_softc *sc, struct dp_tx_ring *tx_ring)
10426 if (tx_ring->data == NULL)
10430 struct qwx_tx_data *tx_data = &tx_ring->data[i];
10440 free(tx_ring->data, M_DEVBUF,
10442 tx_ring->data = NULL;
10446 qwx_dp_tx_ring_alloc_tx_data(struct qwx_softc *sc, struct dp_tx_ring *tx_ring)
10450 tx_ring->data = mallocarray(sc->hw_params.tx_ring_size,
10452 if (tx_ring->data == NULL)
10456 struct qwx_tx_data *tx_data = &tx_ring->data[i];
10513 idr_init(&dp->tx_ring[i].txbuf_idr);
10514 spin_lock_init(&dp->tx_ring[i].tx_idr_lock);
10516 ret = qwx_dp_tx_ring_alloc_tx_data(sc, &dp->tx_ring[i]);
10520 dp->tx_ring[i].cur = 0;
10521 dp->tx_ring[i].queued = 0;
10522 dp->tx_ring[i].tcl_data_ring_id = i;
10523 dp->tx_ring[i].tx_status_head = 0;
10524 dp->tx_ring[i].tx_status_tail = DP_TX_COMP_RING_SIZE - 1;
10525 dp->tx_ring[i].tx_status = malloc(size, M_DEVBUF,
10527 if (!dp->tx_ring[i].tx_status) {
10603 spin_lock_bh(&dp->tx_ring[i].tx_idr_lock);
10604 idr_for_each(&dp->tx_ring[i].txbuf_idr,
10606 idr_destroy(&dp->tx_ring[i].txbuf_idr);
10607 spin_unlock_bh(&dp->tx_ring[i].tx_idr_lock);
10609 qwx_dp_tx_ring_free_tx_data(sc, &dp->tx_ring[i]);
10610 free(dp->tx_ring[i].tx_status, M_DEVBUF,
10612 dp->tx_ring[i].tx_status = NULL;
15426 struct dp_tx_ring *tx_ring)
15433 tx_data = &tx_ring->data[msdu_id];
15439 if (tx_ring->queued > 0)
15440 tx_ring->queued--;
15444 qwx_dp_tx_htt_tx_complete_buf(struct qwx_softc *sc, struct dp_tx_ring *tx_ring,
15448 qwx_dp_tx_free_txbuf(sc, ts->msdu_id, tx_ring);
15453 uint8_t mac_id, uint32_t msdu_id, struct dp_tx_ring *tx_ring)
15479 qwx_dp_tx_htt_tx_complete_buf(sc, tx_ring, &ts);
15483 qwx_dp_tx_free_txbuf(sc, msdu_id, tx_ring);
15568 qwx_dp_tx_complete_msdu(struct qwx_softc *sc, struct dp_tx_ring *tx_ring,
15572 struct qwx_tx_data *tx_data = &tx_ring->data[msdu_id];
15594 if (tx_ring->queued > 0)
15595 tx_ring->queued--;
15606 int hal_ring_id = dp->tx_ring[ring_id].tcl_comp_ring.ring_id;
15609 struct dp_tx_ring *tx_ring = &dp->tx_ring[ring_id];
15618 while ((QWX_TX_COMPL_NEXT(tx_ring->tx_status_head) !=
15619 tx_ring->tx_status_tail) &&
15621 memcpy(&tx_ring->tx_status[tx_ring->tx_status_head], desc,
15623 tx_ring->tx_status_head =
15624 QWX_TX_COMPL_NEXT(tx_ring->tx_status_head);
15628 (ATH11K_TX_COMPL_NEXT(tx_ring->tx_status_head) ==
15629 tx_ring->tx_status_tail))) {
15638 while (QWX_TX_COMPL_NEXT(tx_ring->tx_status_tail) !=
15639 tx_ring->tx_status_head) {
15643 tx_ring->tx_status_tail =
15644 QWX_TX_COMPL_NEXT(tx_ring->tx_status_tail);
15645 tx_status = &tx_ring->tx_status[tx_ring->tx_status_tail];
15659 (void *)tx_status, mac_id, msdu_id, tx_ring);
15663 spin_lock(&tx_ring->tx_idr_lock);
15664 msdu = idr_remove(&tx_ring->txbuf_idr, msdu_id);
15668 spin_unlock(&tx_ring->tx_idr_lock);
15672 spin_unlock(&tx_ring->tx_idr_lock);
15678 qwx_dp_tx_complete_msdu(sc, tx_ring, msdu_id, &ts);
15681 if (tx_ring->queued < sc->hw_params.tx_ring_size - 1) {
24257 struct dp_tx_ring *tx_ring;
24282 tx_ring = &dp->tx_ring[ti.ring_id];
24284 if (tx_ring->queued >= sc->hw_params.tx_ring_size) {
24289 msdu_id = tx_ring->cur;
24290 tx_data = &tx_ring->data[msdu_id];
24414 hal_ring_id = tx_ring->tcl_data_ring.ring_id;
24450 tx_ring->queued++;
24451 tx_ring->cur = (tx_ring->cur + 1) % sc->hw_params.tx_ring_size;
24453 if (tx_ring->queued >= sc->hw_params.tx_ring_size - 1)