1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Universal MIDI Packet (UMP): Message Definitions
4 */
5#ifndef __SOUND_UMP_MSG_H
6#define __SOUND_UMP_MSG_H
7
8/* MIDI 1.0 / 2.0 Status Code (4bit) */
9enum {
10	UMP_MSG_STATUS_PER_NOTE_RCC = 0x0,
11	UMP_MSG_STATUS_PER_NOTE_ACC = 0x1,
12	UMP_MSG_STATUS_RPN = 0x2,
13	UMP_MSG_STATUS_NRPN = 0x3,
14	UMP_MSG_STATUS_RELATIVE_RPN = 0x4,
15	UMP_MSG_STATUS_RELATIVE_NRPN = 0x5,
16	UMP_MSG_STATUS_PER_NOTE_PITCH_BEND = 0x6,
17	UMP_MSG_STATUS_NOTE_OFF = 0x8,
18	UMP_MSG_STATUS_NOTE_ON = 0x9,
19	UMP_MSG_STATUS_POLY_PRESSURE = 0xa,
20	UMP_MSG_STATUS_CC = 0xb,
21	UMP_MSG_STATUS_PROGRAM = 0xc,
22	UMP_MSG_STATUS_CHANNEL_PRESSURE = 0xd,
23	UMP_MSG_STATUS_PITCH_BEND = 0xe,
24	UMP_MSG_STATUS_PER_NOTE_MGMT = 0xf,
25};
26
27/* MIDI 1.0 Channel Control (7bit) */
28enum {
29	UMP_CC_BANK_SELECT = 0,
30	UMP_CC_MODULATION = 1,
31	UMP_CC_BREATH = 2,
32	UMP_CC_FOOT = 4,
33	UMP_CC_PORTAMENTO_TIME = 5,
34	UMP_CC_DATA = 6,
35	UMP_CC_VOLUME = 7,
36	UMP_CC_BALANCE = 8,
37	UMP_CC_PAN = 10,
38	UMP_CC_EXPRESSION = 11,
39	UMP_CC_EFFECT_CONTROL_1 = 12,
40	UMP_CC_EFFECT_CONTROL_2 = 13,
41	UMP_CC_GP_1 = 16,
42	UMP_CC_GP_2 = 17,
43	UMP_CC_GP_3 = 18,
44	UMP_CC_GP_4 = 19,
45	UMP_CC_BANK_SELECT_LSB = 32,
46	UMP_CC_MODULATION_LSB = 33,
47	UMP_CC_BREATH_LSB = 34,
48	UMP_CC_FOOT_LSB = 36,
49	UMP_CC_PORTAMENTO_TIME_LSB = 37,
50	UMP_CC_DATA_LSB = 38,
51	UMP_CC_VOLUME_LSB = 39,
52	UMP_CC_BALANCE_LSB = 40,
53	UMP_CC_PAN_LSB = 42,
54	UMP_CC_EXPRESSION_LSB = 43,
55	UMP_CC_EFFECT1_LSB = 44,
56	UMP_CC_EFFECT2_LSB = 45,
57	UMP_CC_GP_1_LSB = 48,
58	UMP_CC_GP_2_LSB = 49,
59	UMP_CC_GP_3_LSB = 50,
60	UMP_CC_GP_4_LSB = 51,
61	UMP_CC_SUSTAIN = 64,
62	UMP_CC_PORTAMENTO_SWITCH = 65,
63	UMP_CC_SOSTENUTO = 66,
64	UMP_CC_SOFT_PEDAL = 67,
65	UMP_CC_LEGATO = 68,
66	UMP_CC_HOLD_2 = 69,
67	UMP_CC_SOUND_CONTROLLER_1 = 70,
68	UMP_CC_SOUND_CONTROLLER_2 = 71,
69	UMP_CC_SOUND_CONTROLLER_3 = 72,
70	UMP_CC_SOUND_CONTROLLER_4 = 73,
71	UMP_CC_SOUND_CONTROLLER_5 = 74,
72	UMP_CC_SOUND_CONTROLLER_6 = 75,
73	UMP_CC_SOUND_CONTROLLER_7 = 76,
74	UMP_CC_SOUND_CONTROLLER_8 = 77,
75	UMP_CC_SOUND_CONTROLLER_9 = 78,
76	UMP_CC_SOUND_CONTROLLER_10 = 79,
77	UMP_CC_GP_5 = 80,
78	UMP_CC_GP_6 = 81,
79	UMP_CC_GP_7 = 82,
80	UMP_CC_GP_8 = 83,
81	UMP_CC_PORTAMENTO_CONTROL = 84,
82	UMP_CC_EFFECT_1 = 91,
83	UMP_CC_EFFECT_2 = 92,
84	UMP_CC_EFFECT_3 = 93,
85	UMP_CC_EFFECT_4 = 94,
86	UMP_CC_EFFECT_5 = 95,
87	UMP_CC_DATA_INC = 96,
88	UMP_CC_DATA_DEC = 97,
89	UMP_CC_NRPN_LSB = 98,
90	UMP_CC_NRPN_MSB = 99,
91	UMP_CC_RPN_LSB = 100,
92	UMP_CC_RPN_MSB = 101,
93	UMP_CC_ALL_SOUND_OFF = 120,
94	UMP_CC_RESET_ALL = 121,
95	UMP_CC_LOCAL_CONTROL = 122,
96	UMP_CC_ALL_NOTES_OFF = 123,
97	UMP_CC_OMNI_OFF = 124,
98	UMP_CC_OMNI_ON = 125,
99	UMP_CC_POLY_OFF = 126,
100	UMP_CC_POLY_ON = 127,
101};
102
103/* MIDI 1.0 / 2.0 System Messages (0xfx) */
104enum {
105	UMP_SYSTEM_STATUS_MIDI_TIME_CODE = 0xf1,
106	UMP_SYSTEM_STATUS_SONG_POSITION = 0xf2,
107	UMP_SYSTEM_STATUS_SONG_SELECT = 0xf3,
108	UMP_SYSTEM_STATUS_TUNE_REQUEST = 0xf6,
109	UMP_SYSTEM_STATUS_TIMING_CLOCK = 0xf8,
110	UMP_SYSTEM_STATUS_START = 0xfa,
111	UMP_SYSTEM_STATUS_CONTINUE = 0xfb,
112	UMP_SYSTEM_STATUS_STOP = 0xfc,
113	UMP_SYSTEM_STATUS_ACTIVE_SENSING = 0xfe,
114	UMP_SYSTEM_STATUS_RESET = 0xff,
115};
116
117/* MIDI 1.0 Realtime and SysEx status messages (0xfx) */
118enum {
119	UMP_MIDI1_MSG_REALTIME		= 0xf0,	/* mask */
120	UMP_MIDI1_MSG_SYSEX_START	= 0xf0,
121	UMP_MIDI1_MSG_SYSEX_END		= 0xf7,
122};
123
124/*
125 * UMP Message Definitions
126 */
127
128/* MIDI 1.0 Note Off / Note On (32bit) */
129struct snd_ump_midi1_msg_note {
130#ifdef __BIG_ENDIAN_BITFIELD
131	u32 type:4;
132	u32 group:4;
133	u32 status:4;
134	u32 channel:4;
135	u32 note:8;
136	u32 velocity:8;
137#else
138	u32 velocity:8;
139	u32 note:8;
140	u32 channel:4;
141	u32 status:4;
142	u32 group:4;
143	u32 type:4;
144#endif
145} __packed;
146
147/* MIDI 1.0 Poly Pressure (32bit) */
148struct snd_ump_midi1_msg_paf {
149#ifdef __BIG_ENDIAN_BITFIELD
150	u32 type:4;
151	u32 group:4;
152	u32 status:4;
153	u32 channel:4;
154	u32 note:8;
155	u32 data:8;
156#else
157	u32 data:8;
158	u32 note:8;
159	u32 channel:4;
160	u32 status:4;
161	u32 group:4;
162	u32 type:4;
163#endif
164} __packed;
165
166/* MIDI 1.0 Control Change (32bit) */
167struct snd_ump_midi1_msg_cc {
168#ifdef __BIG_ENDIAN_BITFIELD
169	u32 type:4;
170	u32 group:4;
171	u32 status:4;
172	u32 channel:4;
173	u32 index:8;
174	u32 data:8;
175#else
176	u32 data:8;
177	u32 index:8;
178	u32 channel:4;
179	u32 status:4;
180	u32 group:4;
181	u32 type:4;
182#endif
183} __packed;
184
185/* MIDI 1.0 Program Change (32bit) */
186struct snd_ump_midi1_msg_program {
187#ifdef __BIG_ENDIAN_BITFIELD
188	u32 type:4;
189	u32 group:4;
190	u32 status:4;
191	u32 channel:4;
192	u32 program:8;
193	u32 reserved:8;
194#else
195	u32 reserved:8;
196	u32 program:8;
197	u32 channel:4;
198	u32 status:4;
199	u32 group:4;
200	u32 type:4;
201#endif
202} __packed;
203
204/* MIDI 1.0 Channel Pressure (32bit) */
205struct snd_ump_midi1_msg_caf {
206#ifdef __BIG_ENDIAN_BITFIELD
207	u32 type:4;
208	u32 group:4;
209	u32 status:4;
210	u32 channel:4;
211	u32 data:8;
212	u32 reserved:8;
213#else
214	u32 reserved:8;
215	u32 data:8;
216	u32 channel:4;
217	u32 status:4;
218	u32 group:4;
219	u32 type:4;
220#endif
221} __packed;
222
223/* MIDI 1.0 Pitch Bend (32bit) */
224struct snd_ump_midi1_msg_pitchbend {
225#ifdef __BIG_ENDIAN_BITFIELD
226	u32 type:4;
227	u32 group:4;
228	u32 status:4;
229	u32 channel:4;
230	u32 data_lsb:8;
231	u32 data_msb:8;
232#else
233	u32 data_msb:8;
234	u32 data_lsb:8;
235	u32 channel:4;
236	u32 status:4;
237	u32 group:4;
238	u32 type:4;
239#endif
240} __packed;
241
242/* System Common and Real Time messages (32bit); no channel field */
243struct snd_ump_system_msg {
244#ifdef __BIG_ENDIAN_BITFIELD
245	u32 type:4;
246	u32 group:4;
247	u32 status:8;
248	u32 parm1:8;
249	u32 parm2:8;
250#else
251	u32 parm2:8;
252	u32 parm1:8;
253	u32 status:8;
254	u32 group:4;
255	u32 type:4;
256#endif
257} __packed;
258
259/* MIDI 1.0 UMP CVM (32bit) */
260union snd_ump_midi1_msg {
261	struct snd_ump_midi1_msg_note note;
262	struct snd_ump_midi1_msg_paf paf;
263	struct snd_ump_midi1_msg_cc cc;
264	struct snd_ump_midi1_msg_program pg;
265	struct snd_ump_midi1_msg_caf caf;
266	struct snd_ump_midi1_msg_pitchbend pb;
267	struct snd_ump_system_msg system;
268	u32 raw;
269};
270
271/* MIDI 2.0 Note Off / Note On (64bit) */
272struct snd_ump_midi2_msg_note {
273#ifdef __BIG_ENDIAN_BITFIELD
274	/* 0 */
275	u32 type:4;
276	u32 group:4;
277	u32 status:4;
278	u32 channel:4;
279	u32 note:8;
280	u32 attribute_type:8;
281	/* 1 */
282	u32 velocity:16;
283	u32 attribute_data:16;
284#else
285	/* 0 */
286	u32 attribute_type:8;
287	u32 note:8;
288	u32 channel:4;
289	u32 status:4;
290	u32 group:4;
291	u32 type:4;
292	/* 1 */
293	u32 attribute_data:16;
294	u32 velocity:16;
295#endif
296} __packed;
297
298/* MIDI 2.0 Poly Pressure (64bit) */
299struct snd_ump_midi2_msg_paf {
300#ifdef __BIG_ENDIAN_BITFIELD
301	/* 0 */
302	u32 type:4;
303	u32 group:4;
304	u32 status:4;
305	u32 channel:4;
306	u32 note:8;
307	u32 reserved:8;
308	/* 1 */
309	u32 data;
310#else
311	/* 0 */
312	u32 reserved:8;
313	u32 note:8;
314	u32 channel:4;
315	u32 status:4;
316	u32 group:4;
317	u32 type:4;
318	/* 1 */
319	u32 data;
320#endif
321} __packed;
322
323/* MIDI 2.0 Per-Note Controller (64bit) */
324struct snd_ump_midi2_msg_pernote_cc {
325#ifdef __BIG_ENDIAN_BITFIELD
326	/* 0 */
327	u32 type:4;
328	u32 group:4;
329	u32 status:4;
330	u32 channel:4;
331	u32 note:8;
332	u32 index:8;
333	/* 1 */
334	u32 data;
335#else
336	/* 0 */
337	u32 index:8;
338	u32 note:8;
339	u32 channel:4;
340	u32 status:4;
341	u32 group:4;
342	u32 type:4;
343	/* 1 */
344	u32 data;
345#endif
346} __packed;
347
348/* MIDI 2.0 Per-Note Management (64bit) */
349struct snd_ump_midi2_msg_pernote_mgmt {
350#ifdef __BIG_ENDIAN_BITFIELD
351	/* 0 */
352	u32 type:4;
353	u32 group:4;
354	u32 status:4;
355	u32 channel:4;
356	u32 note:8;
357	u32 flags:8;
358	/* 1 */
359	u32 reserved;
360#else
361	/* 0 */
362	u32 flags:8;
363	u32 note:8;
364	u32 channel:4;
365	u32 status:4;
366	u32 group:4;
367	u32 type:4;
368	/* 1 */
369	u32 reserved;
370#endif
371} __packed;
372
373/* MIDI 2.0 Control Change (64bit) */
374struct snd_ump_midi2_msg_cc {
375#ifdef __BIG_ENDIAN_BITFIELD
376	/* 0 */
377	u32 type:4;
378	u32 group:4;
379	u32 status:4;
380	u32 channel:4;
381	u32 index:8;
382	u32 reserved:8;
383	/* 1 */
384	u32 data;
385#else
386	/* 0 */
387	u32 reserved:8;
388	u32 index:8;
389	u32 channel:4;
390	u32 status:4;
391	u32 group:4;
392	u32 type:4;
393	/* 1 */
394	u32 data;
395#endif
396} __packed;
397
398/* MIDI 2.0 Registered Controller (RPN) / Assignable Controller (NRPN) (64bit) */
399struct snd_ump_midi2_msg_rpn {
400#ifdef __BIG_ENDIAN_BITFIELD
401	/* 0 */
402	u32 type:4;
403	u32 group:4;
404	u32 status:4;
405	u32 channel:4;
406	u32 bank:8;
407	u32 index:8;
408	/* 1 */
409	u32 data;
410#else
411	/* 0 */
412	u32 index:8;
413	u32 bank:8;
414	u32 channel:4;
415	u32 status:4;
416	u32 group:4;
417	u32 type:4;
418	/* 1 */
419	u32 data;
420#endif
421} __packed;
422
423/* MIDI 2.0 Program Change (64bit) */
424struct snd_ump_midi2_msg_program {
425#ifdef __BIG_ENDIAN_BITFIELD
426	/* 0 */
427	u32 type:4;
428	u32 group:4;
429	u32 status:4;
430	u32 channel:4;
431	u32 reserved:15;
432	u32 bank_valid:1;
433	/* 1 */
434	u32 program:8;
435	u32 reserved2:8;
436	u32 bank_msb:8;
437	u32 bank_lsb:8;
438#else
439	/* 0 */
440	u32 bank_valid:1;
441	u32 reserved:15;
442	u32 channel:4;
443	u32 status:4;
444	u32 group:4;
445	u32 type:4;
446	/* 1 */
447	u32 bank_lsb:8;
448	u32 bank_msb:8;
449	u32 reserved2:8;
450	u32 program:8;
451#endif
452} __packed;
453
454/* MIDI 2.0 Channel Pressure (64bit) */
455struct snd_ump_midi2_msg_caf {
456#ifdef __BIG_ENDIAN_BITFIELD
457	/* 0 */
458	u32 type:4;
459	u32 group:4;
460	u32 status:4;
461	u32 channel:4;
462	u32 reserved:16;
463	/* 1 */
464	u32 data;
465#else
466	/* 0 */
467	u32 reserved:16;
468	u32 channel:4;
469	u32 status:4;
470	u32 group:4;
471	u32 type:4;
472	/* 1 */
473	u32 data;
474#endif
475} __packed;
476
477/* MIDI 2.0 Pitch Bend (64bit) */
478struct snd_ump_midi2_msg_pitchbend {
479#ifdef __BIG_ENDIAN_BITFIELD
480	/* 0 */
481	u32 type:4;
482	u32 group:4;
483	u32 status:4;
484	u32 channel:4;
485	u32 reserved:16;
486	/* 1 */
487	u32 data;
488#else
489	/* 0 */
490	u32 reserved:16;
491	u32 channel:4;
492	u32 status:4;
493	u32 group:4;
494	u32 type:4;
495	/* 1 */
496	u32 data;
497#endif
498} __packed;
499
500/* MIDI 2.0 Per-Note Pitch Bend (64bit) */
501struct snd_ump_midi2_msg_pernote_pitchbend {
502#ifdef __BIG_ENDIAN_BITFIELD
503	/* 0 */
504	u32 type:4;
505	u32 group:4;
506	u32 status:4;
507	u32 channel:4;
508	u32 note:8;
509	u32 reserved:8;
510	/* 1 */
511	u32 data;
512#else
513	/* 0 */
514	u32 reserved:8;
515	u32 note:8;
516	u32 channel:4;
517	u32 status:4;
518	u32 group:4;
519	u32 type:4;
520	/* 1 */
521	u32 data;
522#endif
523} __packed;
524
525/* MIDI 2.0 UMP CVM (64bit) */
526union snd_ump_midi2_msg {
527	struct snd_ump_midi2_msg_note note;
528	struct snd_ump_midi2_msg_paf paf;
529	struct snd_ump_midi2_msg_pernote_cc pernote_cc;
530	struct snd_ump_midi2_msg_pernote_mgmt pernote_mgmt;
531	struct snd_ump_midi2_msg_cc cc;
532	struct snd_ump_midi2_msg_rpn rpn;
533	struct snd_ump_midi2_msg_program pg;
534	struct snd_ump_midi2_msg_caf caf;
535	struct snd_ump_midi2_msg_pitchbend pb;
536	struct snd_ump_midi2_msg_pernote_pitchbend pernote_pb;
537	u32 raw[2];
538};
539
540/* UMP Stream Message: Endpoint Discovery (128bit) */
541struct snd_ump_stream_msg_ep_discovery {
542#ifdef __BIG_ENDIAN_BITFIELD
543	/* 0 */
544	u32 type:4;
545	u32 format:2;
546	u32 status:10;
547	u32 ump_version_major:8;
548	u32 ump_version_minor:8;
549	/* 1 */
550	u32 reserved:24;
551	u32 filter_bitmap:8;
552	/* 2-3 */
553	u32 reserved2[2];
554#else
555	/* 0 */
556	u32 ump_version_minor:8;
557	u32 ump_version_major:8;
558	u32 status:10;
559	u32 format:2;
560	u32 type:4;
561	/* 1 */
562	u32 filter_bitmap:8;
563	u32 reserved:24;
564	/* 2-3 */
565	u32 reserved2[2];
566#endif
567} __packed;
568
569/* UMP Stream Message: Endpoint Info Notification (128bit) */
570struct snd_ump_stream_msg_ep_info {
571#ifdef __BIG_ENDIAN_BITFIELD
572	/* 0 */
573	u32 type:4;
574	u32 format:2;
575	u32 status:10;
576	u32 ump_version_major:8;
577	u32 ump_version_minor:8;
578	/* 1 */
579	u32 static_function_block:1;
580	u32 num_function_blocks:7;
581	u32 reserved:8;
582	u32 protocol:8;
583	u32 reserved2:6;
584	u32 jrts:2;
585	/* 2-3 */
586	u32 reserved3[2];
587#else
588	/* 0 */
589	u32 ump_version_minor:8;
590	u32 ump_version_major:8;
591	u32 status:10;
592	u32 format:2;
593	u32 type:4;
594	/* 1 */
595	u32 jrts:2;
596	u32 reserved2:6;
597	u32 protocol:8;
598	u32 reserved:8;
599	u32 num_function_blocks:7;
600	u32 static_function_block:1;
601	/* 2-3 */
602	u32 reserved3[2];
603#endif
604} __packed;
605
606/* UMP Stream Message: Device Info Notification (128bit) */
607struct snd_ump_stream_msg_devince_info {
608#ifdef __BIG_ENDIAN_BITFIELD
609	/* 0 */
610	u32 type:4;
611	u32 format:2;
612	u32 status:10;
613	u32 reserved:16;
614	/* 1 */
615	u32 manufacture_id;
616	/* 2 */
617	u8 family_lsb;
618	u8 family_msb;
619	u8 model_lsb;
620	u8 model_msb;
621	/* 3 */
622	u32 sw_revision;
623#else
624	/* 0 */
625	u32 reserved:16;
626	u32 status:10;
627	u32 format:2;
628	u32 type:4;
629	/* 1 */
630	u32 manufacture_id;
631	/* 2 */
632	u8 model_msb;
633	u8 model_lsb;
634	u8 family_msb;
635	u8 family_lsb;
636	/* 3 */
637	u32 sw_revision;
638#endif
639} __packed;
640
641/* UMP Stream Message: Stream Config Request / Notification (128bit) */
642struct snd_ump_stream_msg_stream_cfg {
643#ifdef __BIG_ENDIAN_BITFIELD
644	/* 0 */
645	u32 type:4;
646	u32 format:2;
647	u32 status:10;
648	u32 protocol:8;
649	u32 reserved:6;
650	u32 jrts:2;
651	/* 1-3 */
652	u32 reserved2[3];
653#else
654	/* 0 */
655	u32 jrts:2;
656	u32 reserved:6;
657	u32 protocol:8;
658	u32 status:10;
659	u32 format:2;
660	u32 type:4;
661	/* 1-3 */
662	u32 reserved2[3];
663#endif
664} __packed;
665
666/* UMP Stream Message: Function Block Discovery (128bit) */
667struct snd_ump_stream_msg_fb_discovery {
668#ifdef __BIG_ENDIAN_BITFIELD
669	/* 0 */
670	u32 type:4;
671	u32 format:2;
672	u32 status:10;
673	u32 function_block_id:8;
674	u32 filter:8;
675	/* 1-3 */
676	u32 reserved[3];
677#else
678	/* 0 */
679	u32 filter:8;
680	u32 function_block_id:8;
681	u32 status:10;
682	u32 format:2;
683	u32 type:4;
684	/* 1-3 */
685	u32 reserved[3];
686#endif
687} __packed;
688
689/* UMP Stream Message: Function Block Info Notification (128bit) */
690struct snd_ump_stream_msg_fb_info {
691#ifdef __BIG_ENDIAN_BITFIELD
692	/* 0 */
693	u32 type:4;
694	u32 format:2;
695	u32 status:10;
696	u32 active:1;
697	u32 function_block_id:7;
698	u32 reserved:2;
699	u32 ui_hint:2;
700	u32 midi_10:2;
701	u32 direction:2;
702	/* 1 */
703	u32 first_group:8;
704	u32 num_groups:8;
705	u32 midi_ci_version:8;
706	u32 sysex8_streams:8;
707	/* 2-3 */
708	u32 reserved2[2];
709#else
710	/* 0 */
711	u32 direction:2;
712	u32 midi_10:2;
713	u32 ui_hint:2;
714	u32 reserved:2;
715	u32 function_block_id:7;
716	u32 active:1;
717	u32 status:10;
718	u32 format:2;
719	u32 type:4;
720	/* 1 */
721	u32 sysex8_streams:8;
722	u32 midi_ci_version:8;
723	u32 num_groups:8;
724	u32 first_group:8;
725	/* 2-3 */
726	u32 reserved2[2];
727#endif
728} __packed;
729
730/* UMP Stream Message: Function Block Name Notification (128bit) */
731struct snd_ump_stream_msg_fb_name {
732#ifdef __BIG_ENDIAN_BITFIELD
733	/* 0 */
734	u16 type:4;
735	u16 format:2;
736	u16 status:10;
737	u8 function_block_id;
738	u8 name0;
739	/* 1-3 */
740	u8 name[12];
741#else
742	/* 0 */
743	u8 name0;
744	u8 function_block_id;
745	u16 status:10;
746	u16 format:2;
747	u16 type:4;
748	/* 1-3 */
749	u8 name[12]; // FIXME: byte order
750#endif
751} __packed;
752
753/* MIDI 2.0 Stream Messages (128bit) */
754union snd_ump_stream_msg {
755	struct snd_ump_stream_msg_ep_discovery ep_discovery;
756	struct snd_ump_stream_msg_ep_info ep_info;
757	struct snd_ump_stream_msg_devince_info device_info;
758	struct snd_ump_stream_msg_stream_cfg stream_cfg;
759	struct snd_ump_stream_msg_fb_discovery fb_discovery;
760	struct snd_ump_stream_msg_fb_info fb_info;
761	struct snd_ump_stream_msg_fb_name fb_name;
762	u32 raw[4];
763};
764
765#endif /* __SOUND_UMP_MSG_H */
766