Lines Matching refs:ring

613     struct rt2661_tx_ring *ring, int count)  in rt2661_alloc_tx_ring()  argument
622 ring->count = count; in rt2661_alloc_tx_ring()
623 ring->queued = 0; in rt2661_alloc_tx_ring()
624 ring->cur = 0; in rt2661_alloc_tx_ring()
625 ring->next = 0; in rt2661_alloc_tx_ring()
626 ring->stat = 0; in rt2661_alloc_tx_ring()
631 &ring->txdesc_dma); in rt2661_alloc_tx_ring()
638 ring->desc = (struct rt2661_tx_desc *)ring->txdesc_dma.mem_va; in rt2661_alloc_tx_ring()
639 (void) bzero(ring->desc, size); in rt2661_alloc_tx_ring()
640 ring->paddr = ring->txdesc_dma.cookie.dmac_address; in rt2661_alloc_tx_ring()
642 ring->data = kmem_zalloc(len, KM_NOSLEEP); in rt2661_alloc_tx_ring()
643 if (ring->data == NULL) { in rt2661_alloc_tx_ring()
650 desc = &ring->desc[i]; in rt2661_alloc_tx_ring()
651 data = &ring->data[i]; in rt2661_alloc_tx_ring()
662 rt2661_free_dma_mem(&ring->data[i].txdata_dma); in rt2661_alloc_tx_ring()
672 (void) ddi_dma_sync(ring->txdesc_dma.dma_hdl, in rt2661_alloc_tx_ring()
676 if (ring->data) in rt2661_alloc_tx_ring()
677 kmem_free(ring->data, in rt2661_alloc_tx_ring()
680 rt2661_free_dma_mem(&ring->txdesc_dma); in rt2661_alloc_tx_ring()
686 rt2661_reset_tx_ring(struct rt2661_softc *sc, struct rt2661_tx_ring *ring) in rt2661_reset_tx_ring() argument
692 for (i = 0; i < ring->count; i++) { in rt2661_reset_tx_ring()
693 desc = &ring->desc[i]; in rt2661_reset_tx_ring()
694 data = &ring->data[i]; in rt2661_reset_tx_ring()
705 (void) ddi_dma_sync(ring->txdesc_dma.dma_hdl, 0, in rt2661_reset_tx_ring()
706 ring->count * sizeof (struct rt2661_tx_desc), in rt2661_reset_tx_ring()
709 ring->queued = 0; in rt2661_reset_tx_ring()
710 ring->cur = ring->next = ring->stat = 0; in rt2661_reset_tx_ring()
716 rt2661_free_tx_ring(struct rt2661_softc *sc, struct rt2661_tx_ring *ring) in rt2661_free_tx_ring() argument
721 if (ring->desc != NULL) { in rt2661_free_tx_ring()
722 rt2661_free_dma_mem(&ring->txdesc_dma); in rt2661_free_tx_ring()
725 if (ring->data != NULL) { in rt2661_free_tx_ring()
726 for (i = 0; i < ring->count; i++) { in rt2661_free_tx_ring()
727 data = &ring->data[i]; in rt2661_free_tx_ring()
734 kmem_free(ring->data, in rt2661_free_tx_ring()
735 ring->count * sizeof (struct rt2661_tx_data)); in rt2661_free_tx_ring()
742 struct rt2661_rx_ring *ring, int count) in rt2661_alloc_rx_ring() argument
751 ring->count = count; in rt2661_alloc_rx_ring()
752 ring->cur = 0; in rt2661_alloc_rx_ring()
753 ring->next = 0; in rt2661_alloc_rx_ring()
758 &ring->rxdesc_dma); in rt2661_alloc_rx_ring()
765 ring->desc = (struct rt2661_rx_desc *)ring->rxdesc_dma.mem_va; in rt2661_alloc_rx_ring()
766 (void) bzero(ring->desc, size); in rt2661_alloc_rx_ring()
767 ring->paddr = ring->rxdesc_dma.cookie.dmac_address; in rt2661_alloc_rx_ring()
769 ring->data = kmem_zalloc(len, KM_NOSLEEP); in rt2661_alloc_rx_ring()
770 if (ring->data == NULL) { in rt2661_alloc_rx_ring()
777 desc = &ring->desc[i]; in rt2661_alloc_rx_ring()
778 data = &ring->data[i]; in rt2661_alloc_rx_ring()
789 rt2661_free_dma_mem(&ring->data[i].rxdata_dma); in rt2661_alloc_rx_ring()
800 (void) ddi_dma_sync(ring->rxdesc_dma.dma_hdl, in rt2661_alloc_rx_ring()
804 if (ring->data) in rt2661_alloc_rx_ring()
805 kmem_free(ring->data, in rt2661_alloc_rx_ring()
808 rt2661_free_dma_mem(&ring->rxdesc_dma); in rt2661_alloc_rx_ring()
814 rt2661_reset_rx_ring(struct rt2661_softc *sc, struct rt2661_rx_ring *ring) in rt2661_reset_rx_ring() argument
818 for (i = 0; i < ring->count; i++) in rt2661_reset_rx_ring()
819 ring->desc[i].flags = LE_32(RT2661_RX_BUSY); in rt2661_reset_rx_ring()
822 (void) ddi_dma_sync(ring->rxdesc_dma.dma_hdl, 0, in rt2661_reset_rx_ring()
823 ring->count * sizeof (struct rt2661_rx_ring), in rt2661_reset_rx_ring()
826 ring->cur = ring->next = 0; in rt2661_reset_rx_ring()
831 rt2661_free_rx_ring(struct rt2661_softc *sc, struct rt2661_rx_ring *ring) in rt2661_free_rx_ring() argument
836 if (ring->desc != NULL) { in rt2661_free_rx_ring()
837 rt2661_free_dma_mem(&ring->rxdesc_dma); in rt2661_free_rx_ring()
840 if (ring->data != NULL) { in rt2661_free_rx_ring()
841 for (i = 0; i < ring->count; i++) { in rt2661_free_rx_ring()
842 data = &ring->data[i]; in rt2661_free_rx_ring()
845 kmem_free(ring->data, in rt2661_free_rx_ring()
846 ring->count * sizeof (struct rt2661_rx_data)); in rt2661_free_rx_ring()
851 rt2661_tx_dma_intr(struct rt2661_softc *sc, struct rt2661_tx_ring *ring) in rt2661_tx_dma_intr() argument
857 desc = &ring->desc[ring->next]; in rt2661_tx_dma_intr()
858 data = &ring->data[ring->next]; in rt2661_tx_dma_intr()
860 (void) ddi_dma_sync(ring->txdesc_dma.dma_hdl, in rt2661_tx_dma_intr()
861 ring->next * RT2661_TX_DESC_SIZE, in rt2661_tx_dma_intr()
876 (void) ddi_dma_sync(ring->txdesc_dma.dma_hdl, in rt2661_tx_dma_intr()
877 ring->next * RT2661_TX_DESC_SIZE, in rt2661_tx_dma_intr()
882 "tx dma done q=%p idx=%u\n", ring, ring->next); in rt2661_tx_dma_intr()
884 if (++ring->next >= ring->count) /* faster than % count */ in rt2661_tx_dma_intr()
885 ring->next = 0; in rt2661_tx_dma_intr()
893 struct rt2661_tx_ring *ring; in rt2661_tx_intr() local
907 ring = (qid <= 3) ? &sc->txq[qid] : &sc->mgtq; in rt2661_tx_intr()
910 data = &ring->data[ring->stat]; in rt2661_tx_intr()
946 "tx done q=%d idx=%u\n", qid, ring->stat); in rt2661_tx_intr()
951 ring->queued--; in rt2661_tx_intr()
954 if (++ring->stat >= ring->count) in rt2661_tx_intr()
955 ring->stat = 0; in rt2661_tx_intr()
969 struct rt2661_rx_ring *ring; in rt2661_rx_intr() local
980 ring = &sc->rxq; in rt2661_rx_intr()
985 desc = &ring->desc[ring->cur]; in rt2661_rx_intr()
986 data = &ring->data[ring->cur]; in rt2661_rx_intr()
988 (void) ddi_dma_sync(ring->rxdesc_dma.dma_hdl, in rt2661_rx_intr()
989 ring->cur * RT2661_RX_DESC_SIZE, in rt2661_rx_intr()
1054 (void) ddi_dma_sync(ring->rxdesc_dma.dma_hdl, in rt2661_rx_intr()
1055 ring->cur * RT2661_RX_DESC_SIZE, in rt2661_rx_intr()
1061 ring->cur = (ring->cur + 1) % RT2661_RX_RING_COUNT; in rt2661_rx_intr()
1411 struct rt2661_tx_ring *ring; in rt2661_send() local
1424 ring = &sc->txq[0]; in rt2661_send()
1427 if (ring->queued > RT2661_TX_RING_COUNT - 8) { in rt2661_send()
1473 desc = &ring->desc[ring->cur]; in rt2661_send()
1474 data = &ring->data[ring->cur]; in rt2661_send()
1505 (void) ddi_dma_sync(ring->txdesc_dma.dma_hdl, in rt2661_send()
1506 ring->cur * RT2661_TX_DESC_SIZE, in rt2661_send()
1512 pktlen, ring->cur, rate); in rt2661_send()
1515 ring->queued++; in rt2661_send()
1516 ring->cur = (ring->cur + 1) % RT2661_TX_RING_COUNT; in rt2661_send()
1537 struct rt2661_tx_ring *ring; in rt2661_mgmt_send() local
1554 ring = &sc->mgtq; in rt2661_mgmt_send()
1557 if (ring->queued >= RT2661_MGT_RING_COUNT) { in rt2661_mgmt_send()
1600 desc = &ring->desc[ring->cur]; in rt2661_mgmt_send()
1601 data = &ring->data[ring->cur]; in rt2661_mgmt_send()
1628 (void) ddi_dma_sync(ring->txdesc_dma.dma_hdl, in rt2661_mgmt_send()
1629 ring->cur * RT2661_TX_DESC_SIZE, in rt2661_mgmt_send()
1635 pktlen, ring->cur, rate); in rt2661_mgmt_send()
1638 ring->queued++; in rt2661_mgmt_send()
1639 ring->cur = (ring->cur + 1) % RT2661_MGT_RING_COUNT; in rt2661_mgmt_send()