Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
async_tx.h
Go to the documentation of this file.
1
/*
2
* Copyright © 2006, Intel Corporation.
3
*
4
* This program is free software; you can redistribute it and/or modify it
5
* under the terms and conditions of the GNU General Public License,
6
* version 2, as published by the Free Software Foundation.
7
*
8
* This program is distributed in the hope it will be useful, but WITHOUT
9
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
11
* more details.
12
*
13
* You should have received a copy of the GNU General Public License along with
14
* this program; if not, write to the Free Software Foundation, Inc.,
15
* 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
16
*
17
*/
18
#ifndef _ASYNC_TX_H_
19
#define _ASYNC_TX_H_
20
#include <
linux/dmaengine.h
>
21
#include <
linux/spinlock.h
>
22
#include <
linux/interrupt.h
>
23
24
/* on architectures without dma-mapping capabilities we need to ensure
25
* that the asynchronous path compiles away
26
*/
27
#ifdef CONFIG_HAS_DMA
28
#define __async_inline
29
#else
30
#define __async_inline __always_inline
31
#endif
32
42
struct
dma_chan_ref
{
43
struct
dma_chan
*
chan
;
44
struct
list_head
node
;
45
struct
rcu_head
rcu
;
46
atomic_t
count
;
47
};
48
64
enum
async_tx_flags
{
65
ASYNC_TX_XOR_ZERO_DST
= (1 << 0),
66
ASYNC_TX_XOR_DROP_DST
= (1 << 1),
67
ASYNC_TX_ACK
= (1 << 2),
68
ASYNC_TX_FENCE
= (1 << 3),
69
};
70
79
struct
async_submit_ctl
{
80
enum
async_tx_flags
flags
;
81
struct
dma_async_tx_descriptor
*
depend_tx
;
82
dma_async_tx_callback
cb_fn
;
83
void
*
cb_param
;
84
void
*
scribble
;
85
};
86
87
#ifdef CONFIG_DMA_ENGINE
88
#define async_tx_issue_pending_all dma_issue_pending_all
89
98
static
inline
void
async_tx_issue_pending(
struct
dma_async_tx_descriptor
*
tx
)
99
{
100
if
(
likely
(tx)) {
101
struct
dma_chan
*
chan
= tx->
chan
;
102
struct
dma_device
*
dma
= chan->
device
;
103
104
dma->
device_issue_pending
(chan);
105
}
106
}
107
#ifdef CONFIG_ARCH_HAS_ASYNC_TX_FIND_CHANNEL
108
#include <
asm/async_tx.h
>
109
#else
110
#define async_tx_find_channel(dep, type, dst, dst_count, src, src_count, len) \
111
__async_tx_find_channel(dep, type)
112
struct
dma_chan
*
113
__async_tx_find_channel
(
struct
async_submit_ctl
*submit,
114
enum
dma_transaction_type
tx_type);
115
#endif
/* CONFIG_ARCH_HAS_ASYNC_TX_FIND_CHANNEL */
116
#else
117
static
inline
void
async_tx_issue_pending_all(
void
)
118
{
119
do
{ }
while
(0);
120
}
121
122
static
inline
void
async_tx_issue_pending(
struct
dma_async_tx_descriptor
*
tx
)
123
{
124
do
{ }
while
(0);
125
}
126
127
static
inline
struct
dma_chan
*
128
async_tx_find_channel
(
struct
async_submit_ctl
*submit,
129
enum
dma_transaction_type
tx_type,
struct
page
**
dst
,
130
int
dst_count,
struct
page
**
src
,
int
src_count,
131
size_t
len)
132
{
133
return
NULL
;
134
}
135
#endif
136
142
static
inline
void
143
async_tx_sync_epilog(
struct
async_submit_ctl
*submit)
144
{
145
if
(submit->
cb_fn
)
146
submit->
cb_fn
(submit->
cb_param
);
147
}
148
149
typedef
union
{
150
unsigned
long
addr
;
151
struct
page
*
page
;
152
dma_addr_t
dma
;
153
}
addr_conv_t
;
154
155
static
inline
void
156
init_async_submit(
struct
async_submit_ctl
*args,
enum
async_tx_flags
flags
,
157
struct
dma_async_tx_descriptor
*tx,
158
dma_async_tx_callback
cb_fn,
void
*cb_param,
159
addr_conv_t
*scribble)
160
{
161
args->
flags
=
flags
;
162
args->
depend_tx
=
tx
;
163
args->
cb_fn
= cb_fn;
164
args->
cb_param
= cb_param;
165
args->
scribble
= scribble;
166
}
167
168
void
async_tx_submit
(
struct
dma_chan
*
chan
,
struct
dma_async_tx_descriptor
*tx,
169
struct
async_submit_ctl
*submit);
170
171
struct
dma_async_tx_descriptor
*
172
async_xor
(
struct
page
*
dest
,
struct
page
**src_list,
unsigned
int
offset
,
173
int
src_cnt,
size_t
len,
struct
async_submit_ctl
*submit);
174
175
struct
dma_async_tx_descriptor
*
176
async_xor_val
(
struct
page
*
dest
,
struct
page
**src_list,
unsigned
int
offset
,
177
int
src_cnt,
size_t
len,
enum
sum_check_flags
*
result
,
178
struct
async_submit_ctl
*submit);
179
180
struct
dma_async_tx_descriptor
*
181
async_memcpy
(
struct
page
*
dest
,
struct
page
*
src
,
unsigned
int
dest_offset,
182
unsigned
int
src_offset,
size_t
len,
183
struct
async_submit_ctl
*submit);
184
185
struct
dma_async_tx_descriptor
*
186
async_memset
(
struct
page
*
dest
,
int
val
,
unsigned
int
offset
,
187
size_t
len,
struct
async_submit_ctl
*submit);
188
189
struct
dma_async_tx_descriptor
*
async_trigger_callback
(
struct
async_submit_ctl
*submit);
190
191
struct
dma_async_tx_descriptor
*
192
async_gen_syndrome
(
struct
page
**blocks,
unsigned
int
offset
,
int
src_cnt,
193
size_t
len,
struct
async_submit_ctl
*submit);
194
195
struct
dma_async_tx_descriptor
*
196
async_syndrome_val
(
struct
page
**blocks,
unsigned
int
offset
,
int
src_cnt,
197
size_t
len,
enum
sum_check_flags
*pqres,
struct
page
*spare,
198
struct
async_submit_ctl
*submit);
199
200
struct
dma_async_tx_descriptor
*
201
async_raid6_2data_recov
(
int
src_num,
size_t
bytes
,
int
faila,
int
failb,
202
struct
page
**
ptrs
,
struct
async_submit_ctl
*submit);
203
204
struct
dma_async_tx_descriptor
*
205
async_raid6_datap_recov
(
int
src_num,
size_t
bytes
,
int
faila,
206
struct
page
**
ptrs
,
struct
async_submit_ctl
*submit);
207
208
void
async_tx_quiesce
(
struct
dma_async_tx_descriptor
**tx);
209
#endif
/* _ASYNC_TX_H_ */
Generated on Thu Jan 10 2013 13:13:15 for Linux Kernel by
1.8.2