f_midi.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998
  1. /*
  2. * f_midi.c -- USB MIDI class function driver
  3. *
  4. * Copyright (C) 2006 Thumtronics Pty Ltd.
  5. * Developed for Thumtronics by Grey Innovation
  6. * Ben Williamson <ben.williamson@greyinnovation.com>
  7. *
  8. * Rewritten for the composite framework
  9. * Copyright (C) 2011 Daniel Mack <zonque@gmail.com>
  10. *
  11. * Based on drivers/usb/gadget/f_audio.c,
  12. * Copyright (C) 2008 Bryan Wu <cooloney@kernel.org>
  13. * Copyright (C) 2008 Analog Devices, Inc
  14. *
  15. * and drivers/usb/gadget/midi.c,
  16. * Copyright (C) 2006 Thumtronics Pty Ltd.
  17. * Ben Williamson <ben.williamson@greyinnovation.com>
  18. *
  19. * Licensed under the GPL-2 or later.
  20. */
  21. #include <linux/kernel.h>
  22. #include <linux/slab.h>
  23. #include <linux/utsname.h>
  24. #include <linux/device.h>
  25. #include <sound/core.h>
  26. #include <sound/initval.h>
  27. #include <sound/rawmidi.h>
  28. #include <linux/usb/ch9.h>
  29. #include <linux/usb/gadget.h>
  30. #include <linux/usb/audio.h>
  31. #include <linux/usb/midi.h>
  32. MODULE_AUTHOR("Ben Williamson");
  33. MODULE_LICENSE("GPL v2");
  34. static const char f_midi_shortname[] = "f_midi";
  35. static const char f_midi_longname[] = "MIDI Gadget";
  36. /*
  37. * We can only handle 16 cables on one single endpoint, as cable numbers are
  38. * stored in 4-bit fields. And as the interface currently only holds one
  39. * single endpoint, this is the maximum number of ports we can allow.
  40. */
  41. #define MAX_PORTS 16
  42. /*
  43. * This is a gadget, and the IN/OUT naming is from the host's perspective.
  44. * USB -> OUT endpoint -> rawmidi
  45. * USB <- IN endpoint <- rawmidi
  46. */
  47. struct gmidi_in_port {
  48. struct f_midi *midi;
  49. int active;
  50. uint8_t cable;
  51. uint8_t state;
  52. #define STATE_UNKNOWN 0
  53. #define STATE_1PARAM 1
  54. #define STATE_2PARAM_1 2
  55. #define STATE_2PARAM_2 3
  56. #define STATE_SYSEX_0 4
  57. #define STATE_SYSEX_1 5
  58. #define STATE_SYSEX_2 6
  59. uint8_t data[2];
  60. };
  61. struct f_midi {
  62. struct usb_function func;
  63. struct usb_gadget *gadget;
  64. struct usb_ep *in_ep, *out_ep;
  65. struct snd_card *card;
  66. struct snd_rawmidi *rmidi;
  67. struct snd_rawmidi_substream *in_substream[MAX_PORTS];
  68. struct snd_rawmidi_substream *out_substream[MAX_PORTS];
  69. struct gmidi_in_port *in_port[MAX_PORTS];
  70. unsigned long out_triggered;
  71. struct tasklet_struct tasklet;
  72. unsigned int in_ports;
  73. unsigned int out_ports;
  74. int index;
  75. char *id;
  76. unsigned int buflen, qlen;
  77. };
  78. static inline struct f_midi *func_to_midi(struct usb_function *f)
  79. {
  80. return container_of(f, struct f_midi, func);
  81. }
  82. static void f_midi_transmit(struct f_midi *midi, struct usb_request *req);
  83. DECLARE_UAC_AC_HEADER_DESCRIPTOR(1);
  84. DECLARE_USB_MIDI_OUT_JACK_DESCRIPTOR(1);
  85. DECLARE_USB_MIDI_OUT_JACK_DESCRIPTOR(16);
  86. DECLARE_USB_MS_ENDPOINT_DESCRIPTOR(16);
  87. /* B.3.1 Standard AC Interface Descriptor */
  88. static struct usb_interface_descriptor ac_interface_desc __initdata = {
  89. .bLength = USB_DT_INTERFACE_SIZE,
  90. .bDescriptorType = USB_DT_INTERFACE,
  91. /* .bInterfaceNumber = DYNAMIC */
  92. /* .bNumEndpoints = DYNAMIC */
  93. .bInterfaceClass = USB_CLASS_AUDIO,
  94. .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
  95. /* .iInterface = DYNAMIC */
  96. };
  97. /* B.3.2 Class-Specific AC Interface Descriptor */
  98. static struct uac1_ac_header_descriptor_1 ac_header_desc __initdata = {
  99. .bLength = UAC_DT_AC_HEADER_SIZE(1),
  100. .bDescriptorType = USB_DT_CS_INTERFACE,
  101. .bDescriptorSubtype = USB_MS_HEADER,
  102. .bcdADC = cpu_to_le16(0x0100),
  103. .wTotalLength = cpu_to_le16(UAC_DT_AC_HEADER_SIZE(1)),
  104. .bInCollection = 1,
  105. /* .baInterfaceNr = DYNAMIC */
  106. };
  107. /* B.4.1 Standard MS Interface Descriptor */
  108. static struct usb_interface_descriptor ms_interface_desc __initdata = {
  109. .bLength = USB_DT_INTERFACE_SIZE,
  110. .bDescriptorType = USB_DT_INTERFACE,
  111. /* .bInterfaceNumber = DYNAMIC */
  112. .bNumEndpoints = 2,
  113. .bInterfaceClass = USB_CLASS_AUDIO,
  114. .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
  115. /* .iInterface = DYNAMIC */
  116. };
  117. /* B.4.2 Class-Specific MS Interface Descriptor */
  118. static struct usb_ms_header_descriptor ms_header_desc __initdata = {
  119. .bLength = USB_DT_MS_HEADER_SIZE,
  120. .bDescriptorType = USB_DT_CS_INTERFACE,
  121. .bDescriptorSubtype = USB_MS_HEADER,
  122. .bcdMSC = cpu_to_le16(0x0100),
  123. /* .wTotalLength = DYNAMIC */
  124. };
  125. /* B.4.3 Embedded MIDI IN Jack Descriptor */
  126. static struct usb_midi_in_jack_descriptor jack_in_emb_desc = {
  127. .bLength = USB_DT_MIDI_IN_SIZE,
  128. .bDescriptorType = USB_DT_CS_INTERFACE,
  129. .bDescriptorSubtype = USB_MS_MIDI_IN_JACK,
  130. .bJackType = USB_MS_EMBEDDED,
  131. /* .bJackID = DYNAMIC */
  132. };
  133. /* B.4.4 Embedded MIDI OUT Jack Descriptor */
  134. static struct usb_midi_out_jack_descriptor_16 jack_out_emb_desc = {
  135. /* .bLength = DYNAMIC */
  136. .bDescriptorType = USB_DT_CS_INTERFACE,
  137. .bDescriptorSubtype = USB_MS_MIDI_OUT_JACK,
  138. .bJackType = USB_MS_EMBEDDED,
  139. /* .bJackID = DYNAMIC */
  140. /* .bNrInputPins = DYNAMIC */
  141. /* .pins = DYNAMIC */
  142. };
  143. /* B.5.1 Standard Bulk OUT Endpoint Descriptor */
  144. static struct usb_endpoint_descriptor bulk_out_desc = {
  145. .bLength = USB_DT_ENDPOINT_AUDIO_SIZE,
  146. .bDescriptorType = USB_DT_ENDPOINT,
  147. .bEndpointAddress = USB_DIR_OUT,
  148. .bmAttributes = USB_ENDPOINT_XFER_BULK,
  149. };
  150. /* B.5.2 Class-specific MS Bulk OUT Endpoint Descriptor */
  151. static struct usb_ms_endpoint_descriptor_16 ms_out_desc = {
  152. /* .bLength = DYNAMIC */
  153. .bDescriptorType = USB_DT_CS_ENDPOINT,
  154. .bDescriptorSubtype = USB_MS_GENERAL,
  155. /* .bNumEmbMIDIJack = DYNAMIC */
  156. /* .baAssocJackID = DYNAMIC */
  157. };
  158. /* B.6.1 Standard Bulk IN Endpoint Descriptor */
  159. static struct usb_endpoint_descriptor bulk_in_desc = {
  160. .bLength = USB_DT_ENDPOINT_AUDIO_SIZE,
  161. .bDescriptorType = USB_DT_ENDPOINT,
  162. .bEndpointAddress = USB_DIR_IN,
  163. .bmAttributes = USB_ENDPOINT_XFER_BULK,
  164. };
  165. /* B.6.2 Class-specific MS Bulk IN Endpoint Descriptor */
  166. static struct usb_ms_endpoint_descriptor_16 ms_in_desc = {
  167. /* .bLength = DYNAMIC */
  168. .bDescriptorType = USB_DT_CS_ENDPOINT,
  169. .bDescriptorSubtype = USB_MS_GENERAL,
  170. /* .bNumEmbMIDIJack = DYNAMIC */
  171. /* .baAssocJackID = DYNAMIC */
  172. };
  173. /* string IDs are assigned dynamically */
  174. #define STRING_FUNC_IDX 0
  175. static struct usb_string midi_string_defs[] = {
  176. [STRING_FUNC_IDX].s = "MIDI function",
  177. { } /* end of list */
  178. };
  179. static struct usb_gadget_strings midi_stringtab = {
  180. .language = 0x0409, /* en-us */
  181. .strings = midi_string_defs,
  182. };
  183. static struct usb_gadget_strings *midi_strings[] = {
  184. &midi_stringtab,
  185. NULL,
  186. };
  187. static struct usb_request *alloc_ep_req(struct usb_ep *ep, unsigned length)
  188. {
  189. struct usb_request *req;
  190. req = usb_ep_alloc_request(ep, GFP_ATOMIC);
  191. if (req) {
  192. req->length = length;
  193. req->buf = kmalloc(length, GFP_ATOMIC);
  194. if (!req->buf) {
  195. usb_ep_free_request(ep, req);
  196. req = NULL;
  197. }
  198. }
  199. return req;
  200. }
  201. static void free_ep_req(struct usb_ep *ep, struct usb_request *req)
  202. {
  203. kfree(req->buf);
  204. usb_ep_free_request(ep, req);
  205. }
  206. static const uint8_t f_midi_cin_length[] = {
  207. 0, 0, 2, 3, 3, 1, 2, 3, 3, 3, 3, 3, 2, 2, 3, 1
  208. };
  209. /*
  210. * Receives a chunk of MIDI data.
  211. */
  212. static void f_midi_read_data(struct usb_ep *ep, int cable,
  213. uint8_t *data, int length)
  214. {
  215. struct f_midi *midi = ep->driver_data;
  216. struct snd_rawmidi_substream *substream = midi->out_substream[cable];
  217. if (!substream)
  218. /* Nobody is listening - throw it on the floor. */
  219. return;
  220. if (!test_bit(cable, &midi->out_triggered))
  221. return;
  222. snd_rawmidi_receive(substream, data, length);
  223. }
  224. static void f_midi_handle_out_data(struct usb_ep *ep, struct usb_request *req)
  225. {
  226. unsigned int i;
  227. u8 *buf = req->buf;
  228. for (i = 0; i + 3 < req->actual; i += 4)
  229. if (buf[i] != 0) {
  230. int cable = buf[i] >> 4;
  231. int length = f_midi_cin_length[buf[i] & 0x0f];
  232. f_midi_read_data(ep, cable, &buf[i + 1], length);
  233. }
  234. }
  235. static void
  236. f_midi_complete(struct usb_ep *ep, struct usb_request *req)
  237. {
  238. struct f_midi *midi = ep->driver_data;
  239. struct usb_composite_dev *cdev = midi->func.config->cdev;
  240. int status = req->status;
  241. switch (status) {
  242. case 0: /* normal completion */
  243. if (ep == midi->out_ep) {
  244. /* We received stuff. req is queued again, below */
  245. f_midi_handle_out_data(ep, req);
  246. } else if (ep == midi->in_ep) {
  247. /* Our transmit completed. See if there's more to go.
  248. * f_midi_transmit eats req, don't queue it again. */
  249. f_midi_transmit(midi, req);
  250. return;
  251. }
  252. break;
  253. /* this endpoint is normally active while we're configured */
  254. case -ECONNABORTED: /* hardware forced ep reset */
  255. case -ECONNRESET: /* request dequeued */
  256. case -ESHUTDOWN: /* disconnect from host */
  257. VDBG(cdev, "%s gone (%d), %d/%d\n", ep->name, status,
  258. req->actual, req->length);
  259. if (ep == midi->out_ep)
  260. f_midi_handle_out_data(ep, req);
  261. free_ep_req(ep, req);
  262. return;
  263. case -EOVERFLOW: /* buffer overrun on read means that
  264. * we didn't provide a big enough buffer.
  265. */
  266. default:
  267. DBG(cdev, "%s complete --> %d, %d/%d\n", ep->name,
  268. status, req->actual, req->length);
  269. break;
  270. case -EREMOTEIO: /* short read */
  271. break;
  272. }
  273. status = usb_ep_queue(ep, req, GFP_ATOMIC);
  274. if (status) {
  275. ERROR(cdev, "kill %s: resubmit %d bytes --> %d\n",
  276. ep->name, req->length, status);
  277. usb_ep_set_halt(ep);
  278. /* FIXME recover later ... somehow */
  279. }
  280. }
  281. static int f_midi_start_ep(struct f_midi *midi,
  282. struct usb_function *f,
  283. struct usb_ep *ep)
  284. {
  285. int err;
  286. struct usb_composite_dev *cdev = f->config->cdev;
  287. if (ep->driver_data)
  288. usb_ep_disable(ep);
  289. err = config_ep_by_speed(midi->gadget, f, ep);
  290. if (err) {
  291. ERROR(cdev, "can't configure %s: %d\n", ep->name, err);
  292. return err;
  293. }
  294. err = usb_ep_enable(ep);
  295. if (err) {
  296. ERROR(cdev, "can't start %s: %d\n", ep->name, err);
  297. return err;
  298. }
  299. ep->driver_data = midi;
  300. return 0;
  301. }
  302. static int f_midi_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
  303. {
  304. struct f_midi *midi = func_to_midi(f);
  305. struct usb_composite_dev *cdev = f->config->cdev;
  306. unsigned i;
  307. int err;
  308. err = f_midi_start_ep(midi, f, midi->in_ep);
  309. if (err)
  310. return err;
  311. err = f_midi_start_ep(midi, f, midi->out_ep);
  312. if (err)
  313. return err;
  314. if (midi->out_ep->driver_data)
  315. usb_ep_disable(midi->out_ep);
  316. err = config_ep_by_speed(midi->gadget, f, midi->out_ep);
  317. if (err) {
  318. ERROR(cdev, "can't configure %s: %d\n",
  319. midi->out_ep->name, err);
  320. return err;
  321. }
  322. err = usb_ep_enable(midi->out_ep);
  323. if (err) {
  324. ERROR(cdev, "can't start %s: %d\n",
  325. midi->out_ep->name, err);
  326. return err;
  327. }
  328. midi->out_ep->driver_data = midi;
  329. /* allocate a bunch of read buffers and queue them all at once. */
  330. for (i = 0; i < midi->qlen && err == 0; i++) {
  331. struct usb_request *req =
  332. alloc_ep_req(midi->out_ep, midi->buflen);
  333. if (req == NULL)
  334. return -ENOMEM;
  335. req->complete = f_midi_complete;
  336. err = usb_ep_queue(midi->out_ep, req, GFP_ATOMIC);
  337. if (err) {
  338. ERROR(midi, "%s queue req: %d\n",
  339. midi->out_ep->name, err);
  340. }
  341. }
  342. return 0;
  343. }
  344. static void f_midi_disable(struct usb_function *f)
  345. {
  346. struct f_midi *midi = func_to_midi(f);
  347. struct usb_composite_dev *cdev = f->config->cdev;
  348. DBG(cdev, "disable\n");
  349. /*
  350. * just disable endpoints, forcing completion of pending i/o.
  351. * all our completion handlers free their requests in this case.
  352. */
  353. usb_ep_disable(midi->in_ep);
  354. usb_ep_disable(midi->out_ep);
  355. }
  356. static void f_midi_unbind(struct usb_configuration *c, struct usb_function *f)
  357. {
  358. struct usb_composite_dev *cdev = f->config->cdev;
  359. struct f_midi *midi = func_to_midi(f);
  360. struct snd_card *card;
  361. DBG(cdev, "unbind\n");
  362. /* just to be sure */
  363. f_midi_disable(f);
  364. card = midi->card;
  365. midi->card = NULL;
  366. if (card)
  367. snd_card_free(card);
  368. kfree(midi->id);
  369. midi->id = NULL;
  370. usb_free_descriptors(f->descriptors);
  371. kfree(midi);
  372. }
  373. static int f_midi_snd_free(struct snd_device *device)
  374. {
  375. return 0;
  376. }
  377. static void f_midi_transmit_packet(struct usb_request *req, uint8_t p0,
  378. uint8_t p1, uint8_t p2, uint8_t p3)
  379. {
  380. unsigned length = req->length;
  381. u8 *buf = (u8 *)req->buf + length;
  382. buf[0] = p0;
  383. buf[1] = p1;
  384. buf[2] = p2;
  385. buf[3] = p3;
  386. req->length = length + 4;
  387. }
  388. /*
  389. * Converts MIDI commands to USB MIDI packets.
  390. */
  391. static void f_midi_transmit_byte(struct usb_request *req,
  392. struct gmidi_in_port *port, uint8_t b)
  393. {
  394. uint8_t p0 = port->cable << 4;
  395. if (b >= 0xf8) {
  396. f_midi_transmit_packet(req, p0 | 0x0f, b, 0, 0);
  397. } else if (b >= 0xf0) {
  398. switch (b) {
  399. case 0xf0:
  400. port->data[0] = b;
  401. port->state = STATE_SYSEX_1;
  402. break;
  403. case 0xf1:
  404. case 0xf3:
  405. port->data[0] = b;
  406. port->state = STATE_1PARAM;
  407. break;
  408. case 0xf2:
  409. port->data[0] = b;
  410. port->state = STATE_2PARAM_1;
  411. break;
  412. case 0xf4:
  413. case 0xf5:
  414. port->state = STATE_UNKNOWN;
  415. break;
  416. case 0xf6:
  417. f_midi_transmit_packet(req, p0 | 0x05, 0xf6, 0, 0);
  418. port->state = STATE_UNKNOWN;
  419. break;
  420. case 0xf7:
  421. switch (port->state) {
  422. case STATE_SYSEX_0:
  423. f_midi_transmit_packet(req,
  424. p0 | 0x05, 0xf7, 0, 0);
  425. break;
  426. case STATE_SYSEX_1:
  427. f_midi_transmit_packet(req,
  428. p0 | 0x06, port->data[0], 0xf7, 0);
  429. break;
  430. case STATE_SYSEX_2:
  431. f_midi_transmit_packet(req,
  432. p0 | 0x07, port->data[0],
  433. port->data[1], 0xf7);
  434. break;
  435. }
  436. port->state = STATE_UNKNOWN;
  437. break;
  438. }
  439. } else if (b >= 0x80) {
  440. port->data[0] = b;
  441. if (b >= 0xc0 && b <= 0xdf)
  442. port->state = STATE_1PARAM;
  443. else
  444. port->state = STATE_2PARAM_1;
  445. } else { /* b < 0x80 */
  446. switch (port->state) {
  447. case STATE_1PARAM:
  448. if (port->data[0] < 0xf0) {
  449. p0 |= port->data[0] >> 4;
  450. } else {
  451. p0 |= 0x02;
  452. port->state = STATE_UNKNOWN;
  453. }
  454. f_midi_transmit_packet(req, p0, port->data[0], b, 0);
  455. break;
  456. case STATE_2PARAM_1:
  457. port->data[1] = b;
  458. port->state = STATE_2PARAM_2;
  459. break;
  460. case STATE_2PARAM_2:
  461. if (port->data[0] < 0xf0) {
  462. p0 |= port->data[0] >> 4;
  463. port->state = STATE_2PARAM_1;
  464. } else {
  465. p0 |= 0x03;
  466. port->state = STATE_UNKNOWN;
  467. }
  468. f_midi_transmit_packet(req,
  469. p0, port->data[0], port->data[1], b);
  470. break;
  471. case STATE_SYSEX_0:
  472. port->data[0] = b;
  473. port->state = STATE_SYSEX_1;
  474. break;
  475. case STATE_SYSEX_1:
  476. port->data[1] = b;
  477. port->state = STATE_SYSEX_2;
  478. break;
  479. case STATE_SYSEX_2:
  480. f_midi_transmit_packet(req,
  481. p0 | 0x04, port->data[0], port->data[1], b);
  482. port->state = STATE_SYSEX_0;
  483. break;
  484. }
  485. }
  486. }
  487. static void f_midi_transmit(struct f_midi *midi, struct usb_request *req)
  488. {
  489. struct usb_ep *ep = midi->in_ep;
  490. int i;
  491. if (!ep)
  492. return;
  493. if (!req)
  494. req = alloc_ep_req(ep, midi->buflen);
  495. if (!req) {
  496. ERROR(midi, "gmidi_transmit: alloc_ep_request failed\n");
  497. return;
  498. }
  499. req->length = 0;
  500. req->complete = f_midi_complete;
  501. for (i = 0; i < MAX_PORTS; i++) {
  502. struct gmidi_in_port *port = midi->in_port[i];
  503. struct snd_rawmidi_substream *substream = midi->in_substream[i];
  504. if (!port || !port->active || !substream)
  505. continue;
  506. while (req->length + 3 < midi->buflen) {
  507. uint8_t b;
  508. if (snd_rawmidi_transmit(substream, &b, 1) != 1) {
  509. port->active = 0;
  510. break;
  511. }
  512. f_midi_transmit_byte(req, port, b);
  513. }
  514. }
  515. if (req->length > 0)
  516. usb_ep_queue(ep, req, GFP_ATOMIC);
  517. else
  518. free_ep_req(ep, req);
  519. }
  520. static void f_midi_in_tasklet(unsigned long data)
  521. {
  522. struct f_midi *midi = (struct f_midi *) data;
  523. f_midi_transmit(midi, NULL);
  524. }
  525. static int f_midi_in_open(struct snd_rawmidi_substream *substream)
  526. {
  527. struct f_midi *midi = substream->rmidi->private_data;
  528. if (!midi->in_port[substream->number])
  529. return -EINVAL;
  530. VDBG(midi, "%s()\n", __func__);
  531. midi->in_substream[substream->number] = substream;
  532. midi->in_port[substream->number]->state = STATE_UNKNOWN;
  533. return 0;
  534. }
  535. static int f_midi_in_close(struct snd_rawmidi_substream *substream)
  536. {
  537. struct f_midi *midi = substream->rmidi->private_data;
  538. VDBG(midi, "%s()\n", __func__);
  539. return 0;
  540. }
  541. static void f_midi_in_trigger(struct snd_rawmidi_substream *substream, int up)
  542. {
  543. struct f_midi *midi = substream->rmidi->private_data;
  544. if (!midi->in_port[substream->number])
  545. return;
  546. VDBG(midi, "%s() %d\n", __func__, up);
  547. midi->in_port[substream->number]->active = up;
  548. if (up)
  549. tasklet_hi_schedule(&midi->tasklet);
  550. }
  551. static int f_midi_out_open(struct snd_rawmidi_substream *substream)
  552. {
  553. struct f_midi *midi = substream->rmidi->private_data;
  554. if (substream->number >= MAX_PORTS)
  555. return -EINVAL;
  556. VDBG(midi, "%s()\n", __func__);
  557. midi->out_substream[substream->number] = substream;
  558. return 0;
  559. }
  560. static int f_midi_out_close(struct snd_rawmidi_substream *substream)
  561. {
  562. struct f_midi *midi = substream->rmidi->private_data;
  563. VDBG(midi, "%s()\n", __func__);
  564. return 0;
  565. }
  566. static void f_midi_out_trigger(struct snd_rawmidi_substream *substream, int up)
  567. {
  568. struct f_midi *midi = substream->rmidi->private_data;
  569. VDBG(midi, "%s()\n", __func__);
  570. if (up)
  571. set_bit(substream->number, &midi->out_triggered);
  572. else
  573. clear_bit(substream->number, &midi->out_triggered);
  574. }
  575. static struct snd_rawmidi_ops gmidi_in_ops = {
  576. .open = f_midi_in_open,
  577. .close = f_midi_in_close,
  578. .trigger = f_midi_in_trigger,
  579. };
  580. static struct snd_rawmidi_ops gmidi_out_ops = {
  581. .open = f_midi_out_open,
  582. .close = f_midi_out_close,
  583. .trigger = f_midi_out_trigger
  584. };
  585. /* register as a sound "card" */
  586. static int f_midi_register_card(struct f_midi *midi)
  587. {
  588. struct snd_card *card;
  589. struct snd_rawmidi *rmidi;
  590. int err;
  591. static struct snd_device_ops ops = {
  592. .dev_free = f_midi_snd_free,
  593. };
  594. err = snd_card_create(midi->index, midi->id, THIS_MODULE, 0, &card);
  595. if (err < 0) {
  596. ERROR(midi, "snd_card_create() failed\n");
  597. goto fail;
  598. }
  599. midi->card = card;
  600. err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, midi, &ops);
  601. if (err < 0) {
  602. ERROR(midi, "snd_device_new() failed: error %d\n", err);
  603. goto fail;
  604. }
  605. strcpy(card->driver, f_midi_longname);
  606. strcpy(card->longname, f_midi_longname);
  607. strcpy(card->shortname, f_midi_shortname);
  608. /* Set up rawmidi */
  609. snd_component_add(card, "MIDI");
  610. err = snd_rawmidi_new(card, card->longname, 0,
  611. midi->out_ports, midi->in_ports, &rmidi);
  612. if (err < 0) {
  613. ERROR(midi, "snd_rawmidi_new() failed: error %d\n", err);
  614. goto fail;
  615. }
  616. midi->rmidi = rmidi;
  617. strcpy(rmidi->name, card->shortname);
  618. rmidi->info_flags = SNDRV_RAWMIDI_INFO_OUTPUT |
  619. SNDRV_RAWMIDI_INFO_INPUT |
  620. SNDRV_RAWMIDI_INFO_DUPLEX;
  621. rmidi->private_data = midi;
  622. /*
  623. * Yes, rawmidi OUTPUT = USB IN, and rawmidi INPUT = USB OUT.
  624. * It's an upside-down world being a gadget.
  625. */
  626. snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, &gmidi_in_ops);
  627. snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_INPUT, &gmidi_out_ops);
  628. snd_card_set_dev(card, &midi->gadget->dev);
  629. /* register it - we're ready to go */
  630. err = snd_card_register(card);
  631. if (err < 0) {
  632. ERROR(midi, "snd_card_register() failed\n");
  633. goto fail;
  634. }
  635. VDBG(midi, "%s() finished ok\n", __func__);
  636. return 0;
  637. fail:
  638. if (midi->card) {
  639. snd_card_free(midi->card);
  640. midi->card = NULL;
  641. }
  642. return err;
  643. }
  644. /* MIDI function driver setup/binding */
  645. static int __init
  646. f_midi_bind(struct usb_configuration *c, struct usb_function *f)
  647. {
  648. struct usb_descriptor_header *midi_function[(MAX_PORTS * 2) + 12];
  649. struct usb_midi_in_jack_descriptor jack_in_ext_desc[MAX_PORTS];
  650. struct usb_midi_out_jack_descriptor_1 jack_out_ext_desc[MAX_PORTS];
  651. struct usb_composite_dev *cdev = c->cdev;
  652. struct f_midi *midi = func_to_midi(f);
  653. int status, n, jack = 1, i = 0;
  654. /* maybe allocate device-global string ID */
  655. if (midi_string_defs[0].id == 0) {
  656. status = usb_string_id(c->cdev);
  657. if (status < 0)
  658. goto fail;
  659. midi_string_defs[0].id = status;
  660. }
  661. /* We have two interfaces, AudioControl and MIDIStreaming */
  662. status = usb_interface_id(c, f);
  663. if (status < 0)
  664. goto fail;
  665. ac_interface_desc.bInterfaceNumber = status;
  666. status = usb_interface_id(c, f);
  667. if (status < 0)
  668. goto fail;
  669. ms_interface_desc.bInterfaceNumber = status;
  670. ac_header_desc.baInterfaceNr[0] = status;
  671. status = -ENODEV;
  672. /* allocate instance-specific endpoints */
  673. midi->in_ep = usb_ep_autoconfig(cdev->gadget, &bulk_in_desc);
  674. if (!midi->in_ep)
  675. goto fail;
  676. midi->in_ep->driver_data = cdev; /* claim */
  677. midi->out_ep = usb_ep_autoconfig(cdev->gadget, &bulk_out_desc);
  678. if (!midi->out_ep)
  679. goto fail;
  680. midi->out_ep->driver_data = cdev; /* claim */
  681. /*
  682. * construct the function's descriptor set. As the number of
  683. * input and output MIDI ports is configurable, we have to do
  684. * it that way.
  685. */
  686. /* add the headers - these are always the same */
  687. midi_function[i++] = (struct usb_descriptor_header *) &ac_interface_desc;
  688. midi_function[i++] = (struct usb_descriptor_header *) &ac_header_desc;
  689. midi_function[i++] = (struct usb_descriptor_header *) &ms_interface_desc;
  690. /* calculate the header's wTotalLength */
  691. n = USB_DT_MS_HEADER_SIZE
  692. + (1 + midi->in_ports) * USB_DT_MIDI_IN_SIZE
  693. + (1 + midi->out_ports) * USB_DT_MIDI_OUT_SIZE(1);
  694. ms_header_desc.wTotalLength = cpu_to_le16(n);
  695. midi_function[i++] = (struct usb_descriptor_header *) &ms_header_desc;
  696. /* we have one embedded IN jack */
  697. jack_in_emb_desc.bJackID = jack++;
  698. midi_function[i++] = (struct usb_descriptor_header *) &jack_in_emb_desc;
  699. /* and a dynamic amount of external IN jacks */
  700. for (n = 0; n < midi->in_ports; n++) {
  701. struct usb_midi_in_jack_descriptor *ext = &jack_in_ext_desc[n];
  702. ext->bLength = USB_DT_MIDI_IN_SIZE;
  703. ext->bDescriptorType = USB_DT_CS_INTERFACE;
  704. ext->bDescriptorSubtype = USB_MS_MIDI_IN_JACK;
  705. ext->bJackType = USB_MS_EXTERNAL;
  706. ext->bJackID = jack++;
  707. ext->iJack = 0;
  708. midi_function[i++] = (struct usb_descriptor_header *) ext;
  709. }
  710. /* one embedded OUT jack ... */
  711. jack_out_emb_desc.bLength = USB_DT_MIDI_OUT_SIZE(midi->in_ports);
  712. jack_out_emb_desc.bJackID = jack++;
  713. jack_out_emb_desc.bNrInputPins = midi->in_ports;
  714. /* ... which referencess all external IN jacks */
  715. for (n = 0; n < midi->in_ports; n++) {
  716. jack_out_emb_desc.pins[n].baSourceID = jack_in_ext_desc[n].bJackID;
  717. jack_out_emb_desc.pins[n].baSourcePin = 1;
  718. }
  719. midi_function[i++] = (struct usb_descriptor_header *) &jack_out_emb_desc;
  720. /* and multiple external OUT jacks ... */
  721. for (n = 0; n < midi->out_ports; n++) {
  722. struct usb_midi_out_jack_descriptor_1 *ext = &jack_out_ext_desc[n];
  723. int m;
  724. ext->bLength = USB_DT_MIDI_OUT_SIZE(1);
  725. ext->bDescriptorType = USB_DT_CS_INTERFACE;
  726. ext->bDescriptorSubtype = USB_MS_MIDI_OUT_JACK;
  727. ext->bJackType = USB_MS_EXTERNAL;
  728. ext->bJackID = jack++;
  729. ext->bNrInputPins = 1;
  730. ext->iJack = 0;
  731. /* ... which all reference the same embedded IN jack */
  732. for (m = 0; m < midi->out_ports; m++) {
  733. ext->pins[m].baSourceID = jack_in_emb_desc.bJackID;
  734. ext->pins[m].baSourcePin = 1;
  735. }
  736. midi_function[i++] = (struct usb_descriptor_header *) ext;
  737. }
  738. /* configure the endpoint descriptors ... */
  739. ms_out_desc.bLength = USB_DT_MS_ENDPOINT_SIZE(midi->in_ports);
  740. ms_out_desc.bNumEmbMIDIJack = midi->in_ports;
  741. for (n = 0; n < midi->in_ports; n++)
  742. ms_out_desc.baAssocJackID[n] = jack_in_emb_desc.bJackID;
  743. ms_in_desc.bLength = USB_DT_MS_ENDPOINT_SIZE(midi->out_ports);
  744. ms_in_desc.bNumEmbMIDIJack = midi->out_ports;
  745. for (n = 0; n < midi->out_ports; n++)
  746. ms_in_desc.baAssocJackID[n] = jack_out_emb_desc.bJackID;
  747. /* ... and add them to the list */
  748. midi_function[i++] = (struct usb_descriptor_header *) &bulk_out_desc;
  749. midi_function[i++] = (struct usb_descriptor_header *) &ms_out_desc;
  750. midi_function[i++] = (struct usb_descriptor_header *) &bulk_in_desc;
  751. midi_function[i++] = (struct usb_descriptor_header *) &ms_in_desc;
  752. midi_function[i++] = NULL;
  753. /*
  754. * support all relevant hardware speeds... we expect that when
  755. * hardware is dual speed, all bulk-capable endpoints work at
  756. * both speeds
  757. */
  758. /* copy descriptors, and track endpoint copies */
  759. if (gadget_is_dualspeed(c->cdev->gadget)) {
  760. c->highspeed = true;
  761. bulk_in_desc.wMaxPacketSize = cpu_to_le16(512);
  762. bulk_out_desc.wMaxPacketSize = cpu_to_le16(512);
  763. f->hs_descriptors = usb_copy_descriptors(midi_function);
  764. } else {
  765. f->descriptors = usb_copy_descriptors(midi_function);
  766. }
  767. return 0;
  768. fail:
  769. /* we might as well release our claims on endpoints */
  770. if (midi->out_ep)
  771. midi->out_ep->driver_data = NULL;
  772. if (midi->in_ep)
  773. midi->in_ep->driver_data = NULL;
  774. ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
  775. return status;
  776. }
  777. /**
  778. * f_midi_bind_config - add USB MIDI function to a configuration
  779. * @c: the configuration to supcard the USB audio function
  780. * @index: the soundcard index to use for the ALSA device creation
  781. * @id: the soundcard id to use for the ALSA device creation
  782. * @buflen: the buffer length to use
  783. * @qlen the number of read requests to pre-allocate
  784. * Context: single threaded during gadget setup
  785. *
  786. * Returns zero on success, else negative errno.
  787. */
  788. int __init f_midi_bind_config(struct usb_configuration *c,
  789. int index, char *id,
  790. unsigned int in_ports,
  791. unsigned int out_ports,
  792. unsigned int buflen,
  793. unsigned int qlen)
  794. {
  795. struct f_midi *midi;
  796. int status, i;
  797. /* sanity check */
  798. if (in_ports > MAX_PORTS || out_ports > MAX_PORTS)
  799. return -EINVAL;
  800. /* allocate and initialize one new instance */
  801. midi = kzalloc(sizeof *midi, GFP_KERNEL);
  802. if (!midi) {
  803. status = -ENOMEM;
  804. goto fail;
  805. }
  806. for (i = 0; i < in_ports; i++) {
  807. struct gmidi_in_port *port = kzalloc(sizeof(*port), GFP_KERNEL);
  808. if (!port) {
  809. status = -ENOMEM;
  810. goto setup_fail;
  811. }
  812. port->midi = midi;
  813. port->active = 0;
  814. port->cable = i;
  815. midi->in_port[i] = port;
  816. }
  817. midi->gadget = c->cdev->gadget;
  818. tasklet_init(&midi->tasklet, f_midi_in_tasklet, (unsigned long) midi);
  819. /* set up ALSA midi devices */
  820. midi->in_ports = in_ports;
  821. midi->out_ports = out_ports;
  822. status = f_midi_register_card(midi);
  823. if (status < 0)
  824. goto setup_fail;
  825. midi->func.name = "gmidi function";
  826. midi->func.strings = midi_strings;
  827. midi->func.bind = f_midi_bind;
  828. midi->func.unbind = f_midi_unbind;
  829. midi->func.set_alt = f_midi_set_alt;
  830. midi->func.disable = f_midi_disable;
  831. midi->id = kstrdup(id, GFP_KERNEL);
  832. midi->index = index;
  833. midi->buflen = buflen;
  834. midi->qlen = qlen;
  835. status = usb_add_function(c, &midi->func);
  836. if (status)
  837. goto setup_fail;
  838. return 0;
  839. setup_fail:
  840. for (--i; i >= 0; i--)
  841. kfree(midi->in_port[i]);
  842. kfree(midi);
  843. fail:
  844. return status;
  845. }