1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * f_midi2.c -- USB MIDI 2.0 class function driver
4 */
5
6#include <linux/device.h>
7#include <linux/kernel.h>
8#include <linux/module.h>
9#include <linux/slab.h>
10
11#include <sound/core.h>
12#include <sound/control.h>
13#include <sound/ump.h>
14#include <sound/ump_msg.h>
15#include <sound/ump_convert.h>
16
17#include <linux/usb/ch9.h>
18#include <linux/usb/gadget.h>
19#include <linux/usb/audio.h>
20#include <linux/usb/midi-v2.h>
21
22#include "u_f.h"
23#include "u_midi2.h"
24
25struct f_midi2;
26struct f_midi2_ep;
27struct f_midi2_usb_ep;
28
29/* Context for each USB request */
30struct f_midi2_req_ctx {
31	struct f_midi2_usb_ep *usb_ep;	/* belonging USB EP */
32	unsigned int index;		/* array index: 0-31 */
33	struct usb_request *req;	/* assigned request */
34};
35
36/* Resources for a USB Endpoint */
37struct f_midi2_usb_ep {
38	struct f_midi2 *card;		/* belonging card */
39	struct f_midi2_ep *ep;		/* belonging UMP EP (optional) */
40	struct usb_ep *usb_ep;		/* assigned USB EP */
41	void (*complete)(struct usb_ep *usb_ep, struct usb_request *req);
42	unsigned long free_reqs;	/* bitmap for unused requests */
43	unsigned int num_reqs;		/* number of allocated requests */
44	struct f_midi2_req_ctx *reqs;	/* request context array */
45};
46
47/* Resources for UMP Function Block (and USB Group Terminal Block) */
48struct f_midi2_block {
49	struct f_midi2_block_info info;	/* FB info, copied from configfs */
50	struct snd_ump_block *fb;	/* assigned FB */
51	unsigned int gtb_id;		/* assigned GTB id */
52	unsigned int string_id;		/* assigned string id */
53};
54
55/* Temporary buffer for altset 0 MIDI 1.0 handling */
56struct f_midi2_midi1_port {
57	unsigned int pending; /* pending bytes on the input buffer */
58	u8 buf[32];	/* raw MIDI 1.0 byte input */
59	u8 state;	/* running status */
60	u8 data[2];	/* rendered USB MIDI 1.0 packet data */
61};
62
63/* MIDI 1.0 message states */
64enum {
65	STATE_INITIAL = 0,	/* pseudo state */
66	STATE_1PARAM,
67	STATE_2PARAM_1,
68	STATE_2PARAM_2,
69	STATE_SYSEX_0,
70	STATE_SYSEX_1,
71	STATE_SYSEX_2,
72	STATE_REAL_TIME,
73	STATE_FINISHED,		/* pseudo state */
74};
75
76/* Resources for UMP Endpoint */
77struct f_midi2_ep {
78	struct snd_ump_endpoint *ump;	/* assigned UMP EP */
79	struct f_midi2 *card;		/* belonging MIDI 2.0 device */
80
81	struct f_midi2_ep_info info;	/* UMP EP info, copied from configfs */
82	unsigned int num_blks;		/* number of FBs */
83	struct f_midi2_block blks[SNDRV_UMP_MAX_BLOCKS];	/* UMP FBs */
84
85	struct f_midi2_usb_ep ep_in;	/* USB MIDI EP-in */
86	struct f_midi2_usb_ep ep_out;	/* USB MIDI EP-out */
87
88	u8 in_group_to_cable[SNDRV_UMP_MAX_GROUPS]; /* map to cable; 1-based! */
89};
90
91/* indices for USB strings */
92enum {
93	STR_IFACE = 0,
94	STR_GTB1 = 1,
95};
96
97/* 1-based GTB id to string id */
98#define gtb_to_str_id(id)	(STR_GTB1 + (id) - 1)
99
100/* mapping from MIDI 1.0 cable to UMP group */
101struct midi1_cable_mapping {
102	struct f_midi2_ep *ep;
103	unsigned char block;
104	unsigned char group;
105};
106
107/* operation mode */
108enum {
109	MIDI_OP_MODE_UNSET,	/* no altset set yet */
110	MIDI_OP_MODE_MIDI1,	/* MIDI 1.0 (altset 0) is used */
111	MIDI_OP_MODE_MIDI2,	/* MIDI 2.0 (altset 1) is used */
112};
113
114/* Resources for MIDI 2.0 Device */
115struct f_midi2 {
116	struct usb_function func;
117	struct usb_gadget *gadget;
118	struct snd_card *card;
119
120	/* MIDI 1.0 in/out USB EPs */
121	struct f_midi2_usb_ep midi1_ep_in;
122	struct f_midi2_usb_ep midi1_ep_out;
123
124	/* number of MIDI 1.0 I/O cables */
125	unsigned int num_midi1_in;
126	unsigned int num_midi1_out;
127
128	/* conversion for MIDI 1.0 EP-in */
129	struct f_midi2_midi1_port midi1_port[MAX_CABLES];
130	/* conversion for MIDI 1.0 EP-out */
131	struct ump_cvt_to_ump midi1_ump_cvt;
132	/* mapping between cables and UMP groups */
133	struct midi1_cable_mapping in_cable_mapping[MAX_CABLES];
134	struct midi1_cable_mapping out_cable_mapping[MAX_CABLES];
135
136	int midi_if;			/* USB MIDI interface number */
137	int operation_mode;		/* current operation mode */
138
139	spinlock_t queue_lock;
140
141	struct f_midi2_card_info info;	/* card info, copied from configfs */
142
143	unsigned int num_eps;
144	struct f_midi2_ep midi2_eps[MAX_UMP_EPS];
145
146	unsigned int total_blocks;	/* total number of blocks of all EPs */
147	struct usb_string *string_defs;
148	struct usb_string *strings;
149};
150
151#define func_to_midi2(f)	container_of(f, struct f_midi2, func)
152
153/* get EP name string */
154static const char *ump_ep_name(const struct f_midi2_ep *ep)
155{
156	return ep->info.ep_name ? ep->info.ep_name : "MIDI 2.0 Gadget";
157}
158
159/* get EP product ID string */
160static const char *ump_product_id(const struct f_midi2_ep *ep)
161{
162	return ep->info.product_id ? ep->info.product_id : "Unique Product ID";
163}
164
165/* get FB name string */
166static const char *ump_fb_name(const struct f_midi2_block_info *info)
167{
168	return info->name ? info->name : "MIDI 2.0 Gadget I/O";
169}
170
171/*
172 * USB Descriptor Definitions
173 */
174/* GTB header descriptor */
175static struct usb_ms20_gr_trm_block_header_descriptor gtb_header_desc = {
176	.bLength =		sizeof(gtb_header_desc),
177	.bDescriptorType =	USB_DT_CS_GR_TRM_BLOCK,
178	.bDescriptorSubtype =	USB_MS_GR_TRM_BLOCK_HEADER,
179	.wTotalLength =		__cpu_to_le16(0x12), // to be filled
180};
181
182/* GTB descriptor template: most items are replaced dynamically */
183static struct usb_ms20_gr_trm_block_descriptor gtb_desc = {
184	.bLength =		sizeof(gtb_desc),
185	.bDescriptorType =	USB_DT_CS_GR_TRM_BLOCK,
186	.bDescriptorSubtype =	USB_MS_GR_TRM_BLOCK,
187	.bGrpTrmBlkID =		0x01,
188	.bGrpTrmBlkType =	USB_MS_GR_TRM_BLOCK_TYPE_BIDIRECTIONAL,
189	.nGroupTrm =		0x00,
190	.nNumGroupTrm =		1,
191	.iBlockItem =		0,
192	.bMIDIProtocol =	USB_MS_MIDI_PROTO_1_0_64,
193	.wMaxInputBandwidth =	0,
194	.wMaxOutputBandwidth =	0,
195};
196
197DECLARE_USB_MIDI_OUT_JACK_DESCRIPTOR(1);
198DECLARE_USB_MS_ENDPOINT_DESCRIPTOR(16);
199DECLARE_UAC_AC_HEADER_DESCRIPTOR(1);
200DECLARE_USB_MS20_ENDPOINT_DESCRIPTOR(32);
201
202#define EP_MAX_PACKET_INT	8
203
204/* Audio Control Interface */
205static struct usb_interface_descriptor midi2_audio_if_desc = {
206	.bLength =		USB_DT_INTERFACE_SIZE,
207	.bDescriptorType =	USB_DT_INTERFACE,
208	.bInterfaceNumber =	0, // to be filled
209	.bNumEndpoints =	0,
210	.bInterfaceClass =	USB_CLASS_AUDIO,
211	.bInterfaceSubClass =	USB_SUBCLASS_AUDIOCONTROL,
212	.bInterfaceProtocol =	0,
213	.iInterface =		0,
214};
215
216static struct uac1_ac_header_descriptor_1 midi2_audio_class_desc = {
217	.bLength =		0x09,
218	.bDescriptorType =	USB_DT_CS_INTERFACE,
219	.bDescriptorSubtype =	0x01,
220	.bcdADC =		__cpu_to_le16(0x0100),
221	.wTotalLength =		__cpu_to_le16(0x0009),
222	.bInCollection =	0x01,
223	.baInterfaceNr =	{ 0x01 }, // to be filled
224};
225
226/* MIDI 1.0 Streaming Interface (altset 0) */
227static struct usb_interface_descriptor midi2_midi1_if_desc = {
228	.bLength =		USB_DT_INTERFACE_SIZE,
229	.bDescriptorType =	USB_DT_INTERFACE,
230	.bInterfaceNumber =	0, // to be filled
231	.bAlternateSetting =	0,
232	.bNumEndpoints =	2, // to be filled
233	.bInterfaceClass =	USB_CLASS_AUDIO,
234	.bInterfaceSubClass =	USB_SUBCLASS_MIDISTREAMING,
235	.bInterfaceProtocol =	0,
236	.iInterface =		0, // to be filled
237};
238
239static struct usb_ms_header_descriptor midi2_midi1_class_desc = {
240	.bLength =		0x07,
241	.bDescriptorType =	USB_DT_CS_INTERFACE,
242	.bDescriptorSubtype =	USB_MS_HEADER,
243	.bcdMSC =		__cpu_to_le16(0x0100),
244	.wTotalLength =		__cpu_to_le16(0x41), // to be calculated
245};
246
247/* MIDI 1.0 EP OUT */
248static struct usb_endpoint_descriptor midi2_midi1_ep_out_desc = {
249	.bLength =		USB_DT_ENDPOINT_AUDIO_SIZE,
250	.bDescriptorType =	USB_DT_ENDPOINT,
251	.bEndpointAddress =	USB_DIR_OUT | 0, // set up dynamically
252	.bmAttributes =		USB_ENDPOINT_XFER_BULK,
253};
254
255static struct usb_ss_ep_comp_descriptor midi2_midi1_ep_out_ss_comp_desc = {
256	.bLength                = sizeof(midi2_midi1_ep_out_ss_comp_desc),
257	.bDescriptorType        = USB_DT_SS_ENDPOINT_COMP,
258};
259
260static struct usb_ms_endpoint_descriptor_16 midi2_midi1_ep_out_class_desc = {
261	.bLength =		0x05, // to be filled
262	.bDescriptorType =	USB_DT_CS_ENDPOINT,
263	.bDescriptorSubtype =	USB_MS_GENERAL,
264	.bNumEmbMIDIJack =	1,
265	.baAssocJackID =	{ 0x01 },
266};
267
268/* MIDI 1.0 EP IN */
269static struct usb_endpoint_descriptor midi2_midi1_ep_in_desc = {
270	.bLength =		USB_DT_ENDPOINT_AUDIO_SIZE,
271	.bDescriptorType =	USB_DT_ENDPOINT,
272	.bEndpointAddress =	USB_DIR_IN | 0, // set up dynamically
273	.bmAttributes =		USB_ENDPOINT_XFER_BULK,
274};
275
276static struct usb_ss_ep_comp_descriptor midi2_midi1_ep_in_ss_comp_desc = {
277	.bLength                = sizeof(midi2_midi1_ep_in_ss_comp_desc),
278	.bDescriptorType        = USB_DT_SS_ENDPOINT_COMP,
279};
280
281static struct usb_ms_endpoint_descriptor_16 midi2_midi1_ep_in_class_desc = {
282	.bLength =		0x05, // to be filled
283	.bDescriptorType =	USB_DT_CS_ENDPOINT,
284	.bDescriptorSubtype =	USB_MS_GENERAL,
285	.bNumEmbMIDIJack =	1,
286	.baAssocJackID =	{ 0x03 },
287};
288
289/* MIDI 2.0 Streaming Interface (altset 1) */
290static struct usb_interface_descriptor midi2_midi2_if_desc = {
291	.bLength =		USB_DT_INTERFACE_SIZE,
292	.bDescriptorType =	USB_DT_INTERFACE,
293	.bInterfaceNumber =	0, // to be filled
294	.bAlternateSetting =	1,
295	.bNumEndpoints =	2, // to be filled
296	.bInterfaceClass =	USB_CLASS_AUDIO,
297	.bInterfaceSubClass =	USB_SUBCLASS_MIDISTREAMING,
298	.bInterfaceProtocol =	0,
299	.iInterface =		0, // to be filled
300};
301
302static struct usb_ms_header_descriptor midi2_midi2_class_desc = {
303	.bLength =		0x07,
304	.bDescriptorType =	USB_DT_CS_INTERFACE,
305	.bDescriptorSubtype =	USB_MS_HEADER,
306	.bcdMSC =		__cpu_to_le16(0x0200),
307	.wTotalLength =		__cpu_to_le16(0x07),
308};
309
310/* MIDI 2.0 EP OUT */
311static struct usb_endpoint_descriptor midi2_midi2_ep_out_desc[MAX_UMP_EPS];
312
313static struct usb_ss_ep_comp_descriptor midi2_midi2_ep_out_ss_comp_desc = {
314	.bLength                = sizeof(midi2_midi1_ep_out_ss_comp_desc),
315	.bDescriptorType        = USB_DT_SS_ENDPOINT_COMP,
316};
317
318static struct usb_ms20_endpoint_descriptor_32 midi2_midi2_ep_out_class_desc[MAX_UMP_EPS];
319
320/* MIDI 2.0 EP IN */
321static struct usb_endpoint_descriptor midi2_midi2_ep_in_desc[MAX_UMP_EPS];
322
323static struct usb_ss_ep_comp_descriptor midi2_midi2_ep_in_ss_comp_desc = {
324	.bLength                = sizeof(midi2_midi2_ep_in_ss_comp_desc),
325	.bDescriptorType        = USB_DT_SS_ENDPOINT_COMP,
326};
327
328static struct usb_ms20_endpoint_descriptor_32 midi2_midi2_ep_in_class_desc[MAX_UMP_EPS];
329
330/* Arrays of descriptors to be created */
331static void *midi2_audio_descs[] = {
332	&midi2_audio_if_desc,
333	&midi2_audio_class_desc,
334	NULL
335};
336
337static void *midi2_midi1_descs[] = {
338	&midi2_midi1_if_desc,
339	&midi2_midi1_class_desc,
340	NULL
341};
342
343static void *midi2_midi1_ep_out_descs[] = {
344	&midi2_midi1_ep_out_desc,
345	&midi2_midi1_ep_out_class_desc,
346	NULL
347};
348
349static void *midi2_midi1_ep_in_descs[] = {
350	&midi2_midi1_ep_in_desc,
351	&midi2_midi1_ep_in_class_desc,
352	NULL
353};
354
355static void *midi2_midi1_ep_out_ss_descs[] = {
356	&midi2_midi1_ep_out_desc,
357	&midi2_midi1_ep_out_ss_comp_desc,
358	&midi2_midi1_ep_out_class_desc,
359	NULL
360};
361
362static void *midi2_midi1_ep_in_ss_descs[] = {
363	&midi2_midi1_ep_in_desc,
364	&midi2_midi1_ep_in_ss_comp_desc,
365	&midi2_midi1_ep_in_class_desc,
366	NULL
367};
368
369static void *midi2_midi2_descs[] = {
370	&midi2_midi2_if_desc,
371	&midi2_midi2_class_desc,
372	NULL
373};
374
375/*
376 * USB request handling
377 */
378
379/* get an empty request for the given EP */
380static struct usb_request *get_empty_request(struct f_midi2_usb_ep *usb_ep)
381{
382	struct usb_request *req = NULL;
383	unsigned long flags;
384	int index;
385
386	spin_lock_irqsave(&usb_ep->card->queue_lock, flags);
387	if (!usb_ep->free_reqs)
388		goto unlock;
389	index = find_first_bit(&usb_ep->free_reqs, usb_ep->num_reqs);
390	if (index >= usb_ep->num_reqs)
391		goto unlock;
392	req = usb_ep->reqs[index].req;
393	if (!req)
394		goto unlock;
395	clear_bit(index, &usb_ep->free_reqs);
396	req->length = 0;
397 unlock:
398	spin_unlock_irqrestore(&usb_ep->card->queue_lock, flags);
399	return req;
400}
401
402/* put the empty request back */
403static void put_empty_request(struct usb_request *req)
404{
405	struct f_midi2_req_ctx *ctx = req->context;
406	unsigned long flags;
407
408	spin_lock_irqsave(&ctx->usb_ep->card->queue_lock, flags);
409	set_bit(ctx->index, &ctx->usb_ep->free_reqs);
410	spin_unlock_irqrestore(&ctx->usb_ep->card->queue_lock, flags);
411}
412
413/*
414 * UMP v1.1 Stream message handling
415 */
416
417/* queue a request to UMP EP; request is either queued or freed after this */
418static int queue_request_ep_raw(struct usb_request *req)
419{
420	struct f_midi2_req_ctx *ctx = req->context;
421	int err;
422
423	req->complete = ctx->usb_ep->complete;
424	err = usb_ep_queue(ctx->usb_ep->usb_ep, req, GFP_ATOMIC);
425	if (err) {
426		put_empty_request(req);
427		return err;
428	}
429	return 0;
430}
431
432/* queue a request with endianness conversion */
433static int queue_request_ep_in(struct usb_request *req)
434{
435	/* UMP packets have to be converted to little-endian */
436	cpu_to_le32_array((u32 *)req->buf, req->length >> 2);
437	return queue_request_ep_raw(req);
438}
439
440/* reply a UMP packet via EP-in */
441static int reply_ep_in(struct f_midi2_ep *ep, const void *buf, int len)
442{
443	struct f_midi2_usb_ep *usb_ep = &ep->ep_in;
444	struct usb_request *req;
445
446	req = get_empty_request(usb_ep);
447	if (!req)
448		return -ENOSPC;
449
450	req->length = len;
451	memcpy(req->buf, buf, len);
452	return queue_request_ep_in(req);
453}
454
455/* reply a UMP stream EP info */
456static void reply_ump_stream_ep_info(struct f_midi2_ep *ep)
457{
458	struct snd_ump_stream_msg_ep_info rep = {
459		.type = UMP_MSG_TYPE_STREAM,
460		.status = UMP_STREAM_MSG_STATUS_EP_INFO,
461		.ump_version_major = 0x01,
462		.ump_version_minor = 0x01,
463		.num_function_blocks = ep->num_blks,
464		.static_function_block = !!ep->card->info.static_block,
465		.protocol = (UMP_STREAM_MSG_EP_INFO_CAP_MIDI1 |
466			     UMP_STREAM_MSG_EP_INFO_CAP_MIDI2) >> 8,
467	};
468
469	reply_ep_in(ep, &rep, sizeof(rep));
470}
471
472/* reply a UMP EP device info */
473static void reply_ump_stream_ep_device(struct f_midi2_ep *ep)
474{
475	struct snd_ump_stream_msg_devince_info rep = {
476		.type = UMP_MSG_TYPE_STREAM,
477		.status = UMP_STREAM_MSG_STATUS_DEVICE_INFO,
478		.manufacture_id = ep->info.manufacturer,
479		.family_lsb = ep->info.family & 0xff,
480		.family_msb = (ep->info.family >> 8) & 0xff,
481		.model_lsb = ep->info.model & 0xff,
482		.model_msb = (ep->info.model >> 8) & 0xff,
483		.sw_revision = ep->info.sw_revision,
484	};
485
486	reply_ep_in(ep, &rep, sizeof(rep));
487}
488
489#define UMP_STREAM_PKT_BYTES	16	/* UMP stream packet size = 16 bytes*/
490#define UMP_STREAM_EP_STR_OFF	2	/* offset of name string for EP info */
491#define UMP_STREAM_FB_STR_OFF	3	/* offset of name string for FB info */
492
493/* Helper to replay a string */
494static void reply_ump_stream_string(struct f_midi2_ep *ep, const u8 *name,
495				    unsigned int type, unsigned int extra,
496				    unsigned int start_ofs)
497{
498	struct f_midi2_usb_ep *usb_ep = &ep->ep_in;
499	struct f_midi2 *midi2 = ep->card;
500	struct usb_request *req;
501	unsigned int pos;
502	u32 *buf;
503
504	if (!*name)
505		return;
506	req = get_empty_request(usb_ep);
507	if (!req)
508		return;
509
510	buf = (u32 *)req->buf;
511	pos = start_ofs;
512	for (;;) {
513		if (pos == start_ofs) {
514			memset(buf, 0, UMP_STREAM_PKT_BYTES);
515			buf[0] = ump_stream_compose(type, 0) | extra;
516		}
517		buf[pos / 4] |= *name++ << ((3 - (pos % 4)) * 8);
518		if (!*name) {
519			if (req->length)
520				buf[0] |= UMP_STREAM_MSG_FORMAT_END << 26;
521			req->length += UMP_STREAM_PKT_BYTES;
522			break;
523		}
524		if (++pos == UMP_STREAM_PKT_BYTES) {
525			if (!req->length)
526				buf[0] |= UMP_STREAM_MSG_FORMAT_START << 26;
527			else
528				buf[0] |= UMP_STREAM_MSG_FORMAT_CONTINUE << 26;
529			req->length += UMP_STREAM_PKT_BYTES;
530			if (midi2->info.req_buf_size - req->length < UMP_STREAM_PKT_BYTES)
531				break;
532			buf += 4;
533			pos = start_ofs;
534		}
535	}
536
537	if (req->length)
538		queue_request_ep_in(req);
539	else
540		put_empty_request(req);
541}
542
543/* Reply a UMP EP name string */
544static void reply_ump_stream_ep_name(struct f_midi2_ep *ep)
545{
546	reply_ump_stream_string(ep, ump_ep_name(ep),
547				UMP_STREAM_MSG_STATUS_EP_NAME, 0,
548				UMP_STREAM_EP_STR_OFF);
549}
550
551/* Reply a UMP EP product ID string */
552static void reply_ump_stream_ep_pid(struct f_midi2_ep *ep)
553{
554	reply_ump_stream_string(ep, ump_product_id(ep),
555				UMP_STREAM_MSG_STATUS_PRODUCT_ID, 0,
556				UMP_STREAM_EP_STR_OFF);
557}
558
559/* Reply a UMP EP stream config */
560static void reply_ump_stream_ep_config(struct f_midi2_ep *ep)
561{
562	struct snd_ump_stream_msg_stream_cfg rep = {
563		.type = UMP_MSG_TYPE_STREAM,
564		.status = UMP_STREAM_MSG_STATUS_STREAM_CFG,
565	};
566
567	if ((ep->info.protocol & SNDRV_UMP_EP_INFO_PROTO_MIDI_MASK) ==
568	    SNDRV_UMP_EP_INFO_PROTO_MIDI2)
569		rep.protocol = UMP_STREAM_MSG_EP_INFO_CAP_MIDI2 >> 8;
570	else
571		rep.protocol = UMP_STREAM_MSG_EP_INFO_CAP_MIDI1 >> 8;
572
573	reply_ep_in(ep, &rep, sizeof(rep));
574}
575
576/* Reply a UMP FB info */
577static void reply_ump_stream_fb_info(struct f_midi2_ep *ep, int blk)
578{
579	struct f_midi2_block_info *b = &ep->blks[blk].info;
580	struct snd_ump_stream_msg_fb_info rep = {
581		.type = UMP_MSG_TYPE_STREAM,
582		.status = UMP_STREAM_MSG_STATUS_FB_INFO,
583		.active = !!b->active,
584		.function_block_id = blk,
585		.ui_hint = b->ui_hint,
586		.midi_10 = b->is_midi1,
587		.direction = b->direction,
588		.first_group = b->first_group,
589		.num_groups = b->num_groups,
590		.midi_ci_version = b->midi_ci_version,
591		.sysex8_streams = b->sysex8_streams,
592	};
593
594	reply_ep_in(ep, &rep, sizeof(rep));
595}
596
597/* Reply a FB name string */
598static void reply_ump_stream_fb_name(struct f_midi2_ep *ep, unsigned int blk)
599{
600	reply_ump_stream_string(ep, ump_fb_name(&ep->blks[blk].info),
601				UMP_STREAM_MSG_STATUS_FB_NAME, blk << 8,
602				UMP_STREAM_FB_STR_OFF);
603}
604
605/* Process a UMP Stream message */
606static void process_ump_stream_msg(struct f_midi2_ep *ep, const u32 *data)
607{
608	struct f_midi2 *midi2 = ep->card;
609	unsigned int format, status, blk;
610
611	format = ump_stream_message_format(*data);
612	status = ump_stream_message_status(*data);
613	switch (status) {
614	case UMP_STREAM_MSG_STATUS_EP_DISCOVERY:
615		if (format)
616			return; // invalid
617		if (data[1] & UMP_STREAM_MSG_REQUEST_EP_INFO)
618			reply_ump_stream_ep_info(ep);
619		if (data[1] & UMP_STREAM_MSG_REQUEST_DEVICE_INFO)
620			reply_ump_stream_ep_device(ep);
621		if (data[1] & UMP_STREAM_MSG_REQUEST_EP_NAME)
622			reply_ump_stream_ep_name(ep);
623		if (data[1] & UMP_STREAM_MSG_REQUEST_PRODUCT_ID)
624			reply_ump_stream_ep_pid(ep);
625		if (data[1] & UMP_STREAM_MSG_REQUEST_STREAM_CFG)
626			reply_ump_stream_ep_config(ep);
627		return;
628	case UMP_STREAM_MSG_STATUS_STREAM_CFG_REQUEST:
629		if (*data & UMP_STREAM_MSG_EP_INFO_CAP_MIDI2) {
630			ep->info.protocol = SNDRV_UMP_EP_INFO_PROTO_MIDI2;
631			DBG(midi2, "Switching Protocol to MIDI2\n");
632		} else {
633			ep->info.protocol = SNDRV_UMP_EP_INFO_PROTO_MIDI1;
634			DBG(midi2, "Switching Protocol to MIDI1\n");
635		}
636		snd_ump_switch_protocol(ep->ump, ep->info.protocol);
637		reply_ump_stream_ep_config(ep);
638		return;
639	case UMP_STREAM_MSG_STATUS_FB_DISCOVERY:
640		if (format)
641			return; // invalid
642		blk = (*data >> 8) & 0xff;
643		if (blk >= ep->num_blks)
644			return;
645		if (*data & UMP_STREAM_MSG_REQUEST_FB_INFO)
646			reply_ump_stream_fb_info(ep, blk);
647		if (*data & UMP_STREAM_MSG_REQUEST_FB_NAME)
648			reply_ump_stream_fb_name(ep, blk);
649		return;
650	}
651}
652
653/* Process UMP messages included in a USB request */
654static void process_ump(struct f_midi2_ep *ep, const struct usb_request *req)
655{
656	const u32 *data = (u32 *)req->buf;
657	int len = req->actual >> 2;
658	const u32 *in_buf = ep->ump->input_buf;
659
660	for (; len > 0; len--, data++) {
661		if (snd_ump_receive_ump_val(ep->ump, *data) <= 0)
662			continue;
663		if (ump_message_type(*in_buf) == UMP_MSG_TYPE_STREAM)
664			process_ump_stream_msg(ep, in_buf);
665	}
666}
667
668/*
669 * MIDI 2.0 UMP USB request handling
670 */
671
672/* complete handler for UMP EP-out requests */
673static void f_midi2_ep_out_complete(struct usb_ep *usb_ep,
674				    struct usb_request *req)
675{
676	struct f_midi2_req_ctx *ctx = req->context;
677	struct f_midi2_ep *ep = ctx->usb_ep->ep;
678	struct f_midi2 *midi2 = ep->card;
679	int status = req->status;
680
681	if (status) {
682		DBG(midi2, "%s complete error %d: %d/%d\n",
683		    usb_ep->name, status, req->actual, req->length);
684		goto error;
685	}
686
687	/* convert to UMP packet in native endianness */
688	le32_to_cpu_array((u32 *)req->buf, req->actual >> 2);
689
690	if (midi2->info.process_ump)
691		process_ump(ep, req);
692
693	snd_ump_receive(ep->ump, req->buf, req->actual & ~3);
694
695	if (midi2->operation_mode != MIDI_OP_MODE_MIDI2)
696		goto error;
697
698	if (queue_request_ep_raw(req))
699		goto error;
700	return;
701
702 error:
703	put_empty_request(req);
704}
705
706/* Transmit UMP packets received from user-space to the gadget */
707static void process_ump_transmit(struct f_midi2_ep *ep)
708{
709	struct f_midi2_usb_ep *usb_ep = &ep->ep_in;
710	struct f_midi2 *midi2 = ep->card;
711	struct usb_request *req;
712	int len;
713
714	if (!usb_ep->usb_ep->enabled)
715		return;
716
717	for (;;) {
718		req = get_empty_request(usb_ep);
719		if (!req)
720			break;
721		len = snd_ump_transmit(ep->ump, (u32 *)req->buf,
722				       midi2->info.req_buf_size);
723		if (len <= 0) {
724			put_empty_request(req);
725			break;
726		}
727
728		req->length = len;
729		if (queue_request_ep_in(req) < 0)
730			break;
731	}
732}
733
734/* Complete handler for UMP EP-in requests */
735static void f_midi2_ep_in_complete(struct usb_ep *usb_ep,
736				   struct usb_request *req)
737{
738	struct f_midi2_req_ctx *ctx = req->context;
739	struct f_midi2_ep *ep = ctx->usb_ep->ep;
740	struct f_midi2 *midi2 = ep->card;
741	int status = req->status;
742
743	put_empty_request(req);
744
745	if (status) {
746		DBG(midi2, "%s complete error %d: %d/%d\n",
747		    usb_ep->name, status, req->actual, req->length);
748		return;
749	}
750
751	process_ump_transmit(ep);
752}
753
754/*
755 * MIDI1 (altset 0) USB request handling
756 */
757
758/* process one MIDI byte -- copied from f_midi.c
759 *
760 * fill the packet or request if needed
761 * returns true if the request became empty (queued)
762 */
763static bool process_midi1_byte(struct f_midi2 *midi2, u8 cable, u8 b,
764			       struct usb_request **req_p)
765{
766	struct f_midi2_midi1_port *port = &midi2->midi1_port[cable];
767	u8 p[4] = { cable << 4, 0, 0, 0 };
768	int next_state = STATE_INITIAL;
769	struct usb_request *req = *req_p;
770
771	switch (b) {
772	case 0xf8 ... 0xff:
773		/* System Real-Time Messages */
774		p[0] |= 0x0f;
775		p[1] = b;
776		next_state = port->state;
777		port->state = STATE_REAL_TIME;
778		break;
779
780	case 0xf7:
781		/* End of SysEx */
782		switch (port->state) {
783		case STATE_SYSEX_0:
784			p[0] |= 0x05;
785			p[1] = 0xf7;
786			next_state = STATE_FINISHED;
787			break;
788		case STATE_SYSEX_1:
789			p[0] |= 0x06;
790			p[1] = port->data[0];
791			p[2] = 0xf7;
792			next_state = STATE_FINISHED;
793			break;
794		case STATE_SYSEX_2:
795			p[0] |= 0x07;
796			p[1] = port->data[0];
797			p[2] = port->data[1];
798			p[3] = 0xf7;
799			next_state = STATE_FINISHED;
800			break;
801		default:
802			/* Ignore byte */
803			next_state = port->state;
804			port->state = STATE_INITIAL;
805		}
806		break;
807
808	case 0xf0 ... 0xf6:
809		/* System Common Messages */
810		port->data[0] = port->data[1] = 0;
811		port->state = STATE_INITIAL;
812		switch (b) {
813		case 0xf0:
814			port->data[0] = b;
815			port->data[1] = 0;
816			next_state = STATE_SYSEX_1;
817			break;
818		case 0xf1:
819		case 0xf3:
820			port->data[0] = b;
821			next_state = STATE_1PARAM;
822			break;
823		case 0xf2:
824			port->data[0] = b;
825			next_state = STATE_2PARAM_1;
826			break;
827		case 0xf4:
828		case 0xf5:
829			next_state = STATE_INITIAL;
830			break;
831		case 0xf6:
832			p[0] |= 0x05;
833			p[1] = 0xf6;
834			next_state = STATE_FINISHED;
835			break;
836		}
837		break;
838
839	case 0x80 ... 0xef:
840		/*
841		 * Channel Voice Messages, Channel Mode Messages
842		 * and Control Change Messages.
843		 */
844		port->data[0] = b;
845		port->data[1] = 0;
846		port->state = STATE_INITIAL;
847		if (b >= 0xc0 && b <= 0xdf)
848			next_state = STATE_1PARAM;
849		else
850			next_state = STATE_2PARAM_1;
851		break;
852
853	case 0x00 ... 0x7f:
854		/* Message parameters */
855		switch (port->state) {
856		case STATE_1PARAM:
857			if (port->data[0] < 0xf0)
858				p[0] |= port->data[0] >> 4;
859			else
860				p[0] |= 0x02;
861
862			p[1] = port->data[0];
863			p[2] = b;
864			/* This is to allow Running State Messages */
865			next_state = STATE_1PARAM;
866			break;
867		case STATE_2PARAM_1:
868			port->data[1] = b;
869			next_state = STATE_2PARAM_2;
870			break;
871		case STATE_2PARAM_2:
872			if (port->data[0] < 0xf0)
873				p[0] |= port->data[0] >> 4;
874			else
875				p[0] |= 0x03;
876
877			p[1] = port->data[0];
878			p[2] = port->data[1];
879			p[3] = b;
880			/* This is to allow Running State Messages */
881			next_state = STATE_2PARAM_1;
882			break;
883		case STATE_SYSEX_0:
884			port->data[0] = b;
885			next_state = STATE_SYSEX_1;
886			break;
887		case STATE_SYSEX_1:
888			port->data[1] = b;
889			next_state = STATE_SYSEX_2;
890			break;
891		case STATE_SYSEX_2:
892			p[0] |= 0x04;
893			p[1] = port->data[0];
894			p[2] = port->data[1];
895			p[3] = b;
896			next_state = STATE_SYSEX_0;
897			break;
898		}
899		break;
900	}
901
902	/* States where we have to write into the USB request */
903	if (next_state == STATE_FINISHED ||
904	    port->state == STATE_SYSEX_2 ||
905	    port->state == STATE_1PARAM ||
906	    port->state == STATE_2PARAM_2 ||
907	    port->state == STATE_REAL_TIME) {
908		memcpy(req->buf + req->length, p, sizeof(p));
909		req->length += sizeof(p);
910
911		if (next_state == STATE_FINISHED) {
912			next_state = STATE_INITIAL;
913			port->data[0] = port->data[1] = 0;
914		}
915
916		if (midi2->info.req_buf_size - req->length <= 4) {
917			queue_request_ep_raw(req);
918			*req_p = NULL;
919			return true;
920		}
921	}
922
923	port->state = next_state;
924	return false;
925}
926
927/* process all pending MIDI bytes in the internal buffer;
928 * returns true if the request gets empty
929 * returns false if all have been processed
930 */
931static bool process_midi1_pending_buf(struct f_midi2 *midi2,
932				      struct usb_request **req_p)
933{
934	unsigned int cable, c;
935
936	for (cable = 0; cable < midi2->num_midi1_in; cable++) {
937		struct f_midi2_midi1_port *port = &midi2->midi1_port[cable];
938
939		if (!port->pending)
940			continue;
941		for (c = 0; c < port->pending; c++) {
942			if (process_midi1_byte(midi2, cable, port->buf[c],
943					       req_p)) {
944				port->pending -= c;
945				if (port->pending)
946					memmove(port->buf, port->buf + c,
947						port->pending);
948				return true;
949			}
950		}
951		port->pending = 0;
952	}
953
954	return false;
955}
956
957/* fill the MIDI bytes onto the temporary buffer
958 */
959static void fill_midi1_pending_buf(struct f_midi2 *midi2, u8 cable, u8 *buf,
960				   unsigned int size)
961{
962	struct f_midi2_midi1_port *port = &midi2->midi1_port[cable];
963
964	if (port->pending + size > sizeof(port->buf))
965		return;
966	memcpy(port->buf + port->pending, buf, size);
967	port->pending += size;
968}
969
970/* try to process data given from the associated UMP stream */
971static void process_midi1_transmit(struct f_midi2 *midi2)
972{
973	struct f_midi2_usb_ep *usb_ep = &midi2->midi1_ep_in;
974	struct f_midi2_ep *ep = &midi2->midi2_eps[0];
975	struct usb_request *req = NULL;
976	/* 12 is the largest outcome (4 MIDI1 cmds) for a single UMP packet */
977	unsigned char outbuf[12];
978	unsigned char group, cable;
979	int len, size;
980	u32 ump;
981
982	if (!usb_ep->usb_ep || !usb_ep->usb_ep->enabled)
983		return;
984
985	for (;;) {
986		if (!req) {
987			req = get_empty_request(usb_ep);
988			if (!req)
989				break;
990		}
991
992		if (process_midi1_pending_buf(midi2, &req))
993			continue;
994
995		len = snd_ump_transmit(ep->ump, &ump, 4);
996		if (len <= 0)
997			break;
998		if (snd_ump_receive_ump_val(ep->ump, ump) <= 0)
999			continue;
1000		size = snd_ump_convert_from_ump(ep->ump->input_buf, outbuf,
1001						&group);
1002		if (size <= 0)
1003			continue;
1004		cable = ep->in_group_to_cable[group];
1005		if (!cable)
1006			continue;
1007		cable--; /* to 0-base */
1008		fill_midi1_pending_buf(midi2, cable, outbuf, size);
1009	}
1010
1011	if (req) {
1012		if (req->length)
1013			queue_request_ep_raw(req);
1014		else
1015			put_empty_request(req);
1016	}
1017}
1018
1019/* complete handler for MIDI1 EP-in requests */
1020static void f_midi2_midi1_ep_in_complete(struct usb_ep *usb_ep,
1021					 struct usb_request *req)
1022{
1023	struct f_midi2_req_ctx *ctx = req->context;
1024	struct f_midi2 *midi2 = ctx->usb_ep->card;
1025	int status = req->status;
1026
1027	put_empty_request(req);
1028
1029	if (status) {
1030		DBG(midi2, "%s complete error %d: %d/%d\n",
1031		    usb_ep->name, status, req->actual, req->length);
1032		return;
1033	}
1034
1035	process_midi1_transmit(midi2);
1036}
1037
1038/* complete handler for MIDI1 EP-out requests */
1039static void f_midi2_midi1_ep_out_complete(struct usb_ep *usb_ep,
1040					  struct usb_request *req)
1041{
1042	struct f_midi2_req_ctx *ctx = req->context;
1043	struct f_midi2 *midi2 = ctx->usb_ep->card;
1044	struct f_midi2_ep *ep;
1045	struct ump_cvt_to_ump *cvt = &midi2->midi1_ump_cvt;
1046	static const u8 midi1_packet_bytes[16] = {
1047		0, 0, 2, 3, 3, 1, 2, 3, 3, 3, 3, 3, 2, 2, 3, 1
1048	};
1049	unsigned int group, cable, bytes, c, len;
1050	int status = req->status;
1051	const u8 *buf = req->buf;
1052
1053	if (status) {
1054		DBG(midi2, "%s complete error %d: %d/%d\n",
1055		    usb_ep->name, status, req->actual, req->length);
1056		goto error;
1057	}
1058
1059	len = req->actual >> 2;
1060	for (; len; len--, buf += 4) {
1061		cable = *buf >> 4;
1062		ep = midi2->out_cable_mapping[cable].ep;
1063		if (!ep)
1064			continue;
1065		group = midi2->out_cable_mapping[cable].group;
1066		bytes = midi1_packet_bytes[*buf & 0x0f];
1067		for (c = 0; c < bytes; c++) {
1068			snd_ump_convert_to_ump(cvt, group, ep->info.protocol,
1069					       buf[c + 1]);
1070			if (cvt->ump_bytes) {
1071				snd_ump_receive(ep->ump, cvt->ump,
1072						cvt->ump_bytes);
1073				cvt->ump_bytes = 0;
1074			}
1075		}
1076	}
1077
1078	if (midi2->operation_mode != MIDI_OP_MODE_MIDI1)
1079		goto error;
1080
1081	if (queue_request_ep_raw(req))
1082		goto error;
1083	return;
1084
1085 error:
1086	put_empty_request(req);
1087}
1088
1089/*
1090 * Common EP handling helpers
1091 */
1092
1093/* Start MIDI EP */
1094static int f_midi2_start_ep(struct f_midi2_usb_ep *usb_ep,
1095			    struct usb_function *fn)
1096{
1097	int err;
1098
1099	if (!usb_ep->usb_ep)
1100		return 0;
1101
1102	usb_ep_disable(usb_ep->usb_ep);
1103	err = config_ep_by_speed(usb_ep->card->gadget, fn, usb_ep->usb_ep);
1104	if (err)
1105		return err;
1106	return usb_ep_enable(usb_ep->usb_ep);
1107}
1108
1109/* Drop pending requests */
1110static void f_midi2_drop_reqs(struct f_midi2_usb_ep *usb_ep)
1111{
1112	int i;
1113
1114	if (!usb_ep->usb_ep || !usb_ep->num_reqs)
1115		return;
1116
1117	for (i = 0; i < usb_ep->num_reqs; i++) {
1118		if (!test_bit(i, &usb_ep->free_reqs) && usb_ep->reqs[i].req) {
1119			usb_ep_dequeue(usb_ep->usb_ep, usb_ep->reqs[i].req);
1120			set_bit(i, &usb_ep->free_reqs);
1121		}
1122	}
1123}
1124
1125/* Allocate requests for the given EP */
1126static int f_midi2_alloc_ep_reqs(struct f_midi2_usb_ep *usb_ep)
1127{
1128	struct f_midi2 *midi2 = usb_ep->card;
1129	int i;
1130
1131	if (!usb_ep->usb_ep)
1132		return 0;
1133	if (!usb_ep->reqs)
1134		return -EINVAL;
1135
1136	for (i = 0; i < midi2->info.num_reqs; i++) {
1137		if (usb_ep->reqs[i].req)
1138			continue;
1139		usb_ep->reqs[i].req = alloc_ep_req(usb_ep->usb_ep,
1140						   midi2->info.req_buf_size);
1141		if (!usb_ep->reqs[i].req)
1142			return -ENOMEM;
1143		usb_ep->reqs[i].req->context = &usb_ep->reqs[i];
1144	}
1145	return 0;
1146}
1147
1148/* Free allocated requests */
1149static void f_midi2_free_ep_reqs(struct f_midi2_usb_ep *usb_ep)
1150{
1151	struct f_midi2 *midi2 = usb_ep->card;
1152	int i;
1153
1154	for (i = 0; i < midi2->info.num_reqs; i++) {
1155		if (!usb_ep->reqs[i].req)
1156			continue;
1157		free_ep_req(usb_ep->usb_ep, usb_ep->reqs[i].req);
1158		usb_ep->reqs[i].req = NULL;
1159	}
1160}
1161
1162/* Initialize EP */
1163static int f_midi2_init_ep(struct f_midi2 *midi2, struct f_midi2_ep *ep,
1164			   struct f_midi2_usb_ep *usb_ep,
1165			   void *desc,
1166			   void (*complete)(struct usb_ep *usb_ep,
1167					    struct usb_request *req))
1168{
1169	int i;
1170
1171	usb_ep->card = midi2;
1172	usb_ep->ep = ep;
1173	usb_ep->usb_ep = usb_ep_autoconfig(midi2->gadget, desc);
1174	if (!usb_ep->usb_ep)
1175		return -ENODEV;
1176	usb_ep->complete = complete;
1177
1178	usb_ep->reqs = kcalloc(midi2->info.num_reqs, sizeof(*usb_ep->reqs),
1179			       GFP_KERNEL);
1180	if (!usb_ep->reqs)
1181		return -ENOMEM;
1182	for (i = 0; i < midi2->info.num_reqs; i++) {
1183		usb_ep->reqs[i].index = i;
1184		usb_ep->reqs[i].usb_ep = usb_ep;
1185		set_bit(i, &usb_ep->free_reqs);
1186		usb_ep->num_reqs++;
1187	}
1188
1189	return 0;
1190}
1191
1192/* Free EP */
1193static void f_midi2_free_ep(struct f_midi2_usb_ep *usb_ep)
1194{
1195	f_midi2_drop_reqs(usb_ep);
1196
1197	f_midi2_free_ep_reqs(usb_ep);
1198
1199	kfree(usb_ep->reqs);
1200	usb_ep->num_reqs = 0;
1201	usb_ep->free_reqs = 0;
1202	usb_ep->reqs = NULL;
1203}
1204
1205/* Queue requests for EP-out at start */
1206static void f_midi2_queue_out_reqs(struct f_midi2_usb_ep *usb_ep)
1207{
1208	int i, err;
1209
1210	if (!usb_ep->usb_ep)
1211		return;
1212
1213	for (i = 0; i < usb_ep->num_reqs; i++) {
1214		if (!test_bit(i, &usb_ep->free_reqs) || !usb_ep->reqs[i].req)
1215			continue;
1216		usb_ep->reqs[i].req->complete = usb_ep->complete;
1217		err = usb_ep_queue(usb_ep->usb_ep, usb_ep->reqs[i].req,
1218				   GFP_ATOMIC);
1219		if (!err)
1220			clear_bit(i, &usb_ep->free_reqs);
1221	}
1222}
1223
1224/*
1225 * Gadget Function callbacks
1226 */
1227
1228/* stop both IN and OUT EPs */
1229static void f_midi2_stop_eps(struct f_midi2_usb_ep *ep_in,
1230			     struct f_midi2_usb_ep *ep_out)
1231{
1232	f_midi2_drop_reqs(ep_in);
1233	f_midi2_drop_reqs(ep_out);
1234	f_midi2_free_ep_reqs(ep_in);
1235	f_midi2_free_ep_reqs(ep_out);
1236}
1237
1238/* start/queue both IN and OUT EPs */
1239static int f_midi2_start_eps(struct f_midi2_usb_ep *ep_in,
1240			     struct f_midi2_usb_ep *ep_out,
1241			     struct usb_function *fn)
1242{
1243	int err;
1244
1245	err = f_midi2_start_ep(ep_in, fn);
1246	if (err)
1247		return err;
1248	err = f_midi2_start_ep(ep_out, fn);
1249	if (err)
1250		return err;
1251
1252	err = f_midi2_alloc_ep_reqs(ep_in);
1253	if (err)
1254		return err;
1255	err = f_midi2_alloc_ep_reqs(ep_out);
1256	if (err)
1257		return err;
1258
1259	f_midi2_queue_out_reqs(ep_out);
1260	return 0;
1261}
1262
1263/* gadget function set_alt callback */
1264static int f_midi2_set_alt(struct usb_function *fn, unsigned int intf,
1265			   unsigned int alt)
1266{
1267	struct f_midi2 *midi2 = func_to_midi2(fn);
1268	struct f_midi2_ep *ep;
1269	int i, op_mode, err;
1270
1271	if (intf != midi2->midi_if || alt > 1)
1272		return 0;
1273
1274	if (alt == 0)
1275		op_mode = MIDI_OP_MODE_MIDI1;
1276	else if (alt == 1)
1277		op_mode = MIDI_OP_MODE_MIDI2;
1278	else
1279		op_mode = MIDI_OP_MODE_UNSET;
1280
1281	if (midi2->operation_mode == op_mode)
1282		return 0;
1283
1284	midi2->operation_mode = op_mode;
1285
1286	if (op_mode != MIDI_OP_MODE_MIDI1)
1287		f_midi2_stop_eps(&midi2->midi1_ep_in, &midi2->midi1_ep_out);
1288
1289	if (op_mode != MIDI_OP_MODE_MIDI2) {
1290		for (i = 0; i < midi2->num_eps; i++) {
1291			ep = &midi2->midi2_eps[i];
1292			f_midi2_stop_eps(&ep->ep_in, &ep->ep_out);
1293		}
1294	}
1295
1296	if (op_mode == MIDI_OP_MODE_MIDI1)
1297		return f_midi2_start_eps(&midi2->midi1_ep_in,
1298					 &midi2->midi1_ep_out, fn);
1299
1300	if (op_mode == MIDI_OP_MODE_MIDI2) {
1301		for (i = 0; i < midi2->num_eps; i++) {
1302			ep = &midi2->midi2_eps[i];
1303
1304			err = f_midi2_start_eps(&ep->ep_in, &ep->ep_out, fn);
1305			if (err)
1306				return err;
1307		}
1308	}
1309
1310	return 0;
1311}
1312
1313/* gadget function get_alt callback */
1314static int f_midi2_get_alt(struct usb_function *fn, unsigned int intf)
1315{
1316	struct f_midi2 *midi2 = func_to_midi2(fn);
1317
1318	if (intf == midi2->midi_if &&
1319	    midi2->operation_mode == MIDI_OP_MODE_MIDI2)
1320		return 1;
1321	return 0;
1322}
1323
1324/* convert UMP direction to USB MIDI 2.0 direction */
1325static unsigned int ump_to_usb_dir(unsigned int ump_dir)
1326{
1327	switch (ump_dir) {
1328	case SNDRV_UMP_DIR_INPUT:
1329		return USB_MS_GR_TRM_BLOCK_TYPE_INPUT_ONLY;
1330	case SNDRV_UMP_DIR_OUTPUT:
1331		return USB_MS_GR_TRM_BLOCK_TYPE_OUTPUT_ONLY;
1332	default:
1333		return USB_MS_GR_TRM_BLOCK_TYPE_BIDIRECTIONAL;
1334	}
1335}
1336
1337/* assign GTB descriptors (for the given request) */
1338static void assign_block_descriptors(struct f_midi2 *midi2,
1339				     struct usb_request *req,
1340				     int max_len)
1341{
1342	struct usb_ms20_gr_trm_block_header_descriptor header;
1343	struct usb_ms20_gr_trm_block_descriptor *desc;
1344	struct f_midi2_block_info *b;
1345	struct f_midi2_ep *ep;
1346	int i, blk, len;
1347	char *data;
1348
1349	len = sizeof(gtb_header_desc) + sizeof(gtb_desc) * midi2->total_blocks;
1350	if (WARN_ON(len > midi2->info.req_buf_size))
1351		return;
1352
1353	header = gtb_header_desc;
1354	header.wTotalLength = cpu_to_le16(len);
1355	if (max_len < len) {
1356		len = min_t(int, len, sizeof(header));
1357		memcpy(req->buf, &header, len);
1358		req->length = len;
1359		req->zero = len < max_len;
1360		return;
1361	}
1362
1363	memcpy(req->buf, &header, sizeof(header));
1364	data = req->buf + sizeof(header);
1365	for (i = 0; i < midi2->num_eps; i++) {
1366		ep = &midi2->midi2_eps[i];
1367		for (blk = 0; blk < ep->num_blks; blk++) {
1368			b = &ep->blks[blk].info;
1369			desc = (struct usb_ms20_gr_trm_block_descriptor *)data;
1370
1371			*desc = gtb_desc;
1372			desc->bGrpTrmBlkID = ep->blks[blk].gtb_id;
1373			desc->bGrpTrmBlkType = ump_to_usb_dir(b->direction);
1374			desc->nGroupTrm = b->first_group;
1375			desc->nNumGroupTrm = b->num_groups;
1376			desc->iBlockItem = ep->blks[blk].string_id;
1377
1378			if (ep->info.protocol & SNDRV_UMP_EP_INFO_PROTO_MIDI2)
1379				desc->bMIDIProtocol = USB_MS_MIDI_PROTO_2_0;
1380			else
1381				desc->bMIDIProtocol = USB_MS_MIDI_PROTO_1_0_128;
1382
1383			if (b->is_midi1 == 2) {
1384				desc->wMaxInputBandwidth = cpu_to_le16(1);
1385				desc->wMaxOutputBandwidth = cpu_to_le16(1);
1386			}
1387
1388			data += sizeof(*desc);
1389		}
1390	}
1391
1392	req->length = len;
1393	req->zero = len < max_len;
1394}
1395
1396/* gadget function setup callback: handle GTB requests */
1397static int f_midi2_setup(struct usb_function *fn,
1398			 const struct usb_ctrlrequest *ctrl)
1399{
1400	struct f_midi2 *midi2 = func_to_midi2(fn);
1401	struct usb_composite_dev *cdev = fn->config->cdev;
1402	struct usb_request *req = cdev->req;
1403	u16 value, length;
1404
1405	if ((ctrl->bRequestType & USB_TYPE_MASK) != USB_TYPE_STANDARD ||
1406	    ctrl->bRequest != USB_REQ_GET_DESCRIPTOR)
1407		return -EOPNOTSUPP;
1408
1409	value = le16_to_cpu(ctrl->wValue);
1410	length = le16_to_cpu(ctrl->wLength);
1411
1412	if ((value >> 8) != USB_DT_CS_GR_TRM_BLOCK)
1413		return -EOPNOTSUPP;
1414
1415	/* handle only altset 1 */
1416	if ((value & 0xff) != 1)
1417		return -EOPNOTSUPP;
1418
1419	assign_block_descriptors(midi2, req, length);
1420	return usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC);
1421}
1422
1423/* gadget function disable callback */
1424static void f_midi2_disable(struct usb_function *fn)
1425{
1426	struct f_midi2 *midi2 = func_to_midi2(fn);
1427
1428	midi2->operation_mode = MIDI_OP_MODE_UNSET;
1429}
1430
1431/*
1432 * ALSA UMP ops: most of them are NOPs, only trigger for write is needed
1433 */
1434static int f_midi2_ump_open(struct snd_ump_endpoint *ump, int dir)
1435{
1436	return 0;
1437}
1438
1439static void f_midi2_ump_close(struct snd_ump_endpoint *ump, int dir)
1440{
1441}
1442
1443static void f_midi2_ump_trigger(struct snd_ump_endpoint *ump, int dir, int up)
1444{
1445	struct f_midi2_ep *ep = ump->private_data;
1446	struct f_midi2 *midi2 = ep->card;
1447
1448	if (up && dir == SNDRV_RAWMIDI_STREAM_OUTPUT) {
1449		switch (midi2->operation_mode) {
1450		case MIDI_OP_MODE_MIDI1:
1451			process_midi1_transmit(midi2);
1452			break;
1453		case MIDI_OP_MODE_MIDI2:
1454			process_ump_transmit(ep);
1455			break;
1456		}
1457	}
1458}
1459
1460static void f_midi2_ump_drain(struct snd_ump_endpoint *ump, int dir)
1461{
1462}
1463
1464static const struct snd_ump_ops f_midi2_ump_ops = {
1465	.open = f_midi2_ump_open,
1466	.close = f_midi2_ump_close,
1467	.trigger = f_midi2_ump_trigger,
1468	.drain = f_midi2_ump_drain,
1469};
1470
1471/*
1472 * "Operation Mode" control element
1473 */
1474static int f_midi2_operation_mode_info(struct snd_kcontrol *kcontrol,
1475				       struct snd_ctl_elem_info *uinfo)
1476{
1477	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1478	uinfo->count = 1;
1479	uinfo->value.integer.min = MIDI_OP_MODE_UNSET;
1480	uinfo->value.integer.max = MIDI_OP_MODE_MIDI2;
1481	return 0;
1482}
1483
1484static int f_midi2_operation_mode_get(struct snd_kcontrol *kcontrol,
1485				      struct snd_ctl_elem_value *ucontrol)
1486{
1487	struct f_midi2 *midi2 = snd_kcontrol_chip(kcontrol);
1488
1489	ucontrol->value.integer.value[0] = midi2->operation_mode;
1490	return 0;
1491}
1492
1493static const struct snd_kcontrol_new operation_mode_ctl = {
1494	.iface = SNDRV_CTL_ELEM_IFACE_RAWMIDI,
1495	.name = "Operation Mode",
1496	.access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1497	.info = f_midi2_operation_mode_info,
1498	.get = f_midi2_operation_mode_get,
1499};
1500
1501/*
1502 * ALSA UMP instance creation / deletion
1503 */
1504static void f_midi2_free_card(struct f_midi2 *midi2)
1505{
1506	if (midi2->card) {
1507		snd_card_free_when_closed(midi2->card);
1508		midi2->card = NULL;
1509	}
1510}
1511
1512/* use a reverse direction for the gadget host */
1513static int reverse_dir(int dir)
1514{
1515	if (!dir || dir == SNDRV_UMP_DIR_BIDIRECTION)
1516		return dir;
1517	return (dir == SNDRV_UMP_DIR_OUTPUT) ?
1518		SNDRV_UMP_DIR_INPUT : SNDRV_UMP_DIR_OUTPUT;
1519}
1520
1521static int f_midi2_create_card(struct f_midi2 *midi2)
1522{
1523	struct snd_card *card;
1524	struct snd_ump_endpoint *ump;
1525	struct f_midi2_ep *ep;
1526	int i, id, blk, err;
1527	__be32 sw;
1528
1529	err = snd_card_new(&midi2->gadget->dev, -1, NULL, THIS_MODULE, 0,
1530			   &card);
1531	if (err < 0)
1532		return err;
1533	midi2->card = card;
1534
1535	strcpy(card->driver, "f_midi2");
1536	strcpy(card->shortname, "MIDI 2.0 Gadget");
1537	strcpy(card->longname, "MIDI 2.0 Gadget");
1538
1539	id = 0;
1540	for (i = 0; i < midi2->num_eps; i++) {
1541		ep = &midi2->midi2_eps[i];
1542		err = snd_ump_endpoint_new(card, "MIDI 2.0 Gadget", id,
1543					   1, 1, &ump);
1544		if (err < 0)
1545			goto error;
1546		id++;
1547
1548		ep->ump = ump;
1549		ump->no_process_stream = true;
1550		ump->private_data = ep;
1551		ump->ops = &f_midi2_ump_ops;
1552		if (midi2->info.static_block)
1553			ump->info.flags |= SNDRV_UMP_EP_INFO_STATIC_BLOCKS;
1554		ump->info.protocol_caps = (ep->info.protocol_caps & 3) << 8;
1555		ump->info.protocol = (ep->info.protocol & 3) << 8;
1556		ump->info.version = 0x0101;
1557		ump->info.family_id = ep->info.family;
1558		ump->info.model_id = ep->info.model;
1559		ump->info.manufacturer_id = ep->info.manufacturer & 0xffffff;
1560		sw = cpu_to_be32(ep->info.sw_revision);
1561		memcpy(ump->info.sw_revision, &sw, 4);
1562
1563		strscpy(ump->info.name, ump_ep_name(ep),
1564			sizeof(ump->info.name));
1565		strscpy(ump->info.product_id, ump_product_id(ep),
1566			sizeof(ump->info.product_id));
1567		strscpy(ump->core.name, ump->info.name, sizeof(ump->core.name));
1568
1569		for (blk = 0; blk < ep->num_blks; blk++) {
1570			const struct f_midi2_block_info *b = &ep->blks[blk].info;
1571			struct snd_ump_block *fb;
1572
1573			err = snd_ump_block_new(ump, blk,
1574						reverse_dir(b->direction),
1575						b->first_group, b->num_groups,
1576						&ep->blks[blk].fb);
1577			if (err < 0)
1578				goto error;
1579			fb = ep->blks[blk].fb;
1580			fb->info.active = !!b->active;
1581			fb->info.midi_ci_version = b->midi_ci_version;
1582			fb->info.ui_hint = reverse_dir(b->ui_hint);
1583			fb->info.sysex8_streams = b->sysex8_streams;
1584			fb->info.flags |= b->is_midi1;
1585			strscpy(fb->info.name, ump_fb_name(b),
1586				sizeof(fb->info.name));
1587		}
1588	}
1589
1590	for (i = 0; i < midi2->num_eps; i++) {
1591		err = snd_ump_attach_legacy_rawmidi(midi2->midi2_eps[i].ump,
1592						    "Legacy MIDI", id);
1593		if (err < 0)
1594			goto error;
1595		id++;
1596	}
1597
1598	err = snd_ctl_add(card, snd_ctl_new1(&operation_mode_ctl, midi2));
1599	if (err < 0)
1600		goto error;
1601
1602	err = snd_card_register(card);
1603	if (err < 0)
1604		goto error;
1605
1606	return 0;
1607
1608 error:
1609	f_midi2_free_card(midi2);
1610	return err;
1611}
1612
1613/*
1614 * Creation of USB descriptors
1615 */
1616struct f_midi2_usb_config {
1617	struct usb_descriptor_header **list;
1618	unsigned int size;
1619	unsigned int alloc;
1620
1621	/* MIDI 1.0 jacks */
1622	unsigned char jack_in, jack_out, jack_id;
1623	struct usb_midi_in_jack_descriptor jack_ins[MAX_CABLES];
1624	struct usb_midi_out_jack_descriptor_1 jack_outs[MAX_CABLES];
1625};
1626
1627static int append_config(struct f_midi2_usb_config *config, void *d)
1628{
1629	unsigned int size;
1630	void *buf;
1631
1632	if (config->size + 2 >= config->alloc) {
1633		size = config->size + 16;
1634		buf = krealloc(config->list, size * sizeof(void *), GFP_KERNEL);
1635		if (!buf)
1636			return -ENOMEM;
1637		config->list = buf;
1638		config->alloc = size;
1639	}
1640
1641	config->list[config->size] = d;
1642	config->size++;
1643	config->list[config->size] = NULL;
1644	return 0;
1645}
1646
1647static int append_configs(struct f_midi2_usb_config *config, void **d)
1648{
1649	int err;
1650
1651	for (; *d; d++) {
1652		err = append_config(config, *d);
1653		if (err)
1654			return err;
1655	}
1656	return 0;
1657}
1658
1659static int append_midi1_in_jack(struct f_midi2 *midi2,
1660				struct f_midi2_usb_config *config,
1661				struct midi1_cable_mapping *map,
1662				unsigned int type)
1663{
1664	struct usb_midi_in_jack_descriptor *jack =
1665		&config->jack_ins[config->jack_in++];
1666	int id = ++config->jack_id;
1667	int err;
1668
1669	jack->bLength = 0x06;
1670	jack->bDescriptorType = USB_DT_CS_INTERFACE;
1671	jack->bDescriptorSubtype = USB_MS_MIDI_IN_JACK;
1672	jack->bJackType = type;
1673	jack->bJackID = id;
1674	/* use the corresponding block name as jack name */
1675	if (map->ep)
1676		jack->iJack = map->ep->blks[map->block].string_id;
1677
1678	err = append_config(config, jack);
1679	if (err < 0)
1680		return err;
1681	return id;
1682}
1683
1684static int append_midi1_out_jack(struct f_midi2 *midi2,
1685				 struct f_midi2_usb_config *config,
1686				 struct midi1_cable_mapping *map,
1687				 unsigned int type, unsigned int source)
1688{
1689	struct usb_midi_out_jack_descriptor_1 *jack =
1690		&config->jack_outs[config->jack_out++];
1691	int id = ++config->jack_id;
1692	int err;
1693
1694	jack->bLength = 0x09;
1695	jack->bDescriptorType = USB_DT_CS_INTERFACE;
1696	jack->bDescriptorSubtype = USB_MS_MIDI_OUT_JACK;
1697	jack->bJackType = type;
1698	jack->bJackID = id;
1699	jack->bNrInputPins = 1;
1700	jack->pins[0].baSourceID = source;
1701	jack->pins[0].baSourcePin = 0x01;
1702	/* use the corresponding block name as jack name */
1703	if (map->ep)
1704		jack->iJack = map->ep->blks[map->block].string_id;
1705
1706	err = append_config(config, jack);
1707	if (err < 0)
1708		return err;
1709	return id;
1710}
1711
1712static int f_midi2_create_usb_configs(struct f_midi2 *midi2,
1713				      struct f_midi2_usb_config *config,
1714				      int speed)
1715{
1716	void **midi1_in_eps, **midi1_out_eps;
1717	int i, jack, total;
1718	int err;
1719
1720	switch (speed) {
1721	default:
1722	case USB_SPEED_HIGH:
1723		midi2_midi1_ep_out_desc.wMaxPacketSize = cpu_to_le16(512);
1724		midi2_midi1_ep_in_desc.wMaxPacketSize = cpu_to_le16(512);
1725		for (i = 0; i < midi2->num_eps; i++)
1726			midi2_midi2_ep_out_desc[i].wMaxPacketSize =
1727				cpu_to_le16(512);
1728		fallthrough;
1729	case USB_SPEED_FULL:
1730		midi1_in_eps = midi2_midi1_ep_in_descs;
1731		midi1_out_eps = midi2_midi1_ep_out_descs;
1732		break;
1733	case USB_SPEED_SUPER:
1734		midi2_midi1_ep_out_desc.wMaxPacketSize = cpu_to_le16(1024);
1735		midi2_midi1_ep_in_desc.wMaxPacketSize = cpu_to_le16(1024);
1736		for (i = 0; i < midi2->num_eps; i++)
1737			midi2_midi2_ep_out_desc[i].wMaxPacketSize =
1738				cpu_to_le16(1024);
1739		midi1_in_eps = midi2_midi1_ep_in_ss_descs;
1740		midi1_out_eps = midi2_midi1_ep_out_ss_descs;
1741		break;
1742	}
1743
1744	err = append_configs(config, midi2_audio_descs);
1745	if (err < 0)
1746		return err;
1747
1748	if (midi2->num_midi1_in && midi2->num_midi1_out)
1749		midi2_midi1_if_desc.bNumEndpoints = 2;
1750	else
1751		midi2_midi1_if_desc.bNumEndpoints = 1;
1752
1753	err = append_configs(config, midi2_midi1_descs);
1754	if (err < 0)
1755		return err;
1756
1757	total = USB_DT_MS_HEADER_SIZE;
1758	if (midi2->num_midi1_out) {
1759		midi2_midi1_ep_out_class_desc.bLength =
1760			USB_DT_MS_ENDPOINT_SIZE(midi2->num_midi1_out);
1761		total += midi2_midi1_ep_out_class_desc.bLength;
1762		midi2_midi1_ep_out_class_desc.bNumEmbMIDIJack =
1763			midi2->num_midi1_out;
1764		total += midi2->num_midi1_out *
1765			(USB_DT_MIDI_IN_SIZE + USB_DT_MIDI_OUT_SIZE(1));
1766		for (i = 0; i < midi2->num_midi1_out; i++) {
1767			jack = append_midi1_in_jack(midi2, config,
1768						    &midi2->in_cable_mapping[i],
1769						    USB_MS_EMBEDDED);
1770			if (jack < 0)
1771				return jack;
1772			midi2_midi1_ep_out_class_desc.baAssocJackID[i] = jack;
1773			jack = append_midi1_out_jack(midi2, config,
1774						     &midi2->in_cable_mapping[i],
1775						     USB_MS_EXTERNAL, jack);
1776			if (jack < 0)
1777				return jack;
1778		}
1779	}
1780
1781	if (midi2->num_midi1_in) {
1782		midi2_midi1_ep_in_class_desc.bLength =
1783			USB_DT_MS_ENDPOINT_SIZE(midi2->num_midi1_in);
1784		total += midi2_midi1_ep_in_class_desc.bLength;
1785		midi2_midi1_ep_in_class_desc.bNumEmbMIDIJack =
1786			midi2->num_midi1_in;
1787		total += midi2->num_midi1_in *
1788			(USB_DT_MIDI_IN_SIZE + USB_DT_MIDI_OUT_SIZE(1));
1789		for (i = 0; i < midi2->num_midi1_in; i++) {
1790			jack = append_midi1_in_jack(midi2, config,
1791						    &midi2->out_cable_mapping[i],
1792						    USB_MS_EXTERNAL);
1793			if (jack < 0)
1794				return jack;
1795			jack = append_midi1_out_jack(midi2, config,
1796						     &midi2->out_cable_mapping[i],
1797						     USB_MS_EMBEDDED, jack);
1798			if (jack < 0)
1799				return jack;
1800			midi2_midi1_ep_in_class_desc.baAssocJackID[i] = jack;
1801		}
1802	}
1803
1804	midi2_midi1_class_desc.wTotalLength = cpu_to_le16(total);
1805
1806	if (midi2->num_midi1_out) {
1807		err = append_configs(config, midi1_out_eps);
1808		if (err < 0)
1809			return err;
1810	}
1811	if (midi2->num_midi1_in) {
1812		err = append_configs(config, midi1_in_eps);
1813		if (err < 0)
1814			return err;
1815	}
1816
1817	err = append_configs(config, midi2_midi2_descs);
1818	if (err < 0)
1819		return err;
1820
1821	for (i = 0; i < midi2->num_eps; i++) {
1822		err = append_config(config, &midi2_midi2_ep_out_desc[i]);
1823		if (err < 0)
1824			return err;
1825		if (speed == USB_SPEED_SUPER || speed == USB_SPEED_SUPER_PLUS) {
1826			err = append_config(config, &midi2_midi2_ep_out_ss_comp_desc);
1827			if (err < 0)
1828				return err;
1829		}
1830		err = append_config(config, &midi2_midi2_ep_out_class_desc[i]);
1831		if (err < 0)
1832			return err;
1833		err = append_config(config, &midi2_midi2_ep_in_desc[i]);
1834		if (err < 0)
1835			return err;
1836		if (speed == USB_SPEED_SUPER || speed == USB_SPEED_SUPER_PLUS) {
1837			err = append_config(config, &midi2_midi2_ep_in_ss_comp_desc);
1838			if (err < 0)
1839				return err;
1840		}
1841		err = append_config(config, &midi2_midi2_ep_in_class_desc[i]);
1842		if (err < 0)
1843			return err;
1844	}
1845
1846	return 0;
1847}
1848
1849static void f_midi2_free_usb_configs(struct f_midi2_usb_config *config)
1850{
1851	kfree(config->list);
1852	memset(config, 0, sizeof(*config));
1853}
1854
1855/* as we use the static descriptors for simplicity, serialize bind call */
1856static DEFINE_MUTEX(f_midi2_desc_mutex);
1857
1858/* fill MIDI2 EP class-specific descriptor */
1859static void fill_midi2_class_desc(struct f_midi2_ep *ep,
1860				  struct usb_ms20_endpoint_descriptor_32 *cdesc)
1861{
1862	int blk;
1863
1864	cdesc->bLength = USB_DT_MS20_ENDPOINT_SIZE(ep->num_blks);
1865	cdesc->bDescriptorType = USB_DT_CS_ENDPOINT;
1866	cdesc->bDescriptorSubtype = USB_MS_GENERAL_2_0;
1867	cdesc->bNumGrpTrmBlock = ep->num_blks;
1868	for (blk = 0; blk < ep->num_blks; blk++)
1869		cdesc->baAssoGrpTrmBlkID[blk] = ep->blks[blk].gtb_id;
1870}
1871
1872/* initialize MIDI2 EP-in */
1873static int f_midi2_init_midi2_ep_in(struct f_midi2 *midi2, int index)
1874{
1875	struct f_midi2_ep *ep = &midi2->midi2_eps[index];
1876	struct usb_endpoint_descriptor *desc = &midi2_midi2_ep_in_desc[index];
1877
1878	desc->bLength = USB_DT_ENDPOINT_SIZE;
1879	desc->bDescriptorType = USB_DT_ENDPOINT;
1880	desc->bEndpointAddress = USB_DIR_IN;
1881	desc->bmAttributes = USB_ENDPOINT_XFER_INT;
1882	desc->wMaxPacketSize = cpu_to_le16(EP_MAX_PACKET_INT);
1883	desc->bInterval = 1;
1884
1885	fill_midi2_class_desc(ep, &midi2_midi2_ep_in_class_desc[index]);
1886
1887	return f_midi2_init_ep(midi2, ep, &ep->ep_in, desc,
1888			       f_midi2_ep_in_complete);
1889}
1890
1891/* initialize MIDI2 EP-out */
1892static int f_midi2_init_midi2_ep_out(struct f_midi2 *midi2, int index)
1893{
1894	struct f_midi2_ep *ep = &midi2->midi2_eps[index];
1895	struct usb_endpoint_descriptor *desc = &midi2_midi2_ep_out_desc[index];
1896
1897	desc->bLength = USB_DT_ENDPOINT_SIZE;
1898	desc->bDescriptorType = USB_DT_ENDPOINT;
1899	desc->bEndpointAddress = USB_DIR_OUT;
1900	desc->bmAttributes = USB_ENDPOINT_XFER_BULK;
1901
1902	fill_midi2_class_desc(ep, &midi2_midi2_ep_out_class_desc[index]);
1903
1904	return f_midi2_init_ep(midi2, ep, &ep->ep_out, desc,
1905			       f_midi2_ep_out_complete);
1906}
1907
1908/* gadget function bind callback */
1909static int f_midi2_bind(struct usb_configuration *c, struct usb_function *f)
1910{
1911	struct usb_composite_dev *cdev = c->cdev;
1912	struct f_midi2 *midi2 = func_to_midi2(f);
1913	struct f_midi2_ep *ep;
1914	struct f_midi2_usb_config config = {};
1915	struct usb_gadget_strings string_fn = {
1916		.language = 0x0409,	/* en-us */
1917		.strings = midi2->string_defs,
1918	};
1919	struct usb_gadget_strings *strings[] = {
1920		&string_fn,
1921		NULL,
1922	};
1923	int i, blk, status;
1924
1925	midi2->gadget = cdev->gadget;
1926	midi2->operation_mode = MIDI_OP_MODE_UNSET;
1927
1928	status = f_midi2_create_card(midi2);
1929	if (status < 0)
1930		goto fail_register;
1931
1932	/* maybe allocate device-global string ID */
1933	midi2->strings = usb_gstrings_attach(c->cdev, strings,
1934					     midi2->total_blocks + 1);
1935	if (IS_ERR(midi2->strings)) {
1936		status = PTR_ERR(midi2->strings);
1937		goto fail_string;
1938	}
1939
1940	mutex_lock(&f_midi2_desc_mutex);
1941	midi2_midi1_if_desc.iInterface = midi2->strings[STR_IFACE].id;
1942	midi2_midi2_if_desc.iInterface = midi2->strings[STR_IFACE].id;
1943	for (i = 0; i < midi2->num_eps; i++) {
1944		ep = &midi2->midi2_eps[i];
1945		for (blk = 0; blk < ep->num_blks; blk++)
1946			ep->blks[blk].string_id =
1947				midi2->strings[gtb_to_str_id(ep->blks[blk].gtb_id)].id;
1948	}
1949
1950	midi2_midi2_if_desc.bNumEndpoints = midi2->num_eps * 2;
1951
1952	/* audio interface */
1953	status = usb_interface_id(c, f);
1954	if (status < 0)
1955		goto fail;
1956	midi2_audio_if_desc.bInterfaceNumber = status;
1957
1958	/* MIDI streaming */
1959	status = usb_interface_id(c, f);
1960	if (status < 0)
1961		goto fail;
1962	midi2->midi_if = status;
1963	midi2_midi1_if_desc.bInterfaceNumber = status;
1964	midi2_midi2_if_desc.bInterfaceNumber = status;
1965	midi2_audio_class_desc.baInterfaceNr[0] = status;
1966
1967	/* allocate instance-specific endpoints */
1968	if (midi2->midi2_eps[0].blks[0].info.direction != SNDRV_UMP_DIR_OUTPUT) {
1969		status = f_midi2_init_ep(midi2, NULL, &midi2->midi1_ep_in,
1970					 &midi2_midi1_ep_in_desc,
1971					 f_midi2_midi1_ep_in_complete);
1972		if (status)
1973			goto fail;
1974	}
1975
1976	if (midi2->midi2_eps[0].blks[0].info.direction != SNDRV_UMP_DIR_INPUT) {
1977		status = f_midi2_init_ep(midi2, NULL, &midi2->midi1_ep_out,
1978					 &midi2_midi1_ep_out_desc,
1979					 f_midi2_midi1_ep_out_complete);
1980		if (status)
1981			goto fail;
1982	}
1983
1984	for (i = 0; i < midi2->num_eps; i++) {
1985		status = f_midi2_init_midi2_ep_in(midi2, i);
1986		if (status)
1987			goto fail;
1988		status = f_midi2_init_midi2_ep_out(midi2, i);
1989		if (status)
1990			goto fail;
1991	}
1992
1993	status = f_midi2_create_usb_configs(midi2, &config, USB_SPEED_FULL);
1994	if (status < 0)
1995		goto fail;
1996	f->fs_descriptors = usb_copy_descriptors(config.list);
1997	if (!f->fs_descriptors) {
1998		status = -ENOMEM;
1999		goto fail;
2000	}
2001	f_midi2_free_usb_configs(&config);
2002
2003	status = f_midi2_create_usb_configs(midi2, &config, USB_SPEED_HIGH);
2004	if (status < 0)
2005		goto fail;
2006	f->hs_descriptors = usb_copy_descriptors(config.list);
2007	if (!f->hs_descriptors) {
2008		status = -ENOMEM;
2009		goto fail;
2010	}
2011	f_midi2_free_usb_configs(&config);
2012
2013	status = f_midi2_create_usb_configs(midi2, &config, USB_SPEED_SUPER);
2014	if (status < 0)
2015		goto fail;
2016	f->ss_descriptors = usb_copy_descriptors(config.list);
2017	if (!f->ss_descriptors) {
2018		status = -ENOMEM;
2019		goto fail;
2020	}
2021	f_midi2_free_usb_configs(&config);
2022
2023	mutex_unlock(&f_midi2_desc_mutex);
2024	return 0;
2025
2026fail:
2027	f_midi2_free_usb_configs(&config);
2028	mutex_unlock(&f_midi2_desc_mutex);
2029	usb_free_all_descriptors(f);
2030fail_string:
2031	f_midi2_free_card(midi2);
2032fail_register:
2033	ERROR(midi2, "%s: can't bind, err %d\n", f->name, status);
2034	return status;
2035}
2036
2037/* gadget function unbind callback */
2038static void f_midi2_unbind(struct usb_configuration *c, struct usb_function *f)
2039{
2040	struct f_midi2 *midi2 = func_to_midi2(f);
2041	int i;
2042
2043	f_midi2_free_card(midi2);
2044
2045	f_midi2_free_ep(&midi2->midi1_ep_in);
2046	f_midi2_free_ep(&midi2->midi1_ep_out);
2047	for (i = 0; i < midi2->num_eps; i++) {
2048		f_midi2_free_ep(&midi2->midi2_eps[i].ep_in);
2049		f_midi2_free_ep(&midi2->midi2_eps[i].ep_out);
2050	}
2051
2052	usb_free_all_descriptors(f);
2053}
2054
2055/*
2056 * ConfigFS interface
2057 */
2058
2059/* type conversion helpers */
2060static inline struct f_midi2_opts *to_f_midi2_opts(struct config_item *item)
2061{
2062	return container_of(to_config_group(item), struct f_midi2_opts,
2063			    func_inst.group);
2064}
2065
2066static inline struct f_midi2_ep_opts *
2067to_f_midi2_ep_opts(struct config_item *item)
2068{
2069	return container_of(to_config_group(item), struct f_midi2_ep_opts,
2070			    group);
2071}
2072
2073static inline struct f_midi2_block_opts *
2074to_f_midi2_block_opts(struct config_item *item)
2075{
2076	return container_of(to_config_group(item), struct f_midi2_block_opts,
2077			    group);
2078}
2079
2080/* trim the string to be usable for EP and FB name strings */
2081static void make_name_string(char *s)
2082{
2083	char *p;
2084
2085	p = strchr(s, '\n');
2086	if (p)
2087		*p = 0;
2088
2089	p = s + strlen(s);
2090	for (; p > s && isspace(*p); p--)
2091		*p = 0;
2092}
2093
2094/* configfs helpers: generic show/store for unisnged int */
2095static ssize_t f_midi2_opts_uint_show(struct f_midi2_opts *opts,
2096				      u32 val, const char *format, char *page)
2097{
2098	int result;
2099
2100	mutex_lock(&opts->lock);
2101	result = sprintf(page, format, val);
2102	mutex_unlock(&opts->lock);
2103	return result;
2104}
2105
2106static ssize_t f_midi2_opts_uint_store(struct f_midi2_opts *opts,
2107				       u32 *valp, u32 minval, u32 maxval,
2108				       const char *page, size_t len)
2109{
2110	int ret;
2111	u32 val;
2112
2113	mutex_lock(&opts->lock);
2114	if (opts->refcnt) {
2115		ret = -EBUSY;
2116		goto end;
2117	}
2118
2119	ret = kstrtou32(page, 0, &val);
2120	if (ret)
2121		goto end;
2122	if (val < minval || val > maxval) {
2123		ret = -EINVAL;
2124		goto end;
2125	}
2126
2127	*valp = val;
2128	ret = len;
2129
2130end:
2131	mutex_unlock(&opts->lock);
2132	return ret;
2133}
2134
2135/* generic store for bool */
2136static ssize_t f_midi2_opts_bool_store(struct f_midi2_opts *opts,
2137				       bool *valp, const char *page, size_t len)
2138{
2139	int ret;
2140	bool val;
2141
2142	mutex_lock(&opts->lock);
2143	if (opts->refcnt) {
2144		ret = -EBUSY;
2145		goto end;
2146	}
2147
2148	ret = kstrtobool(page, &val);
2149	if (ret)
2150		goto end;
2151	*valp = val;
2152	ret = len;
2153
2154end:
2155	mutex_unlock(&opts->lock);
2156	return ret;
2157}
2158
2159/* generic show/store for string */
2160static ssize_t f_midi2_opts_str_show(struct f_midi2_opts *opts,
2161				     const char *str, char *page)
2162{
2163	int result = 0;
2164
2165	mutex_lock(&opts->lock);
2166	if (str)
2167		result = scnprintf(page, PAGE_SIZE, "%s\n", str);
2168	mutex_unlock(&opts->lock);
2169	return result;
2170}
2171
2172static ssize_t f_midi2_opts_str_store(struct f_midi2_opts *opts,
2173				      const char **strp, size_t maxlen,
2174				      const char *page, size_t len)
2175{
2176	char *c;
2177	int ret;
2178
2179	mutex_lock(&opts->lock);
2180	if (opts->refcnt) {
2181		ret = -EBUSY;
2182		goto end;
2183	}
2184
2185	c = kstrndup(page, min(len, maxlen), GFP_KERNEL);
2186	if (!c) {
2187		ret = -ENOMEM;
2188		goto end;
2189	}
2190
2191	kfree(*strp);
2192	make_name_string(c);
2193	*strp = c;
2194	ret = len;
2195
2196end:
2197	mutex_unlock(&opts->lock);
2198	return ret;
2199}
2200
2201/*
2202 * Definitions for UMP Block config
2203 */
2204
2205/* define an uint option for block */
2206#define F_MIDI2_BLOCK_OPT(name, format, minval, maxval)			\
2207static ssize_t f_midi2_block_opts_##name##_show(struct config_item *item,\
2208					  char *page)			\
2209{									\
2210	struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item);	\
2211	return f_midi2_opts_uint_show(opts->ep->opts, opts->info.name,	\
2212				      format "\n", page);		\
2213}									\
2214									\
2215static ssize_t f_midi2_block_opts_##name##_store(struct config_item *item,\
2216					 const char *page, size_t len)	\
2217{									\
2218	struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item);	\
2219	return f_midi2_opts_uint_store(opts->ep->opts, &opts->info.name,\
2220				       minval, maxval, page, len);	\
2221}									\
2222									\
2223CONFIGFS_ATTR(f_midi2_block_opts_, name)
2224
2225/* define a boolean option for block */
2226#define F_MIDI2_BLOCK_BOOL_OPT(name)					\
2227static ssize_t f_midi2_block_opts_##name##_show(struct config_item *item,\
2228					  char *page)			\
2229{									\
2230	struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item);	\
2231	return f_midi2_opts_uint_show(opts->ep->opts, opts->info.name,	\
2232				      "%u\n", page);			\
2233}									\
2234									\
2235static ssize_t f_midi2_block_opts_##name##_store(struct config_item *item,\
2236					 const char *page, size_t len)	\
2237{									\
2238	struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item);	\
2239	return f_midi2_opts_bool_store(opts->ep->opts, &opts->info.name,\
2240				       page, len);			\
2241}									\
2242									\
2243CONFIGFS_ATTR(f_midi2_block_opts_, name)
2244
2245F_MIDI2_BLOCK_OPT(direction, "0x%x", 1, 3);
2246F_MIDI2_BLOCK_OPT(first_group, "0x%x", 0, 15);
2247F_MIDI2_BLOCK_OPT(num_groups, "0x%x", 1, 16);
2248F_MIDI2_BLOCK_OPT(midi1_first_group, "0x%x", 0, 15);
2249F_MIDI2_BLOCK_OPT(midi1_num_groups, "0x%x", 0, 16);
2250F_MIDI2_BLOCK_OPT(ui_hint, "0x%x", 0, 3);
2251F_MIDI2_BLOCK_OPT(midi_ci_version, "%u", 0, 1);
2252F_MIDI2_BLOCK_OPT(sysex8_streams, "%u", 0, 255);
2253F_MIDI2_BLOCK_OPT(is_midi1, "%u", 0, 2);
2254F_MIDI2_BLOCK_BOOL_OPT(active);
2255
2256static ssize_t f_midi2_block_opts_name_show(struct config_item *item,
2257					    char *page)
2258{
2259	struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item);
2260
2261	return f_midi2_opts_str_show(opts->ep->opts, opts->info.name, page);
2262}
2263
2264static ssize_t f_midi2_block_opts_name_store(struct config_item *item,
2265					     const char *page, size_t len)
2266{
2267	struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item);
2268
2269	return f_midi2_opts_str_store(opts->ep->opts, &opts->info.name, 128,
2270				      page, len);
2271}
2272
2273CONFIGFS_ATTR(f_midi2_block_opts_, name);
2274
2275static struct configfs_attribute *f_midi2_block_attrs[] = {
2276	&f_midi2_block_opts_attr_direction,
2277	&f_midi2_block_opts_attr_first_group,
2278	&f_midi2_block_opts_attr_num_groups,
2279	&f_midi2_block_opts_attr_midi1_first_group,
2280	&f_midi2_block_opts_attr_midi1_num_groups,
2281	&f_midi2_block_opts_attr_ui_hint,
2282	&f_midi2_block_opts_attr_midi_ci_version,
2283	&f_midi2_block_opts_attr_sysex8_streams,
2284	&f_midi2_block_opts_attr_is_midi1,
2285	&f_midi2_block_opts_attr_active,
2286	&f_midi2_block_opts_attr_name,
2287	NULL,
2288};
2289
2290static void f_midi2_block_opts_release(struct config_item *item)
2291{
2292	struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item);
2293
2294	kfree(opts->info.name);
2295	kfree(opts);
2296}
2297
2298static struct configfs_item_operations f_midi2_block_item_ops = {
2299	.release	= f_midi2_block_opts_release,
2300};
2301
2302static const struct config_item_type f_midi2_block_type = {
2303	.ct_item_ops	= &f_midi2_block_item_ops,
2304	.ct_attrs	= f_midi2_block_attrs,
2305	.ct_owner	= THIS_MODULE,
2306};
2307
2308/* create a f_midi2_block_opts instance for the given block number */
2309static int f_midi2_block_opts_create(struct f_midi2_ep_opts *ep_opts,
2310				     unsigned int blk,
2311				     struct f_midi2_block_opts **block_p)
2312{
2313	struct f_midi2_block_opts *block_opts;
2314	int ret = 0;
2315
2316	mutex_lock(&ep_opts->opts->lock);
2317	if (ep_opts->opts->refcnt || ep_opts->blks[blk]) {
2318		ret = -EBUSY;
2319		goto out;
2320	}
2321
2322	block_opts = kzalloc(sizeof(*block_opts), GFP_KERNEL);
2323	if (!block_opts) {
2324		ret = -ENOMEM;
2325		goto out;
2326	}
2327
2328	block_opts->ep = ep_opts;
2329	block_opts->id = blk;
2330
2331	/* set up the default values */
2332	block_opts->info.direction = SNDRV_UMP_DIR_BIDIRECTION;
2333	block_opts->info.first_group = 0;
2334	block_opts->info.num_groups = 1;
2335	block_opts->info.ui_hint = SNDRV_UMP_BLOCK_UI_HINT_BOTH;
2336	block_opts->info.active = 1;
2337
2338	ep_opts->blks[blk] = block_opts;
2339	*block_p = block_opts;
2340
2341 out:
2342	mutex_unlock(&ep_opts->opts->lock);
2343	return ret;
2344}
2345
2346/* make_group callback for a block */
2347static struct config_group *
2348f_midi2_opts_block_make(struct config_group *group, const char *name)
2349{
2350	struct f_midi2_ep_opts *ep_opts;
2351	struct f_midi2_block_opts *block_opts;
2352	unsigned int blk;
2353	int ret;
2354
2355	if (strncmp(name, "block.", 6))
2356		return ERR_PTR(-EINVAL);
2357	ret = kstrtouint(name + 6, 10, &blk);
2358	if (ret)
2359		return ERR_PTR(ret);
2360
2361	ep_opts = to_f_midi2_ep_opts(&group->cg_item);
2362
2363	if (blk >= SNDRV_UMP_MAX_BLOCKS)
2364		return ERR_PTR(-EINVAL);
2365	if (ep_opts->blks[blk])
2366		return ERR_PTR(-EBUSY);
2367	ret = f_midi2_block_opts_create(ep_opts, blk, &block_opts);
2368	if (ret)
2369		return ERR_PTR(ret);
2370
2371	config_group_init_type_name(&block_opts->group, name,
2372				    &f_midi2_block_type);
2373	return &block_opts->group;
2374}
2375
2376/* drop_item callback for a block */
2377static void
2378f_midi2_opts_block_drop(struct config_group *group, struct config_item *item)
2379{
2380	struct f_midi2_block_opts *block_opts = to_f_midi2_block_opts(item);
2381
2382	mutex_lock(&block_opts->ep->opts->lock);
2383	block_opts->ep->blks[block_opts->id] = NULL;
2384	mutex_unlock(&block_opts->ep->opts->lock);
2385	config_item_put(item);
2386}
2387
2388/*
2389 * Definitions for UMP Endpoint config
2390 */
2391
2392/* define an uint option for EP */
2393#define F_MIDI2_EP_OPT(name, format, minval, maxval)			\
2394static ssize_t f_midi2_ep_opts_##name##_show(struct config_item *item,	\
2395					     char *page)		\
2396{									\
2397	struct f_midi2_ep_opts *opts = to_f_midi2_ep_opts(item);	\
2398	return f_midi2_opts_uint_show(opts->opts, opts->info.name,	\
2399				      format "\n", page);		\
2400}									\
2401									\
2402static ssize_t f_midi2_ep_opts_##name##_store(struct config_item *item,	\
2403					   const char *page, size_t len)\
2404{									\
2405	struct f_midi2_ep_opts *opts = to_f_midi2_ep_opts(item);	\
2406	return f_midi2_opts_uint_store(opts->opts, &opts->info.name,	\
2407				       minval, maxval, page, len);	\
2408}									\
2409									\
2410CONFIGFS_ATTR(f_midi2_ep_opts_, name)
2411
2412/* define a string option for EP */
2413#define F_MIDI2_EP_STR_OPT(name, maxlen)				\
2414static ssize_t f_midi2_ep_opts_##name##_show(struct config_item *item,	\
2415					     char *page)		\
2416{									\
2417	struct f_midi2_ep_opts *opts = to_f_midi2_ep_opts(item);	\
2418	return f_midi2_opts_str_show(opts->opts, opts->info.name, page);\
2419}									\
2420									\
2421static ssize_t f_midi2_ep_opts_##name##_store(struct config_item *item,	\
2422					 const char *page, size_t len)	\
2423{									\
2424	struct f_midi2_ep_opts *opts = to_f_midi2_ep_opts(item);	\
2425	return f_midi2_opts_str_store(opts->opts, &opts->info.name, maxlen,\
2426				      page, len);			\
2427}									\
2428									\
2429CONFIGFS_ATTR(f_midi2_ep_opts_, name)
2430
2431F_MIDI2_EP_OPT(protocol, "0x%x", 1, 2);
2432F_MIDI2_EP_OPT(protocol_caps, "0x%x", 1, 3);
2433F_MIDI2_EP_OPT(manufacturer, "0x%x", 0, 0xffffff);
2434F_MIDI2_EP_OPT(family, "0x%x", 0, 0xffff);
2435F_MIDI2_EP_OPT(model, "0x%x", 0, 0xffff);
2436F_MIDI2_EP_OPT(sw_revision, "0x%x", 0, 0xffffffff);
2437F_MIDI2_EP_STR_OPT(ep_name, 128);
2438F_MIDI2_EP_STR_OPT(product_id, 128);
2439
2440static struct configfs_attribute *f_midi2_ep_attrs[] = {
2441	&f_midi2_ep_opts_attr_protocol,
2442	&f_midi2_ep_opts_attr_protocol_caps,
2443	&f_midi2_ep_opts_attr_ep_name,
2444	&f_midi2_ep_opts_attr_product_id,
2445	&f_midi2_ep_opts_attr_manufacturer,
2446	&f_midi2_ep_opts_attr_family,
2447	&f_midi2_ep_opts_attr_model,
2448	&f_midi2_ep_opts_attr_sw_revision,
2449	NULL,
2450};
2451
2452static void f_midi2_ep_opts_release(struct config_item *item)
2453{
2454	struct f_midi2_ep_opts *opts = to_f_midi2_ep_opts(item);
2455
2456	kfree(opts->info.ep_name);
2457	kfree(opts->info.product_id);
2458	kfree(opts);
2459}
2460
2461static struct configfs_item_operations f_midi2_ep_item_ops = {
2462	.release	= f_midi2_ep_opts_release,
2463};
2464
2465static struct configfs_group_operations f_midi2_ep_group_ops = {
2466	.make_group	= f_midi2_opts_block_make,
2467	.drop_item	= f_midi2_opts_block_drop,
2468};
2469
2470static const struct config_item_type f_midi2_ep_type = {
2471	.ct_item_ops	= &f_midi2_ep_item_ops,
2472	.ct_group_ops	= &f_midi2_ep_group_ops,
2473	.ct_attrs	= f_midi2_ep_attrs,
2474	.ct_owner	= THIS_MODULE,
2475};
2476
2477/* create a f_midi2_ep_opts instance */
2478static int f_midi2_ep_opts_create(struct f_midi2_opts *opts,
2479				  unsigned int index,
2480				  struct f_midi2_ep_opts **ep_p)
2481{
2482	struct f_midi2_ep_opts *ep_opts;
2483
2484	ep_opts = kzalloc(sizeof(*ep_opts), GFP_KERNEL);
2485	if (!ep_opts)
2486		return -ENOMEM;
2487
2488	ep_opts->opts = opts;
2489	ep_opts->index = index;
2490
2491	/* set up the default values */
2492	ep_opts->info.protocol = 2;
2493	ep_opts->info.protocol_caps = 3;
2494
2495	opts->eps[index] = ep_opts;
2496	*ep_p = ep_opts;
2497	return 0;
2498}
2499
2500/* make_group callback for an EP */
2501static struct config_group *
2502f_midi2_opts_ep_make(struct config_group *group, const char *name)
2503{
2504	struct f_midi2_opts *opts;
2505	struct f_midi2_ep_opts *ep_opts;
2506	unsigned int index;
2507	int ret;
2508
2509	if (strncmp(name, "ep.", 3))
2510		return ERR_PTR(-EINVAL);
2511	ret = kstrtouint(name + 3, 10, &index);
2512	if (ret)
2513		return ERR_PTR(ret);
2514
2515	opts = to_f_midi2_opts(&group->cg_item);
2516	if (index >= MAX_UMP_EPS)
2517		return ERR_PTR(-EINVAL);
2518	if (opts->eps[index])
2519		return ERR_PTR(-EBUSY);
2520	ret = f_midi2_ep_opts_create(opts, index, &ep_opts);
2521	if (ret)
2522		return ERR_PTR(ret);
2523
2524	config_group_init_type_name(&ep_opts->group, name, &f_midi2_ep_type);
2525	return &ep_opts->group;
2526}
2527
2528/* drop_item callback for an EP */
2529static void
2530f_midi2_opts_ep_drop(struct config_group *group, struct config_item *item)
2531{
2532	struct f_midi2_ep_opts *ep_opts = to_f_midi2_ep_opts(item);
2533
2534	mutex_lock(&ep_opts->opts->lock);
2535	ep_opts->opts->eps[ep_opts->index] = NULL;
2536	mutex_unlock(&ep_opts->opts->lock);
2537	config_item_put(item);
2538}
2539
2540/*
2541 * Definitions for card config
2542 */
2543
2544/* define a bool option for card */
2545#define F_MIDI2_BOOL_OPT(name)						\
2546static ssize_t f_midi2_opts_##name##_show(struct config_item *item,	\
2547					  char *page)			\
2548{									\
2549	struct f_midi2_opts *opts = to_f_midi2_opts(item);		\
2550	return f_midi2_opts_uint_show(opts, opts->info.name,		\
2551				      "%u\n", page);			\
2552}									\
2553									\
2554static ssize_t f_midi2_opts_##name##_store(struct config_item *item,	\
2555					 const char *page, size_t len)	\
2556{									\
2557	struct f_midi2_opts *opts = to_f_midi2_opts(item);		\
2558	return f_midi2_opts_bool_store(opts, &opts->info.name,		\
2559				       page, len);			\
2560}									\
2561									\
2562CONFIGFS_ATTR(f_midi2_opts_, name)
2563
2564F_MIDI2_BOOL_OPT(process_ump);
2565F_MIDI2_BOOL_OPT(static_block);
2566
2567static ssize_t f_midi2_opts_iface_name_show(struct config_item *item,
2568					    char *page)
2569{
2570	struct f_midi2_opts *opts = to_f_midi2_opts(item);
2571
2572	return f_midi2_opts_str_show(opts, opts->info.iface_name, page);
2573}
2574
2575static ssize_t f_midi2_opts_iface_name_store(struct config_item *item,
2576					     const char *page, size_t len)
2577{
2578	struct f_midi2_opts *opts = to_f_midi2_opts(item);
2579
2580	return f_midi2_opts_str_store(opts, &opts->info.iface_name, 128,
2581				      page, len);
2582}
2583
2584CONFIGFS_ATTR(f_midi2_opts_, iface_name);
2585
2586static struct configfs_attribute *f_midi2_attrs[] = {
2587	&f_midi2_opts_attr_process_ump,
2588	&f_midi2_opts_attr_static_block,
2589	&f_midi2_opts_attr_iface_name,
2590	NULL
2591};
2592
2593static void f_midi2_opts_release(struct config_item *item)
2594{
2595	struct f_midi2_opts *opts = to_f_midi2_opts(item);
2596
2597	usb_put_function_instance(&opts->func_inst);
2598}
2599
2600static struct configfs_item_operations f_midi2_item_ops = {
2601	.release	= f_midi2_opts_release,
2602};
2603
2604static struct configfs_group_operations f_midi2_group_ops = {
2605	.make_group	= f_midi2_opts_ep_make,
2606	.drop_item	= f_midi2_opts_ep_drop,
2607};
2608
2609static const struct config_item_type f_midi2_func_type = {
2610	.ct_item_ops	= &f_midi2_item_ops,
2611	.ct_group_ops	= &f_midi2_group_ops,
2612	.ct_attrs	= f_midi2_attrs,
2613	.ct_owner	= THIS_MODULE,
2614};
2615
2616static void f_midi2_free_inst(struct usb_function_instance *f)
2617{
2618	struct f_midi2_opts *opts;
2619
2620	opts = container_of(f, struct f_midi2_opts, func_inst);
2621
2622	kfree(opts->info.iface_name);
2623	kfree(opts);
2624}
2625
2626/* gadget alloc_inst */
2627static struct usb_function_instance *f_midi2_alloc_inst(void)
2628{
2629	struct f_midi2_opts *opts;
2630	struct f_midi2_ep_opts *ep_opts;
2631	struct f_midi2_block_opts *block_opts;
2632	int ret;
2633
2634	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
2635	if (!opts)
2636		return ERR_PTR(-ENOMEM);
2637
2638	mutex_init(&opts->lock);
2639	opts->func_inst.free_func_inst = f_midi2_free_inst;
2640	opts->info.process_ump = true;
2641	opts->info.static_block = true;
2642	opts->info.num_reqs = 32;
2643	opts->info.req_buf_size = 512;
2644
2645	/* create the default ep */
2646	ret = f_midi2_ep_opts_create(opts, 0, &ep_opts);
2647	if (ret) {
2648		kfree(opts);
2649		return ERR_PTR(ret);
2650	}
2651
2652	/* create the default block */
2653	ret = f_midi2_block_opts_create(ep_opts, 0, &block_opts);
2654	if (ret) {
2655		kfree(ep_opts);
2656		kfree(opts);
2657		return ERR_PTR(ret);
2658	}
2659
2660	/* set up the default MIDI1 (that is mandatory) */
2661	block_opts->info.midi1_num_groups = 1;
2662
2663	config_group_init_type_name(&opts->func_inst.group, "",
2664				    &f_midi2_func_type);
2665
2666	config_group_init_type_name(&ep_opts->group, "ep.0",
2667				    &f_midi2_ep_type);
2668	configfs_add_default_group(&ep_opts->group, &opts->func_inst.group);
2669
2670	config_group_init_type_name(&block_opts->group, "block.0",
2671				    &f_midi2_block_type);
2672	configfs_add_default_group(&block_opts->group, &ep_opts->group);
2673
2674	return &opts->func_inst;
2675}
2676
2677static void do_f_midi2_free(struct f_midi2 *midi2, struct f_midi2_opts *opts)
2678{
2679	mutex_lock(&opts->lock);
2680	--opts->refcnt;
2681	mutex_unlock(&opts->lock);
2682	kfree(midi2->string_defs);
2683	kfree(midi2);
2684}
2685
2686static void f_midi2_free(struct usb_function *f)
2687{
2688	do_f_midi2_free(func_to_midi2(f),
2689			container_of(f->fi, struct f_midi2_opts, func_inst));
2690}
2691
2692/* verify the parameters set up via configfs;
2693 * return the number of EPs or a negative error
2694 */
2695static int verify_parameters(struct f_midi2_opts *opts)
2696{
2697	int i, j, num_eps, num_blks;
2698	struct f_midi2_ep_info *ep;
2699	struct f_midi2_block_info *bp;
2700
2701	for (num_eps = 0; num_eps < MAX_UMP_EPS && opts->eps[num_eps];
2702	     num_eps++)
2703		;
2704	if (!num_eps) {
2705		pr_err("f_midi2: No EP is defined\n");
2706		return -EINVAL;
2707	}
2708
2709	num_blks = 0;
2710	for (i = 0; i < num_eps; i++) {
2711		ep = &opts->eps[i]->info;
2712		if (!(ep->protocol_caps & ep->protocol)) {
2713			pr_err("f_midi2: Invalid protocol 0x%x (caps 0x%x) for EP %d\n",
2714			       ep->protocol, ep->protocol_caps, i);
2715			return -EINVAL;
2716		}
2717
2718		for (j = 0; j < SNDRV_UMP_MAX_BLOCKS && opts->eps[i]->blks[j];
2719		     j++, num_blks++) {
2720			bp = &opts->eps[i]->blks[j]->info;
2721			if (bp->first_group + bp->num_groups > SNDRV_UMP_MAX_GROUPS) {
2722				pr_err("f_midi2: Invalid group definitions for block %d:%d\n",
2723				       i, j);
2724				return -EINVAL;
2725			}
2726
2727			if (bp->midi1_num_groups) {
2728				if (bp->midi1_first_group < bp->first_group ||
2729				    bp->midi1_first_group + bp->midi1_num_groups >
2730				    bp->first_group + bp->num_groups) {
2731					pr_err("f_midi2: Invalid MIDI1 group definitions for block %d:%d\n",
2732					       i, j);
2733					return -EINVAL;
2734				}
2735			}
2736		}
2737	}
2738	if (!num_blks) {
2739		pr_err("f_midi2: No block is defined\n");
2740		return -EINVAL;
2741	}
2742
2743	return num_eps;
2744}
2745
2746/* fill mapping between MIDI 1.0 cable and UMP EP/group */
2747static void fill_midi1_cable_mapping(struct f_midi2 *midi2,
2748				     struct f_midi2_ep *ep,
2749				     int blk)
2750{
2751	const struct f_midi2_block_info *binfo = &ep->blks[blk].info;
2752	struct midi1_cable_mapping *map;
2753	int i, group;
2754
2755	if (!binfo->midi1_num_groups)
2756		return;
2757	if (binfo->direction != SNDRV_UMP_DIR_OUTPUT) {
2758		group = binfo->midi1_first_group;
2759		map = midi2->in_cable_mapping + midi2->num_midi1_in;
2760		for (i = 0; i < binfo->midi1_num_groups; i++, group++, map++) {
2761			if (midi2->num_midi1_in >= MAX_CABLES)
2762				break;
2763			map->ep = ep;
2764			map->block = blk;
2765			map->group = group;
2766			midi2->num_midi1_in++;
2767			/* store 1-based cable number */
2768			ep->in_group_to_cable[group] = midi2->num_midi1_in;
2769		}
2770	}
2771
2772	if (binfo->direction != SNDRV_UMP_DIR_INPUT) {
2773		group = binfo->midi1_first_group;
2774		map = midi2->out_cable_mapping + midi2->num_midi1_out;
2775		for (i = 0; i < binfo->midi1_num_groups; i++, group++, map++) {
2776			if (midi2->num_midi1_out >= MAX_CABLES)
2777				break;
2778			map->ep = ep;
2779			map->block = blk;
2780			map->group = group;
2781			midi2->num_midi1_out++;
2782		}
2783	}
2784}
2785
2786/* gadget alloc callback */
2787static struct usb_function *f_midi2_alloc(struct usb_function_instance *fi)
2788{
2789	struct f_midi2 *midi2;
2790	struct f_midi2_opts *opts;
2791	struct f_midi2_ep *ep;
2792	struct f_midi2_block *bp;
2793	int i, num_eps, blk;
2794
2795	midi2 = kzalloc(sizeof(*midi2), GFP_KERNEL);
2796	if (!midi2)
2797		return ERR_PTR(-ENOMEM);
2798
2799	opts = container_of(fi, struct f_midi2_opts, func_inst);
2800	mutex_lock(&opts->lock);
2801	num_eps = verify_parameters(opts);
2802	if (num_eps < 0) {
2803		mutex_unlock(&opts->lock);
2804		kfree(midi2);
2805		return ERR_PTR(num_eps);
2806	}
2807	++opts->refcnt;
2808	mutex_unlock(&opts->lock);
2809
2810	spin_lock_init(&midi2->queue_lock);
2811
2812	midi2->func.name = "midi2_func";
2813	midi2->func.bind = f_midi2_bind;
2814	midi2->func.unbind = f_midi2_unbind;
2815	midi2->func.get_alt = f_midi2_get_alt;
2816	midi2->func.set_alt = f_midi2_set_alt;
2817	midi2->func.setup = f_midi2_setup;
2818	midi2->func.disable = f_midi2_disable;
2819	midi2->func.free_func = f_midi2_free;
2820
2821	midi2->info = opts->info;
2822	midi2->num_eps = num_eps;
2823
2824	for (i = 0; i < num_eps; i++) {
2825		ep = &midi2->midi2_eps[i];
2826		ep->info = opts->eps[i]->info;
2827		ep->card = midi2;
2828		for (blk = 0; blk < SNDRV_UMP_MAX_BLOCKS &&
2829			     opts->eps[i]->blks[blk]; blk++) {
2830			bp = &ep->blks[blk];
2831			ep->num_blks++;
2832			bp->info = opts->eps[i]->blks[blk]->info;
2833			bp->gtb_id = ++midi2->total_blocks;
2834		}
2835	}
2836
2837	midi2->string_defs = kcalloc(midi2->total_blocks + 1,
2838				     sizeof(*midi2->string_defs), GFP_KERNEL);
2839	if (!midi2->string_defs) {
2840		do_f_midi2_free(midi2, opts);
2841		return ERR_PTR(-ENOMEM);
2842	}
2843
2844	if (opts->info.iface_name && *opts->info.iface_name)
2845		midi2->string_defs[STR_IFACE].s = opts->info.iface_name;
2846	else
2847		midi2->string_defs[STR_IFACE].s = ump_ep_name(&midi2->midi2_eps[0]);
2848
2849	for (i = 0; i < midi2->num_eps; i++) {
2850		ep = &midi2->midi2_eps[i];
2851		for (blk = 0; blk < ep->num_blks; blk++) {
2852			bp = &ep->blks[blk];
2853			midi2->string_defs[gtb_to_str_id(bp->gtb_id)].s =
2854				ump_fb_name(&bp->info);
2855
2856			fill_midi1_cable_mapping(midi2, ep, blk);
2857		}
2858	}
2859
2860	if (!midi2->num_midi1_in && !midi2->num_midi1_out) {
2861		pr_err("f_midi2: MIDI1 definition is missing\n");
2862		do_f_midi2_free(midi2, opts);
2863		return ERR_PTR(-EINVAL);
2864	}
2865
2866	return &midi2->func;
2867}
2868
2869DECLARE_USB_FUNCTION_INIT(midi2, f_midi2_alloc_inst, f_midi2_alloc);
2870
2871MODULE_LICENSE("GPL");
2872