1951a39d68df598db08dfced8b4707755864a0492Ying Wang/****************************************************************************
2951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************
3951a39d68df598db08dfced8b4707755864a0492Ying Wang ***
4951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   This header was automatically generated from a Linux kernel header
5951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   of the same name, to make information necessary for userspace to
6951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   call into the kernel available to libc.  It contains only constants,
7951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   structures, and macros generated from the original header, and thus,
8951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   contains no copyrightable information.
9951a39d68df598db08dfced8b4707755864a0492Ying Wang ***
10951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************
11951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************/
12951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef SOUNDCARD_H
13951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUNDCARD_H
14951a39d68df598db08dfced8b4707755864a0492Ying Wang
15951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_VERSION 0x030802
16951a39d68df598db08dfced8b4707755864a0492Ying Wang#define OPEN_SOUND_SYSTEM
17951a39d68df598db08dfced8b4707755864a0492Ying Wang
18951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/ioctl.h>
19951a39d68df598db08dfced8b4707755864a0492Ying Wang
20951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <endian.h>
21951a39d68df598db08dfced8b4707755864a0492Ying Wang
22951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_ADLIB 1
23951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_SB 2
24951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_PAS 3
25951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_GUS 4
26951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_MPU401 5
27951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_SB16 6
28951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_SB16MIDI 7
29951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_UART6850 8
30951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_GUS16 9
31951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_MSS 10
32951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_PSS 11
33951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_SSCAPE 12
34951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_PSS_MPU 13
35951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_PSS_MSS 14
36951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_SSCAPE_MSS 15
37951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_TRXPRO 16
38951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_TRXPRO_SB 17
39951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_TRXPRO_MPU 18
40951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_MAD16 19
41951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_MAD16_MPU 20
42951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_CS4232 21
43951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_CS4232_MPU 22
44951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_MAUI 23
45951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_PSEUDO_MSS 24
46951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_GUSPNP 25
47951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCARD_UART401 26
48951a39d68df598db08dfced8b4707755864a0492Ying Wang
49951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _SIOWR
50951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined(_IOWR) && (defined(_AIX) || !defined(sun) && !defined(sparc) && !defined(__sparc__) && !defined(__INCioctlh) && !defined(__Lynx__))
51951a39d68df598db08dfced8b4707755864a0492Ying Wang
52951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SIOCPARM_MASK IOCPARM_MASK
53951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SIOC_VOID IOC_VOID
54951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SIOC_OUT IOC_OUT
55951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SIOC_IN IOC_IN
56951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SIOC_INOUT IOC_INOUT
57951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIOC_SIZE _IOC_SIZE
58951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIOC_DIR _IOC_DIR
59951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIOC_NONE _IOC_NONE
60951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIOC_READ _IOC_READ
61951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIOC_WRITE _IOC_WRITE
62951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIO _IO
63951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIOR _IOR
64951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIOW _IOW
65951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIOWR _IOWR
66951a39d68df598db08dfced8b4707755864a0492Ying Wang#else
67951a39d68df598db08dfced8b4707755864a0492Ying Wang
68951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SIOCPARM_MASK 0x1fff
69951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SIOC_VOID 0x00000000
70951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SIOC_OUT 0x20000000
71951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SIOC_IN 0x40000000
72951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SIOC_INOUT (SIOC_IN|SIOC_OUT)
73951a39d68df598db08dfced8b4707755864a0492Ying Wang
74951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIO(x,y) ((int)(SIOC_VOID|(x<<8)|y))
75951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIOR(x,y,t) ((int)(SIOC_OUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
76951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIOW(x,y,t) ((int)(SIOC_IN|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
77951a39d68df598db08dfced8b4707755864a0492Ying Wang
78951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIOWR(x,y,t) ((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
79951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIOC_SIZE(x) ((x>>16)&SIOCPARM_MASK)
80951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIOC_DIR(x) (x & 0xf0000000)
81951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIOC_NONE SIOC_VOID
82951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIOC_READ SIOC_OUT
83951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SIOC_WRITE SIOC_IN
84951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
85951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
86951a39d68df598db08dfced8b4707755864a0492Ying Wang
87951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SEQ_RESET _SIO ('Q', 0)
88951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SEQ_SYNC _SIO ('Q', 1)
89951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SYNTH_INFO _SIOWR('Q', 2, struct synth_info)
90951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SEQ_CTRLRATE _SIOWR('Q', 3, int)
91951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SEQ_GETOUTCOUNT _SIOR ('Q', 4, int)
92951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SEQ_GETINCOUNT _SIOR ('Q', 5, int)
93951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SEQ_PERCMODE _SIOW ('Q', 6, int)
94951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_FM_LOAD_INSTR _SIOW ('Q', 7, struct sbi_instrument)
95951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SEQ_TESTMIDI _SIOW ('Q', 8, int)
96951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SEQ_RESETSAMPLES _SIOW ('Q', 9, int)
97951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SEQ_NRSYNTHS _SIOR ('Q',10, int)
98951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SEQ_NRMIDIS _SIOR ('Q',11, int)
99951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_MIDI_INFO _SIOWR('Q',12, struct midi_info)
100951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SEQ_THRESHOLD _SIOW ('Q',13, int)
101951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SYNTH_MEMAVL _SIOWR('Q',14, int)
102951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_FM_4OP_ENABLE _SIOW ('Q',15, int)
103951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SEQ_PANIC _SIO ('Q',17)
104951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SEQ_OUTOFBAND _SIOW ('Q',18, struct seq_event_rec)
105951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SEQ_GETTIME _SIOR ('Q',19, int)
106951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SYNTH_ID _SIOWR('Q',20, struct synth_info)
107951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SYNTH_CONTROL _SIOWR('Q',21, struct synth_control)
108951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_SYNTH_REMOVESAMPLE _SIOWR('Q',22, struct remove_sample)
109951a39d68df598db08dfced8b4707755864a0492Ying Wang
110951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct synth_control
111951a39d68df598db08dfced8b4707755864a0492Ying Wang{
112951a39d68df598db08dfced8b4707755864a0492Ying Wang int devno;
113951a39d68df598db08dfced8b4707755864a0492Ying Wang char data[4000];
114951a39d68df598db08dfced8b4707755864a0492Ying Wang}synth_control;
115951a39d68df598db08dfced8b4707755864a0492Ying Wang
116951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct remove_sample
117951a39d68df598db08dfced8b4707755864a0492Ying Wang{
118951a39d68df598db08dfced8b4707755864a0492Ying Wang int devno;
119951a39d68df598db08dfced8b4707755864a0492Ying Wang int bankno;
120951a39d68df598db08dfced8b4707755864a0492Ying Wang int instrno;
121951a39d68df598db08dfced8b4707755864a0492Ying Wang} remove_sample;
122951a39d68df598db08dfced8b4707755864a0492Ying Wang
123951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct seq_event_rec {
124951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char arr[8];
125951a39d68df598db08dfced8b4707755864a0492Ying Wang} seq_event_rec;
126951a39d68df598db08dfced8b4707755864a0492Ying Wang
127951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_TMR_TIMEBASE _SIOWR('T', 1, int)
128951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_TMR_START _SIO ('T', 2)
129951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_TMR_STOP _SIO ('T', 3)
130951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_TMR_CONTINUE _SIO ('T', 4)
131951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_TMR_TEMPO _SIOWR('T', 5, int)
132951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_TMR_SOURCE _SIOWR('T', 6, int)
133951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TMR_INTERNAL 0x00000001
134951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TMR_EXTERNAL 0x00000002
135951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TMR_MODE_MIDI 0x00000010
136951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TMR_MODE_FSK 0x00000020
137951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TMR_MODE_CLS 0x00000040
138951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TMR_MODE_SMPTE 0x00000080
139951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_TMR_METRONOME _SIOW ('T', 7, int)
140951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_TMR_SELECT _SIOW ('T', 8, int)
141951a39d68df598db08dfced8b4707755864a0492Ying Wang
142951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _LINUX_PATCHKEY_H_INDIRECT
143951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/patchkey.h>
144951a39d68df598db08dfced8b4707755864a0492Ying Wang#undef _LINUX_PATCHKEY_H_INDIRECT
145951a39d68df598db08dfced8b4707755864a0492Ying Wang
146951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef __BYTE_ORDER
147951a39d68df598db08dfced8b4707755864a0492Ying Wang#if __BYTE_ORDER == __BIG_ENDIAN
148951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AFMT_S16_NE AFMT_S16_BE
149951a39d68df598db08dfced8b4707755864a0492Ying Wang#elif __BYTE_ORDER == __LITTLE_ENDIAN
150951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AFMT_S16_NE AFMT_S16_LE
151951a39d68df598db08dfced8b4707755864a0492Ying Wang#else
152951a39d68df598db08dfced8b4707755864a0492Ying Wang#error "could not determine byte order"
153951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
154951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
155951a39d68df598db08dfced8b4707755864a0492Ying Wang
156951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct patch_info {
157951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short key;
158951a39d68df598db08dfced8b4707755864a0492Ying Wang#define WAVE_PATCH _PATCHKEY(0x04)
159951a39d68df598db08dfced8b4707755864a0492Ying Wang#define GUS_PATCH WAVE_PATCH
160951a39d68df598db08dfced8b4707755864a0492Ying Wang#define WAVEFRONT_PATCH _PATCHKEY(0x06)
161951a39d68df598db08dfced8b4707755864a0492Ying Wang
162951a39d68df598db08dfced8b4707755864a0492Ying Wang short device_no;
163951a39d68df598db08dfced8b4707755864a0492Ying Wang short instr_no;
164951a39d68df598db08dfced8b4707755864a0492Ying Wang
165951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned int mode;
166951a39d68df598db08dfced8b4707755864a0492Ying Wang
167951a39d68df598db08dfced8b4707755864a0492Ying Wang#define WAVE_16_BITS 0x01
168951a39d68df598db08dfced8b4707755864a0492Ying Wang#define WAVE_UNSIGNED 0x02
169951a39d68df598db08dfced8b4707755864a0492Ying Wang#define WAVE_LOOPING 0x04
170951a39d68df598db08dfced8b4707755864a0492Ying Wang#define WAVE_BIDIR_LOOP 0x08
171951a39d68df598db08dfced8b4707755864a0492Ying Wang#define WAVE_LOOP_BACK 0x10
172951a39d68df598db08dfced8b4707755864a0492Ying Wang#define WAVE_SUSTAIN_ON 0x20
173951a39d68df598db08dfced8b4707755864a0492Ying Wang#define WAVE_ENVELOPES 0x40
174951a39d68df598db08dfced8b4707755864a0492Ying Wang#define WAVE_FAST_RELEASE 0x80
175951a39d68df598db08dfced8b4707755864a0492Ying Wang
176951a39d68df598db08dfced8b4707755864a0492Ying Wang#define WAVE_VIBRATO 0x00010000
177951a39d68df598db08dfced8b4707755864a0492Ying Wang#define WAVE_TREMOLO 0x00020000
178951a39d68df598db08dfced8b4707755864a0492Ying Wang#define WAVE_SCALE 0x00040000
179951a39d68df598db08dfced8b4707755864a0492Ying Wang#define WAVE_FRACTIONS 0x00080000
180951a39d68df598db08dfced8b4707755864a0492Ying Wang
181951a39d68df598db08dfced8b4707755864a0492Ying Wang#define WAVE_ROM 0x40000000
182951a39d68df598db08dfced8b4707755864a0492Ying Wang#define WAVE_MULAW 0x20000000
183951a39d68df598db08dfced8b4707755864a0492Ying Wang
184951a39d68df598db08dfced8b4707755864a0492Ying Wang int len;
185951a39d68df598db08dfced8b4707755864a0492Ying Wang int loop_start, loop_end;
186951a39d68df598db08dfced8b4707755864a0492Ying Wang
187951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned int base_freq;
188951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned int base_note;
189951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned int high_note;
190951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned int low_note;
191951a39d68df598db08dfced8b4707755864a0492Ying Wang int panning;
192951a39d68df598db08dfced8b4707755864a0492Ying Wang int detuning;
193951a39d68df598db08dfced8b4707755864a0492Ying Wang
194951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char env_rate[ 6 ];
195951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char env_offset[ 6 ];
196951a39d68df598db08dfced8b4707755864a0492Ying Wang
197951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char tremolo_sweep;
198951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char tremolo_rate;
199951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char tremolo_depth;
200951a39d68df598db08dfced8b4707755864a0492Ying Wang
201951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char vibrato_sweep;
202951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char vibrato_rate;
203951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char vibrato_depth;
204951a39d68df598db08dfced8b4707755864a0492Ying Wang
205951a39d68df598db08dfced8b4707755864a0492Ying Wang int scale_frequency;
206951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned int scale_factor;
207951a39d68df598db08dfced8b4707755864a0492Ying Wang
208951a39d68df598db08dfced8b4707755864a0492Ying Wang int volume;
209951a39d68df598db08dfced8b4707755864a0492Ying Wang int fractions;
210951a39d68df598db08dfced8b4707755864a0492Ying Wang int reserved1;
211951a39d68df598db08dfced8b4707755864a0492Ying Wang int spare[2];
212951a39d68df598db08dfced8b4707755864a0492Ying Wang char data[1];
213951a39d68df598db08dfced8b4707755864a0492Ying Wang };
214951a39d68df598db08dfced8b4707755864a0492Ying Wang
215951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct sysex_info {
216951a39d68df598db08dfced8b4707755864a0492Ying Wang short key;
217951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SYSEX_PATCH _PATCHKEY(0x05)
218951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MAUI_PATCH _PATCHKEY(0x06)
219951a39d68df598db08dfced8b4707755864a0492Ying Wang short device_no;
220951a39d68df598db08dfced8b4707755864a0492Ying Wang int len;
221951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char data[1];
222951a39d68df598db08dfced8b4707755864a0492Ying Wang };
223951a39d68df598db08dfced8b4707755864a0492Ying Wang
224951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_NOTEOFF 0
225951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_FMNOTEOFF SEQ_NOTEOFF
226951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_NOTEON 1
227951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_FMNOTEON SEQ_NOTEON
228951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_WAIT TMR_WAIT_ABS
229951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_PGMCHANGE 3
230951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_FMPGMCHANGE SEQ_PGMCHANGE
231951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_SYNCTIMER TMR_START
232951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_MIDIPUTC 5
233951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_DRUMON 6
234951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_DRUMOFF 7
235951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_ECHO TMR_ECHO
236951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_AFTERTOUCH 9
237951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_CONTROLLER 10
238951a39d68df598db08dfced8b4707755864a0492Ying Wang
239951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_BANK_SELECT 0x00
240951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_MODWHEEL 0x01
241951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_BREATH 0x02
242951a39d68df598db08dfced8b4707755864a0492Ying Wang
243951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_FOOT 0x04
244951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_PORTAMENTO_TIME 0x05
245951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_DATA_ENTRY 0x06
246951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_MAIN_VOLUME 0x07
247951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_BALANCE 0x08
248951a39d68df598db08dfced8b4707755864a0492Ying Wang
249951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_PAN 0x0a
250951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_EXPRESSION 0x0b
251951a39d68df598db08dfced8b4707755864a0492Ying Wang
252951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_GENERAL_PURPOSE1 0x10
253951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_GENERAL_PURPOSE2 0x11
254951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_GENERAL_PURPOSE3 0x12
255951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_GENERAL_PURPOSE4 0x13
256951a39d68df598db08dfced8b4707755864a0492Ying Wang
257951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_DAMPER_PEDAL 0x40
258951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_SUSTAIN 0x40
259951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_HOLD 0x40
260951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_PORTAMENTO 0x41
261951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_SOSTENUTO 0x42
262951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_SOFT_PEDAL 0x43
263951a39d68df598db08dfced8b4707755864a0492Ying Wang
264951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_HOLD2 0x45
265951a39d68df598db08dfced8b4707755864a0492Ying Wang
266951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_GENERAL_PURPOSE5 0x50
267951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_GENERAL_PURPOSE6 0x51
268951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_GENERAL_PURPOSE7 0x52
269951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_GENERAL_PURPOSE8 0x53
270951a39d68df598db08dfced8b4707755864a0492Ying Wang
271951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_EXT_EFF_DEPTH 0x5b
272951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_TREMOLO_DEPTH 0x5c
273951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_CHORUS_DEPTH 0x5d
274951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_DETUNE_DEPTH 0x5e
275951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_CELESTE_DEPTH 0x5e
276951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_PHASER_DEPTH 0x5f
277951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_DATA_INCREMENT 0x60
278951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_DATA_DECREMENT 0x61
279951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_NONREG_PARM_NUM_LSB 0x62
280951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_NONREG_PARM_NUM_MSB 0x63
281951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_REGIST_PARM_NUM_LSB 0x64
282951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTL_REGIST_PARM_NUM_MSB 0x65
283951a39d68df598db08dfced8b4707755864a0492Ying Wang
284951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTRL_PITCH_BENDER 255
285951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTRL_PITCH_BENDER_RANGE 254
286951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTRL_EXPRESSION 253
287951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CTRL_MAIN_VOLUME 252
288951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_BALANCE 11
289951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_VOLMODE 12
290951a39d68df598db08dfced8b4707755864a0492Ying Wang
291951a39d68df598db08dfced8b4707755864a0492Ying Wang#define VOL_METHOD_ADAGIO 1
292951a39d68df598db08dfced8b4707755864a0492Ying Wang#define VOL_METHOD_LINEAR 2
293951a39d68df598db08dfced8b4707755864a0492Ying Wang
294951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_FULLSIZE 0xfd
295951a39d68df598db08dfced8b4707755864a0492Ying Wang
296951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_PRIVATE 0xfe
297951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_EXTENDED 0xff
298951a39d68df598db08dfced8b4707755864a0492Ying Wang
299951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef unsigned char sbi_instr_data[32];
300951a39d68df598db08dfced8b4707755864a0492Ying Wang
301951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct sbi_instrument {
302951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short key;
303951a39d68df598db08dfced8b4707755864a0492Ying Wang#define FM_PATCH _PATCHKEY(0x01)
304951a39d68df598db08dfced8b4707755864a0492Ying Wang#define OPL3_PATCH _PATCHKEY(0x03)
305951a39d68df598db08dfced8b4707755864a0492Ying Wang short device;
306951a39d68df598db08dfced8b4707755864a0492Ying Wang int channel;
307951a39d68df598db08dfced8b4707755864a0492Ying Wang sbi_instr_data operators;
308951a39d68df598db08dfced8b4707755864a0492Ying Wang };
309951a39d68df598db08dfced8b4707755864a0492Ying Wang
310951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct synth_info {
311951a39d68df598db08dfced8b4707755864a0492Ying Wang char name[30];
312951a39d68df598db08dfced8b4707755864a0492Ying Wang int device;
313951a39d68df598db08dfced8b4707755864a0492Ying Wang int synth_type;
314951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SYNTH_TYPE_FM 0
315951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SYNTH_TYPE_SAMPLE 1
316951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SYNTH_TYPE_MIDI 2
317951a39d68df598db08dfced8b4707755864a0492Ying Wang
318951a39d68df598db08dfced8b4707755864a0492Ying Wang int synth_subtype;
319951a39d68df598db08dfced8b4707755864a0492Ying Wang#define FM_TYPE_ADLIB 0x00
320951a39d68df598db08dfced8b4707755864a0492Ying Wang#define FM_TYPE_OPL3 0x01
321951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MIDI_TYPE_MPU401 0x401
322951a39d68df598db08dfced8b4707755864a0492Ying Wang
323951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SAMPLE_TYPE_BASIC 0x10
324951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SAMPLE_TYPE_GUS SAMPLE_TYPE_BASIC
325951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SAMPLE_TYPE_WAVEFRONT 0x11
326951a39d68df598db08dfced8b4707755864a0492Ying Wang
327951a39d68df598db08dfced8b4707755864a0492Ying Wang int perc_mode;
328951a39d68df598db08dfced8b4707755864a0492Ying Wang int nr_voices;
329951a39d68df598db08dfced8b4707755864a0492Ying Wang int nr_drums;
330951a39d68df598db08dfced8b4707755864a0492Ying Wang int instr_bank_size;
331951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned int capabilities;
332951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SYNTH_CAP_PERCMODE 0x00000001
333951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SYNTH_CAP_OPL3 0x00000002
334951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SYNTH_CAP_INPUT 0x00000004
335951a39d68df598db08dfced8b4707755864a0492Ying Wang int dummies[19];
336951a39d68df598db08dfced8b4707755864a0492Ying Wang };
337951a39d68df598db08dfced8b4707755864a0492Ying Wang
338951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct sound_timer_info {
339951a39d68df598db08dfced8b4707755864a0492Ying Wang char name[32];
340951a39d68df598db08dfced8b4707755864a0492Ying Wang int caps;
341951a39d68df598db08dfced8b4707755864a0492Ying Wang };
342951a39d68df598db08dfced8b4707755864a0492Ying Wang
343951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MIDI_CAP_MPU401 1
344951a39d68df598db08dfced8b4707755864a0492Ying Wang
345951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct midi_info {
346951a39d68df598db08dfced8b4707755864a0492Ying Wang char name[30];
347951a39d68df598db08dfced8b4707755864a0492Ying Wang int device;
348951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned int capabilities;
349951a39d68df598db08dfced8b4707755864a0492Ying Wang int dev_type;
350951a39d68df598db08dfced8b4707755864a0492Ying Wang int dummies[18];
351951a39d68df598db08dfced8b4707755864a0492Ying Wang };
352951a39d68df598db08dfced8b4707755864a0492Ying Wang
353951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct {
354951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char cmd;
355951a39d68df598db08dfced8b4707755864a0492Ying Wang char nr_args, nr_returns;
356951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char data[30];
357951a39d68df598db08dfced8b4707755864a0492Ying Wang } mpu_command_rec;
358951a39d68df598db08dfced8b4707755864a0492Ying Wang
359951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_MIDI_PRETIME _SIOWR('m', 0, int)
360951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_MIDI_MPUMODE _SIOWR('m', 1, int)
361951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_MIDI_MPUCMD _SIOWR('m', 2, mpu_command_rec)
362951a39d68df598db08dfced8b4707755864a0492Ying Wang
363951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_RESET _SIO ('P', 0)
364951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_SYNC _SIO ('P', 1)
365951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_SPEED _SIOWR('P', 2, int)
366951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_STEREO _SIOWR('P', 3, int)
367951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_GETBLKSIZE _SIOWR('P', 4, int)
368951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_SAMPLESIZE SNDCTL_DSP_SETFMT
369951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_CHANNELS _SIOWR('P', 6, int)
370951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_WRITE_CHANNELS SNDCTL_DSP_CHANNELS
371951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_WRITE_FILTER _SIOWR('P', 7, int)
372951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_POST _SIO ('P', 8)
373951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_SUBDIVIDE _SIOWR('P', 9, int)
374951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_SETFRAGMENT _SIOWR('P',10, int)
375951a39d68df598db08dfced8b4707755864a0492Ying Wang
376951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_GETFMTS _SIOR ('P',11, int)
377951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_SETFMT _SIOWR('P',5, int)
378951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AFMT_QUERY 0x00000000
379951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AFMT_MU_LAW 0x00000001
380951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AFMT_A_LAW 0x00000002
381951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AFMT_IMA_ADPCM 0x00000004
382951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AFMT_U8 0x00000008
383951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AFMT_S16_LE 0x00000010
384951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AFMT_S16_BE 0x00000020
385951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AFMT_S8 0x00000040
386951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AFMT_U16_LE 0x00000080
387951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AFMT_U16_BE 0x00000100
388951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AFMT_MPEG 0x00000200
389951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AFMT_AC3 0x00000400
390951a39d68df598db08dfced8b4707755864a0492Ying Wang
391951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct audio_buf_info {
392951a39d68df598db08dfced8b4707755864a0492Ying Wang int fragments;
393951a39d68df598db08dfced8b4707755864a0492Ying Wang int fragstotal;
394951a39d68df598db08dfced8b4707755864a0492Ying Wang int fragsize;
395951a39d68df598db08dfced8b4707755864a0492Ying Wang
396951a39d68df598db08dfced8b4707755864a0492Ying Wang int bytes;
397951a39d68df598db08dfced8b4707755864a0492Ying Wang
398951a39d68df598db08dfced8b4707755864a0492Ying Wang } audio_buf_info;
399951a39d68df598db08dfced8b4707755864a0492Ying Wang
400951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_GETOSPACE _SIOR ('P',12, audio_buf_info)
401951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_GETISPACE _SIOR ('P',13, audio_buf_info)
402951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_NONBLOCK _SIO ('P',14)
403951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_GETCAPS _SIOR ('P',15, int)
404951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_CAP_REVISION 0x000000ff
405951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_CAP_DUPLEX 0x00000100
406951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_CAP_REALTIME 0x00000200
407951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_CAP_BATCH 0x00000400
408951a39d68df598db08dfced8b4707755864a0492Ying Wang
409951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_CAP_COPROC 0x00000800
410951a39d68df598db08dfced8b4707755864a0492Ying Wang
411951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_CAP_TRIGGER 0x00001000
412951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_CAP_MMAP 0x00002000
413951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_CAP_MULTI 0x00004000
414951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_CAP_BIND 0x00008000
415951a39d68df598db08dfced8b4707755864a0492Ying Wang
416951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_GETTRIGGER _SIOR ('P',16, int)
417951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_SETTRIGGER _SIOW ('P',16, int)
418951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PCM_ENABLE_INPUT 0x00000001
419951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PCM_ENABLE_OUTPUT 0x00000002
420951a39d68df598db08dfced8b4707755864a0492Ying Wang
421951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct count_info {
422951a39d68df598db08dfced8b4707755864a0492Ying Wang int bytes;
423951a39d68df598db08dfced8b4707755864a0492Ying Wang int blocks;
424951a39d68df598db08dfced8b4707755864a0492Ying Wang int ptr;
425951a39d68df598db08dfced8b4707755864a0492Ying Wang } count_info;
426951a39d68df598db08dfced8b4707755864a0492Ying Wang
427951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_GETIPTR _SIOR ('P',17, count_info)
428951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_GETOPTR _SIOR ('P',18, count_info)
429951a39d68df598db08dfced8b4707755864a0492Ying Wang
430951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct buffmem_desc {
431951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned *buffer;
432951a39d68df598db08dfced8b4707755864a0492Ying Wang int size;
433951a39d68df598db08dfced8b4707755864a0492Ying Wang } buffmem_desc;
434951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_MAPINBUF _SIOR ('P', 19, buffmem_desc)
435951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_MAPOUTBUF _SIOR ('P', 20, buffmem_desc)
436951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_SETSYNCRO _SIO ('P', 21)
437951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_SETDUPLEX _SIO ('P', 22)
438951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_GETODELAY _SIOR ('P', 23, int)
439951a39d68df598db08dfced8b4707755864a0492Ying Wang
440951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_GETCHANNELMASK _SIOWR('P', 64, int)
441951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_BIND_CHANNEL _SIOWR('P', 65, int)
442951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_BIND_QUERY 0x00000000
443951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_BIND_FRONT 0x00000001
444951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_BIND_SURR 0x00000002
445951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_BIND_CENTER_LFE 0x00000004
446951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_BIND_HANDSET 0x00000008
447951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_BIND_MIC 0x00000010
448951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_BIND_MODEM1 0x00000020
449951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_BIND_MODEM2 0x00000040
450951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_BIND_I2S 0x00000080
451951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DSP_BIND_SPDIF 0x00000100
452951a39d68df598db08dfced8b4707755864a0492Ying Wang
453951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_SETSPDIF _SIOW ('P', 66, int)
454951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_GETSPDIF _SIOR ('P', 67, int)
455951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SPDIF_PRO 0x0001
456951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SPDIF_N_AUD 0x0002
457951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SPDIF_COPY 0x0004
458951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SPDIF_PRE 0x0008
459951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SPDIF_CC 0x07f0
460951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SPDIF_L 0x0800
461951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SPDIF_DRS 0x4000
462951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SPDIF_V 0x8000
463951a39d68df598db08dfced8b4707755864a0492Ying Wang
464951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_DSP_PROFILE _SIOW ('P', 23, int)
465951a39d68df598db08dfced8b4707755864a0492Ying Wang#define APF_NORMAL 0
466951a39d68df598db08dfced8b4707755864a0492Ying Wang#define APF_NETWORK 1
467951a39d68df598db08dfced8b4707755864a0492Ying Wang#define APF_CPUINTENS 2
468951a39d68df598db08dfced8b4707755864a0492Ying Wang
469951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_READ_RATE _SIOR ('P', 2, int)
470951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_READ_CHANNELS _SIOR ('P', 6, int)
471951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_READ_BITS _SIOR ('P', 5, int)
472951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_READ_FILTER _SIOR ('P', 7, int)
473951a39d68df598db08dfced8b4707755864a0492Ying Wang
474951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_WRITE_BITS SNDCTL_DSP_SETFMT
475951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_WRITE_RATE SNDCTL_DSP_SPEED
476951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_POST SNDCTL_DSP_POST
477951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_RESET SNDCTL_DSP_RESET
478951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_SYNC SNDCTL_DSP_SYNC
479951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_SUBDIVIDE SNDCTL_DSP_SUBDIVIDE
480951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_SETFRAGMENT SNDCTL_DSP_SETFRAGMENT
481951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_GETFMTS SNDCTL_DSP_GETFMTS
482951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_SETFMT SNDCTL_DSP_SETFMT
483951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_GETOSPACE SNDCTL_DSP_GETOSPACE
484951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_GETISPACE SNDCTL_DSP_GETISPACE
485951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_NONBLOCK SNDCTL_DSP_NONBLOCK
486951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_GETCAPS SNDCTL_DSP_GETCAPS
487951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_GETTRIGGER SNDCTL_DSP_GETTRIGGER
488951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_SETTRIGGER SNDCTL_DSP_SETTRIGGER
489951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_SETSYNCRO SNDCTL_DSP_SETSYNCRO
490951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_GETIPTR SNDCTL_DSP_GETIPTR
491951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_GETOPTR SNDCTL_DSP_GETOPTR
492951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_MAPINBUF SNDCTL_DSP_MAPINBUF
493951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_PCM_MAPOUTBUF SNDCTL_DSP_MAPOUTBUF
494951a39d68df598db08dfced8b4707755864a0492Ying Wang
495951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct copr_buffer {
496951a39d68df598db08dfced8b4707755864a0492Ying Wang int command;
497951a39d68df598db08dfced8b4707755864a0492Ying Wang int flags;
498951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CPF_NONE 0x0000
499951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CPF_FIRST 0x0001
500951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CPF_LAST 0x0002
501951a39d68df598db08dfced8b4707755864a0492Ying Wang int len;
502951a39d68df598db08dfced8b4707755864a0492Ying Wang int offs;
503951a39d68df598db08dfced8b4707755864a0492Ying Wang
504951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char data[4000];
505951a39d68df598db08dfced8b4707755864a0492Ying Wang } copr_buffer;
506951a39d68df598db08dfced8b4707755864a0492Ying Wang
507951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct copr_debug_buf {
508951a39d68df598db08dfced8b4707755864a0492Ying Wang int command;
509951a39d68df598db08dfced8b4707755864a0492Ying Wang int parm1;
510951a39d68df598db08dfced8b4707755864a0492Ying Wang int parm2;
511951a39d68df598db08dfced8b4707755864a0492Ying Wang int flags;
512951a39d68df598db08dfced8b4707755864a0492Ying Wang int len;
513951a39d68df598db08dfced8b4707755864a0492Ying Wang } copr_debug_buf;
514951a39d68df598db08dfced8b4707755864a0492Ying Wang
515951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct copr_msg {
516951a39d68df598db08dfced8b4707755864a0492Ying Wang int len;
517951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char data[4000];
518951a39d68df598db08dfced8b4707755864a0492Ying Wang } copr_msg;
519951a39d68df598db08dfced8b4707755864a0492Ying Wang
520951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_COPR_RESET _SIO ('C', 0)
521951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_COPR_LOAD _SIOWR('C', 1, copr_buffer)
522951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_COPR_RDATA _SIOWR('C', 2, copr_debug_buf)
523951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_COPR_RCODE _SIOWR('C', 3, copr_debug_buf)
524951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_COPR_WDATA _SIOW ('C', 4, copr_debug_buf)
525951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_COPR_WCODE _SIOW ('C', 5, copr_debug_buf)
526951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_COPR_RUN _SIOWR('C', 6, copr_debug_buf)
527951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_COPR_HALT _SIOWR('C', 7, copr_debug_buf)
528951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_COPR_SENDMSG _SIOWR('C', 8, copr_msg)
529951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SNDCTL_COPR_RCVMSG _SIOR ('C', 9, copr_msg)
530951a39d68df598db08dfced8b4707755864a0492Ying Wang
531951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_NRDEVICES 25
532951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_VOLUME 0
533951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_BASS 1
534951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_TREBLE 2
535951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_SYNTH 3
536951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_PCM 4
537951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_SPEAKER 5
538951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_LINE 6
539951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_MIC 7
540951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_CD 8
541951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_IMIX 9
542951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_ALTPCM 10
543951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_RECLEV 11
544951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_IGAIN 12
545951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_OGAIN 13
546951a39d68df598db08dfced8b4707755864a0492Ying Wang
547951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_LINE1 14
548951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_LINE2 15
549951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_LINE3 16
550951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_DIGITAL1 17
551951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_DIGITAL2 18
552951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_DIGITAL3 19
553951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_PHONEIN 20
554951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_PHONEOUT 21
555951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_VIDEO 22
556951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_RADIO 23
557951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_MONITOR 24
558951a39d68df598db08dfced8b4707755864a0492Ying Wang
559951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_ONOFF_MIN 28
560951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_ONOFF_MAX 30
561951a39d68df598db08dfced8b4707755864a0492Ying Wang
562951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_NONE 31
563951a39d68df598db08dfced8b4707755864a0492Ying Wang
564951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_ENHANCE SOUND_MIXER_NONE
565951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_MUTE SOUND_MIXER_NONE
566951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_LOUD SOUND_MIXER_NONE
567951a39d68df598db08dfced8b4707755864a0492Ying Wang
568951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_DEVICE_LABELS {"Vol  ", "Bass ", "Trebl", "Synth", "Pcm  ", "Spkr ", "Line ",   "Mic  ", "CD   ", "Mix  ", "Pcm2 ", "Rec  ", "IGain", "OGain",   "Line1", "Line2", "Line3", "Digital1", "Digital2", "Digital3",   "PhoneIn", "PhoneOut", "Video", "Radio", "Monitor"}
569951a39d68df598db08dfced8b4707755864a0492Ying Wang
570951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_DEVICE_NAMES {"vol", "bass", "treble", "synth", "pcm", "speaker", "line",   "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain",   "line1", "line2", "line3", "dig1", "dig2", "dig3",   "phin", "phout", "video", "radio", "monitor"}
571951a39d68df598db08dfced8b4707755864a0492Ying Wang
572951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_RECSRC 0xff
573951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_DEVMASK 0xfe
574951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_RECMASK 0xfd
575951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_CAPS 0xfc
576951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_CAP_EXCL_INPUT 0x00000001
577951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_STEREODEVS 0xfb
578951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_OUTSRC 0xfa
579951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_OUTMASK 0xf9
580951a39d68df598db08dfced8b4707755864a0492Ying Wang
581951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_VOLUME (1 << SOUND_MIXER_VOLUME)
582951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_BASS (1 << SOUND_MIXER_BASS)
583951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_TREBLE (1 << SOUND_MIXER_TREBLE)
584951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_SYNTH (1 << SOUND_MIXER_SYNTH)
585951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_PCM (1 << SOUND_MIXER_PCM)
586951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_SPEAKER (1 << SOUND_MIXER_SPEAKER)
587951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_LINE (1 << SOUND_MIXER_LINE)
588951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_MIC (1 << SOUND_MIXER_MIC)
589951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_CD (1 << SOUND_MIXER_CD)
590951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_IMIX (1 << SOUND_MIXER_IMIX)
591951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_ALTPCM (1 << SOUND_MIXER_ALTPCM)
592951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_RECLEV (1 << SOUND_MIXER_RECLEV)
593951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_IGAIN (1 << SOUND_MIXER_IGAIN)
594951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_OGAIN (1 << SOUND_MIXER_OGAIN)
595951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_LINE1 (1 << SOUND_MIXER_LINE1)
596951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_LINE2 (1 << SOUND_MIXER_LINE2)
597951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_LINE3 (1 << SOUND_MIXER_LINE3)
598951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_DIGITAL1 (1 << SOUND_MIXER_DIGITAL1)
599951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_DIGITAL2 (1 << SOUND_MIXER_DIGITAL2)
600951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_DIGITAL3 (1 << SOUND_MIXER_DIGITAL3)
601951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_PHONEIN (1 << SOUND_MIXER_PHONEIN)
602951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_PHONEOUT (1 << SOUND_MIXER_PHONEOUT)
603951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_RADIO (1 << SOUND_MIXER_RADIO)
604951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_VIDEO (1 << SOUND_MIXER_VIDEO)
605951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_MONITOR (1 << SOUND_MIXER_MONITOR)
606951a39d68df598db08dfced8b4707755864a0492Ying Wang
607951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_MUTE (1 << SOUND_MIXER_MUTE)
608951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_ENHANCE (1 << SOUND_MIXER_ENHANCE)
609951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MASK_LOUD (1 << SOUND_MIXER_LOUD)
610951a39d68df598db08dfced8b4707755864a0492Ying Wang
611951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MIXER_READ(dev) _SIOR('M', dev, int)
612951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_VOLUME MIXER_READ(SOUND_MIXER_VOLUME)
613951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_BASS MIXER_READ(SOUND_MIXER_BASS)
614951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_TREBLE MIXER_READ(SOUND_MIXER_TREBLE)
615951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_SYNTH MIXER_READ(SOUND_MIXER_SYNTH)
616951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_PCM MIXER_READ(SOUND_MIXER_PCM)
617951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_SPEAKER MIXER_READ(SOUND_MIXER_SPEAKER)
618951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_LINE MIXER_READ(SOUND_MIXER_LINE)
619951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_MIC MIXER_READ(SOUND_MIXER_MIC)
620951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_CD MIXER_READ(SOUND_MIXER_CD)
621951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_IMIX MIXER_READ(SOUND_MIXER_IMIX)
622951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_ALTPCM MIXER_READ(SOUND_MIXER_ALTPCM)
623951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_RECLEV MIXER_READ(SOUND_MIXER_RECLEV)
624951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_IGAIN MIXER_READ(SOUND_MIXER_IGAIN)
625951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_OGAIN MIXER_READ(SOUND_MIXER_OGAIN)
626951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_LINE1 MIXER_READ(SOUND_MIXER_LINE1)
627951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_LINE2 MIXER_READ(SOUND_MIXER_LINE2)
628951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_LINE3 MIXER_READ(SOUND_MIXER_LINE3)
629951a39d68df598db08dfced8b4707755864a0492Ying Wang
630951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_MUTE MIXER_READ(SOUND_MIXER_MUTE)
631951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_ENHANCE MIXER_READ(SOUND_MIXER_ENHANCE)
632951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_LOUD MIXER_READ(SOUND_MIXER_LOUD)
633951a39d68df598db08dfced8b4707755864a0492Ying Wang
634951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_RECSRC MIXER_READ(SOUND_MIXER_RECSRC)
635951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_DEVMASK MIXER_READ(SOUND_MIXER_DEVMASK)
636951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_RECMASK MIXER_READ(SOUND_MIXER_RECMASK)
637951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_STEREODEVS MIXER_READ(SOUND_MIXER_STEREODEVS)
638951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_READ_CAPS MIXER_READ(SOUND_MIXER_CAPS)
639951a39d68df598db08dfced8b4707755864a0492Ying Wang
640951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MIXER_WRITE(dev) _SIOWR('M', dev, int)
641951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_VOLUME MIXER_WRITE(SOUND_MIXER_VOLUME)
642951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_BASS MIXER_WRITE(SOUND_MIXER_BASS)
643951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_TREBLE MIXER_WRITE(SOUND_MIXER_TREBLE)
644951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_SYNTH MIXER_WRITE(SOUND_MIXER_SYNTH)
645951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_PCM MIXER_WRITE(SOUND_MIXER_PCM)
646951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_SPEAKER MIXER_WRITE(SOUND_MIXER_SPEAKER)
647951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_LINE MIXER_WRITE(SOUND_MIXER_LINE)
648951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_MIC MIXER_WRITE(SOUND_MIXER_MIC)
649951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_CD MIXER_WRITE(SOUND_MIXER_CD)
650951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_IMIX MIXER_WRITE(SOUND_MIXER_IMIX)
651951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_ALTPCM MIXER_WRITE(SOUND_MIXER_ALTPCM)
652951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_RECLEV MIXER_WRITE(SOUND_MIXER_RECLEV)
653951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_IGAIN MIXER_WRITE(SOUND_MIXER_IGAIN)
654951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_OGAIN MIXER_WRITE(SOUND_MIXER_OGAIN)
655951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_LINE1 MIXER_WRITE(SOUND_MIXER_LINE1)
656951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_LINE2 MIXER_WRITE(SOUND_MIXER_LINE2)
657951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_LINE3 MIXER_WRITE(SOUND_MIXER_LINE3)
658951a39d68df598db08dfced8b4707755864a0492Ying Wang
659951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_MUTE MIXER_WRITE(SOUND_MIXER_MUTE)
660951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_ENHANCE MIXER_WRITE(SOUND_MIXER_ENHANCE)
661951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_LOUD MIXER_WRITE(SOUND_MIXER_LOUD)
662951a39d68df598db08dfced8b4707755864a0492Ying Wang
663951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_WRITE_RECSRC MIXER_WRITE(SOUND_MIXER_RECSRC)
664951a39d68df598db08dfced8b4707755864a0492Ying Wang
665951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct mixer_info
666951a39d68df598db08dfced8b4707755864a0492Ying Wang{
667951a39d68df598db08dfced8b4707755864a0492Ying Wang char id[16];
668951a39d68df598db08dfced8b4707755864a0492Ying Wang char name[32];
669951a39d68df598db08dfced8b4707755864a0492Ying Wang int modify_counter;
670951a39d68df598db08dfced8b4707755864a0492Ying Wang int fillers[10];
671951a39d68df598db08dfced8b4707755864a0492Ying Wang} mixer_info;
672951a39d68df598db08dfced8b4707755864a0492Ying Wang
673951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct _old_mixer_info
674951a39d68df598db08dfced8b4707755864a0492Ying Wang{
675951a39d68df598db08dfced8b4707755864a0492Ying Wang char id[16];
676951a39d68df598db08dfced8b4707755864a0492Ying Wang char name[32];
677951a39d68df598db08dfced8b4707755864a0492Ying Wang} _old_mixer_info;
678951a39d68df598db08dfced8b4707755864a0492Ying Wang
679951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_INFO _SIOR ('M', 101, mixer_info)
680951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_OLD_MIXER_INFO _SIOR ('M', 101, _old_mixer_info)
681951a39d68df598db08dfced8b4707755864a0492Ying Wang
682951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef unsigned char mixer_record[128];
683951a39d68df598db08dfced8b4707755864a0492Ying Wang
684951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_ACCESS _SIOWR('M', 102, mixer_record)
685951a39d68df598db08dfced8b4707755864a0492Ying Wang
686951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_AGC _SIOWR('M', 103, int)
687951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_3DSE _SIOWR('M', 104, int)
688951a39d68df598db08dfced8b4707755864a0492Ying Wang
689951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_PRIVATE1 _SIOWR('M', 111, int)
690951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_PRIVATE2 _SIOWR('M', 112, int)
691951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_PRIVATE3 _SIOWR('M', 113, int)
692951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_PRIVATE4 _SIOWR('M', 114, int)
693951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_PRIVATE5 _SIOWR('M', 115, int)
694951a39d68df598db08dfced8b4707755864a0492Ying Wang
695951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct mixer_vol_table {
696951a39d68df598db08dfced8b4707755864a0492Ying Wang int num;
697951a39d68df598db08dfced8b4707755864a0492Ying Wang char name[32];
698951a39d68df598db08dfced8b4707755864a0492Ying Wang int levels[32];
699951a39d68df598db08dfced8b4707755864a0492Ying Wang} mixer_vol_table;
700951a39d68df598db08dfced8b4707755864a0492Ying Wang
701951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_GETLEVELS _SIOWR('M', 116, mixer_vol_table)
702951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOUND_MIXER_SETLEVELS _SIOWR('M', 117, mixer_vol_table)
703951a39d68df598db08dfced8b4707755864a0492Ying Wang
704951a39d68df598db08dfced8b4707755864a0492Ying Wang#define OSS_GETVERSION _SIOR ('M', 118, int)
705951a39d68df598db08dfced8b4707755864a0492Ying Wang
706951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EV_SEQ_LOCAL 0x80
707951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EV_TIMING 0x81
708951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EV_CHN_COMMON 0x92
709951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EV_CHN_VOICE 0x93
710951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EV_SYSEX 0x94
711951a39d68df598db08dfced8b4707755864a0492Ying Wang
712951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MIDI_NOTEOFF 0x80
713951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MIDI_NOTEON 0x90
714951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MIDI_KEY_PRESSURE 0xA0
715951a39d68df598db08dfced8b4707755864a0492Ying Wang
716951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MIDI_CTL_CHANGE 0xB0
717951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MIDI_PGM_CHANGE 0xC0
718951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MIDI_CHN_PRESSURE 0xD0
719951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MIDI_PITCH_BEND 0xE0
720951a39d68df598db08dfced8b4707755864a0492Ying Wang
721951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MIDI_SYSTEM_PREFIX 0xF0
722951a39d68df598db08dfced8b4707755864a0492Ying Wang
723951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TMR_WAIT_REL 1
724951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TMR_WAIT_ABS 2
725951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TMR_STOP 3
726951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TMR_START 4
727951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TMR_CONTINUE 5
728951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TMR_TEMPO 6
729951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TMR_ECHO 8
730951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TMR_CLOCK 9
731951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TMR_SPP 10
732951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TMR_TIMESIG 11
733951a39d68df598db08dfced8b4707755864a0492Ying Wang
734951a39d68df598db08dfced8b4707755864a0492Ying Wang#define LOCL_STARTAUDIO 1
735951a39d68df598db08dfced8b4707755864a0492Ying Wang
736951a39d68df598db08dfced8b4707755864a0492Ying Wang#if !defined(__KERNEL__) && !defined(KERNEL) && !defined(INKERNEL) && !defined(_KERNEL) || defined(USE_SEQ_MACROS)
737951a39d68df598db08dfced8b4707755864a0492Ying Wang
738951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_DECLAREBUF() SEQ_USE_EXTBUF()
739951a39d68df598db08dfced8b4707755864a0492Ying Wang
740951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_PM_DEFINES int __foo_bar___
741951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef OSSLIB
742951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_USE_EXTBUF()   extern unsigned char *_seqbuf;   extern int _seqbuflen;extern int _seqbufptr
743951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_DEFINEBUF(len) SEQ_USE_EXTBUF();static int _requested_seqbuflen=len
744951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SEQ_ADVBUF(len) OSS_seq_advbuf(len, seqfd, _seqbuf, _seqbuflen)
745951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SEQ_NEEDBUF(len) OSS_seq_needbuf(len, seqfd, _seqbuf, _seqbuflen)
746951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_DUMPBUF() OSS_seqbuf_dump(seqfd, _seqbuf, _seqbuflen)
747951a39d68df598db08dfced8b4707755864a0492Ying Wang
748951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_LOAD_GMINSTR(dev, instr)   OSS_patch_caching(dev, -1, instr, seqfd, _seqbuf, _seqbuflen)
749951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_LOAD_GMDRUM(dev, drum)   OSS_drum_caching(dev, -1, drum, seqfd, _seqbuf, _seqbuflen)
750951a39d68df598db08dfced8b4707755864a0492Ying Wang#else
751951a39d68df598db08dfced8b4707755864a0492Ying Wang
752951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_LOAD_GMINSTR(dev, instr)
753951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_LOAD_GMDRUM(dev, drum)
754951a39d68df598db08dfced8b4707755864a0492Ying Wang
755951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_USE_EXTBUF()   extern unsigned char _seqbuf[];   extern int _seqbuflen;extern int _seqbufptr
756951a39d68df598db08dfced8b4707755864a0492Ying Wang
757951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef USE_SIMPLE_MACROS
758951a39d68df598db08dfced8b4707755864a0492Ying Wang
759951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_DEFINEBUF(len) unsigned char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0
760951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SEQ_NEEDBUF(len) if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump()
761951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SEQ_ADVBUF(len) _seqbufptr += len
762951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_DUMPBUF seqbuf_dump
763951a39d68df598db08dfced8b4707755864a0492Ying Wang#else
764951a39d68df598db08dfced8b4707755864a0492Ying Wang
765951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _SEQ_NEEDBUF(len)
766951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
767951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
768951a39d68df598db08dfced8b4707755864a0492Ying Wang
769951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_VOLUME_MODE(dev, mode) {_SEQ_NEEDBUF(8);  _seqbuf[_seqbufptr] = SEQ_EXTENDED;  _seqbuf[_seqbufptr+1] = SEQ_VOLMODE;  _seqbuf[_seqbufptr+2] = (dev);  _seqbuf[_seqbufptr+3] = (mode);  _seqbuf[_seqbufptr+4] = 0;  _seqbuf[_seqbufptr+5] = 0;  _seqbuf[_seqbufptr+6] = 0;  _seqbuf[_seqbufptr+7] = 0;  _SEQ_ADVBUF(8);}
770951a39d68df598db08dfced8b4707755864a0492Ying Wang
771951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _CHN_VOICE(dev, event, chn, note, parm)   {_SEQ_NEEDBUF(8);  _seqbuf[_seqbufptr] = EV_CHN_VOICE;  _seqbuf[_seqbufptr+1] = (dev);  _seqbuf[_seqbufptr+2] = (event);  _seqbuf[_seqbufptr+3] = (chn);  _seqbuf[_seqbufptr+4] = (note);  _seqbuf[_seqbufptr+5] = (parm);  _seqbuf[_seqbufptr+6] = (0);  _seqbuf[_seqbufptr+7] = 0;  _SEQ_ADVBUF(8);}
772951a39d68df598db08dfced8b4707755864a0492Ying Wang
773951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_START_NOTE(dev, chn, note, vol)   _CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol)
774951a39d68df598db08dfced8b4707755864a0492Ying Wang
775951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_STOP_NOTE(dev, chn, note, vol)   _CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol)
776951a39d68df598db08dfced8b4707755864a0492Ying Wang
777951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_KEY_PRESSURE(dev, chn, note, pressure)   _CHN_VOICE(dev, MIDI_KEY_PRESSURE, chn, note, pressure)
778951a39d68df598db08dfced8b4707755864a0492Ying Wang
779951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _CHN_COMMON(dev, event, chn, p1, p2, w14)   {_SEQ_NEEDBUF(8);  _seqbuf[_seqbufptr] = EV_CHN_COMMON;  _seqbuf[_seqbufptr+1] = (dev);  _seqbuf[_seqbufptr+2] = (event);  _seqbuf[_seqbufptr+3] = (chn);  _seqbuf[_seqbufptr+4] = (p1);  _seqbuf[_seqbufptr+5] = (p2);  *(short *)&_seqbuf[_seqbufptr+6] = (w14);  _SEQ_ADVBUF(8);}
780951a39d68df598db08dfced8b4707755864a0492Ying Wang
781951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_SYSEX(dev, buf, len)   {int ii, ll=(len);   unsigned char *bufp=buf;  if (ll>6)ll=6;  _SEQ_NEEDBUF(8);  _seqbuf[_seqbufptr] = EV_SYSEX;  _seqbuf[_seqbufptr+1] = (dev);  for(ii=0;ii<ll;ii++)  _seqbuf[_seqbufptr+ii+2] = bufp[ii];  for(ii=ll;ii<6;ii++)  _seqbuf[_seqbufptr+ii+2] = 0xff;  _SEQ_ADVBUF(8);}
782951a39d68df598db08dfced8b4707755864a0492Ying Wang
783951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_CHN_PRESSURE(dev, chn, pressure)   _CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0)
784951a39d68df598db08dfced8b4707755864a0492Ying Wang
785951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_SET_PATCH SEQ_PGM_CHANGE
786951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef OSSLIB
787951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_PGM_CHANGE(dev, chn, patch)   {OSS_patch_caching(dev, chn, patch, seqfd, _seqbuf, _seqbuflen);   _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0);}
788951a39d68df598db08dfced8b4707755864a0492Ying Wang#else
789951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_PGM_CHANGE(dev, chn, patch)   _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0)
790951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
791951a39d68df598db08dfced8b4707755864a0492Ying Wang
792951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_CONTROL(dev, chn, controller, value)   _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value)
793951a39d68df598db08dfced8b4707755864a0492Ying Wang
794951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_BENDER(dev, chn, value)   _CHN_COMMON(dev, MIDI_PITCH_BEND, chn, 0, 0, value)
795951a39d68df598db08dfced8b4707755864a0492Ying Wang
796951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_V2_X_CONTROL(dev, voice, controller, value) {_SEQ_NEEDBUF(8);  _seqbuf[_seqbufptr] = SEQ_EXTENDED;  _seqbuf[_seqbufptr+1] = SEQ_CONTROLLER;  _seqbuf[_seqbufptr+2] = (dev);  _seqbuf[_seqbufptr+3] = (voice);  _seqbuf[_seqbufptr+4] = (controller);  _seqbuf[_seqbufptr+5] = ((value)&0xff);  _seqbuf[_seqbufptr+6] = ((value>>8)&0xff);  _seqbuf[_seqbufptr+7] = 0;  _SEQ_ADVBUF(8);}
797951a39d68df598db08dfced8b4707755864a0492Ying Wang
798951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_PITCHBEND(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER, value)
799951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_BENDER_RANGE(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value)
800951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_EXPRESSION(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_EXPRESSION, value*128)
801951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_MAIN_VOLUME(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_MAIN_VOLUME, (value*16383)/100)
802951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_PANNING(dev, voice, pos) SEQ_CONTROL(dev, voice, CTL_PAN, (pos+128) / 2)
803951a39d68df598db08dfced8b4707755864a0492Ying Wang
804951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _TIMER_EVENT(ev, parm) {_SEQ_NEEDBUF(8);  _seqbuf[_seqbufptr+0] = EV_TIMING;   _seqbuf[_seqbufptr+1] = (ev);   _seqbuf[_seqbufptr+2] = 0;  _seqbuf[_seqbufptr+3] = 0;  *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm);   _SEQ_ADVBUF(8);}
805951a39d68df598db08dfced8b4707755864a0492Ying Wang
806951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_START_TIMER() _TIMER_EVENT(TMR_START, 0)
807951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_STOP_TIMER() _TIMER_EVENT(TMR_STOP, 0)
808951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_CONTINUE_TIMER() _TIMER_EVENT(TMR_CONTINUE, 0)
809951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_WAIT_TIME(ticks) _TIMER_EVENT(TMR_WAIT_ABS, ticks)
810951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_DELTA_TIME(ticks) _TIMER_EVENT(TMR_WAIT_REL, ticks)
811951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_ECHO_BACK(key) _TIMER_EVENT(TMR_ECHO, key)
812951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_SET_TEMPO(value) _TIMER_EVENT(TMR_TEMPO, value)
813951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_SONGPOS(pos) _TIMER_EVENT(TMR_SPP, pos)
814951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_TIME_SIGNATURE(sig) _TIMER_EVENT(TMR_TIMESIG, sig)
815951a39d68df598db08dfced8b4707755864a0492Ying Wang
816951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _LOCAL_EVENT(ev, parm) {_SEQ_NEEDBUF(8);  _seqbuf[_seqbufptr+0] = EV_SEQ_LOCAL;   _seqbuf[_seqbufptr+1] = (ev);   _seqbuf[_seqbufptr+2] = 0;  _seqbuf[_seqbufptr+3] = 0;  *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm);   _SEQ_ADVBUF(8);}
817951a39d68df598db08dfced8b4707755864a0492Ying Wang
818951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_PLAYAUDIO(devmask) _LOCAL_EVENT(LOCL_STARTAUDIO, devmask)
819951a39d68df598db08dfced8b4707755864a0492Ying Wang
820951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_MIDIOUT(device, byte) {_SEQ_NEEDBUF(4);  _seqbuf[_seqbufptr] = SEQ_MIDIPUTC;  _seqbuf[_seqbufptr+1] = (byte);  _seqbuf[_seqbufptr+2] = (device);  _seqbuf[_seqbufptr+3] = 0;  _SEQ_ADVBUF(4);}
821951a39d68df598db08dfced8b4707755864a0492Ying Wang
822951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef OSSLIB
823951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_WRPATCH(patchx, len)   OSS_write_patch(seqfd, (char*)(patchx), len)
824951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_WRPATCH2(patchx, len)   OSS_write_patch2(seqfd, (char*)(patchx), len)
825951a39d68df598db08dfced8b4707755864a0492Ying Wang#else
826951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_WRPATCH(patchx, len)   {if (_seqbufptr) SEQ_DUMPBUF();  if (write(seqfd, (char*)(patchx), len)==-1)   perror("Write patch: /dev/sequencer");}
827951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SEQ_WRPATCH2(patchx, len)   (SEQ_DUMPBUF(), write(seqfd, (char*)(patchx), len))
828951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
829951a39d68df598db08dfced8b4707755864a0492Ying Wang
830951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
831951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
832