Commit | Line | Data |
---|---|---|
31ef9134 CL |
1 | #ifndef SOUND_FIREWIRE_LIB_H_INCLUDED |
2 | #define SOUND_FIREWIRE_LIB_H_INCLUDED | |
3 | ||
4 | #include <linux/firewire-constants.h> | |
5 | #include <linux/types.h> | |
585d7cba TS |
6 | #include <linux/sched.h> |
7 | #include <sound/rawmidi.h> | |
31ef9134 CL |
8 | |
9 | struct fw_unit; | |
10 | ||
1b70485f CL |
11 | #define FW_GENERATION_MASK 0x00ff |
12 | #define FW_FIXED_GENERATION 0x0100 | |
13 | #define FW_QUIET 0x0200 | |
14 | ||
31ef9134 | 15 | int snd_fw_transaction(struct fw_unit *unit, int tcode, |
1b70485f CL |
16 | u64 offset, void *buffer, size_t length, |
17 | unsigned int flags); | |
31ef9134 CL |
18 | |
19 | /* returns true if retrying the transaction would not make sense */ | |
20 | static inline bool rcode_is_permanent_error(int rcode) | |
21 | { | |
22 | return rcode == RCODE_TYPE_ERROR || rcode == RCODE_ADDRESS_ERROR; | |
23 | } | |
24 | ||
585d7cba TS |
25 | struct snd_fw_async_midi_port; |
26 | typedef int (*snd_fw_async_midi_port_fill)( | |
27 | struct snd_rawmidi_substream *substream, | |
28 | u8 *buf); | |
29 | ||
30 | struct snd_fw_async_midi_port { | |
31 | struct fw_device *parent; | |
32 | struct work_struct work; | |
d3ef9cb9 | 33 | bool idling; |
585d7cba TS |
34 | |
35 | u64 addr; | |
36 | struct fw_transaction transaction; | |
37 | ||
38 | u8 *buf; | |
39 | unsigned int len; | |
40 | ||
41 | struct snd_rawmidi_substream *substream; | |
42 | snd_fw_async_midi_port_fill fill; | |
43 | unsigned int consume_bytes; | |
44 | }; | |
45 | ||
46 | int snd_fw_async_midi_port_init(struct snd_fw_async_midi_port *port, | |
47 | struct fw_unit *unit, u64 addr, unsigned int len, | |
48 | snd_fw_async_midi_port_fill fill); | |
49 | void snd_fw_async_midi_port_destroy(struct snd_fw_async_midi_port *port); | |
50 | ||
51 | /** | |
52 | * snd_fw_async_midi_port_run - run transactions for the async MIDI port | |
53 | * @port: the asynchronous MIDI port | |
54 | * @substream: the MIDI substream | |
55 | */ | |
56 | static inline void | |
57 | snd_fw_async_midi_port_run(struct snd_fw_async_midi_port *port, | |
58 | struct snd_rawmidi_substream *substream) | |
59 | { | |
60 | port->substream = substream; | |
61 | schedule_work(&port->work); | |
62 | } | |
63 | ||
64 | /** | |
65 | * snd_fw_async_midi_port_finish - finish the asynchronous MIDI port | |
66 | * @port: the asynchronous MIDI port | |
67 | */ | |
68 | static inline void | |
69 | snd_fw_async_midi_port_finish(struct snd_fw_async_midi_port *port) | |
70 | { | |
71 | port->substream = NULL; | |
72 | } | |
73 | ||
31ef9134 | 74 | #endif |