Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 1 | /* |
Andy Shevchenko | dd5720b | 2014-02-12 11:16:17 +0200 | [diff] [blame] | 2 | * Driver for the Synopsys DesignWare DMA Controller |
Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 3 | * |
| 4 | * Copyright (C) 2007 Atmel Corporation |
Viresh Kumar | aecb7b6 | 2011-05-24 14:04:09 +0530 | [diff] [blame] | 5 | * Copyright (C) 2010-2011 ST Microelectronics |
Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 6 | * |
| 7 | * This program is free software; you can redistribute it and/or modify |
| 8 | * it under the terms of the GNU General Public License version 2 as |
| 9 | * published by the Free Software Foundation. |
| 10 | */ |
Andy Shevchenko | 3d588f8 | 2014-09-23 17:18:11 +0300 | [diff] [blame] | 11 | #ifndef _PLATFORM_DATA_DMA_DW_H |
| 12 | #define _PLATFORM_DATA_DMA_DW_H |
Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 13 | |
Andy Shevchenko | 3d588f8 | 2014-09-23 17:18:11 +0300 | [diff] [blame] | 14 | #include <linux/device.h> |
Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 15 | |
Andy Shevchenko | d8ded50 | 2015-01-13 19:08:14 +0200 | [diff] [blame] | 16 | #define DW_DMA_MAX_NR_MASTERS 4 |
| 17 | |
Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 18 | /** |
Viresh Kumar | a9ddb57 | 2012-10-16 09:49:17 +0530 | [diff] [blame] | 19 | * struct dw_dma_slave - Controller-specific information about a slave |
| 20 | * |
Andy Shevchenko | cfd8fef | 2015-01-13 19:08:13 +0200 | [diff] [blame] | 21 | * @dma_dev: required DMA master device |
Andy Shevchenko | 7e1e2f2 | 2014-08-19 20:29:14 +0300 | [diff] [blame] | 22 | * @src_id: src request line |
| 23 | * @dst_id: dst request line |
Viresh Kumar | a9ddb57 | 2012-10-16 09:49:17 +0530 | [diff] [blame] | 24 | * @src_master: src master for transfers on allocated channel. |
| 25 | * @dst_master: dest master for transfers on allocated channel. |
| 26 | */ |
| 27 | struct dw_dma_slave { |
| 28 | struct device *dma_dev; |
Andy Shevchenko | 7e1e2f2 | 2014-08-19 20:29:14 +0300 | [diff] [blame] | 29 | u8 src_id; |
| 30 | u8 dst_id; |
Viresh Kumar | a9ddb57 | 2012-10-16 09:49:17 +0530 | [diff] [blame] | 31 | u8 src_master; |
| 32 | u8 dst_master; |
| 33 | }; |
| 34 | |
| 35 | /** |
Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 36 | * struct dw_dma_platform_data - Controller configuration parameters |
| 37 | * @nr_channels: Number of channels supported by hardware (max 8) |
Jamie Iles | 95ea759 | 2011-01-21 14:11:54 +0000 | [diff] [blame] | 38 | * @is_private: The device channels should be marked as private and not for |
| 39 | * by the general purpose DMA channel allocator. |
Andy Shevchenko | df5c738 | 2015-10-13 20:09:19 +0300 | [diff] [blame] | 40 | * @is_memcpy: The device channels do support memory-to-memory transfers. |
Viresh Kumar | 177d2bf | 2012-10-16 09:49:16 +0530 | [diff] [blame] | 41 | * @chan_allocation_order: Allocate channels starting from 0 or 7 |
| 42 | * @chan_priority: Set channel priority increasing from 0 to 7 or 7 to 0. |
Andy Shevchenko | 4a63a8b | 2012-09-21 15:05:47 +0300 | [diff] [blame] | 43 | * @block_size: Maximum block size supported by the controller |
Andy Shevchenko | a098200 | 2012-09-21 15:05:48 +0300 | [diff] [blame] | 44 | * @nr_masters: Number of AHB masters supported by the controller |
| 45 | * @data_width: Maximum data width supported by hardware per AHB master |
| 46 | * (0 - 8bits, 1 - 16bits, ..., 5 - 256bits) |
Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 47 | */ |
| 48 | struct dw_dma_platform_data { |
| 49 | unsigned int nr_channels; |
Jamie Iles | 95ea759 | 2011-01-21 14:11:54 +0000 | [diff] [blame] | 50 | bool is_private; |
Andy Shevchenko | df5c738 | 2015-10-13 20:09:19 +0300 | [diff] [blame] | 51 | bool is_memcpy; |
Viresh Kumar | b0c3130 | 2011-03-03 15:47:21 +0530 | [diff] [blame] | 52 | #define CHAN_ALLOCATION_ASCENDING 0 /* zero to seven */ |
| 53 | #define CHAN_ALLOCATION_DESCENDING 1 /* seven to zero */ |
| 54 | unsigned char chan_allocation_order; |
Viresh Kumar | 93317e8 | 2011-03-03 15:47:22 +0530 | [diff] [blame] | 55 | #define CHAN_PRIORITY_ASCENDING 0 /* chan0 highest */ |
| 56 | #define CHAN_PRIORITY_DESCENDING 1 /* chan7 highest */ |
| 57 | unsigned char chan_priority; |
Andy Shevchenko | 4a63a8b | 2012-09-21 15:05:47 +0300 | [diff] [blame] | 58 | unsigned short block_size; |
Andy Shevchenko | a098200 | 2012-09-21 15:05:48 +0300 | [diff] [blame] | 59 | unsigned char nr_masters; |
Andy Shevchenko | d8ded50 | 2015-01-13 19:08:14 +0200 | [diff] [blame] | 60 | unsigned char data_width[DW_DMA_MAX_NR_MASTERS]; |
Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 61 | }; |
| 62 | |
Andy Shevchenko | 3d588f8 | 2014-09-23 17:18:11 +0300 | [diff] [blame] | 63 | #endif /* _PLATFORM_DATA_DMA_DW_H */ |