Lines Matching refs:ch

127 static void bcm_dma_reg_dump(int ch);
132 int ch; member
174 bcm_dma_reset(device_t dev, int ch) in bcm_dma_reset() argument
181 if (ch < 0 || ch >= BCM_DMA_CH_MAX) in bcm_dma_reset()
184 cs = bus_read_4(sc->sc_mem, BCM_DMA_CS(ch)); in bcm_dma_reset()
188 bus_write_4(sc->sc_mem, BCM_DMA_CS(ch), 0); in bcm_dma_reset()
192 cs = bus_read_4(sc->sc_mem, BCM_DMA_CS(ch)); in bcm_dma_reset()
197 "Can't abort DMA transfer at channel %d\n", ch); in bcm_dma_reset()
200 bus_write_4(sc->sc_mem, BCM_DMA_CBNEXT(ch), 0); in bcm_dma_reset()
203 bus_write_4(sc->sc_mem, BCM_DMA_CS(ch), in bcm_dma_reset()
208 bus_write_4(sc->sc_mem, BCM_DMA_CBADDR(ch), 0); in bcm_dma_reset()
209 bus_write_4(sc->sc_mem, BCM_DMA_CBNEXT(ch), 0); in bcm_dma_reset()
212 cb = sc->sc_dma_ch[ch].cb; in bcm_dma_reset()
222 struct bcm_dma_ch *ch; in bcm_dma_init() local
269 ch = &sc->sc_dma_ch[i]; in bcm_dma_init()
271 bzero(ch, sizeof(struct bcm_dma_ch)); in bcm_dma_init()
272 ch->ch = i; in bcm_dma_init()
273 ch->flags = BCM_DMA_CH_UNMAP; in bcm_dma_init()
280 &ch->dma_map); in bcm_dma_init()
298 err = bus_dmamap_load(sc->sc_dma_tag, ch->dma_map, cb_virt, in bcm_dma_init()
306 ch->cb = cb_virt; in bcm_dma_init()
307 ch->vc_cb = cb_phys; in bcm_dma_init()
308 ch->flags = BCM_DMA_CH_FREE; in bcm_dma_init()
309 ch->cb->info = INFO_WAIT_RESP; in bcm_dma_init()
326 int ch = BCM_DMA_CH_INVALID; in bcm_dma_allocate() local
341 ch = i; in bcm_dma_allocate()
342 sc->sc_dma_ch[ch].flags &= ~BCM_DMA_CH_FREE; in bcm_dma_allocate()
343 sc->sc_dma_ch[ch].flags |= BCM_DMA_CH_USED; in bcm_dma_allocate()
348 ch = req_ch; in bcm_dma_allocate()
349 sc->sc_dma_ch[ch].flags &= ~BCM_DMA_CH_FREE; in bcm_dma_allocate()
350 sc->sc_dma_ch[ch].flags |= BCM_DMA_CH_USED; in bcm_dma_allocate()
354 return (ch); in bcm_dma_allocate()
361 bcm_dma_free(int ch) in bcm_dma_free() argument
368 if (ch < 0 || ch >= BCM_DMA_CH_MAX) in bcm_dma_free()
372 if (sc->sc_dma_ch[ch].flags & BCM_DMA_CH_USED) { in bcm_dma_free()
373 sc->sc_dma_ch[ch].flags |= BCM_DMA_CH_FREE; in bcm_dma_free()
374 sc->sc_dma_ch[ch].flags &= ~BCM_DMA_CH_USED; in bcm_dma_free()
375 sc->sc_dma_ch[ch].intr_func = NULL; in bcm_dma_free()
376 sc->sc_dma_ch[ch].intr_arg = NULL; in bcm_dma_free()
379 bcm_dma_reset(sc->sc_dev, ch); in bcm_dma_free()
391 bcm_dma_setup_intr(int ch, void (*func)(int, void *), void *arg) in bcm_dma_setup_intr() argument
399 if (ch < 0 || ch >= BCM_DMA_CH_MAX) in bcm_dma_setup_intr()
402 if (!(sc->sc_dma_ch[ch].flags & BCM_DMA_CH_USED)) in bcm_dma_setup_intr()
405 sc->sc_dma_ch[ch].intr_func = func; in bcm_dma_setup_intr()
406 sc->sc_dma_ch[ch].intr_arg = arg; in bcm_dma_setup_intr()
407 cb = sc->sc_dma_ch[ch].cb; in bcm_dma_setup_intr()
428 bcm_dma_setup_src(int ch, int dreq, int inc_addr, int width) in bcm_dma_setup_src() argument
433 if (ch < 0 || ch >= BCM_DMA_CH_MAX) in bcm_dma_setup_src()
436 if (!(sc->sc_dma_ch[ch].flags & BCM_DMA_CH_USED)) in bcm_dma_setup_src()
439 info = sc->sc_dma_ch[ch].cb->info; in bcm_dma_setup_src()
458 sc->sc_dma_ch[ch].cb->info = info; in bcm_dma_setup_src()
478 bcm_dma_setup_dst(int ch, int dreq, int inc_addr, int width) in bcm_dma_setup_dst() argument
483 if (ch < 0 || ch >= BCM_DMA_CH_MAX) in bcm_dma_setup_dst()
486 if (!(sc->sc_dma_ch[ch].flags & BCM_DMA_CH_USED)) in bcm_dma_setup_dst()
489 info = sc->sc_dma_ch[ch].cb->info; in bcm_dma_setup_dst()
508 sc->sc_dma_ch[ch].cb->info = info; in bcm_dma_setup_dst()
532 bcm_dma_reg_dump(int ch) in bcm_dma_reg_dump() argument
541 if (ch < 0 || ch >= BCM_DMA_CH_MAX) in bcm_dma_reg_dump()
544 printf("DMA%d: ", ch); in bcm_dma_reg_dump()
546 reg = bus_read_4(sc->sc_mem, BCM_DMA_CH(ch) + i*4); in bcm_dma_reg_dump()
563 bcm_dma_start(int ch, vm_paddr_t src, vm_paddr_t dst, int len) in bcm_dma_start() argument
571 if (ch < 0 || ch >= BCM_DMA_CH_MAX) in bcm_dma_start()
574 if (!(sc->sc_dma_ch[ch].flags & BCM_DMA_CH_USED)) in bcm_dma_start()
577 cb = sc->sc_dma_ch[ch].cb; in bcm_dma_start()
584 sc->sc_dma_ch[ch].dma_map, BUS_DMASYNC_PREWRITE); in bcm_dma_start()
586 bus_write_4(sc->sc_mem, BCM_DMA_CBADDR(ch), in bcm_dma_start()
587 sc->sc_dma_ch[ch].vc_cb); in bcm_dma_start()
588 bus_write_4(sc->sc_mem, BCM_DMA_CS(ch), CS_ACTIVE); in bcm_dma_start()
591 bcm_dma_cb_dump(sc->sc_dma_ch[ch].cb); in bcm_dma_start()
592 bcm_dma_reg_dump(ch); in bcm_dma_start()
605 bcm_dma_length(int ch) in bcm_dma_length() argument
613 if (ch < 0 || ch >= BCM_DMA_CH_MAX) in bcm_dma_length()
616 if (!(sc->sc_dma_ch[ch].flags & BCM_DMA_CH_USED)) in bcm_dma_length()
619 cb = sc->sc_dma_ch[ch].cb; in bcm_dma_length()
628 struct bcm_dma_ch *ch = (struct bcm_dma_ch *)arg; in bcm_dma_intr() local
632 cs = bus_read_4(sc->sc_mem, BCM_DMA_CS(ch->ch)); in bcm_dma_intr()
640 if (!(ch->flags & BCM_DMA_CH_USED)) in bcm_dma_intr()
648 debug = bus_read_4(sc->sc_mem, BCM_DMA_DEBUG(ch->ch)); in bcm_dma_intr()
650 debug & DEBUG_ERROR_MASK, ch->ch); in bcm_dma_intr()
651 bus_write_4(sc->sc_mem, BCM_DMA_DEBUG(ch->ch), in bcm_dma_intr()
653 bcm_dma_reset(sc->sc_dev, ch->ch); in bcm_dma_intr()
658 bus_write_4(sc->sc_mem, BCM_DMA_CS(ch->ch), in bcm_dma_intr()
662 bus_dmamap_sync(sc->sc_dma_tag, ch->dma_map, in bcm_dma_intr()
666 if (ch->intr_func) in bcm_dma_intr()
667 ch->intr_func(ch->ch, ch->intr_arg); in bcm_dma_intr()