Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/dma/coh901318_lli.h
15109 views
1
/*
2
* driver/dma/coh901318_lli.h
3
*
4
* Copyright (C) 2007-2009 ST-Ericsson
5
* License terms: GNU General Public License (GPL) version 2
6
* Support functions for handling lli for coh901318
7
* Author: Per Friden <[email protected]>
8
*/
9
10
#ifndef COH901318_LLI_H
11
#define COH901318_LLI_H
12
13
#include <mach/coh901318.h>
14
15
struct device;
16
17
struct coh901318_pool {
18
spinlock_t lock;
19
struct dma_pool *dmapool;
20
struct device *dev;
21
22
#ifdef CONFIG_DEBUG_FS
23
int debugfs_pool_counter;
24
#endif
25
};
26
27
struct device;
28
/**
29
* coh901318_pool_create() - Creates an dma pool for lli:s
30
* @pool: pool handle
31
* @dev: dma device
32
* @lli_nbr: number of lli:s in the pool
33
* @algin: address alignemtn of lli:s
34
* returns 0 on success otherwise none zero
35
*/
36
int coh901318_pool_create(struct coh901318_pool *pool,
37
struct device *dev,
38
size_t lli_nbr, size_t align);
39
40
/**
41
* coh901318_pool_destroy() - Destroys the dma pool
42
* @pool: pool handle
43
* returns 0 on success otherwise none zero
44
*/
45
int coh901318_pool_destroy(struct coh901318_pool *pool);
46
47
/**
48
* coh901318_lli_alloc() - Allocates a linked list
49
*
50
* @pool: pool handle
51
* @len: length to list
52
* return: none NULL if success otherwise NULL
53
*/
54
struct coh901318_lli *
55
coh901318_lli_alloc(struct coh901318_pool *pool,
56
unsigned int len);
57
58
/**
59
* coh901318_lli_free() - Returns the linked list items to the pool
60
* @pool: pool handle
61
* @lli: reference to lli pointer to be freed
62
*/
63
void coh901318_lli_free(struct coh901318_pool *pool,
64
struct coh901318_lli **lli);
65
66
/**
67
* coh901318_lli_fill_memcpy() - Prepares the lli:s for dma memcpy
68
* @pool: pool handle
69
* @lli: allocated lli
70
* @src: src address
71
* @size: transfer size
72
* @dst: destination address
73
* @ctrl_chained: ctrl for chained lli
74
* @ctrl_last: ctrl for the last lli
75
* returns number of CPU interrupts for the lli, negative on error.
76
*/
77
int
78
coh901318_lli_fill_memcpy(struct coh901318_pool *pool,
79
struct coh901318_lli *lli,
80
dma_addr_t src, unsigned int size,
81
dma_addr_t dst, u32 ctrl_chained, u32 ctrl_last);
82
83
/**
84
* coh901318_lli_fill_single() - Prepares the lli:s for dma single transfer
85
* @pool: pool handle
86
* @lli: allocated lli
87
* @buf: transfer buffer
88
* @size: transfer size
89
* @dev_addr: address of periphal
90
* @ctrl_chained: ctrl for chained lli
91
* @ctrl_last: ctrl for the last lli
92
* @dir: direction of transfer (to or from device)
93
* returns number of CPU interrupts for the lli, negative on error.
94
*/
95
int
96
coh901318_lli_fill_single(struct coh901318_pool *pool,
97
struct coh901318_lli *lli,
98
dma_addr_t buf, unsigned int size,
99
dma_addr_t dev_addr, u32 ctrl_chained, u32 ctrl_last,
100
enum dma_data_direction dir);
101
102
/**
103
* coh901318_lli_fill_single() - Prepares the lli:s for dma scatter list transfer
104
* @pool: pool handle
105
* @lli: allocated lli
106
* @sg: scatter gather list
107
* @nents: number of entries in sg
108
* @dev_addr: address of periphal
109
* @ctrl_chained: ctrl for chained lli
110
* @ctrl: ctrl of middle lli
111
* @ctrl_last: ctrl for the last lli
112
* @dir: direction of transfer (to or from device)
113
* @ctrl_irq_mask: ctrl mask for CPU interrupt
114
* returns number of CPU interrupts for the lli, negative on error.
115
*/
116
int
117
coh901318_lli_fill_sg(struct coh901318_pool *pool,
118
struct coh901318_lli *lli,
119
struct scatterlist *sg, unsigned int nents,
120
dma_addr_t dev_addr, u32 ctrl_chained,
121
u32 ctrl, u32 ctrl_last,
122
enum dma_data_direction dir, u32 ctrl_irq_mask);
123
124
#endif /* COH901318_LLI_H */
125
126