diff options
author | Shannon Nelson <shannon.nelson@intel.com> | 2007-11-14 19:59:51 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-11-14 21:45:41 -0500 |
commit | 7bb67c14fd3778504fb77da30ce11582336dfced (patch) | |
tree | 24b65f267a98716824c7955be02af8879cfda688 /drivers/dma/ioatdma.h | |
parent | cc9f2f8f68efcc73d8793a4df2c4c50196e90080 (diff) |
I/OAT: Add support for version 2 of ioatdma device
Add support for version 2 of the ioatdma device. This device handles
the descriptor chain and DCA services slightly differently:
- Instead of moving the dma descriptors between a busy and an idle chain,
this new version uses a single circular chain so that we don't have
rewrite the next_descriptor pointers as we add new requests, and the
device doesn't need to re-read the last descriptor.
- The new device has the DCA tags defined internally instead of needing
them defined statically.
Signed-off-by: Shannon Nelson <shannon.nelson@intel.com>
Cc: "Williams, Dan J" <dan.j.williams@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/dma/ioatdma.h')
-rw-r--r-- | drivers/dma/ioatdma.h | 32 |
1 files changed, 12 insertions, 20 deletions
diff --git a/drivers/dma/ioatdma.h b/drivers/dma/ioatdma.h index 5f9881e7b0ed..b668234ef654 100644 --- a/drivers/dma/ioatdma.h +++ b/drivers/dma/ioatdma.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright(c) 2004 - 2006 Intel Corporation. All rights reserved. | 2 | * Copyright(c) 2004 - 2007 Intel Corporation. All rights reserved. |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or modify it | 4 | * This program is free software; you can redistribute it and/or modify it |
5 | * under the terms of the GNU General Public License as published by the Free | 5 | * under the terms of the GNU General Public License as published by the Free |
@@ -28,7 +28,7 @@ | |||
28 | #include <linux/cache.h> | 28 | #include <linux/cache.h> |
29 | #include <linux/pci_ids.h> | 29 | #include <linux/pci_ids.h> |
30 | 30 | ||
31 | #define IOAT_DMA_VERSION "1.26" | 31 | #define IOAT_DMA_VERSION "2.04" |
32 | 32 | ||
33 | enum ioat_interrupt { | 33 | enum ioat_interrupt { |
34 | none = 0, | 34 | none = 0, |
@@ -39,6 +39,8 @@ enum ioat_interrupt { | |||
39 | }; | 39 | }; |
40 | 40 | ||
41 | #define IOAT_LOW_COMPLETION_MASK 0xffffffc0 | 41 | #define IOAT_LOW_COMPLETION_MASK 0xffffffc0 |
42 | #define IOAT_DMA_DCA_ANY_CPU ~0 | ||
43 | |||
42 | 44 | ||
43 | /** | 45 | /** |
44 | * struct ioatdma_device - internal representation of a IOAT device | 46 | * struct ioatdma_device - internal representation of a IOAT device |
@@ -47,6 +49,9 @@ enum ioat_interrupt { | |||
47 | * @dma_pool: for allocating DMA descriptors | 49 | * @dma_pool: for allocating DMA descriptors |
48 | * @common: embedded struct dma_device | 50 | * @common: embedded struct dma_device |
49 | * @version: version of ioatdma device | 51 | * @version: version of ioatdma device |
52 | * @irq_mode: which style irq to use | ||
53 | * @msix_entries: irq handlers | ||
54 | * @idx: per channel data | ||
50 | */ | 55 | */ |
51 | 56 | ||
52 | struct ioatdma_device { | 57 | struct ioatdma_device { |
@@ -63,23 +68,7 @@ struct ioatdma_device { | |||
63 | 68 | ||
64 | /** | 69 | /** |
65 | * struct ioat_dma_chan - internal representation of a DMA channel | 70 | * struct ioat_dma_chan - internal representation of a DMA channel |
66 | * @device: | ||
67 | * @reg_base: | ||
68 | * @sw_in_use: | ||
69 | * @completion: | ||
70 | * @completion_low: | ||
71 | * @completion_high: | ||
72 | * @completed_cookie: last cookie seen completed on cleanup | ||
73 | * @cookie: value of last cookie given to client | ||
74 | * @last_completion: | ||
75 | * @xfercap: | ||
76 | * @desc_lock: | ||
77 | * @free_desc: | ||
78 | * @used_desc: | ||
79 | * @resource: | ||
80 | * @device_node: | ||
81 | */ | 71 | */ |
82 | |||
83 | struct ioat_dma_chan { | 72 | struct ioat_dma_chan { |
84 | 73 | ||
85 | void __iomem *reg_base; | 74 | void __iomem *reg_base; |
@@ -95,6 +84,8 @@ struct ioat_dma_chan { | |||
95 | struct list_head used_desc; | 84 | struct list_head used_desc; |
96 | 85 | ||
97 | int pending; | 86 | int pending; |
87 | int dmacount; | ||
88 | int desccount; | ||
98 | 89 | ||
99 | struct ioatdma_device *device; | 90 | struct ioatdma_device *device; |
100 | struct dma_chan common; | 91 | struct dma_chan common; |
@@ -134,12 +125,13 @@ struct ioat_desc_sw { | |||
134 | struct ioatdma_device *ioat_dma_probe(struct pci_dev *pdev, | 125 | struct ioatdma_device *ioat_dma_probe(struct pci_dev *pdev, |
135 | void __iomem *iobase); | 126 | void __iomem *iobase); |
136 | void ioat_dma_remove(struct ioatdma_device *device); | 127 | void ioat_dma_remove(struct ioatdma_device *device); |
137 | struct dca_provider *ioat_dca_init(struct pci_dev *pdev, | 128 | struct dca_provider *ioat_dca_init(struct pci_dev *pdev, void __iomem *iobase); |
138 | void __iomem *iobase); | 129 | struct dca_provider *ioat2_dca_init(struct pci_dev *pdev, void __iomem *iobase); |
139 | #else | 130 | #else |
140 | #define ioat_dma_probe(pdev, iobase) NULL | 131 | #define ioat_dma_probe(pdev, iobase) NULL |
141 | #define ioat_dma_remove(device) do { } while (0) | 132 | #define ioat_dma_remove(device) do { } while (0) |
142 | #define ioat_dca_init(pdev, iobase) NULL | 133 | #define ioat_dca_init(pdev, iobase) NULL |
134 | #define ioat2_dca_init(pdev, iobase) NULL | ||
143 | #endif | 135 | #endif |
144 | 136 | ||
145 | #endif /* IOATDMA_H */ | 137 | #endif /* IOATDMA_H */ |