GNU Linux-libre 6.9.1-gnu
[releases.git] / include / sound / ump_msg.h
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) */
9 enum {
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) */
28 enum {
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) */
104 enum {
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) */
118 enum {
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) */
129 struct 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) */
148 struct 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) */
167 struct 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) */
186 struct 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) */
205 struct 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) */
224 struct 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 */
243 struct 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) */
260 union 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) */
272 struct 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) */
299 struct 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) */
324 struct 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) */
349 struct 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) */
374 struct 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) */
399 struct 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) */
424 struct 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) */
455 struct 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) */
478 struct 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) */
501 struct 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) */
526 union 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) */
541 struct 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) */
570 struct 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) */
607 struct 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) */
642 struct 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) */
667 struct 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) */
690 struct 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) */
731 struct 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) */
754 union 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 */