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 { 2261864d84STakashi Iwai /** 2361864d84STakashi Iwai Pointer back to the Line 6 driver data structure. 2461864d84STakashi Iwai */ 2561864d84STakashi Iwai struct usb_line6 *line6; 2661864d84STakashi Iwai 2761864d84STakashi Iwai /** 2861864d84STakashi Iwai MIDI substream for receiving (or NULL if not active). 2961864d84STakashi Iwai */ 3061864d84STakashi Iwai struct snd_rawmidi_substream *substream_receive; 3161864d84STakashi Iwai 3261864d84STakashi Iwai /** 3361864d84STakashi Iwai MIDI substream for transmitting (or NULL if not active). 3461864d84STakashi Iwai */ 3561864d84STakashi Iwai struct snd_rawmidi_substream *substream_transmit; 3661864d84STakashi Iwai 3761864d84STakashi Iwai /** 3861864d84STakashi Iwai Number of currently active MIDI send URBs. 3961864d84STakashi Iwai */ 4061864d84STakashi Iwai int num_active_send_urbs; 4161864d84STakashi Iwai 4261864d84STakashi Iwai /** 4361864d84STakashi Iwai Spin lock to protect MIDI buffer handling. 4461864d84STakashi Iwai */ 45*bc518ba4STakashi Iwai spinlock_t lock; 4661864d84STakashi Iwai 4761864d84STakashi Iwai /** 4861864d84STakashi Iwai Wait queue for MIDI transmission. 4961864d84STakashi Iwai */ 5061864d84STakashi Iwai wait_queue_head_t send_wait; 5161864d84STakashi Iwai 5261864d84STakashi Iwai /** 5361864d84STakashi Iwai Buffer for incoming MIDI stream. 5461864d84STakashi Iwai */ 5561864d84STakashi Iwai struct midi_buffer midibuf_in; 5661864d84STakashi Iwai 5761864d84STakashi Iwai /** 5861864d84STakashi Iwai Buffer for outgoing MIDI stream. 5961864d84STakashi Iwai */ 6061864d84STakashi Iwai struct midi_buffer midibuf_out; 6161864d84STakashi Iwai }; 6261864d84STakashi Iwai 6361864d84STakashi Iwai extern int line6_init_midi(struct usb_line6 *line6); 6461864d84STakashi Iwai extern void line6_midi_receive(struct usb_line6 *line6, unsigned char *data, 6561864d84STakashi Iwai int length); 6661864d84STakashi Iwai 6761864d84STakashi Iwai #endif 68