^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Main header file for the ALSA sequencer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright (c) 1998-1999 by Frank van de Pol <fvdpol@coil.demon.nl>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * (c) 1998-1999 by Jaroslav Kysela <perex@perex.cz>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * This program is free software; you can redistribute it and/or modify
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * it under the terms of the GNU General Public License as published by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * the Free Software Foundation; either version 2 of the License, or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * (at your option) any later version.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * This program is distributed in the hope that it will be useful,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) * but WITHOUT ANY WARRANTY; without even the implied warranty of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * GNU General Public License for more details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * You should have received a copy of the GNU General Public License
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * along with this program; if not, write to the Free Software
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #ifndef _UAPI__SOUND_ASEQUENCER_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define _UAPI__SOUND_ASEQUENCER_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #include <sound/asound.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) /** version of the sequencer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) * definition of sequencer event types
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) /** system messages
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) * event data type = #snd_seq_result
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) #define SNDRV_SEQ_EVENT_SYSTEM 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define SNDRV_SEQ_EVENT_RESULT 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) /** note messages (channel specific)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) * event data type = #snd_seq_ev_note
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define SNDRV_SEQ_EVENT_NOTE 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define SNDRV_SEQ_EVENT_NOTEON 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define SNDRV_SEQ_EVENT_NOTEOFF 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define SNDRV_SEQ_EVENT_KEYPRESS 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) /** control messages (channel specific)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) * event data type = #snd_seq_ev_ctrl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define SNDRV_SEQ_EVENT_CONTROLLER 10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define SNDRV_SEQ_EVENT_PGMCHANGE 11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define SNDRV_SEQ_EVENT_CHANPRESS 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define SNDRV_SEQ_EVENT_PITCHBEND 13 /**< from -8192 to 8191 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define SNDRV_SEQ_EVENT_CONTROL14 14 /**< 14 bit controller value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define SNDRV_SEQ_EVENT_NONREGPARAM 15 /**< 14 bit NRPN address + 14 bit unsigned value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define SNDRV_SEQ_EVENT_REGPARAM 16 /**< 14 bit RPN address + 14 bit unsigned value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) /** synchronisation messages
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) * event data type = #snd_seq_ev_ctrl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define SNDRV_SEQ_EVENT_SONGPOS 20 /* Song Position Pointer with LSB and MSB values */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define SNDRV_SEQ_EVENT_SONGSEL 21 /* Song Select with song ID number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define SNDRV_SEQ_EVENT_QFRAME 22 /* midi time code quarter frame */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #define SNDRV_SEQ_EVENT_TIMESIGN 23 /* SMF Time Signature event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #define SNDRV_SEQ_EVENT_KEYSIGN 24 /* SMF Key Signature event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) /** timer messages
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) * event data type = snd_seq_ev_queue_control
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #define SNDRV_SEQ_EVENT_START 30 /* midi Real Time Start message */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) #define SNDRV_SEQ_EVENT_CONTINUE 31 /* midi Real Time Continue message */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #define SNDRV_SEQ_EVENT_STOP 32 /* midi Real Time Stop message */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define SNDRV_SEQ_EVENT_SETPOS_TICK 33 /* set tick queue position */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) #define SNDRV_SEQ_EVENT_SETPOS_TIME 34 /* set realtime queue position */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) #define SNDRV_SEQ_EVENT_TEMPO 35 /* (SMF) Tempo event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define SNDRV_SEQ_EVENT_CLOCK 36 /* midi Real Time Clock message */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define SNDRV_SEQ_EVENT_TICK 37 /* midi Real Time Tick message */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define SNDRV_SEQ_EVENT_QUEUE_SKEW 38 /* skew queue tempo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) /** others
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) * event data type = none
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #define SNDRV_SEQ_EVENT_TUNE_REQUEST 40 /* tune request */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #define SNDRV_SEQ_EVENT_RESET 41 /* reset to power-on state */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) #define SNDRV_SEQ_EVENT_SENSING 42 /* "active sensing" event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) /** echo back, kernel private messages
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) * event data type = any type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #define SNDRV_SEQ_EVENT_ECHO 50 /* echo event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) #define SNDRV_SEQ_EVENT_OSS 51 /* OSS raw event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) /** system status messages (broadcast for subscribers)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) * event data type = snd_seq_addr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #define SNDRV_SEQ_EVENT_CLIENT_START 60 /* new client has connected */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) #define SNDRV_SEQ_EVENT_CLIENT_EXIT 61 /* client has left the system */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define SNDRV_SEQ_EVENT_CLIENT_CHANGE 62 /* client status/info has changed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define SNDRV_SEQ_EVENT_PORT_START 63 /* new port was created */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define SNDRV_SEQ_EVENT_PORT_EXIT 64 /* port was deleted from system */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define SNDRV_SEQ_EVENT_PORT_CHANGE 65 /* port status/info has changed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) /** port connection changes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) * event data type = snd_seq_connect
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define SNDRV_SEQ_EVENT_PORT_SUBSCRIBED 66 /* ports connected */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define SNDRV_SEQ_EVENT_PORT_UNSUBSCRIBED 67 /* ports disconnected */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) /* 70-89: synthesizer events - obsoleted */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) /** user-defined events with fixed length
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) * event data type = any
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #define SNDRV_SEQ_EVENT_USR0 90
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define SNDRV_SEQ_EVENT_USR1 91
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define SNDRV_SEQ_EVENT_USR2 92
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define SNDRV_SEQ_EVENT_USR3 93
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define SNDRV_SEQ_EVENT_USR4 94
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define SNDRV_SEQ_EVENT_USR5 95
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define SNDRV_SEQ_EVENT_USR6 96
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define SNDRV_SEQ_EVENT_USR7 97
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define SNDRV_SEQ_EVENT_USR8 98
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) #define SNDRV_SEQ_EVENT_USR9 99
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) /* 100-118: instrument layer - obsoleted */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) /* 119-129: reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) /* 130-139: variable length events
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) * event data type = snd_seq_ev_ext
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) * (SNDRV_SEQ_EVENT_LENGTH_VARIABLE must be set)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define SNDRV_SEQ_EVENT_SYSEX 130 /* system exclusive data (variable length) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define SNDRV_SEQ_EVENT_BOUNCE 131 /* error event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) /* 132-134: reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define SNDRV_SEQ_EVENT_USR_VAR0 135
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define SNDRV_SEQ_EVENT_USR_VAR1 136
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #define SNDRV_SEQ_EVENT_USR_VAR2 137
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #define SNDRV_SEQ_EVENT_USR_VAR3 138
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #define SNDRV_SEQ_EVENT_USR_VAR4 139
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) /* 150-151: kernel events with quote - DO NOT use in user clients */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define SNDRV_SEQ_EVENT_KERNEL_ERROR 150
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #define SNDRV_SEQ_EVENT_KERNEL_QUOTE 151 /* obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) /* 152-191: reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) /* 192-254: hardware specific events */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) /* 255: special event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) #define SNDRV_SEQ_EVENT_NONE 255
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) typedef unsigned char snd_seq_event_type_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) /** event address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) struct snd_seq_addr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) unsigned char client; /**< Client number: 0..255, 255 = broadcast to all clients */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) unsigned char port; /**< Port within client: 0..255, 255 = broadcast to all ports */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) /** port connection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) struct snd_seq_connect {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) struct snd_seq_addr sender;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) struct snd_seq_addr dest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) #define SNDRV_SEQ_ADDRESS_UNKNOWN 253 /* unknown source */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) #define SNDRV_SEQ_ADDRESS_SUBSCRIBERS 254 /* send event to all subscribed ports */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) #define SNDRV_SEQ_ADDRESS_BROADCAST 255 /* send event to all queues/clients/ports/channels */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) #define SNDRV_SEQ_QUEUE_DIRECT 253 /* direct dispatch */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) /* event mode flag - NOTE: only 8 bits available! */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) #define SNDRV_SEQ_TIME_STAMP_TICK (0<<0) /* timestamp in clock ticks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) #define SNDRV_SEQ_TIME_STAMP_REAL (1<<0) /* timestamp in real time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) #define SNDRV_SEQ_TIME_STAMP_MASK (1<<0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) #define SNDRV_SEQ_TIME_MODE_ABS (0<<1) /* absolute timestamp */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) #define SNDRV_SEQ_TIME_MODE_REL (1<<1) /* relative to current time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) #define SNDRV_SEQ_TIME_MODE_MASK (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) #define SNDRV_SEQ_EVENT_LENGTH_FIXED (0<<2) /* fixed event size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) #define SNDRV_SEQ_EVENT_LENGTH_VARIABLE (1<<2) /* variable event size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) #define SNDRV_SEQ_EVENT_LENGTH_VARUSR (2<<2) /* variable event size - user memory space */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) #define SNDRV_SEQ_EVENT_LENGTH_MASK (3<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) #define SNDRV_SEQ_PRIORITY_NORMAL (0<<4) /* normal priority */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) #define SNDRV_SEQ_PRIORITY_HIGH (1<<4) /* event should be processed before others */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) #define SNDRV_SEQ_PRIORITY_MASK (1<<4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) /* note event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) struct snd_seq_ev_note {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) unsigned char channel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) unsigned char note;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) unsigned char velocity;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) unsigned char off_velocity; /* only for SNDRV_SEQ_EVENT_NOTE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) unsigned int duration; /* only for SNDRV_SEQ_EVENT_NOTE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) /* controller event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) struct snd_seq_ev_ctrl {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) unsigned char channel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) unsigned char unused1, unused2, unused3; /* pad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) unsigned int param;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) signed int value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) /* generic set of bytes (12x8 bit) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) struct snd_seq_ev_raw8 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) unsigned char d[12]; /* 8 bit value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) /* generic set of integers (3x32 bit) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) struct snd_seq_ev_raw32 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) unsigned int d[3]; /* 32 bit value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) /* external stored data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) struct snd_seq_ev_ext {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) unsigned int len; /* length of data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) void *ptr; /* pointer to data (note: maybe 64-bit) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) struct snd_seq_result {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) int event; /* processed event type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) int result;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) struct snd_seq_real_time {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) unsigned int tv_sec; /* seconds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) unsigned int tv_nsec; /* nanoseconds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) typedef unsigned int snd_seq_tick_time_t; /* midi ticks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) union snd_seq_timestamp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) snd_seq_tick_time_t tick;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) struct snd_seq_real_time time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) struct snd_seq_queue_skew {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) unsigned int value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) unsigned int base;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) /* queue timer control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) struct snd_seq_ev_queue_control {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) unsigned char queue; /* affected queue */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) unsigned char pad[3]; /* reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) signed int value; /* affected value (e.g. tempo) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) union snd_seq_timestamp time; /* time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) unsigned int position; /* sync position */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) struct snd_seq_queue_skew skew;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) unsigned int d32[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) unsigned char d8[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) } param;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) /* quoted event - inside the kernel only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) struct snd_seq_ev_quote {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) struct snd_seq_addr origin; /* original sender */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) unsigned short value; /* optional data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) struct snd_seq_event *event; /* quoted event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) /* sequencer event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) struct snd_seq_event {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) snd_seq_event_type_t type; /* event type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) unsigned char flags; /* event flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) char tag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) unsigned char queue; /* schedule queue */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) union snd_seq_timestamp time; /* schedule time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) struct snd_seq_addr source; /* source address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) struct snd_seq_addr dest; /* destination address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) union { /* event data... */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) struct snd_seq_ev_note note;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) struct snd_seq_ev_ctrl control;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) struct snd_seq_ev_raw8 raw8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) struct snd_seq_ev_raw32 raw32;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) struct snd_seq_ev_ext ext;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) struct snd_seq_ev_queue_control queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) union snd_seq_timestamp time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) struct snd_seq_addr addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) struct snd_seq_connect connect;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) struct snd_seq_result result;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) struct snd_seq_ev_quote quote;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) } data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) * bounce event - stored as variable size data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) struct snd_seq_event_bounce {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) struct snd_seq_event event;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) /* external data follows here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) /* system information */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) struct snd_seq_system_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) int queues; /* maximum queues count */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) int clients; /* maximum clients count */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) int ports; /* maximum ports per client */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) int channels; /* maximum channels per port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) int cur_clients; /* current clients */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) int cur_queues; /* current queues */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) char reserved[24];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) /* system running information */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) struct snd_seq_running_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) unsigned char client; /* client id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) unsigned char big_endian; /* 1 = big-endian */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) unsigned char cpu_mode; /* 4 = 32bit, 8 = 64bit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) unsigned char pad; /* reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) unsigned char reserved[12];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) /* known client numbers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) #define SNDRV_SEQ_CLIENT_SYSTEM 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) /* internal client numbers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) #define SNDRV_SEQ_CLIENT_DUMMY 14 /* midi through */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) #define SNDRV_SEQ_CLIENT_OSS 15 /* oss sequencer emulator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) /* client types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) typedef int __bitwise snd_seq_client_type_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) #define NO_CLIENT ((__force snd_seq_client_type_t) 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) #define USER_CLIENT ((__force snd_seq_client_type_t) 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) #define KERNEL_CLIENT ((__force snd_seq_client_type_t) 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) /* event filter flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) #define SNDRV_SEQ_FILTER_BROADCAST (1<<0) /* accept broadcast messages */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) #define SNDRV_SEQ_FILTER_MULTICAST (1<<1) /* accept multicast messages */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) #define SNDRV_SEQ_FILTER_BOUNCE (1<<2) /* accept bounce event in error */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) #define SNDRV_SEQ_FILTER_USE_EVENT (1<<31) /* use event filter */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) struct snd_seq_client_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) int client; /* client number to inquire */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) snd_seq_client_type_t type; /* client type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) char name[64]; /* client name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) unsigned int filter; /* filter flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) unsigned char multicast_filter[8]; /* multicast filter bitmap */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) unsigned char event_filter[32]; /* event filter bitmap */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) int num_ports; /* RO: number of ports */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) int event_lost; /* number of lost events */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) int card; /* RO: card number[kernel] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) int pid; /* RO: pid[user] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) char reserved[56]; /* for future use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) /* client pool size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) struct snd_seq_client_pool {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) int client; /* client number to inquire */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) int output_pool; /* outgoing (write) pool size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) int input_pool; /* incoming (read) pool size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) int output_room; /* minimum free pool size for select/blocking mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) int output_free; /* unused size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) int input_free; /* unused size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) char reserved[64];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) /* Remove events by specified criteria */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) #define SNDRV_SEQ_REMOVE_INPUT (1<<0) /* Flush input queues */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) #define SNDRV_SEQ_REMOVE_OUTPUT (1<<1) /* Flush output queues */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) #define SNDRV_SEQ_REMOVE_DEST (1<<2) /* Restrict by destination q:client:port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) #define SNDRV_SEQ_REMOVE_DEST_CHANNEL (1<<3) /* Restrict by channel */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) #define SNDRV_SEQ_REMOVE_TIME_BEFORE (1<<4) /* Restrict to before time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) #define SNDRV_SEQ_REMOVE_TIME_AFTER (1<<5) /* Restrict to time or after */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) #define SNDRV_SEQ_REMOVE_TIME_TICK (1<<6) /* Time is in ticks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) #define SNDRV_SEQ_REMOVE_EVENT_TYPE (1<<7) /* Restrict to event type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) #define SNDRV_SEQ_REMOVE_IGNORE_OFF (1<<8) /* Do not flush off events */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) #define SNDRV_SEQ_REMOVE_TAG_MATCH (1<<9) /* Restrict to events with given tag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) struct snd_seq_remove_events {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) unsigned int remove_mode; /* Flags that determine what gets removed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) union snd_seq_timestamp time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) unsigned char queue; /* Queue for REMOVE_DEST */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) struct snd_seq_addr dest; /* Address for REMOVE_DEST */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) unsigned char channel; /* Channel for REMOVE_DEST */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) int type; /* For REMOVE_EVENT_TYPE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) char tag; /* Tag for REMOVE_TAG */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) int reserved[10]; /* To allow for future binary compatibility */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) /* known port numbers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) #define SNDRV_SEQ_PORT_SYSTEM_TIMER 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) #define SNDRV_SEQ_PORT_SYSTEM_ANNOUNCE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) /* port capabilities (32 bits) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) #define SNDRV_SEQ_PORT_CAP_READ (1<<0) /* readable from this port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) #define SNDRV_SEQ_PORT_CAP_WRITE (1<<1) /* writable to this port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) #define SNDRV_SEQ_PORT_CAP_SYNC_READ (1<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) #define SNDRV_SEQ_PORT_CAP_SYNC_WRITE (1<<3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) #define SNDRV_SEQ_PORT_CAP_DUPLEX (1<<4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) #define SNDRV_SEQ_PORT_CAP_SUBS_READ (1<<5) /* allow read subscription */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) #define SNDRV_SEQ_PORT_CAP_SUBS_WRITE (1<<6) /* allow write subscription */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) #define SNDRV_SEQ_PORT_CAP_NO_EXPORT (1<<7) /* routing not allowed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) /* port type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) #define SNDRV_SEQ_PORT_TYPE_SPECIFIC (1<<0) /* hardware specific */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) #define SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC (1<<1) /* generic MIDI device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) #define SNDRV_SEQ_PORT_TYPE_MIDI_GM (1<<2) /* General MIDI compatible device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) #define SNDRV_SEQ_PORT_TYPE_MIDI_GS (1<<3) /* GS compatible device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) #define SNDRV_SEQ_PORT_TYPE_MIDI_XG (1<<4) /* XG compatible device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) #define SNDRV_SEQ_PORT_TYPE_MIDI_MT32 (1<<5) /* MT-32 compatible device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) #define SNDRV_SEQ_PORT_TYPE_MIDI_GM2 (1<<6) /* General MIDI 2 compatible device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) /* other standards...*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) #define SNDRV_SEQ_PORT_TYPE_SYNTH (1<<10) /* Synth device (no MIDI compatible - direct wavetable) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) #define SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE (1<<11) /* Sampling device (support sample download) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) #define SNDRV_SEQ_PORT_TYPE_SAMPLE (1<<12) /* Sampling device (sample can be downloaded at any time) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) /*...*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) #define SNDRV_SEQ_PORT_TYPE_HARDWARE (1<<16) /* driver for a hardware device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) #define SNDRV_SEQ_PORT_TYPE_SOFTWARE (1<<17) /* implemented in software */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) #define SNDRV_SEQ_PORT_TYPE_SYNTHESIZER (1<<18) /* generates sound */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) #define SNDRV_SEQ_PORT_TYPE_PORT (1<<19) /* connects to other device(s) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) #define SNDRV_SEQ_PORT_TYPE_APPLICATION (1<<20) /* application (sequencer/editor) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) /* misc. conditioning flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) #define SNDRV_SEQ_PORT_FLG_GIVEN_PORT (1<<0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) #define SNDRV_SEQ_PORT_FLG_TIMESTAMP (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) #define SNDRV_SEQ_PORT_FLG_TIME_REAL (1<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) struct snd_seq_port_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) struct snd_seq_addr addr; /* client/port numbers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) char name[64]; /* port name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) unsigned int capability; /* port capability bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) unsigned int type; /* port type bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) int midi_channels; /* channels per MIDI port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) int midi_voices; /* voices per MIDI port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) int synth_voices; /* voices per SYNTH port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) int read_use; /* R/O: subscribers for output (from this port) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) int write_use; /* R/O: subscribers for input (to this port) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) void *kernel; /* reserved for kernel use (must be NULL) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) unsigned int flags; /* misc. conditioning */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) unsigned char time_queue; /* queue # for timestamping */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) char reserved[59]; /* for future use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) /* queue flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) #define SNDRV_SEQ_QUEUE_FLG_SYNC (1<<0) /* sync enabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) /* queue information */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) struct snd_seq_queue_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) int queue; /* queue id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) * security settings, only owner of this queue can start/stop timer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) * etc. if the queue is locked for other clients
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) int owner; /* client id for owner of the queue */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) unsigned locked:1; /* timing queue locked for other queues */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) char name[64]; /* name of this queue */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) unsigned int flags; /* flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) char reserved[60]; /* for future use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) /* queue info/status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) struct snd_seq_queue_status {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) int queue; /* queue id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) int events; /* read-only - queue size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) snd_seq_tick_time_t tick; /* current tick */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) struct snd_seq_real_time time; /* current time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) int running; /* running state of queue */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) int flags; /* various flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) char reserved[64]; /* for the future */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) /* queue tempo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) struct snd_seq_queue_tempo {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) int queue; /* sequencer queue */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) unsigned int tempo; /* current tempo, us/tick */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) int ppq; /* time resolution, ticks/quarter */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) unsigned int skew_value; /* queue skew */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) unsigned int skew_base; /* queue skew base */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) char reserved[24]; /* for the future */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) /* sequencer timer sources */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) #define SNDRV_SEQ_TIMER_ALSA 0 /* ALSA timer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) #define SNDRV_SEQ_TIMER_MIDI_CLOCK 1 /* Midi Clock (CLOCK event) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) #define SNDRV_SEQ_TIMER_MIDI_TICK 2 /* Midi Timer Tick (TICK event) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) /* queue timer info */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) struct snd_seq_queue_timer {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) int queue; /* sequencer queue */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) int type; /* source timer type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) struct snd_timer_id id; /* ALSA's timer ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) unsigned int resolution; /* resolution in Hz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) } alsa;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) } u;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) char reserved[64]; /* for the future use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) struct snd_seq_queue_client {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) int queue; /* sequencer queue */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) int client; /* sequencer client */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) int used; /* queue is used with this client
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) (must be set for accepting events) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) /* per client watermarks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) char reserved[64]; /* for future use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) #define SNDRV_SEQ_PORT_SUBS_EXCLUSIVE (1<<0) /* exclusive connection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) #define SNDRV_SEQ_PORT_SUBS_TIMESTAMP (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) #define SNDRV_SEQ_PORT_SUBS_TIME_REAL (1<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) struct snd_seq_port_subscribe {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) struct snd_seq_addr sender; /* sender address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) struct snd_seq_addr dest; /* destination address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) unsigned int voices; /* number of voices to be allocated (0 = don't care) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) unsigned int flags; /* modes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) unsigned char queue; /* input time-stamp queue (optional) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) unsigned char pad[3]; /* reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) char reserved[64];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) /* type of query subscription */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) #define SNDRV_SEQ_QUERY_SUBS_READ 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) #define SNDRV_SEQ_QUERY_SUBS_WRITE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) struct snd_seq_query_subs {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) struct snd_seq_addr root; /* client/port id to be searched */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) int type; /* READ or WRITE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) int index; /* 0..N-1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) int num_subs; /* R/O: number of subscriptions on this port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) struct snd_seq_addr addr; /* R/O: result */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) unsigned char queue; /* R/O: result */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) unsigned int flags; /* R/O: result */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) char reserved[64]; /* for future use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) * IOCTL commands
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) #define SNDRV_SEQ_IOCTL_PVERSION _IOR ('S', 0x00, int)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) #define SNDRV_SEQ_IOCTL_CLIENT_ID _IOR ('S', 0x01, int)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) #define SNDRV_SEQ_IOCTL_SYSTEM_INFO _IOWR('S', 0x02, struct snd_seq_system_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) #define SNDRV_SEQ_IOCTL_RUNNING_MODE _IOWR('S', 0x03, struct snd_seq_running_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) #define SNDRV_SEQ_IOCTL_GET_CLIENT_INFO _IOWR('S', 0x10, struct snd_seq_client_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) #define SNDRV_SEQ_IOCTL_SET_CLIENT_INFO _IOW ('S', 0x11, struct snd_seq_client_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) #define SNDRV_SEQ_IOCTL_CREATE_PORT _IOWR('S', 0x20, struct snd_seq_port_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) #define SNDRV_SEQ_IOCTL_DELETE_PORT _IOW ('S', 0x21, struct snd_seq_port_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) #define SNDRV_SEQ_IOCTL_GET_PORT_INFO _IOWR('S', 0x22, struct snd_seq_port_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) #define SNDRV_SEQ_IOCTL_SET_PORT_INFO _IOW ('S', 0x23, struct snd_seq_port_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) #define SNDRV_SEQ_IOCTL_SUBSCRIBE_PORT _IOW ('S', 0x30, struct snd_seq_port_subscribe)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) #define SNDRV_SEQ_IOCTL_UNSUBSCRIBE_PORT _IOW ('S', 0x31, struct snd_seq_port_subscribe)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) #define SNDRV_SEQ_IOCTL_CREATE_QUEUE _IOWR('S', 0x32, struct snd_seq_queue_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) #define SNDRV_SEQ_IOCTL_DELETE_QUEUE _IOW ('S', 0x33, struct snd_seq_queue_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) #define SNDRV_SEQ_IOCTL_GET_QUEUE_INFO _IOWR('S', 0x34, struct snd_seq_queue_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) #define SNDRV_SEQ_IOCTL_SET_QUEUE_INFO _IOWR('S', 0x35, struct snd_seq_queue_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) #define SNDRV_SEQ_IOCTL_GET_NAMED_QUEUE _IOWR('S', 0x36, struct snd_seq_queue_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) #define SNDRV_SEQ_IOCTL_GET_QUEUE_STATUS _IOWR('S', 0x40, struct snd_seq_queue_status)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) #define SNDRV_SEQ_IOCTL_GET_QUEUE_TEMPO _IOWR('S', 0x41, struct snd_seq_queue_tempo)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) #define SNDRV_SEQ_IOCTL_SET_QUEUE_TEMPO _IOW ('S', 0x42, struct snd_seq_queue_tempo)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) #define SNDRV_SEQ_IOCTL_GET_QUEUE_TIMER _IOWR('S', 0x45, struct snd_seq_queue_timer)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) #define SNDRV_SEQ_IOCTL_SET_QUEUE_TIMER _IOW ('S', 0x46, struct snd_seq_queue_timer)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) #define SNDRV_SEQ_IOCTL_GET_QUEUE_CLIENT _IOWR('S', 0x49, struct snd_seq_queue_client)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) #define SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT _IOW ('S', 0x4a, struct snd_seq_queue_client)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) #define SNDRV_SEQ_IOCTL_GET_CLIENT_POOL _IOWR('S', 0x4b, struct snd_seq_client_pool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) #define SNDRV_SEQ_IOCTL_SET_CLIENT_POOL _IOW ('S', 0x4c, struct snd_seq_client_pool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) #define SNDRV_SEQ_IOCTL_REMOVE_EVENTS _IOW ('S', 0x4e, struct snd_seq_remove_events)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) #define SNDRV_SEQ_IOCTL_QUERY_SUBS _IOWR('S', 0x4f, struct snd_seq_query_subs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) #define SNDRV_SEQ_IOCTL_GET_SUBSCRIPTION _IOWR('S', 0x50, struct snd_seq_port_subscribe)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) #define SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT _IOWR('S', 0x51, struct snd_seq_client_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) #define SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT _IOWR('S', 0x52, struct snd_seq_port_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) #endif /* _UAPI__SOUND_ASEQUENCER_H */