ARC: export "abort" for modules
[linux/fpc-iii.git] / sound / firewire / lib.h
blobc3768cd494a5f3fe3bb9059bd8e588c73b806c86
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>
9 struct fw_unit;
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,
17 unsigned int flags);
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,
31 u8 *buf);
33 struct snd_fw_async_midi_port {
34 struct fw_device *parent;
35 struct work_struct work;
36 bool idling;
37 ktime_t next_ktime;
38 bool error;
40 u64 addr;
41 struct fw_transaction transaction;
43 u8 *buf;
44 unsigned int len;
46 struct snd_rawmidi_substream *substream;
47 snd_fw_async_midi_port_fill fill;
48 int consume_bytes;
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);
56 /**
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
61 static inline void
62 snd_fw_async_midi_port_run(struct snd_fw_async_midi_port *port,
63 struct snd_rawmidi_substream *substream)
65 if (!port->error) {
66 port->substream = substream;
67 schedule_work(&port->work);
71 /**
72 * snd_fw_async_midi_port_finish - finish the asynchronous MIDI port
73 * @port: the asynchronous MIDI port
75 static inline void
76 snd_fw_async_midi_port_finish(struct snd_fw_async_midi_port *port)
78 port->substream = NULL;
79 port->error = false;
82 #endif