ALSA: firewire-lib: schedule work again when MIDI substream has rest of MIDI messages
[deliverable/linux.git] / sound / firewire / lib.h
CommitLineData
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
9struct fw_unit;
10
1b70485f
CL
11#define FW_GENERATION_MASK 0x00ff
12#define FW_FIXED_GENERATION 0x0100
13#define FW_QUIET 0x0200
14
31ef9134 15int 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 */
20static inline bool rcode_is_permanent_error(int rcode)
21{
22 return rcode == RCODE_TYPE_ERROR || rcode == RCODE_ADDRESS_ERROR;
23}
24
585d7cba
TS
25struct snd_fw_async_midi_port;
26typedef int (*snd_fw_async_midi_port_fill)(
27 struct snd_rawmidi_substream *substream,
28 u8 *buf);
29
30struct 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
46int 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);
49void 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 */
56static inline void
57snd_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 */
68static inline void
69snd_fw_async_midi_port_finish(struct snd_fw_async_midi_port *port)
70{
71 port->substream = NULL;
72}
73
31ef9134 74#endif
This page took 1.23468 seconds and 5 git commands to generate.