blob: b9061128abdef3bcf76a2e9cdd4bab76732b4fd5 [file] [log] [blame]
Ben Dooks2c420fe2010-01-29 09:02:15 +00001/* arch/arm/plat-samsung/include/plat/dma.h
Ben Dooksc133c292009-03-19 15:02:37 +00002 *
Ben Dooksccae9412009-11-13 22:54:14 +00003 * Copyright (C) 2003-2006 Simtec Electronics
Ben Dooksc133c292009-03-19 15:02:37 +00004 * Ben Dooks <ben@simtec.co.uk>
5 *
6 * Samsung S3C DMA support
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11*/
12
Boojin Kim51ddf312011-09-02 09:44:44 +090013#include <linux/dma-mapping.h>
14
Ben Dooksc133c292009-03-19 15:02:37 +000015enum s3c2410_dma_buffresult {
16 S3C2410_RES_OK,
17 S3C2410_RES_ERR,
18 S3C2410_RES_ABORT
19};
20
Ben Dooksc133c292009-03-19 15:02:37 +000021/* enum s3c2410_chan_op
22 *
23 * operation codes passed to the DMA code by the user, and also used
24 * to inform the current channel owner of any changes to the system state
25*/
26
27enum s3c2410_chan_op {
28 S3C2410_DMAOP_START,
29 S3C2410_DMAOP_STOP,
30 S3C2410_DMAOP_PAUSE,
31 S3C2410_DMAOP_RESUME,
32 S3C2410_DMAOP_FLUSH,
33 S3C2410_DMAOP_TIMEOUT, /* internal signal to handler */
34 S3C2410_DMAOP_STARTED, /* indicate channel started */
35};
36
37struct s3c2410_dma_client {
38 char *name;
39};
40
41struct s3c2410_dma_chan;
Sangwook Leed670ac02011-07-16 15:50:19 +090042enum dma_ch;
Ben Dooksc133c292009-03-19 15:02:37 +000043
44/* s3c2410_dma_cbfn_t
45 *
46 * buffer callback routine type
47*/
48
49typedef void (*s3c2410_dma_cbfn_t)(struct s3c2410_dma_chan *,
50 void *buf, int size,
51 enum s3c2410_dma_buffresult result);
52
53typedef int (*s3c2410_dma_opfn_t)(struct s3c2410_dma_chan *,
54 enum s3c2410_chan_op );
55
56
57
58/* s3c2410_dma_request
59 *
60 * request a dma channel exclusivley
61*/
62
Sangwook Leed670ac02011-07-16 15:50:19 +090063extern int s3c2410_dma_request(enum dma_ch channel,
Ben Dooksc133c292009-03-19 15:02:37 +000064 struct s3c2410_dma_client *, void *dev);
65
66
67/* s3c2410_dma_ctrl
68 *
69 * change the state of the dma channel
70*/
71
Sangwook Leed670ac02011-07-16 15:50:19 +090072extern int s3c2410_dma_ctrl(enum dma_ch channel, enum s3c2410_chan_op op);
Ben Dooksc133c292009-03-19 15:02:37 +000073
74/* s3c2410_dma_setflags
75 *
76 * set the channel's flags to a given state
77*/
78
Sangwook Leed670ac02011-07-16 15:50:19 +090079extern int s3c2410_dma_setflags(enum dma_ch channel,
Ben Dooksc133c292009-03-19 15:02:37 +000080 unsigned int flags);
81
82/* s3c2410_dma_free
83 *
84 * free the dma channel (will also abort any outstanding operations)
85*/
86
Sangwook Leed670ac02011-07-16 15:50:19 +090087extern int s3c2410_dma_free(enum dma_ch channel, struct s3c2410_dma_client *);
Ben Dooksc133c292009-03-19 15:02:37 +000088
89/* s3c2410_dma_enqueue
90 *
91 * place the given buffer onto the queue of operations for the channel.
92 * The buffer must be allocated from dma coherent memory, or the Dcache/WB
93 * drained before the buffer is given to the DMA system.
94*/
95
Sangwook Leed670ac02011-07-16 15:50:19 +090096extern int s3c2410_dma_enqueue(enum dma_ch channel, void *id,
Ben Dooksc133c292009-03-19 15:02:37 +000097 dma_addr_t data, int size);
98
99/* s3c2410_dma_config
100 *
101 * configure the dma channel
102*/
103
Sangwook Leed670ac02011-07-16 15:50:19 +0900104extern int s3c2410_dma_config(enum dma_ch channel, int xferunit);
Ben Dooksc133c292009-03-19 15:02:37 +0000105
106/* s3c2410_dma_devconfig
107 *
108 * configure the device we're talking to
109*/
110
Sangwook Leed670ac02011-07-16 15:50:19 +0900111extern int s3c2410_dma_devconfig(enum dma_ch channel,
Boojin Kim51ddf312011-09-02 09:44:44 +0900112 enum dma_data_direction source, unsigned long devaddr);
Ben Dooksc133c292009-03-19 15:02:37 +0000113
114/* s3c2410_dma_getposition
115 *
116 * get the position that the dma transfer is currently at
117*/
118
Sangwook Leed670ac02011-07-16 15:50:19 +0900119extern int s3c2410_dma_getposition(enum dma_ch channel,
Ben Dooksc133c292009-03-19 15:02:37 +0000120 dma_addr_t *src, dma_addr_t *dest);
121
Sangwook Leed670ac02011-07-16 15:50:19 +0900122extern int s3c2410_dma_set_opfn(enum dma_ch, s3c2410_dma_opfn_t rtn);
123extern int s3c2410_dma_set_buffdone_fn(enum dma_ch, s3c2410_dma_cbfn_t rtn);
Ben Dooksc133c292009-03-19 15:02:37 +0000124
125
Boojin Kimc4e16622011-09-02 09:44:35 +0900126#include <plat/dma-ops.h>