Lines Matching +full:dma +full:- +full:mem

3 /*-
115 device_set_desc(dev, ident->name); in rtwn_pci_probe()
125 struct rtwn_rx_ring *rx_ring = &pc->rx_ring; in rtwn_pci_alloc_rx_list()
132 error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), 1, 0, in rtwn_pci_alloc_rx_list()
134 size, 1, size, 0, NULL, NULL, &rx_ring->desc_dmat); in rtwn_pci_alloc_rx_list()
136 device_printf(sc->sc_dev, "could not create rx desc DMA tag\n"); in rtwn_pci_alloc_rx_list()
140 error = bus_dmamem_alloc(rx_ring->desc_dmat, (void **)&rx_ring->desc, in rtwn_pci_alloc_rx_list()
142 &rx_ring->desc_map); in rtwn_pci_alloc_rx_list()
144 device_printf(sc->sc_dev, "could not allocate rx desc\n"); in rtwn_pci_alloc_rx_list()
147 error = bus_dmamap_load(rx_ring->desc_dmat, rx_ring->desc_map, in rtwn_pci_alloc_rx_list()
148 rx_ring->desc, size, rtwn_pci_dma_map_addr, &rx_ring->paddr, 0); in rtwn_pci_alloc_rx_list()
150 device_printf(sc->sc_dev, "could not load rx desc DMA map\n"); in rtwn_pci_alloc_rx_list()
153 bus_dmamap_sync(rx_ring->desc_dmat, rx_ring->desc_map, in rtwn_pci_alloc_rx_list()
156 /* Create RX buffer DMA tag. */ in rtwn_pci_alloc_rx_list()
157 error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), 1, 0, in rtwn_pci_alloc_rx_list()
159 MJUMPAGESIZE, 1, MJUMPAGESIZE, 0, NULL, NULL, &rx_ring->data_dmat); in rtwn_pci_alloc_rx_list()
161 device_printf(sc->sc_dev, "could not create rx buf DMA tag\n"); in rtwn_pci_alloc_rx_list()
167 rx_data = &rx_ring->rx_data[i]; in rtwn_pci_alloc_rx_list()
168 error = bus_dmamap_create(rx_ring->data_dmat, 0, &rx_data->map); in rtwn_pci_alloc_rx_list()
170 device_printf(sc->sc_dev, in rtwn_pci_alloc_rx_list()
171 "could not create rx buf DMA map\n"); in rtwn_pci_alloc_rx_list()
175 rx_data->m = m_getjcl(M_NOWAIT, MT_DATA, M_PKTHDR, in rtwn_pci_alloc_rx_list()
177 if (rx_data->m == NULL) { in rtwn_pci_alloc_rx_list()
178 device_printf(sc->sc_dev, in rtwn_pci_alloc_rx_list()
184 error = bus_dmamap_load(rx_ring->data_dmat, rx_data->map, in rtwn_pci_alloc_rx_list()
185 mtod(rx_data->m, void *), MJUMPAGESIZE, in rtwn_pci_alloc_rx_list()
186 rtwn_pci_dma_map_addr, &rx_data->paddr, BUS_DMA_NOWAIT); in rtwn_pci_alloc_rx_list()
188 device_printf(sc->sc_dev, in rtwn_pci_alloc_rx_list()
189 "could not load rx buf DMA map"); in rtwn_pci_alloc_rx_list()
193 rtwn_pci_setup_rx_desc(pc, &rx_ring->desc[i], rx_data->paddr, in rtwn_pci_alloc_rx_list()
196 rx_ring->cur = 0; in rtwn_pci_alloc_rx_list()
209 struct rtwn_rx_ring *rx_ring = &pc->rx_ring; in rtwn_pci_reset_rx_list()
214 rx_data = &rx_ring->rx_data[i]; in rtwn_pci_reset_rx_list()
215 rtwn_pci_setup_rx_desc(pc, &rx_ring->desc[i], in rtwn_pci_reset_rx_list()
216 rx_data->paddr, MJUMPAGESIZE, i); in rtwn_pci_reset_rx_list()
218 rx_ring->cur = 0; in rtwn_pci_reset_rx_list()
225 struct rtwn_rx_ring *rx_ring = &pc->rx_ring; in rtwn_pci_free_rx_list()
229 if (rx_ring->desc_dmat != NULL) { in rtwn_pci_free_rx_list()
230 if (rx_ring->desc != NULL) { in rtwn_pci_free_rx_list()
231 bus_dmamap_sync(rx_ring->desc_dmat, in rtwn_pci_free_rx_list()
232 rx_ring->desc_map, in rtwn_pci_free_rx_list()
234 bus_dmamap_unload(rx_ring->desc_dmat, in rtwn_pci_free_rx_list()
235 rx_ring->desc_map); in rtwn_pci_free_rx_list()
236 bus_dmamem_free(rx_ring->desc_dmat, rx_ring->desc, in rtwn_pci_free_rx_list()
237 rx_ring->desc_map); in rtwn_pci_free_rx_list()
238 rx_ring->desc = NULL; in rtwn_pci_free_rx_list()
240 bus_dma_tag_destroy(rx_ring->desc_dmat); in rtwn_pci_free_rx_list()
241 rx_ring->desc_dmat = NULL; in rtwn_pci_free_rx_list()
245 rx_data = &rx_ring->rx_data[i]; in rtwn_pci_free_rx_list()
247 if (rx_data->m != NULL) { in rtwn_pci_free_rx_list()
248 bus_dmamap_sync(rx_ring->data_dmat, in rtwn_pci_free_rx_list()
249 rx_data->map, BUS_DMASYNC_POSTREAD); in rtwn_pci_free_rx_list()
250 bus_dmamap_unload(rx_ring->data_dmat, rx_data->map); in rtwn_pci_free_rx_list()
251 m_freem(rx_data->m); in rtwn_pci_free_rx_list()
252 rx_data->m = NULL; in rtwn_pci_free_rx_list()
254 bus_dmamap_destroy(rx_ring->data_dmat, rx_data->map); in rtwn_pci_free_rx_list()
255 rx_data->map = NULL; in rtwn_pci_free_rx_list()
257 if (rx_ring->data_dmat != NULL) { in rtwn_pci_free_rx_list()
258 bus_dma_tag_destroy(rx_ring->data_dmat); in rtwn_pci_free_rx_list()
259 rx_ring->data_dmat = NULL; in rtwn_pci_free_rx_list()
267 struct rtwn_tx_ring *tx_ring = &pc->tx_ring[qid]; in rtwn_pci_alloc_tx_list()
271 size = sc->txdesc_len * RTWN_PCI_TX_LIST_COUNT; in rtwn_pci_alloc_tx_list()
272 error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), PAGE_SIZE, 0, in rtwn_pci_alloc_tx_list()
274 size, 1, size, 0, NULL, NULL, &tx_ring->desc_dmat); in rtwn_pci_alloc_tx_list()
276 device_printf(sc->sc_dev, "could not create tx ring DMA tag\n"); in rtwn_pci_alloc_tx_list()
280 error = bus_dmamem_alloc(tx_ring->desc_dmat, &tx_ring->desc, in rtwn_pci_alloc_tx_list()
281 BUS_DMA_NOWAIT | BUS_DMA_ZERO, &tx_ring->desc_map); in rtwn_pci_alloc_tx_list()
283 device_printf(sc->sc_dev, "can't map tx ring DMA memory\n"); in rtwn_pci_alloc_tx_list()
286 error = bus_dmamap_load(tx_ring->desc_dmat, tx_ring->desc_map, in rtwn_pci_alloc_tx_list()
287 tx_ring->desc, size, rtwn_pci_dma_map_addr, &tx_ring->paddr, in rtwn_pci_alloc_tx_list()
290 device_printf(sc->sc_dev, "could not load desc DMA map\n"); in rtwn_pci_alloc_tx_list()
293 bus_dmamap_sync(tx_ring->desc_dmat, tx_ring->desc_map, in rtwn_pci_alloc_tx_list()
296 error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), 1, 0, in rtwn_pci_alloc_tx_list()
298 MJUMPAGESIZE, 1, MJUMPAGESIZE, 0, NULL, NULL, &tx_ring->data_dmat); in rtwn_pci_alloc_tx_list()
300 device_printf(sc->sc_dev, "could not create tx buf DMA tag\n"); in rtwn_pci_alloc_tx_list()
305 struct rtwn_tx_data *tx_data = &tx_ring->tx_data[i]; in rtwn_pci_alloc_tx_list()
306 void *tx_desc = (uint8_t *)tx_ring->desc + sc->txdesc_len * i; in rtwn_pci_alloc_tx_list()
307 uint32_t next_desc_addr = tx_ring->paddr + in rtwn_pci_alloc_tx_list()
308 sc->txdesc_len * ((i + 1) % RTWN_PCI_TX_LIST_COUNT); in rtwn_pci_alloc_tx_list()
312 error = bus_dmamap_create(tx_ring->data_dmat, 0, &tx_data->map); in rtwn_pci_alloc_tx_list()
314 device_printf(sc->sc_dev, in rtwn_pci_alloc_tx_list()
315 "could not create tx buf DMA map\n"); in rtwn_pci_alloc_tx_list()
318 tx_data->m = NULL; in rtwn_pci_alloc_tx_list()
319 tx_data->ni = NULL; in rtwn_pci_alloc_tx_list()
332 struct rtwn_tx_ring *ring = &pc->tx_ring[qid]; in rtwn_pci_reset_tx_ring_stopped()
336 struct rtwn_tx_data *data = &ring->tx_data[i]; in rtwn_pci_reset_tx_ring_stopped()
337 void *desc = (uint8_t *)ring->desc + sc->txdesc_len * i; in rtwn_pci_reset_tx_ring_stopped()
341 if (data->m != NULL) { in rtwn_pci_reset_tx_ring_stopped()
342 bus_dmamap_sync(ring->data_dmat, data->map, in rtwn_pci_reset_tx_ring_stopped()
344 bus_dmamap_unload(ring->data_dmat, data->map); in rtwn_pci_reset_tx_ring_stopped()
345 m_freem(data->m); in rtwn_pci_reset_tx_ring_stopped()
346 data->m = NULL; in rtwn_pci_reset_tx_ring_stopped()
348 if (data->ni != NULL) { in rtwn_pci_reset_tx_ring_stopped()
349 ieee80211_free_node(data->ni); in rtwn_pci_reset_tx_ring_stopped()
350 data->ni = NULL; in rtwn_pci_reset_tx_ring_stopped()
354 bus_dmamap_sync(ring->desc_dmat, ring->desc_map, in rtwn_pci_reset_tx_ring_stopped()
357 sc->qfullmsk &= ~(1 << qid); in rtwn_pci_reset_tx_ring_stopped()
358 ring->queued = 0; in rtwn_pci_reset_tx_ring_stopped()
359 ring->last = ring->cur = 0; in rtwn_pci_reset_tx_ring_stopped()
369 struct rtwn_tx_ring *ring = &pc->tx_ring[RTWN_PCI_BEACON_QUEUE]; in rtwn_pci_reset_beacon_ring()
370 struct rtwn_tx_data *data = &ring->tx_data[id]; in rtwn_pci_reset_beacon_ring()
372 ((uint8_t *)ring->desc + id * sc->txdesc_len); in rtwn_pci_reset_beacon_ring()
374 bus_dmamap_sync(ring->desc_dmat, ring->desc_map, BUS_DMASYNC_POSTREAD); in rtwn_pci_reset_beacon_ring()
375 if (txd->flags0 & RTWN_FLAGS0_OWN) { in rtwn_pci_reset_beacon_ring()
377 txd->flags0 &= ~RTWN_FLAGS0_OWN; in rtwn_pci_reset_beacon_ring()
378 bus_dmamap_sync(ring->desc_dmat, ring->desc_map, in rtwn_pci_reset_beacon_ring()
382 bus_dmamap_sync(ring->data_dmat, data->map, in rtwn_pci_reset_beacon_ring()
384 bus_dmamap_unload(ring->data_dmat, data->map); in rtwn_pci_reset_beacon_ring()
409 (vap->iv_opmode == IEEE80211_M_HOSTAP || in rtwn_pci_reset_tx_list()
410 vap->iv_opmode == IEEE80211_M_IBSS)) { in rtwn_pci_reset_tx_list()
413 rtwn_pci_reset_beacon_ring(sc, uvp->id); in rtwn_pci_reset_tx_list()
416 struct rtwn_tx_ring *ring = &pc->tx_ring[qid]; in rtwn_pci_reset_tx_list()
419 struct rtwn_tx_data *data = &ring->tx_data[i]; in rtwn_pci_reset_tx_list()
420 if (data->ni != NULL && data->ni->ni_vap == vap) { in rtwn_pci_reset_tx_list()
427 ieee80211_free_node(data->ni); in rtwn_pci_reset_tx_list()
428 data->ni = NULL; in rtwn_pci_reset_tx_list()
438 struct rtwn_tx_ring *tx_ring = &pc->tx_ring[qid]; in rtwn_pci_free_tx_list()
442 if (tx_ring->desc_dmat != NULL) { in rtwn_pci_free_tx_list()
443 if (tx_ring->desc != NULL) { in rtwn_pci_free_tx_list()
444 bus_dmamap_sync(tx_ring->desc_dmat, in rtwn_pci_free_tx_list()
445 tx_ring->desc_map, BUS_DMASYNC_POSTWRITE); in rtwn_pci_free_tx_list()
446 bus_dmamap_unload(tx_ring->desc_dmat, in rtwn_pci_free_tx_list()
447 tx_ring->desc_map); in rtwn_pci_free_tx_list()
448 bus_dmamem_free(tx_ring->desc_dmat, tx_ring->desc, in rtwn_pci_free_tx_list()
449 tx_ring->desc_map); in rtwn_pci_free_tx_list()
451 bus_dma_tag_destroy(tx_ring->desc_dmat); in rtwn_pci_free_tx_list()
455 tx_data = &tx_ring->tx_data[i]; in rtwn_pci_free_tx_list()
457 if (tx_data->m != NULL) { in rtwn_pci_free_tx_list()
458 bus_dmamap_sync(tx_ring->data_dmat, tx_data->map, in rtwn_pci_free_tx_list()
460 bus_dmamap_unload(tx_ring->data_dmat, tx_data->map); in rtwn_pci_free_tx_list()
461 m_freem(tx_data->m); in rtwn_pci_free_tx_list()
462 tx_data->m = NULL; in rtwn_pci_free_tx_list()
465 if (tx_ring->data_dmat != NULL) { in rtwn_pci_free_tx_list()
466 bus_dma_tag_destroy(tx_ring->data_dmat); in rtwn_pci_free_tx_list()
467 tx_ring->data_dmat = NULL; in rtwn_pci_free_tx_list()
470 sc->qfullmsk &= ~(1 << qid); in rtwn_pci_free_tx_list()
471 tx_ring->queued = 0; in rtwn_pci_free_tx_list()
472 tx_ring->last = tx_ring->cur = 0; in rtwn_pci_free_tx_list()
484 sc->qfullmsk = 0; in rtwn_pci_reset_lists()
507 KASSERT(pc->pc_qmap != 0, ("%s: qmap is not set!\n", __func__)); in rtwn_pci_get_qmap()
509 return (pc->pc_qmap); in rtwn_pci_get_qmap()
520 __func__, (uintmax_t)pc->tx_ring[RTWN_PCI_BK_QUEUE].paddr, in rtwn_pci_set_desc_addr()
521 (uintmax_t)pc->tx_ring[RTWN_PCI_BE_QUEUE].paddr, in rtwn_pci_set_desc_addr()
522 (uintmax_t)pc->tx_ring[RTWN_PCI_VI_QUEUE].paddr, in rtwn_pci_set_desc_addr()
523 (uintmax_t)pc->tx_ring[RTWN_PCI_VO_QUEUE].paddr, in rtwn_pci_set_desc_addr()
524 (uintmax_t)pc->tx_ring[RTWN_PCI_BEACON_QUEUE].paddr, in rtwn_pci_set_desc_addr()
525 (uintmax_t)pc->tx_ring[RTWN_PCI_MGNT_QUEUE].paddr, in rtwn_pci_set_desc_addr()
526 (uintmax_t)pc->tx_ring[RTWN_PCI_HIGH_QUEUE].paddr, in rtwn_pci_set_desc_addr()
527 (uintmax_t)pc->rx_ring.paddr); in rtwn_pci_set_desc_addr()
530 rtwn_pci_write_4(sc, R92C_TCR, pc->tcr); in rtwn_pci_set_desc_addr()
532 /* Configure Tx DMA. */ in rtwn_pci_set_desc_addr()
534 pc->tx_ring[RTWN_PCI_BK_QUEUE].paddr); in rtwn_pci_set_desc_addr()
536 pc->tx_ring[RTWN_PCI_BE_QUEUE].paddr); in rtwn_pci_set_desc_addr()
538 pc->tx_ring[RTWN_PCI_VI_QUEUE].paddr); in rtwn_pci_set_desc_addr()
540 pc->tx_ring[RTWN_PCI_VO_QUEUE].paddr); in rtwn_pci_set_desc_addr()
542 pc->tx_ring[RTWN_PCI_BEACON_QUEUE].paddr); in rtwn_pci_set_desc_addr()
544 pc->tx_ring[RTWN_PCI_MGNT_QUEUE].paddr); in rtwn_pci_set_desc_addr()
546 pc->tx_ring[RTWN_PCI_HIGH_QUEUE].paddr); in rtwn_pci_set_desc_addr()
548 /* Configure Rx DMA. */ in rtwn_pci_set_desc_addr()
549 rtwn_pci_write_4(sc, R92C_RX_DESA, pc->rx_ring.paddr); in rtwn_pci_set_desc_addr()
559 rtwn_beacon_enable(sc, rvp->id, 0); in rtwn_pci_beacon_update_begin()
569 if (rvp->curr_mode != R92C_MSR_NOLINK) in rtwn_pci_beacon_update_end()
570 rtwn_beacon_enable(sc, rvp->id, 1); in rtwn_pci_beacon_update_end()
576 sc->sc_write_1 = rtwn_pci_write_1; in rtwn_pci_attach_methods()
577 sc->sc_write_2 = rtwn_pci_write_2; in rtwn_pci_attach_methods()
578 sc->sc_write_4 = rtwn_pci_write_4; in rtwn_pci_attach_methods()
579 sc->sc_read_1 = rtwn_pci_read_1; in rtwn_pci_attach_methods()
580 sc->sc_read_2 = rtwn_pci_read_2; in rtwn_pci_attach_methods()
581 sc->sc_read_4 = rtwn_pci_read_4; in rtwn_pci_attach_methods()
582 sc->sc_delay = rtwn_pci_delay; in rtwn_pci_attach_methods()
583 sc->sc_tx_start = rtwn_pci_tx_start; in rtwn_pci_attach_methods()
584 sc->sc_reset_lists = rtwn_pci_reset_lists; in rtwn_pci_attach_methods()
585 sc->sc_abort_xfers = rtwn_nop_softc; in rtwn_pci_attach_methods()
586 sc->sc_fw_write_block = rtwn_pci_fw_write_block; in rtwn_pci_attach_methods()
587 sc->sc_get_qmap = rtwn_pci_get_qmap; in rtwn_pci_attach_methods()
588 sc->sc_set_desc_addr = rtwn_pci_set_desc_addr; in rtwn_pci_attach_methods()
589 sc->sc_drop_incorrect_tx = rtwn_nop_softc; in rtwn_pci_attach_methods()
590 sc->sc_beacon_update_begin = rtwn_pci_beacon_update_begin; in rtwn_pci_attach_methods()
591 sc->sc_beacon_update_end = rtwn_pci_beacon_update_end; in rtwn_pci_attach_methods()
592 sc->sc_beacon_unload = rtwn_pci_reset_beacon_ring; in rtwn_pci_attach_methods()
594 sc->bcn_check_interval = 25000; in rtwn_pci_attach_methods()
602 struct rtwn_softc *sc = &pc->pc_sc; in rtwn_pci_attach()
603 struct ieee80211com *ic = &sc->sc_ic; in rtwn_pci_attach()
621 /* Enable bus-mastering. */ in rtwn_pci_attach()
625 pc->mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, in rtwn_pci_attach()
627 if (pc->mem == NULL) { in rtwn_pci_attach()
628 device_printf(dev, "can't map mem space\n"); in rtwn_pci_attach()
631 pc->pc_st = rman_get_bustag(pc->mem); in rtwn_pci_attach()
632 pc->pc_sh = rman_get_bushandle(pc->mem); in rtwn_pci_attach()
640 pc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_ACTIVE | in rtwn_pci_attach()
642 if (pc->irq == NULL) { in rtwn_pci_attach()
652 sc->sc_dev = dev; in rtwn_pci_attach()
653 ic->ic_name = device_get_nameunit(dev); in rtwn_pci_attach()
657 mtx_init(&sc->sc_mtx, ic->ic_name, MTX_NETWORK_LOCK, MTX_DEF); in rtwn_pci_attach()
660 rtwn_pci_attach_private(pc, ident->chip); in rtwn_pci_attach()
688 error = bus_setup_intr(dev, pc->irq, INTR_TYPE_NET | INTR_MPSAFE, in rtwn_pci_attach()
689 NULL, rtwn_pci_intr, sc, &pc->pc_ih); in rtwn_pci_attach()
707 struct rtwn_softc *sc = &pc->pc_sc; in rtwn_pci_detach()
714 if (pc->irq != NULL) { in rtwn_pci_detach()
715 bus_teardown_intr(dev, pc->irq, pc->pc_ih); in rtwn_pci_detach()
716 bus_release_resource(dev, SYS_RES_IRQ, rman_get_rid(pc->irq), in rtwn_pci_detach()
717 pc->irq); in rtwn_pci_detach()
726 if (pc->mem != NULL) in rtwn_pci_detach()
728 rman_get_rid(pc->mem), pc->mem); in rtwn_pci_detach()
731 mtx_destroy(&sc->sc_mtx); in rtwn_pci_detach()
741 ieee80211_stop_all(&pc->pc_sc.sc_ic); in rtwn_pci_shutdown()
750 rtwn_suspend(&pc->pc_sc); in rtwn_pci_suspend()
760 rtwn_resume(&pc->pc_sc); in rtwn_pci_resume()