xref: /openbmc/linux/drivers/usb/gadget/function/u_midi2.h (revision 8b645922b22303cec4628dbbbf6c8553d1cdec87)
1*8b645922STakashi Iwai // SPDX-License-Identifier: GPL-2.0+
2*8b645922STakashi Iwai /*
3*8b645922STakashi Iwai  * Utility definitions for MIDI 2.0 function
4*8b645922STakashi Iwai  */
5*8b645922STakashi Iwai 
6*8b645922STakashi Iwai #ifndef U_MIDI2_H
7*8b645922STakashi Iwai #define U_MIDI2_H
8*8b645922STakashi Iwai 
9*8b645922STakashi Iwai #include <linux/usb/composite.h>
10*8b645922STakashi Iwai #include <sound/asound.h>
11*8b645922STakashi Iwai 
12*8b645922STakashi Iwai struct f_midi2_opts;
13*8b645922STakashi Iwai struct f_midi2_ep_opts;
14*8b645922STakashi Iwai struct f_midi2_block_opts;
15*8b645922STakashi Iwai 
16*8b645922STakashi Iwai /* UMP Function Block info */
17*8b645922STakashi Iwai struct f_midi2_block_info {
18*8b645922STakashi Iwai 	unsigned int direction;		/* FB direction: 1-3 */
19*8b645922STakashi Iwai 	unsigned int first_group;	/* first UMP group: 0-15 */
20*8b645922STakashi Iwai 	unsigned int num_groups;	/* number of UMP groups: 1-16 */
21*8b645922STakashi Iwai 	unsigned int ui_hint;		/* UI-hint: 0-3 */
22*8b645922STakashi Iwai 	unsigned int midi_ci_version;	/* MIDI-CI version: 0-255 */
23*8b645922STakashi Iwai 	unsigned int sysex8_streams;	/* number of sysex8 streams: 0-255 */
24*8b645922STakashi Iwai 	unsigned int is_midi1;		/* MIDI 1.0 port: 0-2 */
25*8b645922STakashi Iwai 	bool active;			/* FB active flag: bool */
26*8b645922STakashi Iwai 	const char *name;		/* FB name */
27*8b645922STakashi Iwai };
28*8b645922STakashi Iwai 
29*8b645922STakashi Iwai /* UMP Endpoint info */
30*8b645922STakashi Iwai struct f_midi2_ep_info {
31*8b645922STakashi Iwai 	unsigned int protocol_caps;	/* protocol capabilities: 1-3 */
32*8b645922STakashi Iwai 	unsigned int protocol;		/* default protocol: 1-2 */
33*8b645922STakashi Iwai 	unsigned int manufacturer;	/* manufacturer id: 0-0xffffff */
34*8b645922STakashi Iwai 	unsigned int family;		/* device family id: 0-0xffff */
35*8b645922STakashi Iwai 	unsigned int model;		/* device model id: 0x-0xffff */
36*8b645922STakashi Iwai 	unsigned int sw_revision;	/* software revision: 32bit */
37*8b645922STakashi Iwai 
38*8b645922STakashi Iwai 	const char *ep_name;		/* Endpoint name */
39*8b645922STakashi Iwai 	const char *product_id;		/* Product ID */
40*8b645922STakashi Iwai };
41*8b645922STakashi Iwai 
42*8b645922STakashi Iwai struct f_midi2_card_info {
43*8b645922STakashi Iwai 	bool process_ump;		/* process UMP stream: bool */
44*8b645922STakashi Iwai 	bool static_block;		/* static FBs: bool */
45*8b645922STakashi Iwai 	unsigned int req_buf_size;	/* request buffer size */
46*8b645922STakashi Iwai 	unsigned int num_reqs;		/* number of requests */
47*8b645922STakashi Iwai 	const char *iface_name;		/* interface name */
48*8b645922STakashi Iwai };
49*8b645922STakashi Iwai 
50*8b645922STakashi Iwai struct f_midi2_block_opts {
51*8b645922STakashi Iwai 	struct config_group group;
52*8b645922STakashi Iwai 	unsigned int id;
53*8b645922STakashi Iwai 	struct f_midi2_block_info info;
54*8b645922STakashi Iwai 	struct f_midi2_ep_opts *ep;
55*8b645922STakashi Iwai };
56*8b645922STakashi Iwai 
57*8b645922STakashi Iwai struct f_midi2_ep_opts {
58*8b645922STakashi Iwai 	struct config_group group;
59*8b645922STakashi Iwai 	unsigned int index;
60*8b645922STakashi Iwai 	struct f_midi2_ep_info info;
61*8b645922STakashi Iwai 	struct f_midi2_block_opts *blks[SNDRV_UMP_MAX_BLOCKS];
62*8b645922STakashi Iwai 	struct f_midi2_opts *opts;
63*8b645922STakashi Iwai };
64*8b645922STakashi Iwai 
65*8b645922STakashi Iwai #define MAX_UMP_EPS		4
66*8b645922STakashi Iwai #define MAX_CABLES		16
67*8b645922STakashi Iwai 
68*8b645922STakashi Iwai struct f_midi2_opts {
69*8b645922STakashi Iwai 	struct usb_function_instance func_inst;
70*8b645922STakashi Iwai 	struct mutex lock;
71*8b645922STakashi Iwai 	int refcnt;
72*8b645922STakashi Iwai 
73*8b645922STakashi Iwai 	struct f_midi2_card_info info;
74*8b645922STakashi Iwai 
75*8b645922STakashi Iwai 	unsigned int num_eps;
76*8b645922STakashi Iwai 	struct f_midi2_ep_opts *eps[MAX_UMP_EPS];
77*8b645922STakashi Iwai };
78*8b645922STakashi Iwai 
79*8b645922STakashi Iwai #endif /* U_MIDI2_H */
80