Lines Matching defs:ring

247 			    "could not allocate Tx ring %d\n", ac);
254 device_printf(sc->sc_dev, "could not allocate Mgt ring\n");
260 device_printf(sc->sc_dev, "could not allocate Rx ring\n");
465 rt2661_alloc_tx_ring(struct rt2661_softc *sc, struct rt2661_tx_ring *ring,
470 ring->count = count;
471 ring->queued = 0;
472 ring->cur = ring->next = ring->stat = 0;
477 0, NULL, NULL, &ring->desc_dmat);
483 error = bus_dmamem_alloc(ring->desc_dmat, (void **)&ring->desc,
484 BUS_DMA_NOWAIT | BUS_DMA_ZERO, &ring->desc_map);
490 error = bus_dmamap_load(ring->desc_dmat, ring->desc_map, ring->desc,
491 count * RT2661_TX_DESC_SIZE, rt2661_dma_map_addr, &ring->physaddr,
498 ring->data = malloc(count * sizeof (struct rt2661_tx_data), M_DEVBUF,
500 if (ring->data == NULL) {
508 RT2661_MAX_SCATTER, MCLBYTES, 0, NULL, NULL, &ring->data_dmat);
515 error = bus_dmamap_create(ring->data_dmat, 0,
516 &ring->data[i].map);
525 fail: rt2661_free_tx_ring(sc, ring);
530 rt2661_reset_tx_ring(struct rt2661_softc *sc, struct rt2661_tx_ring *ring)
536 for (i = 0; i < ring->count; i++) {
537 desc = &ring->desc[i];
538 data = &ring->data[i];
541 bus_dmamap_sync(ring->data_dmat, data->map,
543 bus_dmamap_unload(ring->data_dmat, data->map);
556 bus_dmamap_sync(ring->desc_dmat, ring->desc_map, BUS_DMASYNC_PREWRITE);
558 ring->queued = 0;
559 ring->cur = ring->next = ring->stat = 0;
563 rt2661_free_tx_ring(struct rt2661_softc *sc, struct rt2661_tx_ring *ring)
568 if (ring->desc != NULL) {
569 bus_dmamap_sync(ring->desc_dmat, ring->desc_map,
571 bus_dmamap_unload(ring->desc_dmat, ring->desc_map);
572 bus_dmamem_free(ring->desc_dmat, ring->desc, ring->desc_map);
575 if (ring->desc_dmat != NULL)
576 bus_dma_tag_destroy(ring->desc_dmat);
578 if (ring->data != NULL) {
579 for (i = 0; i < ring->count; i++) {
580 data = &ring->data[i];
583 bus_dmamap_sync(ring->data_dmat, data->map,
585 bus_dmamap_unload(ring->data_dmat, data->map);
593 bus_dmamap_destroy(ring->data_dmat, data->map);
596 free(ring->data, M_DEVBUF);
599 if (ring->data_dmat != NULL)
600 bus_dma_tag_destroy(ring->data_dmat);
604 rt2661_alloc_rx_ring(struct rt2661_softc *sc, struct rt2661_rx_ring *ring,
612 ring->count = count;
613 ring->cur = ring->next = 0;
618 0, NULL, NULL, &ring->desc_dmat);
624 error = bus_dmamem_alloc(ring->desc_dmat, (void **)&ring->desc,
625 BUS_DMA_NOWAIT | BUS_DMA_ZERO, &ring->desc_map);
631 error = bus_dmamap_load(ring->desc_dmat, ring->desc_map, ring->desc,
632 count * RT2661_RX_DESC_SIZE, rt2661_dma_map_addr, &ring->physaddr,
639 ring->data = malloc(count * sizeof (struct rt2661_rx_data), M_DEVBUF,
641 if (ring->data == NULL) {
648 * Pre-allocate Rx buffers and populate Rx ring.
652 1, MCLBYTES, 0, NULL, NULL, &ring->data_dmat);
662 error = bus_dmamap_create(ring->data_dmat, 0, &data->map);
676 error = bus_dmamap_load(ring->data_dmat, data->map,
689 bus_dmamap_sync(ring->desc_dmat, ring->desc_map, BUS_DMASYNC_PREWRITE);
693 fail: rt2661_free_rx_ring(sc, ring);
698 rt2661_reset_rx_ring(struct rt2661_softc *sc, struct rt2661_rx_ring *ring)
702 for (i = 0; i < ring->count; i++)
703 ring->desc[i].flags = htole32(RT2661_RX_BUSY);
705 bus_dmamap_sync(ring->desc_dmat, ring->desc_map, BUS_DMASYNC_PREWRITE);
707 ring->cur = ring->next = 0;
711 rt2661_free_rx_ring(struct rt2661_softc *sc, struct rt2661_rx_ring *ring)
716 if (ring->desc != NULL) {
717 bus_dmamap_sync(ring->desc_dmat, ring->desc_map,
719 bus_dmamap_unload(ring->desc_dmat, ring->desc_map);
720 bus_dmamem_free(ring->desc_dmat, ring->desc, ring->desc_map);
723 if (ring->desc_dmat != NULL)
724 bus_dma_tag_destroy(ring->desc_dmat);
726 if (ring->data != NULL) {
727 for (i = 0; i < ring->count; i++) {
728 data = &ring->data[i];
731 bus_dmamap_sync(ring->data_dmat, data->map,
733 bus_dmamap_unload(ring->data_dmat, data->map);
738 bus_dmamap_destroy(ring->data_dmat, data->map);
741 free(ring->data, M_DEVBUF);
744 if (ring->data_dmat != NULL)
745 bus_dma_tag_destroy(ring->data_dmat);
1000 * Try to allocate a new mbuf for this ring element and load it
1001 * before processing the current mbuf. If the ring element
1036 * New mbuf successfully loaded, update Rx ring and continue
1592 /* there is no place left in this ring */
2022 * Update QoS (802.11e) settings for each h/w Tx ring.
2251 /* initialize Mgt ring */
2254 /* initialize Rx ring */
2266 RT2661_TX_RING_COUNT << 8 | /* XXX: HCCA ring unused */
2281 /* load base address of Rx ring */