1 #ifndef SOUND_FIREWIRE_LIB_H_INCLUDED
2 #define SOUND_FIREWIRE_LIB_H_INCLUDED
4 #include <linux/firewire-constants.h>
5 #include <linux/types.h>
6 #include <linux/sched.h>
7 #include <sound/rawmidi.h>
11 #define FW_GENERATION_MASK 0x00ff
12 #define FW_FIXED_GENERATION 0x0100
13 #define FW_QUIET 0x0200
15 int snd_fw_transaction(struct fw_unit
*unit
, int tcode
,
16 u64 offset
, void *buffer
, size_t length
,
19 /* returns true if retrying the transaction would not make sense */
20 static inline bool rcode_is_permanent_error(int rcode
)
22 return rcode
== RCODE_TYPE_ERROR
|| rcode
== RCODE_ADDRESS_ERROR
;
25 void snd_fw_schedule_registration(struct fw_unit
*unit
,
26 struct delayed_work
*dwork
);
28 struct snd_fw_async_midi_port
;
29 typedef int (*snd_fw_async_midi_port_fill
)(
30 struct snd_rawmidi_substream
*substream
,
33 struct snd_fw_async_midi_port
{
34 struct fw_device
*parent
;
35 struct work_struct work
;
41 struct fw_transaction transaction
;
46 struct snd_rawmidi_substream
*substream
;
47 snd_fw_async_midi_port_fill fill
;
51 int snd_fw_async_midi_port_init(struct snd_fw_async_midi_port
*port
,
52 struct fw_unit
*unit
, u64 addr
, unsigned int len
,
53 snd_fw_async_midi_port_fill fill
);
54 void snd_fw_async_midi_port_destroy(struct snd_fw_async_midi_port
*port
);
57 * snd_fw_async_midi_port_run - run transactions for the async MIDI port
58 * @port: the asynchronous MIDI port
59 * @substream: the MIDI substream
62 snd_fw_async_midi_port_run(struct snd_fw_async_midi_port
*port
,
63 struct snd_rawmidi_substream
*substream
)
66 port
->substream
= substream
;
67 schedule_work(&port
->work
);
72 * snd_fw_async_midi_port_finish - finish the asynchronous MIDI port
73 * @port: the asynchronous MIDI port
76 snd_fw_async_midi_port_finish(struct snd_fw_async_midi_port
*port
)
78 port
->substream
= NULL
;