Lines Matching refs:dma
251 static void msm_stop_dma(struct uart_port *port, struct msm_dma *dma) in msm_stop_dma() argument
257 if (dma->dir == DMA_TO_DEVICE) { in msm_stop_dma()
258 mapped = sg_dma_len(&dma->tx_sg); in msm_stop_dma()
260 mapped = dma->rx.count; in msm_stop_dma()
261 dma->rx.count = 0; in msm_stop_dma()
264 dmaengine_terminate_all(dma->chan); in msm_stop_dma()
274 val &= ~dma->enable_bit; in msm_stop_dma()
278 if (dma->dir == DMA_TO_DEVICE) { in msm_stop_dma()
279 dma_unmap_sg(dev, &dma->tx_sg, 1, dma->dir); in msm_stop_dma()
280 sg_init_table(&dma->tx_sg, 1); in msm_stop_dma()
282 dma_unmap_single(dev, dma->rx.phys, mapped, dma->dir); in msm_stop_dma()
288 struct msm_dma *dma; in msm_release_dma() local
290 dma = &msm_port->tx_dma; in msm_release_dma()
291 if (dma->chan) { in msm_release_dma()
292 msm_stop_dma(&msm_port->uart, dma); in msm_release_dma()
293 dma_release_channel(dma->chan); in msm_release_dma()
296 memset(dma, 0, sizeof(*dma)); in msm_release_dma()
298 dma = &msm_port->rx_dma; in msm_release_dma()
299 if (dma->chan) { in msm_release_dma()
300 msm_stop_dma(&msm_port->uart, dma); in msm_release_dma()
301 dma_release_channel(dma->chan); in msm_release_dma()
302 kfree(dma->rx.virt); in msm_release_dma()
305 memset(dma, 0, sizeof(*dma)); in msm_release_dma()
313 struct msm_dma *dma; in msm_request_tx_dma() local
317 dma = &msm_port->tx_dma; in msm_request_tx_dma()
320 dma->chan = dma_request_chan(dev, "tx"); in msm_request_tx_dma()
321 if (IS_ERR(dma->chan)) in msm_request_tx_dma()
337 ret = dmaengine_slave_config(dma->chan, &conf); in msm_request_tx_dma()
341 dma->dir = DMA_TO_DEVICE; in msm_request_tx_dma()
344 dma->enable_bit = UARTDM_DMEN_TX_DM_ENABLE; in msm_request_tx_dma()
346 dma->enable_bit = UARTDM_DMEN_TX_BAM_ENABLE; in msm_request_tx_dma()
351 dma_release_channel(dma->chan); in msm_request_tx_dma()
353 memset(dma, 0, sizeof(*dma)); in msm_request_tx_dma()
361 struct msm_dma *dma; in msm_request_rx_dma() local
365 dma = &msm_port->rx_dma; in msm_request_rx_dma()
368 dma->chan = dma_request_chan(dev, "rx"); in msm_request_rx_dma()
369 if (IS_ERR(dma->chan)) in msm_request_rx_dma()
374 dma->rx.virt = kzalloc(UARTDM_RX_SIZE, GFP_KERNEL); in msm_request_rx_dma()
375 if (!dma->rx.virt) in msm_request_rx_dma()
389 ret = dmaengine_slave_config(dma->chan, &conf); in msm_request_rx_dma()
393 dma->dir = DMA_FROM_DEVICE; in msm_request_rx_dma()
396 dma->enable_bit = UARTDM_DMEN_RX_DM_ENABLE; in msm_request_rx_dma()
398 dma->enable_bit = UARTDM_DMEN_RX_BAM_ENABLE; in msm_request_rx_dma()
402 kfree(dma->rx.virt); in msm_request_rx_dma()
404 dma_release_channel(dma->chan); in msm_request_rx_dma()
406 memset(dma, 0, sizeof(*dma)); in msm_request_rx_dma()
434 struct msm_dma *dma = &msm_port->tx_dma; in msm_start_tx() local
437 if (sg_dma_len(&dma->tx_sg)) in msm_start_tx()
456 struct msm_dma *dma = &msm_port->tx_dma; in msm_complete_tx_dma() local
465 if (!sg_dma_len(&dma->tx_sg)) in msm_complete_tx_dma()
468 dmaengine_tx_status(dma->chan, dma->cookie, &state); in msm_complete_tx_dma()
470 dma_unmap_sg(port->dev, &dma->tx_sg, 1, dma->dir); in msm_complete_tx_dma()
473 val &= ~dma->enable_bit; in msm_complete_tx_dma()
481 count = sg_dma_len(&dma->tx_sg) - state.residue; in msm_complete_tx_dma()
483 sg_init_table(&dma->tx_sg, 1); in msm_complete_tx_dma()
501 struct msm_dma *dma = &msm_port->tx_dma; in msm_handle_tx_dma() local
506 sg_init_table(&dma->tx_sg, 1); in msm_handle_tx_dma()
507 kfifo_dma_out_prepare(&tport->xmit_fifo, &dma->tx_sg, 1, count); in msm_handle_tx_dma()
509 mapped = dma_map_sg(port->dev, &dma->tx_sg, 1, dma->dir); in msm_handle_tx_dma()
515 dma->desc = dmaengine_prep_slave_sg(dma->chan, &dma->tx_sg, 1, in msm_handle_tx_dma()
519 if (!dma->desc) { in msm_handle_tx_dma()
524 dma->desc->callback = msm_complete_tx_dma; in msm_handle_tx_dma()
525 dma->desc->callback_param = msm_port; in msm_handle_tx_dma()
527 dma->cookie = dmaengine_submit(dma->desc); in msm_handle_tx_dma()
528 ret = dma_submit_error(dma->cookie); in msm_handle_tx_dma()
540 val |= dma->enable_bit; in msm_handle_tx_dma()
550 dma_async_issue_pending(dma->chan); in msm_handle_tx_dma()
553 dma_unmap_sg(port->dev, &dma->tx_sg, 1, dma->dir); in msm_handle_tx_dma()
555 sg_init_table(&dma->tx_sg, 1); in msm_handle_tx_dma()
564 struct msm_dma *dma = &msm_port->rx_dma; in msm_complete_rx_dma() local
572 if (!dma->rx.count) in msm_complete_rx_dma()
576 val &= ~dma->enable_bit; in msm_complete_rx_dma()
589 dma->rx.count = 0; in msm_complete_rx_dma()
591 dma_unmap_single(port->dev, dma->rx.phys, UARTDM_RX_SIZE, dma->dir); in msm_complete_rx_dma()
596 if (msm_port->break_detected && dma->rx.virt[i] == 0) { in msm_complete_rx_dma()
607 sysrq = uart_prepare_sysrq_char(port, dma->rx.virt[i]); in msm_complete_rx_dma()
609 tty_insert_flip_char(tport, dma->rx.virt[i], flag); in msm_complete_rx_dma()
622 struct msm_dma *dma = &msm_port->rx_dma; in msm_start_rx_dma() local
630 if (!dma->chan) in msm_start_rx_dma()
633 dma->rx.phys = dma_map_single(uart->dev, dma->rx.virt, in msm_start_rx_dma()
634 UARTDM_RX_SIZE, dma->dir); in msm_start_rx_dma()
635 ret = dma_mapping_error(uart->dev, dma->rx.phys); in msm_start_rx_dma()
639 dma->desc = dmaengine_prep_slave_single(dma->chan, dma->rx.phys, in msm_start_rx_dma()
642 if (!dma->desc) in msm_start_rx_dma()
645 dma->desc->callback = msm_complete_rx_dma; in msm_start_rx_dma()
646 dma->desc->callback_param = msm_port; in msm_start_rx_dma()
648 dma->cookie = dmaengine_submit(dma->desc); in msm_start_rx_dma()
649 ret = dma_submit_error(dma->cookie); in msm_start_rx_dma()
667 dma->rx.count = UARTDM_RX_SIZE; in msm_start_rx_dma()
669 dma_async_issue_pending(dma->chan); in msm_start_rx_dma()
675 val |= dma->enable_bit; in msm_start_rx_dma()
687 dma_unmap_single(uart->dev, dma->rx.phys, UARTDM_RX_SIZE, dma->dir); in msm_start_rx_dma()
709 struct msm_dma *dma = &msm_port->rx_dma; in msm_stop_rx() local
714 if (dma->chan) in msm_stop_rx()
715 msm_stop_dma(port, dma); in msm_stop_rx()
893 struct msm_dma *dma = &msm_port->tx_dma; in msm_handle_tx() local
936 if (!dma->chan || dma_count < dma_min) in msm_handle_tx()
956 struct msm_dma *dma = &msm_port->rx_dma; in msm_uart_irq() local
970 if (dma->rx.count) { in msm_uart_irq()
979 dmaengine_terminate_all(dma->chan); in msm_uart_irq()
1275 struct msm_dma *dma = &msm_port->rx_dma; in msm_set_termios() local
1281 if (dma->chan) /* Terminate if any */ in msm_set_termios()
1282 msm_stop_dma(port, dma); in msm_set_termios()