Merge branch 'for-4.7/acpi6.1' into libnvdimm-for-next
[linux-2.6-block.git] / drivers / usb / gadget / function / f_midi.c
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
22 #include <linux/kernel.h>
23 #include <linux/module.h>
24 #include <linux/slab.h>
25 #include <linux/device.h>
26 #include <linux/kfifo.h>
27 #include <linux/spinlock.h>
28
29 #include <sound/core.h>
30 #include <sound/initval.h>
31 #include <sound/rawmidi.h>
32
33 #include <linux/usb/ch9.h>
34 #include <linux/usb/gadget.h>
35 #include <linux/usb/audio.h>
36 #include <linux/usb/midi.h>
37
38 #include "u_f.h"
39 #include "u_midi.h"
40
41 MODULE_AUTHOR("Ben Williamson");
42 MODULE_LICENSE("GPL v2");
43
44 static const char f_midi_shortname[] = "f_midi";
45 static const char f_midi_longname[] = "MIDI Gadget";
46
47 /*
48  * We can only handle 16 cables on one single endpoint, as cable numbers are
49  * stored in 4-bit fields. And as the interface currently only holds one
50  * single endpoint, this is the maximum number of ports we can allow.
51  */
52 #define MAX_PORTS 16
53
54 /*
55  * This is a gadget, and the IN/OUT naming is from the host's perspective.
56  * USB -> OUT endpoint -> rawmidi
57  * USB <- IN endpoint  <- rawmidi
58  */
59 struct gmidi_in_port {
60         struct snd_rawmidi_substream *substream;
61         int active;
62         uint8_t cable;
63         uint8_t state;
64 #define STATE_UNKNOWN   0
65 #define STATE_1PARAM    1
66 #define STATE_2PARAM_1  2
67 #define STATE_2PARAM_2  3
68 #define STATE_SYSEX_0   4
69 #define STATE_SYSEX_1   5
70 #define STATE_SYSEX_2   6
71         uint8_t data[2];
72 };
73
74 struct f_midi {
75         struct usb_function     func;
76         struct usb_gadget       *gadget;
77         struct usb_ep           *in_ep, *out_ep;
78         struct snd_card         *card;
79         struct snd_rawmidi      *rmidi;
80         u8                      ms_id;
81
82         struct snd_rawmidi_substream *out_substream[MAX_PORTS];
83
84         unsigned long           out_triggered;
85         struct tasklet_struct   tasklet;
86         unsigned int in_ports;
87         unsigned int out_ports;
88         int index;
89         char *id;
90         unsigned int buflen, qlen;
91         /* This fifo is used as a buffer ring for pre-allocated IN usb_requests */
92         DECLARE_KFIFO_PTR(in_req_fifo, struct usb_request *);
93         spinlock_t transmit_lock;
94         unsigned int in_last_port;
95
96         struct gmidi_in_port    in_ports_array[/* in_ports */];
97 };
98
99 static inline struct f_midi *func_to_midi(struct usb_function *f)
100 {
101         return container_of(f, struct f_midi, func);
102 }
103
104 static void f_midi_transmit(struct f_midi *midi);
105
106 DECLARE_UAC_AC_HEADER_DESCRIPTOR(1);
107 DECLARE_USB_MIDI_OUT_JACK_DESCRIPTOR(1);
108 DECLARE_USB_MS_ENDPOINT_DESCRIPTOR(16);
109
110 /* B.3.1  Standard AC Interface Descriptor */
111 static struct usb_interface_descriptor ac_interface_desc = {
112         .bLength =              USB_DT_INTERFACE_SIZE,
113         .bDescriptorType =      USB_DT_INTERFACE,
114         /* .bInterfaceNumber =  DYNAMIC */
115         /* .bNumEndpoints =     DYNAMIC */
116         .bInterfaceClass =      USB_CLASS_AUDIO,
117         .bInterfaceSubClass =   USB_SUBCLASS_AUDIOCONTROL,
118         /* .iInterface =        DYNAMIC */
119 };
120
121 /* B.3.2  Class-Specific AC Interface Descriptor */
122 static struct uac1_ac_header_descriptor_1 ac_header_desc = {
123         .bLength =              UAC_DT_AC_HEADER_SIZE(1),
124         .bDescriptorType =      USB_DT_CS_INTERFACE,
125         .bDescriptorSubtype =   USB_MS_HEADER,
126         .bcdADC =               cpu_to_le16(0x0100),
127         .wTotalLength =         cpu_to_le16(UAC_DT_AC_HEADER_SIZE(1)),
128         .bInCollection =        1,
129         /* .baInterfaceNr =     DYNAMIC */
130 };
131
132 /* B.4.1  Standard MS Interface Descriptor */
133 static struct usb_interface_descriptor ms_interface_desc = {
134         .bLength =              USB_DT_INTERFACE_SIZE,
135         .bDescriptorType =      USB_DT_INTERFACE,
136         /* .bInterfaceNumber =  DYNAMIC */
137         .bNumEndpoints =        2,
138         .bInterfaceClass =      USB_CLASS_AUDIO,
139         .bInterfaceSubClass =   USB_SUBCLASS_MIDISTREAMING,
140         /* .iInterface =        DYNAMIC */
141 };
142
143 /* B.4.2  Class-Specific MS Interface Descriptor */
144 static struct usb_ms_header_descriptor ms_header_desc = {
145         .bLength =              USB_DT_MS_HEADER_SIZE,
146         .bDescriptorType =      USB_DT_CS_INTERFACE,
147         .bDescriptorSubtype =   USB_MS_HEADER,
148         .bcdMSC =               cpu_to_le16(0x0100),
149         /* .wTotalLength =      DYNAMIC */
150 };
151
152 /* B.5.1  Standard Bulk OUT Endpoint Descriptor */
153 static struct usb_endpoint_descriptor bulk_out_desc = {
154         .bLength =              USB_DT_ENDPOINT_AUDIO_SIZE,
155         .bDescriptorType =      USB_DT_ENDPOINT,
156         .bEndpointAddress =     USB_DIR_OUT,
157         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
158 };
159
160 /* B.5.2  Class-specific MS Bulk OUT Endpoint Descriptor */
161 static struct usb_ms_endpoint_descriptor_16 ms_out_desc = {
162         /* .bLength =           DYNAMIC */
163         .bDescriptorType =      USB_DT_CS_ENDPOINT,
164         .bDescriptorSubtype =   USB_MS_GENERAL,
165         /* .bNumEmbMIDIJack =   DYNAMIC */
166         /* .baAssocJackID =     DYNAMIC */
167 };
168
169 /* B.6.1  Standard Bulk IN Endpoint Descriptor */
170 static struct usb_endpoint_descriptor bulk_in_desc = {
171         .bLength =              USB_DT_ENDPOINT_AUDIO_SIZE,
172         .bDescriptorType =      USB_DT_ENDPOINT,
173         .bEndpointAddress =     USB_DIR_IN,
174         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
175 };
176
177 /* B.6.2  Class-specific MS Bulk IN Endpoint Descriptor */
178 static struct usb_ms_endpoint_descriptor_16 ms_in_desc = {
179         /* .bLength =           DYNAMIC */
180         .bDescriptorType =      USB_DT_CS_ENDPOINT,
181         .bDescriptorSubtype =   USB_MS_GENERAL,
182         /* .bNumEmbMIDIJack =   DYNAMIC */
183         /* .baAssocJackID =     DYNAMIC */
184 };
185
186 /* string IDs are assigned dynamically */
187
188 #define STRING_FUNC_IDX                 0
189
190 static struct usb_string midi_string_defs[] = {
191         [STRING_FUNC_IDX].s = "MIDI function",
192         {  } /* end of list */
193 };
194
195 static struct usb_gadget_strings midi_stringtab = {
196         .language       = 0x0409,       /* en-us */
197         .strings        = midi_string_defs,
198 };
199
200 static struct usb_gadget_strings *midi_strings[] = {
201         &midi_stringtab,
202         NULL,
203 };
204
205 static inline struct usb_request *midi_alloc_ep_req(struct usb_ep *ep,
206                                                     unsigned length)
207 {
208         return alloc_ep_req(ep, length, length);
209 }
210
211 static const uint8_t f_midi_cin_length[] = {
212         0, 0, 2, 3, 3, 1, 2, 3, 3, 3, 3, 3, 2, 2, 3, 1
213 };
214
215 /*
216  * Receives a chunk of MIDI data.
217  */
218 static void f_midi_read_data(struct usb_ep *ep, int cable,
219                              uint8_t *data, int length)
220 {
221         struct f_midi *midi = ep->driver_data;
222         struct snd_rawmidi_substream *substream = midi->out_substream[cable];
223
224         if (!substream)
225                 /* Nobody is listening - throw it on the floor. */
226                 return;
227
228         if (!test_bit(cable, &midi->out_triggered))
229                 return;
230
231         snd_rawmidi_receive(substream, data, length);
232 }
233
234 static void f_midi_handle_out_data(struct usb_ep *ep, struct usb_request *req)
235 {
236         unsigned int i;
237         u8 *buf = req->buf;
238
239         for (i = 0; i + 3 < req->actual; i += 4)
240                 if (buf[i] != 0) {
241                         int cable = buf[i] >> 4;
242                         int length = f_midi_cin_length[buf[i] & 0x0f];
243                         f_midi_read_data(ep, cable, &buf[i + 1], length);
244                 }
245 }
246
247 static void
248 f_midi_complete(struct usb_ep *ep, struct usb_request *req)
249 {
250         struct f_midi *midi = ep->driver_data;
251         struct usb_composite_dev *cdev = midi->func.config->cdev;
252         int status = req->status;
253
254         switch (status) {
255         case 0:                  /* normal completion */
256                 if (ep == midi->out_ep) {
257                         /* We received stuff. req is queued again, below */
258                         f_midi_handle_out_data(ep, req);
259                 } else if (ep == midi->in_ep) {
260                         /* Our transmit completed. See if there's more to go.
261                          * f_midi_transmit eats req, don't queue it again. */
262                         req->length = 0;
263                         f_midi_transmit(midi);
264                         return;
265                 }
266                 break;
267
268         /* this endpoint is normally active while we're configured */
269         case -ECONNABORTED:     /* hardware forced ep reset */
270         case -ECONNRESET:       /* request dequeued */
271         case -ESHUTDOWN:        /* disconnect from host */
272                 VDBG(cdev, "%s gone (%d), %d/%d\n", ep->name, status,
273                                 req->actual, req->length);
274                 if (ep == midi->out_ep) {
275                         f_midi_handle_out_data(ep, req);
276                         /* We don't need to free IN requests because it's handled
277                          * by the midi->in_req_fifo. */
278                         free_ep_req(ep, req);
279                 }
280                 return;
281
282         case -EOVERFLOW:        /* buffer overrun on read means that
283                                  * we didn't provide a big enough buffer.
284                                  */
285         default:
286                 DBG(cdev, "%s complete --> %d, %d/%d\n", ep->name,
287                                 status, req->actual, req->length);
288                 break;
289         case -EREMOTEIO:        /* short read */
290                 break;
291         }
292
293         status = usb_ep_queue(ep, req, GFP_ATOMIC);
294         if (status) {
295                 ERROR(cdev, "kill %s:  resubmit %d bytes --> %d\n",
296                                 ep->name, req->length, status);
297                 usb_ep_set_halt(ep);
298                 /* FIXME recover later ... somehow */
299         }
300 }
301
302 static int f_midi_start_ep(struct f_midi *midi,
303                            struct usb_function *f,
304                            struct usb_ep *ep)
305 {
306         int err;
307         struct usb_composite_dev *cdev = f->config->cdev;
308
309         usb_ep_disable(ep);
310
311         err = config_ep_by_speed(midi->gadget, f, ep);
312         if (err) {
313                 ERROR(cdev, "can't configure %s: %d\n", ep->name, err);
314                 return err;
315         }
316
317         err = usb_ep_enable(ep);
318         if (err) {
319                 ERROR(cdev, "can't start %s: %d\n", ep->name, err);
320                 return err;
321         }
322
323         ep->driver_data = midi;
324
325         return 0;
326 }
327
328 static int f_midi_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
329 {
330         struct f_midi *midi = func_to_midi(f);
331         unsigned i;
332         int err;
333
334         /* we only set alt for MIDIStreaming interface */
335         if (intf != midi->ms_id)
336                 return 0;
337
338         err = f_midi_start_ep(midi, f, midi->in_ep);
339         if (err)
340                 return err;
341
342         err = f_midi_start_ep(midi, f, midi->out_ep);
343         if (err)
344                 return err;
345
346         /* pre-allocate write usb requests to use on f_midi_transmit. */
347         while (kfifo_avail(&midi->in_req_fifo)) {
348                 struct usb_request *req =
349                         midi_alloc_ep_req(midi->in_ep, midi->buflen);
350
351                 if (req == NULL)
352                         return -ENOMEM;
353
354                 req->length = 0;
355                 req->complete = f_midi_complete;
356
357                 kfifo_put(&midi->in_req_fifo, req);
358         }
359
360         /* allocate a bunch of read buffers and queue them all at once. */
361         for (i = 0; i < midi->qlen && err == 0; i++) {
362                 struct usb_request *req =
363                         midi_alloc_ep_req(midi->out_ep,
364                                 max_t(unsigned, midi->buflen,
365                                         bulk_out_desc.wMaxPacketSize));
366                 if (req == NULL)
367                         return -ENOMEM;
368
369                 req->complete = f_midi_complete;
370                 err = usb_ep_queue(midi->out_ep, req, GFP_ATOMIC);
371                 if (err) {
372                         ERROR(midi, "%s: couldn't enqueue request: %d\n",
373                                     midi->out_ep->name, err);
374                         free_ep_req(midi->out_ep, req);
375                         return err;
376                 }
377         }
378
379         return 0;
380 }
381
382 static void f_midi_disable(struct usb_function *f)
383 {
384         struct f_midi *midi = func_to_midi(f);
385         struct usb_composite_dev *cdev = f->config->cdev;
386         struct usb_request *req = NULL;
387
388         DBG(cdev, "disable\n");
389
390         /*
391          * just disable endpoints, forcing completion of pending i/o.
392          * all our completion handlers free their requests in this case.
393          */
394         usb_ep_disable(midi->in_ep);
395         usb_ep_disable(midi->out_ep);
396
397         /* release IN requests */
398         while (kfifo_get(&midi->in_req_fifo, &req))
399                 free_ep_req(midi->in_ep, req);
400 }
401
402 static int f_midi_snd_free(struct snd_device *device)
403 {
404         return 0;
405 }
406
407 static void f_midi_transmit_packet(struct usb_request *req, uint8_t p0,
408                                         uint8_t p1, uint8_t p2, uint8_t p3)
409 {
410         unsigned length = req->length;
411         u8 *buf = (u8 *)req->buf + length;
412
413         buf[0] = p0;
414         buf[1] = p1;
415         buf[2] = p2;
416         buf[3] = p3;
417         req->length = length + 4;
418 }
419
420 /*
421  * Converts MIDI commands to USB MIDI packets.
422  */
423 static void f_midi_transmit_byte(struct usb_request *req,
424                                  struct gmidi_in_port *port, uint8_t b)
425 {
426         uint8_t p0 = port->cable << 4;
427
428         if (b >= 0xf8) {
429                 f_midi_transmit_packet(req, p0 | 0x0f, b, 0, 0);
430         } else if (b >= 0xf0) {
431                 switch (b) {
432                 case 0xf0:
433                         port->data[0] = b;
434                         port->state = STATE_SYSEX_1;
435                         break;
436                 case 0xf1:
437                 case 0xf3:
438                         port->data[0] = b;
439                         port->state = STATE_1PARAM;
440                         break;
441                 case 0xf2:
442                         port->data[0] = b;
443                         port->state = STATE_2PARAM_1;
444                         break;
445                 case 0xf4:
446                 case 0xf5:
447                         port->state = STATE_UNKNOWN;
448                         break;
449                 case 0xf6:
450                         f_midi_transmit_packet(req, p0 | 0x05, 0xf6, 0, 0);
451                         port->state = STATE_UNKNOWN;
452                         break;
453                 case 0xf7:
454                         switch (port->state) {
455                         case STATE_SYSEX_0:
456                                 f_midi_transmit_packet(req,
457                                         p0 | 0x05, 0xf7, 0, 0);
458                                 break;
459                         case STATE_SYSEX_1:
460                                 f_midi_transmit_packet(req,
461                                         p0 | 0x06, port->data[0], 0xf7, 0);
462                                 break;
463                         case STATE_SYSEX_2:
464                                 f_midi_transmit_packet(req,
465                                         p0 | 0x07, port->data[0],
466                                         port->data[1], 0xf7);
467                                 break;
468                         }
469                         port->state = STATE_UNKNOWN;
470                         break;
471                 }
472         } else if (b >= 0x80) {
473                 port->data[0] = b;
474                 if (b >= 0xc0 && b <= 0xdf)
475                         port->state = STATE_1PARAM;
476                 else
477                         port->state = STATE_2PARAM_1;
478         } else { /* b < 0x80 */
479                 switch (port->state) {
480                 case STATE_1PARAM:
481                         if (port->data[0] < 0xf0) {
482                                 p0 |= port->data[0] >> 4;
483                         } else {
484                                 p0 |= 0x02;
485                                 port->state = STATE_UNKNOWN;
486                         }
487                         f_midi_transmit_packet(req, p0, port->data[0], b, 0);
488                         break;
489                 case STATE_2PARAM_1:
490                         port->data[1] = b;
491                         port->state = STATE_2PARAM_2;
492                         break;
493                 case STATE_2PARAM_2:
494                         if (port->data[0] < 0xf0) {
495                                 p0 |= port->data[0] >> 4;
496                                 port->state = STATE_2PARAM_1;
497                         } else {
498                                 p0 |= 0x03;
499                                 port->state = STATE_UNKNOWN;
500                         }
501                         f_midi_transmit_packet(req,
502                                 p0, port->data[0], port->data[1], b);
503                         break;
504                 case STATE_SYSEX_0:
505                         port->data[0] = b;
506                         port->state = STATE_SYSEX_1;
507                         break;
508                 case STATE_SYSEX_1:
509                         port->data[1] = b;
510                         port->state = STATE_SYSEX_2;
511                         break;
512                 case STATE_SYSEX_2:
513                         f_midi_transmit_packet(req,
514                                 p0 | 0x04, port->data[0], port->data[1], b);
515                         port->state = STATE_SYSEX_0;
516                         break;
517                 }
518         }
519 }
520
521 static void f_midi_drop_out_substreams(struct f_midi *midi)
522 {
523         unsigned int i;
524
525         for (i = 0; i < midi->in_ports; i++) {
526                 struct gmidi_in_port *port = midi->in_ports_array + i;
527                 struct snd_rawmidi_substream *substream = port->substream;
528                 if (port->active && substream)
529                         snd_rawmidi_drop_output(substream);
530         }
531 }
532
533 static int f_midi_do_transmit(struct f_midi *midi, struct usb_ep *ep)
534 {
535         struct usb_request *req = NULL;
536         unsigned int len, i;
537         bool active = false;
538         int err;
539
540         /*
541          * We peek the request in order to reuse it if it fails to enqueue on
542          * its endpoint
543          */
544         len = kfifo_peek(&midi->in_req_fifo, &req);
545         if (len != 1) {
546                 ERROR(midi, "%s: Couldn't get usb request\n", __func__);
547                 return -1;
548         }
549
550         /*
551          * If buffer overrun, then we ignore this transmission.
552          * IMPORTANT: This will cause the user-space rawmidi device to block
553          * until a) usb requests have been completed or b) snd_rawmidi_write()
554          * times out.
555          */
556         if (req->length > 0)
557                 return 0;
558
559         for (i = midi->in_last_port; i < midi->in_ports; ++i) {
560                 struct gmidi_in_port *port = midi->in_ports_array + i;
561                 struct snd_rawmidi_substream *substream = port->substream;
562
563                 if (!port->active || !substream)
564                         continue;
565
566                 while (req->length + 3 < midi->buflen) {
567                         uint8_t b;
568
569                         if (snd_rawmidi_transmit(substream, &b, 1) != 1) {
570                                 port->active = 0;
571                                 break;
572                         }
573                         f_midi_transmit_byte(req, port, b);
574                 }
575
576                 active = !!port->active;
577                 if (active)
578                         break;
579         }
580         midi->in_last_port = active ? i : 0;
581
582         if (req->length <= 0)
583                 goto done;
584
585         err = usb_ep_queue(ep, req, GFP_ATOMIC);
586         if (err < 0) {
587                 ERROR(midi, "%s failed to queue req: %d\n",
588                       midi->in_ep->name, err);
589                 req->length = 0; /* Re-use request next time. */
590         } else {
591                 /* Upon success, put request at the back of the queue. */
592                 kfifo_skip(&midi->in_req_fifo);
593                 kfifo_put(&midi->in_req_fifo, req);
594         }
595
596 done:
597         return active;
598 }
599
600 static void f_midi_transmit(struct f_midi *midi)
601 {
602         struct usb_ep *ep = midi->in_ep;
603         int ret;
604         unsigned long flags;
605
606         /* We only care about USB requests if IN endpoint is enabled */
607         if (!ep || !ep->enabled)
608                 goto drop_out;
609
610         spin_lock_irqsave(&midi->transmit_lock, flags);
611
612         do {
613                 ret = f_midi_do_transmit(midi, ep);
614                 if (ret < 0) {
615                         spin_unlock_irqrestore(&midi->transmit_lock, flags);
616                         goto drop_out;
617                 }
618         } while (ret);
619
620         spin_unlock_irqrestore(&midi->transmit_lock, flags);
621
622         return;
623
624 drop_out:
625         f_midi_drop_out_substreams(midi);
626 }
627
628 static void f_midi_in_tasklet(unsigned long data)
629 {
630         struct f_midi *midi = (struct f_midi *) data;
631         f_midi_transmit(midi);
632 }
633
634 static int f_midi_in_open(struct snd_rawmidi_substream *substream)
635 {
636         struct f_midi *midi = substream->rmidi->private_data;
637         struct gmidi_in_port *port;
638
639         if (substream->number >= midi->in_ports)
640                 return -EINVAL;
641
642         VDBG(midi, "%s()\n", __func__);
643         port = midi->in_ports_array + substream->number;
644         port->substream = substream;
645         port->state = STATE_UNKNOWN;
646         return 0;
647 }
648
649 static int f_midi_in_close(struct snd_rawmidi_substream *substream)
650 {
651         struct f_midi *midi = substream->rmidi->private_data;
652
653         VDBG(midi, "%s()\n", __func__);
654         return 0;
655 }
656
657 static void f_midi_in_trigger(struct snd_rawmidi_substream *substream, int up)
658 {
659         struct f_midi *midi = substream->rmidi->private_data;
660
661         if (substream->number >= midi->in_ports)
662                 return;
663
664         VDBG(midi, "%s() %d\n", __func__, up);
665         midi->in_ports_array[substream->number].active = up;
666         if (up)
667                 tasklet_hi_schedule(&midi->tasklet);
668 }
669
670 static int f_midi_out_open(struct snd_rawmidi_substream *substream)
671 {
672         struct f_midi *midi = substream->rmidi->private_data;
673
674         if (substream->number >= MAX_PORTS)
675                 return -EINVAL;
676
677         VDBG(midi, "%s()\n", __func__);
678         midi->out_substream[substream->number] = substream;
679         return 0;
680 }
681
682 static int f_midi_out_close(struct snd_rawmidi_substream *substream)
683 {
684         struct f_midi *midi = substream->rmidi->private_data;
685
686         VDBG(midi, "%s()\n", __func__);
687         return 0;
688 }
689
690 static void f_midi_out_trigger(struct snd_rawmidi_substream *substream, int up)
691 {
692         struct f_midi *midi = substream->rmidi->private_data;
693
694         VDBG(midi, "%s()\n", __func__);
695
696         if (up)
697                 set_bit(substream->number, &midi->out_triggered);
698         else
699                 clear_bit(substream->number, &midi->out_triggered);
700 }
701
702 static struct snd_rawmidi_ops gmidi_in_ops = {
703         .open = f_midi_in_open,
704         .close = f_midi_in_close,
705         .trigger = f_midi_in_trigger,
706 };
707
708 static struct snd_rawmidi_ops gmidi_out_ops = {
709         .open = f_midi_out_open,
710         .close = f_midi_out_close,
711         .trigger = f_midi_out_trigger
712 };
713
714 static inline void f_midi_unregister_card(struct f_midi *midi)
715 {
716         if (midi->card) {
717                 snd_card_free(midi->card);
718                 midi->card = NULL;
719         }
720 }
721
722 /* register as a sound "card" */
723 static int f_midi_register_card(struct f_midi *midi)
724 {
725         struct snd_card *card;
726         struct snd_rawmidi *rmidi;
727         int err;
728         static struct snd_device_ops ops = {
729                 .dev_free = f_midi_snd_free,
730         };
731
732         err = snd_card_new(&midi->gadget->dev, midi->index, midi->id,
733                            THIS_MODULE, 0, &card);
734         if (err < 0) {
735                 ERROR(midi, "snd_card_new() failed\n");
736                 goto fail;
737         }
738         midi->card = card;
739
740         err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, midi, &ops);
741         if (err < 0) {
742                 ERROR(midi, "snd_device_new() failed: error %d\n", err);
743                 goto fail;
744         }
745
746         strcpy(card->driver, f_midi_longname);
747         strcpy(card->longname, f_midi_longname);
748         strcpy(card->shortname, f_midi_shortname);
749
750         /* Set up rawmidi */
751         snd_component_add(card, "MIDI");
752         err = snd_rawmidi_new(card, card->longname, 0,
753                               midi->out_ports, midi->in_ports, &rmidi);
754         if (err < 0) {
755                 ERROR(midi, "snd_rawmidi_new() failed: error %d\n", err);
756                 goto fail;
757         }
758         midi->rmidi = rmidi;
759         midi->in_last_port = 0;
760         strcpy(rmidi->name, card->shortname);
761         rmidi->info_flags = SNDRV_RAWMIDI_INFO_OUTPUT |
762                             SNDRV_RAWMIDI_INFO_INPUT |
763                             SNDRV_RAWMIDI_INFO_DUPLEX;
764         rmidi->private_data = midi;
765
766         /*
767          * Yes, rawmidi OUTPUT = USB IN, and rawmidi INPUT = USB OUT.
768          * It's an upside-down world being a gadget.
769          */
770         snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, &gmidi_in_ops);
771         snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_INPUT, &gmidi_out_ops);
772
773         /* register it - we're ready to go */
774         err = snd_card_register(card);
775         if (err < 0) {
776                 ERROR(midi, "snd_card_register() failed\n");
777                 goto fail;
778         }
779
780         VDBG(midi, "%s() finished ok\n", __func__);
781         return 0;
782
783 fail:
784         f_midi_unregister_card(midi);
785         return err;
786 }
787
788 /* MIDI function driver setup/binding */
789
790 static int f_midi_bind(struct usb_configuration *c, struct usb_function *f)
791 {
792         struct usb_descriptor_header **midi_function;
793         struct usb_midi_in_jack_descriptor jack_in_ext_desc[MAX_PORTS];
794         struct usb_midi_in_jack_descriptor jack_in_emb_desc[MAX_PORTS];
795         struct usb_midi_out_jack_descriptor_1 jack_out_ext_desc[MAX_PORTS];
796         struct usb_midi_out_jack_descriptor_1 jack_out_emb_desc[MAX_PORTS];
797         struct usb_composite_dev *cdev = c->cdev;
798         struct f_midi *midi = func_to_midi(f);
799         struct usb_string *us;
800         int status, n, jack = 1, i = 0;
801
802         midi->gadget = cdev->gadget;
803         tasklet_init(&midi->tasklet, f_midi_in_tasklet, (unsigned long) midi);
804         status = f_midi_register_card(midi);
805         if (status < 0)
806                 goto fail_register;
807
808         /* maybe allocate device-global string ID */
809         us = usb_gstrings_attach(c->cdev, midi_strings,
810                                  ARRAY_SIZE(midi_string_defs));
811         if (IS_ERR(us)) {
812                 status = PTR_ERR(us);
813                 goto fail;
814         }
815         ac_interface_desc.iInterface = us[STRING_FUNC_IDX].id;
816
817         /* We have two interfaces, AudioControl and MIDIStreaming */
818         status = usb_interface_id(c, f);
819         if (status < 0)
820                 goto fail;
821         ac_interface_desc.bInterfaceNumber = status;
822
823         status = usb_interface_id(c, f);
824         if (status < 0)
825                 goto fail;
826         ms_interface_desc.bInterfaceNumber = status;
827         ac_header_desc.baInterfaceNr[0] = status;
828         midi->ms_id = status;
829
830         status = -ENODEV;
831
832         /* allocate instance-specific endpoints */
833         midi->in_ep = usb_ep_autoconfig(cdev->gadget, &bulk_in_desc);
834         if (!midi->in_ep)
835                 goto fail;
836
837         midi->out_ep = usb_ep_autoconfig(cdev->gadget, &bulk_out_desc);
838         if (!midi->out_ep)
839                 goto fail;
840
841         /* allocate temporary function list */
842         midi_function = kcalloc((MAX_PORTS * 4) + 9, sizeof(*midi_function),
843                                 GFP_KERNEL);
844         if (!midi_function) {
845                 status = -ENOMEM;
846                 goto fail;
847         }
848
849         /*
850          * construct the function's descriptor set. As the number of
851          * input and output MIDI ports is configurable, we have to do
852          * it that way.
853          */
854
855         /* add the headers - these are always the same */
856         midi_function[i++] = (struct usb_descriptor_header *) &ac_interface_desc;
857         midi_function[i++] = (struct usb_descriptor_header *) &ac_header_desc;
858         midi_function[i++] = (struct usb_descriptor_header *) &ms_interface_desc;
859
860         /* calculate the header's wTotalLength */
861         n = USB_DT_MS_HEADER_SIZE
862                 + (midi->in_ports + midi->out_ports) *
863                         (USB_DT_MIDI_IN_SIZE + USB_DT_MIDI_OUT_SIZE(1));
864         ms_header_desc.wTotalLength = cpu_to_le16(n);
865
866         midi_function[i++] = (struct usb_descriptor_header *) &ms_header_desc;
867
868         /* configure the external IN jacks, each linked to an embedded OUT jack */
869         for (n = 0; n < midi->in_ports; n++) {
870                 struct usb_midi_in_jack_descriptor *in_ext = &jack_in_ext_desc[n];
871                 struct usb_midi_out_jack_descriptor_1 *out_emb = &jack_out_emb_desc[n];
872
873                 in_ext->bLength                 = USB_DT_MIDI_IN_SIZE;
874                 in_ext->bDescriptorType         = USB_DT_CS_INTERFACE;
875                 in_ext->bDescriptorSubtype      = USB_MS_MIDI_IN_JACK;
876                 in_ext->bJackType               = USB_MS_EXTERNAL;
877                 in_ext->bJackID                 = jack++;
878                 in_ext->iJack                   = 0;
879                 midi_function[i++] = (struct usb_descriptor_header *) in_ext;
880
881                 out_emb->bLength                = USB_DT_MIDI_OUT_SIZE(1);
882                 out_emb->bDescriptorType        = USB_DT_CS_INTERFACE;
883                 out_emb->bDescriptorSubtype     = USB_MS_MIDI_OUT_JACK;
884                 out_emb->bJackType              = USB_MS_EMBEDDED;
885                 out_emb->bJackID                = jack++;
886                 out_emb->bNrInputPins           = 1;
887                 out_emb->pins[0].baSourcePin    = 1;
888                 out_emb->pins[0].baSourceID     = in_ext->bJackID;
889                 out_emb->iJack                  = 0;
890                 midi_function[i++] = (struct usb_descriptor_header *) out_emb;
891
892                 /* link it to the endpoint */
893                 ms_in_desc.baAssocJackID[n] = out_emb->bJackID;
894         }
895
896         /* configure the external OUT jacks, each linked to an embedded IN jack */
897         for (n = 0; n < midi->out_ports; n++) {
898                 struct usb_midi_in_jack_descriptor *in_emb = &jack_in_emb_desc[n];
899                 struct usb_midi_out_jack_descriptor_1 *out_ext = &jack_out_ext_desc[n];
900
901                 in_emb->bLength                 = USB_DT_MIDI_IN_SIZE;
902                 in_emb->bDescriptorType         = USB_DT_CS_INTERFACE;
903                 in_emb->bDescriptorSubtype      = USB_MS_MIDI_IN_JACK;
904                 in_emb->bJackType               = USB_MS_EMBEDDED;
905                 in_emb->bJackID                 = jack++;
906                 in_emb->iJack                   = 0;
907                 midi_function[i++] = (struct usb_descriptor_header *) in_emb;
908
909                 out_ext->bLength =              USB_DT_MIDI_OUT_SIZE(1);
910                 out_ext->bDescriptorType =      USB_DT_CS_INTERFACE;
911                 out_ext->bDescriptorSubtype =   USB_MS_MIDI_OUT_JACK;
912                 out_ext->bJackType =            USB_MS_EXTERNAL;
913                 out_ext->bJackID =              jack++;
914                 out_ext->bNrInputPins =         1;
915                 out_ext->iJack =                0;
916                 out_ext->pins[0].baSourceID =   in_emb->bJackID;
917                 out_ext->pins[0].baSourcePin =  1;
918                 midi_function[i++] = (struct usb_descriptor_header *) out_ext;
919
920                 /* link it to the endpoint */
921                 ms_out_desc.baAssocJackID[n] = in_emb->bJackID;
922         }
923
924         /* configure the endpoint descriptors ... */
925         ms_out_desc.bLength = USB_DT_MS_ENDPOINT_SIZE(midi->in_ports);
926         ms_out_desc.bNumEmbMIDIJack = midi->in_ports;
927
928         ms_in_desc.bLength = USB_DT_MS_ENDPOINT_SIZE(midi->out_ports);
929         ms_in_desc.bNumEmbMIDIJack = midi->out_ports;
930
931         /* ... and add them to the list */
932         midi_function[i++] = (struct usb_descriptor_header *) &bulk_out_desc;
933         midi_function[i++] = (struct usb_descriptor_header *) &ms_out_desc;
934         midi_function[i++] = (struct usb_descriptor_header *) &bulk_in_desc;
935         midi_function[i++] = (struct usb_descriptor_header *) &ms_in_desc;
936         midi_function[i++] = NULL;
937
938         /*
939          * support all relevant hardware speeds... we expect that when
940          * hardware is dual speed, all bulk-capable endpoints work at
941          * both speeds
942          */
943         /* copy descriptors, and track endpoint copies */
944         f->fs_descriptors = usb_copy_descriptors(midi_function);
945         if (!f->fs_descriptors)
946                 goto fail_f_midi;
947
948         if (gadget_is_dualspeed(c->cdev->gadget)) {
949                 bulk_in_desc.wMaxPacketSize = cpu_to_le16(512);
950                 bulk_out_desc.wMaxPacketSize = cpu_to_le16(512);
951                 f->hs_descriptors = usb_copy_descriptors(midi_function);
952                 if (!f->hs_descriptors)
953                         goto fail_f_midi;
954         }
955
956         kfree(midi_function);
957
958         return 0;
959
960 fail_f_midi:
961         kfree(midi_function);
962         usb_free_descriptors(f->hs_descriptors);
963 fail:
964         f_midi_unregister_card(midi);
965 fail_register:
966         ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
967
968         return status;
969 }
970
971 static inline struct f_midi_opts *to_f_midi_opts(struct config_item *item)
972 {
973         return container_of(to_config_group(item), struct f_midi_opts,
974                             func_inst.group);
975 }
976
977 static void midi_attr_release(struct config_item *item)
978 {
979         struct f_midi_opts *opts = to_f_midi_opts(item);
980
981         usb_put_function_instance(&opts->func_inst);
982 }
983
984 static struct configfs_item_operations midi_item_ops = {
985         .release        = midi_attr_release,
986 };
987
988 #define F_MIDI_OPT(name, test_limit, limit)                             \
989 static ssize_t f_midi_opts_##name##_show(struct config_item *item, char *page) \
990 {                                                                       \
991         struct f_midi_opts *opts = to_f_midi_opts(item);                \
992         int result;                                                     \
993                                                                         \
994         mutex_lock(&opts->lock);                                        \
995         result = sprintf(page, "%d\n", opts->name);                     \
996         mutex_unlock(&opts->lock);                                      \
997                                                                         \
998         return result;                                                  \
999 }                                                                       \
1000                                                                         \
1001 static ssize_t f_midi_opts_##name##_store(struct config_item *item,     \
1002                                          const char *page, size_t len)  \
1003 {                                                                       \
1004         struct f_midi_opts *opts = to_f_midi_opts(item);                \
1005         int ret;                                                        \
1006         u32 num;                                                        \
1007                                                                         \
1008         mutex_lock(&opts->lock);                                        \
1009         if (opts->refcnt) {                                             \
1010                 ret = -EBUSY;                                           \
1011                 goto end;                                               \
1012         }                                                               \
1013                                                                         \
1014         ret = kstrtou32(page, 0, &num);                                 \
1015         if (ret)                                                        \
1016                 goto end;                                               \
1017                                                                         \
1018         if (test_limit && num > limit) {                                \
1019                 ret = -EINVAL;                                          \
1020                 goto end;                                               \
1021         }                                                               \
1022         opts->name = num;                                               \
1023         ret = len;                                                      \
1024                                                                         \
1025 end:                                                                    \
1026         mutex_unlock(&opts->lock);                                      \
1027         return ret;                                                     \
1028 }                                                                       \
1029                                                                         \
1030 CONFIGFS_ATTR(f_midi_opts_, name);
1031
1032 F_MIDI_OPT(index, true, SNDRV_CARDS);
1033 F_MIDI_OPT(buflen, false, 0);
1034 F_MIDI_OPT(qlen, false, 0);
1035 F_MIDI_OPT(in_ports, true, MAX_PORTS);
1036 F_MIDI_OPT(out_ports, true, MAX_PORTS);
1037
1038 static ssize_t f_midi_opts_id_show(struct config_item *item, char *page)
1039 {
1040         struct f_midi_opts *opts = to_f_midi_opts(item);
1041         int result;
1042
1043         mutex_lock(&opts->lock);
1044         if (opts->id) {
1045                 result = strlcpy(page, opts->id, PAGE_SIZE);
1046         } else {
1047                 page[0] = 0;
1048                 result = 0;
1049         }
1050
1051         mutex_unlock(&opts->lock);
1052
1053         return result;
1054 }
1055
1056 static ssize_t f_midi_opts_id_store(struct config_item *item,
1057                                     const char *page, size_t len)
1058 {
1059         struct f_midi_opts *opts = to_f_midi_opts(item);
1060         int ret;
1061         char *c;
1062
1063         mutex_lock(&opts->lock);
1064         if (opts->refcnt) {
1065                 ret = -EBUSY;
1066                 goto end;
1067         }
1068
1069         c = kstrndup(page, len, GFP_KERNEL);
1070         if (!c) {
1071                 ret = -ENOMEM;
1072                 goto end;
1073         }
1074         if (opts->id_allocated)
1075                 kfree(opts->id);
1076         opts->id = c;
1077         opts->id_allocated = true;
1078         ret = len;
1079 end:
1080         mutex_unlock(&opts->lock);
1081         return ret;
1082 }
1083
1084 CONFIGFS_ATTR(f_midi_opts_, id);
1085
1086 static struct configfs_attribute *midi_attrs[] = {
1087         &f_midi_opts_attr_index,
1088         &f_midi_opts_attr_buflen,
1089         &f_midi_opts_attr_qlen,
1090         &f_midi_opts_attr_in_ports,
1091         &f_midi_opts_attr_out_ports,
1092         &f_midi_opts_attr_id,
1093         NULL,
1094 };
1095
1096 static struct config_item_type midi_func_type = {
1097         .ct_item_ops    = &midi_item_ops,
1098         .ct_attrs       = midi_attrs,
1099         .ct_owner       = THIS_MODULE,
1100 };
1101
1102 static void f_midi_free_inst(struct usb_function_instance *f)
1103 {
1104         struct f_midi_opts *opts;
1105
1106         opts = container_of(f, struct f_midi_opts, func_inst);
1107
1108         if (opts->id_allocated)
1109                 kfree(opts->id);
1110
1111         kfree(opts);
1112 }
1113
1114 static struct usb_function_instance *f_midi_alloc_inst(void)
1115 {
1116         struct f_midi_opts *opts;
1117
1118         opts = kzalloc(sizeof(*opts), GFP_KERNEL);
1119         if (!opts)
1120                 return ERR_PTR(-ENOMEM);
1121
1122         mutex_init(&opts->lock);
1123         opts->func_inst.free_func_inst = f_midi_free_inst;
1124         opts->index = SNDRV_DEFAULT_IDX1;
1125         opts->id = SNDRV_DEFAULT_STR1;
1126         opts->buflen = 256;
1127         opts->qlen = 32;
1128         opts->in_ports = 1;
1129         opts->out_ports = 1;
1130
1131         config_group_init_type_name(&opts->func_inst.group, "",
1132                                     &midi_func_type);
1133
1134         return &opts->func_inst;
1135 }
1136
1137 static void f_midi_free(struct usb_function *f)
1138 {
1139         struct f_midi *midi;
1140         struct f_midi_opts *opts;
1141
1142         midi = func_to_midi(f);
1143         opts = container_of(f->fi, struct f_midi_opts, func_inst);
1144         kfree(midi->id);
1145         mutex_lock(&opts->lock);
1146         kfifo_free(&midi->in_req_fifo);
1147         kfree(midi);
1148         --opts->refcnt;
1149         mutex_unlock(&opts->lock);
1150 }
1151
1152 static void f_midi_unbind(struct usb_configuration *c, struct usb_function *f)
1153 {
1154         struct usb_composite_dev *cdev = f->config->cdev;
1155         struct f_midi *midi = func_to_midi(f);
1156         struct snd_card *card;
1157
1158         DBG(cdev, "unbind\n");
1159
1160         /* just to be sure */
1161         f_midi_disable(f);
1162
1163         card = midi->card;
1164         midi->card = NULL;
1165         if (card)
1166                 snd_card_free(card);
1167
1168         usb_free_all_descriptors(f);
1169 }
1170
1171 static struct usb_function *f_midi_alloc(struct usb_function_instance *fi)
1172 {
1173         struct f_midi *midi = NULL;
1174         struct f_midi_opts *opts;
1175         int status, i;
1176
1177         opts = container_of(fi, struct f_midi_opts, func_inst);
1178
1179         mutex_lock(&opts->lock);
1180         /* sanity check */
1181         if (opts->in_ports > MAX_PORTS || opts->out_ports > MAX_PORTS) {
1182                 status = -EINVAL;
1183                 goto setup_fail;
1184         }
1185
1186         /* allocate and initialize one new instance */
1187         midi = kzalloc(
1188                 sizeof(*midi) + opts->in_ports * sizeof(*midi->in_ports_array),
1189                 GFP_KERNEL);
1190         if (!midi) {
1191                 status = -ENOMEM;
1192                 goto setup_fail;
1193         }
1194
1195         for (i = 0; i < opts->in_ports; i++)
1196                 midi->in_ports_array[i].cable = i;
1197
1198         /* set up ALSA midi devices */
1199         midi->id = kstrdup(opts->id, GFP_KERNEL);
1200         if (opts->id && !midi->id) {
1201                 status = -ENOMEM;
1202                 goto setup_fail;
1203         }
1204         midi->in_ports = opts->in_ports;
1205         midi->out_ports = opts->out_ports;
1206         midi->index = opts->index;
1207         midi->buflen = opts->buflen;
1208         midi->qlen = opts->qlen;
1209         midi->in_last_port = 0;
1210
1211         status = kfifo_alloc(&midi->in_req_fifo, midi->qlen, GFP_KERNEL);
1212         if (status)
1213                 goto setup_fail;
1214
1215         spin_lock_init(&midi->transmit_lock);
1216
1217         ++opts->refcnt;
1218         mutex_unlock(&opts->lock);
1219
1220         midi->func.name         = "gmidi function";
1221         midi->func.bind         = f_midi_bind;
1222         midi->func.unbind       = f_midi_unbind;
1223         midi->func.set_alt      = f_midi_set_alt;
1224         midi->func.disable      = f_midi_disable;
1225         midi->func.free_func    = f_midi_free;
1226
1227         return &midi->func;
1228
1229 setup_fail:
1230         mutex_unlock(&opts->lock);
1231         kfree(midi);
1232         return ERR_PTR(status);
1233 }
1234
1235 DECLARE_USB_FUNCTION_INIT(midi, f_midi_alloc_inst, f_midi_alloc);