Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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