Lines Matching refs:dmarx

272 	struct pl011_dmarx_data dmarx;  member
484 uap->dmarx.chan = chan; in pl011_dma_probe()
486 uap->dmarx.auto_poll_rate = false; in pl011_dma_probe()
490 uap->dmarx.auto_poll_rate = false; in pl011_dma_probe()
491 uap->dmarx.poll_rate = plat->dma_rx_poll_rate; in pl011_dma_probe()
498 uap->dmarx.auto_poll_rate = true; in pl011_dma_probe()
499 uap->dmarx.poll_rate = 100; in pl011_dma_probe()
503 uap->dmarx.poll_timeout = in pl011_dma_probe()
506 uap->dmarx.poll_timeout = 3000; in pl011_dma_probe()
508 uap->dmarx.auto_poll_rate = of_property_read_bool( in pl011_dma_probe()
510 if (uap->dmarx.auto_poll_rate) { in pl011_dma_probe()
515 uap->dmarx.poll_rate = x; in pl011_dma_probe()
517 uap->dmarx.poll_rate = 100; in pl011_dma_probe()
520 uap->dmarx.poll_timeout = x; in pl011_dma_probe()
522 uap->dmarx.poll_timeout = 3000; in pl011_dma_probe()
526 dma_chan_name(uap->dmarx.chan)); in pl011_dma_probe()
534 if (uap->dmarx.chan) in pl011_dma_remove()
535 dma_release_channel(uap->dmarx.chan); in pl011_dma_remove()
829 struct dma_chan *rxchan = uap->dmarx.chan; in pl011_dma_rx_trigger_dma()
830 struct pl011_dmarx_data *dmarx = &uap->dmarx; in pl011_dma_rx_trigger_dma() local
838 sgbuf = uap->dmarx.use_buf_b ? in pl011_dma_rx_trigger_dma()
839 &uap->dmarx.sgbuf_b : &uap->dmarx.sgbuf_a; in pl011_dma_rx_trigger_dma()
849 uap->dmarx.running = false; in pl011_dma_rx_trigger_dma()
857 dmarx->cookie = dmaengine_submit(desc); in pl011_dma_rx_trigger_dma()
862 uap->dmarx.running = true; in pl011_dma_rx_trigger_dma()
881 &uap->dmarx.sgbuf_b : &uap->dmarx.sgbuf_a; in pl011_dma_rx_chars()
885 struct pl011_dmarx_data *dmarx = &uap->dmarx; in pl011_dma_rx_chars() local
888 if (uap->dmarx.poll_rate) { in pl011_dma_rx_chars()
890 dmataken = sgbuf->sg.length - dmarx->last_residue; in pl011_dma_rx_chars()
914 if (uap->dmarx.poll_rate) in pl011_dma_rx_chars()
915 dmarx->last_residue = sgbuf->sg.length; in pl011_dma_rx_chars()
950 struct pl011_dmarx_data *dmarx = &uap->dmarx; in pl011_dma_rx_irq() local
951 struct dma_chan *rxchan = dmarx->chan; in pl011_dma_rx_irq()
952 struct pl011_sgbuf *sgbuf = dmarx->use_buf_b ? in pl011_dma_rx_irq()
953 &dmarx->sgbuf_b : &dmarx->sgbuf_a; in pl011_dma_rx_irq()
966 dmarx->cookie, &state); in pl011_dma_rx_irq()
973 uap->dmarx.running = false; in pl011_dma_rx_irq()
984 pl011_dma_rx_chars(uap, pending, dmarx->use_buf_b, true); in pl011_dma_rx_irq()
987 dmarx->use_buf_b = !dmarx->use_buf_b; in pl011_dma_rx_irq()
999 struct pl011_dmarx_data *dmarx = &uap->dmarx; in pl011_dma_rx_callback() local
1000 struct dma_chan *rxchan = dmarx->chan; in pl011_dma_rx_callback()
1001 bool lastbuf = dmarx->use_buf_b; in pl011_dma_rx_callback()
1002 struct pl011_sgbuf *sgbuf = dmarx->use_buf_b ? in pl011_dma_rx_callback()
1003 &dmarx->sgbuf_b : &dmarx->sgbuf_a; in pl011_dma_rx_callback()
1020 rxchan->device->device_tx_status(rxchan, dmarx->cookie, &state); in pl011_dma_rx_callback()
1026 uap->dmarx.running = false; in pl011_dma_rx_callback()
1027 dmarx->use_buf_b = !lastbuf; in pl011_dma_rx_callback()
1063 struct uart_amba_port *uap = from_timer(uap, t, dmarx.timer); in pl011_dma_rx_poll()
1065 struct pl011_dmarx_data *dmarx = &uap->dmarx; in pl011_dma_rx_poll() local
1066 struct dma_chan *rxchan = uap->dmarx.chan; in pl011_dma_rx_poll()
1074 sgbuf = dmarx->use_buf_b ? &uap->dmarx.sgbuf_b : &uap->dmarx.sgbuf_a; in pl011_dma_rx_poll()
1075 rxchan->device->device_tx_status(rxchan, dmarx->cookie, &state); in pl011_dma_rx_poll()
1076 if (likely(state.residue < dmarx->last_residue)) { in pl011_dma_rx_poll()
1077 dmataken = sgbuf->sg.length - dmarx->last_residue; in pl011_dma_rx_poll()
1078 size = dmarx->last_residue - state.residue; in pl011_dma_rx_poll()
1082 dmarx->last_residue = state.residue; in pl011_dma_rx_poll()
1083 dmarx->last_jiffies = jiffies; in pl011_dma_rx_poll()
1091 if (jiffies_to_msecs(jiffies - dmarx->last_jiffies) in pl011_dma_rx_poll()
1092 > uap->dmarx.poll_timeout) { in pl011_dma_rx_poll()
1100 uap->dmarx.running = false; in pl011_dma_rx_poll()
1102 del_timer(&uap->dmarx.timer); in pl011_dma_rx_poll()
1104 mod_timer(&uap->dmarx.timer, in pl011_dma_rx_poll()
1105 jiffies + msecs_to_jiffies(uap->dmarx.poll_rate)); in pl011_dma_rx_poll()
1132 if (!uap->dmarx.chan) in pl011_dma_startup()
1136 ret = pl011_sgbuf_init(uap->dmarx.chan, &uap->dmarx.sgbuf_a, in pl011_dma_startup()
1144 ret = pl011_sgbuf_init(uap->dmarx.chan, &uap->dmarx.sgbuf_b, in pl011_dma_startup()
1149 pl011_sgbuf_free(uap->dmarx.chan, &uap->dmarx.sgbuf_a, in pl011_dma_startup()
1174 if (uap->dmarx.poll_rate) { in pl011_dma_startup()
1175 timer_setup(&uap->dmarx.timer, pl011_dma_rx_poll, 0); in pl011_dma_startup()
1176 mod_timer(&uap->dmarx.timer, in pl011_dma_startup()
1178 msecs_to_jiffies(uap->dmarx.poll_rate)); in pl011_dma_startup()
1179 uap->dmarx.last_residue = PL011_DMA_BUFFER_SIZE; in pl011_dma_startup()
1180 uap->dmarx.last_jiffies = jiffies; in pl011_dma_startup()
1213 dmaengine_terminate_all(uap->dmarx.chan); in pl011_dma_shutdown()
1215 pl011_sgbuf_free(uap->dmarx.chan, &uap->dmarx.sgbuf_a, DMA_FROM_DEVICE); in pl011_dma_shutdown()
1216 pl011_sgbuf_free(uap->dmarx.chan, &uap->dmarx.sgbuf_b, DMA_FROM_DEVICE); in pl011_dma_shutdown()
1217 if (uap->dmarx.poll_rate) in pl011_dma_shutdown()
1218 del_timer_sync(&uap->dmarx.timer); in pl011_dma_shutdown()
1230 return uap->using_rx_dma && uap->dmarx.running; in pl011_dma_rx_running()
1368 if (uap->dmarx.poll_rate) { in pl011_rx_chars()
1369 uap->dmarx.last_jiffies = jiffies; in pl011_rx_chars()
1370 uap->dmarx.last_residue = PL011_DMA_BUFFER_SIZE; in pl011_rx_chars()
1371 mod_timer(&uap->dmarx.timer, in pl011_rx_chars()
1373 msecs_to_jiffies(uap->dmarx.poll_rate)); in pl011_rx_chars()
1978 if (uap->dmarx.auto_poll_rate) in pl011_set_termios()
1979 uap->dmarx.poll_rate = DIV_ROUND_UP(10000000, baud); in pl011_set_termios()