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