111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************************
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   This header was automatically generated from a Linux kernel header
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   of the same name, to make information necessary for userspace to
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   call into the kernel available to libc.  It contains only constants,
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   structures, and macros generated from the original header, and thus,
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   contains no copyrightable information.
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************/
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef SOUNDCARD_H
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUNDCARD_H
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_VERSION 0x030802
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define OPEN_SOUND_SYSTEM
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/ioctl.h>
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <endian.h>
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_ADLIB 1
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_SB 2
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_PAS 3
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_GUS 4
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_MPU401 5
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_SB16 6
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_SB16MIDI 7
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_UART6850 8
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_GUS16 9
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_MSS 10
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_PSS 11
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_SSCAPE 12
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_PSS_MPU 13
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_PSS_MSS 14
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_SSCAPE_MSS 15
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_TRXPRO 16
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_TRXPRO_SB 17
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_TRXPRO_MPU 18
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_MAD16 19
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_MAD16_MPU 20
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_CS4232 21
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_CS4232_MPU 22
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_MAUI 23
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_PSEUDO_MSS 24
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_GUSPNP 25
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCARD_UART401 26
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _SIOWR
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(_IOWR) && (defined(_AIX) || !defined(sun) && !defined(sparc) && !defined(__sparc__) && !defined(__INCioctlh) && !defined(__Lynx__))
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SIOCPARM_MASK IOCPARM_MASK
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SIOC_VOID IOC_VOID
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SIOC_OUT IOC_OUT
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SIOC_IN IOC_IN
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SIOC_INOUT IOC_INOUT
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIOC_SIZE _IOC_SIZE
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIOC_DIR _IOC_DIR
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIOC_NONE _IOC_NONE
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIOC_READ _IOC_READ
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIOC_WRITE _IOC_WRITE
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIO _IO
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIOR _IOR
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIOW _IOW
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIOWR _IOWR
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SIOCPARM_MASK 0x1fff
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SIOC_VOID 0x00000000
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SIOC_OUT 0x20000000
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SIOC_IN 0x40000000
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SIOC_INOUT (SIOC_IN|SIOC_OUT)
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIO(x,y) ((int)(SIOC_VOID|(x<<8)|y))
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIOR(x,y,t) ((int)(SIOC_OUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIOW(x,y,t) ((int)(SIOC_IN|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIOWR(x,y,t) ((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIOC_SIZE(x) ((x>>16)&SIOCPARM_MASK)
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIOC_DIR(x) (x & 0xf0000000)
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIOC_NONE SIOC_VOID
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIOC_READ SIOC_OUT
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SIOC_WRITE SIOC_IN
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SEQ_RESET _SIO ('Q', 0)
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SEQ_SYNC _SIO ('Q', 1)
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SYNTH_INFO _SIOWR('Q', 2, struct synth_info)
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SEQ_CTRLRATE _SIOWR('Q', 3, int)
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SEQ_GETOUTCOUNT _SIOR ('Q', 4, int)
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SEQ_GETINCOUNT _SIOR ('Q', 5, int)
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SEQ_PERCMODE _SIOW ('Q', 6, int)
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_FM_LOAD_INSTR _SIOW ('Q', 7, struct sbi_instrument)
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SEQ_TESTMIDI _SIOW ('Q', 8, int)
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SEQ_RESETSAMPLES _SIOW ('Q', 9, int)
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SEQ_NRSYNTHS _SIOR ('Q',10, int)
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SEQ_NRMIDIS _SIOR ('Q',11, int)
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_MIDI_INFO _SIOWR('Q',12, struct midi_info)
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SEQ_THRESHOLD _SIOW ('Q',13, int)
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SYNTH_MEMAVL _SIOWR('Q',14, int)
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_FM_4OP_ENABLE _SIOW ('Q',15, int)
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SEQ_PANIC _SIO ('Q',17)
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SEQ_OUTOFBAND _SIOW ('Q',18, struct seq_event_rec)
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SEQ_GETTIME _SIOR ('Q',19, int)
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SYNTH_ID _SIOWR('Q',20, struct synth_info)
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SYNTH_CONTROL _SIOWR('Q',21, struct synth_control)
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_SYNTH_REMOVESAMPLE _SIOWR('Q',22, struct remove_sample)
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct synth_control
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int devno;
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char data[4000];
11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}synth_control;
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct remove_sample
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int devno;
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int bankno;
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int instrno;
12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} remove_sample;
12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct seq_event_rec {
12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char arr[8];
12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} seq_event_rec;
12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_TMR_TIMEBASE _SIOWR('T', 1, int)
12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_TMR_START _SIO ('T', 2)
12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_TMR_STOP _SIO ('T', 3)
13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_TMR_CONTINUE _SIO ('T', 4)
13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_TMR_TEMPO _SIOWR('T', 5, int)
13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_TMR_SOURCE _SIOWR('T', 6, int)
13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define TMR_INTERNAL 0x00000001
13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define TMR_EXTERNAL 0x00000002
13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define TMR_MODE_MIDI 0x00000010
13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define TMR_MODE_FSK 0x00000020
13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define TMR_MODE_CLS 0x00000040
13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define TMR_MODE_SMPTE 0x00000080
13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_TMR_METRONOME _SIOW ('T', 7, int)
14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_TMR_SELECT _SIOW ('T', 8, int)
14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _LINUX_PATCHKEY_H_INDIRECT
14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/patchkey.h>
14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#undef _LINUX_PATCHKEY_H_INDIRECT
14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef __BYTE_ORDER
14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if __BYTE_ORDER == __BIG_ENDIAN
14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define AFMT_S16_NE AFMT_S16_BE
14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#elif __BYTE_ORDER == __LITTLE_ENDIAN
15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define AFMT_S16_NE AFMT_S16_LE
15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else
15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#error "could not determine byte order"
15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct patch_info {
15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short key;
15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define WAVE_PATCH _PATCHKEY(0x04)
15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define GUS_PATCH WAVE_PATCH
16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define WAVEFRONT_PATCH _PATCHKEY(0x06)
16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert short device_no;
16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert short instr_no;
16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int mode;
16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define WAVE_16_BITS 0x01
16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define WAVE_UNSIGNED 0x02
16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define WAVE_LOOPING 0x04
17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define WAVE_BIDIR_LOOP 0x08
17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define WAVE_LOOP_BACK 0x10
17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define WAVE_SUSTAIN_ON 0x20
17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define WAVE_ENVELOPES 0x40
17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define WAVE_FAST_RELEASE 0x80
17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define WAVE_VIBRATO 0x00010000
17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define WAVE_TREMOLO 0x00020000
17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define WAVE_SCALE 0x00040000
17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define WAVE_FRACTIONS 0x00080000
18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define WAVE_ROM 0x40000000
18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define WAVE_MULAW 0x20000000
18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int len;
18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int loop_start, loop_end;
18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int base_freq;
18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int base_note;
18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int high_note;
19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int low_note;
19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int panning;
19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int detuning;
19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char env_rate[ 6 ];
19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char env_offset[ 6 ];
19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char tremolo_sweep;
19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char tremolo_rate;
19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char tremolo_depth;
20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char vibrato_sweep;
20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char vibrato_rate;
20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char vibrato_depth;
20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int scale_frequency;
20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int scale_factor;
20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int volume;
20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int fractions;
21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int reserved1;
21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int spare[2];
21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char data[1];
21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert };
21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct sysex_info {
21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert short key;
21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SYSEX_PATCH _PATCHKEY(0x05)
21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MAUI_PATCH _PATCHKEY(0x06)
21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert short device_no;
22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int len;
22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char data[1];
22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert };
22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_NOTEOFF 0
22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_FMNOTEOFF SEQ_NOTEOFF
22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_NOTEON 1
22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_FMNOTEON SEQ_NOTEON
22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_WAIT TMR_WAIT_ABS
22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_PGMCHANGE 3
23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_FMPGMCHANGE SEQ_PGMCHANGE
23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_SYNCTIMER TMR_START
23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_MIDIPUTC 5
23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_DRUMON 6
23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_DRUMOFF 7
23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_ECHO TMR_ECHO
23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_AFTERTOUCH 9
23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_CONTROLLER 10
23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_BANK_SELECT 0x00
24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_MODWHEEL 0x01
24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_BREATH 0x02
24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_FOOT 0x04
24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_PORTAMENTO_TIME 0x05
24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_DATA_ENTRY 0x06
24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_MAIN_VOLUME 0x07
24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_BALANCE 0x08
24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_PAN 0x0a
25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_EXPRESSION 0x0b
25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_GENERAL_PURPOSE1 0x10
25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_GENERAL_PURPOSE2 0x11
25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_GENERAL_PURPOSE3 0x12
25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_GENERAL_PURPOSE4 0x13
25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_DAMPER_PEDAL 0x40
25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_SUSTAIN 0x40
25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_HOLD 0x40
26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_PORTAMENTO 0x41
26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_SOSTENUTO 0x42
26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_SOFT_PEDAL 0x43
26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_HOLD2 0x45
26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_GENERAL_PURPOSE5 0x50
26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_GENERAL_PURPOSE6 0x51
26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_GENERAL_PURPOSE7 0x52
26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_GENERAL_PURPOSE8 0x53
27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_EXT_EFF_DEPTH 0x5b
27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_TREMOLO_DEPTH 0x5c
27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_CHORUS_DEPTH 0x5d
27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_DETUNE_DEPTH 0x5e
27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_CELESTE_DEPTH 0x5e
27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_PHASER_DEPTH 0x5f
27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_DATA_INCREMENT 0x60
27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_DATA_DECREMENT 0x61
27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_NONREG_PARM_NUM_LSB 0x62
28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_NONREG_PARM_NUM_MSB 0x63
28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_REGIST_PARM_NUM_LSB 0x64
28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTL_REGIST_PARM_NUM_MSB 0x65
28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTRL_PITCH_BENDER 255
28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTRL_PITCH_BENDER_RANGE 254
28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTRL_EXPRESSION 253
28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CTRL_MAIN_VOLUME 252
28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_BALANCE 11
28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_VOLMODE 12
29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define VOL_METHOD_ADAGIO 1
29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define VOL_METHOD_LINEAR 2
29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_FULLSIZE 0xfd
29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_PRIVATE 0xfe
29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_EXTENDED 0xff
29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
29911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef unsigned char sbi_instr_data[32];
30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct sbi_instrument {
30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short key;
30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FM_PATCH _PATCHKEY(0x01)
30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define OPL3_PATCH _PATCHKEY(0x03)
30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert short device;
30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int channel;
30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert sbi_instr_data operators;
30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert };
30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct synth_info {
31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char name[30];
31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int device;
31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int synth_type;
31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SYNTH_TYPE_FM 0
31511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SYNTH_TYPE_SAMPLE 1
31611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SYNTH_TYPE_MIDI 2
31711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
31811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int synth_subtype;
31911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FM_TYPE_ADLIB 0x00
32011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define FM_TYPE_OPL3 0x01
32111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MIDI_TYPE_MPU401 0x401
32211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
32311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SAMPLE_TYPE_BASIC 0x10
32411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SAMPLE_TYPE_GUS SAMPLE_TYPE_BASIC
32511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SAMPLE_TYPE_WAVEFRONT 0x11
32611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
32711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int perc_mode;
32811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int nr_voices;
32911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int nr_drums;
33011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int instr_bank_size;
33111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int capabilities;
33211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SYNTH_CAP_PERCMODE 0x00000001
33311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SYNTH_CAP_OPL3 0x00000002
33411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SYNTH_CAP_INPUT 0x00000004
33511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int dummies[19];
33611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert };
33711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
33811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct sound_timer_info {
33911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char name[32];
34011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int caps;
34111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert };
34211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
34311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MIDI_CAP_MPU401 1
34411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
34511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct midi_info {
34611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char name[30];
34711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int device;
34811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int capabilities;
34911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int dev_type;
35011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int dummies[18];
35111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert };
35211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
35311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct {
35411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char cmd;
35511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char nr_args, nr_returns;
35611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char data[30];
35711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } mpu_command_rec;
35811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
35911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_MIDI_PRETIME _SIOWR('m', 0, int)
36011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_MIDI_MPUMODE _SIOWR('m', 1, int)
36111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_MIDI_MPUCMD _SIOWR('m', 2, mpu_command_rec)
36211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
36311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_RESET _SIO ('P', 0)
36411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_SYNC _SIO ('P', 1)
36511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_SPEED _SIOWR('P', 2, int)
36611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_STEREO _SIOWR('P', 3, int)
36711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_GETBLKSIZE _SIOWR('P', 4, int)
36811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_SAMPLESIZE SNDCTL_DSP_SETFMT
36911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_CHANNELS _SIOWR('P', 6, int)
37011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_WRITE_CHANNELS SNDCTL_DSP_CHANNELS
37111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_WRITE_FILTER _SIOWR('P', 7, int)
37211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_POST _SIO ('P', 8)
37311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_SUBDIVIDE _SIOWR('P', 9, int)
37411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_SETFRAGMENT _SIOWR('P',10, int)
37511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
37611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_GETFMTS _SIOR ('P',11, int)
37711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_SETFMT _SIOWR('P',5, int)
37811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define AFMT_QUERY 0x00000000
37911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define AFMT_MU_LAW 0x00000001
38011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define AFMT_A_LAW 0x00000002
38111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define AFMT_IMA_ADPCM 0x00000004
38211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define AFMT_U8 0x00000008
38311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define AFMT_S16_LE 0x00000010
38411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define AFMT_S16_BE 0x00000020
38511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define AFMT_S8 0x00000040
38611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define AFMT_U16_LE 0x00000080
38711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define AFMT_U16_BE 0x00000100
38811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define AFMT_MPEG 0x00000200
38911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define AFMT_AC3 0x00000400
39011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
39111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct audio_buf_info {
39211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int fragments;
39311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int fragstotal;
39411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int fragsize;
39511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
39611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int bytes;
39711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
39811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } audio_buf_info;
39911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
40011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_GETOSPACE _SIOR ('P',12, audio_buf_info)
40111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_GETISPACE _SIOR ('P',13, audio_buf_info)
40211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_NONBLOCK _SIO ('P',14)
40311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_GETCAPS _SIOR ('P',15, int)
40411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_CAP_REVISION 0x000000ff
40511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_CAP_DUPLEX 0x00000100
40611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_CAP_REALTIME 0x00000200
40711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_CAP_BATCH 0x00000400
40811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
40911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_CAP_COPROC 0x00000800
41011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
41111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_CAP_TRIGGER 0x00001000
41211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_CAP_MMAP 0x00002000
41311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_CAP_MULTI 0x00004000
41411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_CAP_BIND 0x00008000
41511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
41611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_GETTRIGGER _SIOR ('P',16, int)
41711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_SETTRIGGER _SIOW ('P',16, int)
41811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PCM_ENABLE_INPUT 0x00000001
41911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PCM_ENABLE_OUTPUT 0x00000002
42011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
42111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct count_info {
42211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int bytes;
42311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int blocks;
42411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int ptr;
42511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } count_info;
42611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
42711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_GETIPTR _SIOR ('P',17, count_info)
42811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_GETOPTR _SIOR ('P',18, count_info)
42911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
43011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct buffmem_desc {
43111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned *buffer;
43211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int size;
43311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } buffmem_desc;
43411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_MAPINBUF _SIOR ('P', 19, buffmem_desc)
43511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_MAPOUTBUF _SIOR ('P', 20, buffmem_desc)
43611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_SETSYNCRO _SIO ('P', 21)
43711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_SETDUPLEX _SIO ('P', 22)
43811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_GETODELAY _SIOR ('P', 23, int)
43911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
44011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_GETCHANNELMASK _SIOWR('P', 64, int)
44111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_BIND_CHANNEL _SIOWR('P', 65, int)
44211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_BIND_QUERY 0x00000000
44311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_BIND_FRONT 0x00000001
44411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_BIND_SURR 0x00000002
44511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_BIND_CENTER_LFE 0x00000004
44611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_BIND_HANDSET 0x00000008
44711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_BIND_MIC 0x00000010
44811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_BIND_MODEM1 0x00000020
44911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_BIND_MODEM2 0x00000040
45011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_BIND_I2S 0x00000080
45111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DSP_BIND_SPDIF 0x00000100
45211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
45311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_SETSPDIF _SIOW ('P', 66, int)
45411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_GETSPDIF _SIOR ('P', 67, int)
45511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SPDIF_PRO 0x0001
45611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SPDIF_N_AUD 0x0002
45711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SPDIF_COPY 0x0004
45811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SPDIF_PRE 0x0008
45911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SPDIF_CC 0x07f0
46011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SPDIF_L 0x0800
46111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SPDIF_DRS 0x4000
46211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SPDIF_V 0x8000
46311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
46411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_DSP_PROFILE _SIOW ('P', 23, int)
46511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define APF_NORMAL 0
46611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define APF_NETWORK 1
46711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define APF_CPUINTENS 2
46811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
46911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_READ_RATE _SIOR ('P', 2, int)
47011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_READ_CHANNELS _SIOR ('P', 6, int)
47111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_READ_BITS _SIOR ('P', 5, int)
47211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_READ_FILTER _SIOR ('P', 7, int)
47311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
47411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_WRITE_BITS SNDCTL_DSP_SETFMT
47511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_WRITE_RATE SNDCTL_DSP_SPEED
47611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_POST SNDCTL_DSP_POST
47711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_RESET SNDCTL_DSP_RESET
47811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_SYNC SNDCTL_DSP_SYNC
47911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_SUBDIVIDE SNDCTL_DSP_SUBDIVIDE
48011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_SETFRAGMENT SNDCTL_DSP_SETFRAGMENT
48111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_GETFMTS SNDCTL_DSP_GETFMTS
48211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_SETFMT SNDCTL_DSP_SETFMT
48311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_GETOSPACE SNDCTL_DSP_GETOSPACE
48411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_GETISPACE SNDCTL_DSP_GETISPACE
48511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_NONBLOCK SNDCTL_DSP_NONBLOCK
48611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_GETCAPS SNDCTL_DSP_GETCAPS
48711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_GETTRIGGER SNDCTL_DSP_GETTRIGGER
48811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_SETTRIGGER SNDCTL_DSP_SETTRIGGER
48911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_SETSYNCRO SNDCTL_DSP_SETSYNCRO
49011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_GETIPTR SNDCTL_DSP_GETIPTR
49111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_GETOPTR SNDCTL_DSP_GETOPTR
49211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_MAPINBUF SNDCTL_DSP_MAPINBUF
49311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_PCM_MAPOUTBUF SNDCTL_DSP_MAPOUTBUF
49411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
49511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct copr_buffer {
49611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int command;
49711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int flags;
49811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CPF_NONE 0x0000
49911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CPF_FIRST 0x0001
50011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CPF_LAST 0x0002
50111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int len;
50211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int offs;
50311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
50411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char data[4000];
50511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } copr_buffer;
50611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
50711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct copr_debug_buf {
50811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int command;
50911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int parm1;
51011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int parm2;
51111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int flags;
51211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int len;
51311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } copr_debug_buf;
51411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
51511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct copr_msg {
51611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int len;
51711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char data[4000];
51811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } copr_msg;
51911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
52011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_COPR_RESET _SIO ('C', 0)
52111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_COPR_LOAD _SIOWR('C', 1, copr_buffer)
52211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_COPR_RDATA _SIOWR('C', 2, copr_debug_buf)
52311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_COPR_RCODE _SIOWR('C', 3, copr_debug_buf)
52411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_COPR_WDATA _SIOW ('C', 4, copr_debug_buf)
52511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_COPR_WCODE _SIOW ('C', 5, copr_debug_buf)
52611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_COPR_RUN _SIOWR('C', 6, copr_debug_buf)
52711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_COPR_HALT _SIOWR('C', 7, copr_debug_buf)
52811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_COPR_SENDMSG _SIOWR('C', 8, copr_msg)
52911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SNDCTL_COPR_RCVMSG _SIOR ('C', 9, copr_msg)
53011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
53111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_NRDEVICES 25
53211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_VOLUME 0
53311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_BASS 1
53411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_TREBLE 2
53511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_SYNTH 3
53611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_PCM 4
53711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_SPEAKER 5
53811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_LINE 6
53911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_MIC 7
54011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_CD 8
54111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_IMIX 9
54211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_ALTPCM 10
54311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_RECLEV 11
54411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_IGAIN 12
54511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_OGAIN 13
54611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
54711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_LINE1 14
54811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_LINE2 15
54911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_LINE3 16
55011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_DIGITAL1 17
55111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_DIGITAL2 18
55211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_DIGITAL3 19
55311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_PHONEIN 20
55411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_PHONEOUT 21
55511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_VIDEO 22
55611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_RADIO 23
55711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_MONITOR 24
55811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
55911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_ONOFF_MIN 28
56011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_ONOFF_MAX 30
56111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
56211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_NONE 31
56311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
56411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_ENHANCE SOUND_MIXER_NONE
56511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_MUTE SOUND_MIXER_NONE
56611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_LOUD SOUND_MIXER_NONE
56711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
56811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#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"}
56911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
57011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#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"}
57111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
57211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_RECSRC 0xff
57311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_DEVMASK 0xfe
57411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_RECMASK 0xfd
57511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_CAPS 0xfc
57611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_CAP_EXCL_INPUT 0x00000001
57711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_STEREODEVS 0xfb
57811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_OUTSRC 0xfa
57911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_OUTMASK 0xf9
58011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
58111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_VOLUME (1 << SOUND_MIXER_VOLUME)
58211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_BASS (1 << SOUND_MIXER_BASS)
58311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_TREBLE (1 << SOUND_MIXER_TREBLE)
58411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_SYNTH (1 << SOUND_MIXER_SYNTH)
58511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_PCM (1 << SOUND_MIXER_PCM)
58611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_SPEAKER (1 << SOUND_MIXER_SPEAKER)
58711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_LINE (1 << SOUND_MIXER_LINE)
58811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_MIC (1 << SOUND_MIXER_MIC)
58911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_CD (1 << SOUND_MIXER_CD)
59011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_IMIX (1 << SOUND_MIXER_IMIX)
59111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_ALTPCM (1 << SOUND_MIXER_ALTPCM)
59211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_RECLEV (1 << SOUND_MIXER_RECLEV)
59311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_IGAIN (1 << SOUND_MIXER_IGAIN)
59411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_OGAIN (1 << SOUND_MIXER_OGAIN)
59511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_LINE1 (1 << SOUND_MIXER_LINE1)
59611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_LINE2 (1 << SOUND_MIXER_LINE2)
59711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_LINE3 (1 << SOUND_MIXER_LINE3)
59811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_DIGITAL1 (1 << SOUND_MIXER_DIGITAL1)
59911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_DIGITAL2 (1 << SOUND_MIXER_DIGITAL2)
60011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_DIGITAL3 (1 << SOUND_MIXER_DIGITAL3)
60111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_PHONEIN (1 << SOUND_MIXER_PHONEIN)
60211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_PHONEOUT (1 << SOUND_MIXER_PHONEOUT)
60311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_RADIO (1 << SOUND_MIXER_RADIO)
60411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_VIDEO (1 << SOUND_MIXER_VIDEO)
60511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_MONITOR (1 << SOUND_MIXER_MONITOR)
60611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
60711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_MUTE (1 << SOUND_MIXER_MUTE)
60811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_ENHANCE (1 << SOUND_MIXER_ENHANCE)
60911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MASK_LOUD (1 << SOUND_MIXER_LOUD)
61011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
61111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MIXER_READ(dev) _SIOR('M', dev, int)
61211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_VOLUME MIXER_READ(SOUND_MIXER_VOLUME)
61311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_BASS MIXER_READ(SOUND_MIXER_BASS)
61411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_TREBLE MIXER_READ(SOUND_MIXER_TREBLE)
61511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_SYNTH MIXER_READ(SOUND_MIXER_SYNTH)
61611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_PCM MIXER_READ(SOUND_MIXER_PCM)
61711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_SPEAKER MIXER_READ(SOUND_MIXER_SPEAKER)
61811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_LINE MIXER_READ(SOUND_MIXER_LINE)
61911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_MIC MIXER_READ(SOUND_MIXER_MIC)
62011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_CD MIXER_READ(SOUND_MIXER_CD)
62111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_IMIX MIXER_READ(SOUND_MIXER_IMIX)
62211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_ALTPCM MIXER_READ(SOUND_MIXER_ALTPCM)
62311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_RECLEV MIXER_READ(SOUND_MIXER_RECLEV)
62411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_IGAIN MIXER_READ(SOUND_MIXER_IGAIN)
62511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_OGAIN MIXER_READ(SOUND_MIXER_OGAIN)
62611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_LINE1 MIXER_READ(SOUND_MIXER_LINE1)
62711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_LINE2 MIXER_READ(SOUND_MIXER_LINE2)
62811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_LINE3 MIXER_READ(SOUND_MIXER_LINE3)
62911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
63011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_MUTE MIXER_READ(SOUND_MIXER_MUTE)
63111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_ENHANCE MIXER_READ(SOUND_MIXER_ENHANCE)
63211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_LOUD MIXER_READ(SOUND_MIXER_LOUD)
63311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
63411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_RECSRC MIXER_READ(SOUND_MIXER_RECSRC)
63511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_DEVMASK MIXER_READ(SOUND_MIXER_DEVMASK)
63611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_RECMASK MIXER_READ(SOUND_MIXER_RECMASK)
63711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_STEREODEVS MIXER_READ(SOUND_MIXER_STEREODEVS)
63811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_READ_CAPS MIXER_READ(SOUND_MIXER_CAPS)
63911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
64011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MIXER_WRITE(dev) _SIOWR('M', dev, int)
64111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_VOLUME MIXER_WRITE(SOUND_MIXER_VOLUME)
64211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_BASS MIXER_WRITE(SOUND_MIXER_BASS)
64311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_TREBLE MIXER_WRITE(SOUND_MIXER_TREBLE)
64411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_SYNTH MIXER_WRITE(SOUND_MIXER_SYNTH)
64511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_PCM MIXER_WRITE(SOUND_MIXER_PCM)
64611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_SPEAKER MIXER_WRITE(SOUND_MIXER_SPEAKER)
64711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_LINE MIXER_WRITE(SOUND_MIXER_LINE)
64811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_MIC MIXER_WRITE(SOUND_MIXER_MIC)
64911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_CD MIXER_WRITE(SOUND_MIXER_CD)
65011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_IMIX MIXER_WRITE(SOUND_MIXER_IMIX)
65111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_ALTPCM MIXER_WRITE(SOUND_MIXER_ALTPCM)
65211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_RECLEV MIXER_WRITE(SOUND_MIXER_RECLEV)
65311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_IGAIN MIXER_WRITE(SOUND_MIXER_IGAIN)
65411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_OGAIN MIXER_WRITE(SOUND_MIXER_OGAIN)
65511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_LINE1 MIXER_WRITE(SOUND_MIXER_LINE1)
65611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_LINE2 MIXER_WRITE(SOUND_MIXER_LINE2)
65711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_LINE3 MIXER_WRITE(SOUND_MIXER_LINE3)
65811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
65911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_MUTE MIXER_WRITE(SOUND_MIXER_MUTE)
66011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_ENHANCE MIXER_WRITE(SOUND_MIXER_ENHANCE)
66111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_LOUD MIXER_WRITE(SOUND_MIXER_LOUD)
66211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
66311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_WRITE_RECSRC MIXER_WRITE(SOUND_MIXER_RECSRC)
66411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
66511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct mixer_info
66611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
66711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char id[16];
66811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char name[32];
66911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int modify_counter;
67011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int fillers[10];
67111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} mixer_info;
67211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
67311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct _old_mixer_info
67411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
67511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char id[16];
67611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char name[32];
67711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} _old_mixer_info;
67811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
67911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_INFO _SIOR ('M', 101, mixer_info)
68011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_OLD_MIXER_INFO _SIOR ('M', 101, _old_mixer_info)
68111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
68211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef unsigned char mixer_record[128];
68311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
68411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_ACCESS _SIOWR('M', 102, mixer_record)
68511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
68611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_AGC _SIOWR('M', 103, int)
68711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_3DSE _SIOWR('M', 104, int)
68811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
68911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_PRIVATE1 _SIOWR('M', 111, int)
69011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_PRIVATE2 _SIOWR('M', 112, int)
69111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_PRIVATE3 _SIOWR('M', 113, int)
69211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_PRIVATE4 _SIOWR('M', 114, int)
69311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_PRIVATE5 _SIOWR('M', 115, int)
69411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
69511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct mixer_vol_table {
69611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int num;
69711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char name[32];
69811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int levels[32];
69911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} mixer_vol_table;
70011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
70111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_GETLEVELS _SIOWR('M', 116, mixer_vol_table)
70211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SOUND_MIXER_SETLEVELS _SIOWR('M', 117, mixer_vol_table)
70311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
70411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define OSS_GETVERSION _SIOR ('M', 118, int)
70511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
70611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EV_SEQ_LOCAL 0x80
70711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EV_TIMING 0x81
70811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EV_CHN_COMMON 0x92
70911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EV_CHN_VOICE 0x93
71011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EV_SYSEX 0x94
71111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
71211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MIDI_NOTEOFF 0x80
71311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MIDI_NOTEON 0x90
71411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MIDI_KEY_PRESSURE 0xA0
71511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
71611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MIDI_CTL_CHANGE 0xB0
71711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MIDI_PGM_CHANGE 0xC0
71811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MIDI_CHN_PRESSURE 0xD0
71911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MIDI_PITCH_BEND 0xE0
72011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
72111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MIDI_SYSTEM_PREFIX 0xF0
72211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
72311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define TMR_WAIT_REL 1
72411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define TMR_WAIT_ABS 2
72511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define TMR_STOP 3
72611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define TMR_START 4
72711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define TMR_CONTINUE 5
72811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define TMR_TEMPO 6
72911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define TMR_ECHO 8
73011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define TMR_CLOCK 9
73111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define TMR_SPP 10
73211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define TMR_TIMESIG 11
73311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
73411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define LOCL_STARTAUDIO 1
73511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
73611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined(__KERNEL__) && !defined(KERNEL) && !defined(INKERNEL) && !defined(_KERNEL) || defined(USE_SEQ_MACROS)
73711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
73811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_DECLAREBUF() SEQ_USE_EXTBUF()
73911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
74011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_PM_DEFINES int __foo_bar___
74111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef OSSLIB
74211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_USE_EXTBUF()   extern unsigned char *_seqbuf;   extern int _seqbuflen;extern int _seqbufptr
74311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_DEFINEBUF(len) SEQ_USE_EXTBUF();static int _requested_seqbuflen=len
74411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SEQ_ADVBUF(len) OSS_seq_advbuf(len, seqfd, _seqbuf, _seqbuflen)
74511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SEQ_NEEDBUF(len) OSS_seq_needbuf(len, seqfd, _seqbuf, _seqbuflen)
74611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_DUMPBUF() OSS_seqbuf_dump(seqfd, _seqbuf, _seqbuflen)
74711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
74811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_LOAD_GMINSTR(dev, instr)   OSS_patch_caching(dev, -1, instr, seqfd, _seqbuf, _seqbuflen)
74911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_LOAD_GMDRUM(dev, drum)   OSS_drum_caching(dev, -1, drum, seqfd, _seqbuf, _seqbuflen)
75011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else
75111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
75211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_LOAD_GMINSTR(dev, instr)
75311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_LOAD_GMDRUM(dev, drum)
75411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
75511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_USE_EXTBUF()   extern unsigned char _seqbuf[];   extern int _seqbuflen;extern int _seqbufptr
75611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
75711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef USE_SIMPLE_MACROS
75811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
75911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_DEFINEBUF(len) unsigned char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0
76011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SEQ_NEEDBUF(len) if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump()
76111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SEQ_ADVBUF(len) _seqbufptr += len
76211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_DUMPBUF seqbuf_dump
76311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else
76411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
76511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SEQ_NEEDBUF(len)
76611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
76711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
76811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
76911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#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);}
77011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
77111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#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);}
77211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
77311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_START_NOTE(dev, chn, note, vol)   _CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol)
77411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
77511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_STOP_NOTE(dev, chn, note, vol)   _CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol)
77611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
77711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_KEY_PRESSURE(dev, chn, note, pressure)   _CHN_VOICE(dev, MIDI_KEY_PRESSURE, chn, note, pressure)
77811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
77911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#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);}
78011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
78111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#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);}
78211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
78311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_CHN_PRESSURE(dev, chn, pressure)   _CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0)
78411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
78511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_SET_PATCH SEQ_PGM_CHANGE
78611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef OSSLIB
78711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#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);}
78811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else
78911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_PGM_CHANGE(dev, chn, patch)   _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0)
79011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
79111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
79211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_CONTROL(dev, chn, controller, value)   _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value)
79311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
79411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_BENDER(dev, chn, value)   _CHN_COMMON(dev, MIDI_PITCH_BEND, chn, 0, 0, value)
79511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
79611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#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);}
79711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
79811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_PITCHBEND(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER, value)
79911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_BENDER_RANGE(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value)
80011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_EXPRESSION(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_EXPRESSION, value*128)
80111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_MAIN_VOLUME(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_MAIN_VOLUME, (value*16383)/100)
80211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_PANNING(dev, voice, pos) SEQ_CONTROL(dev, voice, CTL_PAN, (pos+128) / 2)
80311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
80411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#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);}
80511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
80611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_START_TIMER() _TIMER_EVENT(TMR_START, 0)
80711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_STOP_TIMER() _TIMER_EVENT(TMR_STOP, 0)
80811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_CONTINUE_TIMER() _TIMER_EVENT(TMR_CONTINUE, 0)
80911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_WAIT_TIME(ticks) _TIMER_EVENT(TMR_WAIT_ABS, ticks)
81011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_DELTA_TIME(ticks) _TIMER_EVENT(TMR_WAIT_REL, ticks)
81111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_ECHO_BACK(key) _TIMER_EVENT(TMR_ECHO, key)
81211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_SET_TEMPO(value) _TIMER_EVENT(TMR_TEMPO, value)
81311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_SONGPOS(pos) _TIMER_EVENT(TMR_SPP, pos)
81411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_TIME_SIGNATURE(sig) _TIMER_EVENT(TMR_TIMESIG, sig)
81511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
81611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#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);}
81711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
81811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_PLAYAUDIO(devmask) _LOCAL_EVENT(LOCL_STARTAUDIO, devmask)
81911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
82011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#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);}
82111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
82211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef OSSLIB
82311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_WRPATCH(patchx, len)   OSS_write_patch(seqfd, (char*)(patchx), len)
82411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_WRPATCH2(patchx, len)   OSS_write_patch2(seqfd, (char*)(patchx), len)
82511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else
82611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_WRPATCH(patchx, len)   {if (_seqbufptr) SEQ_DUMPBUF();  if (write(seqfd, (char*)(patchx), len)==-1)   perror("Write patch: /dev/sequencer");}
82711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SEQ_WRPATCH2(patchx, len)   (SEQ_DUMPBUF(), write(seqfd, (char*)(patchx), len))
82811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
82911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
83011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
83111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
832