#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/device.h>
#include <linux/io-64-nonatomic-lo-hi.h>
#include <linux/dmaengine.h>
#include <uapi/linux/idxd.h>
#include "../dmaengine.h"
#include "registers.h"
#include "idxd.h"
static inline struct idxd_wq *to_idxd_wq(struct dma_chan *c)
{ … }
void idxd_dma_complete_txd(struct idxd_desc *desc,
enum idxd_complete_type comp_type,
bool free_desc, void *ctx, u32 *status)
{ … }
static void op_flag_setup(unsigned long flags, u32 *desc_flags)
{ … }
static inline void idxd_prep_desc_common(struct idxd_wq *wq,
struct dsa_hw_desc *hw, char opcode,
u64 addr_f1, u64 addr_f2, u64 len,
u64 compl, u32 flags)
{ … }
static struct dma_async_tx_descriptor *
idxd_dma_prep_interrupt(struct dma_chan *c, unsigned long flags)
{ … }
static struct dma_async_tx_descriptor *
idxd_dma_submit_memcpy(struct dma_chan *c, dma_addr_t dma_dest,
dma_addr_t dma_src, size_t len, unsigned long flags)
{ … }
static int idxd_dma_alloc_chan_resources(struct dma_chan *chan)
{ … }
static void idxd_dma_free_chan_resources(struct dma_chan *chan)
{ … }
static enum dma_status idxd_dma_tx_status(struct dma_chan *dma_chan,
dma_cookie_t cookie,
struct dma_tx_state *txstate)
{ … }
static void idxd_dma_issue_pending(struct dma_chan *dma_chan)
{ … }
static dma_cookie_t idxd_dma_tx_submit(struct dma_async_tx_descriptor *tx)
{ … }
static void idxd_dma_release(struct dma_device *device)
{ … }
int idxd_register_dma_device(struct idxd_device *idxd)
{ … }
void idxd_unregister_dma_device(struct idxd_device *idxd)
{ … }
static int idxd_register_dma_channel(struct idxd_wq *wq)
{ … }
static void idxd_unregister_dma_channel(struct idxd_wq *wq)
{ … }
static int idxd_dmaengine_drv_probe(struct idxd_dev *idxd_dev)
{ … }
static void idxd_dmaengine_drv_remove(struct idxd_dev *idxd_dev)
{ … }
static enum idxd_dev_type dev_types[] = …;
struct idxd_device_driver idxd_dmaengine_drv = …;
EXPORT_SYMBOL_GPL(…);