ioatdma.h

来自「linux 内核源代码」· C头文件 代码 · 共 138 行

H
138
字号
/* * Copyright(c) 2004 - 2007 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 * Temple Place - Suite 330, Boston, MA  02111-1307, USA. * * The full GNU General Public License is included in this distribution in the * file called COPYING. */#ifndef IOATDMA_H#define IOATDMA_H#include <linux/dmaengine.h>#include "ioatdma_hw.h"#include <linux/init.h>#include <linux/dmapool.h>#include <linux/cache.h>#include <linux/pci_ids.h>#define IOAT_DMA_VERSION  "2.04"enum ioat_interrupt {	none = 0,	msix_multi_vector = 1,	msix_single_vector = 2,	msi = 3,	intx = 4,};#define IOAT_LOW_COMPLETION_MASK	0xffffffc0#define IOAT_DMA_DCA_ANY_CPU		~0/** * struct ioatdma_device - internal representation of a IOAT device * @pdev: PCI-Express device * @reg_base: MMIO register space base address * @dma_pool: for allocating DMA descriptors * @common: embedded struct dma_device * @version: version of ioatdma device * @irq_mode: which style irq to use * @msix_entries: irq handlers * @idx: per channel data */struct ioatdma_device {	struct pci_dev *pdev;	void __iomem *reg_base;	struct pci_pool *dma_pool;	struct pci_pool *completion_pool;	struct dma_device common;	u8 version;	enum ioat_interrupt irq_mode;	struct msix_entry msix_entries[4];	struct ioat_dma_chan *idx[4];};/** * struct ioat_dma_chan - internal representation of a DMA channel */struct ioat_dma_chan {	void __iomem *reg_base;	dma_cookie_t completed_cookie;	unsigned long last_completion;	size_t xfercap;	/* XFERCAP register value expanded out */	spinlock_t cleanup_lock;	spinlock_t desc_lock;	struct list_head free_desc;	struct list_head used_desc;	int pending;	int dmacount;	int desccount;	struct ioatdma_device *device;	struct dma_chan common;	dma_addr_t completion_addr;	union {		u64 full; /* HW completion writeback */		struct {			u32 low;			u32 high;		};	} *completion_virt;	struct tasklet_struct cleanup_task;};/* wrapper around hardware descriptor format + additional software fields *//** * struct ioat_desc_sw - wrapper around hardware descriptor * @hw: hardware DMA descriptor * @node: this descriptor will either be on the free list, *     or attached to a transaction list (async_tx.tx_list) * @tx_cnt: number of descriptors required to complete the transaction * @async_tx: the generic software descriptor for all engines */struct ioat_desc_sw {	struct ioat_dma_descriptor *hw;	struct list_head node;	int tx_cnt;	size_t len;	dma_addr_t src;	dma_addr_t dst;	struct dma_async_tx_descriptor async_tx;};#if defined(CONFIG_INTEL_IOATDMA) || defined(CONFIG_INTEL_IOATDMA_MODULE)struct ioatdma_device *ioat_dma_probe(struct pci_dev *pdev,				      void __iomem *iobase);void ioat_dma_remove(struct ioatdma_device *device);struct dca_provider *ioat_dca_init(struct pci_dev *pdev, void __iomem *iobase);struct dca_provider *ioat2_dca_init(struct pci_dev *pdev, void __iomem *iobase);#else#define ioat_dma_probe(pdev, iobase)    NULL#define ioat_dma_remove(device)         do { } while (0)#define ioat_dca_init(pdev, iobase)	NULL#define ioat2_dca_init(pdev, iobase)	NULL#endif#endif /* IOATDMA_H */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?