// SPDX-License-Identifier: GPL-2.0-only /* * core routines for the asynchronous memory transfer/transform api * * Copyright © 2006, Intel Corporation. * * Dan Williams <[email protected]> * * with architecture considerations by: * Neil Brown <[email protected]> * Jeff Garzik <[email protected]> */ #include <linux/rculist.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/async_tx.h> #ifdef CONFIG_DMA_ENGINE static int __init async_tx_init(void) { … } static void __exit async_tx_exit(void) { … } module_init(…) …; module_exit(async_tx_exit); /** * __async_tx_find_channel - find a channel to carry out the operation or let * the transaction execute synchronously * @submit: transaction dependency and submission modifiers * @tx_type: transaction type */ struct dma_chan * __async_tx_find_channel(struct async_submit_ctl *submit, enum dma_transaction_type tx_type) { … } EXPORT_SYMBOL_GPL(…); #endif /** * async_tx_channel_switch - queue an interrupt descriptor with a dependency * pre-attached. * @depend_tx: the operation that must finish before the new operation runs * @tx: the new operation */ static void async_tx_channel_switch(struct dma_async_tx_descriptor *depend_tx, struct dma_async_tx_descriptor *tx) { … } /** * enum submit_disposition - flags for routing an incoming operation * @ASYNC_TX_SUBMITTED: we were able to append the new operation under the lock * @ASYNC_TX_CHANNEL_SWITCH: when the lock is dropped schedule a channel switch * @ASYNC_TX_DIRECT_SUBMIT: when the lock is dropped submit directly * * while holding depend_tx->lock we must avoid submitting new operations * to prevent a circular locking dependency with drivers that already * hold a channel lock when calling async_tx_run_dependencies. */ enum submit_disposition { … }; void async_tx_submit(struct dma_chan *chan, struct dma_async_tx_descriptor *tx, struct async_submit_ctl *submit) { … } EXPORT_SYMBOL_GPL(…); /** * async_trigger_callback - schedules the callback function to be run * @submit: submission and completion parameters * * honored flags: ASYNC_TX_ACK * * The callback is run after any dependent operations have completed. */ struct dma_async_tx_descriptor * async_trigger_callback(struct async_submit_ctl *submit) { … } EXPORT_SYMBOL_GPL(…); /** * async_tx_quiesce - ensure tx is complete and freeable upon return * @tx: transaction to quiesce */ void async_tx_quiesce(struct dma_async_tx_descriptor **tx) { … } EXPORT_SYMBOL_GPL(…); MODULE_AUTHOR(…) …; MODULE_DESCRIPTION(…) …; MODULE_LICENSE(…) …;