xref: /openbmc/linux/include/sound/ump_msg.h (revision 2612e3bbc0386368a850140a6c9b990cd496a5ec)
10b5288f5STakashi Iwai // SPDX-License-Identifier: GPL-2.0-or-later
20b5288f5STakashi Iwai /*
30b5288f5STakashi Iwai  * Universal MIDI Packet (UMP): Message Definitions
40b5288f5STakashi Iwai  */
50b5288f5STakashi Iwai #ifndef __SOUND_UMP_MSG_H
60b5288f5STakashi Iwai #define __SOUND_UMP_MSG_H
70b5288f5STakashi Iwai 
80b5288f5STakashi Iwai /* MIDI 1.0 / 2.0 Status Code (4bit) */
90b5288f5STakashi Iwai enum {
100b5288f5STakashi Iwai 	UMP_MSG_STATUS_PER_NOTE_RCC = 0x0,
110b5288f5STakashi Iwai 	UMP_MSG_STATUS_PER_NOTE_ACC = 0x1,
120b5288f5STakashi Iwai 	UMP_MSG_STATUS_RPN = 0x2,
130b5288f5STakashi Iwai 	UMP_MSG_STATUS_NRPN = 0x3,
140b5288f5STakashi Iwai 	UMP_MSG_STATUS_RELATIVE_RPN = 0x4,
150b5288f5STakashi Iwai 	UMP_MSG_STATUS_RELATIVE_NRPN = 0x5,
160b5288f5STakashi Iwai 	UMP_MSG_STATUS_PER_NOTE_PITCH_BEND = 0x6,
170b5288f5STakashi Iwai 	UMP_MSG_STATUS_NOTE_OFF = 0x8,
180b5288f5STakashi Iwai 	UMP_MSG_STATUS_NOTE_ON = 0x9,
190b5288f5STakashi Iwai 	UMP_MSG_STATUS_POLY_PRESSURE = 0xa,
200b5288f5STakashi Iwai 	UMP_MSG_STATUS_CC = 0xb,
210b5288f5STakashi Iwai 	UMP_MSG_STATUS_PROGRAM = 0xc,
220b5288f5STakashi Iwai 	UMP_MSG_STATUS_CHANNEL_PRESSURE = 0xd,
230b5288f5STakashi Iwai 	UMP_MSG_STATUS_PITCH_BEND = 0xe,
240b5288f5STakashi Iwai 	UMP_MSG_STATUS_PER_NOTE_MGMT = 0xf,
250b5288f5STakashi Iwai };
260b5288f5STakashi Iwai 
270b5288f5STakashi Iwai /* MIDI 1.0 Channel Control (7bit) */
280b5288f5STakashi Iwai enum {
290b5288f5STakashi Iwai 	UMP_CC_BANK_SELECT = 0,
300b5288f5STakashi Iwai 	UMP_CC_MODULATION = 1,
310b5288f5STakashi Iwai 	UMP_CC_BREATH = 2,
320b5288f5STakashi Iwai 	UMP_CC_FOOT = 4,
330b5288f5STakashi Iwai 	UMP_CC_PORTAMENTO_TIME = 5,
340b5288f5STakashi Iwai 	UMP_CC_DATA = 6,
350b5288f5STakashi Iwai 	UMP_CC_VOLUME = 7,
360b5288f5STakashi Iwai 	UMP_CC_BALANCE = 8,
370b5288f5STakashi Iwai 	UMP_CC_PAN = 10,
380b5288f5STakashi Iwai 	UMP_CC_EXPRESSION = 11,
390b5288f5STakashi Iwai 	UMP_CC_EFFECT_CONTROL_1 = 12,
400b5288f5STakashi Iwai 	UMP_CC_EFFECT_CONTROL_2 = 13,
410b5288f5STakashi Iwai 	UMP_CC_GP_1 = 16,
420b5288f5STakashi Iwai 	UMP_CC_GP_2 = 17,
430b5288f5STakashi Iwai 	UMP_CC_GP_3 = 18,
440b5288f5STakashi Iwai 	UMP_CC_GP_4 = 19,
450b5288f5STakashi Iwai 	UMP_CC_BANK_SELECT_LSB = 32,
460b5288f5STakashi Iwai 	UMP_CC_MODULATION_LSB = 33,
470b5288f5STakashi Iwai 	UMP_CC_BREATH_LSB = 34,
480b5288f5STakashi Iwai 	UMP_CC_FOOT_LSB = 36,
490b5288f5STakashi Iwai 	UMP_CC_PORTAMENTO_TIME_LSB = 37,
500b5288f5STakashi Iwai 	UMP_CC_DATA_LSB = 38,
510b5288f5STakashi Iwai 	UMP_CC_VOLUME_LSB = 39,
520b5288f5STakashi Iwai 	UMP_CC_BALANCE_LSB = 40,
530b5288f5STakashi Iwai 	UMP_CC_PAN_LSB = 42,
540b5288f5STakashi Iwai 	UMP_CC_EXPRESSION_LSB = 43,
550b5288f5STakashi Iwai 	UMP_CC_EFFECT1_LSB = 44,
560b5288f5STakashi Iwai 	UMP_CC_EFFECT2_LSB = 45,
570b5288f5STakashi Iwai 	UMP_CC_GP_1_LSB = 48,
580b5288f5STakashi Iwai 	UMP_CC_GP_2_LSB = 49,
590b5288f5STakashi Iwai 	UMP_CC_GP_3_LSB = 50,
600b5288f5STakashi Iwai 	UMP_CC_GP_4_LSB = 51,
610b5288f5STakashi Iwai 	UMP_CC_SUSTAIN = 64,
620b5288f5STakashi Iwai 	UMP_CC_PORTAMENTO_SWITCH = 65,
630b5288f5STakashi Iwai 	UMP_CC_SOSTENUTO = 66,
640b5288f5STakashi Iwai 	UMP_CC_SOFT_PEDAL = 67,
650b5288f5STakashi Iwai 	UMP_CC_LEGATO = 68,
660b5288f5STakashi Iwai 	UMP_CC_HOLD_2 = 69,
670b5288f5STakashi Iwai 	UMP_CC_SOUND_CONTROLLER_1 = 70,
680b5288f5STakashi Iwai 	UMP_CC_SOUND_CONTROLLER_2 = 71,
690b5288f5STakashi Iwai 	UMP_CC_SOUND_CONTROLLER_3 = 72,
700b5288f5STakashi Iwai 	UMP_CC_SOUND_CONTROLLER_4 = 73,
710b5288f5STakashi Iwai 	UMP_CC_SOUND_CONTROLLER_5 = 74,
720b5288f5STakashi Iwai 	UMP_CC_SOUND_CONTROLLER_6 = 75,
730b5288f5STakashi Iwai 	UMP_CC_SOUND_CONTROLLER_7 = 76,
740b5288f5STakashi Iwai 	UMP_CC_SOUND_CONTROLLER_8 = 77,
750b5288f5STakashi Iwai 	UMP_CC_SOUND_CONTROLLER_9 = 78,
760b5288f5STakashi Iwai 	UMP_CC_SOUND_CONTROLLER_10 = 79,
770b5288f5STakashi Iwai 	UMP_CC_GP_5 = 80,
780b5288f5STakashi Iwai 	UMP_CC_GP_6 = 81,
790b5288f5STakashi Iwai 	UMP_CC_GP_7 = 82,
800b5288f5STakashi Iwai 	UMP_CC_GP_8 = 83,
810b5288f5STakashi Iwai 	UMP_CC_PORTAMENTO_CONTROL = 84,
820b5288f5STakashi Iwai 	UMP_CC_EFFECT_1 = 91,
830b5288f5STakashi Iwai 	UMP_CC_EFFECT_2 = 92,
840b5288f5STakashi Iwai 	UMP_CC_EFFECT_3 = 93,
850b5288f5STakashi Iwai 	UMP_CC_EFFECT_4 = 94,
860b5288f5STakashi Iwai 	UMP_CC_EFFECT_5 = 95,
870b5288f5STakashi Iwai 	UMP_CC_DATA_INC = 96,
880b5288f5STakashi Iwai 	UMP_CC_DATA_DEC = 97,
890b5288f5STakashi Iwai 	UMP_CC_NRPN_LSB = 98,
900b5288f5STakashi Iwai 	UMP_CC_NRPN_MSB = 99,
910b5288f5STakashi Iwai 	UMP_CC_RPN_LSB = 100,
920b5288f5STakashi Iwai 	UMP_CC_RPN_MSB = 101,
930b5288f5STakashi Iwai 	UMP_CC_ALL_SOUND_OFF = 120,
940b5288f5STakashi Iwai 	UMP_CC_RESET_ALL = 121,
950b5288f5STakashi Iwai 	UMP_CC_LOCAL_CONTROL = 122,
960b5288f5STakashi Iwai 	UMP_CC_ALL_NOTES_OFF = 123,
970b5288f5STakashi Iwai 	UMP_CC_OMNI_OFF = 124,
980b5288f5STakashi Iwai 	UMP_CC_OMNI_ON = 125,
990b5288f5STakashi Iwai 	UMP_CC_POLY_OFF = 126,
1000b5288f5STakashi Iwai 	UMP_CC_POLY_ON = 127,
1010b5288f5STakashi Iwai };
1020b5288f5STakashi Iwai 
1030b5288f5STakashi Iwai /* MIDI 1.0 / 2.0 System Messages (0xfx) */
1040b5288f5STakashi Iwai enum {
1050b5288f5STakashi Iwai 	UMP_SYSTEM_STATUS_MIDI_TIME_CODE = 0xf1,
1060b5288f5STakashi Iwai 	UMP_SYSTEM_STATUS_SONG_POSITION = 0xf2,
1070b5288f5STakashi Iwai 	UMP_SYSTEM_STATUS_SONG_SELECT = 0xf3,
1080b5288f5STakashi Iwai 	UMP_SYSTEM_STATUS_TUNE_REQUEST = 0xf6,
1090b5288f5STakashi Iwai 	UMP_SYSTEM_STATUS_TIMING_CLOCK = 0xf8,
1100b5288f5STakashi Iwai 	UMP_SYSTEM_STATUS_START = 0xfa,
1110b5288f5STakashi Iwai 	UMP_SYSTEM_STATUS_CONTINUE = 0xfb,
1120b5288f5STakashi Iwai 	UMP_SYSTEM_STATUS_STOP = 0xfc,
1130b5288f5STakashi Iwai 	UMP_SYSTEM_STATUS_ACTIVE_SENSING = 0xfe,
1140b5288f5STakashi Iwai 	UMP_SYSTEM_STATUS_RESET = 0xff,
1150b5288f5STakashi Iwai };
1160b5288f5STakashi Iwai 
1170b5288f5STakashi Iwai /* MIDI 1.0 Realtime and SysEx status messages (0xfx) */
1180b5288f5STakashi Iwai enum {
1190b5288f5STakashi Iwai 	UMP_MIDI1_MSG_REALTIME		= 0xf0,	/* mask */
1200b5288f5STakashi Iwai 	UMP_MIDI1_MSG_SYSEX_START	= 0xf0,
1210b5288f5STakashi Iwai 	UMP_MIDI1_MSG_SYSEX_END		= 0xf7,
1220b5288f5STakashi Iwai };
1230b5288f5STakashi Iwai 
1240b5288f5STakashi Iwai /*
1250b5288f5STakashi Iwai  * UMP Message Definitions
1260b5288f5STakashi Iwai  */
1270b5288f5STakashi Iwai 
1280b5288f5STakashi Iwai /* MIDI 1.0 Note Off / Note On (32bit) */
1290b5288f5STakashi Iwai struct snd_ump_midi1_msg_note {
1300b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
1310b5288f5STakashi Iwai 	u32 type:4;
1320b5288f5STakashi Iwai 	u32 group:4;
1330b5288f5STakashi Iwai 	u32 status:4;
1340b5288f5STakashi Iwai 	u32 channel:4;
1350b5288f5STakashi Iwai 	u32 note:8;
1360b5288f5STakashi Iwai 	u32 velocity:8;
1370b5288f5STakashi Iwai #else
1380b5288f5STakashi Iwai 	u32 velocity:8;
1390b5288f5STakashi Iwai 	u32 note:8;
1400b5288f5STakashi Iwai 	u32 channel:4;
1410b5288f5STakashi Iwai 	u32 status:4;
1420b5288f5STakashi Iwai 	u32 group:4;
1430b5288f5STakashi Iwai 	u32 type:4;
1440b5288f5STakashi Iwai #endif
1450b5288f5STakashi Iwai } __packed;
1460b5288f5STakashi Iwai 
1470b5288f5STakashi Iwai /* MIDI 1.0 Poly Pressure (32bit) */
1480b5288f5STakashi Iwai struct snd_ump_midi1_msg_paf {
1490b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
1500b5288f5STakashi Iwai 	u32 type:4;
1510b5288f5STakashi Iwai 	u32 group:4;
1520b5288f5STakashi Iwai 	u32 status:4;
1530b5288f5STakashi Iwai 	u32 channel:4;
1540b5288f5STakashi Iwai 	u32 note:8;
1550b5288f5STakashi Iwai 	u32 data:8;
1560b5288f5STakashi Iwai #else
1570b5288f5STakashi Iwai 	u32 data:8;
1580b5288f5STakashi Iwai 	u32 note:8;
1590b5288f5STakashi Iwai 	u32 channel:4;
1600b5288f5STakashi Iwai 	u32 status:4;
1610b5288f5STakashi Iwai 	u32 group:4;
1620b5288f5STakashi Iwai 	u32 type:4;
1630b5288f5STakashi Iwai #endif
1640b5288f5STakashi Iwai } __packed;
1650b5288f5STakashi Iwai 
1660b5288f5STakashi Iwai /* MIDI 1.0 Control Change (32bit) */
1670b5288f5STakashi Iwai struct snd_ump_midi1_msg_cc {
1680b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
1690b5288f5STakashi Iwai 	u32 type:4;
1700b5288f5STakashi Iwai 	u32 group:4;
1710b5288f5STakashi Iwai 	u32 status:4;
1720b5288f5STakashi Iwai 	u32 channel:4;
1730b5288f5STakashi Iwai 	u32 index:8;
1740b5288f5STakashi Iwai 	u32 data:8;
1750b5288f5STakashi Iwai #else
1760b5288f5STakashi Iwai 	u32 data:8;
1770b5288f5STakashi Iwai 	u32 index:8;
1780b5288f5STakashi Iwai 	u32 channel:4;
1790b5288f5STakashi Iwai 	u32 status:4;
1800b5288f5STakashi Iwai 	u32 group:4;
1810b5288f5STakashi Iwai 	u32 type:4;
1820b5288f5STakashi Iwai #endif
1830b5288f5STakashi Iwai } __packed;
1840b5288f5STakashi Iwai 
1850b5288f5STakashi Iwai /* MIDI 1.0 Program Change (32bit) */
1860b5288f5STakashi Iwai struct snd_ump_midi1_msg_program {
1870b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
1880b5288f5STakashi Iwai 	u32 type:4;
1890b5288f5STakashi Iwai 	u32 group:4;
1900b5288f5STakashi Iwai 	u32 status:4;
1910b5288f5STakashi Iwai 	u32 channel:4;
1920b5288f5STakashi Iwai 	u32 program:8;
1930b5288f5STakashi Iwai 	u32 reserved:8;
1940b5288f5STakashi Iwai #else
1950b5288f5STakashi Iwai 	u32 reserved:8;
1960b5288f5STakashi Iwai 	u32 program:8;
1970b5288f5STakashi Iwai 	u32 channel:4;
1980b5288f5STakashi Iwai 	u32 status:4;
1990b5288f5STakashi Iwai 	u32 group:4;
2000b5288f5STakashi Iwai 	u32 type:4;
201dafb82e7SStephen Rothwell #endif
2020b5288f5STakashi Iwai } __packed;
2030b5288f5STakashi Iwai 
2040b5288f5STakashi Iwai /* MIDI 1.0 Channel Pressure (32bit) */
2050b5288f5STakashi Iwai struct snd_ump_midi1_msg_caf {
2060b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
2070b5288f5STakashi Iwai 	u32 type:4;
2080b5288f5STakashi Iwai 	u32 group:4;
2090b5288f5STakashi Iwai 	u32 status:4;
2100b5288f5STakashi Iwai 	u32 channel:4;
2110b5288f5STakashi Iwai 	u32 data:8;
2120b5288f5STakashi Iwai 	u32 reserved:8;
2130b5288f5STakashi Iwai #else
2140b5288f5STakashi Iwai 	u32 reserved:8;
2150b5288f5STakashi Iwai 	u32 data:8;
2160b5288f5STakashi Iwai 	u32 channel:4;
2170b5288f5STakashi Iwai 	u32 status:4;
2180b5288f5STakashi Iwai 	u32 group:4;
2190b5288f5STakashi Iwai 	u32 type:4;
2200b5288f5STakashi Iwai #endif
2210b5288f5STakashi Iwai } __packed;
2220b5288f5STakashi Iwai 
2230b5288f5STakashi Iwai /* MIDI 1.0 Pitch Bend (32bit) */
2240b5288f5STakashi Iwai struct snd_ump_midi1_msg_pitchbend {
2250b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
2260b5288f5STakashi Iwai 	u32 type:4;
2270b5288f5STakashi Iwai 	u32 group:4;
2280b5288f5STakashi Iwai 	u32 status:4;
2290b5288f5STakashi Iwai 	u32 channel:4;
2300b5288f5STakashi Iwai 	u32 data_lsb:8;
2310b5288f5STakashi Iwai 	u32 data_msb:8;
2320b5288f5STakashi Iwai #else
2330b5288f5STakashi Iwai 	u32 data_msb:8;
2340b5288f5STakashi Iwai 	u32 data_lsb:8;
2350b5288f5STakashi Iwai 	u32 channel:4;
2360b5288f5STakashi Iwai 	u32 status:4;
2370b5288f5STakashi Iwai 	u32 group:4;
2380b5288f5STakashi Iwai 	u32 type:4;
2390b5288f5STakashi Iwai #endif
2400b5288f5STakashi Iwai } __packed;
2410b5288f5STakashi Iwai 
2420b5288f5STakashi Iwai /* System Common and Real Time messages (32bit); no channel field */
2430b5288f5STakashi Iwai struct snd_ump_system_msg {
2440b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
2450b5288f5STakashi Iwai 	u32 type:4;
2460b5288f5STakashi Iwai 	u32 group:4;
2470b5288f5STakashi Iwai 	u32 status:8;
2480b5288f5STakashi Iwai 	u32 parm1:8;
2490b5288f5STakashi Iwai 	u32 parm2:8;
2500b5288f5STakashi Iwai #else
2510b5288f5STakashi Iwai 	u32 parm2:8;
2520b5288f5STakashi Iwai 	u32 parm1:8;
2530b5288f5STakashi Iwai 	u32 status:8;
2540b5288f5STakashi Iwai 	u32 group:4;
2550b5288f5STakashi Iwai 	u32 type:4;
2560b5288f5STakashi Iwai #endif
2570b5288f5STakashi Iwai } __packed;
2580b5288f5STakashi Iwai 
2590b5288f5STakashi Iwai /* MIDI 1.0 UMP CVM (32bit) */
2600b5288f5STakashi Iwai union snd_ump_midi1_msg {
2610b5288f5STakashi Iwai 	struct snd_ump_midi1_msg_note note;
2620b5288f5STakashi Iwai 	struct snd_ump_midi1_msg_paf paf;
2630b5288f5STakashi Iwai 	struct snd_ump_midi1_msg_cc cc;
2640b5288f5STakashi Iwai 	struct snd_ump_midi1_msg_program pg;
2650b5288f5STakashi Iwai 	struct snd_ump_midi1_msg_caf caf;
2660b5288f5STakashi Iwai 	struct snd_ump_midi1_msg_pitchbend pb;
2670b5288f5STakashi Iwai 	struct snd_ump_system_msg system;
2680b5288f5STakashi Iwai 	u32 raw;
2690b5288f5STakashi Iwai };
2700b5288f5STakashi Iwai 
2710b5288f5STakashi Iwai /* MIDI 2.0 Note Off / Note On (64bit) */
2720b5288f5STakashi Iwai struct snd_ump_midi2_msg_note {
2730b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
2740b5288f5STakashi Iwai 	/* 0 */
2750b5288f5STakashi Iwai 	u32 type:4;
2760b5288f5STakashi Iwai 	u32 group:4;
2770b5288f5STakashi Iwai 	u32 status:4;
2780b5288f5STakashi Iwai 	u32 channel:4;
2790b5288f5STakashi Iwai 	u32 note:8;
2800b5288f5STakashi Iwai 	u32 attribute_type:8;
2810b5288f5STakashi Iwai 	/* 1 */
2820b5288f5STakashi Iwai 	u32 velocity:16;
2830b5288f5STakashi Iwai 	u32 attribute_data:16;
2840b5288f5STakashi Iwai #else
2850b5288f5STakashi Iwai 	/* 0 */
2860b5288f5STakashi Iwai 	u32 attribute_type:8;
2870b5288f5STakashi Iwai 	u32 note:8;
2880b5288f5STakashi Iwai 	u32 channel:4;
2890b5288f5STakashi Iwai 	u32 status:4;
2900b5288f5STakashi Iwai 	u32 group:4;
2910b5288f5STakashi Iwai 	u32 type:4;
2920b5288f5STakashi Iwai 	/* 1 */
2930b5288f5STakashi Iwai 	u32 attribute_data:16;
2940b5288f5STakashi Iwai 	u32 velocity:16;
2950b5288f5STakashi Iwai #endif
2960b5288f5STakashi Iwai } __packed;
2970b5288f5STakashi Iwai 
2980b5288f5STakashi Iwai /* MIDI 2.0 Poly Pressure (64bit) */
2990b5288f5STakashi Iwai struct snd_ump_midi2_msg_paf {
3000b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
3010b5288f5STakashi Iwai 	/* 0 */
3020b5288f5STakashi Iwai 	u32 type:4;
3030b5288f5STakashi Iwai 	u32 group:4;
3040b5288f5STakashi Iwai 	u32 status:4;
3050b5288f5STakashi Iwai 	u32 channel:4;
3060b5288f5STakashi Iwai 	u32 note:8;
3070b5288f5STakashi Iwai 	u32 reserved:8;
3080b5288f5STakashi Iwai 	/* 1 */
3090b5288f5STakashi Iwai 	u32 data;
3100b5288f5STakashi Iwai #else
3110b5288f5STakashi Iwai 	/* 0 */
3120b5288f5STakashi Iwai 	u32 reserved:8;
3130b5288f5STakashi Iwai 	u32 note:8;
3140b5288f5STakashi Iwai 	u32 channel:4;
3150b5288f5STakashi Iwai 	u32 status:4;
3160b5288f5STakashi Iwai 	u32 group:4;
3170b5288f5STakashi Iwai 	u32 type:4;
3180b5288f5STakashi Iwai 	/* 1 */
3190b5288f5STakashi Iwai 	u32 data;
3200b5288f5STakashi Iwai #endif
3210b5288f5STakashi Iwai } __packed;
3220b5288f5STakashi Iwai 
3230b5288f5STakashi Iwai /* MIDI 2.0 Per-Note Controller (64bit) */
3240b5288f5STakashi Iwai struct snd_ump_midi2_msg_pernote_cc {
3250b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
3260b5288f5STakashi Iwai 	/* 0 */
3270b5288f5STakashi Iwai 	u32 type:4;
3280b5288f5STakashi Iwai 	u32 group:4;
3290b5288f5STakashi Iwai 	u32 status:4;
3300b5288f5STakashi Iwai 	u32 channel:4;
3310b5288f5STakashi Iwai 	u32 note:8;
3320b5288f5STakashi Iwai 	u32 index:8;
3330b5288f5STakashi Iwai 	/* 1 */
3340b5288f5STakashi Iwai 	u32 data;
3350b5288f5STakashi Iwai #else
3360b5288f5STakashi Iwai 	/* 0 */
3370b5288f5STakashi Iwai 	u32 index:8;
3380b5288f5STakashi Iwai 	u32 note:8;
3390b5288f5STakashi Iwai 	u32 channel:4;
3400b5288f5STakashi Iwai 	u32 status:4;
3410b5288f5STakashi Iwai 	u32 group:4;
3420b5288f5STakashi Iwai 	u32 type:4;
3430b5288f5STakashi Iwai 	/* 1 */
3440b5288f5STakashi Iwai 	u32 data;
3450b5288f5STakashi Iwai #endif
3460b5288f5STakashi Iwai } __packed;
3470b5288f5STakashi Iwai 
3480b5288f5STakashi Iwai /* MIDI 2.0 Per-Note Management (64bit) */
3490b5288f5STakashi Iwai struct snd_ump_midi2_msg_pernote_mgmt {
3500b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
3510b5288f5STakashi Iwai 	/* 0 */
3520b5288f5STakashi Iwai 	u32 type:4;
3530b5288f5STakashi Iwai 	u32 group:4;
3540b5288f5STakashi Iwai 	u32 status:4;
3550b5288f5STakashi Iwai 	u32 channel:4;
3560b5288f5STakashi Iwai 	u32 note:8;
3570b5288f5STakashi Iwai 	u32 flags:8;
3580b5288f5STakashi Iwai 	/* 1 */
3590b5288f5STakashi Iwai 	u32 reserved;
3600b5288f5STakashi Iwai #else
3610b5288f5STakashi Iwai 	/* 0 */
3620b5288f5STakashi Iwai 	u32 flags:8;
3630b5288f5STakashi Iwai 	u32 note:8;
3640b5288f5STakashi Iwai 	u32 channel:4;
3650b5288f5STakashi Iwai 	u32 status:4;
3660b5288f5STakashi Iwai 	u32 group:4;
3670b5288f5STakashi Iwai 	u32 type:4;
3680b5288f5STakashi Iwai 	/* 1 */
3690b5288f5STakashi Iwai 	u32 reserved;
3700b5288f5STakashi Iwai #endif
3710b5288f5STakashi Iwai } __packed;
3720b5288f5STakashi Iwai 
3730b5288f5STakashi Iwai /* MIDI 2.0 Control Change (64bit) */
3740b5288f5STakashi Iwai struct snd_ump_midi2_msg_cc {
3750b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
3760b5288f5STakashi Iwai 	/* 0 */
3770b5288f5STakashi Iwai 	u32 type:4;
3780b5288f5STakashi Iwai 	u32 group:4;
3790b5288f5STakashi Iwai 	u32 status:4;
3800b5288f5STakashi Iwai 	u32 channel:4;
3810b5288f5STakashi Iwai 	u32 index:8;
3820b5288f5STakashi Iwai 	u32 reserved:8;
3830b5288f5STakashi Iwai 	/* 1 */
3840b5288f5STakashi Iwai 	u32 data;
3850b5288f5STakashi Iwai #else
3860b5288f5STakashi Iwai 	/* 0 */
3870b5288f5STakashi Iwai 	u32 reserved:8;
3880b5288f5STakashi Iwai 	u32 index:8;
3890b5288f5STakashi Iwai 	u32 channel:4;
3900b5288f5STakashi Iwai 	u32 status:4;
3910b5288f5STakashi Iwai 	u32 group:4;
3920b5288f5STakashi Iwai 	u32 type:4;
3930b5288f5STakashi Iwai 	/* 1 */
3940b5288f5STakashi Iwai 	u32 data;
3950b5288f5STakashi Iwai #endif
3960b5288f5STakashi Iwai } __packed;
3970b5288f5STakashi Iwai 
3980b5288f5STakashi Iwai /* MIDI 2.0 Registered Controller (RPN) / Assignable Controller (NRPN) (64bit) */
3990b5288f5STakashi Iwai struct snd_ump_midi2_msg_rpn {
4000b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
4010b5288f5STakashi Iwai 	/* 0 */
4020b5288f5STakashi Iwai 	u32 type:4;
4030b5288f5STakashi Iwai 	u32 group:4;
4040b5288f5STakashi Iwai 	u32 status:4;
4050b5288f5STakashi Iwai 	u32 channel:4;
4060b5288f5STakashi Iwai 	u32 bank:8;
4070b5288f5STakashi Iwai 	u32 index:8;
4080b5288f5STakashi Iwai 	/* 1 */
4090b5288f5STakashi Iwai 	u32 data;
4100b5288f5STakashi Iwai #else
4110b5288f5STakashi Iwai 	/* 0 */
4120b5288f5STakashi Iwai 	u32 index:8;
4130b5288f5STakashi Iwai 	u32 bank:8;
4140b5288f5STakashi Iwai 	u32 channel:4;
4150b5288f5STakashi Iwai 	u32 status:4;
4160b5288f5STakashi Iwai 	u32 group:4;
4170b5288f5STakashi Iwai 	u32 type:4;
4180b5288f5STakashi Iwai 	/* 1 */
4190b5288f5STakashi Iwai 	u32 data;
4200b5288f5STakashi Iwai #endif
4210b5288f5STakashi Iwai } __packed;
4220b5288f5STakashi Iwai 
4230b5288f5STakashi Iwai /* MIDI 2.0 Program Change (64bit) */
4240b5288f5STakashi Iwai struct snd_ump_midi2_msg_program {
4250b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
4260b5288f5STakashi Iwai 	/* 0 */
4270b5288f5STakashi Iwai 	u32 type:4;
4280b5288f5STakashi Iwai 	u32 group:4;
4290b5288f5STakashi Iwai 	u32 status:4;
4300b5288f5STakashi Iwai 	u32 channel:4;
4310b5288f5STakashi Iwai 	u32 reserved:15;
4320b5288f5STakashi Iwai 	u32 bank_valid:1;
4330b5288f5STakashi Iwai 	/* 1 */
4340b5288f5STakashi Iwai 	u32 program:8;
4350b5288f5STakashi Iwai 	u32 reserved2:8;
4360b5288f5STakashi Iwai 	u32 bank_msb:8;
4370b5288f5STakashi Iwai 	u32 bank_lsb:8;
4380b5288f5STakashi Iwai #else
4390b5288f5STakashi Iwai 	/* 0 */
4400b5288f5STakashi Iwai 	u32 bank_valid:1;
4410b5288f5STakashi Iwai 	u32 reserved:15;
4420b5288f5STakashi Iwai 	u32 channel:4;
4430b5288f5STakashi Iwai 	u32 status:4;
4440b5288f5STakashi Iwai 	u32 group:4;
4450b5288f5STakashi Iwai 	u32 type:4;
4460b5288f5STakashi Iwai 	/* 1 */
4470b5288f5STakashi Iwai 	u32 bank_lsb:8;
4480b5288f5STakashi Iwai 	u32 bank_msb:8;
4490b5288f5STakashi Iwai 	u32 reserved2:8;
4500b5288f5STakashi Iwai 	u32 program:8;
4510b5288f5STakashi Iwai #endif
4520b5288f5STakashi Iwai } __packed;
4530b5288f5STakashi Iwai 
4540b5288f5STakashi Iwai /* MIDI 2.0 Channel Pressure (64bit) */
4550b5288f5STakashi Iwai struct snd_ump_midi2_msg_caf {
4560b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
4570b5288f5STakashi Iwai 	/* 0 */
4580b5288f5STakashi Iwai 	u32 type:4;
4590b5288f5STakashi Iwai 	u32 group:4;
4600b5288f5STakashi Iwai 	u32 status:4;
4610b5288f5STakashi Iwai 	u32 channel:4;
4620b5288f5STakashi Iwai 	u32 reserved:16;
4630b5288f5STakashi Iwai 	/* 1 */
4640b5288f5STakashi Iwai 	u32 data;
4650b5288f5STakashi Iwai #else
4660b5288f5STakashi Iwai 	/* 0 */
4670b5288f5STakashi Iwai 	u32 reserved:16;
4680b5288f5STakashi Iwai 	u32 channel:4;
4690b5288f5STakashi Iwai 	u32 status:4;
4700b5288f5STakashi Iwai 	u32 group:4;
4710b5288f5STakashi Iwai 	u32 type:4;
4720b5288f5STakashi Iwai 	/* 1 */
4730b5288f5STakashi Iwai 	u32 data;
4740b5288f5STakashi Iwai #endif
4750b5288f5STakashi Iwai } __packed;
4760b5288f5STakashi Iwai 
4770b5288f5STakashi Iwai /* MIDI 2.0 Pitch Bend (64bit) */
4780b5288f5STakashi Iwai struct snd_ump_midi2_msg_pitchbend {
4790b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
4800b5288f5STakashi Iwai 	/* 0 */
4810b5288f5STakashi Iwai 	u32 type:4;
4820b5288f5STakashi Iwai 	u32 group:4;
4830b5288f5STakashi Iwai 	u32 status:4;
4840b5288f5STakashi Iwai 	u32 channel:4;
4850b5288f5STakashi Iwai 	u32 reserved:16;
4860b5288f5STakashi Iwai 	/* 1 */
4870b5288f5STakashi Iwai 	u32 data;
4880b5288f5STakashi Iwai #else
4890b5288f5STakashi Iwai 	/* 0 */
4900b5288f5STakashi Iwai 	u32 reserved:16;
4910b5288f5STakashi Iwai 	u32 channel:4;
4920b5288f5STakashi Iwai 	u32 status:4;
4930b5288f5STakashi Iwai 	u32 group:4;
4940b5288f5STakashi Iwai 	u32 type:4;
4950b5288f5STakashi Iwai 	/* 1 */
4960b5288f5STakashi Iwai 	u32 data;
4970b5288f5STakashi Iwai #endif
4980b5288f5STakashi Iwai } __packed;
4990b5288f5STakashi Iwai 
5000b5288f5STakashi Iwai /* MIDI 2.0 Per-Note Pitch Bend (64bit) */
5010b5288f5STakashi Iwai struct snd_ump_midi2_msg_pernote_pitchbend {
5020b5288f5STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
5030b5288f5STakashi Iwai 	/* 0 */
5040b5288f5STakashi Iwai 	u32 type:4;
5050b5288f5STakashi Iwai 	u32 group:4;
5060b5288f5STakashi Iwai 	u32 status:4;
5070b5288f5STakashi Iwai 	u32 channel:4;
5080b5288f5STakashi Iwai 	u32 note:8;
5090b5288f5STakashi Iwai 	u32 reserved:8;
5100b5288f5STakashi Iwai 	/* 1 */
5110b5288f5STakashi Iwai 	u32 data;
5120b5288f5STakashi Iwai #else
5130b5288f5STakashi Iwai 	/* 0 */
5140b5288f5STakashi Iwai 	u32 reserved:8;
5150b5288f5STakashi Iwai 	u32 note:8;
5160b5288f5STakashi Iwai 	u32 channel:4;
5170b5288f5STakashi Iwai 	u32 status:4;
5180b5288f5STakashi Iwai 	u32 group:4;
5190b5288f5STakashi Iwai 	u32 type:4;
5200b5288f5STakashi Iwai 	/* 1 */
5210b5288f5STakashi Iwai 	u32 data;
5220b5288f5STakashi Iwai #endif
5230b5288f5STakashi Iwai } __packed;
5240b5288f5STakashi Iwai 
5250b5288f5STakashi Iwai /* MIDI 2.0 UMP CVM (64bit) */
5260b5288f5STakashi Iwai union snd_ump_midi2_msg {
5270b5288f5STakashi Iwai 	struct snd_ump_midi2_msg_note note;
5280b5288f5STakashi Iwai 	struct snd_ump_midi2_msg_paf paf;
5290b5288f5STakashi Iwai 	struct snd_ump_midi2_msg_pernote_cc pernote_cc;
5300b5288f5STakashi Iwai 	struct snd_ump_midi2_msg_pernote_mgmt pernote_mgmt;
5310b5288f5STakashi Iwai 	struct snd_ump_midi2_msg_cc cc;
5320b5288f5STakashi Iwai 	struct snd_ump_midi2_msg_rpn rpn;
5330b5288f5STakashi Iwai 	struct snd_ump_midi2_msg_program pg;
5340b5288f5STakashi Iwai 	struct snd_ump_midi2_msg_caf caf;
5350b5288f5STakashi Iwai 	struct snd_ump_midi2_msg_pitchbend pb;
5360b5288f5STakashi Iwai 	struct snd_ump_midi2_msg_pernote_pitchbend pernote_pb;
5370b5288f5STakashi Iwai 	u32 raw[2];
5380b5288f5STakashi Iwai };
5390b5288f5STakashi Iwai 
540*37e0e141STakashi Iwai /* UMP Stream Message: Endpoint Discovery (128bit) */
541*37e0e141STakashi Iwai struct snd_ump_stream_msg_ep_discovery {
542*37e0e141STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
543*37e0e141STakashi Iwai 	/* 0 */
544*37e0e141STakashi Iwai 	u32 type:4;
545*37e0e141STakashi Iwai 	u32 format:2;
546*37e0e141STakashi Iwai 	u32 status:10;
547*37e0e141STakashi Iwai 	u32 ump_version_major:8;
548*37e0e141STakashi Iwai 	u32 ump_version_minor:8;
549*37e0e141STakashi Iwai 	/* 1 */
550*37e0e141STakashi Iwai 	u32 reserved:24;
551*37e0e141STakashi Iwai 	u32 filter_bitmap:8;
552*37e0e141STakashi Iwai 	/* 2-3 */
553*37e0e141STakashi Iwai 	u32 reserved2[2];
554*37e0e141STakashi Iwai #else
555*37e0e141STakashi Iwai 	/* 0 */
556*37e0e141STakashi Iwai 	u32 ump_version_minor:8;
557*37e0e141STakashi Iwai 	u32 ump_version_major:8;
558*37e0e141STakashi Iwai 	u32 status:10;
559*37e0e141STakashi Iwai 	u32 format:2;
560*37e0e141STakashi Iwai 	u32 type:4;
561*37e0e141STakashi Iwai 	/* 1 */
562*37e0e141STakashi Iwai 	u32 filter_bitmap:8;
563*37e0e141STakashi Iwai 	u32 reserved:24;
564*37e0e141STakashi Iwai 	/* 2-3 */
565*37e0e141STakashi Iwai 	u32 reserved2[2];
566*37e0e141STakashi Iwai #endif
567*37e0e141STakashi Iwai } __packed;
568*37e0e141STakashi Iwai 
569*37e0e141STakashi Iwai /* UMP Stream Message: Endpoint Info Notification (128bit) */
570*37e0e141STakashi Iwai struct snd_ump_stream_msg_ep_info {
571*37e0e141STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
572*37e0e141STakashi Iwai 	/* 0 */
573*37e0e141STakashi Iwai 	u32 type:4;
574*37e0e141STakashi Iwai 	u32 format:2;
575*37e0e141STakashi Iwai 	u32 status:10;
576*37e0e141STakashi Iwai 	u32 ump_version_major:8;
577*37e0e141STakashi Iwai 	u32 ump_version_minor:8;
578*37e0e141STakashi Iwai 	/* 1 */
579*37e0e141STakashi Iwai 	u32 static_function_block:1;
580*37e0e141STakashi Iwai 	u32 num_function_blocks:7;
581*37e0e141STakashi Iwai 	u32 reserved:8;
582*37e0e141STakashi Iwai 	u32 protocol:8;
583*37e0e141STakashi Iwai 	u32 reserved2:6;
584*37e0e141STakashi Iwai 	u32 jrts:2;
585*37e0e141STakashi Iwai 	/* 2-3 */
586*37e0e141STakashi Iwai 	u32 reserved3[2];
587*37e0e141STakashi Iwai #else
588*37e0e141STakashi Iwai 	/* 0 */
589*37e0e141STakashi Iwai 	u32 ump_version_minor:8;
590*37e0e141STakashi Iwai 	u32 ump_version_major:8;
591*37e0e141STakashi Iwai 	u32 status:10;
592*37e0e141STakashi Iwai 	u32 format:2;
593*37e0e141STakashi Iwai 	u32 type:4;
594*37e0e141STakashi Iwai 	/* 1 */
595*37e0e141STakashi Iwai 	u32 jrts:2;
596*37e0e141STakashi Iwai 	u32 reserved2:6;
597*37e0e141STakashi Iwai 	u32 protocol:8;
598*37e0e141STakashi Iwai 	u32 reserved:8;
599*37e0e141STakashi Iwai 	u32 num_function_blocks:7;
600*37e0e141STakashi Iwai 	u32 static_function_block:1;
601*37e0e141STakashi Iwai 	/* 2-3 */
602*37e0e141STakashi Iwai 	u32 reserved3[2];
603*37e0e141STakashi Iwai #endif
604*37e0e141STakashi Iwai } __packed;
605*37e0e141STakashi Iwai 
606*37e0e141STakashi Iwai /* UMP Stream Message: Device Info Notification (128bit) */
607*37e0e141STakashi Iwai struct snd_ump_stream_msg_devince_info {
608*37e0e141STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
609*37e0e141STakashi Iwai 	/* 0 */
610*37e0e141STakashi Iwai 	u32 type:4;
611*37e0e141STakashi Iwai 	u32 format:2;
612*37e0e141STakashi Iwai 	u32 status:10;
613*37e0e141STakashi Iwai 	u32 reserved:16;
614*37e0e141STakashi Iwai 	/* 1 */
615*37e0e141STakashi Iwai 	u32 manufacture_id;
616*37e0e141STakashi Iwai 	/* 2 */
617*37e0e141STakashi Iwai 	u8 family_lsb;
618*37e0e141STakashi Iwai 	u8 family_msb;
619*37e0e141STakashi Iwai 	u8 model_lsb;
620*37e0e141STakashi Iwai 	u8 model_msb;
621*37e0e141STakashi Iwai 	/* 3 */
622*37e0e141STakashi Iwai 	u32 sw_revision;
623*37e0e141STakashi Iwai #else
624*37e0e141STakashi Iwai 	/* 0 */
625*37e0e141STakashi Iwai 	u32 reserved:16;
626*37e0e141STakashi Iwai 	u32 status:10;
627*37e0e141STakashi Iwai 	u32 format:2;
628*37e0e141STakashi Iwai 	u32 type:4;
629*37e0e141STakashi Iwai 	/* 1 */
630*37e0e141STakashi Iwai 	u32 manufacture_id;
631*37e0e141STakashi Iwai 	/* 2 */
632*37e0e141STakashi Iwai 	u8 model_msb;
633*37e0e141STakashi Iwai 	u8 model_lsb;
634*37e0e141STakashi Iwai 	u8 family_msb;
635*37e0e141STakashi Iwai 	u8 family_lsb;
636*37e0e141STakashi Iwai 	/* 3 */
637*37e0e141STakashi Iwai 	u32 sw_revision;
638*37e0e141STakashi Iwai #endif
639*37e0e141STakashi Iwai } __packed;
640*37e0e141STakashi Iwai 
641*37e0e141STakashi Iwai /* UMP Stream Message: Stream Config Request / Notification (128bit) */
642*37e0e141STakashi Iwai struct snd_ump_stream_msg_stream_cfg {
643*37e0e141STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
644*37e0e141STakashi Iwai 	/* 0 */
645*37e0e141STakashi Iwai 	u32 type:4;
646*37e0e141STakashi Iwai 	u32 format:2;
647*37e0e141STakashi Iwai 	u32 status:10;
648*37e0e141STakashi Iwai 	u32 protocol:8;
649*37e0e141STakashi Iwai 	u32 reserved:6;
650*37e0e141STakashi Iwai 	u32 jrts:2;
651*37e0e141STakashi Iwai 	/* 1-3 */
652*37e0e141STakashi Iwai 	u32 reserved2[3];
653*37e0e141STakashi Iwai #else
654*37e0e141STakashi Iwai 	/* 0 */
655*37e0e141STakashi Iwai 	u32 jrts:2;
656*37e0e141STakashi Iwai 	u32 reserved:6;
657*37e0e141STakashi Iwai 	u32 protocol:8;
658*37e0e141STakashi Iwai 	u32 status:10;
659*37e0e141STakashi Iwai 	u32 format:2;
660*37e0e141STakashi Iwai 	u32 type:4;
661*37e0e141STakashi Iwai 	/* 1-3 */
662*37e0e141STakashi Iwai 	u32 reserved2[3];
663*37e0e141STakashi Iwai #endif
664*37e0e141STakashi Iwai } __packed;
665*37e0e141STakashi Iwai 
666*37e0e141STakashi Iwai /* UMP Stream Message: Function Block Discovery (128bit) */
667*37e0e141STakashi Iwai struct snd_ump_stream_msg_fb_discovery {
668*37e0e141STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
669*37e0e141STakashi Iwai 	/* 0 */
670*37e0e141STakashi Iwai 	u32 type:4;
671*37e0e141STakashi Iwai 	u32 format:2;
672*37e0e141STakashi Iwai 	u32 status:10;
673*37e0e141STakashi Iwai 	u32 function_block_id:8;
674*37e0e141STakashi Iwai 	u32 filter:8;
675*37e0e141STakashi Iwai 	/* 1-3 */
676*37e0e141STakashi Iwai 	u32 reserved[3];
677*37e0e141STakashi Iwai #else
678*37e0e141STakashi Iwai 	/* 0 */
679*37e0e141STakashi Iwai 	u32 filter:8;
680*37e0e141STakashi Iwai 	u32 function_block_id:8;
681*37e0e141STakashi Iwai 	u32 status:10;
682*37e0e141STakashi Iwai 	u32 format:2;
683*37e0e141STakashi Iwai 	u32 type:4;
684*37e0e141STakashi Iwai 	/* 1-3 */
685*37e0e141STakashi Iwai 	u32 reserved[3];
686*37e0e141STakashi Iwai #endif
687*37e0e141STakashi Iwai } __packed;
688*37e0e141STakashi Iwai 
689*37e0e141STakashi Iwai /* UMP Stream Message: Function Block Info Notification (128bit) */
690*37e0e141STakashi Iwai struct snd_ump_stream_msg_fb_info {
691*37e0e141STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
692*37e0e141STakashi Iwai 	/* 0 */
693*37e0e141STakashi Iwai 	u32 type:4;
694*37e0e141STakashi Iwai 	u32 format:2;
695*37e0e141STakashi Iwai 	u32 status:10;
696*37e0e141STakashi Iwai 	u32 active:1;
697*37e0e141STakashi Iwai 	u32 function_block_id:7;
698*37e0e141STakashi Iwai 	u32 reserved:2;
699*37e0e141STakashi Iwai 	u32 ui_hint:2;
700*37e0e141STakashi Iwai 	u32 midi_10:2;
701*37e0e141STakashi Iwai 	u32 direction:2;
702*37e0e141STakashi Iwai 	/* 1 */
703*37e0e141STakashi Iwai 	u32 first_group:8;
704*37e0e141STakashi Iwai 	u32 num_groups:8;
705*37e0e141STakashi Iwai 	u32 midi_ci_version:8;
706*37e0e141STakashi Iwai 	u32 sysex8_streams:8;
707*37e0e141STakashi Iwai 	/* 2-3 */
708*37e0e141STakashi Iwai 	u32 reserved2[2];
709*37e0e141STakashi Iwai #else
710*37e0e141STakashi Iwai 	/* 0 */
711*37e0e141STakashi Iwai 	u32 direction:2;
712*37e0e141STakashi Iwai 	u32 midi_10:2;
713*37e0e141STakashi Iwai 	u32 ui_hint:2;
714*37e0e141STakashi Iwai 	u32 reserved:2;
715*37e0e141STakashi Iwai 	u32 function_block_id:7;
716*37e0e141STakashi Iwai 	u32 active:1;
717*37e0e141STakashi Iwai 	u32 status:10;
718*37e0e141STakashi Iwai 	u32 format:2;
719*37e0e141STakashi Iwai 	u32 type:4;
720*37e0e141STakashi Iwai 	/* 1 */
721*37e0e141STakashi Iwai 	u32 sysex8_streams:8;
722*37e0e141STakashi Iwai 	u32 midi_ci_version:8;
723*37e0e141STakashi Iwai 	u32 num_groups:8;
724*37e0e141STakashi Iwai 	u32 first_group:8;
725*37e0e141STakashi Iwai 	/* 2-3 */
726*37e0e141STakashi Iwai 	u32 reserved2[2];
727*37e0e141STakashi Iwai #endif
728*37e0e141STakashi Iwai } __packed;
729*37e0e141STakashi Iwai 
730*37e0e141STakashi Iwai /* UMP Stream Message: Function Block Name Notification (128bit) */
731*37e0e141STakashi Iwai struct snd_ump_stream_msg_fb_name {
732*37e0e141STakashi Iwai #ifdef __BIG_ENDIAN_BITFIELD
733*37e0e141STakashi Iwai 	/* 0 */
734*37e0e141STakashi Iwai 	u16 type:4;
735*37e0e141STakashi Iwai 	u16 format:2;
736*37e0e141STakashi Iwai 	u16 status:10;
737*37e0e141STakashi Iwai 	u8 function_block_id;
738*37e0e141STakashi Iwai 	u8 name0;
739*37e0e141STakashi Iwai 	/* 1-3 */
740*37e0e141STakashi Iwai 	u8 name[12];
741*37e0e141STakashi Iwai #else
742*37e0e141STakashi Iwai 	/* 0 */
743*37e0e141STakashi Iwai 	u8 name0;
744*37e0e141STakashi Iwai 	u8 function_block_id;
745*37e0e141STakashi Iwai 	u16 status:10;
746*37e0e141STakashi Iwai 	u16 format:2;
747*37e0e141STakashi Iwai 	u16 type:4;
748*37e0e141STakashi Iwai 	/* 1-3 */
749*37e0e141STakashi Iwai 	u8 name[12]; // FIXME: byte order
750*37e0e141STakashi Iwai #endif
751*37e0e141STakashi Iwai } __packed;
752*37e0e141STakashi Iwai 
753*37e0e141STakashi Iwai /* MIDI 2.0 Stream Messages (128bit) */
754*37e0e141STakashi Iwai union snd_ump_stream_msg {
755*37e0e141STakashi Iwai 	struct snd_ump_stream_msg_ep_discovery ep_discovery;
756*37e0e141STakashi Iwai 	struct snd_ump_stream_msg_ep_info ep_info;
757*37e0e141STakashi Iwai 	struct snd_ump_stream_msg_devince_info device_info;
758*37e0e141STakashi Iwai 	struct snd_ump_stream_msg_stream_cfg stream_cfg;
759*37e0e141STakashi Iwai 	struct snd_ump_stream_msg_fb_discovery fb_discovery;
760*37e0e141STakashi Iwai 	struct snd_ump_stream_msg_fb_info fb_info;
761*37e0e141STakashi Iwai 	struct snd_ump_stream_msg_fb_name fb_name;
762*37e0e141STakashi Iwai 	u32 raw[4];
763*37e0e141STakashi Iwai };
764*37e0e141STakashi Iwai 
7650b5288f5STakashi Iwai #endif /* __SOUND_UMP_MSG_H */
766