1/* 2 * usbmidi.c - ALSA USB MIDI driver 3 * 4 * Copyright (c) 2002-2009 Clemens Ladisch 5 * All rights reserved. 6 * 7 * Based on the OSS usb-midi driver by NAGANO Daisuke, 8 * NetBSD's umidi driver by Takuya SHIOZAKI, 9 * the "USB Device Class Definition for MIDI Devices" by Roland 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions, and the following disclaimer, 16 * without modification. 17 * 2. The name of the author may not be used to endorse or promote products 18 * derived from this software without specific prior written permission. 19 * 20 * Alternatively, this software may be distributed and/or modified under the 21 * terms of the GNU General Public License as published by the Free Software 22 * Foundation; either version 2 of the License, or (at your option) any later 23 * version. 24 * 25 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 26 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 28 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35 * SUCH DAMAGE. 36 */ 37 38#include <linux/kernel.h> 39#include <linux/types.h> 40#include <linux/bitops.h> 41#include <linux/interrupt.h> 42#include <linux/spinlock.h> 43#include <linux/string.h> 44#include <linux/init.h> 45#include <linux/slab.h> 46#include <linux/timer.h> 47#include <linux/usb.h> 48#include <linux/wait.h> 49#include <linux/usb/audio.h> 50 51#include <sound/core.h> 52#include <sound/control.h> 53#include <sound/rawmidi.h> 54#include <sound/asequencer.h> 55#include "usbaudio.h" 56#include "midi.h" 57#include "power.h" 58#include "helper.h" 59 60/* 61 * define this to log all USB packets 62 */ 63/* #define DUMP_PACKETS */ 64 65/* 66 * how long to wait after some USB errors, so that khubd can disconnect() us 67 * without too many spurious errors 68 */ 69#define ERROR_DELAY_JIFFIES (HZ / 10) 70 71#define OUTPUT_URBS 7 72#define INPUT_URBS 7 73 74 75MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>"); 76MODULE_DESCRIPTION("USB Audio/MIDI helper module"); 77MODULE_LICENSE("Dual BSD/GPL"); 78 79 80struct usb_ms_header_descriptor { 81 __u8 bLength; 82 __u8 bDescriptorType; 83 __u8 bDescriptorSubtype; 84 __u8 bcdMSC[2]; 85 __le16 wTotalLength; 86} __attribute__ ((packed)); 87 88struct usb_ms_endpoint_descriptor { 89 __u8 bLength; 90 __u8 bDescriptorType; 91 __u8 bDescriptorSubtype; 92 __u8 bNumEmbMIDIJack; 93 __u8 baAssocJackID[0]; 94} __attribute__ ((packed)); 95 96struct snd_usb_midi_in_endpoint; 97struct snd_usb_midi_out_endpoint; 98struct snd_usb_midi_endpoint; 99 100struct usb_protocol_ops { 101 void (*input)(struct snd_usb_midi_in_endpoint*, uint8_t*, int); 102 void (*output)(struct snd_usb_midi_out_endpoint *ep, struct urb *urb); 103 void (*output_packet)(struct urb*, uint8_t, uint8_t, uint8_t, uint8_t); 104 void (*init_out_endpoint)(struct snd_usb_midi_out_endpoint*); 105 void (*finish_out_endpoint)(struct snd_usb_midi_out_endpoint*); 106}; 107 108struct snd_usb_midi { 109 struct usb_device *dev; 110 struct snd_card *card; 111 struct usb_interface *iface; 112 const struct snd_usb_audio_quirk *quirk; 113 struct snd_rawmidi *rmidi; 114 struct usb_protocol_ops* usb_protocol_ops; 115 struct list_head list; 116 struct timer_list error_timer; 117 spinlock_t disc_lock; 118 struct mutex mutex; 119 u32 usb_id; 120 int next_midi_device; 121 122 struct snd_usb_midi_endpoint { 123 struct snd_usb_midi_out_endpoint *out; 124 struct snd_usb_midi_in_endpoint *in; 125 } endpoints[MIDI_MAX_ENDPOINTS]; 126 unsigned long input_triggered; 127 unsigned int opened; 128 unsigned char disconnected; 129 130 struct snd_kcontrol *roland_load_ctl; 131}; 132 133struct snd_usb_midi_out_endpoint { 134 struct snd_usb_midi* umidi; 135 struct out_urb_context { 136 struct urb *urb; 137 struct snd_usb_midi_out_endpoint *ep; 138 } urbs[OUTPUT_URBS]; 139 unsigned int active_urbs; 140 unsigned int drain_urbs; 141 int max_transfer; /* size of urb buffer */ 142 struct tasklet_struct tasklet; 143 unsigned int next_urb; 144 spinlock_t buffer_lock; 145 146 struct usbmidi_out_port { 147 struct snd_usb_midi_out_endpoint* ep; 148 struct snd_rawmidi_substream *substream; 149 int active; 150 uint8_t cable; /* cable number << 4 */ 151 uint8_t state; 152#define STATE_UNKNOWN 0 153#define STATE_1PARAM 1 154#define STATE_2PARAM_1 2 155#define STATE_2PARAM_2 3 156#define STATE_SYSEX_0 4 157#define STATE_SYSEX_1 5 158#define STATE_SYSEX_2 6 159 uint8_t data[2]; 160 } ports[0x10]; 161 int current_port; 162 163 wait_queue_head_t drain_wait; 164}; 165 166struct snd_usb_midi_in_endpoint { 167 struct snd_usb_midi* umidi; 168 struct urb* urbs[INPUT_URBS]; 169 struct usbmidi_in_port { 170 struct snd_rawmidi_substream *substream; 171 u8 running_status_length; 172 } ports[0x10]; 173 u8 seen_f5; 174 u8 error_resubmit; 175 int current_port; 176}; 177 178static void snd_usbmidi_do_output(struct snd_usb_midi_out_endpoint* ep); 179 180static const uint8_t snd_usbmidi_cin_length[] = { 181 0, 0, 2, 3, 3, 1, 2, 3, 3, 3, 3, 3, 2, 2, 3, 1 182}; 183 184/* 185 * Submits the URB, with error handling. 186 */ 187static int snd_usbmidi_submit_urb(struct urb* urb, gfp_t flags) 188{ 189 int err = usb_submit_urb(urb, flags); 190 if (err < 0 && err != -ENODEV) 191 snd_printk(KERN_ERR "usb_submit_urb: %d\n", err); 192 return err; 193} 194 195/* 196 * Error handling for URB completion functions. 197 */ 198static int snd_usbmidi_urb_error(int status) 199{ 200 switch (status) { 201 /* manually unlinked, or device gone */ 202 case -ENOENT: 203 case -ECONNRESET: 204 case -ESHUTDOWN: 205 case -ENODEV: 206 return -ENODEV; 207 /* errors that might occur during unplugging */ 208 case -EPROTO: 209 case -ETIME: 210 case -EILSEQ: 211 return -EIO; 212 default: 213 snd_printk(KERN_ERR "urb status %d\n", status); 214 return 0; /* continue */ 215 } 216} 217 218/* 219 * Receives a chunk of MIDI data. 220 */ 221static void snd_usbmidi_input_data(struct snd_usb_midi_in_endpoint* ep, int portidx, 222 uint8_t* data, int length) 223{ 224 struct usbmidi_in_port* port = &ep->ports[portidx]; 225 226 if (!port->substream) { 227 snd_printd("unexpected port %d!\n", portidx); 228 return; 229 } 230 if (!test_bit(port->substream->number, &ep->umidi->input_triggered)) 231 return; 232 snd_rawmidi_receive(port->substream, data, length); 233} 234 235#ifdef DUMP_PACKETS 236static void dump_urb(const char *type, const u8 *data, int length) 237{ 238 snd_printk(KERN_DEBUG "%s packet: [", type); 239 for (; length > 0; ++data, --length) 240 printk(" %02x", *data); 241 printk(" ]\n"); 242} 243#else 244#define dump_urb(type, data, length) /* nothing */ 245#endif 246 247/* 248 * Processes the data read from the device. 249 */ 250static void snd_usbmidi_in_urb_complete(struct urb* urb) 251{ 252 struct snd_usb_midi_in_endpoint* ep = urb->context; 253 254 if (urb->status == 0) { 255 dump_urb("received", urb->transfer_buffer, urb->actual_length); 256 ep->umidi->usb_protocol_ops->input(ep, urb->transfer_buffer, 257 urb->actual_length); 258 } else { 259 int err = snd_usbmidi_urb_error(urb->status); 260 if (err < 0) { 261 if (err != -ENODEV) { 262 ep->error_resubmit = 1; 263 mod_timer(&ep->umidi->error_timer, 264 jiffies + ERROR_DELAY_JIFFIES); 265 } 266 return; 267 } 268 } 269 270 urb->dev = ep->umidi->dev; 271 snd_usbmidi_submit_urb(urb, GFP_ATOMIC); 272} 273 274static void snd_usbmidi_out_urb_complete(struct urb* urb) 275{ 276 struct out_urb_context *context = urb->context; 277 struct snd_usb_midi_out_endpoint* ep = context->ep; 278 unsigned int urb_index; 279 280 spin_lock(&ep->buffer_lock); 281 urb_index = context - ep->urbs; 282 ep->active_urbs &= ~(1 << urb_index); 283 if (unlikely(ep->drain_urbs)) { 284 ep->drain_urbs &= ~(1 << urb_index); 285 wake_up(&ep->drain_wait); 286 } 287 spin_unlock(&ep->buffer_lock); 288 if (urb->status < 0) { 289 int err = snd_usbmidi_urb_error(urb->status); 290 if (err < 0) { 291 if (err != -ENODEV) 292 mod_timer(&ep->umidi->error_timer, 293 jiffies + ERROR_DELAY_JIFFIES); 294 return; 295 } 296 } 297 snd_usbmidi_do_output(ep); 298} 299 300/* 301 * This is called when some data should be transferred to the device 302 * (from one or more substreams). 303 */ 304static void snd_usbmidi_do_output(struct snd_usb_midi_out_endpoint* ep) 305{ 306 unsigned int urb_index; 307 struct urb* urb; 308 unsigned long flags; 309 310 spin_lock_irqsave(&ep->buffer_lock, flags); 311 if (ep->umidi->disconnected) { 312 spin_unlock_irqrestore(&ep->buffer_lock, flags); 313 return; 314 } 315 316 urb_index = ep->next_urb; 317 for (;;) { 318 if (!(ep->active_urbs & (1 << urb_index))) { 319 urb = ep->urbs[urb_index].urb; 320 urb->transfer_buffer_length = 0; 321 ep->umidi->usb_protocol_ops->output(ep, urb); 322 if (urb->transfer_buffer_length == 0) 323 break; 324 325 dump_urb("sending", urb->transfer_buffer, 326 urb->transfer_buffer_length); 327 urb->dev = ep->umidi->dev; 328 if (snd_usbmidi_submit_urb(urb, GFP_ATOMIC) < 0) 329 break; 330 ep->active_urbs |= 1 << urb_index; 331 } 332 if (++urb_index >= OUTPUT_URBS) 333 urb_index = 0; 334 if (urb_index == ep->next_urb) 335 break; 336 } 337 ep->next_urb = urb_index; 338 spin_unlock_irqrestore(&ep->buffer_lock, flags); 339} 340 341static void snd_usbmidi_out_tasklet(unsigned long data) 342{ 343 struct snd_usb_midi_out_endpoint* ep = (struct snd_usb_midi_out_endpoint *) data; 344 345 snd_usbmidi_do_output(ep); 346} 347 348/* called after transfers had been interrupted due to some USB error */ 349static void snd_usbmidi_error_timer(unsigned long data) 350{ 351 struct snd_usb_midi *umidi = (struct snd_usb_midi *)data; 352 unsigned int i, j; 353 354 spin_lock(&umidi->disc_lock); 355 if (umidi->disconnected) { 356 spin_unlock(&umidi->disc_lock); 357 return; 358 } 359 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) { 360 struct snd_usb_midi_in_endpoint *in = umidi->endpoints[i].in; 361 if (in && in->error_resubmit) { 362 in->error_resubmit = 0; 363 for (j = 0; j < INPUT_URBS; ++j) { 364 in->urbs[j]->dev = umidi->dev; 365 snd_usbmidi_submit_urb(in->urbs[j], GFP_ATOMIC); 366 } 367 } 368 if (umidi->endpoints[i].out) 369 snd_usbmidi_do_output(umidi->endpoints[i].out); 370 } 371 spin_unlock(&umidi->disc_lock); 372} 373 374/* helper function to send static data that may not DMA-able */ 375static int send_bulk_static_data(struct snd_usb_midi_out_endpoint* ep, 376 const void *data, int len) 377{ 378 int err = 0; 379 void *buf = kmemdup(data, len, GFP_KERNEL); 380 if (!buf) 381 return -ENOMEM; 382 dump_urb("sending", buf, len); 383 if (ep->urbs[0].urb) 384 err = usb_bulk_msg(ep->umidi->dev, ep->urbs[0].urb->pipe, 385 buf, len, NULL, 250); 386 kfree(buf); 387 return err; 388} 389 390/* 391 * Standard USB MIDI protocol: see the spec. 392 * Midiman protocol: like the standard protocol, but the control byte is the 393 * fourth byte in each packet, and uses length instead of CIN. 394 */ 395 396static void snd_usbmidi_standard_input(struct snd_usb_midi_in_endpoint* ep, 397 uint8_t* buffer, int buffer_length) 398{ 399 int i; 400 401 for (i = 0; i + 3 < buffer_length; i += 4) 402 if (buffer[i] != 0) { 403 int cable = buffer[i] >> 4; 404 int length = snd_usbmidi_cin_length[buffer[i] & 0x0f]; 405 snd_usbmidi_input_data(ep, cable, &buffer[i + 1], length); 406 } 407} 408 409static void snd_usbmidi_midiman_input(struct snd_usb_midi_in_endpoint* ep, 410 uint8_t* buffer, int buffer_length) 411{ 412 int i; 413 414 for (i = 0; i + 3 < buffer_length; i += 4) 415 if (buffer[i + 3] != 0) { 416 int port = buffer[i + 3] >> 4; 417 int length = buffer[i + 3] & 3; 418 snd_usbmidi_input_data(ep, port, &buffer[i], length); 419 } 420} 421 422/* 423 * Buggy M-Audio device: running status on input results in a packet that has 424 * the data bytes but not the status byte and that is marked with CIN 4. 425 */ 426static void snd_usbmidi_maudio_broken_running_status_input( 427 struct snd_usb_midi_in_endpoint* ep, 428 uint8_t* buffer, int buffer_length) 429{ 430 int i; 431 432 for (i = 0; i + 3 < buffer_length; i += 4) 433 if (buffer[i] != 0) { 434 int cable = buffer[i] >> 4; 435 u8 cin = buffer[i] & 0x0f; 436 struct usbmidi_in_port *port = &ep->ports[cable]; 437 int length; 438 439 length = snd_usbmidi_cin_length[cin]; 440 if (cin == 0xf && buffer[i + 1] >= 0xf8) 441 ; /* realtime msg: no running status change */ 442 else if (cin >= 0x8 && cin <= 0xe) 443 /* channel msg */ 444 port->running_status_length = length - 1; 445 else if (cin == 0x4 && 446 port->running_status_length != 0 && 447 buffer[i + 1] < 0x80) 448 /* CIN 4 that is not a SysEx */ 449 length = port->running_status_length; 450 else 451 /* 452 * All other msgs cannot begin running status. 453 * (A channel msg sent as two or three CIN 0xF 454 * packets could in theory, but this device 455 * doesn't use this format.) 456 */ 457 port->running_status_length = 0; 458 snd_usbmidi_input_data(ep, cable, &buffer[i + 1], length); 459 } 460} 461 462/* 463 * CME protocol: like the standard protocol, but SysEx commands are sent as a 464 * single USB packet preceded by a 0x0F byte. 465 */ 466static void snd_usbmidi_cme_input(struct snd_usb_midi_in_endpoint *ep, 467 uint8_t *buffer, int buffer_length) 468{ 469 if (buffer_length < 2 || (buffer[0] & 0x0f) != 0x0f) 470 snd_usbmidi_standard_input(ep, buffer, buffer_length); 471 else 472 snd_usbmidi_input_data(ep, buffer[0] >> 4, 473 &buffer[1], buffer_length - 1); 474} 475 476/* 477 * Adds one USB MIDI packet to the output buffer. 478 */ 479static void snd_usbmidi_output_standard_packet(struct urb* urb, uint8_t p0, 480 uint8_t p1, uint8_t p2, uint8_t p3) 481{ 482 483 uint8_t* buf = (uint8_t*)urb->transfer_buffer + urb->transfer_buffer_length; 484 buf[0] = p0; 485 buf[1] = p1; 486 buf[2] = p2; 487 buf[3] = p3; 488 urb->transfer_buffer_length += 4; 489} 490 491/* 492 * Adds one Midiman packet to the output buffer. 493 */ 494static void snd_usbmidi_output_midiman_packet(struct urb* urb, uint8_t p0, 495 uint8_t p1, uint8_t p2, uint8_t p3) 496{ 497 498 uint8_t* buf = (uint8_t*)urb->transfer_buffer + urb->transfer_buffer_length; 499 buf[0] = p1; 500 buf[1] = p2; 501 buf[2] = p3; 502 buf[3] = (p0 & 0xf0) | snd_usbmidi_cin_length[p0 & 0x0f]; 503 urb->transfer_buffer_length += 4; 504} 505 506/* 507 * Converts MIDI commands to USB MIDI packets. 508 */ 509static void snd_usbmidi_transmit_byte(struct usbmidi_out_port* port, 510 uint8_t b, struct urb* urb) 511{ 512 uint8_t p0 = port->cable; 513 void (*output_packet)(struct urb*, uint8_t, uint8_t, uint8_t, uint8_t) = 514 port->ep->umidi->usb_protocol_ops->output_packet; 515 516 if (b >= 0xf8) { 517 output_packet(urb, p0 | 0x0f, b, 0, 0); 518 } else if (b >= 0xf0) { 519 switch (b) { 520 case 0xf0: 521 port->data[0] = b; 522 port->state = STATE_SYSEX_1; 523 break; 524 case 0xf1: 525 case 0xf3: 526 port->data[0] = b; 527 port->state = STATE_1PARAM; 528 break; 529 case 0xf2: 530 port->data[0] = b; 531 port->state = STATE_2PARAM_1; 532 break; 533 case 0xf4: 534 case 0xf5: 535 port->state = STATE_UNKNOWN; 536 break; 537 case 0xf6: 538 output_packet(urb, p0 | 0x05, 0xf6, 0, 0); 539 port->state = STATE_UNKNOWN; 540 break; 541 case 0xf7: 542 switch (port->state) { 543 case STATE_SYSEX_0: 544 output_packet(urb, p0 | 0x05, 0xf7, 0, 0); 545 break; 546 case STATE_SYSEX_1: 547 output_packet(urb, p0 | 0x06, port->data[0], 0xf7, 0); 548 break; 549 case STATE_SYSEX_2: 550 output_packet(urb, p0 | 0x07, port->data[0], port->data[1], 0xf7); 551 break; 552 } 553 port->state = STATE_UNKNOWN; 554 break; 555 } 556 } else if (b >= 0x80) { 557 port->data[0] = b; 558 if (b >= 0xc0 && b <= 0xdf) 559 port->state = STATE_1PARAM; 560 else 561 port->state = STATE_2PARAM_1; 562 } else { /* b < 0x80 */ 563 switch (port->state) { 564 case STATE_1PARAM: 565 if (port->data[0] < 0xf0) { 566 p0 |= port->data[0] >> 4; 567 } else { 568 p0 |= 0x02; 569 port->state = STATE_UNKNOWN; 570 } 571 output_packet(urb, p0, port->data[0], b, 0); 572 break; 573 case STATE_2PARAM_1: 574 port->data[1] = b; 575 port->state = STATE_2PARAM_2; 576 break; 577 case STATE_2PARAM_2: 578 if (port->data[0] < 0xf0) { 579 p0 |= port->data[0] >> 4; 580 port->state = STATE_2PARAM_1; 581 } else { 582 p0 |= 0x03; 583 port->state = STATE_UNKNOWN; 584 } 585 output_packet(urb, p0, port->data[0], port->data[1], b); 586 break; 587 case STATE_SYSEX_0: 588 port->data[0] = b; 589 port->state = STATE_SYSEX_1; 590 break; 591 case STATE_SYSEX_1: 592 port->data[1] = b; 593 port->state = STATE_SYSEX_2; 594 break; 595 case STATE_SYSEX_2: 596 output_packet(urb, p0 | 0x04, port->data[0], port->data[1], b); 597 port->state = STATE_SYSEX_0; 598 break; 599 } 600 } 601} 602 603static void snd_usbmidi_standard_output(struct snd_usb_midi_out_endpoint* ep, 604 struct urb *urb) 605{ 606 int p; 607 608 /* FIXME: lower-numbered ports can starve higher-numbered ports */ 609 for (p = 0; p < 0x10; ++p) { 610 struct usbmidi_out_port* port = &ep->ports[p]; 611 if (!port->active) 612 continue; 613 while (urb->transfer_buffer_length + 3 < ep->max_transfer) { 614 uint8_t b; 615 if (snd_rawmidi_transmit(port->substream, &b, 1) != 1) { 616 port->active = 0; 617 break; 618 } 619 snd_usbmidi_transmit_byte(port, b, urb); 620 } 621 } 622} 623 624static struct usb_protocol_ops snd_usbmidi_standard_ops = { 625 .input = snd_usbmidi_standard_input, 626 .output = snd_usbmidi_standard_output, 627 .output_packet = snd_usbmidi_output_standard_packet, 628}; 629 630static struct usb_protocol_ops snd_usbmidi_midiman_ops = { 631 .input = snd_usbmidi_midiman_input, 632 .output = snd_usbmidi_standard_output, 633 .output_packet = snd_usbmidi_output_midiman_packet, 634}; 635 636static struct usb_protocol_ops snd_usbmidi_maudio_broken_running_status_ops = { 637 .input = snd_usbmidi_maudio_broken_running_status_input, 638 .output = snd_usbmidi_standard_output, 639 .output_packet = snd_usbmidi_output_standard_packet, 640}; 641 642static struct usb_protocol_ops snd_usbmidi_cme_ops = { 643 .input = snd_usbmidi_cme_input, 644 .output = snd_usbmidi_standard_output, 645 .output_packet = snd_usbmidi_output_standard_packet, 646}; 647 648/* 649 * AKAI MPD16 protocol: 650 * 651 * For control port (endpoint 1): 652 * ============================== 653 * One or more chunks consisting of first byte of (0x10 | msg_len) and then a 654 * SysEx message (msg_len=9 bytes long). 655 * 656 * For data port (endpoint 2): 657 * =========================== 658 * One or more chunks consisting of first byte of (0x20 | msg_len) and then a 659 * MIDI message (msg_len bytes long) 660 * 661 * Messages sent: Active Sense, Note On, Poly Pressure, Control Change. 662 */ 663static void snd_usbmidi_akai_input(struct snd_usb_midi_in_endpoint *ep, 664 uint8_t *buffer, int buffer_length) 665{ 666 unsigned int pos = 0; 667 unsigned int len = (unsigned int)buffer_length; 668 while (pos < len) { 669 unsigned int port = (buffer[pos] >> 4) - 1; 670 unsigned int msg_len = buffer[pos] & 0x0f; 671 pos++; 672 if (pos + msg_len <= len && port < 2) 673 snd_usbmidi_input_data(ep, 0, &buffer[pos], msg_len); 674 pos += msg_len; 675 } 676} 677 678#define MAX_AKAI_SYSEX_LEN 9 679 680static void snd_usbmidi_akai_output(struct snd_usb_midi_out_endpoint *ep, 681 struct urb *urb) 682{ 683 uint8_t *msg; 684 int pos, end, count, buf_end; 685 uint8_t tmp[MAX_AKAI_SYSEX_LEN]; 686 struct snd_rawmidi_substream *substream = ep->ports[0].substream; 687 688 if (!ep->ports[0].active) 689 return; 690 691 msg = urb->transfer_buffer + urb->transfer_buffer_length; 692 buf_end = ep->max_transfer - MAX_AKAI_SYSEX_LEN - 1; 693 694 /* only try adding more data when there's space for at least 1 SysEx */ 695 while (urb->transfer_buffer_length < buf_end) { 696 count = snd_rawmidi_transmit_peek(substream, 697 tmp, MAX_AKAI_SYSEX_LEN); 698 if (!count) { 699 ep->ports[0].active = 0; 700 return; 701 } 702 /* try to skip non-SysEx data */ 703 for (pos = 0; pos < count && tmp[pos] != 0xF0; pos++) 704 ; 705 706 if (pos > 0) { 707 snd_rawmidi_transmit_ack(substream, pos); 708 continue; 709 } 710 711 /* look for the start or end marker */ 712 for (end = 1; end < count && tmp[end] < 0xF0; end++) 713 ; 714 715 /* next SysEx started before the end of current one */ 716 if (end < count && tmp[end] == 0xF0) { 717 /* it's incomplete - drop it */ 718 snd_rawmidi_transmit_ack(substream, end); 719 continue; 720 } 721 /* SysEx complete */ 722 if (end < count && tmp[end] == 0xF7) { 723 /* queue it, ack it, and get the next one */ 724 count = end + 1; 725 msg[0] = 0x10 | count; 726 memcpy(&msg[1], tmp, count); 727 snd_rawmidi_transmit_ack(substream, count); 728 urb->transfer_buffer_length += count + 1; 729 msg += count + 1; 730 continue; 731 } 732 /* less than 9 bytes and no end byte - wait for more */ 733 if (count < MAX_AKAI_SYSEX_LEN) { 734 ep->ports[0].active = 0; 735 return; 736 } 737 /* 9 bytes and no end marker in sight - malformed, skip it */ 738 snd_rawmidi_transmit_ack(substream, count); 739 } 740} 741 742static struct usb_protocol_ops snd_usbmidi_akai_ops = { 743 .input = snd_usbmidi_akai_input, 744 .output = snd_usbmidi_akai_output, 745}; 746 747/* 748 * Novation USB MIDI protocol: number of data bytes is in the first byte 749 * (when receiving) (+1!) or in the second byte (when sending); data begins 750 * at the third byte. 751 */ 752 753static void snd_usbmidi_novation_input(struct snd_usb_midi_in_endpoint* ep, 754 uint8_t* buffer, int buffer_length) 755{ 756 if (buffer_length < 2 || !buffer[0] || buffer_length < buffer[0] + 1) 757 return; 758 snd_usbmidi_input_data(ep, 0, &buffer[2], buffer[0] - 1); 759} 760 761static void snd_usbmidi_novation_output(struct snd_usb_midi_out_endpoint* ep, 762 struct urb *urb) 763{ 764 uint8_t* transfer_buffer; 765 int count; 766 767 if (!ep->ports[0].active) 768 return; 769 transfer_buffer = urb->transfer_buffer; 770 count = snd_rawmidi_transmit(ep->ports[0].substream, 771 &transfer_buffer[2], 772 ep->max_transfer - 2); 773 if (count < 1) { 774 ep->ports[0].active = 0; 775 return; 776 } 777 transfer_buffer[0] = 0; 778 transfer_buffer[1] = count; 779 urb->transfer_buffer_length = 2 + count; 780} 781 782static struct usb_protocol_ops snd_usbmidi_novation_ops = { 783 .input = snd_usbmidi_novation_input, 784 .output = snd_usbmidi_novation_output, 785}; 786 787/* 788 * "raw" protocol: just move raw MIDI bytes from/to the endpoint 789 */ 790 791static void snd_usbmidi_raw_input(struct snd_usb_midi_in_endpoint* ep, 792 uint8_t* buffer, int buffer_length) 793{ 794 snd_usbmidi_input_data(ep, 0, buffer, buffer_length); 795} 796 797static void snd_usbmidi_raw_output(struct snd_usb_midi_out_endpoint* ep, 798 struct urb *urb) 799{ 800 int count; 801 802 if (!ep->ports[0].active) 803 return; 804 count = snd_rawmidi_transmit(ep->ports[0].substream, 805 urb->transfer_buffer, 806 ep->max_transfer); 807 if (count < 1) { 808 ep->ports[0].active = 0; 809 return; 810 } 811 urb->transfer_buffer_length = count; 812} 813 814static struct usb_protocol_ops snd_usbmidi_raw_ops = { 815 .input = snd_usbmidi_raw_input, 816 .output = snd_usbmidi_raw_output, 817}; 818 819static void snd_usbmidi_us122l_input(struct snd_usb_midi_in_endpoint *ep, 820 uint8_t *buffer, int buffer_length) 821{ 822 if (buffer_length != 9) 823 return; 824 buffer_length = 8; 825 while (buffer_length && buffer[buffer_length - 1] == 0xFD) 826 buffer_length--; 827 if (buffer_length) 828 snd_usbmidi_input_data(ep, 0, buffer, buffer_length); 829} 830 831static void snd_usbmidi_us122l_output(struct snd_usb_midi_out_endpoint *ep, 832 struct urb *urb) 833{ 834 int count; 835 836 if (!ep->ports[0].active) 837 return; 838 switch (snd_usb_get_speed(ep->umidi->dev)) { 839 case USB_SPEED_HIGH: 840 case USB_SPEED_SUPER: 841 count = 1; 842 break; 843 default: 844 count = 2; 845 } 846 count = snd_rawmidi_transmit(ep->ports[0].substream, 847 urb->transfer_buffer, 848 count); 849 if (count < 1) { 850 ep->ports[0].active = 0; 851 return; 852 } 853 854 memset(urb->transfer_buffer + count, 0xFD, ep->max_transfer - count); 855 urb->transfer_buffer_length = ep->max_transfer; 856} 857 858static struct usb_protocol_ops snd_usbmidi_122l_ops = { 859 .input = snd_usbmidi_us122l_input, 860 .output = snd_usbmidi_us122l_output, 861}; 862 863/* 864 * Emagic USB MIDI protocol: raw MIDI with "F5 xx" port switching. 865 */ 866 867static void snd_usbmidi_emagic_init_out(struct snd_usb_midi_out_endpoint* ep) 868{ 869 static const u8 init_data[] = { 870 /* initialization magic: "get version" */ 871 0xf0, 872 0x00, 0x20, 0x31, /* Emagic */ 873 0x64, /* Unitor8 */ 874 0x0b, /* version number request */ 875 0x00, /* command version */ 876 0x00, /* EEPROM, box 0 */ 877 0xf7 878 }; 879 send_bulk_static_data(ep, init_data, sizeof(init_data)); 880 /* while we're at it, pour on more magic */ 881 send_bulk_static_data(ep, init_data, sizeof(init_data)); 882} 883 884static void snd_usbmidi_emagic_finish_out(struct snd_usb_midi_out_endpoint* ep) 885{ 886 static const u8 finish_data[] = { 887 /* switch to patch mode with last preset */ 888 0xf0, 889 0x00, 0x20, 0x31, /* Emagic */ 890 0x64, /* Unitor8 */ 891 0x10, /* patch switch command */ 892 0x00, /* command version */ 893 0x7f, /* to all boxes */ 894 0x40, /* last preset in EEPROM */ 895 0xf7 896 }; 897 send_bulk_static_data(ep, finish_data, sizeof(finish_data)); 898} 899 900static void snd_usbmidi_emagic_input(struct snd_usb_midi_in_endpoint* ep, 901 uint8_t* buffer, int buffer_length) 902{ 903 int i; 904 905 /* FF indicates end of valid data */ 906 for (i = 0; i < buffer_length; ++i) 907 if (buffer[i] == 0xff) { 908 buffer_length = i; 909 break; 910 } 911 912 /* handle F5 at end of last buffer */ 913 if (ep->seen_f5) 914 goto switch_port; 915 916 while (buffer_length > 0) { 917 /* determine size of data until next F5 */ 918 for (i = 0; i < buffer_length; ++i) 919 if (buffer[i] == 0xf5) 920 break; 921 snd_usbmidi_input_data(ep, ep->current_port, buffer, i); 922 buffer += i; 923 buffer_length -= i; 924 925 if (buffer_length <= 0) 926 break; 927 /* assert(buffer[0] == 0xf5); */ 928 ep->seen_f5 = 1; 929 ++buffer; 930 --buffer_length; 931 932 switch_port: 933 if (buffer_length <= 0) 934 break; 935 if (buffer[0] < 0x80) { 936 ep->current_port = (buffer[0] - 1) & 15; 937 ++buffer; 938 --buffer_length; 939 } 940 ep->seen_f5 = 0; 941 } 942} 943 944static void snd_usbmidi_emagic_output(struct snd_usb_midi_out_endpoint* ep, 945 struct urb *urb) 946{ 947 int port0 = ep->current_port; 948 uint8_t* buf = urb->transfer_buffer; 949 int buf_free = ep->max_transfer; 950 int length, i; 951 952 for (i = 0; i < 0x10; ++i) { 953 /* round-robin, starting at the last current port */ 954 int portnum = (port0 + i) & 15; 955 struct usbmidi_out_port* port = &ep->ports[portnum]; 956 957 if (!port->active) 958 continue; 959 if (snd_rawmidi_transmit_peek(port->substream, buf, 1) != 1) { 960 port->active = 0; 961 continue; 962 } 963 964 if (portnum != ep->current_port) { 965 if (buf_free < 2) 966 break; 967 ep->current_port = portnum; 968 buf[0] = 0xf5; 969 buf[1] = (portnum + 1) & 15; 970 buf += 2; 971 buf_free -= 2; 972 } 973 974 if (buf_free < 1) 975 break; 976 length = snd_rawmidi_transmit(port->substream, buf, buf_free); 977 if (length > 0) { 978 buf += length; 979 buf_free -= length; 980 if (buf_free < 1) 981 break; 982 } 983 } 984 if (buf_free < ep->max_transfer && buf_free > 0) { 985 *buf = 0xff; 986 --buf_free; 987 } 988 urb->transfer_buffer_length = ep->max_transfer - buf_free; 989} 990 991static struct usb_protocol_ops snd_usbmidi_emagic_ops = { 992 .input = snd_usbmidi_emagic_input, 993 .output = snd_usbmidi_emagic_output, 994 .init_out_endpoint = snd_usbmidi_emagic_init_out, 995 .finish_out_endpoint = snd_usbmidi_emagic_finish_out, 996}; 997 998 999static void update_roland_altsetting(struct snd_usb_midi* umidi) 1000{ 1001 struct usb_interface *intf; 1002 struct usb_host_interface *hostif; 1003 struct usb_interface_descriptor *intfd; 1004 int is_light_load; 1005 1006 intf = umidi->iface; 1007 is_light_load = intf->cur_altsetting != intf->altsetting; 1008 if (umidi->roland_load_ctl->private_value == is_light_load) 1009 return; 1010 hostif = &intf->altsetting[umidi->roland_load_ctl->private_value]; 1011 intfd = get_iface_desc(hostif); 1012 snd_usbmidi_input_stop(&umidi->list); 1013 usb_set_interface(umidi->dev, intfd->bInterfaceNumber, 1014 intfd->bAlternateSetting); 1015 snd_usbmidi_input_start(&umidi->list); 1016} 1017 1018static void substream_open(struct snd_rawmidi_substream *substream, int open) 1019{ 1020 struct snd_usb_midi* umidi = substream->rmidi->private_data; 1021 struct snd_kcontrol *ctl; 1022 1023 mutex_lock(&umidi->mutex); 1024 if (open) { 1025 if (umidi->opened++ == 0 && umidi->roland_load_ctl) { 1026 ctl = umidi->roland_load_ctl; 1027 ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; 1028 snd_ctl_notify(umidi->card, 1029 SNDRV_CTL_EVENT_MASK_INFO, &ctl->id); 1030 update_roland_altsetting(umidi); 1031 } 1032 } else { 1033 if (--umidi->opened == 0 && umidi->roland_load_ctl) { 1034 ctl = umidi->roland_load_ctl; 1035 ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; 1036 snd_ctl_notify(umidi->card, 1037 SNDRV_CTL_EVENT_MASK_INFO, &ctl->id); 1038 } 1039 } 1040 mutex_unlock(&umidi->mutex); 1041} 1042 1043static int snd_usbmidi_output_open(struct snd_rawmidi_substream *substream) 1044{ 1045 struct snd_usb_midi* umidi = substream->rmidi->private_data; 1046 struct usbmidi_out_port* port = NULL; 1047 int i, j; 1048 int err; 1049 1050 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) 1051 if (umidi->endpoints[i].out) 1052 for (j = 0; j < 0x10; ++j) 1053 if (umidi->endpoints[i].out->ports[j].substream == substream) { 1054 port = &umidi->endpoints[i].out->ports[j]; 1055 break; 1056 } 1057 if (!port) { 1058 snd_BUG(); 1059 return -ENXIO; 1060 } 1061 err = usb_autopm_get_interface(umidi->iface); 1062 if (err < 0) 1063 return -EIO; 1064 substream->runtime->private_data = port; 1065 port->state = STATE_UNKNOWN; 1066 substream_open(substream, 1); 1067 return 0; 1068} 1069 1070static int snd_usbmidi_output_close(struct snd_rawmidi_substream *substream) 1071{ 1072 struct snd_usb_midi* umidi = substream->rmidi->private_data; 1073 1074 substream_open(substream, 0); 1075 usb_autopm_put_interface(umidi->iface); 1076 return 0; 1077} 1078 1079static void snd_usbmidi_output_trigger(struct snd_rawmidi_substream *substream, int up) 1080{ 1081 struct usbmidi_out_port* port = (struct usbmidi_out_port*)substream->runtime->private_data; 1082 1083 port->active = up; 1084 if (up) { 1085 if (port->ep->umidi->disconnected) { 1086 /* gobble up remaining bytes to prevent wait in 1087 * snd_rawmidi_drain_output */ 1088 while (!snd_rawmidi_transmit_empty(substream)) 1089 snd_rawmidi_transmit_ack(substream, 1); 1090 return; 1091 } 1092 tasklet_schedule(&port->ep->tasklet); 1093 } 1094} 1095 1096static void snd_usbmidi_output_drain(struct snd_rawmidi_substream *substream) 1097{ 1098 struct usbmidi_out_port* port = substream->runtime->private_data; 1099 struct snd_usb_midi_out_endpoint *ep = port->ep; 1100 unsigned int drain_urbs; 1101 DEFINE_WAIT(wait); 1102 long timeout = msecs_to_jiffies(50); 1103 1104 if (ep->umidi->disconnected) 1105 return; 1106 /* 1107 * The substream buffer is empty, but some data might still be in the 1108 * currently active URBs, so we have to wait for those to complete. 1109 */ 1110 spin_lock_irq(&ep->buffer_lock); 1111 drain_urbs = ep->active_urbs; 1112 if (drain_urbs) { 1113 ep->drain_urbs |= drain_urbs; 1114 do { 1115 prepare_to_wait(&ep->drain_wait, &wait, 1116 TASK_UNINTERRUPTIBLE); 1117 spin_unlock_irq(&ep->buffer_lock); 1118 timeout = schedule_timeout(timeout); 1119 spin_lock_irq(&ep->buffer_lock); 1120 drain_urbs &= ep->drain_urbs; 1121 } while (drain_urbs && timeout); 1122 finish_wait(&ep->drain_wait, &wait); 1123 } 1124 spin_unlock_irq(&ep->buffer_lock); 1125} 1126 1127static int snd_usbmidi_input_open(struct snd_rawmidi_substream *substream) 1128{ 1129 substream_open(substream, 1); 1130 return 0; 1131} 1132 1133static int snd_usbmidi_input_close(struct snd_rawmidi_substream *substream) 1134{ 1135 substream_open(substream, 0); 1136 return 0; 1137} 1138 1139static void snd_usbmidi_input_trigger(struct snd_rawmidi_substream *substream, int up) 1140{ 1141 struct snd_usb_midi* umidi = substream->rmidi->private_data; 1142 1143 if (up) 1144 set_bit(substream->number, &umidi->input_triggered); 1145 else 1146 clear_bit(substream->number, &umidi->input_triggered); 1147} 1148 1149static struct snd_rawmidi_ops snd_usbmidi_output_ops = { 1150 .open = snd_usbmidi_output_open, 1151 .close = snd_usbmidi_output_close, 1152 .trigger = snd_usbmidi_output_trigger, 1153 .drain = snd_usbmidi_output_drain, 1154}; 1155 1156static struct snd_rawmidi_ops snd_usbmidi_input_ops = { 1157 .open = snd_usbmidi_input_open, 1158 .close = snd_usbmidi_input_close, 1159 .trigger = snd_usbmidi_input_trigger 1160}; 1161 1162static void free_urb_and_buffer(struct snd_usb_midi *umidi, struct urb *urb, 1163 unsigned int buffer_length) 1164{ 1165 usb_free_coherent(umidi->dev, buffer_length, 1166 urb->transfer_buffer, urb->transfer_dma); 1167 usb_free_urb(urb); 1168} 1169 1170/* 1171 * Frees an input endpoint. 1172 * May be called when ep hasn't been initialized completely. 1173 */ 1174static void snd_usbmidi_in_endpoint_delete(struct snd_usb_midi_in_endpoint* ep) 1175{ 1176 unsigned int i; 1177 1178 for (i = 0; i < INPUT_URBS; ++i) 1179 if (ep->urbs[i]) 1180 free_urb_and_buffer(ep->umidi, ep->urbs[i], 1181 ep->urbs[i]->transfer_buffer_length); 1182 kfree(ep); 1183} 1184 1185/* 1186 * Creates an input endpoint. 1187 */ 1188static int snd_usbmidi_in_endpoint_create(struct snd_usb_midi* umidi, 1189 struct snd_usb_midi_endpoint_info* ep_info, 1190 struct snd_usb_midi_endpoint* rep) 1191{ 1192 struct snd_usb_midi_in_endpoint* ep; 1193 void* buffer; 1194 unsigned int pipe; 1195 int length; 1196 unsigned int i; 1197 1198 rep->in = NULL; 1199 ep = kzalloc(sizeof(*ep), GFP_KERNEL); 1200 if (!ep) 1201 return -ENOMEM; 1202 ep->umidi = umidi; 1203 1204 for (i = 0; i < INPUT_URBS; ++i) { 1205 ep->urbs[i] = usb_alloc_urb(0, GFP_KERNEL); 1206 if (!ep->urbs[i]) { 1207 snd_usbmidi_in_endpoint_delete(ep); 1208 return -ENOMEM; 1209 } 1210 } 1211 if (ep_info->in_interval) 1212 pipe = usb_rcvintpipe(umidi->dev, ep_info->in_ep); 1213 else 1214 pipe = usb_rcvbulkpipe(umidi->dev, ep_info->in_ep); 1215 length = usb_maxpacket(umidi->dev, pipe, 0); 1216 for (i = 0; i < INPUT_URBS; ++i) { 1217 buffer = usb_alloc_coherent(umidi->dev, length, GFP_KERNEL, 1218 &ep->urbs[i]->transfer_dma); 1219 if (!buffer) { 1220 snd_usbmidi_in_endpoint_delete(ep); 1221 return -ENOMEM; 1222 } 1223 if (ep_info->in_interval) 1224 usb_fill_int_urb(ep->urbs[i], umidi->dev, 1225 pipe, buffer, length, 1226 snd_usbmidi_in_urb_complete, 1227 ep, ep_info->in_interval); 1228 else 1229 usb_fill_bulk_urb(ep->urbs[i], umidi->dev, 1230 pipe, buffer, length, 1231 snd_usbmidi_in_urb_complete, ep); 1232 ep->urbs[i]->transfer_flags = URB_NO_TRANSFER_DMA_MAP; 1233 } 1234 1235 rep->in = ep; 1236 return 0; 1237} 1238 1239/* 1240 * Frees an output endpoint. 1241 * May be called when ep hasn't been initialized completely. 1242 */ 1243static void snd_usbmidi_out_endpoint_clear(struct snd_usb_midi_out_endpoint *ep) 1244{ 1245 unsigned int i; 1246 1247 for (i = 0; i < OUTPUT_URBS; ++i) 1248 if (ep->urbs[i].urb) { 1249 free_urb_and_buffer(ep->umidi, ep->urbs[i].urb, 1250 ep->max_transfer); 1251 ep->urbs[i].urb = NULL; 1252 } 1253} 1254 1255static void snd_usbmidi_out_endpoint_delete(struct snd_usb_midi_out_endpoint *ep) 1256{ 1257 snd_usbmidi_out_endpoint_clear(ep); 1258 kfree(ep); 1259} 1260 1261/* 1262 * Creates an output endpoint, and initializes output ports. 1263 */ 1264static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi* umidi, 1265 struct snd_usb_midi_endpoint_info* ep_info, 1266 struct snd_usb_midi_endpoint* rep) 1267{ 1268 struct snd_usb_midi_out_endpoint* ep; 1269 unsigned int i; 1270 unsigned int pipe; 1271 void* buffer; 1272 1273 rep->out = NULL; 1274 ep = kzalloc(sizeof(*ep), GFP_KERNEL); 1275 if (!ep) 1276 return -ENOMEM; 1277 ep->umidi = umidi; 1278 1279 for (i = 0; i < OUTPUT_URBS; ++i) { 1280 ep->urbs[i].urb = usb_alloc_urb(0, GFP_KERNEL); 1281 if (!ep->urbs[i].urb) { 1282 snd_usbmidi_out_endpoint_delete(ep); 1283 return -ENOMEM; 1284 } 1285 ep->urbs[i].ep = ep; 1286 } 1287 if (ep_info->out_interval) 1288 pipe = usb_sndintpipe(umidi->dev, ep_info->out_ep); 1289 else 1290 pipe = usb_sndbulkpipe(umidi->dev, ep_info->out_ep); 1291 switch (umidi->usb_id) { 1292 default: 1293 ep->max_transfer = usb_maxpacket(umidi->dev, pipe, 1); 1294 break; 1295 /* 1296 * Various chips declare a packet size larger than 4 bytes, but 1297 * do not actually work with larger packets: 1298 */ 1299 case USB_ID(0x0a92, 0x1020): /* ESI M4U */ 1300 case USB_ID(0x1430, 0x474b): /* RedOctane GH MIDI INTERFACE */ 1301 case USB_ID(0x15ca, 0x0101): /* Textech USB Midi Cable */ 1302 case USB_ID(0x15ca, 0x1806): /* Textech USB Midi Cable */ 1303 case USB_ID(0x1a86, 0x752d): /* QinHeng CH345 "USB2.0-MIDI" */ 1304 case USB_ID(0xfc08, 0x0101): /* Unknown vendor Cable */ 1305 ep->max_transfer = 4; 1306 break; 1307 /* 1308 * Some devices only work with 9 bytes packet size: 1309 */ 1310 case USB_ID(0x0644, 0x800E): /* Tascam US-122L */ 1311 case USB_ID(0x0644, 0x800F): /* Tascam US-144 */ 1312 ep->max_transfer = 9; 1313 break; 1314 } 1315 for (i = 0; i < OUTPUT_URBS; ++i) { 1316 buffer = usb_alloc_coherent(umidi->dev, 1317 ep->max_transfer, GFP_KERNEL, 1318 &ep->urbs[i].urb->transfer_dma); 1319 if (!buffer) { 1320 snd_usbmidi_out_endpoint_delete(ep); 1321 return -ENOMEM; 1322 } 1323 if (ep_info->out_interval) 1324 usb_fill_int_urb(ep->urbs[i].urb, umidi->dev, 1325 pipe, buffer, ep->max_transfer, 1326 snd_usbmidi_out_urb_complete, 1327 &ep->urbs[i], ep_info->out_interval); 1328 else 1329 usb_fill_bulk_urb(ep->urbs[i].urb, umidi->dev, 1330 pipe, buffer, ep->max_transfer, 1331 snd_usbmidi_out_urb_complete, 1332 &ep->urbs[i]); 1333 ep->urbs[i].urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP; 1334 } 1335 1336 spin_lock_init(&ep->buffer_lock); 1337 tasklet_init(&ep->tasklet, snd_usbmidi_out_tasklet, (unsigned long)ep); 1338 init_waitqueue_head(&ep->drain_wait); 1339 1340 for (i = 0; i < 0x10; ++i) 1341 if (ep_info->out_cables & (1 << i)) { 1342 ep->ports[i].ep = ep; 1343 ep->ports[i].cable = i << 4; 1344 } 1345 1346 if (umidi->usb_protocol_ops->init_out_endpoint) 1347 umidi->usb_protocol_ops->init_out_endpoint(ep); 1348 1349 rep->out = ep; 1350 return 0; 1351} 1352 1353/* 1354 * Frees everything. 1355 */ 1356static void snd_usbmidi_free(struct snd_usb_midi* umidi) 1357{ 1358 int i; 1359 1360 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) { 1361 struct snd_usb_midi_endpoint* ep = &umidi->endpoints[i]; 1362 if (ep->out) 1363 snd_usbmidi_out_endpoint_delete(ep->out); 1364 if (ep->in) 1365 snd_usbmidi_in_endpoint_delete(ep->in); 1366 } 1367 mutex_destroy(&umidi->mutex); 1368 kfree(umidi); 1369} 1370 1371/* 1372 * Unlinks all URBs (must be done before the usb_device is deleted). 1373 */ 1374void snd_usbmidi_disconnect(struct list_head* p) 1375{ 1376 struct snd_usb_midi* umidi; 1377 unsigned int i, j; 1378 1379 umidi = list_entry(p, struct snd_usb_midi, list); 1380 /* 1381 * an URB's completion handler may start the timer and 1382 * a timer may submit an URB. To reliably break the cycle 1383 * a flag under lock must be used 1384 */ 1385 spin_lock_irq(&umidi->disc_lock); 1386 umidi->disconnected = 1; 1387 spin_unlock_irq(&umidi->disc_lock); 1388 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) { 1389 struct snd_usb_midi_endpoint* ep = &umidi->endpoints[i]; 1390 if (ep->out) 1391 tasklet_kill(&ep->out->tasklet); 1392 if (ep->out) { 1393 for (j = 0; j < OUTPUT_URBS; ++j) 1394 usb_kill_urb(ep->out->urbs[j].urb); 1395 if (umidi->usb_protocol_ops->finish_out_endpoint) 1396 umidi->usb_protocol_ops->finish_out_endpoint(ep->out); 1397 ep->out->active_urbs = 0; 1398 if (ep->out->drain_urbs) { 1399 ep->out->drain_urbs = 0; 1400 wake_up(&ep->out->drain_wait); 1401 } 1402 } 1403 if (ep->in) 1404 for (j = 0; j < INPUT_URBS; ++j) 1405 usb_kill_urb(ep->in->urbs[j]); 1406 /* free endpoints here; later call can result in Oops */ 1407 if (ep->out) 1408 snd_usbmidi_out_endpoint_clear(ep->out); 1409 if (ep->in) { 1410 snd_usbmidi_in_endpoint_delete(ep->in); 1411 ep->in = NULL; 1412 } 1413 } 1414 del_timer_sync(&umidi->error_timer); 1415} 1416 1417static void snd_usbmidi_rawmidi_free(struct snd_rawmidi *rmidi) 1418{ 1419 struct snd_usb_midi* umidi = rmidi->private_data; 1420 snd_usbmidi_free(umidi); 1421} 1422 1423static struct snd_rawmidi_substream *snd_usbmidi_find_substream(struct snd_usb_midi* umidi, 1424 int stream, int number) 1425{ 1426 struct list_head* list; 1427 1428 list_for_each(list, &umidi->rmidi->streams[stream].substreams) { 1429 struct snd_rawmidi_substream *substream = list_entry(list, struct snd_rawmidi_substream, list); 1430 if (substream->number == number) 1431 return substream; 1432 } 1433 return NULL; 1434} 1435 1436/* 1437 * This list specifies names for ports that do not fit into the standard 1438 * "(product) MIDI (n)" schema because they aren't external MIDI ports, 1439 * such as internal control or synthesizer ports. 1440 */ 1441static struct port_info { 1442 u32 id; 1443 short int port; 1444 short int voices; 1445 const char *name; 1446 unsigned int seq_flags; 1447} snd_usbmidi_port_info[] = { 1448#define PORT_INFO(vendor, product, num, name_, voices_, flags) \ 1449 { .id = USB_ID(vendor, product), \ 1450 .port = num, .voices = voices_, \ 1451 .name = name_, .seq_flags = flags } 1452#define EXTERNAL_PORT(vendor, product, num, name) \ 1453 PORT_INFO(vendor, product, num, name, 0, \ 1454 SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | \ 1455 SNDRV_SEQ_PORT_TYPE_HARDWARE | \ 1456 SNDRV_SEQ_PORT_TYPE_PORT) 1457#define CONTROL_PORT(vendor, product, num, name) \ 1458 PORT_INFO(vendor, product, num, name, 0, \ 1459 SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | \ 1460 SNDRV_SEQ_PORT_TYPE_HARDWARE) 1461#define ROLAND_SYNTH_PORT(vendor, product, num, name, voices) \ 1462 PORT_INFO(vendor, product, num, name, voices, \ 1463 SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | \ 1464 SNDRV_SEQ_PORT_TYPE_MIDI_GM | \ 1465 SNDRV_SEQ_PORT_TYPE_MIDI_GM2 | \ 1466 SNDRV_SEQ_PORT_TYPE_MIDI_GS | \ 1467 SNDRV_SEQ_PORT_TYPE_MIDI_XG | \ 1468 SNDRV_SEQ_PORT_TYPE_HARDWARE | \ 1469 SNDRV_SEQ_PORT_TYPE_SYNTHESIZER) 1470#define SOUNDCANVAS_PORT(vendor, product, num, name, voices) \ 1471 PORT_INFO(vendor, product, num, name, voices, \ 1472 SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | \ 1473 SNDRV_SEQ_PORT_TYPE_MIDI_GM | \ 1474 SNDRV_SEQ_PORT_TYPE_MIDI_GM2 | \ 1475 SNDRV_SEQ_PORT_TYPE_MIDI_GS | \ 1476 SNDRV_SEQ_PORT_TYPE_MIDI_XG | \ 1477 SNDRV_SEQ_PORT_TYPE_MIDI_MT32 | \ 1478 SNDRV_SEQ_PORT_TYPE_HARDWARE | \ 1479 SNDRV_SEQ_PORT_TYPE_SYNTHESIZER) 1480 /* Roland UA-100 */ 1481 CONTROL_PORT(0x0582, 0x0000, 2, "%s Control"), 1482 /* Roland SC-8850 */ 1483 SOUNDCANVAS_PORT(0x0582, 0x0003, 0, "%s Part A", 128), 1484 SOUNDCANVAS_PORT(0x0582, 0x0003, 1, "%s Part B", 128), 1485 SOUNDCANVAS_PORT(0x0582, 0x0003, 2, "%s Part C", 128), 1486 SOUNDCANVAS_PORT(0x0582, 0x0003, 3, "%s Part D", 128), 1487 EXTERNAL_PORT(0x0582, 0x0003, 4, "%s MIDI 1"), 1488 EXTERNAL_PORT(0x0582, 0x0003, 5, "%s MIDI 2"), 1489 /* Roland U-8 */ 1490 EXTERNAL_PORT(0x0582, 0x0004, 0, "%s MIDI"), 1491 CONTROL_PORT(0x0582, 0x0004, 1, "%s Control"), 1492 /* Roland SC-8820 */ 1493 SOUNDCANVAS_PORT(0x0582, 0x0007, 0, "%s Part A", 64), 1494 SOUNDCANVAS_PORT(0x0582, 0x0007, 1, "%s Part B", 64), 1495 EXTERNAL_PORT(0x0582, 0x0007, 2, "%s MIDI"), 1496 /* Roland SK-500 */ 1497 SOUNDCANVAS_PORT(0x0582, 0x000b, 0, "%s Part A", 64), 1498 SOUNDCANVAS_PORT(0x0582, 0x000b, 1, "%s Part B", 64), 1499 EXTERNAL_PORT(0x0582, 0x000b, 2, "%s MIDI"), 1500 /* Roland SC-D70 */ 1501 SOUNDCANVAS_PORT(0x0582, 0x000c, 0, "%s Part A", 64), 1502 SOUNDCANVAS_PORT(0x0582, 0x000c, 1, "%s Part B", 64), 1503 EXTERNAL_PORT(0x0582, 0x000c, 2, "%s MIDI"), 1504 /* Edirol UM-880 */ 1505 CONTROL_PORT(0x0582, 0x0014, 8, "%s Control"), 1506 /* Edirol SD-90 */ 1507 ROLAND_SYNTH_PORT(0x0582, 0x0016, 0, "%s Part A", 128), 1508 ROLAND_SYNTH_PORT(0x0582, 0x0016, 1, "%s Part B", 128), 1509 EXTERNAL_PORT(0x0582, 0x0016, 2, "%s MIDI 1"), 1510 EXTERNAL_PORT(0x0582, 0x0016, 3, "%s MIDI 2"), 1511 /* Edirol UM-550 */ 1512 CONTROL_PORT(0x0582, 0x0023, 5, "%s Control"), 1513 /* Edirol SD-20 */ 1514 ROLAND_SYNTH_PORT(0x0582, 0x0027, 0, "%s Part A", 64), 1515 ROLAND_SYNTH_PORT(0x0582, 0x0027, 1, "%s Part B", 64), 1516 EXTERNAL_PORT(0x0582, 0x0027, 2, "%s MIDI"), 1517 /* Edirol SD-80 */ 1518 ROLAND_SYNTH_PORT(0x0582, 0x0029, 0, "%s Part A", 128), 1519 ROLAND_SYNTH_PORT(0x0582, 0x0029, 1, "%s Part B", 128), 1520 EXTERNAL_PORT(0x0582, 0x0029, 2, "%s MIDI 1"), 1521 EXTERNAL_PORT(0x0582, 0x0029, 3, "%s MIDI 2"), 1522 /* Edirol UA-700 */ 1523 EXTERNAL_PORT(0x0582, 0x002b, 0, "%s MIDI"), 1524 CONTROL_PORT(0x0582, 0x002b, 1, "%s Control"), 1525 /* Roland VariOS */ 1526 EXTERNAL_PORT(0x0582, 0x002f, 0, "%s MIDI"), 1527 EXTERNAL_PORT(0x0582, 0x002f, 1, "%s External MIDI"), 1528 EXTERNAL_PORT(0x0582, 0x002f, 2, "%s Sync"), 1529 /* Edirol PCR */ 1530 EXTERNAL_PORT(0x0582, 0x0033, 0, "%s MIDI"), 1531 EXTERNAL_PORT(0x0582, 0x0033, 1, "%s 1"), 1532 EXTERNAL_PORT(0x0582, 0x0033, 2, "%s 2"), 1533 /* BOSS GS-10 */ 1534 EXTERNAL_PORT(0x0582, 0x003b, 0, "%s MIDI"), 1535 CONTROL_PORT(0x0582, 0x003b, 1, "%s Control"), 1536 /* Edirol UA-1000 */ 1537 EXTERNAL_PORT(0x0582, 0x0044, 0, "%s MIDI"), 1538 CONTROL_PORT(0x0582, 0x0044, 1, "%s Control"), 1539 /* Edirol UR-80 */ 1540 EXTERNAL_PORT(0x0582, 0x0048, 0, "%s MIDI"), 1541 EXTERNAL_PORT(0x0582, 0x0048, 1, "%s 1"), 1542 EXTERNAL_PORT(0x0582, 0x0048, 2, "%s 2"), 1543 /* Edirol PCR-A */ 1544 EXTERNAL_PORT(0x0582, 0x004d, 0, "%s MIDI"), 1545 EXTERNAL_PORT(0x0582, 0x004d, 1, "%s 1"), 1546 EXTERNAL_PORT(0x0582, 0x004d, 2, "%s 2"), 1547 /* Edirol UM-3EX */ 1548 CONTROL_PORT(0x0582, 0x009a, 3, "%s Control"), 1549 /* M-Audio MidiSport 8x8 */ 1550 CONTROL_PORT(0x0763, 0x1031, 8, "%s Control"), 1551 CONTROL_PORT(0x0763, 0x1033, 8, "%s Control"), 1552 /* MOTU Fastlane */ 1553 EXTERNAL_PORT(0x07fd, 0x0001, 0, "%s MIDI A"), 1554 EXTERNAL_PORT(0x07fd, 0x0001, 1, "%s MIDI B"), 1555 /* Emagic Unitor8/AMT8/MT4 */ 1556 EXTERNAL_PORT(0x086a, 0x0001, 8, "%s Broadcast"), 1557 EXTERNAL_PORT(0x086a, 0x0002, 8, "%s Broadcast"), 1558 EXTERNAL_PORT(0x086a, 0x0003, 4, "%s Broadcast"), 1559 /* Akai MPD16 */ 1560 CONTROL_PORT(0x09e8, 0x0062, 0, "%s Control"), 1561 PORT_INFO(0x09e8, 0x0062, 1, "%s MIDI", 0, 1562 SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | 1563 SNDRV_SEQ_PORT_TYPE_HARDWARE), 1564 /* Access Music Virus TI */ 1565 EXTERNAL_PORT(0x133e, 0x0815, 0, "%s MIDI"), 1566 PORT_INFO(0x133e, 0x0815, 1, "%s Synth", 0, 1567 SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | 1568 SNDRV_SEQ_PORT_TYPE_HARDWARE | 1569 SNDRV_SEQ_PORT_TYPE_SYNTHESIZER), 1570}; 1571 1572static struct port_info *find_port_info(struct snd_usb_midi* umidi, int number) 1573{ 1574 int i; 1575 1576 for (i = 0; i < ARRAY_SIZE(snd_usbmidi_port_info); ++i) { 1577 if (snd_usbmidi_port_info[i].id == umidi->usb_id && 1578 snd_usbmidi_port_info[i].port == number) 1579 return &snd_usbmidi_port_info[i]; 1580 } 1581 return NULL; 1582} 1583 1584static void snd_usbmidi_get_port_info(struct snd_rawmidi *rmidi, int number, 1585 struct snd_seq_port_info *seq_port_info) 1586{ 1587 struct snd_usb_midi *umidi = rmidi->private_data; 1588 struct port_info *port_info; 1589 1590 /* TODO: read port flags from descriptors */ 1591 port_info = find_port_info(umidi, number); 1592 if (port_info) { 1593 seq_port_info->type = port_info->seq_flags; 1594 seq_port_info->midi_voices = port_info->voices; 1595 } 1596} 1597 1598static void snd_usbmidi_init_substream(struct snd_usb_midi* umidi, 1599 int stream, int number, 1600 struct snd_rawmidi_substream ** rsubstream) 1601{ 1602 struct port_info *port_info; 1603 const char *name_format; 1604 1605 struct snd_rawmidi_substream *substream = snd_usbmidi_find_substream(umidi, stream, number); 1606 if (!substream) { 1607 snd_printd(KERN_ERR "substream %d:%d not found\n", stream, number); 1608 return; 1609 } 1610 1611 /* TODO: read port name from jack descriptor */ 1612 port_info = find_port_info(umidi, number); 1613 name_format = port_info ? port_info->name : "%s MIDI %d"; 1614 snprintf(substream->name, sizeof(substream->name), 1615 name_format, umidi->card->shortname, number + 1); 1616 1617 *rsubstream = substream; 1618} 1619 1620/* 1621 * Creates the endpoints and their ports. 1622 */ 1623static int snd_usbmidi_create_endpoints(struct snd_usb_midi* umidi, 1624 struct snd_usb_midi_endpoint_info* endpoints) 1625{ 1626 int i, j, err; 1627 int out_ports = 0, in_ports = 0; 1628 1629 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) { 1630 if (endpoints[i].out_cables) { 1631 err = snd_usbmidi_out_endpoint_create(umidi, &endpoints[i], 1632 &umidi->endpoints[i]); 1633 if (err < 0) 1634 return err; 1635 } 1636 if (endpoints[i].in_cables) { 1637 err = snd_usbmidi_in_endpoint_create(umidi, &endpoints[i], 1638 &umidi->endpoints[i]); 1639 if (err < 0) 1640 return err; 1641 } 1642 1643 for (j = 0; j < 0x10; ++j) { 1644 if (endpoints[i].out_cables & (1 << j)) { 1645 snd_usbmidi_init_substream(umidi, SNDRV_RAWMIDI_STREAM_OUTPUT, out_ports, 1646 &umidi->endpoints[i].out->ports[j].substream); 1647 ++out_ports; 1648 } 1649 if (endpoints[i].in_cables & (1 << j)) { 1650 snd_usbmidi_init_substream(umidi, SNDRV_RAWMIDI_STREAM_INPUT, in_ports, 1651 &umidi->endpoints[i].in->ports[j].substream); 1652 ++in_ports; 1653 } 1654 } 1655 } 1656 snd_printdd(KERN_INFO "created %d output and %d input ports\n", 1657 out_ports, in_ports); 1658 return 0; 1659} 1660 1661/* 1662 * Returns MIDIStreaming device capabilities. 1663 */ 1664static int snd_usbmidi_get_ms_info(struct snd_usb_midi* umidi, 1665 struct snd_usb_midi_endpoint_info* endpoints) 1666{ 1667 struct usb_interface* intf; 1668 struct usb_host_interface *hostif; 1669 struct usb_interface_descriptor* intfd; 1670 struct usb_ms_header_descriptor* ms_header; 1671 struct usb_host_endpoint *hostep; 1672 struct usb_endpoint_descriptor* ep; 1673 struct usb_ms_endpoint_descriptor* ms_ep; 1674 int i, epidx; 1675 1676 intf = umidi->iface; 1677 if (!intf) 1678 return -ENXIO; 1679 hostif = &intf->altsetting[0]; 1680 intfd = get_iface_desc(hostif); 1681 ms_header = (struct usb_ms_header_descriptor*)hostif->extra; 1682 if (hostif->extralen >= 7 && 1683 ms_header->bLength >= 7 && 1684 ms_header->bDescriptorType == USB_DT_CS_INTERFACE && 1685 ms_header->bDescriptorSubtype == UAC_HEADER) 1686 snd_printdd(KERN_INFO "MIDIStreaming version %02x.%02x\n", 1687 ms_header->bcdMSC[1], ms_header->bcdMSC[0]); 1688 else 1689 snd_printk(KERN_WARNING "MIDIStreaming interface descriptor not found\n"); 1690 1691 epidx = 0; 1692 for (i = 0; i < intfd->bNumEndpoints; ++i) { 1693 hostep = &hostif->endpoint[i]; 1694 ep = get_ep_desc(hostep); 1695 if (!usb_endpoint_xfer_bulk(ep) && !usb_endpoint_xfer_int(ep)) 1696 continue; 1697 ms_ep = (struct usb_ms_endpoint_descriptor*)hostep->extra; 1698 if (hostep->extralen < 4 || 1699 ms_ep->bLength < 4 || 1700 ms_ep->bDescriptorType != USB_DT_CS_ENDPOINT || 1701 ms_ep->bDescriptorSubtype != UAC_MS_GENERAL) 1702 continue; 1703 if (usb_endpoint_dir_out(ep)) { 1704 if (endpoints[epidx].out_ep) { 1705 if (++epidx >= MIDI_MAX_ENDPOINTS) { 1706 snd_printk(KERN_WARNING "too many endpoints\n"); 1707 break; 1708 } 1709 } 1710 endpoints[epidx].out_ep = usb_endpoint_num(ep); 1711 if (usb_endpoint_xfer_int(ep)) 1712 endpoints[epidx].out_interval = ep->bInterval; 1713 else if (snd_usb_get_speed(umidi->dev) == USB_SPEED_LOW) 1714 /* 1715 * Low speed bulk transfers don't exist, so 1716 * force interrupt transfers for devices like 1717 * ESI MIDI Mate that try to use them anyway. 1718 */ 1719 endpoints[epidx].out_interval = 1; 1720 endpoints[epidx].out_cables = (1 << ms_ep->bNumEmbMIDIJack) - 1; 1721 snd_printdd(KERN_INFO "EP %02X: %d jack(s)\n", 1722 ep->bEndpointAddress, ms_ep->bNumEmbMIDIJack); 1723 } else { 1724 if (endpoints[epidx].in_ep) { 1725 if (++epidx >= MIDI_MAX_ENDPOINTS) { 1726 snd_printk(KERN_WARNING "too many endpoints\n"); 1727 break; 1728 } 1729 } 1730 endpoints[epidx].in_ep = usb_endpoint_num(ep); 1731 if (usb_endpoint_xfer_int(ep)) 1732 endpoints[epidx].in_interval = ep->bInterval; 1733 else if (snd_usb_get_speed(umidi->dev) == USB_SPEED_LOW) 1734 endpoints[epidx].in_interval = 1; 1735 endpoints[epidx].in_cables = (1 << ms_ep->bNumEmbMIDIJack) - 1; 1736 snd_printdd(KERN_INFO "EP %02X: %d jack(s)\n", 1737 ep->bEndpointAddress, ms_ep->bNumEmbMIDIJack); 1738 } 1739 } 1740 return 0; 1741} 1742 1743static int roland_load_info(struct snd_kcontrol *kcontrol, 1744 struct snd_ctl_elem_info *info) 1745{ 1746 static const char *const names[] = { "High Load", "Light Load" }; 1747 1748 return snd_ctl_enum_info(info, 1, 2, names); 1749} 1750 1751static int roland_load_get(struct snd_kcontrol *kcontrol, 1752 struct snd_ctl_elem_value *value) 1753{ 1754 value->value.enumerated.item[0] = kcontrol->private_value; 1755 return 0; 1756} 1757 1758static int roland_load_put(struct snd_kcontrol *kcontrol, 1759 struct snd_ctl_elem_value *value) 1760{ 1761 struct snd_usb_midi* umidi = kcontrol->private_data; 1762 int changed; 1763 1764 if (value->value.enumerated.item[0] > 1) 1765 return -EINVAL; 1766 mutex_lock(&umidi->mutex); 1767 changed = value->value.enumerated.item[0] != kcontrol->private_value; 1768 if (changed) 1769 kcontrol->private_value = value->value.enumerated.item[0]; 1770 mutex_unlock(&umidi->mutex); 1771 return changed; 1772} 1773 1774static struct snd_kcontrol_new roland_load_ctl = { 1775 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 1776 .name = "MIDI Input Mode", 1777 .info = roland_load_info, 1778 .get = roland_load_get, 1779 .put = roland_load_put, 1780 .private_value = 1, 1781}; 1782 1783/* 1784 * On Roland devices, use the second alternate setting to be able to use 1785 * the interrupt input endpoint. 1786 */ 1787static void snd_usbmidi_switch_roland_altsetting(struct snd_usb_midi* umidi) 1788{ 1789 struct usb_interface* intf; 1790 struct usb_host_interface *hostif; 1791 struct usb_interface_descriptor* intfd; 1792 1793 intf = umidi->iface; 1794 if (!intf || intf->num_altsetting != 2) 1795 return; 1796 1797 hostif = &intf->altsetting[1]; 1798 intfd = get_iface_desc(hostif); 1799 if (intfd->bNumEndpoints != 2 || 1800 (get_endpoint(hostif, 0)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) != USB_ENDPOINT_XFER_BULK || 1801 (get_endpoint(hostif, 1)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) != USB_ENDPOINT_XFER_INT) 1802 return; 1803 1804 snd_printdd(KERN_INFO "switching to altsetting %d with int ep\n", 1805 intfd->bAlternateSetting); 1806 usb_set_interface(umidi->dev, intfd->bInterfaceNumber, 1807 intfd->bAlternateSetting); 1808 1809 umidi->roland_load_ctl = snd_ctl_new1(&roland_load_ctl, umidi); 1810 if (snd_ctl_add(umidi->card, umidi->roland_load_ctl) < 0) 1811 umidi->roland_load_ctl = NULL; 1812} 1813 1814/* 1815 * Try to find any usable endpoints in the interface. 1816 */ 1817static int snd_usbmidi_detect_endpoints(struct snd_usb_midi* umidi, 1818 struct snd_usb_midi_endpoint_info* endpoint, 1819 int max_endpoints) 1820{ 1821 struct usb_interface* intf; 1822 struct usb_host_interface *hostif; 1823 struct usb_interface_descriptor* intfd; 1824 struct usb_endpoint_descriptor* epd; 1825 int i, out_eps = 0, in_eps = 0; 1826 1827 if (USB_ID_VENDOR(umidi->usb_id) == 0x0582) 1828 snd_usbmidi_switch_roland_altsetting(umidi); 1829 1830 if (endpoint[0].out_ep || endpoint[0].in_ep) 1831 return 0; 1832 1833 intf = umidi->iface; 1834 if (!intf || intf->num_altsetting < 1) 1835 return -ENOENT; 1836 hostif = intf->cur_altsetting; 1837 intfd = get_iface_desc(hostif); 1838 1839 for (i = 0; i < intfd->bNumEndpoints; ++i) { 1840 epd = get_endpoint(hostif, i); 1841 if (!usb_endpoint_xfer_bulk(epd) && 1842 !usb_endpoint_xfer_int(epd)) 1843 continue; 1844 if (out_eps < max_endpoints && 1845 usb_endpoint_dir_out(epd)) { 1846 endpoint[out_eps].out_ep = usb_endpoint_num(epd); 1847 if (usb_endpoint_xfer_int(epd)) 1848 endpoint[out_eps].out_interval = epd->bInterval; 1849 ++out_eps; 1850 } 1851 if (in_eps < max_endpoints && 1852 usb_endpoint_dir_in(epd)) { 1853 endpoint[in_eps].in_ep = usb_endpoint_num(epd); 1854 if (usb_endpoint_xfer_int(epd)) 1855 endpoint[in_eps].in_interval = epd->bInterval; 1856 ++in_eps; 1857 } 1858 } 1859 return (out_eps || in_eps) ? 0 : -ENOENT; 1860} 1861 1862/* 1863 * Detects the endpoints for one-port-per-endpoint protocols. 1864 */ 1865static int snd_usbmidi_detect_per_port_endpoints(struct snd_usb_midi* umidi, 1866 struct snd_usb_midi_endpoint_info* endpoints) 1867{ 1868 int err, i; 1869 1870 err = snd_usbmidi_detect_endpoints(umidi, endpoints, MIDI_MAX_ENDPOINTS); 1871 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) { 1872 if (endpoints[i].out_ep) 1873 endpoints[i].out_cables = 0x0001; 1874 if (endpoints[i].in_ep) 1875 endpoints[i].in_cables = 0x0001; 1876 } 1877 return err; 1878} 1879 1880/* 1881 * Detects the endpoints and ports of Yamaha devices. 1882 */ 1883static int snd_usbmidi_detect_yamaha(struct snd_usb_midi* umidi, 1884 struct snd_usb_midi_endpoint_info* endpoint) 1885{ 1886 struct usb_interface* intf; 1887 struct usb_host_interface *hostif; 1888 struct usb_interface_descriptor* intfd; 1889 uint8_t* cs_desc; 1890 1891 intf = umidi->iface; 1892 if (!intf) 1893 return -ENOENT; 1894 hostif = intf->altsetting; 1895 intfd = get_iface_desc(hostif); 1896 if (intfd->bNumEndpoints < 1) 1897 return -ENOENT; 1898 1899 /* 1900 * For each port there is one MIDI_IN/OUT_JACK descriptor, not 1901 * necessarily with any useful contents. So simply count 'em. 1902 */ 1903 for (cs_desc = hostif->extra; 1904 cs_desc < hostif->extra + hostif->extralen && cs_desc[0] >= 2; 1905 cs_desc += cs_desc[0]) { 1906 if (cs_desc[1] == USB_DT_CS_INTERFACE) { 1907 if (cs_desc[2] == UAC_MIDI_IN_JACK) 1908 endpoint->in_cables = (endpoint->in_cables << 1) | 1; 1909 else if (cs_desc[2] == UAC_MIDI_OUT_JACK) 1910 endpoint->out_cables = (endpoint->out_cables << 1) | 1; 1911 } 1912 } 1913 if (!endpoint->in_cables && !endpoint->out_cables) 1914 return -ENOENT; 1915 1916 return snd_usbmidi_detect_endpoints(umidi, endpoint, 1); 1917} 1918 1919/* 1920 * Creates the endpoints and their ports for Midiman devices. 1921 */ 1922static int snd_usbmidi_create_endpoints_midiman(struct snd_usb_midi* umidi, 1923 struct snd_usb_midi_endpoint_info* endpoint) 1924{ 1925 struct snd_usb_midi_endpoint_info ep_info; 1926 struct usb_interface* intf; 1927 struct usb_host_interface *hostif; 1928 struct usb_interface_descriptor* intfd; 1929 struct usb_endpoint_descriptor* epd; 1930 int cable, err; 1931 1932 intf = umidi->iface; 1933 if (!intf) 1934 return -ENOENT; 1935 hostif = intf->altsetting; 1936 intfd = get_iface_desc(hostif); 1937 /* 1938 * The various MidiSport devices have more or less random endpoint 1939 * numbers, so we have to identify the endpoints by their index in 1940 * the descriptor array, like the driver for that other OS does. 1941 * 1942 * There is one interrupt input endpoint for all input ports, one 1943 * bulk output endpoint for even-numbered ports, and one for odd- 1944 * numbered ports. Both bulk output endpoints have corresponding 1945 * input bulk endpoints (at indices 1 and 3) which aren't used. 1946 */ 1947 if (intfd->bNumEndpoints < (endpoint->out_cables > 0x0001 ? 5 : 3)) { 1948 snd_printdd(KERN_ERR "not enough endpoints\n"); 1949 return -ENOENT; 1950 } 1951 1952 epd = get_endpoint(hostif, 0); 1953 if (!usb_endpoint_dir_in(epd) || !usb_endpoint_xfer_int(epd)) { 1954 snd_printdd(KERN_ERR "endpoint[0] isn't interrupt\n"); 1955 return -ENXIO; 1956 } 1957 epd = get_endpoint(hostif, 2); 1958 if (!usb_endpoint_dir_out(epd) || !usb_endpoint_xfer_bulk(epd)) { 1959 snd_printdd(KERN_ERR "endpoint[2] isn't bulk output\n"); 1960 return -ENXIO; 1961 } 1962 if (endpoint->out_cables > 0x0001) { 1963 epd = get_endpoint(hostif, 4); 1964 if (!usb_endpoint_dir_out(epd) || 1965 !usb_endpoint_xfer_bulk(epd)) { 1966 snd_printdd(KERN_ERR "endpoint[4] isn't bulk output\n"); 1967 return -ENXIO; 1968 } 1969 } 1970 1971 ep_info.out_ep = get_endpoint(hostif, 2)->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; 1972 ep_info.out_interval = 0; 1973 ep_info.out_cables = endpoint->out_cables & 0x5555; 1974 err = snd_usbmidi_out_endpoint_create(umidi, &ep_info, &umidi->endpoints[0]); 1975 if (err < 0) 1976 return err; 1977 1978 ep_info.in_ep = get_endpoint(hostif, 0)->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; 1979 ep_info.in_interval = get_endpoint(hostif, 0)->bInterval; 1980 ep_info.in_cables = endpoint->in_cables; 1981 err = snd_usbmidi_in_endpoint_create(umidi, &ep_info, &umidi->endpoints[0]); 1982 if (err < 0) 1983 return err; 1984 1985 if (endpoint->out_cables > 0x0001) { 1986 ep_info.out_ep = get_endpoint(hostif, 4)->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; 1987 ep_info.out_cables = endpoint->out_cables & 0xaaaa; 1988 err = snd_usbmidi_out_endpoint_create(umidi, &ep_info, &umidi->endpoints[1]); 1989 if (err < 0) 1990 return err; 1991 } 1992 1993 for (cable = 0; cable < 0x10; ++cable) { 1994 if (endpoint->out_cables & (1 << cable)) 1995 snd_usbmidi_init_substream(umidi, SNDRV_RAWMIDI_STREAM_OUTPUT, cable, 1996 &umidi->endpoints[cable & 1].out->ports[cable].substream); 1997 if (endpoint->in_cables & (1 << cable)) 1998 snd_usbmidi_init_substream(umidi, SNDRV_RAWMIDI_STREAM_INPUT, cable, 1999 &umidi->endpoints[0].in->ports[cable].substream); 2000 } 2001 return 0; 2002} 2003 2004static struct snd_rawmidi_global_ops snd_usbmidi_ops = { 2005 .get_port_info = snd_usbmidi_get_port_info, 2006}; 2007 2008static int snd_usbmidi_create_rawmidi(struct snd_usb_midi* umidi, 2009 int out_ports, int in_ports) 2010{ 2011 struct snd_rawmidi *rmidi; 2012 int err; 2013 2014 err = snd_rawmidi_new(umidi->card, "USB MIDI", 2015 umidi->next_midi_device++, 2016 out_ports, in_ports, &rmidi); 2017 if (err < 0) 2018 return err; 2019 strcpy(rmidi->name, umidi->card->shortname); 2020 rmidi->info_flags = SNDRV_RAWMIDI_INFO_OUTPUT | 2021 SNDRV_RAWMIDI_INFO_INPUT | 2022 SNDRV_RAWMIDI_INFO_DUPLEX; 2023 rmidi->ops = &snd_usbmidi_ops; 2024 rmidi->private_data = umidi; 2025 rmidi->private_free = snd_usbmidi_rawmidi_free; 2026 snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, &snd_usbmidi_output_ops); 2027 snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_INPUT, &snd_usbmidi_input_ops); 2028 2029 umidi->rmidi = rmidi; 2030 return 0; 2031} 2032 2033/* 2034 * Temporarily stop input. 2035 */ 2036void snd_usbmidi_input_stop(struct list_head* p) 2037{ 2038 struct snd_usb_midi* umidi; 2039 unsigned int i, j; 2040 2041 umidi = list_entry(p, struct snd_usb_midi, list); 2042 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) { 2043 struct snd_usb_midi_endpoint* ep = &umidi->endpoints[i]; 2044 if (ep->in) 2045 for (j = 0; j < INPUT_URBS; ++j) 2046 usb_kill_urb(ep->in->urbs[j]); 2047 } 2048} 2049 2050static void snd_usbmidi_input_start_ep(struct snd_usb_midi_in_endpoint* ep) 2051{ 2052 unsigned int i; 2053 2054 if (!ep) 2055 return; 2056 for (i = 0; i < INPUT_URBS; ++i) { 2057 struct urb* urb = ep->urbs[i]; 2058 urb->dev = ep->umidi->dev; 2059 snd_usbmidi_submit_urb(urb, GFP_KERNEL); 2060 } 2061} 2062 2063/* 2064 * Resume input after a call to snd_usbmidi_input_stop(). 2065 */ 2066void snd_usbmidi_input_start(struct list_head* p) 2067{ 2068 struct snd_usb_midi* umidi; 2069 int i; 2070 2071 umidi = list_entry(p, struct snd_usb_midi, list); 2072 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) 2073 snd_usbmidi_input_start_ep(umidi->endpoints[i].in); 2074} 2075 2076/* 2077 * Creates and registers everything needed for a MIDI streaming interface. 2078 */ 2079int snd_usbmidi_create(struct snd_card *card, 2080 struct usb_interface* iface, 2081 struct list_head *midi_list, 2082 const struct snd_usb_audio_quirk* quirk) 2083{ 2084 struct snd_usb_midi* umidi; 2085 struct snd_usb_midi_endpoint_info endpoints[MIDI_MAX_ENDPOINTS]; 2086 int out_ports, in_ports; 2087 int i, err; 2088 2089 umidi = kzalloc(sizeof(*umidi), GFP_KERNEL); 2090 if (!umidi) 2091 return -ENOMEM; 2092 umidi->dev = interface_to_usbdev(iface); 2093 umidi->card = card; 2094 umidi->iface = iface; 2095 umidi->quirk = quirk; 2096 umidi->usb_protocol_ops = &snd_usbmidi_standard_ops; 2097 init_timer(&umidi->error_timer); 2098 spin_lock_init(&umidi->disc_lock); 2099 mutex_init(&umidi->mutex); 2100 umidi->usb_id = USB_ID(le16_to_cpu(umidi->dev->descriptor.idVendor), 2101 le16_to_cpu(umidi->dev->descriptor.idProduct)); 2102 umidi->error_timer.function = snd_usbmidi_error_timer; 2103 umidi->error_timer.data = (unsigned long)umidi; 2104 2105 /* detect the endpoint(s) to use */ 2106 memset(endpoints, 0, sizeof(endpoints)); 2107 switch (quirk ? quirk->type : QUIRK_MIDI_STANDARD_INTERFACE) { 2108 case QUIRK_MIDI_STANDARD_INTERFACE: 2109 err = snd_usbmidi_get_ms_info(umidi, endpoints); 2110 if (umidi->usb_id == USB_ID(0x0763, 0x0150)) /* M-Audio Uno */ 2111 umidi->usb_protocol_ops = 2112 &snd_usbmidi_maudio_broken_running_status_ops; 2113 break; 2114 case QUIRK_MIDI_US122L: 2115 umidi->usb_protocol_ops = &snd_usbmidi_122l_ops; 2116 /* fall through */ 2117 case QUIRK_MIDI_FIXED_ENDPOINT: 2118 memcpy(&endpoints[0], quirk->data, 2119 sizeof(struct snd_usb_midi_endpoint_info)); 2120 err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1); 2121 break; 2122 case QUIRK_MIDI_YAMAHA: 2123 err = snd_usbmidi_detect_yamaha(umidi, &endpoints[0]); 2124 break; 2125 case QUIRK_MIDI_MIDIMAN: 2126 umidi->usb_protocol_ops = &snd_usbmidi_midiman_ops; 2127 memcpy(&endpoints[0], quirk->data, 2128 sizeof(struct snd_usb_midi_endpoint_info)); 2129 err = 0; 2130 break; 2131 case QUIRK_MIDI_NOVATION: 2132 umidi->usb_protocol_ops = &snd_usbmidi_novation_ops; 2133 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints); 2134 break; 2135 case QUIRK_MIDI_RAW_BYTES: 2136 umidi->usb_protocol_ops = &snd_usbmidi_raw_ops; 2137 /* 2138 * Interface 1 contains isochronous endpoints, but with the same 2139 * numbers as in interface 0. Since it is interface 1 that the 2140 * USB core has most recently seen, these descriptors are now 2141 * associated with the endpoint numbers. This will foul up our 2142 * attempts to submit bulk/interrupt URBs to the endpoints in 2143 * interface 0, so we have to make sure that the USB core looks 2144 * again at interface 0 by calling usb_set_interface() on it. 2145 */ 2146 if (umidi->usb_id == USB_ID(0x07fd, 0x0001)) /* MOTU Fastlane */ 2147 usb_set_interface(umidi->dev, 0, 0); 2148 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints); 2149 break; 2150 case QUIRK_MIDI_EMAGIC: 2151 umidi->usb_protocol_ops = &snd_usbmidi_emagic_ops; 2152 memcpy(&endpoints[0], quirk->data, 2153 sizeof(struct snd_usb_midi_endpoint_info)); 2154 err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1); 2155 break; 2156 case QUIRK_MIDI_CME: 2157 umidi->usb_protocol_ops = &snd_usbmidi_cme_ops; 2158 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints); 2159 break; 2160 case QUIRK_MIDI_AKAI: 2161 umidi->usb_protocol_ops = &snd_usbmidi_akai_ops; 2162 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints); 2163 /* endpoint 1 is input-only */ 2164 endpoints[1].out_cables = 0; 2165 break; 2166 default: 2167 snd_printd(KERN_ERR "invalid quirk type %d\n", quirk->type); 2168 err = -ENXIO; 2169 break; 2170 } 2171 if (err < 0) { 2172 kfree(umidi); 2173 return err; 2174 } 2175 2176 /* create rawmidi device */ 2177 out_ports = 0; 2178 in_ports = 0; 2179 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) { 2180 out_ports += hweight16(endpoints[i].out_cables); 2181 in_ports += hweight16(endpoints[i].in_cables); 2182 } 2183 err = snd_usbmidi_create_rawmidi(umidi, out_ports, in_ports); 2184 if (err < 0) { 2185 kfree(umidi); 2186 return err; 2187 } 2188 2189 /* create endpoint/port structures */ 2190 if (quirk && quirk->type == QUIRK_MIDI_MIDIMAN) 2191 err = snd_usbmidi_create_endpoints_midiman(umidi, &endpoints[0]); 2192 else 2193 err = snd_usbmidi_create_endpoints(umidi, endpoints); 2194 if (err < 0) { 2195 snd_usbmidi_free(umidi); 2196 return err; 2197 } 2198 2199 list_add_tail(&umidi->list, midi_list); 2200 2201 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) 2202 snd_usbmidi_input_start_ep(umidi->endpoints[i].in); 2203 return 0; 2204} 2205 2206EXPORT_SYMBOL(snd_usbmidi_create); 2207EXPORT_SYMBOL(snd_usbmidi_input_stop); 2208EXPORT_SYMBOL(snd_usbmidi_input_start); 2209EXPORT_SYMBOL(snd_usbmidi_disconnect); 2210