130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *  Main header file for the ALSA sequencer
330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *  Copyright (c) 1998-1999 by Frank van de Pol <fvdpol@coil.demon.nl>
430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *            (c) 1998-1999 by Jaroslav Kysela <perex@perex.cz>
530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *   This program is free software; you can redistribute it and/or modify
830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *   it under the terms of the GNU General Public License as published by
930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *   the Free Software Foundation; either version 2 of the License, or
1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *   (at your option) any later version.
1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *   This program is distributed in the hope that it will be useful,
1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *   but WITHOUT ANY WARRANTY; without even the implied warranty of
1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *   GNU General Public License for more details.
1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *   You should have received a copy of the GNU General Public License
1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *   along with this program; if not, write to the Free Software
1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _UAPI__SOUND_ASEQUENCER_H
2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _UAPI__SOUND_ASEQUENCER_H
2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** version of the sequencer */
2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION (1, 0, 1)
2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/**
3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * definition of sequencer event types
3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** system messages
3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * event data type = #snd_seq_result
3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_SYSTEM		0
3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_RESULT		1
3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** note messages (channel specific)
4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * event data type = #snd_seq_ev_note
4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_NOTE		5
4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_NOTEON		6
4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_NOTEOFF		7
4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_KEYPRESS	8
4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** control messages (channel specific)
4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * event data type = #snd_seq_ev_ctrl
4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_CONTROLLER	10
5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_PGMCHANGE	11
5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_CHANPRESS	12
5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_PITCHBEND	13	/**< from -8192 to 8191 */
5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_CONTROL14	14	/**< 14 bit controller value */
5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_NONREGPARAM	15	/**< 14 bit NRPN address + 14 bit unsigned value */
5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_REGPARAM	16	/**< 14 bit RPN address + 14 bit unsigned value */
5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** synchronisation messages
5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * event data type = #snd_seq_ev_ctrl
6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_SONGPOS		20	/* Song Position Pointer with LSB and MSB values */
6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_SONGSEL		21	/* Song Select with song ID number */
6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_QFRAME		22	/* midi time code quarter frame */
6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_TIMESIGN	23	/* SMF Time Signature event */
6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_KEYSIGN		24	/* SMF Key Signature event */
6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** timer messages
6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * event data type = snd_seq_ev_queue_control
6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_START		30	/* midi Real Time Start message */
7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_CONTINUE	31	/* midi Real Time Continue message */
7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_STOP		32	/* midi Real Time Stop message */
7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define	SNDRV_SEQ_EVENT_SETPOS_TICK	33	/* set tick queue position */
7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_SETPOS_TIME	34	/* set realtime queue position */
7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_TEMPO		35	/* (SMF) Tempo event */
7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_CLOCK		36	/* midi Real Time Clock message */
7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_TICK		37	/* midi Real Time Tick message */
7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_QUEUE_SKEW	38	/* skew queue tempo */
7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** others
8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * event data type = none
8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_TUNE_REQUEST	40	/* tune request */
8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_RESET		41	/* reset to power-on state */
8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_SENSING		42	/* "active sensing" event */
8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** echo back, kernel private messages
8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * event data type = any type
8930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
9030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_ECHO		50	/* echo event */
9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_OSS		51	/* OSS raw event */
9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** system status messages (broadcast for subscribers)
9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * event data type = snd_seq_addr
9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_CLIENT_START	60	/* new client has connected */
9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_CLIENT_EXIT	61	/* client has left the system */
9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_CLIENT_CHANGE	62	/* client status/info has changed */
9930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_PORT_START	63	/* new port was created */
10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_PORT_EXIT	64	/* port was deleted from system */
10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_PORT_CHANGE	65	/* port status/info has changed */
10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** port connection changes
10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * event data type = snd_seq_connect
10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_PORT_SUBSCRIBED	66	/* ports connected */
10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_PORT_UNSUBSCRIBED 67	/* ports disconnected */
10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 70-89:  synthesizer events - obsoleted */
11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** user-defined events with fixed length
11230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * event data type = any
11330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
11430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_USR0		90
11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_USR1		91
11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_USR2		92
11730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_USR3		93
11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_USR4		94
11930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_USR5		95
12030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_USR6		96
12130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_USR7		97
12230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_USR8		98
12330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_USR9		99
12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
12530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 100-118: instrument layer - obsoleted */
12630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 119-129: reserved */
12730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
12830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 130-139: variable length events
12930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * event data type = snd_seq_ev_ext
13030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * (SNDRV_SEQ_EVENT_LENGTH_VARIABLE must be set)
13130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
13230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_SYSEX		130	/* system exclusive data (variable length) */
13330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_BOUNCE		131	/* error event */
13430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 132-134: reserved */
13530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_USR_VAR0	135
13630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_USR_VAR1	136
13730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_USR_VAR2	137
13830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_USR_VAR3	138
13930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_USR_VAR4	139
14030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
14130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 150-151: kernel events with quote - DO NOT use in user clients */
14230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_KERNEL_ERROR	150
14330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_KERNEL_QUOTE	151	/* obsolete */
14430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
14530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 152-191: reserved */
14630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
14730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 192-254: hardware specific events */
14830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
14930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 255: special event */
15030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_NONE		255
15130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
15230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
15330692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef unsigned char snd_seq_event_type_t;
15430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
15530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** event address */
15630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_addr {
15730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char client;	/**< Client number:         0..255, 255 = broadcast to all clients */
15830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char port;	/**< Port within client:    0..255, 255 = broadcast to all ports */
15930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
16030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
16130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** port connection */
16230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_connect {
16330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct snd_seq_addr sender;
16430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct snd_seq_addr dest;
16530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
16630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
16730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
16830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_ADDRESS_UNKNOWN	253	/* unknown source */
16930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_ADDRESS_SUBSCRIBERS	254	/* send event to all subscribed ports */
17030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_ADDRESS_BROADCAST	255	/* send event to all queues/clients/ports/channels */
17130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_QUEUE_DIRECT		253	/* direct dispatch */
17230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
17330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* event mode flag - NOTE: only 8 bits available! */
17430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_TIME_STAMP_TICK	(0<<0) /* timestamp in clock ticks */
17530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_TIME_STAMP_REAL	(1<<0) /* timestamp in real time */
17630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_TIME_STAMP_MASK	(1<<0)
17730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
17830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_TIME_MODE_ABS		(0<<1)	/* absolute timestamp */
17930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_TIME_MODE_REL		(1<<1)	/* relative to current time */
18030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_TIME_MODE_MASK	(1<<1)
18130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
18230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_LENGTH_FIXED	(0<<2)	/* fixed event size */
18330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_LENGTH_VARIABLE	(1<<2)	/* variable event size */
18430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_LENGTH_VARUSR	(2<<2)	/* variable event size - user memory space */
18530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_EVENT_LENGTH_MASK	(3<<2)
18630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
18730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PRIORITY_NORMAL	(0<<4)	/* normal priority */
18830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PRIORITY_HIGH		(1<<4)	/* event should be processed before others */
18930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PRIORITY_MASK		(1<<4)
19030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
19130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
19230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* note event */
19330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_ev_note {
19430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char channel;
19530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char note;
19630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char velocity;
19730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char off_velocity;	/* only for SNDRV_SEQ_EVENT_NOTE */
19830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int duration;		/* only for SNDRV_SEQ_EVENT_NOTE */
19930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
20030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
20130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* controller event */
20230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_ev_ctrl {
20330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char channel;
20430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char unused1, unused2, unused3;	/* pad */
20530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int param;
20630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	signed int value;
20730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
20830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
20930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* generic set of bytes (12x8 bit) */
21030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_ev_raw8 {
21130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char d[12];	/* 8 bit value */
21230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
21330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
21430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* generic set of integers (3x32 bit) */
21530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_ev_raw32 {
21630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int d[3];	/* 32 bit value */
21730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
21830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
21930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* external stored data */
22030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_ev_ext {
22130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int len;	/* length of data */
22230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	void *ptr;		/* pointer to data (note: maybe 64-bit) */
22330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
22430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
22530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_result {
22630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int event;		/* processed event type */
22730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int result;
22830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
22930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
23030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
23130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_real_time {
23230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int tv_sec;	/* seconds */
23330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int tv_nsec;	/* nanoseconds */
23430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
23530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
23630692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef unsigned int snd_seq_tick_time_t;	/* midi ticks */
23730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
23830692c65c4174412c90e79489e98ab85c1a7412fBen Chengunion snd_seq_timestamp {
23930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	snd_seq_tick_time_t tick;
24030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct snd_seq_real_time time;
24130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
24230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
24330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_queue_skew {
24430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int value;
24530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int base;
24630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
24730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
24830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* queue timer control */
24930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_ev_queue_control {
25030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char queue;			/* affected queue */
25130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char pad[3];			/* reserved */
25230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	union {
25330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		signed int value;		/* affected value (e.g. tempo) */
25430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		union snd_seq_timestamp time;	/* time */
25530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		unsigned int position;		/* sync position */
25630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct snd_seq_queue_skew skew;
25730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		unsigned int d32[2];
25830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		unsigned char d8[8];
25930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	} param;
26030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
26130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
26230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* quoted event - inside the kernel only */
26330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_ev_quote {
26430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct snd_seq_addr origin;		/* original sender */
26530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned short value;		/* optional data */
26630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct snd_seq_event *event;		/* quoted event */
26730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
26830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
26930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
27030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* sequencer event */
27130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_event {
27230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	snd_seq_event_type_t type;	/* event type */
27330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char flags;		/* event flags */
27430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char tag;
27530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
27630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char queue;		/* schedule queue */
27730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	union snd_seq_timestamp time;	/* schedule time */
27830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
27930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
28030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct snd_seq_addr source;	/* source address */
28130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct snd_seq_addr dest;	/* destination address */
28230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
28330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	union {				/* event data... */
28430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct snd_seq_ev_note note;
28530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct snd_seq_ev_ctrl control;
28630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct snd_seq_ev_raw8 raw8;
28730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct snd_seq_ev_raw32 raw32;
28830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct snd_seq_ev_ext ext;
28930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct snd_seq_ev_queue_control queue;
29030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		union snd_seq_timestamp time;
29130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct snd_seq_addr addr;
29230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct snd_seq_connect connect;
29330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct snd_seq_result result;
29430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct snd_seq_ev_quote quote;
29530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	} data;
29630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
29730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
29830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
29930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
30030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * bounce event - stored as variable size data
30130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
30230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_event_bounce {
30330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int err;
30430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct snd_seq_event event;
30530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* external data follows here. */
30630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
30730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
30830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
30930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* system information */
31030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_system_info {
31130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int queues;			/* maximum queues count */
31230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int clients;			/* maximum clients count */
31330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int ports;			/* maximum ports per client */
31430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int channels;			/* maximum channels per port */
31530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int cur_clients;		/* current clients */
31630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int cur_queues;			/* current queues */
31730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char reserved[24];
31830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
31930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
32030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
32130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* system running information */
32230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_running_info {
32330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char client;		/* client id */
32430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char big_endian;	/* 1 = big-endian */
32530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char cpu_mode;		/* 4 = 32bit, 8 = 64bit */
32630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char pad;		/* reserved */
32730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char reserved[12];
32830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
32930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
33030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
33130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* known client numbers */
33230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_CLIENT_SYSTEM		0
33330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* internal client numbers */
33430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_CLIENT_DUMMY		14	/* midi through */
33530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_CLIENT_OSS		15	/* oss sequencer emulator */
33630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
33730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
33830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* client types */
33930692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef int __bitwise snd_seq_client_type_t;
34030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define	NO_CLIENT	((__force snd_seq_client_type_t) 0)
34130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define	USER_CLIENT	((__force snd_seq_client_type_t) 1)
34230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define	KERNEL_CLIENT	((__force snd_seq_client_type_t) 2)
34330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
34430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* event filter flags */
34530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_FILTER_BROADCAST	(1<<0)	/* accept broadcast messages */
34630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_FILTER_MULTICAST	(1<<1)	/* accept multicast messages */
34730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_FILTER_BOUNCE		(1<<2)	/* accept bounce event in error */
34830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_FILTER_USE_EVENT	(1<<31)	/* use event filter */
34930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
35030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_client_info {
35130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int client;			/* client number to inquire */
35230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	snd_seq_client_type_t type;	/* client type */
35330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char name[64];			/* client name */
35430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int filter;		/* filter flags */
35530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char multicast_filter[8]; /* multicast filter bitmap */
35630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char event_filter[32];	/* event filter bitmap */
35730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int num_ports;			/* RO: number of ports */
35830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int event_lost;			/* number of lost events */
35930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char reserved[64];		/* for future use */
36030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
36130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
36230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
36330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* client pool size */
36430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_client_pool {
36530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int client;			/* client number to inquire */
36630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int output_pool;		/* outgoing (write) pool size */
36730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int input_pool;			/* incoming (read) pool size */
36830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int output_room;		/* minimum free pool size for select/blocking mode */
36930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int output_free;		/* unused size */
37030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int input_free;			/* unused size */
37130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char reserved[64];
37230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
37330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
37430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
37530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Remove events by specified criteria */
37630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
37730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_REMOVE_INPUT		(1<<0)	/* Flush input queues */
37830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_REMOVE_OUTPUT		(1<<1)	/* Flush output queues */
37930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_REMOVE_DEST		(1<<2)	/* Restrict by destination q:client:port */
38030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_REMOVE_DEST_CHANNEL	(1<<3)	/* Restrict by channel */
38130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_REMOVE_TIME_BEFORE	(1<<4)	/* Restrict to before time */
38230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_REMOVE_TIME_AFTER	(1<<5)	/* Restrict to time or after */
38330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_REMOVE_TIME_TICK	(1<<6)	/* Time is in ticks */
38430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_REMOVE_EVENT_TYPE	(1<<7)	/* Restrict to event type */
38530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_REMOVE_IGNORE_OFF 	(1<<8)	/* Do not flush off events */
38630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_REMOVE_TAG_MATCH 	(1<<9)	/* Restrict to events with given tag */
38730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
38830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_remove_events {
38930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int  remove_mode;	/* Flags that determine what gets removed */
39030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
39130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	union snd_seq_timestamp time;
39230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
39330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char queue;	/* Queue for REMOVE_DEST */
39430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct snd_seq_addr dest;	/* Address for REMOVE_DEST */
39530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char channel;	/* Channel for REMOVE_DEST */
39630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
39730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int  type;	/* For REMOVE_EVENT_TYPE */
39830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char  tag;	/* Tag for REMOVE_TAG */
39930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
40030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int  reserved[10];	/* To allow for future binary compatibility */
40130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
40230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
40330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
40430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
40530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* known port numbers */
40630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_SYSTEM_TIMER	0
40730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_SYSTEM_ANNOUNCE	1
40830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
40930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* port capabilities (32 bits) */
41030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_CAP_READ		(1<<0)	/* readable from this port */
41130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_CAP_WRITE	(1<<1)	/* writable to this port */
41230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
41330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_CAP_SYNC_READ	(1<<2)
41430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_CAP_SYNC_WRITE	(1<<3)
41530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
41630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_CAP_DUPLEX	(1<<4)
41730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
41830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_CAP_SUBS_READ	(1<<5)	/* allow read subscription */
41930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_CAP_SUBS_WRITE	(1<<6)	/* allow write subscription */
42030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_CAP_NO_EXPORT	(1<<7)	/* routing not allowed */
42130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
42230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* port type */
42330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_TYPE_SPECIFIC	(1<<0)	/* hardware specific */
42430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC (1<<1)	/* generic MIDI device */
42530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_TYPE_MIDI_GM	(1<<2)	/* General MIDI compatible device */
42630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_TYPE_MIDI_GS	(1<<3)	/* GS compatible device */
42730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_TYPE_MIDI_XG	(1<<4)	/* XG compatible device */
42830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_TYPE_MIDI_MT32	(1<<5)	/* MT-32 compatible device */
42930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_TYPE_MIDI_GM2	(1<<6)	/* General MIDI 2 compatible device */
43030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
43130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* other standards...*/
43230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_TYPE_SYNTH	(1<<10)	/* Synth device (no MIDI compatible - direct wavetable) */
43330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE (1<<11)	/* Sampling device (support sample download) */
43430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_TYPE_SAMPLE	(1<<12)	/* Sampling device (sample can be downloaded at any time) */
43530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*...*/
43630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_TYPE_HARDWARE	(1<<16)	/* driver for a hardware device */
43730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_TYPE_SOFTWARE	(1<<17)	/* implemented in software */
43830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_TYPE_SYNTHESIZER	(1<<18)	/* generates sound */
43930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_TYPE_PORT	(1<<19)	/* connects to other device(s) */
44030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_TYPE_APPLICATION	(1<<20)	/* application (sequencer/editor) */
44130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
44230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* misc. conditioning flags */
44330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_FLG_GIVEN_PORT	(1<<0)
44430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_FLG_TIMESTAMP	(1<<1)
44530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_FLG_TIME_REAL	(1<<2)
44630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
44730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_port_info {
44830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct snd_seq_addr addr;	/* client/port numbers */
44930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char name[64];			/* port name */
45030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
45130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int capability;	/* port capability bits */
45230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int type;		/* port type bits */
45330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int midi_channels;		/* channels per MIDI port */
45430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int midi_voices;		/* voices per MIDI port */
45530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int synth_voices;		/* voices per SYNTH port */
45630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
45730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int read_use;			/* R/O: subscribers for output (from this port) */
45830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int write_use;			/* R/O: subscribers for input (to this port) */
45930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
46030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	void *kernel;			/* reserved for kernel use (must be NULL) */
46130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int flags;		/* misc. conditioning */
46230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char time_queue;	/* queue # for timestamping */
46330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char reserved[59];		/* for future use */
46430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
46530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
46630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
46730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* queue flags */
46830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_QUEUE_FLG_SYNC	(1<<0)	/* sync enabled */
46930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
47030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* queue information */
47130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_queue_info {
47230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int queue;		/* queue id */
47330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
47430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/*
47530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	 *  security settings, only owner of this queue can start/stop timer
47630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	 *  etc. if the queue is locked for other clients
47730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	 */
47830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int owner;		/* client id for owner of the queue */
47930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned locked:1;	/* timing queue locked for other queues */
48030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char name[64];		/* name of this queue */
48130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int flags;	/* flags */
48230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char reserved[60];	/* for future use */
48330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
48430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
48530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
48630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* queue info/status */
48730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_queue_status {
48830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int queue;			/* queue id */
48930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int events;			/* read-only - queue size */
49030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	snd_seq_tick_time_t tick;	/* current tick */
49130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct snd_seq_real_time time;	/* current time */
49230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int running;			/* running state of queue */
49330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int flags;			/* various flags */
49430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char reserved[64];		/* for the future */
49530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
49630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
49730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
49830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* queue tempo */
49930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_queue_tempo {
50030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int queue;			/* sequencer queue */
50130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int tempo;		/* current tempo, us/tick */
50230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int ppq;			/* time resolution, ticks/quarter */
50330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int skew_value;	/* queue skew */
50430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int skew_base;		/* queue skew base */
50530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char reserved[24];		/* for the future */
50630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
50730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
50830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
50930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sequencer timer sources */
51030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_TIMER_ALSA		0	/* ALSA timer */
51130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_TIMER_MIDI_CLOCK	1	/* Midi Clock (CLOCK event) */
51230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_TIMER_MIDI_TICK	2	/* Midi Timer Tick (TICK event) */
51330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
51430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* queue timer info */
51530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_queue_timer {
51630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int queue;			/* sequencer queue */
51730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int type;			/* source timer type */
51830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	union {
51930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct {
52030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			struct snd_timer_id id;	/* ALSA's timer ID */
52130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			unsigned int resolution;	/* resolution in Hz */
52230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		} alsa;
52330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	} u;
52430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char reserved[64];		/* for the future use */
52530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
52630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
52730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
52830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_queue_client {
52930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int queue;		/* sequencer queue */
53030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int client;		/* sequencer client */
53130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int used;		/* queue is used with this client
53230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng				   (must be set for accepting events) */
53330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* per client watermarks */
53430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char reserved[64];	/* for future use */
53530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
53630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
53730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
53830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_SUBS_EXCLUSIVE	(1<<0)	/* exclusive connection */
53930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_SUBS_TIMESTAMP	(1<<1)
54030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_PORT_SUBS_TIME_REAL	(1<<2)
54130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
54230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_port_subscribe {
54330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct snd_seq_addr sender;	/* sender address */
54430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct snd_seq_addr dest;	/* destination address */
54530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int voices;		/* number of voices to be allocated (0 = don't care) */
54630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int flags;		/* modes */
54730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char queue;		/* input time-stamp queue (optional) */
54830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char pad[3];		/* reserved */
54930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char reserved[64];
55030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
55130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
55230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* type of query subscription */
55330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_QUERY_SUBS_READ	0
55430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_QUERY_SUBS_WRITE	1
55530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
55630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct snd_seq_query_subs {
55730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct snd_seq_addr root;	/* client/port id to be searched */
55830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int type;		/* READ or WRITE */
55930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int index;		/* 0..N-1 */
56030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int num_subs;		/* R/O: number of subscriptions on this port */
56130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct snd_seq_addr addr;	/* R/O: result */
56230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char queue;	/* R/O: result */
56330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int flags;	/* R/O: result */
56430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char reserved[64];	/* for future use */
56530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
56630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
56730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
56830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
56930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *  IOCTL commands
57030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
57130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
57230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_PVERSION	_IOR ('S', 0x00, int)
57330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_CLIENT_ID	_IOR ('S', 0x01, int)
57430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_SYSTEM_INFO	_IOWR('S', 0x02, struct snd_seq_system_info)
57530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_RUNNING_MODE	_IOWR('S', 0x03, struct snd_seq_running_info)
57630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
57730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_GET_CLIENT_INFO	_IOWR('S', 0x10, struct snd_seq_client_info)
57830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_SET_CLIENT_INFO	_IOW ('S', 0x11, struct snd_seq_client_info)
57930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
58030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_CREATE_PORT	_IOWR('S', 0x20, struct snd_seq_port_info)
58130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_DELETE_PORT	_IOW ('S', 0x21, struct snd_seq_port_info)
58230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_GET_PORT_INFO	_IOWR('S', 0x22, struct snd_seq_port_info)
58330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_SET_PORT_INFO	_IOW ('S', 0x23, struct snd_seq_port_info)
58430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
58530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_SUBSCRIBE_PORT	_IOW ('S', 0x30, struct snd_seq_port_subscribe)
58630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_UNSUBSCRIBE_PORT _IOW ('S', 0x31, struct snd_seq_port_subscribe)
58730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
58830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_CREATE_QUEUE	_IOWR('S', 0x32, struct snd_seq_queue_info)
58930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_DELETE_QUEUE	_IOW ('S', 0x33, struct snd_seq_queue_info)
59030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_GET_QUEUE_INFO	_IOWR('S', 0x34, struct snd_seq_queue_info)
59130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_SET_QUEUE_INFO	_IOWR('S', 0x35, struct snd_seq_queue_info)
59230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_GET_NAMED_QUEUE	_IOWR('S', 0x36, struct snd_seq_queue_info)
59330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_GET_QUEUE_STATUS _IOWR('S', 0x40, struct snd_seq_queue_status)
59430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_GET_QUEUE_TEMPO	_IOWR('S', 0x41, struct snd_seq_queue_tempo)
59530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_SET_QUEUE_TEMPO	_IOW ('S', 0x42, struct snd_seq_queue_tempo)
59630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_GET_QUEUE_OWNER	_IOWR('S', 0x43, struct snd_seq_queue_owner)
59730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_SET_QUEUE_OWNER	_IOW ('S', 0x44, struct snd_seq_queue_owner)
59830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_GET_QUEUE_TIMER	_IOWR('S', 0x45, struct snd_seq_queue_timer)
59930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_SET_QUEUE_TIMER	_IOW ('S', 0x46, struct snd_seq_queue_timer)
60030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* XXX
60130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_GET_QUEUE_SYNC	_IOWR('S', 0x53, struct snd_seq_queue_sync)
60230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_SET_QUEUE_SYNC	_IOW ('S', 0x54, struct snd_seq_queue_sync)
60330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng*/
60430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_GET_QUEUE_CLIENT	_IOWR('S', 0x49, struct snd_seq_queue_client)
60530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT	_IOW ('S', 0x4a, struct snd_seq_queue_client)
60630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_GET_CLIENT_POOL	_IOWR('S', 0x4b, struct snd_seq_client_pool)
60730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_SET_CLIENT_POOL	_IOW ('S', 0x4c, struct snd_seq_client_pool)
60830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_REMOVE_EVENTS	_IOW ('S', 0x4e, struct snd_seq_remove_events)
60930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_QUERY_SUBS	_IOWR('S', 0x4f, struct snd_seq_query_subs)
61030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_GET_SUBSCRIPTION	_IOWR('S', 0x50, struct snd_seq_port_subscribe)
61130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT	_IOWR('S', 0x51, struct snd_seq_client_info)
61230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT	_IOWR('S', 0x52, struct snd_seq_port_info)
61330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
61430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* _UAPI__SOUND_ASEQUENCER_H */
615