Root/
1 | /* |
2 | * Copyright (C) 2007-2013 ST-Ericsson |
3 | * License terms: GNU General Public License (GPL) version 2 |
4 | * DMA driver for COH 901 318 |
5 | * Author: Per Friden <per.friden@stericsson.com> |
6 | */ |
7 | |
8 | #ifndef COH901318_H |
9 | #define COH901318_H |
10 | |
11 | #define MAX_DMA_PACKET_SIZE_SHIFT 11 |
12 | #define MAX_DMA_PACKET_SIZE (1 << MAX_DMA_PACKET_SIZE_SHIFT) |
13 | |
14 | struct device; |
15 | |
16 | struct coh901318_pool { |
17 | spinlock_t lock; |
18 | struct dma_pool *dmapool; |
19 | struct device *dev; |
20 | |
21 | #ifdef CONFIG_DEBUG_FS |
22 | int debugfs_pool_counter; |
23 | #endif |
24 | }; |
25 | |
26 | /** |
27 | * struct coh901318_lli - linked list item for DMAC |
28 | * @control: control settings for DMAC |
29 | * @src_addr: transfer source address |
30 | * @dst_addr: transfer destination address |
31 | * @link_addr: physical address to next lli |
32 | * @virt_link_addr: virtual address of next lli (only used by pool_free) |
33 | * @phy_this: physical address of current lli (only used by pool_free) |
34 | */ |
35 | struct coh901318_lli { |
36 | u32 control; |
37 | dma_addr_t src_addr; |
38 | dma_addr_t dst_addr; |
39 | dma_addr_t link_addr; |
40 | |
41 | void *virt_link_addr; |
42 | dma_addr_t phy_this; |
43 | }; |
44 | |
45 | /** |
46 | * coh901318_pool_create() - Creates an dma pool for lli:s |
47 | * @pool: pool handle |
48 | * @dev: dma device |
49 | * @lli_nbr: number of lli:s in the pool |
50 | * @algin: address alignemtn of lli:s |
51 | * returns 0 on success otherwise none zero |
52 | */ |
53 | int coh901318_pool_create(struct coh901318_pool *pool, |
54 | struct device *dev, |
55 | size_t lli_nbr, size_t align); |
56 | |
57 | /** |
58 | * coh901318_pool_destroy() - Destroys the dma pool |
59 | * @pool: pool handle |
60 | * returns 0 on success otherwise none zero |
61 | */ |
62 | int coh901318_pool_destroy(struct coh901318_pool *pool); |
63 | |
64 | /** |
65 | * coh901318_lli_alloc() - Allocates a linked list |
66 | * |
67 | * @pool: pool handle |
68 | * @len: length to list |
69 | * return: none NULL if success otherwise NULL |
70 | */ |
71 | struct coh901318_lli * |
72 | coh901318_lli_alloc(struct coh901318_pool *pool, |
73 | unsigned int len); |
74 | |
75 | /** |
76 | * coh901318_lli_free() - Returns the linked list items to the pool |
77 | * @pool: pool handle |
78 | * @lli: reference to lli pointer to be freed |
79 | */ |
80 | void coh901318_lli_free(struct coh901318_pool *pool, |
81 | struct coh901318_lli **lli); |
82 | |
83 | /** |
84 | * coh901318_lli_fill_memcpy() - Prepares the lli:s for dma memcpy |
85 | * @pool: pool handle |
86 | * @lli: allocated lli |
87 | * @src: src address |
88 | * @size: transfer size |
89 | * @dst: destination address |
90 | * @ctrl_chained: ctrl for chained lli |
91 | * @ctrl_last: ctrl for the last lli |
92 | * returns number of CPU interrupts for the lli, negative on error. |
93 | */ |
94 | int |
95 | coh901318_lli_fill_memcpy(struct coh901318_pool *pool, |
96 | struct coh901318_lli *lli, |
97 | dma_addr_t src, unsigned int size, |
98 | dma_addr_t dst, u32 ctrl_chained, u32 ctrl_last); |
99 | |
100 | /** |
101 | * coh901318_lli_fill_single() - Prepares the lli:s for dma single transfer |
102 | * @pool: pool handle |
103 | * @lli: allocated lli |
104 | * @buf: transfer buffer |
105 | * @size: transfer size |
106 | * @dev_addr: address of periphal |
107 | * @ctrl_chained: ctrl for chained lli |
108 | * @ctrl_last: ctrl for the last lli |
109 | * @dir: direction of transfer (to or from device) |
110 | * returns number of CPU interrupts for the lli, negative on error. |
111 | */ |
112 | int |
113 | coh901318_lli_fill_single(struct coh901318_pool *pool, |
114 | struct coh901318_lli *lli, |
115 | dma_addr_t buf, unsigned int size, |
116 | dma_addr_t dev_addr, u32 ctrl_chained, u32 ctrl_last, |
117 | enum dma_transfer_direction dir); |
118 | |
119 | /** |
120 | * coh901318_lli_fill_single() - Prepares the lli:s for dma scatter list transfer |
121 | * @pool: pool handle |
122 | * @lli: allocated lli |
123 | * @sg: scatter gather list |
124 | * @nents: number of entries in sg |
125 | * @dev_addr: address of periphal |
126 | * @ctrl_chained: ctrl for chained lli |
127 | * @ctrl: ctrl of middle lli |
128 | * @ctrl_last: ctrl for the last lli |
129 | * @dir: direction of transfer (to or from device) |
130 | * @ctrl_irq_mask: ctrl mask for CPU interrupt |
131 | * returns number of CPU interrupts for the lli, negative on error. |
132 | */ |
133 | int |
134 | coh901318_lli_fill_sg(struct coh901318_pool *pool, |
135 | struct coh901318_lli *lli, |
136 | struct scatterlist *sg, unsigned int nents, |
137 | dma_addr_t dev_addr, u32 ctrl_chained, |
138 | u32 ctrl, u32 ctrl_last, |
139 | enum dma_transfer_direction dir, u32 ctrl_irq_mask); |
140 | |
141 | #endif /* COH901318_H */ |
142 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9