diff options
Diffstat (limited to 'drivers/dma/ioatdma.h')
-rw-r--r-- | drivers/dma/ioatdma.h | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/drivers/dma/ioatdma.h b/drivers/dma/ioatdma.h index f2c7fedbf009..a3306d0e1372 100644 --- a/drivers/dma/ioatdma.h +++ b/drivers/dma/ioatdma.h | |||
@@ -27,8 +27,9 @@ | |||
27 | #include <linux/dmapool.h> | 27 | #include <linux/dmapool.h> |
28 | #include <linux/cache.h> | 28 | #include <linux/cache.h> |
29 | #include <linux/pci_ids.h> | 29 | #include <linux/pci_ids.h> |
30 | #include <net/tcp.h> | ||
30 | 31 | ||
31 | #define IOAT_DMA_VERSION "2.04" | 32 | #define IOAT_DMA_VERSION "3.30" |
32 | 33 | ||
33 | enum ioat_interrupt { | 34 | enum ioat_interrupt { |
34 | none = 0, | 35 | none = 0, |
@@ -40,6 +41,7 @@ enum ioat_interrupt { | |||
40 | 41 | ||
41 | #define IOAT_LOW_COMPLETION_MASK 0xffffffc0 | 42 | #define IOAT_LOW_COMPLETION_MASK 0xffffffc0 |
42 | #define IOAT_DMA_DCA_ANY_CPU ~0 | 43 | #define IOAT_DMA_DCA_ANY_CPU ~0 |
44 | #define IOAT_WATCHDOG_PERIOD (2 * HZ) | ||
43 | 45 | ||
44 | 46 | ||
45 | /** | 47 | /** |
@@ -62,6 +64,7 @@ struct ioatdma_device { | |||
62 | struct dma_device common; | 64 | struct dma_device common; |
63 | u8 version; | 65 | u8 version; |
64 | enum ioat_interrupt irq_mode; | 66 | enum ioat_interrupt irq_mode; |
67 | struct delayed_work work; | ||
65 | struct msix_entry msix_entries[4]; | 68 | struct msix_entry msix_entries[4]; |
66 | struct ioat_dma_chan *idx[4]; | 69 | struct ioat_dma_chan *idx[4]; |
67 | }; | 70 | }; |
@@ -75,6 +78,7 @@ struct ioat_dma_chan { | |||
75 | 78 | ||
76 | dma_cookie_t completed_cookie; | 79 | dma_cookie_t completed_cookie; |
77 | unsigned long last_completion; | 80 | unsigned long last_completion; |
81 | unsigned long last_completion_time; | ||
78 | 82 | ||
79 | size_t xfercap; /* XFERCAP register value expanded out */ | 83 | size_t xfercap; /* XFERCAP register value expanded out */ |
80 | 84 | ||
@@ -82,6 +86,10 @@ struct ioat_dma_chan { | |||
82 | spinlock_t desc_lock; | 86 | spinlock_t desc_lock; |
83 | struct list_head free_desc; | 87 | struct list_head free_desc; |
84 | struct list_head used_desc; | 88 | struct list_head used_desc; |
89 | unsigned long watchdog_completion; | ||
90 | int watchdog_tcp_cookie; | ||
91 | u32 watchdog_last_tcp_cookie; | ||
92 | struct delayed_work work; | ||
85 | 93 | ||
86 | int pending; | 94 | int pending; |
87 | int dmacount; | 95 | int dmacount; |
@@ -98,6 +106,7 @@ struct ioat_dma_chan { | |||
98 | u32 high; | 106 | u32 high; |
99 | }; | 107 | }; |
100 | } *completion_virt; | 108 | } *completion_virt; |
109 | unsigned long last_compl_desc_addr_hw; | ||
101 | struct tasklet_struct cleanup_task; | 110 | struct tasklet_struct cleanup_task; |
102 | }; | 111 | }; |
103 | 112 | ||
@@ -121,17 +130,34 @@ struct ioat_desc_sw { | |||
121 | struct dma_async_tx_descriptor async_tx; | 130 | struct dma_async_tx_descriptor async_tx; |
122 | }; | 131 | }; |
123 | 132 | ||
133 | static inline void ioat_set_tcp_copy_break(struct ioatdma_device *dev) | ||
134 | { | ||
135 | #ifdef CONFIG_NET_DMA | ||
136 | switch (dev->version) { | ||
137 | case IOAT_VER_1_2: | ||
138 | case IOAT_VER_3_0: | ||
139 | sysctl_tcp_dma_copybreak = 4096; | ||
140 | break; | ||
141 | case IOAT_VER_2_0: | ||
142 | sysctl_tcp_dma_copybreak = 2048; | ||
143 | break; | ||
144 | } | ||
145 | #endif | ||
146 | } | ||
147 | |||
124 | #if defined(CONFIG_INTEL_IOATDMA) || defined(CONFIG_INTEL_IOATDMA_MODULE) | 148 | #if defined(CONFIG_INTEL_IOATDMA) || defined(CONFIG_INTEL_IOATDMA_MODULE) |
125 | struct ioatdma_device *ioat_dma_probe(struct pci_dev *pdev, | 149 | struct ioatdma_device *ioat_dma_probe(struct pci_dev *pdev, |
126 | void __iomem *iobase); | 150 | void __iomem *iobase); |
127 | void ioat_dma_remove(struct ioatdma_device *device); | 151 | void ioat_dma_remove(struct ioatdma_device *device); |
128 | struct dca_provider *ioat_dca_init(struct pci_dev *pdev, void __iomem *iobase); | 152 | struct dca_provider *ioat_dca_init(struct pci_dev *pdev, void __iomem *iobase); |
129 | struct dca_provider *ioat2_dca_init(struct pci_dev *pdev, void __iomem *iobase); | 153 | struct dca_provider *ioat2_dca_init(struct pci_dev *pdev, void __iomem *iobase); |
154 | struct dca_provider *ioat3_dca_init(struct pci_dev *pdev, void __iomem *iobase); | ||
130 | #else | 155 | #else |
131 | #define ioat_dma_probe(pdev, iobase) NULL | 156 | #define ioat_dma_probe(pdev, iobase) NULL |
132 | #define ioat_dma_remove(device) do { } while (0) | 157 | #define ioat_dma_remove(device) do { } while (0) |
133 | #define ioat_dca_init(pdev, iobase) NULL | 158 | #define ioat_dca_init(pdev, iobase) NULL |
134 | #define ioat2_dca_init(pdev, iobase) NULL | 159 | #define ioat2_dca_init(pdev, iobase) NULL |
160 | #define ioat3_dca_init(pdev, iobase) NULL | ||
135 | #endif | 161 | #endif |
136 | 162 | ||
137 | #endif /* IOATDMA_H */ | 163 | #endif /* IOATDMA_H */ |