Lines Matching refs:dmarx

181 	struct pl011_dmarx_data dmarx;  member
365 uap->dmarx.chan = chan; in pl011_dma_probe()
367 uap->dmarx.auto_poll_rate = false; in pl011_dma_probe()
371 uap->dmarx.auto_poll_rate = false; in pl011_dma_probe()
372 uap->dmarx.poll_rate = plat->dma_rx_poll_rate; in pl011_dma_probe()
379 uap->dmarx.auto_poll_rate = true; in pl011_dma_probe()
380 uap->dmarx.poll_rate = 100; in pl011_dma_probe()
384 uap->dmarx.poll_timeout = in pl011_dma_probe()
387 uap->dmarx.poll_timeout = 3000; in pl011_dma_probe()
389 uap->dmarx.auto_poll_rate = of_property_read_bool( in pl011_dma_probe()
391 if (uap->dmarx.auto_poll_rate) { in pl011_dma_probe()
396 uap->dmarx.poll_rate = x; in pl011_dma_probe()
398 uap->dmarx.poll_rate = 100; in pl011_dma_probe()
401 uap->dmarx.poll_timeout = x; in pl011_dma_probe()
403 uap->dmarx.poll_timeout = 3000; in pl011_dma_probe()
407 dma_chan_name(uap->dmarx.chan)); in pl011_dma_probe()
415 if (uap->dmarx.chan) in pl011_dma_remove()
416 dma_release_channel(uap->dmarx.chan); in pl011_dma_remove()
714 struct dma_chan *rxchan = uap->dmarx.chan; in pl011_dma_rx_trigger_dma()
715 struct pl011_dmarx_data *dmarx = &uap->dmarx; in pl011_dma_rx_trigger_dma() local
723 sgbuf = uap->dmarx.use_buf_b ? in pl011_dma_rx_trigger_dma()
724 &uap->dmarx.sgbuf_b : &uap->dmarx.sgbuf_a; in pl011_dma_rx_trigger_dma()
734 uap->dmarx.running = false; in pl011_dma_rx_trigger_dma()
742 dmarx->cookie = dmaengine_submit(desc); in pl011_dma_rx_trigger_dma()
747 uap->dmarx.running = true; in pl011_dma_rx_trigger_dma()
766 &uap->dmarx.sgbuf_b : &uap->dmarx.sgbuf_a; in pl011_dma_rx_chars()
770 struct pl011_dmarx_data *dmarx = &uap->dmarx; in pl011_dma_rx_chars() local
773 if (uap->dmarx.poll_rate) { in pl011_dma_rx_chars()
775 dmataken = sgbuf->sg.length - dmarx->last_residue; in pl011_dma_rx_chars()
799 if (uap->dmarx.poll_rate) in pl011_dma_rx_chars()
800 dmarx->last_residue = sgbuf->sg.length; in pl011_dma_rx_chars()
835 struct pl011_dmarx_data *dmarx = &uap->dmarx; in pl011_dma_rx_irq() local
836 struct dma_chan *rxchan = dmarx->chan; in pl011_dma_rx_irq()
837 struct pl011_sgbuf *sgbuf = dmarx->use_buf_b ? in pl011_dma_rx_irq()
838 &dmarx->sgbuf_b : &dmarx->sgbuf_a; in pl011_dma_rx_irq()
851 dmarx->cookie, &state); in pl011_dma_rx_irq()
858 uap->dmarx.running = false; in pl011_dma_rx_irq()
869 pl011_dma_rx_chars(uap, pending, dmarx->use_buf_b, true); in pl011_dma_rx_irq()
872 dmarx->use_buf_b = !dmarx->use_buf_b; in pl011_dma_rx_irq()
884 struct pl011_dmarx_data *dmarx = &uap->dmarx; in pl011_dma_rx_callback() local
885 struct dma_chan *rxchan = dmarx->chan; in pl011_dma_rx_callback()
886 bool lastbuf = dmarx->use_buf_b; in pl011_dma_rx_callback()
887 struct pl011_sgbuf *sgbuf = dmarx->use_buf_b ? in pl011_dma_rx_callback()
888 &dmarx->sgbuf_b : &dmarx->sgbuf_a; in pl011_dma_rx_callback()
905 rxchan->device->device_tx_status(rxchan, dmarx->cookie, &state); in pl011_dma_rx_callback()
911 uap->dmarx.running = false; in pl011_dma_rx_callback()
912 dmarx->use_buf_b = !lastbuf; in pl011_dma_rx_callback()
950 struct pl011_dmarx_data *dmarx = &uap->dmarx; in pl011_dma_rx_poll() local
951 struct dma_chan *rxchan = uap->dmarx.chan; in pl011_dma_rx_poll()
959 sgbuf = dmarx->use_buf_b ? &uap->dmarx.sgbuf_b : &uap->dmarx.sgbuf_a; in pl011_dma_rx_poll()
960 rxchan->device->device_tx_status(rxchan, dmarx->cookie, &state); in pl011_dma_rx_poll()
961 if (likely(state.residue < dmarx->last_residue)) { in pl011_dma_rx_poll()
962 dmataken = sgbuf->sg.length - dmarx->last_residue; in pl011_dma_rx_poll()
963 size = dmarx->last_residue - state.residue; in pl011_dma_rx_poll()
967 dmarx->last_residue = state.residue; in pl011_dma_rx_poll()
968 dmarx->last_jiffies = jiffies; in pl011_dma_rx_poll()
976 if (jiffies_to_msecs(jiffies - dmarx->last_jiffies) in pl011_dma_rx_poll()
977 > uap->dmarx.poll_timeout) { in pl011_dma_rx_poll()
985 uap->dmarx.running = false; in pl011_dma_rx_poll()
987 del_timer(&uap->dmarx.timer); in pl011_dma_rx_poll()
989 mod_timer(&uap->dmarx.timer, in pl011_dma_rx_poll()
990 jiffies + msecs_to_jiffies(uap->dmarx.poll_rate)); in pl011_dma_rx_poll()
1017 if (!uap->dmarx.chan) in pl011_dma_startup()
1021 ret = pl011_sgbuf_init(uap->dmarx.chan, &uap->dmarx.sgbuf_a, in pl011_dma_startup()
1029 ret = pl011_sgbuf_init(uap->dmarx.chan, &uap->dmarx.sgbuf_b, in pl011_dma_startup()
1034 pl011_sgbuf_free(uap->dmarx.chan, &uap->dmarx.sgbuf_a, in pl011_dma_startup()
1059 if (uap->dmarx.poll_rate) { in pl011_dma_startup()
1060 init_timer(&(uap->dmarx.timer)); in pl011_dma_startup()
1061 uap->dmarx.timer.function = pl011_dma_rx_poll; in pl011_dma_startup()
1062 uap->dmarx.timer.data = (unsigned long)uap; in pl011_dma_startup()
1063 mod_timer(&uap->dmarx.timer, in pl011_dma_startup()
1065 msecs_to_jiffies(uap->dmarx.poll_rate)); in pl011_dma_startup()
1066 uap->dmarx.last_residue = PL011_DMA_BUFFER_SIZE; in pl011_dma_startup()
1067 uap->dmarx.last_jiffies = jiffies; in pl011_dma_startup()
1100 dmaengine_terminate_all(uap->dmarx.chan); in pl011_dma_shutdown()
1102 pl011_sgbuf_free(uap->dmarx.chan, &uap->dmarx.sgbuf_a, DMA_FROM_DEVICE); in pl011_dma_shutdown()
1103 pl011_sgbuf_free(uap->dmarx.chan, &uap->dmarx.sgbuf_b, DMA_FROM_DEVICE); in pl011_dma_shutdown()
1104 if (uap->dmarx.poll_rate) in pl011_dma_shutdown()
1105 del_timer_sync(&uap->dmarx.timer); in pl011_dma_shutdown()
1117 return uap->using_rx_dma && uap->dmarx.running; in pl011_dma_rx_running()
1249 if (uap->dmarx.poll_rate) { in pl011_rx_chars()
1250 uap->dmarx.last_jiffies = jiffies; in pl011_rx_chars()
1251 uap->dmarx.last_residue = PL011_DMA_BUFFER_SIZE; in pl011_rx_chars()
1252 mod_timer(&uap->dmarx.timer, in pl011_rx_chars()
1254 msecs_to_jiffies(uap->dmarx.poll_rate)); in pl011_rx_chars()
1824 if (uap->dmarx.auto_poll_rate) in pl011_set_termios()
1825 uap->dmarx.poll_rate = DIV_ROUND_UP(10000000, baud); in pl011_set_termios()