drm/gem: remove bogus NULL check from drm_gem_object_handle_unreference_unlocked
[profile/mobile/platform/kernel/linux-3.10-sc7730.git] / drivers / dma / sprd_dma.h
1 /*
2  * Copyright (C) 2012 Spreadtrum Communications Inc.
3  *
4  * This software is licensed under the terms of the GNU General Public
5  * License version 2, as published by the Free Software Foundation, and
6  * may be copied, distributed, and modified under those terms.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  */
13
14 #ifndef __SPRD_DMA_H
15 #define __SPRD_DMA_H
16 #include <linux/dmaengine.h>
17
18 #define DMA_UID_SOFTWARE                0
19
20 #define CHN_PRIORITY_OFFSET             12
21 #define CHN_PRIORITY_MASK               0x3
22 #define LLIST_EN_OFFSET                 4
23
24 #define SRC_DATAWIDTH_OFFSET    30
25 #define DES_DATAWIDTH_OFFSET    28
26 #define SWT_MODE_OFFSET                 26
27 #define REQ_MODE_OFFSET                 24
28 #define ADDR_WRAP_SEL_OFFSET    23
29 #define ADDR_WRAP_EN_OFFSET             22
30 #define ADDR_FIX_SEL_OFFSET             21
31 #define ADDR_FIX_SEL_EN                 20
32 #define LLIST_END_OFFSET                19
33 #define BLK_LEN_REC_H_OFFSET    17
34 #define FRG_LEN_OFFSET                  0
35
36 #define DEST_TRSF_STEP_OFFSET   16
37 #define SRC_TRSF_STEP_OFFSET    0
38 #define DEST_FRAG_STEP_OFFSET   16
39 #define SRC_FRAG_STEP_OFFSET    0
40
41 #define TRSF_STEP_MASK                  0xffff
42 #define FRAG_STEP_MASK                  0xffff
43
44 #define DATAWIDTH_MASK                  0x3
45 #define SWT_MODE_MASK                   0x3
46 #define REQ_MODE_MASK                   0x3
47 #define ADDR_WRAP_SEL_MASK              0x1
48 #define ADDR_WRAP_EN_MASK               0x1
49 #define ADDR_FIX_SEL_MASK               0x1
50 #define ADDR_FIX_SEL_MASK               0x1
51 #define LLIST_END_MASK                  0x1
52 #define BLK_LEN_REC_H_MASKT             0x3
53 #define FRG_LEN_MASK                    0x1ffff
54
55 #define BLK_LEN_MASK                    0x1ffff
56 #define TRSC_LEN_MASK                   0xfffffff
57
58 typedef enum {
59         BYTE_WIDTH = 0x01,
60         SHORT_WIDTH,
61         WORD_WIDTH,
62 } dma_datawidth;
63
64 typedef enum {
65         FRAG_REQ_MODE = 0x0,
66         BLOCK_REQ_MODE,
67         TRANS_REQ_MODE,
68         LIST_REQ_MODE,
69 } dma_request_mode;
70
71 typedef enum {
72         NO_INT = 0x00,
73         FRAG_DONE,
74         BLK_DONE,
75         TRANS_DONE,
76         LIST_DONE,
77         CONFIG_ERR,
78 } dma_int_type;
79
80 typedef enum {
81         DMA_PRI_0 = 0,
82         DMA_PRI_1,
83         DMA_PRI_2,
84         DMA_PRI_3,
85 } dma_pri_level;
86
87 typedef enum {
88         SET_IRQ_TYPE = 0x0,
89         SET_WRAP_MODE,
90         SET_REQ_MODE,
91         SET_CHN_PRIO,
92         SET_INT_TYPE,
93 } dma_cmd;
94
95 struct sprd_dma_glb_reg {
96         u32 pause;
97         u32 frag_wait;
98         u32 pend0_en;
99         u32 pend1_en;
100         u32 int_raw_sts;
101         u32 int_msk_sts;
102         u32 req_sts;
103         u32 en_sts;
104         u32 debug_sts;
105         u32 arb_sel_sts;
106 };
107
108 struct sprd_dma_cfg {
109         unsigned long link_cfg_v;
110         unsigned long link_cfg_p;
111         u32 dev_id;
112         dma_datawidth datawidth;
113         u32 src_addr;
114         u32 des_addr;
115         u32 fragmens_len;
116         u32 block_len;
117         u32 src_step;
118         u32 des_step;
119         dma_request_mode req_mode;
120         dma_int_type irq_mode;
121         /*only full chn need following config*/
122         u32 transcation_len;
123         u32 src_frag_step;
124         u32 dst_frag_step;
125         u32 wrap_ptr;
126         u32 wrap_to;
127         u32 src_blk_step;
128         u32 dst_blk_step;
129         u32 linklist_ptr;
130         u32 is_end;
131 };
132
133 enum dma_chn_type {
134         STANDARD_DMA,
135         FULL_DMA,
136 };
137
138 enum dma_filter_param {
139         AP_STANDARD_DMA = 0x11,
140         AP_FULL_DMA = 0x22,
141         AON_STANDARD_DMA = 0x33,
142         AON_FULL_DMA = 0x44,
143         NUM_REQUEST_DMA = 0x100,
144 };
145
146 enum dma_chn_status {
147         NO_USED,
148         USED,
149 };
150
151 enum dma_link_list {
152         LINKLIST,
153         NO_LINKLIST,
154 };
155
156 enum request_mode {
157         SOFTWARE_REQ,
158         HARDWARE_REQ,   
159 };
160
161 enum dma_flags {
162         DMA_CFG_FLAG = BIT(0),
163         DMA_HARDWARE_FLAG = BIT(1),
164         DMA_SOFTWARE_FLAG = BIT(2),
165 };
166
167 enum config_type {
168         CONFIG_DESC,
169         CONFIG_LINKLIST,        
170 };
171
172 enum addr_type {
173     SPRD_SRC_ADDR = 0x55,
174     SPRD_DST_ADDR = 0xAA,
175 };
176
177 #if defined(CONFIG_ARCH_SC8825) || defined(CONFIG_ARCH_SC7710)
178 #define DMA_VER_R1P0
179
180 #define DMA_UID_SOFTWARE                0
181 #define DMA_UART0_TX                    1
182 #define DMA_UART0_RX                    2
183 #define DMA_UART1_TX                    3
184 #define DMA_UART1_RX                    4
185 #define DMA_UART2_TX                    5
186 #define DMA_UART2_RX                    6
187 #define DMA_IIS_TX                      7
188 #define DMA_IIS_RX                      8
189 #define DMA_EPT_RX                      9
190 #define DMA_EPT_TX                      10
191 #define DMA_VB_DA0                      11
192 #define DMA_VB_DA1                      12
193 #define DMA_VB_AD0                      13
194 #define DMA_VB_AD1                      14
195 #define DMA_SIM0_TX                     15
196 #define DMA_SIM0_RX                     16
197 #define DMA_SIM1_TX                     17
198 #define DMA_SIM1_RX                     18
199 #define DMA_SPI0_TX                     19
200 #define DMA_SPI0_RX                     20
201 #define DMA_ROT                         21
202 #define DMA_SPI1_TX                     22
203 #define DMA_SPI1_RX                     23
204 #define DMA_IIS1_TX                     24
205 #define DMA_IIS1_RX                     25
206 #define DMA_NFC_TX                      26
207 #define DMA_NFC_RX                      27
208 #define DMA_DRM_RAW                     29
209 #define DMA_DRM_CPT                     30
210
211 #define DMA_UID_MIN                     0
212 #define DMA_UID_MAX                     32
213
214 #endif
215
216
217 #ifdef CONFIG_ARCH_SCX35
218 #define DMA_VER_R4P0
219 /*DMA Request ID def*/
220 #define DMA_SIM_RX              1
221 #define DMA_SIM_TX              2
222 #define DMA_IIS0_RX             3
223 #define DMA_IIS0_TX             4
224 #define DMA_IIS1_RX             5
225 #define DMA_IIS1_TX             6
226 #define DMA_IIS2_RX             7
227 #define DMA_IIS2_TX             8
228 #define DMA_IIS3_RX             9
229 #define DMA_IIS3_TX             10
230 #define DMA_SPI0_RX             11
231 #define DMA_SPI0_TX             12
232 #define DMA_SPI1_RX             13
233 #define DMA_SPI1_TX             14
234 #define DMA_SPI2_RX             15
235 #define DMA_SPI2_TX             16
236 #define DMA_UART0_RX            17
237 #define DMA_UART0_TX            18
238 #define DMA_UART1_RX            19
239 #define DMA_UART1_TX            20
240 #define DMA_UART2_RX            21
241 #define DMA_UART2_TX            22
242 #define DMA_UART3_RX            23
243 #define DMA_UART3_TX            24
244 #define DMA_UART4_RX            25
245 #define DMA_UART4_TX            26
246 #define DMA_DRM_CPT             27
247 #define DMA_DRM_RAW             28
248 #ifndef CONFIG_SND_SOC_SPRD_AUDIO_USE_AON_DMA
249 #define DMA_VB_DA0              29
250 #define DMA_VB_DA1              30
251 #else
252 #define DMA_VB_DA0              7
253 #define DMA_VB_DA1              8
254 #endif
255 #define DMA_VB_AD0              31
256 #define DMA_VB_AD1              32
257 #define DMA_VB_AD2              33
258 #define DMA_VB_AD3              34
259 #define DMA_GPS                 35
260
261 #ifdef CONFIG_ARCH_SCX30G
262 #define DMA_SDIO0_RD            36
263 #define DMA_SDIO0_WR            37
264 #define DMA_SDIO1_RD            38
265 #define DMA_SDIO1_WR            39
266 #define DMA_SDIO2_RD            40
267 #define DMA_SDIO2_WR            41
268 #define DMA_EMMC_RD             42
269 #define DMA_EMMC_WR             43
270 #endif
271
272 #define DMA_IIS_RX      DMA_IIS0_RX
273 #define DMA_IIS_TX      DMA_IIS0_TX
274
275 #endif
276
277 int sprd_dma_check_register(struct dma_chan *c);
278 bool sprd_dma_filter_fn(struct dma_chan *chan, void *filter_param);
279 #endif