diff options
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/amba/pl08x.h | 10 | ||||
-rw-r--r-- | include/linux/amba/pl330.h | 1 | ||||
-rw-r--r-- | include/linux/dmaengine.h | 35 | ||||
-rw-r--r-- | include/linux/dw_dmac.h | 38 |
4 files changed, 34 insertions, 50 deletions
diff --git a/include/linux/amba/pl08x.h b/include/linux/amba/pl08x.h index 033f6aa670de..e64ce2cfee99 100644 --- a/include/linux/amba/pl08x.h +++ b/include/linux/amba/pl08x.h | |||
@@ -47,9 +47,6 @@ enum { | |||
47 | * @muxval: a number usually used to poke into some mux regiser to | 47 | * @muxval: a number usually used to poke into some mux regiser to |
48 | * mux in the signal to this channel | 48 | * mux in the signal to this channel |
49 | * @cctl_opt: default options for the channel control register | 49 | * @cctl_opt: default options for the channel control register |
50 | * @device_fc: Flow Controller Settings for ccfg register. Only valid for slave | ||
51 | * channels. Fill with 'true' if peripheral should be flow controller. Direction | ||
52 | * will be selected at Runtime. | ||
53 | * @addr: source/target address in physical memory for this DMA channel, | 50 | * @addr: source/target address in physical memory for this DMA channel, |
54 | * can be the address of a FIFO register for burst requests for example. | 51 | * can be the address of a FIFO register for burst requests for example. |
55 | * This can be left undefined if the PrimeCell API is used for configuring | 52 | * This can be left undefined if the PrimeCell API is used for configuring |
@@ -68,7 +65,6 @@ struct pl08x_channel_data { | |||
68 | int max_signal; | 65 | int max_signal; |
69 | u32 muxval; | 66 | u32 muxval; |
70 | u32 cctl; | 67 | u32 cctl; |
71 | bool device_fc; | ||
72 | dma_addr_t addr; | 68 | dma_addr_t addr; |
73 | bool circular_buffer; | 69 | bool circular_buffer; |
74 | bool single; | 70 | bool single; |
@@ -176,13 +172,15 @@ enum pl08x_dma_chan_state { | |||
176 | * @runtime_addr: address for RX/TX according to the runtime config | 172 | * @runtime_addr: address for RX/TX according to the runtime config |
177 | * @runtime_direction: current direction of this channel according to | 173 | * @runtime_direction: current direction of this channel according to |
178 | * runtime config | 174 | * runtime config |
179 | * @lc: last completed transaction on this channel | ||
180 | * @pend_list: queued transactions pending on this channel | 175 | * @pend_list: queued transactions pending on this channel |
181 | * @at: active transaction on this channel | 176 | * @at: active transaction on this channel |
182 | * @lock: a lock for this channel data | 177 | * @lock: a lock for this channel data |
183 | * @host: a pointer to the host (internal use) | 178 | * @host: a pointer to the host (internal use) |
184 | * @state: whether the channel is idle, paused, running etc | 179 | * @state: whether the channel is idle, paused, running etc |
185 | * @slave: whether this channel is a device (slave) or for memcpy | 180 | * @slave: whether this channel is a device (slave) or for memcpy |
181 | * @device_fc: Flow Controller Settings for ccfg register. Only valid for slave | ||
182 | * channels. Fill with 'true' if peripheral should be flow controller. Direction | ||
183 | * will be selected at Runtime. | ||
186 | * @waiting: a TX descriptor on this channel which is waiting for a physical | 184 | * @waiting: a TX descriptor on this channel which is waiting for a physical |
187 | * channel to become available | 185 | * channel to become available |
188 | */ | 186 | */ |
@@ -198,13 +196,13 @@ struct pl08x_dma_chan { | |||
198 | u32 src_cctl; | 196 | u32 src_cctl; |
199 | u32 dst_cctl; | 197 | u32 dst_cctl; |
200 | enum dma_transfer_direction runtime_direction; | 198 | enum dma_transfer_direction runtime_direction; |
201 | dma_cookie_t lc; | ||
202 | struct list_head pend_list; | 199 | struct list_head pend_list; |
203 | struct pl08x_txd *at; | 200 | struct pl08x_txd *at; |
204 | spinlock_t lock; | 201 | spinlock_t lock; |
205 | struct pl08x_driver_data *host; | 202 | struct pl08x_driver_data *host; |
206 | enum pl08x_dma_chan_state state; | 203 | enum pl08x_dma_chan_state state; |
207 | bool slave; | 204 | bool slave; |
205 | bool device_fc; | ||
208 | struct pl08x_txd *waiting; | 206 | struct pl08x_txd *waiting; |
209 | }; | 207 | }; |
210 | 208 | ||
diff --git a/include/linux/amba/pl330.h b/include/linux/amba/pl330.h index 12e023c19ac1..fe93758e8403 100644 --- a/include/linux/amba/pl330.h +++ b/include/linux/amba/pl330.h | |||
@@ -13,7 +13,6 @@ | |||
13 | #define __AMBA_PL330_H_ | 13 | #define __AMBA_PL330_H_ |
14 | 14 | ||
15 | #include <linux/dmaengine.h> | 15 | #include <linux/dmaengine.h> |
16 | #include <asm/hardware/pl330.h> | ||
17 | 16 | ||
18 | struct dma_pl330_platdata { | 17 | struct dma_pl330_platdata { |
19 | /* | 18 | /* |
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index a5966f691ef8..676f967390ae 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h | |||
@@ -18,14 +18,15 @@ | |||
18 | * The full GNU General Public License is included in this distribution in the | 18 | * The full GNU General Public License is included in this distribution in the |
19 | * file called COPYING. | 19 | * file called COPYING. |
20 | */ | 20 | */ |
21 | #ifndef DMAENGINE_H | 21 | #ifndef LINUX_DMAENGINE_H |
22 | #define DMAENGINE_H | 22 | #define LINUX_DMAENGINE_H |
23 | 23 | ||
24 | #include <linux/device.h> | 24 | #include <linux/device.h> |
25 | #include <linux/uio.h> | 25 | #include <linux/uio.h> |
26 | #include <linux/bug.h> | 26 | #include <linux/bug.h> |
27 | #include <linux/scatterlist.h> | 27 | #include <linux/scatterlist.h> |
28 | #include <linux/bitmap.h> | 28 | #include <linux/bitmap.h> |
29 | #include <linux/types.h> | ||
29 | #include <asm/page.h> | 30 | #include <asm/page.h> |
30 | 31 | ||
31 | /** | 32 | /** |
@@ -258,6 +259,7 @@ struct dma_chan_percpu { | |||
258 | * struct dma_chan - devices supply DMA channels, clients use them | 259 | * struct dma_chan - devices supply DMA channels, clients use them |
259 | * @device: ptr to the dma device who supplies this channel, always !%NULL | 260 | * @device: ptr to the dma device who supplies this channel, always !%NULL |
260 | * @cookie: last cookie value returned to client | 261 | * @cookie: last cookie value returned to client |
262 | * @completed_cookie: last completed cookie for this channel | ||
261 | * @chan_id: channel ID for sysfs | 263 | * @chan_id: channel ID for sysfs |
262 | * @dev: class device for sysfs | 264 | * @dev: class device for sysfs |
263 | * @device_node: used to add this to the device chan list | 265 | * @device_node: used to add this to the device chan list |
@@ -269,6 +271,7 @@ struct dma_chan_percpu { | |||
269 | struct dma_chan { | 271 | struct dma_chan { |
270 | struct dma_device *device; | 272 | struct dma_device *device; |
271 | dma_cookie_t cookie; | 273 | dma_cookie_t cookie; |
274 | dma_cookie_t completed_cookie; | ||
272 | 275 | ||
273 | /* sysfs */ | 276 | /* sysfs */ |
274 | int chan_id; | 277 | int chan_id; |
@@ -332,6 +335,9 @@ enum dma_slave_buswidth { | |||
332 | * may or may not be applicable on memory sources. | 335 | * may or may not be applicable on memory sources. |
333 | * @dst_maxburst: same as src_maxburst but for destination target | 336 | * @dst_maxburst: same as src_maxburst but for destination target |
334 | * mutatis mutandis. | 337 | * mutatis mutandis. |
338 | * @device_fc: Flow Controller Settings. Only valid for slave channels. Fill | ||
339 | * with 'true' if peripheral should be flow controller. Direction will be | ||
340 | * selected at Runtime. | ||
335 | * | 341 | * |
336 | * This struct is passed in as configuration data to a DMA engine | 342 | * This struct is passed in as configuration data to a DMA engine |
337 | * in order to set up a certain channel for DMA transport at runtime. | 343 | * in order to set up a certain channel for DMA transport at runtime. |
@@ -358,6 +364,7 @@ struct dma_slave_config { | |||
358 | enum dma_slave_buswidth dst_addr_width; | 364 | enum dma_slave_buswidth dst_addr_width; |
359 | u32 src_maxburst; | 365 | u32 src_maxburst; |
360 | u32 dst_maxburst; | 366 | u32 dst_maxburst; |
367 | bool device_fc; | ||
361 | }; | 368 | }; |
362 | 369 | ||
363 | static inline const char *dma_chan_name(struct dma_chan *chan) | 370 | static inline const char *dma_chan_name(struct dma_chan *chan) |
@@ -576,10 +583,11 @@ struct dma_device { | |||
576 | struct dma_async_tx_descriptor *(*device_prep_slave_sg)( | 583 | struct dma_async_tx_descriptor *(*device_prep_slave_sg)( |
577 | struct dma_chan *chan, struct scatterlist *sgl, | 584 | struct dma_chan *chan, struct scatterlist *sgl, |
578 | unsigned int sg_len, enum dma_transfer_direction direction, | 585 | unsigned int sg_len, enum dma_transfer_direction direction, |
579 | unsigned long flags); | 586 | unsigned long flags, void *context); |
580 | struct dma_async_tx_descriptor *(*device_prep_dma_cyclic)( | 587 | struct dma_async_tx_descriptor *(*device_prep_dma_cyclic)( |
581 | struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len, | 588 | struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len, |
582 | size_t period_len, enum dma_transfer_direction direction); | 589 | size_t period_len, enum dma_transfer_direction direction, |
590 | void *context); | ||
583 | struct dma_async_tx_descriptor *(*device_prep_interleaved_dma)( | 591 | struct dma_async_tx_descriptor *(*device_prep_interleaved_dma)( |
584 | struct dma_chan *chan, struct dma_interleaved_template *xt, | 592 | struct dma_chan *chan, struct dma_interleaved_template *xt, |
585 | unsigned long flags); | 593 | unsigned long flags); |
@@ -613,7 +621,24 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_single( | |||
613 | struct scatterlist sg; | 621 | struct scatterlist sg; |
614 | sg_init_one(&sg, buf, len); | 622 | sg_init_one(&sg, buf, len); |
615 | 623 | ||
616 | return chan->device->device_prep_slave_sg(chan, &sg, 1, dir, flags); | 624 | return chan->device->device_prep_slave_sg(chan, &sg, 1, |
625 | dir, flags, NULL); | ||
626 | } | ||
627 | |||
628 | static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_sg( | ||
629 | struct dma_chan *chan, struct scatterlist *sgl, unsigned int sg_len, | ||
630 | enum dma_transfer_direction dir, unsigned long flags) | ||
631 | { | ||
632 | return chan->device->device_prep_slave_sg(chan, sgl, sg_len, | ||
633 | dir, flags, NULL); | ||
634 | } | ||
635 | |||
636 | static inline struct dma_async_tx_descriptor *dmaengine_prep_dma_cyclic( | ||
637 | struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len, | ||
638 | size_t period_len, enum dma_transfer_direction dir) | ||
639 | { | ||
640 | return chan->device->device_prep_dma_cyclic(chan, buf_addr, buf_len, | ||
641 | period_len, dir, NULL); | ||
617 | } | 642 | } |
618 | 643 | ||
619 | static inline int dmaengine_terminate_all(struct dma_chan *chan) | 644 | static inline int dmaengine_terminate_all(struct dma_chan *chan) |
diff --git a/include/linux/dw_dmac.h b/include/linux/dw_dmac.h index f2c64f92c4a0..2412e02d7c0f 100644 --- a/include/linux/dw_dmac.h +++ b/include/linux/dw_dmac.h | |||
@@ -31,18 +31,6 @@ struct dw_dma_platform_data { | |||
31 | unsigned char chan_priority; | 31 | unsigned char chan_priority; |
32 | }; | 32 | }; |
33 | 33 | ||
34 | /** | ||
35 | * enum dw_dma_slave_width - DMA slave register access width. | ||
36 | * @DMA_SLAVE_WIDTH_8BIT: Do 8-bit slave register accesses | ||
37 | * @DMA_SLAVE_WIDTH_16BIT: Do 16-bit slave register accesses | ||
38 | * @DMA_SLAVE_WIDTH_32BIT: Do 32-bit slave register accesses | ||
39 | */ | ||
40 | enum dw_dma_slave_width { | ||
41 | DW_DMA_SLAVE_WIDTH_8BIT, | ||
42 | DW_DMA_SLAVE_WIDTH_16BIT, | ||
43 | DW_DMA_SLAVE_WIDTH_32BIT, | ||
44 | }; | ||
45 | |||
46 | /* bursts size */ | 34 | /* bursts size */ |
47 | enum dw_dma_msize { | 35 | enum dw_dma_msize { |
48 | DW_DMA_MSIZE_1, | 36 | DW_DMA_MSIZE_1, |
@@ -55,47 +43,21 @@ enum dw_dma_msize { | |||
55 | DW_DMA_MSIZE_256, | 43 | DW_DMA_MSIZE_256, |
56 | }; | 44 | }; |
57 | 45 | ||
58 | /* flow controller */ | ||
59 | enum dw_dma_fc { | ||
60 | DW_DMA_FC_D_M2M, | ||
61 | DW_DMA_FC_D_M2P, | ||
62 | DW_DMA_FC_D_P2M, | ||
63 | DW_DMA_FC_D_P2P, | ||
64 | DW_DMA_FC_P_P2M, | ||
65 | DW_DMA_FC_SP_P2P, | ||
66 | DW_DMA_FC_P_M2P, | ||
67 | DW_DMA_FC_DP_P2P, | ||
68 | }; | ||
69 | |||
70 | /** | 46 | /** |
71 | * struct dw_dma_slave - Controller-specific information about a slave | 47 | * struct dw_dma_slave - Controller-specific information about a slave |
72 | * | 48 | * |
73 | * @dma_dev: required DMA master device | 49 | * @dma_dev: required DMA master device |
74 | * @tx_reg: physical address of data register used for | ||
75 | * memory-to-peripheral transfers | ||
76 | * @rx_reg: physical address of data register used for | ||
77 | * peripheral-to-memory transfers | ||
78 | * @reg_width: peripheral register width | ||
79 | * @cfg_hi: Platform-specific initializer for the CFG_HI register | 50 | * @cfg_hi: Platform-specific initializer for the CFG_HI register |
80 | * @cfg_lo: Platform-specific initializer for the CFG_LO register | 51 | * @cfg_lo: Platform-specific initializer for the CFG_LO register |
81 | * @src_master: src master for transfers on allocated channel. | 52 | * @src_master: src master for transfers on allocated channel. |
82 | * @dst_master: dest master for transfers on allocated channel. | 53 | * @dst_master: dest master for transfers on allocated channel. |
83 | * @src_msize: src burst size. | ||
84 | * @dst_msize: dest burst size. | ||
85 | * @fc: flow controller for DMA transfer | ||
86 | */ | 54 | */ |
87 | struct dw_dma_slave { | 55 | struct dw_dma_slave { |
88 | struct device *dma_dev; | 56 | struct device *dma_dev; |
89 | dma_addr_t tx_reg; | ||
90 | dma_addr_t rx_reg; | ||
91 | enum dw_dma_slave_width reg_width; | ||
92 | u32 cfg_hi; | 57 | u32 cfg_hi; |
93 | u32 cfg_lo; | 58 | u32 cfg_lo; |
94 | u8 src_master; | 59 | u8 src_master; |
95 | u8 dst_master; | 60 | u8 dst_master; |
96 | u8 src_msize; | ||
97 | u8 dst_msize; | ||
98 | u8 fc; | ||
99 | }; | 61 | }; |
100 | 62 | ||
101 | /* Platform-configurable bits in CFG_HI */ | 63 | /* Platform-configurable bits in CFG_HI */ |