brintos

brintos / linux-shallow public Read only

0
0
Text · 13.8 KiB · 72f60dd Raw
766 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * Universal MIDI Packet (UMP): Message Definitions4 */5#ifndef __SOUND_UMP_MSG_H6#define __SOUND_UMP_MSG_H7 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 Definitions126 */127 128/* MIDI 1.0 Note Off / Note On (32bit) */129struct snd_ump_midi1_msg_note {130#ifdef __BIG_ENDIAN_BITFIELD131	u32 type:4;132	u32 group:4;133	u32 status:4;134	u32 channel:4;135	u32 note:8;136	u32 velocity:8;137#else138	u32 velocity:8;139	u32 note:8;140	u32 channel:4;141	u32 status:4;142	u32 group:4;143	u32 type:4;144#endif145} __packed;146 147/* MIDI 1.0 Poly Pressure (32bit) */148struct snd_ump_midi1_msg_paf {149#ifdef __BIG_ENDIAN_BITFIELD150	u32 type:4;151	u32 group:4;152	u32 status:4;153	u32 channel:4;154	u32 note:8;155	u32 data:8;156#else157	u32 data:8;158	u32 note:8;159	u32 channel:4;160	u32 status:4;161	u32 group:4;162	u32 type:4;163#endif164} __packed;165 166/* MIDI 1.0 Control Change (32bit) */167struct snd_ump_midi1_msg_cc {168#ifdef __BIG_ENDIAN_BITFIELD169	u32 type:4;170	u32 group:4;171	u32 status:4;172	u32 channel:4;173	u32 index:8;174	u32 data:8;175#else176	u32 data:8;177	u32 index:8;178	u32 channel:4;179	u32 status:4;180	u32 group:4;181	u32 type:4;182#endif183} __packed;184 185/* MIDI 1.0 Program Change (32bit) */186struct snd_ump_midi1_msg_program {187#ifdef __BIG_ENDIAN_BITFIELD188	u32 type:4;189	u32 group:4;190	u32 status:4;191	u32 channel:4;192	u32 program:8;193	u32 reserved:8;194#else195	u32 reserved:8;196	u32 program:8;197	u32 channel:4;198	u32 status:4;199	u32 group:4;200	u32 type:4;201#endif202} __packed;203 204/* MIDI 1.0 Channel Pressure (32bit) */205struct snd_ump_midi1_msg_caf {206#ifdef __BIG_ENDIAN_BITFIELD207	u32 type:4;208	u32 group:4;209	u32 status:4;210	u32 channel:4;211	u32 data:8;212	u32 reserved:8;213#else214	u32 reserved:8;215	u32 data:8;216	u32 channel:4;217	u32 status:4;218	u32 group:4;219	u32 type:4;220#endif221} __packed;222 223/* MIDI 1.0 Pitch Bend (32bit) */224struct snd_ump_midi1_msg_pitchbend {225#ifdef __BIG_ENDIAN_BITFIELD226	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#else233	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#endif240} __packed;241 242/* System Common and Real Time messages (32bit); no channel field */243struct snd_ump_system_msg {244#ifdef __BIG_ENDIAN_BITFIELD245	u32 type:4;246	u32 group:4;247	u32 status:8;248	u32 parm1:8;249	u32 parm2:8;250#else251	u32 parm2:8;252	u32 parm1:8;253	u32 status:8;254	u32 group:4;255	u32 type:4;256#endif257} __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_BITFIELD274	/* 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#else285	/* 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#endif296} __packed;297 298/* MIDI 2.0 Poly Pressure (64bit) */299struct snd_ump_midi2_msg_paf {300#ifdef __BIG_ENDIAN_BITFIELD301	/* 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#else311	/* 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#endif321} __packed;322 323/* MIDI 2.0 Per-Note Controller (64bit) */324struct snd_ump_midi2_msg_pernote_cc {325#ifdef __BIG_ENDIAN_BITFIELD326	/* 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#else336	/* 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#endif346} __packed;347 348/* MIDI 2.0 Per-Note Management (64bit) */349struct snd_ump_midi2_msg_pernote_mgmt {350#ifdef __BIG_ENDIAN_BITFIELD351	/* 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#else361	/* 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#endif371} __packed;372 373/* MIDI 2.0 Control Change (64bit) */374struct snd_ump_midi2_msg_cc {375#ifdef __BIG_ENDIAN_BITFIELD376	/* 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#else386	/* 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#endif396} __packed;397 398/* MIDI 2.0 Registered Controller (RPN) / Assignable Controller (NRPN) (64bit) */399struct snd_ump_midi2_msg_rpn {400#ifdef __BIG_ENDIAN_BITFIELD401	/* 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#else411	/* 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#endif421} __packed;422 423/* MIDI 2.0 Program Change (64bit) */424struct snd_ump_midi2_msg_program {425#ifdef __BIG_ENDIAN_BITFIELD426	/* 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#else439	/* 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#endif452} __packed;453 454/* MIDI 2.0 Channel Pressure (64bit) */455struct snd_ump_midi2_msg_caf {456#ifdef __BIG_ENDIAN_BITFIELD457	/* 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#else466	/* 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#endif475} __packed;476 477/* MIDI 2.0 Pitch Bend (64bit) */478struct snd_ump_midi2_msg_pitchbend {479#ifdef __BIG_ENDIAN_BITFIELD480	/* 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#else489	/* 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#endif498} __packed;499 500/* MIDI 2.0 Per-Note Pitch Bend (64bit) */501struct snd_ump_midi2_msg_pernote_pitchbend {502#ifdef __BIG_ENDIAN_BITFIELD503	/* 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#else513	/* 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#endif523} __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_BITFIELD543	/* 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#else555	/* 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#endif567} __packed;568 569/* UMP Stream Message: Endpoint Info Notification (128bit) */570struct snd_ump_stream_msg_ep_info {571#ifdef __BIG_ENDIAN_BITFIELD572	/* 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#else588	/* 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#endif604} __packed;605 606/* UMP Stream Message: Device Info Notification (128bit) */607struct snd_ump_stream_msg_devince_info {608#ifdef __BIG_ENDIAN_BITFIELD609	/* 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#else624	/* 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#endif639} __packed;640 641/* UMP Stream Message: Stream Config Request / Notification (128bit) */642struct snd_ump_stream_msg_stream_cfg {643#ifdef __BIG_ENDIAN_BITFIELD644	/* 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#else654	/* 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#endif664} __packed;665 666/* UMP Stream Message: Function Block Discovery (128bit) */667struct snd_ump_stream_msg_fb_discovery {668#ifdef __BIG_ENDIAN_BITFIELD669	/* 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#else678	/* 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#endif687} __packed;688 689/* UMP Stream Message: Function Block Info Notification (128bit) */690struct snd_ump_stream_msg_fb_info {691#ifdef __BIG_ENDIAN_BITFIELD692	/* 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#else710	/* 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#endif728} __packed;729 730/* UMP Stream Message: Function Block Name Notification (128bit) */731struct snd_ump_stream_msg_fb_name {732#ifdef __BIG_ENDIAN_BITFIELD733	/* 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#else742	/* 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 order750#endif751} __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