Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ste_dma40.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) ST-Ericsson SA 2007-2010
3  * Author: Per Forlin <[email protected]> for ST-Ericsson
4  * Author: Jonas Aaberg <[email protected]> for ST-Ericsson
5  * License terms: GNU General Public License (GPL) version 2
6  */
7 
8 
9 #ifndef STE_DMA40_H
10 #define STE_DMA40_H
11 
12 #include <linux/dmaengine.h>
13 #include <linux/scatterlist.h>
14 #include <linux/workqueue.h>
15 #include <linux/interrupt.h>
16 
17 /*
18  * Maxium size for a single dma descriptor
19  * Size is limited to 16 bits.
20  * Size is in the units of addr-widths (1,2,4,8 bytes)
21  * Larger transfers will be split up to multiple linked desc
22  */
23 #define STEDMA40_MAX_SEG_SIZE 0xFFFF
24 
25 /* dev types for memcpy */
26 #define STEDMA40_DEV_DST_MEMORY (-1)
27 #define STEDMA40_DEV_SRC_MEMORY (-1)
28 
33 };
34 
42 };
43 
44 #define STEDMA40_ESIZE_8_BIT 0x0
45 #define STEDMA40_ESIZE_16_BIT 0x1
46 #define STEDMA40_ESIZE_32_BIT 0x2
47 #define STEDMA40_ESIZE_64_BIT 0x3
48 
49 /* The value 4 indicates that PEN-reg shall be set to 0 */
50 #define STEDMA40_PSIZE_PHY_1 0x4
51 #define STEDMA40_PSIZE_PHY_2 0x0
52 #define STEDMA40_PSIZE_PHY_4 0x1
53 #define STEDMA40_PSIZE_PHY_8 0x2
54 #define STEDMA40_PSIZE_PHY_16 0x3
55 
56 /*
57  * The number of elements differ in logical and
58  * physical mode
59  */
60 #define STEDMA40_PSIZE_LOG_1 STEDMA40_PSIZE_PHY_2
61 #define STEDMA40_PSIZE_LOG_4 STEDMA40_PSIZE_PHY_4
62 #define STEDMA40_PSIZE_LOG_8 STEDMA40_PSIZE_PHY_8
63 #define STEDMA40_PSIZE_LOG_16 STEDMA40_PSIZE_PHY_16
64 
65 /* Maximum number of possible physical channels */
66 #define STEDMA40_MAX_PHYS 32
67 
71 };
72 
78 };
79 
85 };
86 
87 
97  bool big_endian;
99  int psize;
101 };
102 
126  bool realtime;
133 
136 };
137 
155  int *memcpy;
161 };
162 
163 #ifdef CONFIG_STE_DMA40
164 
178 bool stedma40_filter(struct dma_chan *chan, void *data);
179 
191 static inline struct
192 dma_async_tx_descriptor *stedma40_slave_mem(struct dma_chan *chan,
194  unsigned int size,
196  unsigned long flags)
197 {
198  struct scatterlist sg;
199  sg_init_table(&sg, 1);
200  sg.dma_address = addr;
201  sg.length = size;
202 
203  return dmaengine_prep_slave_sg(chan, &sg, 1, direction, flags);
204 }
205 
206 #else
207 static inline bool stedma40_filter(struct dma_chan *chan, void *data)
208 {
209  return false;
210 }
211 
212 static inline struct
213 dma_async_tx_descriptor *stedma40_slave_mem(struct dma_chan *chan,
215  unsigned int size,
217  unsigned long flags)
218 {
219  return NULL;
220 }
221 #endif
222 
223 #endif