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