1/* 2 * This header was generated from the Linux kernel headers by update_headers.py, 3 * to provide necessary information from kernel to userspace, such as constants, 4 * structures, and macros, and thus, contains no copyrightable information. 5 */ 6#ifndef _UAPISOUNDCARD_H 7#define _UAPISOUNDCARD_H 8#define SOUND_VERSION 0x030802 9#define OPEN_SOUND_SYSTEM 10#include <linux/ioctl.h> 11#ifndef __KERNEL__ 12# include <endian.h> 13#endif 14#define SNDCARD_ADLIB 1 15#define SNDCARD_SB 2 16#define SNDCARD_PAS 3 17#define SNDCARD_GUS 4 18#define SNDCARD_MPU401 5 19#define SNDCARD_SB16 6 20#define SNDCARD_SB16MIDI 7 21#define SNDCARD_UART6850 8 22#define SNDCARD_GUS16 9 23#define SNDCARD_MSS 10 24#define SNDCARD_PSS 11 25#define SNDCARD_SSCAPE 12 26#define SNDCARD_PSS_MPU 13 27#define SNDCARD_PSS_MSS 14 28#define SNDCARD_SSCAPE_MSS 15 29#define SNDCARD_TRXPRO 16 30#define SNDCARD_TRXPRO_SB 17 31#define SNDCARD_TRXPRO_MPU 18 32#define SNDCARD_MAD16 19 33#define SNDCARD_MAD16_MPU 20 34#define SNDCARD_CS4232 21 35#define SNDCARD_CS4232_MPU 22 36#define SNDCARD_MAUI 23 37#define SNDCARD_PSEUDO_MSS 24 38#define SNDCARD_GUSPNP 25 39#define SNDCARD_UART401 26 40#ifndef _SIOWR 41#if defined(_IOWR) && (defined(_AIX) || (!defined(sun) && !defined(sparc) && !defined(__sparc__) && !defined(__INCioctlh) && !defined(__Lynx__))) 42#define SIOCPARM_MASK IOCPARM_MASK 43#define SIOC_VOID IOC_VOID 44#define SIOC_OUT IOC_OUT 45#define SIOC_IN IOC_IN 46#define SIOC_INOUT IOC_INOUT 47#define _SIOC_SIZE _IOC_SIZE 48#define _SIOC_DIR _IOC_DIR 49#define _SIOC_NONE _IOC_NONE 50#define _SIOC_READ _IOC_READ 51#define _SIOC_WRITE _IOC_WRITE 52#define _SIO _IO 53#define _SIOR _IOR 54#define _SIOW _IOW 55#define _SIOWR _IOWR 56#else 57#define SIOCPARM_MASK 0x1fff 58#define SIOC_VOID 0x00000000 59#define SIOC_OUT 0x20000000 60#define SIOC_IN 0x40000000 61#define SIOC_INOUT (SIOC_IN|SIOC_OUT) 62#define _SIO(x,y) ((int)(SIOC_VOID|(x<<8)|y)) 63#define _SIOR(x,y,t) ((int)(SIOC_OUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y)) 64#define _SIOW(x,y,t) ((int)(SIOC_IN|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y)) 65#define _SIOWR(x,y,t) ((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y)) 66#define _SIOC_SIZE(x) ((x>>16)&SIOCPARM_MASK) 67#define _SIOC_DIR(x) (x & 0xf0000000) 68#define _SIOC_NONE SIOC_VOID 69#define _SIOC_READ SIOC_OUT 70#define _SIOC_WRITE SIOC_IN 71# endif 72#endif 73#define SNDCTL_SEQ_RESET _SIO ('Q', 0) 74#define SNDCTL_SEQ_SYNC _SIO ('Q', 1) 75#define SNDCTL_SYNTH_INFO _SIOWR('Q', 2, struct synth_info) 76#define SNDCTL_SEQ_CTRLRATE _SIOWR('Q', 3, int) 77#define SNDCTL_SEQ_GETOUTCOUNT _SIOR ('Q', 4, int) 78#define SNDCTL_SEQ_GETINCOUNT _SIOR ('Q', 5, int) 79#define SNDCTL_SEQ_PERCMODE _SIOW ('Q', 6, int) 80#define SNDCTL_FM_LOAD_INSTR _SIOW ('Q', 7, struct sbi_instrument) 81#define SNDCTL_SEQ_TESTMIDI _SIOW ('Q', 8, int) 82#define SNDCTL_SEQ_RESETSAMPLES _SIOW ('Q', 9, int) 83#define SNDCTL_SEQ_NRSYNTHS _SIOR ('Q',10, int) 84#define SNDCTL_SEQ_NRMIDIS _SIOR ('Q',11, int) 85#define SNDCTL_MIDI_INFO _SIOWR('Q',12, struct midi_info) 86#define SNDCTL_SEQ_THRESHOLD _SIOW ('Q',13, int) 87#define SNDCTL_SYNTH_MEMAVL _SIOWR('Q',14, int) 88#define SNDCTL_FM_4OP_ENABLE _SIOW ('Q',15, int) 89#define SNDCTL_SEQ_PANIC _SIO ('Q',17) 90#define SNDCTL_SEQ_OUTOFBAND _SIOW ('Q',18, struct seq_event_rec) 91#define SNDCTL_SEQ_GETTIME _SIOR ('Q',19, int) 92#define SNDCTL_SYNTH_ID _SIOWR('Q',20, struct synth_info) 93#define SNDCTL_SYNTH_CONTROL _SIOWR('Q',21, struct synth_control) 94#define SNDCTL_SYNTH_REMOVESAMPLE _SIOWR('Q',22, struct remove_sample) 95typedef struct synth_control 96{ 97 int devno; 98 char data[4000]; 99}synth_control; 100typedef struct remove_sample 101{ 102 int devno; 103 int bankno; 104 int instrno; 105} remove_sample; 106typedef struct seq_event_rec { 107 unsigned char arr[8]; 108} seq_event_rec; 109#define SNDCTL_TMR_TIMEBASE _SIOWR('T', 1, int) 110#define SNDCTL_TMR_START _SIO ('T', 2) 111#define SNDCTL_TMR_STOP _SIO ('T', 3) 112#define SNDCTL_TMR_CONTINUE _SIO ('T', 4) 113#define SNDCTL_TMR_TEMPO _SIOWR('T', 5, int) 114#define SNDCTL_TMR_SOURCE _SIOWR('T', 6, int) 115# define TMR_INTERNAL 0x00000001 116# define TMR_EXTERNAL 0x00000002 117# define TMR_MODE_MIDI 0x00000010 118# define TMR_MODE_FSK 0x00000020 119# define TMR_MODE_CLS 0x00000040 120# define TMR_MODE_SMPTE 0x00000080 121#define SNDCTL_TMR_METRONOME _SIOW ('T', 7, int) 122#define SNDCTL_TMR_SELECT _SIOW ('T', 8, int) 123#define _LINUX_PATCHKEY_H_INDIRECT 124#include <linux/patchkey.h> 125#undef _LINUX_PATCHKEY_H_INDIRECT 126#if !defined(__KERNEL__) 127# if defined(__BYTE_ORDER) 128# if __BYTE_ORDER == __BIG_ENDIAN 129# define AFMT_S16_NE AFMT_S16_BE 130# elif __BYTE_ORDER == __LITTLE_ENDIAN 131# define AFMT_S16_NE AFMT_S16_LE 132# else 133# error "could not determine byte order" 134# endif 135# endif 136#endif 137struct patch_info { 138 unsigned short key; 139#define WAVE_PATCH _PATCHKEY(0x04) 140#define GUS_PATCH WAVE_PATCH 141#define WAVEFRONT_PATCH _PATCHKEY(0x06) 142 short device_no; 143 short instr_no; 144 unsigned int mode; 145#define WAVE_16_BITS 0x01 146#define WAVE_UNSIGNED 0x02 147#define WAVE_LOOPING 0x04 148#define WAVE_BIDIR_LOOP 0x08 149#define WAVE_LOOP_BACK 0x10 150#define WAVE_SUSTAIN_ON 0x20 151#define WAVE_ENVELOPES 0x40 152#define WAVE_FAST_RELEASE 0x80 153 154#define WAVE_VIBRATO 0x00010000 155#define WAVE_TREMOLO 0x00020000 156#define WAVE_SCALE 0x00040000 157#define WAVE_FRACTIONS 0x00080000 158#define WAVE_ROM 0x40000000 159#define WAVE_MULAW 0x20000000 160 int len; 161 int loop_start, loop_end; 162 unsigned int base_freq; 163 unsigned int base_note; 164 unsigned int high_note; 165 unsigned int low_note; 166 int panning; 167 int detuning; 168 169 unsigned char env_rate[ 6 ]; 170 unsigned char env_offset[ 6 ]; 171 172 unsigned char tremolo_sweep; 173 unsigned char tremolo_rate; 174 unsigned char tremolo_depth; 175 176 unsigned char vibrato_sweep; 177 unsigned char vibrato_rate; 178 unsigned char vibrato_depth; 179 int scale_frequency; 180 unsigned int scale_factor; 181 182 int volume; 183 int fractions; 184 int reserved1; 185 int spare[2]; 186 char data[1]; 187 }; 188struct sysex_info { 189 short key; 190#define SYSEX_PATCH _PATCHKEY(0x05) 191#define MAUI_PATCH _PATCHKEY(0x06) 192 short device_no; 193 int len; 194 unsigned char data[1]; 195 }; 196#define SEQ_NOTEOFF 0 197#define SEQ_FMNOTEOFF SEQ_NOTEOFF 198#define SEQ_NOTEON 1 199#define SEQ_FMNOTEON SEQ_NOTEON 200#define SEQ_WAIT TMR_WAIT_ABS 201#define SEQ_PGMCHANGE 3 202#define SEQ_FMPGMCHANGE SEQ_PGMCHANGE 203#define SEQ_SYNCTIMER TMR_START 204#define SEQ_MIDIPUTC 5 205#define SEQ_DRUMON 6 206#define SEQ_DRUMOFF 7 207#define SEQ_ECHO TMR_ECHO 208#define SEQ_AFTERTOUCH 9 209#define SEQ_CONTROLLER 10 210#define CTL_BANK_SELECT 0x00 211#define CTL_MODWHEEL 0x01 212#define CTL_BREATH 0x02 213#define CTL_FOOT 0x04 214#define CTL_PORTAMENTO_TIME 0x05 215#define CTL_DATA_ENTRY 0x06 216#define CTL_MAIN_VOLUME 0x07 217#define CTL_BALANCE 0x08 218#define CTL_PAN 0x0a 219#define CTL_EXPRESSION 0x0b 220#define CTL_GENERAL_PURPOSE1 0x10 221#define CTL_GENERAL_PURPOSE2 0x11 222#define CTL_GENERAL_PURPOSE3 0x12 223#define CTL_GENERAL_PURPOSE4 0x13 224#define CTL_DAMPER_PEDAL 0x40 225#define CTL_SUSTAIN 0x40 226#define CTL_HOLD 0x40 227#define CTL_PORTAMENTO 0x41 228#define CTL_SOSTENUTO 0x42 229#define CTL_SOFT_PEDAL 0x43 230#define CTL_HOLD2 0x45 231#define CTL_GENERAL_PURPOSE5 0x50 232#define CTL_GENERAL_PURPOSE6 0x51 233#define CTL_GENERAL_PURPOSE7 0x52 234#define CTL_GENERAL_PURPOSE8 0x53 235#define CTL_EXT_EFF_DEPTH 0x5b 236#define CTL_TREMOLO_DEPTH 0x5c 237#define CTL_CHORUS_DEPTH 0x5d 238#define CTL_DETUNE_DEPTH 0x5e 239#define CTL_CELESTE_DEPTH 0x5e 240#define CTL_PHASER_DEPTH 0x5f 241#define CTL_DATA_INCREMENT 0x60 242#define CTL_DATA_DECREMENT 0x61 243#define CTL_NONREG_PARM_NUM_LSB 0x62 244#define CTL_NONREG_PARM_NUM_MSB 0x63 245#define CTL_REGIST_PARM_NUM_LSB 0x64 246#define CTL_REGIST_PARM_NUM_MSB 0x65 247#define CTRL_PITCH_BENDER 255 248#define CTRL_PITCH_BENDER_RANGE 254 249#define CTRL_EXPRESSION 253 250#define CTRL_MAIN_VOLUME 252 251#define SEQ_BALANCE 11 252#define SEQ_VOLMODE 12 253#define VOL_METHOD_ADAGIO 1 254#define VOL_METHOD_LINEAR 2 255#define SEQ_FULLSIZE 0xfd 256#define SEQ_PRIVATE 0xfe 257#define SEQ_EXTENDED 0xff 258typedef unsigned char sbi_instr_data[32]; 259struct sbi_instrument { 260 unsigned short key; 261#define FM_PATCH _PATCHKEY(0x01) 262#define OPL3_PATCH _PATCHKEY(0x03) 263 short device; 264 int channel; 265 sbi_instr_data operators; 266 }; 267struct synth_info { 268 char name[30]; 269 int device; 270 int synth_type; 271#define SYNTH_TYPE_FM 0 272#define SYNTH_TYPE_SAMPLE 1 273#define SYNTH_TYPE_MIDI 2 274 int synth_subtype; 275#define FM_TYPE_ADLIB 0x00 276#define FM_TYPE_OPL3 0x01 277#define MIDI_TYPE_MPU401 0x401 278#define SAMPLE_TYPE_BASIC 0x10 279#define SAMPLE_TYPE_GUS SAMPLE_TYPE_BASIC 280#define SAMPLE_TYPE_WAVEFRONT 0x11 281 int perc_mode; 282 int nr_voices; 283 int nr_drums; 284 int instr_bank_size; 285 unsigned int capabilities; 286#define SYNTH_CAP_PERCMODE 0x00000001 287#define SYNTH_CAP_OPL3 0x00000002 288#define SYNTH_CAP_INPUT 0x00000004 289 int dummies[19]; 290 }; 291struct sound_timer_info { 292 char name[32]; 293 int caps; 294 }; 295#define MIDI_CAP_MPU401 1 296struct midi_info { 297 char name[30]; 298 int device; 299 unsigned int capabilities; 300 int dev_type; 301 int dummies[18]; 302 }; 303typedef struct { 304 unsigned char cmd; 305 char nr_args, nr_returns; 306 unsigned char data[30]; 307 } mpu_command_rec; 308#define SNDCTL_MIDI_PRETIME _SIOWR('m', 0, int) 309#define SNDCTL_MIDI_MPUMODE _SIOWR('m', 1, int) 310#define SNDCTL_MIDI_MPUCMD _SIOWR('m', 2, mpu_command_rec) 311#define SNDCTL_DSP_RESET _SIO ('P', 0) 312#define SNDCTL_DSP_SYNC _SIO ('P', 1) 313#define SNDCTL_DSP_SPEED _SIOWR('P', 2, int) 314#define SNDCTL_DSP_STEREO _SIOWR('P', 3, int) 315#define SNDCTL_DSP_GETBLKSIZE _SIOWR('P', 4, int) 316#define SNDCTL_DSP_SAMPLESIZE SNDCTL_DSP_SETFMT 317#define SNDCTL_DSP_CHANNELS _SIOWR('P', 6, int) 318#define SOUND_PCM_WRITE_CHANNELS SNDCTL_DSP_CHANNELS 319#define SOUND_PCM_WRITE_FILTER _SIOWR('P', 7, int) 320#define SNDCTL_DSP_POST _SIO ('P', 8) 321#define SNDCTL_DSP_SUBDIVIDE _SIOWR('P', 9, int) 322#define SNDCTL_DSP_SETFRAGMENT _SIOWR('P',10, int) 323#define SNDCTL_DSP_GETFMTS _SIOR ('P',11, int) 324#define SNDCTL_DSP_SETFMT _SIOWR('P',5, int) 325# define AFMT_QUERY 0x00000000 326# define AFMT_MU_LAW 0x00000001 327# define AFMT_A_LAW 0x00000002 328# define AFMT_IMA_ADPCM 0x00000004 329# define AFMT_U8 0x00000008 330# define AFMT_S16_LE 0x00000010 331# define AFMT_S16_BE 0x00000020 332# define AFMT_S8 0x00000040 333# define AFMT_U16_LE 0x00000080 334# define AFMT_U16_BE 0x00000100 335# define AFMT_MPEG 0x00000200 336# define AFMT_AC3 0x00000400 337typedef struct audio_buf_info { 338 int fragments; 339 int fragstotal; 340 int fragsize; 341 int bytes; 342 343 } audio_buf_info; 344#define SNDCTL_DSP_GETOSPACE _SIOR ('P',12, audio_buf_info) 345#define SNDCTL_DSP_GETISPACE _SIOR ('P',13, audio_buf_info) 346#define SNDCTL_DSP_NONBLOCK _SIO ('P',14) 347#define SNDCTL_DSP_GETCAPS _SIOR ('P',15, int) 348# define DSP_CAP_REVISION 0x000000ff 349# define DSP_CAP_DUPLEX 0x00000100 350# define DSP_CAP_REALTIME 0x00000200 351# define DSP_CAP_BATCH 0x00000400 352 353 354 355# define DSP_CAP_COPROC 0x00000800 356 357 358# define DSP_CAP_TRIGGER 0x00001000 359# define DSP_CAP_MMAP 0x00002000 360# define DSP_CAP_MULTI 0x00004000 361# define DSP_CAP_BIND 0x00008000 362#define SNDCTL_DSP_GETTRIGGER _SIOR ('P',16, int) 363#define SNDCTL_DSP_SETTRIGGER _SIOW ('P',16, int) 364# define PCM_ENABLE_INPUT 0x00000001 365# define PCM_ENABLE_OUTPUT 0x00000002 366typedef struct count_info { 367 int bytes; 368 int blocks; 369 int ptr; 370 } count_info; 371#define SNDCTL_DSP_GETIPTR _SIOR ('P',17, count_info) 372#define SNDCTL_DSP_GETOPTR _SIOR ('P',18, count_info) 373typedef struct buffmem_desc { 374 unsigned *buffer; 375 int size; 376 } buffmem_desc; 377#define SNDCTL_DSP_MAPINBUF _SIOR ('P', 19, buffmem_desc) 378#define SNDCTL_DSP_MAPOUTBUF _SIOR ('P', 20, buffmem_desc) 379#define SNDCTL_DSP_SETSYNCRO _SIO ('P', 21) 380#define SNDCTL_DSP_SETDUPLEX _SIO ('P', 22) 381#define SNDCTL_DSP_GETODELAY _SIOR ('P', 23, int) 382#define SNDCTL_DSP_GETCHANNELMASK _SIOWR('P', 64, int) 383#define SNDCTL_DSP_BIND_CHANNEL _SIOWR('P', 65, int) 384# define DSP_BIND_QUERY 0x00000000 385# define DSP_BIND_FRONT 0x00000001 386# define DSP_BIND_SURR 0x00000002 387# define DSP_BIND_CENTER_LFE 0x00000004 388# define DSP_BIND_HANDSET 0x00000008 389# define DSP_BIND_MIC 0x00000010 390# define DSP_BIND_MODEM1 0x00000020 391# define DSP_BIND_MODEM2 0x00000040 392# define DSP_BIND_I2S 0x00000080 393# define DSP_BIND_SPDIF 0x00000100 394#define SNDCTL_DSP_SETSPDIF _SIOW ('P', 66, int) 395#define SNDCTL_DSP_GETSPDIF _SIOR ('P', 67, int) 396# define SPDIF_PRO 0x0001 397# define SPDIF_N_AUD 0x0002 398# define SPDIF_COPY 0x0004 399# define SPDIF_PRE 0x0008 400# define SPDIF_CC 0x07f0 401# define SPDIF_L 0x0800 402# define SPDIF_DRS 0x4000 403# define SPDIF_V 0x8000 404#define SNDCTL_DSP_PROFILE _SIOW ('P', 23, int) 405#define APF_NORMAL 0 406#define APF_NETWORK 1 407#define APF_CPUINTENS 2 408#define SOUND_PCM_READ_RATE _SIOR ('P', 2, int) 409#define SOUND_PCM_READ_CHANNELS _SIOR ('P', 6, int) 410#define SOUND_PCM_READ_BITS _SIOR ('P', 5, int) 411#define SOUND_PCM_READ_FILTER _SIOR ('P', 7, int) 412#define SOUND_PCM_WRITE_BITS SNDCTL_DSP_SETFMT 413#define SOUND_PCM_WRITE_RATE SNDCTL_DSP_SPEED 414#define SOUND_PCM_POST SNDCTL_DSP_POST 415#define SOUND_PCM_RESET SNDCTL_DSP_RESET 416#define SOUND_PCM_SYNC SNDCTL_DSP_SYNC 417#define SOUND_PCM_SUBDIVIDE SNDCTL_DSP_SUBDIVIDE 418#define SOUND_PCM_SETFRAGMENT SNDCTL_DSP_SETFRAGMENT 419#define SOUND_PCM_GETFMTS SNDCTL_DSP_GETFMTS 420#define SOUND_PCM_SETFMT SNDCTL_DSP_SETFMT 421#define SOUND_PCM_GETOSPACE SNDCTL_DSP_GETOSPACE 422#define SOUND_PCM_GETISPACE SNDCTL_DSP_GETISPACE 423#define SOUND_PCM_NONBLOCK SNDCTL_DSP_NONBLOCK 424#define SOUND_PCM_GETCAPS SNDCTL_DSP_GETCAPS 425#define SOUND_PCM_GETTRIGGER SNDCTL_DSP_GETTRIGGER 426#define SOUND_PCM_SETTRIGGER SNDCTL_DSP_SETTRIGGER 427#define SOUND_PCM_SETSYNCRO SNDCTL_DSP_SETSYNCRO 428#define SOUND_PCM_GETIPTR SNDCTL_DSP_GETIPTR 429#define SOUND_PCM_GETOPTR SNDCTL_DSP_GETOPTR 430#define SOUND_PCM_MAPINBUF SNDCTL_DSP_MAPINBUF 431#define SOUND_PCM_MAPOUTBUF SNDCTL_DSP_MAPOUTBUF 432typedef struct copr_buffer { 433 int command; 434 int flags; 435#define CPF_NONE 0x0000 436#define CPF_FIRST 0x0001 437#define CPF_LAST 0x0002 438 int len; 439 int offs; 440 unsigned char data[4000]; 441 } copr_buffer; 442typedef struct copr_debug_buf { 443 int command; 444 int parm1; 445 int parm2; 446 int flags; 447 int len; 448 } copr_debug_buf; 449typedef struct copr_msg { 450 int len; 451 unsigned char data[4000]; 452 } copr_msg; 453#define SNDCTL_COPR_RESET _SIO ('C', 0) 454#define SNDCTL_COPR_LOAD _SIOWR('C', 1, copr_buffer) 455#define SNDCTL_COPR_RDATA _SIOWR('C', 2, copr_debug_buf) 456#define SNDCTL_COPR_RCODE _SIOWR('C', 3, copr_debug_buf) 457#define SNDCTL_COPR_WDATA _SIOW ('C', 4, copr_debug_buf) 458#define SNDCTL_COPR_WCODE _SIOW ('C', 5, copr_debug_buf) 459#define SNDCTL_COPR_RUN _SIOWR('C', 6, copr_debug_buf) 460#define SNDCTL_COPR_HALT _SIOWR('C', 7, copr_debug_buf) 461#define SNDCTL_COPR_SENDMSG _SIOWR('C', 8, copr_msg) 462#define SNDCTL_COPR_RCVMSG _SIOR ('C', 9, copr_msg) 463 464#define SOUND_MIXER_NRDEVICES 25 465#define SOUND_MIXER_VOLUME 0 466#define SOUND_MIXER_BASS 1 467#define SOUND_MIXER_TREBLE 2 468#define SOUND_MIXER_SYNTH 3 469#define SOUND_MIXER_PCM 4 470#define SOUND_MIXER_SPEAKER 5 471#define SOUND_MIXER_LINE 6 472#define SOUND_MIXER_MIC 7 473#define SOUND_MIXER_CD 8 474#define SOUND_MIXER_IMIX 9 475#define SOUND_MIXER_ALTPCM 10 476#define SOUND_MIXER_RECLEV 11 477#define SOUND_MIXER_IGAIN 12 478#define SOUND_MIXER_OGAIN 13 479#define SOUND_MIXER_LINE1 14 480#define SOUND_MIXER_LINE2 15 481#define SOUND_MIXER_LINE3 16 482#define SOUND_MIXER_DIGITAL1 17 483#define SOUND_MIXER_DIGITAL2 18 484#define SOUND_MIXER_DIGITAL3 19 485#define SOUND_MIXER_PHONEIN 20 486#define SOUND_MIXER_PHONEOUT 21 487#define SOUND_MIXER_VIDEO 22 488#define SOUND_MIXER_RADIO 23 489#define SOUND_MIXER_MONITOR 24 490#define SOUND_ONOFF_MIN 28 491#define SOUND_ONOFF_MAX 30 492#define SOUND_MIXER_NONE 31 493#define SOUND_MIXER_ENHANCE SOUND_MIXER_NONE 494#define SOUND_MIXER_MUTE SOUND_MIXER_NONE 495#define SOUND_MIXER_LOUD SOUND_MIXER_NONE 496#define SOUND_DEVICE_LABELS {"Vol ", "Bass ", "Trebl", "Synth", "Pcm ", "Spkr ", "Line ", \ 497 "Mic ", "CD ", "Mix ", "Pcm2 ", "Rec ", "IGain", "OGain", \ 498 "Line1", "Line2", "Line3", "Digital1", "Digital2", "Digital3", \ 499 "PhoneIn", "PhoneOut", "Video", "Radio", "Monitor"} 500#define SOUND_DEVICE_NAMES {"vol", "bass", "treble", "synth", "pcm", "speaker", "line", \ 501 "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain", \ 502 "line1", "line2", "line3", "dig1", "dig2", "dig3", \ 503 "phin", "phout", "video", "radio", "monitor"} 504#define SOUND_MIXER_RECSRC 0xff 505#define SOUND_MIXER_DEVMASK 0xfe 506#define SOUND_MIXER_RECMASK 0xfd 507#define SOUND_MIXER_CAPS 0xfc 508# define SOUND_CAP_EXCL_INPUT 0x00000001 509#define SOUND_MIXER_STEREODEVS 0xfb 510#define SOUND_MIXER_OUTSRC 0xfa 511#define SOUND_MIXER_OUTMASK 0xf9 512#define SOUND_MASK_VOLUME (1 << SOUND_MIXER_VOLUME) 513#define SOUND_MASK_BASS (1 << SOUND_MIXER_BASS) 514#define SOUND_MASK_TREBLE (1 << SOUND_MIXER_TREBLE) 515#define SOUND_MASK_SYNTH (1 << SOUND_MIXER_SYNTH) 516#define SOUND_MASK_PCM (1 << SOUND_MIXER_PCM) 517#define SOUND_MASK_SPEAKER (1 << SOUND_MIXER_SPEAKER) 518#define SOUND_MASK_LINE (1 << SOUND_MIXER_LINE) 519#define SOUND_MASK_MIC (1 << SOUND_MIXER_MIC) 520#define SOUND_MASK_CD (1 << SOUND_MIXER_CD) 521#define SOUND_MASK_IMIX (1 << SOUND_MIXER_IMIX) 522#define SOUND_MASK_ALTPCM (1 << SOUND_MIXER_ALTPCM) 523#define SOUND_MASK_RECLEV (1 << SOUND_MIXER_RECLEV) 524#define SOUND_MASK_IGAIN (1 << SOUND_MIXER_IGAIN) 525#define SOUND_MASK_OGAIN (1 << SOUND_MIXER_OGAIN) 526#define SOUND_MASK_LINE1 (1 << SOUND_MIXER_LINE1) 527#define SOUND_MASK_LINE2 (1 << SOUND_MIXER_LINE2) 528#define SOUND_MASK_LINE3 (1 << SOUND_MIXER_LINE3) 529#define SOUND_MASK_DIGITAL1 (1 << SOUND_MIXER_DIGITAL1) 530#define SOUND_MASK_DIGITAL2 (1 << SOUND_MIXER_DIGITAL2) 531#define SOUND_MASK_DIGITAL3 (1 << SOUND_MIXER_DIGITAL3) 532#define SOUND_MASK_PHONEIN (1 << SOUND_MIXER_PHONEIN) 533#define SOUND_MASK_PHONEOUT (1 << SOUND_MIXER_PHONEOUT) 534#define SOUND_MASK_RADIO (1 << SOUND_MIXER_RADIO) 535#define SOUND_MASK_VIDEO (1 << SOUND_MIXER_VIDEO) 536#define SOUND_MASK_MONITOR (1 << SOUND_MIXER_MONITOR) 537#define SOUND_MASK_MUTE (1 << SOUND_MIXER_MUTE) 538#define SOUND_MASK_ENHANCE (1 << SOUND_MIXER_ENHANCE) 539#define SOUND_MASK_LOUD (1 << SOUND_MIXER_LOUD) 540#define MIXER_READ(dev) _SIOR('M', dev, int) 541#define SOUND_MIXER_READ_VOLUME MIXER_READ(SOUND_MIXER_VOLUME) 542#define SOUND_MIXER_READ_BASS MIXER_READ(SOUND_MIXER_BASS) 543#define SOUND_MIXER_READ_TREBLE MIXER_READ(SOUND_MIXER_TREBLE) 544#define SOUND_MIXER_READ_SYNTH MIXER_READ(SOUND_MIXER_SYNTH) 545#define SOUND_MIXER_READ_PCM MIXER_READ(SOUND_MIXER_PCM) 546#define SOUND_MIXER_READ_SPEAKER MIXER_READ(SOUND_MIXER_SPEAKER) 547#define SOUND_MIXER_READ_LINE MIXER_READ(SOUND_MIXER_LINE) 548#define SOUND_MIXER_READ_MIC MIXER_READ(SOUND_MIXER_MIC) 549#define SOUND_MIXER_READ_CD MIXER_READ(SOUND_MIXER_CD) 550#define SOUND_MIXER_READ_IMIX MIXER_READ(SOUND_MIXER_IMIX) 551#define SOUND_MIXER_READ_ALTPCM MIXER_READ(SOUND_MIXER_ALTPCM) 552#define SOUND_MIXER_READ_RECLEV MIXER_READ(SOUND_MIXER_RECLEV) 553#define SOUND_MIXER_READ_IGAIN MIXER_READ(SOUND_MIXER_IGAIN) 554#define SOUND_MIXER_READ_OGAIN MIXER_READ(SOUND_MIXER_OGAIN) 555#define SOUND_MIXER_READ_LINE1 MIXER_READ(SOUND_MIXER_LINE1) 556#define SOUND_MIXER_READ_LINE2 MIXER_READ(SOUND_MIXER_LINE2) 557#define SOUND_MIXER_READ_LINE3 MIXER_READ(SOUND_MIXER_LINE3) 558#define SOUND_MIXER_READ_MUTE MIXER_READ(SOUND_MIXER_MUTE) 559#define SOUND_MIXER_READ_ENHANCE MIXER_READ(SOUND_MIXER_ENHANCE) 560#define SOUND_MIXER_READ_LOUD MIXER_READ(SOUND_MIXER_LOUD) 561#define SOUND_MIXER_READ_RECSRC MIXER_READ(SOUND_MIXER_RECSRC) 562#define SOUND_MIXER_READ_DEVMASK MIXER_READ(SOUND_MIXER_DEVMASK) 563#define SOUND_MIXER_READ_RECMASK MIXER_READ(SOUND_MIXER_RECMASK) 564#define SOUND_MIXER_READ_STEREODEVS MIXER_READ(SOUND_MIXER_STEREODEVS) 565#define SOUND_MIXER_READ_CAPS MIXER_READ(SOUND_MIXER_CAPS) 566#define MIXER_WRITE(dev) _SIOWR('M', dev, int) 567#define SOUND_MIXER_WRITE_VOLUME MIXER_WRITE(SOUND_MIXER_VOLUME) 568#define SOUND_MIXER_WRITE_BASS MIXER_WRITE(SOUND_MIXER_BASS) 569#define SOUND_MIXER_WRITE_TREBLE MIXER_WRITE(SOUND_MIXER_TREBLE) 570#define SOUND_MIXER_WRITE_SYNTH MIXER_WRITE(SOUND_MIXER_SYNTH) 571#define SOUND_MIXER_WRITE_PCM MIXER_WRITE(SOUND_MIXER_PCM) 572#define SOUND_MIXER_WRITE_SPEAKER MIXER_WRITE(SOUND_MIXER_SPEAKER) 573#define SOUND_MIXER_WRITE_LINE MIXER_WRITE(SOUND_MIXER_LINE) 574#define SOUND_MIXER_WRITE_MIC MIXER_WRITE(SOUND_MIXER_MIC) 575#define SOUND_MIXER_WRITE_CD MIXER_WRITE(SOUND_MIXER_CD) 576#define SOUND_MIXER_WRITE_IMIX MIXER_WRITE(SOUND_MIXER_IMIX) 577#define SOUND_MIXER_WRITE_ALTPCM MIXER_WRITE(SOUND_MIXER_ALTPCM) 578#define SOUND_MIXER_WRITE_RECLEV MIXER_WRITE(SOUND_MIXER_RECLEV) 579#define SOUND_MIXER_WRITE_IGAIN MIXER_WRITE(SOUND_MIXER_IGAIN) 580#define SOUND_MIXER_WRITE_OGAIN MIXER_WRITE(SOUND_MIXER_OGAIN) 581#define SOUND_MIXER_WRITE_LINE1 MIXER_WRITE(SOUND_MIXER_LINE1) 582#define SOUND_MIXER_WRITE_LINE2 MIXER_WRITE(SOUND_MIXER_LINE2) 583#define SOUND_MIXER_WRITE_LINE3 MIXER_WRITE(SOUND_MIXER_LINE3) 584#define SOUND_MIXER_WRITE_MUTE MIXER_WRITE(SOUND_MIXER_MUTE) 585#define SOUND_MIXER_WRITE_ENHANCE MIXER_WRITE(SOUND_MIXER_ENHANCE) 586#define SOUND_MIXER_WRITE_LOUD MIXER_WRITE(SOUND_MIXER_LOUD) 587#define SOUND_MIXER_WRITE_RECSRC MIXER_WRITE(SOUND_MIXER_RECSRC) 588typedef struct mixer_info 589{ 590 char id[16]; 591 char name[32]; 592 int modify_counter; 593 int fillers[10]; 594} mixer_info; 595typedef struct _old_mixer_info 596{ 597 char id[16]; 598 char name[32]; 599} _old_mixer_info; 600#define SOUND_MIXER_INFO _SIOR ('M', 101, mixer_info) 601#define SOUND_OLD_MIXER_INFO _SIOR ('M', 101, _old_mixer_info) 602typedef unsigned char mixer_record[128]; 603#define SOUND_MIXER_ACCESS _SIOWR('M', 102, mixer_record) 604#define SOUND_MIXER_AGC _SIOWR('M', 103, int) 605#define SOUND_MIXER_3DSE _SIOWR('M', 104, int) 606#define SOUND_MIXER_PRIVATE1 _SIOWR('M', 111, int) 607#define SOUND_MIXER_PRIVATE2 _SIOWR('M', 112, int) 608#define SOUND_MIXER_PRIVATE3 _SIOWR('M', 113, int) 609#define SOUND_MIXER_PRIVATE4 _SIOWR('M', 114, int) 610#define SOUND_MIXER_PRIVATE5 _SIOWR('M', 115, int) 611typedef struct mixer_vol_table { 612 int num; 613 char name[32]; 614 int levels[32]; 615} mixer_vol_table; 616#define SOUND_MIXER_GETLEVELS _SIOWR('M', 116, mixer_vol_table) 617#define SOUND_MIXER_SETLEVELS _SIOWR('M', 117, mixer_vol_table) 618#define OSS_GETVERSION _SIOR ('M', 118, int) 619#define EV_SEQ_LOCAL 0x80 620#define EV_TIMING 0x81 621#define EV_CHN_COMMON 0x92 622#define EV_CHN_VOICE 0x93 623#define EV_SYSEX 0x94 624#define MIDI_NOTEOFF 0x80 625#define MIDI_NOTEON 0x90 626#define MIDI_KEY_PRESSURE 0xA0 627#define MIDI_CTL_CHANGE 0xB0 628#define MIDI_PGM_CHANGE 0xC0 629#define MIDI_CHN_PRESSURE 0xD0 630#define MIDI_PITCH_BEND 0xE0 631#define MIDI_SYSTEM_PREFIX 0xF0 632#define TMR_WAIT_REL 1 633#define TMR_WAIT_ABS 2 634#define TMR_STOP 3 635#define TMR_START 4 636#define TMR_CONTINUE 5 637#define TMR_TEMPO 6 638#define TMR_ECHO 8 639#define TMR_CLOCK 9 640#define TMR_SPP 10 641#define TMR_TIMESIG 11 642#define LOCL_STARTAUDIO 1 643#if !defined(__KERNEL__) || defined(USE_SEQ_MACROS) 644#define SEQ_DECLAREBUF() SEQ_USE_EXTBUF() 645void seqbuf_dump(void); 646#define SEQ_PM_DEFINES int __foo_bar___ 647#define SEQ_LOAD_GMINSTR(dev, instr) 648#define SEQ_LOAD_GMDRUM(dev, drum) 649#define _SEQ_EXTERN extern 650#define SEQ_USE_EXTBUF() \ 651 _SEQ_EXTERN unsigned char _seqbuf[]; \ 652 _SEQ_EXTERN int _seqbuflen; _SEQ_EXTERN int _seqbufptr 653#ifndef USE_SIMPLE_MACROS 654#define SEQ_DEFINEBUF(len) unsigned char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0 655#define _SEQ_NEEDBUF(len) if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump() 656#define _SEQ_ADVBUF(len) _seqbufptr += len 657#define SEQ_DUMPBUF seqbuf_dump 658#else 659#define _SEQ_NEEDBUF(len) 660#endif 661#define SEQ_VOLUME_MODE(dev, mode) {_SEQ_NEEDBUF(8);\ 662 _seqbuf[_seqbufptr] = SEQ_EXTENDED;\ 663 _seqbuf[_seqbufptr+1] = SEQ_VOLMODE;\ 664 _seqbuf[_seqbufptr+2] = (dev);\ 665 _seqbuf[_seqbufptr+3] = (mode);\ 666 _seqbuf[_seqbufptr+4] = 0;\ 667 _seqbuf[_seqbufptr+5] = 0;\ 668 _seqbuf[_seqbufptr+6] = 0;\ 669 _seqbuf[_seqbufptr+7] = 0;\ 670 _SEQ_ADVBUF(8);} 671#define _CHN_VOICE(dev, event, chn, note, parm) \ 672 {_SEQ_NEEDBUF(8);\ 673 _seqbuf[_seqbufptr] = EV_CHN_VOICE;\ 674 _seqbuf[_seqbufptr+1] = (dev);\ 675 _seqbuf[_seqbufptr+2] = (event);\ 676 _seqbuf[_seqbufptr+3] = (chn);\ 677 _seqbuf[_seqbufptr+4] = (note);\ 678 _seqbuf[_seqbufptr+5] = (parm);\ 679 _seqbuf[_seqbufptr+6] = (0);\ 680 _seqbuf[_seqbufptr+7] = 0;\ 681 _SEQ_ADVBUF(8);} 682#define SEQ_START_NOTE(dev, chn, note, vol) \ 683 _CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol) 684#define SEQ_STOP_NOTE(dev, chn, note, vol) \ 685 _CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol) 686#define SEQ_KEY_PRESSURE(dev, chn, note, pressure) \ 687 _CHN_VOICE(dev, MIDI_KEY_PRESSURE, chn, note, pressure) 688#define _CHN_COMMON(dev, event, chn, p1, p2, w14) \ 689 {_SEQ_NEEDBUF(8);\ 690 _seqbuf[_seqbufptr] = EV_CHN_COMMON;\ 691 _seqbuf[_seqbufptr+1] = (dev);\ 692 _seqbuf[_seqbufptr+2] = (event);\ 693 _seqbuf[_seqbufptr+3] = (chn);\ 694 _seqbuf[_seqbufptr+4] = (p1);\ 695 _seqbuf[_seqbufptr+5] = (p2);\ 696 *(short *)&_seqbuf[_seqbufptr+6] = (w14);\ 697 _SEQ_ADVBUF(8);} 698#define SEQ_SYSEX(dev, buf, len) \ 699 {int ii, ll=(len); \ 700 unsigned char *bufp=buf;\ 701 if (ll>6)ll=6;\ 702 _SEQ_NEEDBUF(8);\ 703 _seqbuf[_seqbufptr] = EV_SYSEX;\ 704 _seqbuf[_seqbufptr+1] = (dev);\ 705 for(ii=0;ii<ll;ii++)\ 706 _seqbuf[_seqbufptr+ii+2] = bufp[ii];\ 707 for(ii=ll;ii<6;ii++)\ 708 _seqbuf[_seqbufptr+ii+2] = 0xff;\ 709 _SEQ_ADVBUF(8);} 710#define SEQ_CHN_PRESSURE(dev, chn, pressure) \ 711 _CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0) 712#define SEQ_SET_PATCH SEQ_PGM_CHANGE 713#define SEQ_PGM_CHANGE(dev, chn, patch) \ 714 _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0) 715#define SEQ_CONTROL(dev, chn, controller, value) \ 716 _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value) 717#define SEQ_BENDER(dev, chn, value) \ 718 _CHN_COMMON(dev, MIDI_PITCH_BEND, chn, 0, 0, value) 719#define SEQ_V2_X_CONTROL(dev, voice, controller, value) {_SEQ_NEEDBUF(8);\ 720 _seqbuf[_seqbufptr] = SEQ_EXTENDED;\ 721 _seqbuf[_seqbufptr+1] = SEQ_CONTROLLER;\ 722 _seqbuf[_seqbufptr+2] = (dev);\ 723 _seqbuf[_seqbufptr+3] = (voice);\ 724 _seqbuf[_seqbufptr+4] = (controller);\ 725 _seqbuf[_seqbufptr+5] = ((value)&0xff);\ 726 _seqbuf[_seqbufptr+6] = ((value>>8)&0xff);\ 727 _seqbuf[_seqbufptr+7] = 0;\ 728 _SEQ_ADVBUF(8);} 729#define SEQ_PITCHBEND(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER, value) 730#define SEQ_BENDER_RANGE(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value) 731#define SEQ_EXPRESSION(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_EXPRESSION, value*128) 732#define SEQ_MAIN_VOLUME(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_MAIN_VOLUME, (value*16383)/100) 733#define SEQ_PANNING(dev, voice, pos) SEQ_CONTROL(dev, voice, CTL_PAN, (pos+128) / 2) 734#define _TIMER_EVENT(ev, parm) {_SEQ_NEEDBUF(8);\ 735 _seqbuf[_seqbufptr+0] = EV_TIMING; \ 736 _seqbuf[_seqbufptr+1] = (ev); \ 737 _seqbuf[_seqbufptr+2] = 0;\ 738 _seqbuf[_seqbufptr+3] = 0;\ 739 *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \ 740 _SEQ_ADVBUF(8);} 741#define SEQ_START_TIMER() _TIMER_EVENT(TMR_START, 0) 742#define SEQ_STOP_TIMER() _TIMER_EVENT(TMR_STOP, 0) 743#define SEQ_CONTINUE_TIMER() _TIMER_EVENT(TMR_CONTINUE, 0) 744#define SEQ_WAIT_TIME(ticks) _TIMER_EVENT(TMR_WAIT_ABS, ticks) 745#define SEQ_DELTA_TIME(ticks) _TIMER_EVENT(TMR_WAIT_REL, ticks) 746#define SEQ_ECHO_BACK(key) _TIMER_EVENT(TMR_ECHO, key) 747#define SEQ_SET_TEMPO(value) _TIMER_EVENT(TMR_TEMPO, value) 748#define SEQ_SONGPOS(pos) _TIMER_EVENT(TMR_SPP, pos) 749#define SEQ_TIME_SIGNATURE(sig) _TIMER_EVENT(TMR_TIMESIG, sig) 750#define _LOCAL_EVENT(ev, parm) {_SEQ_NEEDBUF(8);\ 751 _seqbuf[_seqbufptr+0] = EV_SEQ_LOCAL; \ 752 _seqbuf[_seqbufptr+1] = (ev); \ 753 _seqbuf[_seqbufptr+2] = 0;\ 754 _seqbuf[_seqbufptr+3] = 0;\ 755 *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \ 756 _SEQ_ADVBUF(8);} 757#define SEQ_PLAYAUDIO(devmask) _LOCAL_EVENT(LOCL_STARTAUDIO, devmask) 758#define SEQ_MIDIOUT(device, byte) {_SEQ_NEEDBUF(4);\ 759 _seqbuf[_seqbufptr] = SEQ_MIDIPUTC;\ 760 _seqbuf[_seqbufptr+1] = (byte);\ 761 _seqbuf[_seqbufptr+2] = (device);\ 762 _seqbuf[_seqbufptr+3] = 0;\ 763 _SEQ_ADVBUF(4);} 764#define SEQ_WRPATCH(patchx, len) \ 765 {if (_seqbufptr) SEQ_DUMPBUF();\ 766 if (write(seqfd, (char*)(patchx), len)==-1) \ 767 perror("Write patch: /dev/sequencer");} 768#define SEQ_WRPATCH2(patchx, len) \ 769 (SEQ_DUMPBUF(), write(seqfd, (char*)(patchx), len)) 770#endif 771#endif 772