xref: /openbmc/linux/sound/usb/line6/midi.h (revision cddbd4f17078530b4914a42f6d7f3e543b5fad0e)
161864d84STakashi Iwai /*
2c078a4aaSChris Rorvick  * Line 6 Linux USB driver
361864d84STakashi Iwai  *
461864d84STakashi Iwai  * Copyright (C) 2004-2010 Markus Grabner (grabner@icg.tugraz.at)
561864d84STakashi Iwai  *
661864d84STakashi Iwai  *	This program is free software; you can redistribute it and/or
761864d84STakashi Iwai  *	modify it under the terms of the GNU General Public License as
861864d84STakashi Iwai  *	published by the Free Software Foundation, version 2.
961864d84STakashi Iwai  *
1061864d84STakashi Iwai  */
1161864d84STakashi Iwai 
1261864d84STakashi Iwai #ifndef MIDI_H
1361864d84STakashi Iwai #define MIDI_H
1461864d84STakashi Iwai 
1561864d84STakashi Iwai #include <sound/rawmidi.h>
1661864d84STakashi Iwai 
1761864d84STakashi Iwai #include "midibuf.h"
1861864d84STakashi Iwai 
1961864d84STakashi Iwai #define MIDI_BUFFER_SIZE 1024
2061864d84STakashi Iwai 
2161864d84STakashi Iwai struct snd_line6_midi {
22*cddbd4f1STakashi Iwai 	/* Pointer back to the Line 6 driver data structure */
2361864d84STakashi Iwai 	struct usb_line6 *line6;
2461864d84STakashi Iwai 
25*cddbd4f1STakashi Iwai 	/* MIDI substream for receiving (or NULL if not active) */
2661864d84STakashi Iwai 	struct snd_rawmidi_substream *substream_receive;
2761864d84STakashi Iwai 
28*cddbd4f1STakashi Iwai 	/* MIDI substream for transmitting (or NULL if not active) */
2961864d84STakashi Iwai 	struct snd_rawmidi_substream *substream_transmit;
3061864d84STakashi Iwai 
31*cddbd4f1STakashi Iwai 	/* Number of currently active MIDI send URBs */
3261864d84STakashi Iwai 	int num_active_send_urbs;
3361864d84STakashi Iwai 
34*cddbd4f1STakashi Iwai 	/* Spin lock to protect MIDI buffer handling */
35bc518ba4STakashi Iwai 	spinlock_t lock;
3661864d84STakashi Iwai 
37*cddbd4f1STakashi Iwai 	/* Wait queue for MIDI transmission */
3861864d84STakashi Iwai 	wait_queue_head_t send_wait;
3961864d84STakashi Iwai 
40*cddbd4f1STakashi Iwai 	/* Buffer for incoming MIDI stream */
4161864d84STakashi Iwai 	struct midi_buffer midibuf_in;
4261864d84STakashi Iwai 
43*cddbd4f1STakashi Iwai 	/* Buffer for outgoing MIDI stream */
4461864d84STakashi Iwai 	struct midi_buffer midibuf_out;
4561864d84STakashi Iwai };
4661864d84STakashi Iwai 
4761864d84STakashi Iwai extern int line6_init_midi(struct usb_line6 *line6);
4861864d84STakashi Iwai extern void line6_midi_receive(struct usb_line6 *line6, unsigned char *data,
4961864d84STakashi Iwai 			       int length);
5061864d84STakashi Iwai 
5161864d84STakashi Iwai #endif
52