• Dan Williams's avatar
    dmaengine: refactor dmaengine around dma_async_tx_descriptor · 7405f74b
    Dan Williams authored
    The current dmaengine interface defines mutliple routines per operation,
    i.e. dma_async_memcpy_buf_to_buf, dma_async_memcpy_buf_to_page etc.  Adding
    more operation types (xor, crc, etc) to this model would result in an
    unmanageable number of method permutations.
    
    	Are we really going to add a set of hooks for each DMA engine
    	whizbang feature?
    		- Jeff Garzik
    
    The descriptor creation process is refactored using the new common
    dma_async_tx_descriptor structure.  Instead of per driver
    do_<operation>_<dest>_to_<src> methods, drivers integrate
    dma_async_tx_descriptor into their private software descriptor and then
    define a 'prep' routine per operation.  The prep routine allocates a
    descriptor and ensures that the tx_set_src, tx_set_dest, tx_submit routines
    are valid.  Descriptor creation and submission becomes:
    
    struct dma_device *dev;
    struct dma_chan *chan;
    struct dma_async_tx_descriptor *tx;
    
    tx = dev->device_prep_dma_<operation>(chan, len, int_flag)
    tx->tx_set_src(dma_addr_t, tx, index /* for multi-source ops */)
    tx->tx_set_dest(dma_addr_t, tx, index)
    tx->tx_submit(tx)
    
    In addition to the refactoring, dma_async_tx_descriptor also lays the
    groundwork for definining cross-channel-operation dependencies, and a
    callback facility for asynchronous notification of operation completion.
    
    Changelog:
    * drop dma mapping methods, suggested by Chris Leech
    * fix ioat_dma_dependency_added, also caught by Andrew Morton
    * fix dma_sync_wait, change from Andrew Morton
    * uninline large functions, change from Andrew Morton
    * add tx->callback = NULL to dmaengine calls to interoperate with async_tx
      calls
    * hookup ioat_tx_submit
    * convert channel capabilities to a 'cpumask_t like' bitmap
    * removed DMA_TX_ARRAY_INIT, no longer needed
    * checkpatch.pl fixes
    * make set_src, set_dest, and tx_submit descriptor specific methods
    * fixup git-ioat merge
    * move group_list and phys to dma_async_tx_descriptor
    
    Cc: Jeff Garzik <jeff@garzik.org>
    Cc: Chris Leech <christopher.leech@intel.com>
    Signed-off-by: default avatarShannon Nelson <shannon.nelson@intel.com>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
    7405f74b
ioatdma.c 22.3 KB