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
sound
firewire
lib.c
Go to the documentation of this file.
1
/*
2
* miscellaneous helper functions
3
*
4
* Copyright (c) Clemens Ladisch <
[email protected]
>
5
* Licensed under the terms of the GNU General Public License, version 2.
6
*/
7
8
#include <
linux/delay.h
>
9
#include <linux/device.h>
10
#include <
linux/firewire.h
>
11
#include <linux/module.h>
12
#include "
lib.h
"
13
14
#define ERROR_RETRY_DELAY_MS 5
15
29
int
snd_fw_transaction
(
struct
fw_unit
*
unit
,
int
tcode,
30
u64
offset
,
void
*
buffer
,
size_t
length
)
31
{
32
struct
fw_device
*
device
= fw_parent_device(unit);
33
int
generation
, rcode, tries = 0;
34
35
for
(;;) {
36
generation = device->
generation
;
37
smp_rmb
();
/* node_id vs. generation */
38
rcode =
fw_run_transaction
(device->
card
, tcode,
39
device->
node_id
, generation,
40
device->
max_speed
, offset,
41
buffer, length);
42
43
if
(rcode ==
RCODE_COMPLETE
)
44
return
0;
45
46
if
(rcode_is_permanent_error(rcode) || ++tries >= 3) {
47
dev_err
(&unit->
device
,
"transaction failed: %s\n"
,
48
fw_rcode_string
(rcode));
49
return
-
EIO
;
50
}
51
52
msleep
(
ERROR_RETRY_DELAY_MS
);
53
}
54
}
55
EXPORT_SYMBOL
(
snd_fw_transaction
);
56
57
MODULE_DESCRIPTION
(
"FireWire audio helper functions"
);
58
MODULE_AUTHOR
(
"Clemens Ladisch <
[email protected]
>"
);
59
MODULE_LICENSE
(
"GPL v2"
);
Generated on Thu Jan 10 2013 14:11:44 for Linux Kernel by
1.8.2