27 #include <linux/module.h>
28 #include <linux/kernel.h>
31 #ifdef CONFIG_DMA_ENGINE
32 static int __init async_tx_init(
void)
34 async_dmaengine_get();
41 static void __exit async_tx_exit(
void)
43 async_dmaengine_put();
64 return depend_tx->
chan;
65 return async_dma_find_channel(tx_type);
87 if (txd_parent(depend_tx) && depend_tx->
chan == tx->
chan) {
88 txd_chain(depend_tx, tx);
91 txd_unlock(depend_tx);
113 txd_chain(intr_tx, tx);
117 if (txd_parent(depend_tx)) {
118 txd_chain(depend_tx, intr_tx);
119 async_tx_ack(intr_tx);
122 txd_unlock(depend_tx);
125 txd_clear_parent(intr_tx);
127 async_tx_ack(intr_tx);
132 panic(
"%s: DMA_ERROR waiting for depend_tx\n",
173 BUG_ON(async_tx_test_ack(depend_tx) || txd_next(depend_tx) ||
180 if (txd_parent(depend_tx)) {
185 if (depend_tx->
chan == chan) {
186 txd_chain(depend_tx, tx);
194 if (depend_tx->
chan == chan)
199 txd_unlock(depend_tx);
205 async_tx_channel_switch(depend_tx, tx);
208 txd_clear_parent(tx);
213 txd_clear_parent(tx);
221 async_tx_ack(depend_tx);
242 chan = depend_tx->
chan;
256 pr_debug(
"%s: (async)\n", __func__);
265 async_tx_sync_epilog(submit);
282 BUG_ON(async_tx_test_ack(*tx));
284 panic(
"DMA_ERROR waiting for transaction\n");