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