Blame view

include/sound/asequencer.h 24.2 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
  /*
   *  Main header file for the ALSA sequencer
   *  Copyright (c) 1998-1999 by Frank van de Pol <fvdpol@coil.demon.nl>
c1017a4cd   Jaroslav Kysela   [ALSA] Changed Ja...
4
   *            (c) 1998-1999 by Jaroslav Kysela <perex@perex.cz>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
   *
   *
   *   This program is free software; you can redistribute it and/or modify
   *   it under the terms of the GNU General Public License as published by
   *   the Free Software Foundation; either version 2 of the License, or
   *   (at your option) any later version.
   *
   *   This program is distributed in the hope that it will be useful,
   *   but WITHOUT ANY WARRANTY; without even the implied warranty of
   *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   *   GNU General Public License for more details.
   *
   *   You should have received a copy of the GNU General Public License
   *   along with this program; if not, write to the Free Software
   *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
   *
   */
  #ifndef __SOUND_ASEQUENCER_H
  #define __SOUND_ASEQUENCER_H
6560c349c   Takashi Iwai   [ALSA] Clean up i...
24
  #ifdef __KERNEL__
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
25
  #include <linux/ioctl.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
26
  #include <sound/asound.h>
6560c349c   Takashi Iwai   [ALSA] Clean up i...
27
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
28
29
30
31
32
33
34
35
36
  
  /** version of the sequencer */
  #define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION (1, 0, 1)
  
  /**
   * definition of sequencer event types
   */
  
  /** system messages
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
37
   * event data type = #snd_seq_result
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
38
39
40
41
42
   */
  #define SNDRV_SEQ_EVENT_SYSTEM		0
  #define SNDRV_SEQ_EVENT_RESULT		1
  
  /** note messages (channel specific)
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
43
   * event data type = #snd_seq_ev_note
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
44
45
46
47
48
49
50
   */
  #define SNDRV_SEQ_EVENT_NOTE		5
  #define SNDRV_SEQ_EVENT_NOTEON		6
  #define SNDRV_SEQ_EVENT_NOTEOFF		7
  #define SNDRV_SEQ_EVENT_KEYPRESS	8
  	
  /** control messages (channel specific)
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
51
   * event data type = #snd_seq_ev_ctrl
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
52
53
54
55
56
57
58
59
60
61
   */
  #define SNDRV_SEQ_EVENT_CONTROLLER	10
  #define SNDRV_SEQ_EVENT_PGMCHANGE	11
  #define SNDRV_SEQ_EVENT_CHANPRESS	12
  #define SNDRV_SEQ_EVENT_PITCHBEND	13	/**< from -8192 to 8191 */
  #define SNDRV_SEQ_EVENT_CONTROL14	14	/**< 14 bit controller value */
  #define SNDRV_SEQ_EVENT_NONREGPARAM	15	/**< 14 bit NRPN address + 14 bit unsigned value */
  #define SNDRV_SEQ_EVENT_REGPARAM	16	/**< 14 bit RPN address + 14 bit unsigned value */
  
  /** synchronisation messages
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
62
   * event data type = #snd_seq_ev_ctrl
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
63
64
65
66
67
68
69
70
   */
  #define SNDRV_SEQ_EVENT_SONGPOS		20	/* Song Position Pointer with LSB and MSB values */
  #define SNDRV_SEQ_EVENT_SONGSEL		21	/* Song Select with song ID number */
  #define SNDRV_SEQ_EVENT_QFRAME		22	/* midi time code quarter frame */
  #define SNDRV_SEQ_EVENT_TIMESIGN	23	/* SMF Time Signature event */
  #define SNDRV_SEQ_EVENT_KEYSIGN		24	/* SMF Key Signature event */
  	        
  /** timer messages
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
71
   * event data type = snd_seq_ev_queue_control
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
   */
  #define SNDRV_SEQ_EVENT_START		30	/* midi Real Time Start message */
  #define SNDRV_SEQ_EVENT_CONTINUE	31	/* midi Real Time Continue message */
  #define SNDRV_SEQ_EVENT_STOP		32	/* midi Real Time Stop message */	
  #define	SNDRV_SEQ_EVENT_SETPOS_TICK	33	/* set tick queue position */
  #define SNDRV_SEQ_EVENT_SETPOS_TIME	34	/* set realtime queue position */
  #define SNDRV_SEQ_EVENT_TEMPO		35	/* (SMF) Tempo event */
  #define SNDRV_SEQ_EVENT_CLOCK		36	/* midi Real Time Clock message */
  #define SNDRV_SEQ_EVENT_TICK		37	/* midi Real Time Tick message */
  #define SNDRV_SEQ_EVENT_QUEUE_SKEW	38	/* skew queue tempo */
  
  /** others
   * event data type = none
   */
  #define SNDRV_SEQ_EVENT_TUNE_REQUEST	40	/* tune request */
  #define SNDRV_SEQ_EVENT_RESET		41	/* reset to power-on state */
  #define SNDRV_SEQ_EVENT_SENSING		42	/* "active sensing" event */
  
  /** echo back, kernel private messages
   * event data type = any type
   */
  #define SNDRV_SEQ_EVENT_ECHO		50	/* echo event */
  #define SNDRV_SEQ_EVENT_OSS		51	/* OSS raw event */
  
  /** system status messages (broadcast for subscribers)
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
97
   * event data type = snd_seq_addr
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
98
99
100
101
102
103
104
105
106
   */
  #define SNDRV_SEQ_EVENT_CLIENT_START	60	/* new client has connected */
  #define SNDRV_SEQ_EVENT_CLIENT_EXIT	61	/* client has left the system */
  #define SNDRV_SEQ_EVENT_CLIENT_CHANGE	62	/* client status/info has changed */
  #define SNDRV_SEQ_EVENT_PORT_START	63	/* new port was created */
  #define SNDRV_SEQ_EVENT_PORT_EXIT	64	/* port was deleted from system */
  #define SNDRV_SEQ_EVENT_PORT_CHANGE	65	/* port status/info has changed */
  
  /** port connection changes
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
107
   * event data type = snd_seq_connect
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
108
109
110
   */
  #define SNDRV_SEQ_EVENT_PORT_SUBSCRIBED	66	/* ports connected */
  #define SNDRV_SEQ_EVENT_PORT_UNSUBSCRIBED 67	/* ports disconnected */
e5723b41a   Takashi Iwai   [ALSA] Remove seq...
111
  /* 70-89:  synthesizer events - obsoleted */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
112
113
114
115
116
117
118
119
120
121
122
123
124
125
  
  /** user-defined events with fixed length
   * event data type = any
   */
  #define SNDRV_SEQ_EVENT_USR0		90
  #define SNDRV_SEQ_EVENT_USR1		91
  #define SNDRV_SEQ_EVENT_USR2		92
  #define SNDRV_SEQ_EVENT_USR3		93
  #define SNDRV_SEQ_EVENT_USR4		94
  #define SNDRV_SEQ_EVENT_USR5		95
  #define SNDRV_SEQ_EVENT_USR6		96
  #define SNDRV_SEQ_EVENT_USR7		97
  #define SNDRV_SEQ_EVENT_USR8		98
  #define SNDRV_SEQ_EVENT_USR9		99
e5723b41a   Takashi Iwai   [ALSA] Remove seq...
126
  /* 100-118: instrument layer - obsoleted */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
127
128
129
  /* 119-129: reserved */
  
  /* 130-139: variable length events
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
130
   * event data type = snd_seq_ev_ext
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
   * (SNDRV_SEQ_EVENT_LENGTH_VARIABLE must be set)
   */
  #define SNDRV_SEQ_EVENT_SYSEX		130	/* system exclusive data (variable length) */
  #define SNDRV_SEQ_EVENT_BOUNCE		131	/* error event */
  /* 132-134: reserved */
  #define SNDRV_SEQ_EVENT_USR_VAR0	135
  #define SNDRV_SEQ_EVENT_USR_VAR1	136
  #define SNDRV_SEQ_EVENT_USR_VAR2	137
  #define SNDRV_SEQ_EVENT_USR_VAR3	138
  #define SNDRV_SEQ_EVENT_USR_VAR4	139
  
  /* 150-151: kernel events with quote - DO NOT use in user clients */
  #define SNDRV_SEQ_EVENT_KERNEL_ERROR	150
  #define SNDRV_SEQ_EVENT_KERNEL_QUOTE	151	/* obsolete */
  
  /* 152-191: reserved */
  
  /* 192-254: hardware specific events */
  
  /* 255: special event */
  #define SNDRV_SEQ_EVENT_NONE		255
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
152
  typedef unsigned char snd_seq_event_type_t;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
153
154
  
  /** event address */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
155
  struct snd_seq_addr {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
156
157
158
159
160
  	unsigned char client;	/**< Client number:         0..255, 255 = broadcast to all clients */
  	unsigned char port;	/**< Port within client:    0..255, 255 = broadcast to all ports */
  };
  
  /** port connection */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
161
162
163
  struct snd_seq_connect {
  	struct snd_seq_addr sender;
  	struct snd_seq_addr dest;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
  };
  
  
  #define SNDRV_SEQ_ADDRESS_UNKNOWN	253	/* unknown source */
  #define SNDRV_SEQ_ADDRESS_SUBSCRIBERS	254	/* send event to all subscribed ports */
  #define SNDRV_SEQ_ADDRESS_BROADCAST	255	/* send event to all queues/clients/ports/channels */
  #define SNDRV_SEQ_QUEUE_DIRECT		253	/* direct dispatch */
  
  	/* event mode flag - NOTE: only 8 bits available! */
  #define SNDRV_SEQ_TIME_STAMP_TICK	(0<<0) /* timestamp in clock ticks */
  #define SNDRV_SEQ_TIME_STAMP_REAL	(1<<0) /* timestamp in real time */
  #define SNDRV_SEQ_TIME_STAMP_MASK	(1<<0)
  
  #define SNDRV_SEQ_TIME_MODE_ABS		(0<<1)	/* absolute timestamp */
  #define SNDRV_SEQ_TIME_MODE_REL		(1<<1)	/* relative to current time */
  #define SNDRV_SEQ_TIME_MODE_MASK	(1<<1)
  
  #define SNDRV_SEQ_EVENT_LENGTH_FIXED	(0<<2)	/* fixed event size */
  #define SNDRV_SEQ_EVENT_LENGTH_VARIABLE	(1<<2)	/* variable event size */
  #define SNDRV_SEQ_EVENT_LENGTH_VARUSR	(2<<2)	/* variable event size - user memory space */
  #define SNDRV_SEQ_EVENT_LENGTH_MASK	(3<<2)
  
  #define SNDRV_SEQ_PRIORITY_NORMAL	(0<<4)	/* normal priority */
  #define SNDRV_SEQ_PRIORITY_HIGH		(1<<4)	/* event should be processed before others */
  #define SNDRV_SEQ_PRIORITY_MASK		(1<<4)
  
  
  	/* note event */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
192
  struct snd_seq_ev_note {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
193
194
195
196
197
198
199
200
  	unsigned char channel;
  	unsigned char note;
  	unsigned char velocity;
  	unsigned char off_velocity;	/* only for SNDRV_SEQ_EVENT_NOTE */
  	unsigned int duration;		/* only for SNDRV_SEQ_EVENT_NOTE */
  };
  
  	/* controller event */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
201
  struct snd_seq_ev_ctrl {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
202
203
204
205
206
207
208
  	unsigned char channel;
  	unsigned char unused1, unused2, unused3;	/* pad */
  	unsigned int param;
  	signed int value;
  };
  
  	/* generic set of bytes (12x8 bit) */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
209
  struct snd_seq_ev_raw8 {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
210
211
212
213
  	unsigned char d[12];	/* 8 bit value */
  };
  
  	/* generic set of integers (3x32 bit) */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
214
  struct snd_seq_ev_raw32 {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
215
216
217
218
  	unsigned int d[3];	/* 32 bit value */
  };
  
  	/* external stored data */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
219
  struct snd_seq_ev_ext {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
220
221
222
  	unsigned int len;	/* length of data */
  	void *ptr;		/* pointer to data (note: maybe 64-bit) */
  } __attribute__((packed));
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
223
  struct snd_seq_result {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
224
225
226
  	int event;		/* processed event type */
  	int result;
  };
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
227
  struct snd_seq_real_time {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
228
229
230
  	unsigned int tv_sec;	/* seconds */
  	unsigned int tv_nsec;	/* nanoseconds */
  };
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
231
  typedef unsigned int snd_seq_tick_time_t;	/* midi ticks */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
232

c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
233
234
235
  union snd_seq_timestamp {
  	snd_seq_tick_time_t tick;
  	struct snd_seq_real_time time;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
236
  };
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
237
  struct snd_seq_queue_skew {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
238
239
240
241
242
  	unsigned int value;
  	unsigned int base;
  };
  
  	/* queue timer control */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
243
  struct snd_seq_ev_queue_control {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
244
245
246
247
  	unsigned char queue;			/* affected queue */
  	unsigned char pad[3];			/* reserved */
  	union {
  		signed int value;		/* affected value (e.g. tempo) */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
248
  		union snd_seq_timestamp time;	/* time */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
249
  		unsigned int position;		/* sync position */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
250
  		struct snd_seq_queue_skew skew;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
251
252
253
254
255
256
  		unsigned int d32[2];
  		unsigned char d8[8];
  	} param;
  };
  
  	/* quoted event - inside the kernel only */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
257
258
  struct snd_seq_ev_quote {
  	struct snd_seq_addr origin;		/* original sender */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
259
  	unsigned short value;		/* optional data */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
260
  	struct snd_seq_event *event;		/* quoted event */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
261
262
263
264
  } __attribute__((packed));
  
  
  	/* sequencer event */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
265
266
  struct snd_seq_event {
  	snd_seq_event_type_t type;	/* event type */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
267
268
269
270
  	unsigned char flags;		/* event flags */
  	char tag;
  	
  	unsigned char queue;		/* schedule queue */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
271
  	union snd_seq_timestamp time;	/* schedule time */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
272

c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
273
274
  	struct snd_seq_addr source;	/* source address */
  	struct snd_seq_addr dest;	/* destination address */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
275
276
  
  	union {				/* event data... */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
277
278
279
280
281
282
283
284
285
286
  		struct snd_seq_ev_note note;
  		struct snd_seq_ev_ctrl control;
  		struct snd_seq_ev_raw8 raw8;
  		struct snd_seq_ev_raw32 raw32;
  		struct snd_seq_ev_ext ext;
  		struct snd_seq_ev_queue_control queue;
  		union snd_seq_timestamp time;
  		struct snd_seq_addr addr;
  		struct snd_seq_connect connect;
  		struct snd_seq_result result;
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
287
  		struct snd_seq_ev_quote quote;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
288
289
290
291
292
293
294
  	} data;
  };
  
  
  /*
   * bounce event - stored as variable size data
   */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
295
  struct snd_seq_event_bounce {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
296
  	int err;
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
297
  	struct snd_seq_event event;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
298
299
  	/* external data follows here. */
  };
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
300
301
302
303
  #ifdef __KERNEL__
  
  /* helper macro */
  #define snd_seq_event_bounce_ext_data(ev) ((void*)((char *)(ev)->data.ext.ptr + sizeof(struct snd_seq_event_bounce)))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
304
305
306
307
308
  
  /*
   * type check macros
   */
  /* result events: 0-4 */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
309
  #define snd_seq_ev_is_result_type(ev)	((ev)->type < 5)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
310
  /* channel specific events: 5-19 */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
311
  #define snd_seq_ev_is_channel_type(ev)	((ev)->type >= 5 && (ev)->type < 20)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
312
  /* note events: 5-9 */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
313
  #define snd_seq_ev_is_note_type(ev)	((ev)->type >= 5 && (ev)->type < 10)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
314
  /* control events: 10-19 */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
315
  #define snd_seq_ev_is_control_type(ev)	((ev)->type >= 10 && (ev)->type < 20)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
316
  /* queue control events: 30-39 */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
317
  #define snd_seq_ev_is_queue_type(ev)	((ev)->type >= 30 && (ev)->type < 40)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
318
  /* system status messages */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
319
  #define snd_seq_ev_is_message_type(ev)	((ev)->type >= 60 && (ev)->type < 69)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
320
  /* sample messages */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
321
  #define snd_seq_ev_is_sample_type(ev)	((ev)->type >= 70 && (ev)->type < 79)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
322
  /* user-defined messages */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
323
  #define snd_seq_ev_is_user_type(ev)	((ev)->type >= 90 && (ev)->type < 99)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
324
  /* fixed length events: 0-99 */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
325
  #define snd_seq_ev_is_fixed_type(ev)	((ev)->type < 100)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
326
  /* variable length events: 130-139 */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
327
  #define snd_seq_ev_is_variable_type(ev)	((ev)->type >= 130 && (ev)->type < 140)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
328
  /* reserved for kernel */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
329
  #define snd_seq_ev_is_reserved(ev)	((ev)->type >= 150)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
330
331
  
  /* direct dispatched events */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
332
  #define snd_seq_ev_is_direct(ev)	((ev)->queue == SNDRV_SEQ_QUEUE_DIRECT)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
333
334
335
336
337
  
  /*
   * macros to check event flags
   */
  /* prior events */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
338
  #define snd_seq_ev_is_prior(ev)		(((ev)->flags & SNDRV_SEQ_PRIORITY_MASK) == SNDRV_SEQ_PRIORITY_HIGH)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
339
340
  
  /* event length type */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
341
342
343
344
  #define snd_seq_ev_length_type(ev)	((ev)->flags & SNDRV_SEQ_EVENT_LENGTH_MASK)
  #define snd_seq_ev_is_fixed(ev)		(snd_seq_ev_length_type(ev) == SNDRV_SEQ_EVENT_LENGTH_FIXED)
  #define snd_seq_ev_is_variable(ev)	(snd_seq_ev_length_type(ev) == SNDRV_SEQ_EVENT_LENGTH_VARIABLE)
  #define snd_seq_ev_is_varusr(ev)	(snd_seq_ev_length_type(ev) == SNDRV_SEQ_EVENT_LENGTH_VARUSR)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
345
346
  
  /* time-stamp type */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
347
348
349
  #define snd_seq_ev_timestamp_type(ev)	((ev)->flags & SNDRV_SEQ_TIME_STAMP_MASK)
  #define snd_seq_ev_is_tick(ev)		(snd_seq_ev_timestamp_type(ev) == SNDRV_SEQ_TIME_STAMP_TICK)
  #define snd_seq_ev_is_real(ev)		(snd_seq_ev_timestamp_type(ev) == SNDRV_SEQ_TIME_STAMP_REAL)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
350
351
  
  /* time-mode type */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
352
353
354
  #define snd_seq_ev_timemode_type(ev)	((ev)->flags & SNDRV_SEQ_TIME_MODE_MASK)
  #define snd_seq_ev_is_abstime(ev)	(snd_seq_ev_timemode_type(ev) == SNDRV_SEQ_TIME_MODE_ABS)
  #define snd_seq_ev_is_reltime(ev)	(snd_seq_ev_timemode_type(ev) == SNDRV_SEQ_TIME_MODE_REL)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
355
356
  
  /* queue sync port */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
357
358
359
  #define snd_seq_queue_sync_port(q)	((q) + 16)
  
  #endif /* __KERNEL__ */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
360
361
  
  	/* system information */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
362
  struct snd_seq_system_info {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
363
364
365
366
367
368
369
370
371
372
373
  	int queues;			/* maximum queues count */
  	int clients;			/* maximum clients count */
  	int ports;			/* maximum ports per client */
  	int channels;			/* maximum channels per port */
  	int cur_clients;		/* current clients */
  	int cur_queues;			/* current queues */
  	char reserved[24];
  };
  
  
  	/* system running information */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
374
  struct snd_seq_running_info {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
375
376
377
378
379
380
381
382
383
384
  	unsigned char client;		/* client id */
  	unsigned char big_endian;	/* 1 = big-endian */
  	unsigned char cpu_mode;		/* 4 = 32bit, 8 = 64bit */
  	unsigned char pad;		/* reserved */
  	unsigned char reserved[12];
  };
  
  
  	/* known client numbers */
  #define SNDRV_SEQ_CLIENT_SYSTEM		0
aa1e77e69   Clemens Ladisch   [ALSA] seq: reorg...
385
386
387
  	/* internal client numbers */
  #define SNDRV_SEQ_CLIENT_DUMMY		14	/* midi through */
  #define SNDRV_SEQ_CLIENT_OSS		15	/* oss sequencer emulator */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
388
389
390
  
  
  	/* client types */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
391
392
393
394
  typedef int __bitwise snd_seq_client_type_t;
  #define	NO_CLIENT	((__force snd_seq_client_type_t) 0)
  #define	USER_CLIENT	((__force snd_seq_client_type_t) 1)
  #define	KERNEL_CLIENT	((__force snd_seq_client_type_t) 2)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
395
396
397
398
399
400
                          
  	/* event filter flags */
  #define SNDRV_SEQ_FILTER_BROADCAST	(1<<0)	/* accept broadcast messages */
  #define SNDRV_SEQ_FILTER_MULTICAST	(1<<1)	/* accept multicast messages */
  #define SNDRV_SEQ_FILTER_BOUNCE		(1<<2)	/* accept bounce event in error */
  #define SNDRV_SEQ_FILTER_USE_EVENT	(1<<31)	/* use event filter */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
401
  struct snd_seq_client_info {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
402
  	int client;			/* client number to inquire */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
403
  	snd_seq_client_type_t type;	/* client type */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
404
405
406
407
408
409
410
411
412
413
414
  	char name[64];			/* client name */
  	unsigned int filter;		/* filter flags */
  	unsigned char multicast_filter[8]; /* multicast filter bitmap */
  	unsigned char event_filter[32];	/* event filter bitmap */
  	int num_ports;			/* RO: number of ports */
  	int event_lost;			/* number of lost events */
  	char reserved[64];		/* for future use */
  };
  
  
  /* client pool size */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
415
  struct snd_seq_client_pool {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
  	int client;			/* client number to inquire */
  	int output_pool;		/* outgoing (write) pool size */
  	int input_pool;			/* incoming (read) pool size */
  	int output_room;		/* minimum free pool size for select/blocking mode */
  	int output_free;		/* unused size */
  	int input_free;			/* unused size */
  	char reserved[64];
  };
  
  
  /* Remove events by specified criteria */
  
  #define SNDRV_SEQ_REMOVE_INPUT		(1<<0)	/* Flush input queues */
  #define SNDRV_SEQ_REMOVE_OUTPUT		(1<<1)	/* Flush output queues */
  #define SNDRV_SEQ_REMOVE_DEST		(1<<2)	/* Restrict by destination q:client:port */
  #define SNDRV_SEQ_REMOVE_DEST_CHANNEL	(1<<3)	/* Restrict by channel */
  #define SNDRV_SEQ_REMOVE_TIME_BEFORE	(1<<4)	/* Restrict to before time */
  #define SNDRV_SEQ_REMOVE_TIME_AFTER	(1<<5)	/* Restrict to time or after */
  #define SNDRV_SEQ_REMOVE_TIME_TICK	(1<<6)	/* Time is in ticks */
  #define SNDRV_SEQ_REMOVE_EVENT_TYPE	(1<<7)	/* Restrict to event type */
  #define SNDRV_SEQ_REMOVE_IGNORE_OFF 	(1<<8)	/* Do not flush off events */
  #define SNDRV_SEQ_REMOVE_TAG_MATCH 	(1<<9)	/* Restrict to events with given tag */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
438
  struct snd_seq_remove_events {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
439
  	unsigned int  remove_mode;	/* Flags that determine what gets removed */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
440
  	union snd_seq_timestamp time;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
441
442
  
  	unsigned char queue;	/* Queue for REMOVE_DEST */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
443
  	struct snd_seq_addr dest;	/* Address for REMOVE_DEST */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
  	unsigned char channel;	/* Channel for REMOVE_DEST */
  
  	int  type;	/* For REMOVE_EVENT_TYPE */
  	char  tag;	/* Tag for REMOVE_TAG */
  
  	int  reserved[10];	/* To allow for future binary compatibility */
  
  };
  
  
  	/* known port numbers */
  #define SNDRV_SEQ_PORT_SYSTEM_TIMER	0
  #define SNDRV_SEQ_PORT_SYSTEM_ANNOUNCE	1
  
  	/* port capabilities (32 bits) */
  #define SNDRV_SEQ_PORT_CAP_READ		(1<<0)	/* readable from this port */
  #define SNDRV_SEQ_PORT_CAP_WRITE	(1<<1)	/* writable to this port */
  
  #define SNDRV_SEQ_PORT_CAP_SYNC_READ	(1<<2)
  #define SNDRV_SEQ_PORT_CAP_SYNC_WRITE	(1<<3)
  
  #define SNDRV_SEQ_PORT_CAP_DUPLEX	(1<<4)
  
  #define SNDRV_SEQ_PORT_CAP_SUBS_READ	(1<<5)	/* allow read subscription */
  #define SNDRV_SEQ_PORT_CAP_SUBS_WRITE	(1<<6)	/* allow write subscription */
  #define SNDRV_SEQ_PORT_CAP_NO_EXPORT	(1<<7)	/* routing not allowed */
  
  	/* port type */
  #define SNDRV_SEQ_PORT_TYPE_SPECIFIC	(1<<0)	/* hardware specific */
  #define SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC (1<<1)	/* generic MIDI device */
  #define SNDRV_SEQ_PORT_TYPE_MIDI_GM	(1<<2)	/* General MIDI compatible device */
  #define SNDRV_SEQ_PORT_TYPE_MIDI_GS	(1<<3)	/* GS compatible device */
  #define SNDRV_SEQ_PORT_TYPE_MIDI_XG	(1<<4)	/* XG compatible device */
  #define SNDRV_SEQ_PORT_TYPE_MIDI_MT32	(1<<5)	/* MT-32 compatible device */
  #define SNDRV_SEQ_PORT_TYPE_MIDI_GM2	(1<<6)	/* General MIDI 2 compatible device */
  
  /* other standards...*/
  #define SNDRV_SEQ_PORT_TYPE_SYNTH	(1<<10)	/* Synth device (no MIDI compatible - direct wavetable) */
  #define SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE (1<<11)	/* Sampling device (support sample download) */
  #define SNDRV_SEQ_PORT_TYPE_SAMPLE	(1<<12)	/* Sampling device (sample can be downloaded at any time) */
  /*...*/
450047a78   Clemens Ladisch   [ALSA] add more s...
485
486
487
488
  #define SNDRV_SEQ_PORT_TYPE_HARDWARE	(1<<16)	/* driver for a hardware device */
  #define SNDRV_SEQ_PORT_TYPE_SOFTWARE	(1<<17)	/* implemented in software */
  #define SNDRV_SEQ_PORT_TYPE_SYNTHESIZER	(1<<18)	/* generates sound */
  #define SNDRV_SEQ_PORT_TYPE_PORT	(1<<19)	/* connects to other device(s) */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
489
490
491
492
493
494
  #define SNDRV_SEQ_PORT_TYPE_APPLICATION	(1<<20)	/* application (sequencer/editor) */
  
  /* misc. conditioning flags */
  #define SNDRV_SEQ_PORT_FLG_GIVEN_PORT	(1<<0)
  #define SNDRV_SEQ_PORT_FLG_TIMESTAMP	(1<<1)
  #define SNDRV_SEQ_PORT_FLG_TIME_REAL	(1<<2)
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
495
496
  struct snd_seq_port_info {
  	struct snd_seq_addr addr;	/* client/port numbers */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
  	char name[64];			/* port name */
  
  	unsigned int capability;	/* port capability bits */
  	unsigned int type;		/* port type bits */
  	int midi_channels;		/* channels per MIDI port */
  	int midi_voices;		/* voices per MIDI port */
  	int synth_voices;		/* voices per SYNTH port */
  
  	int read_use;			/* R/O: subscribers for output (from this port) */
  	int write_use;			/* R/O: subscribers for input (to this port) */
  
  	void *kernel;			/* reserved for kernel use (must be NULL) */
  	unsigned int flags;		/* misc. conditioning */
  	unsigned char time_queue;	/* queue # for timestamping */
  	char reserved[59];		/* for future use */
  };
  
  
  /* queue flags */
  #define SNDRV_SEQ_QUEUE_FLG_SYNC	(1<<0)	/* sync enabled */
  
  /* queue information */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
519
  struct snd_seq_queue_info {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
  	int queue;		/* queue id */
  
  	/*
  	 *  security settings, only owner of this queue can start/stop timer
  	 *  etc. if the queue is locked for other clients
  	 */
  	int owner;		/* client id for owner of the queue */
  	unsigned locked:1;	/* timing queue locked for other queues */
  	char name[64];		/* name of this queue */
  	unsigned int flags;	/* flags */
  	char reserved[60];	/* for future use */
  
  };
  
  /* queue info/status */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
535
  struct snd_seq_queue_status {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
536
537
  	int queue;			/* queue id */
  	int events;			/* read-only - queue size */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
538
539
  	snd_seq_tick_time_t tick;	/* current tick */
  	struct snd_seq_real_time time;	/* current time */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
540
541
542
543
544
545
546
  	int running;			/* running state of queue */
  	int flags;			/* various flags */
  	char reserved[64];		/* for the future */
  };
  
  
  /* queue tempo */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
547
  struct snd_seq_queue_tempo {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
  	int queue;			/* sequencer queue */
  	unsigned int tempo;		/* current tempo, us/tick */
  	int ppq;			/* time resolution, ticks/quarter */
  	unsigned int skew_value;	/* queue skew */
  	unsigned int skew_base;		/* queue skew base */
  	char reserved[24];		/* for the future */
  };
  
  
  /* sequencer timer sources */
  #define SNDRV_SEQ_TIMER_ALSA		0	/* ALSA timer */
  #define SNDRV_SEQ_TIMER_MIDI_CLOCK	1	/* Midi Clock (CLOCK event) */
  #define SNDRV_SEQ_TIMER_MIDI_TICK	2	/* Midi Timer Tick (TICK event) */
  
  /* queue timer info */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
563
  struct snd_seq_queue_timer {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
564
565
566
567
  	int queue;			/* sequencer queue */
  	int type;			/* source timer type */
  	union {
  		struct {
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
568
  			struct snd_timer_id id;	/* ALSA's timer ID */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
569
570
571
572
573
  			unsigned int resolution;	/* resolution in Hz */
  		} alsa;
  	} u;
  	char reserved[64];		/* for the future use */
  };
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
574
  struct snd_seq_queue_client {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
575
576
577
578
579
580
581
582
583
584
585
586
  	int queue;		/* sequencer queue */
  	int client;		/* sequencer client */
  	int used;		/* queue is used with this client
  				   (must be set for accepting events) */
  	/* per client watermarks */
  	char reserved[64];	/* for future use */
  };
  
  
  #define SNDRV_SEQ_PORT_SUBS_EXCLUSIVE	(1<<0)	/* exclusive connection */
  #define SNDRV_SEQ_PORT_SUBS_TIMESTAMP	(1<<1)
  #define SNDRV_SEQ_PORT_SUBS_TIME_REAL	(1<<2)
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
587
588
589
  struct snd_seq_port_subscribe {
  	struct snd_seq_addr sender;	/* sender address */
  	struct snd_seq_addr dest;	/* destination address */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
590
591
592
593
594
595
596
597
598
599
  	unsigned int voices;		/* number of voices to be allocated (0 = don't care) */
  	unsigned int flags;		/* modes */
  	unsigned char queue;		/* input time-stamp queue (optional) */
  	unsigned char pad[3];		/* reserved */
  	char reserved[64];
  };
  
  /* type of query subscription */
  #define SNDRV_SEQ_QUERY_SUBS_READ	0
  #define SNDRV_SEQ_QUERY_SUBS_WRITE	1
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
600
601
  struct snd_seq_query_subs {
  	struct snd_seq_addr root;	/* client/port id to be searched */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
602
603
604
  	int type;		/* READ or WRITE */
  	int index;		/* 0..N-1 */
  	int num_subs;		/* R/O: number of subscriptions on this port */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
605
  	struct snd_seq_addr addr;	/* R/O: result */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
606
607
608
609
610
611
612
  	unsigned char queue;	/* R/O: result */
  	unsigned int flags;	/* R/O: result */
  	char reserved[64];	/* for future use */
  };
  
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
613
614
615
616
617
   *  IOCTL commands
   */
  
  #define SNDRV_SEQ_IOCTL_PVERSION	_IOR ('S', 0x00, int)
  #define SNDRV_SEQ_IOCTL_CLIENT_ID	_IOR ('S', 0x01, int)
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
  #define SNDRV_SEQ_IOCTL_SYSTEM_INFO	_IOWR('S', 0x02, struct snd_seq_system_info)
  #define SNDRV_SEQ_IOCTL_RUNNING_MODE	_IOWR('S', 0x03, struct snd_seq_running_info)
  
  #define SNDRV_SEQ_IOCTL_GET_CLIENT_INFO	_IOWR('S', 0x10, struct snd_seq_client_info)
  #define SNDRV_SEQ_IOCTL_SET_CLIENT_INFO	_IOW ('S', 0x11, struct snd_seq_client_info)
  
  #define SNDRV_SEQ_IOCTL_CREATE_PORT	_IOWR('S', 0x20, struct snd_seq_port_info)
  #define SNDRV_SEQ_IOCTL_DELETE_PORT	_IOW ('S', 0x21, struct snd_seq_port_info)
  #define SNDRV_SEQ_IOCTL_GET_PORT_INFO	_IOWR('S', 0x22, struct snd_seq_port_info)
  #define SNDRV_SEQ_IOCTL_SET_PORT_INFO	_IOW ('S', 0x23, struct snd_seq_port_info)
  
  #define SNDRV_SEQ_IOCTL_SUBSCRIBE_PORT	_IOW ('S', 0x30, struct snd_seq_port_subscribe)
  #define SNDRV_SEQ_IOCTL_UNSUBSCRIBE_PORT _IOW ('S', 0x31, struct snd_seq_port_subscribe)
  
  #define SNDRV_SEQ_IOCTL_CREATE_QUEUE	_IOWR('S', 0x32, struct snd_seq_queue_info)
  #define SNDRV_SEQ_IOCTL_DELETE_QUEUE	_IOW ('S', 0x33, struct snd_seq_queue_info)
  #define SNDRV_SEQ_IOCTL_GET_QUEUE_INFO	_IOWR('S', 0x34, struct snd_seq_queue_info)
  #define SNDRV_SEQ_IOCTL_SET_QUEUE_INFO	_IOWR('S', 0x35, struct snd_seq_queue_info)
  #define SNDRV_SEQ_IOCTL_GET_NAMED_QUEUE	_IOWR('S', 0x36, struct snd_seq_queue_info)
  #define SNDRV_SEQ_IOCTL_GET_QUEUE_STATUS _IOWR('S', 0x40, struct snd_seq_queue_status)
  #define SNDRV_SEQ_IOCTL_GET_QUEUE_TEMPO	_IOWR('S', 0x41, struct snd_seq_queue_tempo)
  #define SNDRV_SEQ_IOCTL_SET_QUEUE_TEMPO	_IOW ('S', 0x42, struct snd_seq_queue_tempo)
  #define SNDRV_SEQ_IOCTL_GET_QUEUE_OWNER	_IOWR('S', 0x43, struct snd_seq_queue_owner)
  #define SNDRV_SEQ_IOCTL_SET_QUEUE_OWNER	_IOW ('S', 0x44, struct snd_seq_queue_owner)
  #define SNDRV_SEQ_IOCTL_GET_QUEUE_TIMER	_IOWR('S', 0x45, struct snd_seq_queue_timer)
  #define SNDRV_SEQ_IOCTL_SET_QUEUE_TIMER	_IOW ('S', 0x46, struct snd_seq_queue_timer)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
644
  /* XXX
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
645
646
  #define SNDRV_SEQ_IOCTL_GET_QUEUE_SYNC	_IOWR('S', 0x53, struct snd_seq_queue_sync)
  #define SNDRV_SEQ_IOCTL_SET_QUEUE_SYNC	_IOW ('S', 0x54, struct snd_seq_queue_sync)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
647
  */
c7e0b5bf9   Takashi Iwai   [ALSA] Remove xxx...
648
649
650
651
652
653
654
655
656
  #define SNDRV_SEQ_IOCTL_GET_QUEUE_CLIENT	_IOWR('S', 0x49, struct snd_seq_queue_client)
  #define SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT	_IOW ('S', 0x4a, struct snd_seq_queue_client)
  #define SNDRV_SEQ_IOCTL_GET_CLIENT_POOL	_IOWR('S', 0x4b, struct snd_seq_client_pool)
  #define SNDRV_SEQ_IOCTL_SET_CLIENT_POOL	_IOW ('S', 0x4c, struct snd_seq_client_pool)
  #define SNDRV_SEQ_IOCTL_REMOVE_EVENTS	_IOW ('S', 0x4e, struct snd_seq_remove_events)
  #define SNDRV_SEQ_IOCTL_QUERY_SUBS	_IOWR('S', 0x4f, struct snd_seq_query_subs)
  #define SNDRV_SEQ_IOCTL_GET_SUBSCRIPTION	_IOWR('S', 0x50, struct snd_seq_port_subscribe)
  #define SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT	_IOWR('S', 0x51, struct snd_seq_client_info)
  #define SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT	_IOWR('S', 0x52, struct snd_seq_port_info)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
657
658
  
  #endif /* __SOUND_ASEQUENCER_H */