1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Line 6 Linux USB driver 4 * 5 * Copyright (C) 2004-2010 Markus Grabner (line6@grabner-graz.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