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

source code of linux/include/sound/ump_msg.h