Lines Matching refs:ring
465 rt2661_alloc_tx_ring(struct rt2661_softc *sc, struct rt2661_tx_ring *ring, in rt2661_alloc_tx_ring() argument
470 ring->count = count; in rt2661_alloc_tx_ring()
471 ring->queued = 0; in rt2661_alloc_tx_ring()
472 ring->cur = ring->next = ring->stat = 0; in rt2661_alloc_tx_ring()
477 0, NULL, NULL, &ring->desc_dmat); in rt2661_alloc_tx_ring()
483 error = bus_dmamem_alloc(ring->desc_dmat, (void **)&ring->desc, in rt2661_alloc_tx_ring()
484 BUS_DMA_NOWAIT | BUS_DMA_ZERO, &ring->desc_map); in rt2661_alloc_tx_ring()
490 error = bus_dmamap_load(ring->desc_dmat, ring->desc_map, ring->desc, in rt2661_alloc_tx_ring()
491 count * RT2661_TX_DESC_SIZE, rt2661_dma_map_addr, &ring->physaddr, in rt2661_alloc_tx_ring()
498 ring->data = malloc(count * sizeof (struct rt2661_tx_data), M_DEVBUF, in rt2661_alloc_tx_ring()
500 if (ring->data == NULL) { in rt2661_alloc_tx_ring()
508 RT2661_MAX_SCATTER, MCLBYTES, 0, NULL, NULL, &ring->data_dmat); in rt2661_alloc_tx_ring()
515 error = bus_dmamap_create(ring->data_dmat, 0, in rt2661_alloc_tx_ring()
516 &ring->data[i].map); in rt2661_alloc_tx_ring()
525 fail: rt2661_free_tx_ring(sc, ring); in rt2661_alloc_tx_ring()
530 rt2661_reset_tx_ring(struct rt2661_softc *sc, struct rt2661_tx_ring *ring) in rt2661_reset_tx_ring() argument
536 for (i = 0; i < ring->count; i++) { in rt2661_reset_tx_ring()
537 desc = &ring->desc[i]; in rt2661_reset_tx_ring()
538 data = &ring->data[i]; in rt2661_reset_tx_ring()
541 bus_dmamap_sync(ring->data_dmat, data->map, in rt2661_reset_tx_ring()
543 bus_dmamap_unload(ring->data_dmat, data->map); in rt2661_reset_tx_ring()
556 bus_dmamap_sync(ring->desc_dmat, ring->desc_map, BUS_DMASYNC_PREWRITE); in rt2661_reset_tx_ring()
558 ring->queued = 0; in rt2661_reset_tx_ring()
559 ring->cur = ring->next = ring->stat = 0; in rt2661_reset_tx_ring()
563 rt2661_free_tx_ring(struct rt2661_softc *sc, struct rt2661_tx_ring *ring) in rt2661_free_tx_ring() argument
568 if (ring->desc != NULL) { in rt2661_free_tx_ring()
569 bus_dmamap_sync(ring->desc_dmat, ring->desc_map, in rt2661_free_tx_ring()
571 bus_dmamap_unload(ring->desc_dmat, ring->desc_map); in rt2661_free_tx_ring()
572 bus_dmamem_free(ring->desc_dmat, ring->desc, ring->desc_map); in rt2661_free_tx_ring()
575 if (ring->desc_dmat != NULL) in rt2661_free_tx_ring()
576 bus_dma_tag_destroy(ring->desc_dmat); in rt2661_free_tx_ring()
578 if (ring->data != NULL) { in rt2661_free_tx_ring()
579 for (i = 0; i < ring->count; i++) { in rt2661_free_tx_ring()
580 data = &ring->data[i]; in rt2661_free_tx_ring()
583 bus_dmamap_sync(ring->data_dmat, data->map, in rt2661_free_tx_ring()
585 bus_dmamap_unload(ring->data_dmat, data->map); in rt2661_free_tx_ring()
593 bus_dmamap_destroy(ring->data_dmat, data->map); in rt2661_free_tx_ring()
596 free(ring->data, M_DEVBUF); in rt2661_free_tx_ring()
599 if (ring->data_dmat != NULL) in rt2661_free_tx_ring()
600 bus_dma_tag_destroy(ring->data_dmat); in rt2661_free_tx_ring()
604 rt2661_alloc_rx_ring(struct rt2661_softc *sc, struct rt2661_rx_ring *ring, in rt2661_alloc_rx_ring() argument
612 ring->count = count; in rt2661_alloc_rx_ring()
613 ring->cur = ring->next = 0; in rt2661_alloc_rx_ring()
618 0, NULL, NULL, &ring->desc_dmat); in rt2661_alloc_rx_ring()
624 error = bus_dmamem_alloc(ring->desc_dmat, (void **)&ring->desc, in rt2661_alloc_rx_ring()
625 BUS_DMA_NOWAIT | BUS_DMA_ZERO, &ring->desc_map); in rt2661_alloc_rx_ring()
631 error = bus_dmamap_load(ring->desc_dmat, ring->desc_map, ring->desc, in rt2661_alloc_rx_ring()
632 count * RT2661_RX_DESC_SIZE, rt2661_dma_map_addr, &ring->physaddr, in rt2661_alloc_rx_ring()
639 ring->data = malloc(count * sizeof (struct rt2661_rx_data), M_DEVBUF, in rt2661_alloc_rx_ring()
641 if (ring->data == NULL) { in rt2661_alloc_rx_ring()
652 1, MCLBYTES, 0, NULL, NULL, &ring->data_dmat); in rt2661_alloc_rx_ring()
662 error = bus_dmamap_create(ring->data_dmat, 0, &data->map); in rt2661_alloc_rx_ring()
676 error = bus_dmamap_load(ring->data_dmat, data->map, in rt2661_alloc_rx_ring()
689 bus_dmamap_sync(ring->desc_dmat, ring->desc_map, BUS_DMASYNC_PREWRITE); in rt2661_alloc_rx_ring()
693 fail: rt2661_free_rx_ring(sc, ring); in rt2661_alloc_rx_ring()
698 rt2661_reset_rx_ring(struct rt2661_softc *sc, struct rt2661_rx_ring *ring) in rt2661_reset_rx_ring() argument
702 for (i = 0; i < ring->count; i++) in rt2661_reset_rx_ring()
703 ring->desc[i].flags = htole32(RT2661_RX_BUSY); in rt2661_reset_rx_ring()
705 bus_dmamap_sync(ring->desc_dmat, ring->desc_map, BUS_DMASYNC_PREWRITE); in rt2661_reset_rx_ring()
707 ring->cur = ring->next = 0; in rt2661_reset_rx_ring()
711 rt2661_free_rx_ring(struct rt2661_softc *sc, struct rt2661_rx_ring *ring) in rt2661_free_rx_ring() argument
716 if (ring->desc != NULL) { in rt2661_free_rx_ring()
717 bus_dmamap_sync(ring->desc_dmat, ring->desc_map, in rt2661_free_rx_ring()
719 bus_dmamap_unload(ring->desc_dmat, ring->desc_map); in rt2661_free_rx_ring()
720 bus_dmamem_free(ring->desc_dmat, ring->desc, ring->desc_map); in rt2661_free_rx_ring()
723 if (ring->desc_dmat != NULL) in rt2661_free_rx_ring()
724 bus_dma_tag_destroy(ring->desc_dmat); in rt2661_free_rx_ring()
726 if (ring->data != NULL) { in rt2661_free_rx_ring()
727 for (i = 0; i < ring->count; i++) { in rt2661_free_rx_ring()
728 data = &ring->data[i]; in rt2661_free_rx_ring()
731 bus_dmamap_sync(ring->data_dmat, data->map, in rt2661_free_rx_ring()
733 bus_dmamap_unload(ring->data_dmat, data->map); in rt2661_free_rx_ring()
738 bus_dmamap_destroy(ring->data_dmat, data->map); in rt2661_free_rx_ring()
741 free(ring->data, M_DEVBUF); in rt2661_free_rx_ring()
744 if (ring->data_dmat != NULL) in rt2661_free_rx_ring()
745 bus_dma_tag_destroy(ring->data_dmat); in rt2661_free_rx_ring()