1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * Line 6 Linux USB driver |
4 | * |
5 | * Copyright (C) 2004-2010 Markus Grabner (grabner@icg.tugraz.at) |
6 | */ |
7 | |
8 | #ifndef MIDI_H |
9 | #define MIDI_H |
10 | |
11 | #include <sound/rawmidi.h> |
12 | |
13 | #include "midibuf.h" |
14 | |
15 | #define MIDI_BUFFER_SIZE 1024 |
16 | |
17 | struct snd_line6_midi { |
18 | /* Pointer back to the Line 6 driver data structure */ |
19 | struct usb_line6 *line6; |
20 | |
21 | /* MIDI substream for receiving (or NULL if not active) */ |
22 | struct snd_rawmidi_substream *substream_receive; |
23 | |
24 | /* MIDI substream for transmitting (or NULL if not active) */ |
25 | struct snd_rawmidi_substream *substream_transmit; |
26 | |
27 | /* Number of currently active MIDI send URBs */ |
28 | int num_active_send_urbs; |
29 | |
30 | /* Spin lock to protect MIDI buffer handling */ |
31 | spinlock_t lock; |
32 | |
33 | /* Wait queue for MIDI transmission */ |
34 | wait_queue_head_t send_wait; |
35 | |
36 | /* Buffer for incoming MIDI stream */ |
37 | struct midi_buffer midibuf_in; |
38 | |
39 | /* Buffer for outgoing MIDI stream */ |
40 | struct midi_buffer midibuf_out; |
41 | }; |
42 | |
43 | extern int line6_init_midi(struct usb_line6 *line6); |
44 | extern void line6_midi_receive(struct usb_line6 *line6, unsigned char *data, |
45 | int length); |
46 | |
47 | #endif |
48 | |