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 */ |
