aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma/ioat/dma.h
diff options
context:
space:
mode:
authorDave Jiang <dave.jiang@intel.com>2013-03-26 18:42:47 -0400
committerVinod Koul <vinod.koul@intel.com>2013-04-15 00:21:20 -0400
commit8a52b9ff1154a68b6a2a8da9a31a87e52f5f6418 (patch)
tree54fcb19bbcd64cf50a86efe4feeac899b32fd40b /drivers/dma/ioat/dma.h
parentd92a8d7cbb6941d5d985ccb3453a2ac5c92f60e4 (diff)
ioatdma: channel reset scheme fixup on Intel Atom S1200 platforms
The Intel Atom S1200 family ioatdma changed the channel reset behavior. It does a reset similar to PCI FLR by resetting all the MSIX registers. We have to re-init msix interrupts because of this. This workaround is only specific to this platform and is not expected to carry over to the later generations. Signed-off-by: Dave Jiang <dave.jiang@intel.com> Acked-by: Dan Williams <djbw@fb.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'drivers/dma/ioat/dma.h')
-rw-r--r--drivers/dma/ioat/dma.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/dma/ioat/dma.h b/drivers/dma/ioat/dma.h
index 9285caadf825..b16902cd2684 100644
--- a/drivers/dma/ioat/dma.h
+++ b/drivers/dma/ioat/dma.h
@@ -48,6 +48,14 @@
48 */ 48 */
49#define NULL_DESC_BUFFER_SIZE 1 49#define NULL_DESC_BUFFER_SIZE 1
50 50
51enum ioat_irq_mode {
52 IOAT_NOIRQ = 0,
53 IOAT_MSIX,
54 IOAT_MSIX_SINGLE,
55 IOAT_MSI,
56 IOAT_INTX
57};
58
51/** 59/**
52 * struct ioatdma_device - internal representation of a IOAT device 60 * struct ioatdma_device - internal representation of a IOAT device
53 * @pdev: PCI-Express device 61 * @pdev: PCI-Express device
@@ -77,6 +85,7 @@ struct ioatdma_device {
77 struct msix_entry msix_entries[4]; 85 struct msix_entry msix_entries[4];
78 struct ioat_chan_common *idx[4]; 86 struct ioat_chan_common *idx[4];
79 struct dca_provider *dca; 87 struct dca_provider *dca;
88 enum ioat_irq_mode irq_mode;
80 void (*intr_quirk)(struct ioatdma_device *device); 89 void (*intr_quirk)(struct ioatdma_device *device);
81 int (*enumerate_channels)(struct ioatdma_device *device); 90 int (*enumerate_channels)(struct ioatdma_device *device);
82 int (*reset_hw)(struct ioat_chan_common *chan); 91 int (*reset_hw)(struct ioat_chan_common *chan);
@@ -341,6 +350,7 @@ bool ioat_cleanup_preamble(struct ioat_chan_common *chan,
341 dma_addr_t *phys_complete); 350 dma_addr_t *phys_complete);
342void ioat_kobject_add(struct ioatdma_device *device, struct kobj_type *type); 351void ioat_kobject_add(struct ioatdma_device *device, struct kobj_type *type);
343void ioat_kobject_del(struct ioatdma_device *device); 352void ioat_kobject_del(struct ioatdma_device *device);
353int ioat_dma_setup_interrupts(struct ioatdma_device *device);
344extern const struct sysfs_ops ioat_sysfs_ops; 354extern const struct sysfs_ops ioat_sysfs_ops;
345extern struct ioat_sysfs_entry ioat_version_attr; 355extern struct ioat_sysfs_entry ioat_version_attr;
346extern struct ioat_sysfs_entry ioat_cap_attr; 356extern struct ioat_sysfs_entry ioat_cap_attr;