Lines Matching refs:dmarx
168 struct pl011_dmarx_data dmarx; member
352 uap->dmarx.chan = chan; in pl011_dma_probe()
354 uap->dmarx.auto_poll_rate = false; in pl011_dma_probe()
358 uap->dmarx.auto_poll_rate = false; in pl011_dma_probe()
359 uap->dmarx.poll_rate = plat->dma_rx_poll_rate; in pl011_dma_probe()
366 uap->dmarx.auto_poll_rate = true; in pl011_dma_probe()
367 uap->dmarx.poll_rate = 100; in pl011_dma_probe()
371 uap->dmarx.poll_timeout = in pl011_dma_probe()
374 uap->dmarx.poll_timeout = 3000; in pl011_dma_probe()
376 uap->dmarx.auto_poll_rate = of_property_read_bool( in pl011_dma_probe()
378 if (uap->dmarx.auto_poll_rate) { in pl011_dma_probe()
383 uap->dmarx.poll_rate = x; in pl011_dma_probe()
385 uap->dmarx.poll_rate = 100; in pl011_dma_probe()
388 uap->dmarx.poll_timeout = x; in pl011_dma_probe()
390 uap->dmarx.poll_timeout = 3000; in pl011_dma_probe()
394 dma_chan_name(uap->dmarx.chan)); in pl011_dma_probe()
402 if (uap->dmarx.chan) in pl011_dma_remove()
403 dma_release_channel(uap->dmarx.chan); in pl011_dma_remove()
701 struct dma_chan *rxchan = uap->dmarx.chan; in pl011_dma_rx_trigger_dma()
702 struct pl011_dmarx_data *dmarx = &uap->dmarx; in pl011_dma_rx_trigger_dma() local
710 sgbuf = uap->dmarx.use_buf_b ? in pl011_dma_rx_trigger_dma()
711 &uap->dmarx.sgbuf_b : &uap->dmarx.sgbuf_a; in pl011_dma_rx_trigger_dma()
721 uap->dmarx.running = false; in pl011_dma_rx_trigger_dma()
729 dmarx->cookie = dmaengine_submit(desc); in pl011_dma_rx_trigger_dma()
734 uap->dmarx.running = true; in pl011_dma_rx_trigger_dma()
753 &uap->dmarx.sgbuf_b : &uap->dmarx.sgbuf_a; in pl011_dma_rx_chars()
757 struct pl011_dmarx_data *dmarx = &uap->dmarx; in pl011_dma_rx_chars() local
760 if (uap->dmarx.poll_rate) { in pl011_dma_rx_chars()
762 dmataken = sgbuf->sg.length - dmarx->last_residue; in pl011_dma_rx_chars()
786 if (uap->dmarx.poll_rate) in pl011_dma_rx_chars()
787 dmarx->last_residue = sgbuf->sg.length; in pl011_dma_rx_chars()
822 struct pl011_dmarx_data *dmarx = &uap->dmarx; in pl011_dma_rx_irq() local
823 struct dma_chan *rxchan = dmarx->chan; in pl011_dma_rx_irq()
824 struct pl011_sgbuf *sgbuf = dmarx->use_buf_b ? in pl011_dma_rx_irq()
825 &dmarx->sgbuf_b : &dmarx->sgbuf_a; in pl011_dma_rx_irq()
838 dmarx->cookie, &state); in pl011_dma_rx_irq()
845 uap->dmarx.running = false; in pl011_dma_rx_irq()
856 pl011_dma_rx_chars(uap, pending, dmarx->use_buf_b, true); in pl011_dma_rx_irq()
859 dmarx->use_buf_b = !dmarx->use_buf_b; in pl011_dma_rx_irq()
871 struct pl011_dmarx_data *dmarx = &uap->dmarx; in pl011_dma_rx_callback() local
872 struct dma_chan *rxchan = dmarx->chan; in pl011_dma_rx_callback()
873 bool lastbuf = dmarx->use_buf_b; in pl011_dma_rx_callback()
874 struct pl011_sgbuf *sgbuf = dmarx->use_buf_b ? in pl011_dma_rx_callback()
875 &dmarx->sgbuf_b : &dmarx->sgbuf_a; in pl011_dma_rx_callback()
892 rxchan->device->device_tx_status(rxchan, dmarx->cookie, &state); in pl011_dma_rx_callback()
898 uap->dmarx.running = false; in pl011_dma_rx_callback()
899 dmarx->use_buf_b = !lastbuf; in pl011_dma_rx_callback()
937 struct pl011_dmarx_data *dmarx = &uap->dmarx; in pl011_dma_rx_poll() local
938 struct dma_chan *rxchan = uap->dmarx.chan; in pl011_dma_rx_poll()
946 sgbuf = dmarx->use_buf_b ? &uap->dmarx.sgbuf_b : &uap->dmarx.sgbuf_a; in pl011_dma_rx_poll()
947 rxchan->device->device_tx_status(rxchan, dmarx->cookie, &state); in pl011_dma_rx_poll()
948 if (likely(state.residue < dmarx->last_residue)) { in pl011_dma_rx_poll()
949 dmataken = sgbuf->sg.length - dmarx->last_residue; in pl011_dma_rx_poll()
950 size = dmarx->last_residue - state.residue; in pl011_dma_rx_poll()
954 dmarx->last_residue = state.residue; in pl011_dma_rx_poll()
955 dmarx->last_jiffies = jiffies; in pl011_dma_rx_poll()
963 if (jiffies_to_msecs(jiffies - dmarx->last_jiffies) in pl011_dma_rx_poll()
964 > uap->dmarx.poll_timeout) { in pl011_dma_rx_poll()
972 uap->dmarx.running = false; in pl011_dma_rx_poll()
974 del_timer(&uap->dmarx.timer); in pl011_dma_rx_poll()
976 mod_timer(&uap->dmarx.timer, in pl011_dma_rx_poll()
977 jiffies + msecs_to_jiffies(uap->dmarx.poll_rate)); in pl011_dma_rx_poll()
1004 if (!uap->dmarx.chan) in pl011_dma_startup()
1008 ret = pl011_sgbuf_init(uap->dmarx.chan, &uap->dmarx.sgbuf_a, in pl011_dma_startup()
1016 ret = pl011_sgbuf_init(uap->dmarx.chan, &uap->dmarx.sgbuf_b, in pl011_dma_startup()
1021 pl011_sgbuf_free(uap->dmarx.chan, &uap->dmarx.sgbuf_a, in pl011_dma_startup()
1046 if (uap->dmarx.poll_rate) { in pl011_dma_startup()
1047 init_timer(&(uap->dmarx.timer)); in pl011_dma_startup()
1048 uap->dmarx.timer.function = pl011_dma_rx_poll; in pl011_dma_startup()
1049 uap->dmarx.timer.data = (unsigned long)uap; in pl011_dma_startup()
1050 mod_timer(&uap->dmarx.timer, in pl011_dma_startup()
1052 msecs_to_jiffies(uap->dmarx.poll_rate)); in pl011_dma_startup()
1053 uap->dmarx.last_residue = PL011_DMA_BUFFER_SIZE; in pl011_dma_startup()
1054 uap->dmarx.last_jiffies = jiffies; in pl011_dma_startup()
1087 dmaengine_terminate_all(uap->dmarx.chan); in pl011_dma_shutdown()
1089 pl011_sgbuf_free(uap->dmarx.chan, &uap->dmarx.sgbuf_a, DMA_FROM_DEVICE); in pl011_dma_shutdown()
1090 pl011_sgbuf_free(uap->dmarx.chan, &uap->dmarx.sgbuf_b, DMA_FROM_DEVICE); in pl011_dma_shutdown()
1091 if (uap->dmarx.poll_rate) in pl011_dma_shutdown()
1092 del_timer_sync(&uap->dmarx.timer); in pl011_dma_shutdown()
1104 return uap->using_rx_dma && uap->dmarx.running; in pl011_dma_rx_running()
1237 if (uap->dmarx.poll_rate) { in pl011_rx_chars()
1238 uap->dmarx.last_jiffies = jiffies; in pl011_rx_chars()
1239 uap->dmarx.last_residue = PL011_DMA_BUFFER_SIZE; in pl011_rx_chars()
1240 mod_timer(&uap->dmarx.timer, in pl011_rx_chars()
1242 msecs_to_jiffies(uap->dmarx.poll_rate)); in pl011_rx_chars()
1783 if (uap->dmarx.auto_poll_rate) in pl011_set_termios()
1784 uap->dmarx.poll_rate = DIV_ROUND_UP(10000000, baud); in pl011_set_termios()