1 #ifndef _LINUX_PCSP_H 2 #define _LINUX_PCSP_H 3 /* 4 * include/linux/pcsp.h 5 * 6 * /dev/pcsp implementation (dsp & audio for PC Speaker) 7 * 8 * Copyright (C) 1993, 1994 Michael Beck 9 * Some Parts (C) Hannu Savolainen 1992, 1993 10 * 11 * Minor Alterations for Paradise Sound Client 12 */ 13 14 #include <sys/ioctl.h> 15 16 /* MUST BE defined from 0.5 */ 17 /* #define SOUND_VERSION 0x60 */ 18 19 #define PCSP_MAJOR 30 20 #define PCSP_MIXER_MINOR 0 21 #define PCSP_DSP_MINOR 3 22 #define PCSP_AUD_MINOR 4 23 24 /* card ID, real soundcards use 0 to ... */ 25 26 #define SNDCARD_PCSP 128 27 #define SNDCARD_STO1 129 28 #define SNDCARD_DACM 130 29 #define SNDCARD_DACS 131 30 31 /* IOCTL commands, compatible to real /dev/dsp */ 32 /* SAMPLESIZE returns only the value, doesn't support changes */ 33 34 #define SNDCTL_DSP_RESET _IO ('P', 0) 35 #define SNDCTL_DSP_SYNC _IO ('P', 1) 36 #define SNDCTL_DSP_SPEED _IOWR('P', 2, int) 37 #define SNDCTL_DSP_STEREO _IOWR('P', 3, int) 38 #define SNDCTL_DSP_GETBLKSIZE _IOWR('P', 4, int) 39 /* #define SNDCTL_DSP_SAMPLESIZE _IOWR('P', 5, int) */ 40 41 #define SOUND_PCM_WRITE_CHANNELS _IOWR('P', 6, int) 42 #define SOUND_PCM_WRITE_FILTER _IOWR('P', 7, int) 43 /* #define SOUND_PCM_WRITE_BITS SNDCTL_DSP_SAMPLESIZE */ 44 #define SOUND_PCM_WRITE_RATE SNDCTL_DSP_SPEED 45 46 #define SOUND_PCM_READ_RATE _IOR ('P', 2, int) 47 #define SOUND_PCM_READ_CHANNELS _IOR ('P', 6, int) 48 #define SOUND_PCM_READ_BITS _IOR ('P', 5, int) 49 #define SOUND_PCM_READ_FILTER _IOR ('P', 7, int) 50 51 52 /* IOCTL for changing the play-device, real sample rate etc. */ 53 54 #define PCSP_SET_DEV 0x00014350 55 #define PCSP_GET_DEV 0x00024350 56 #define PCSP_SET_PORTS 0x00034350 57 #define PCSP_GET_PORTS 0x00044350 58 #define PCSP_SET_VOL 0x00054350 59 #define PCSP_GET_VOL 0x00064350 60 #define PCSP_SET_SRATE 0x00074350 61 #define PCSP_GET_SRATE 0x00084350 62 #define PCSP_GET_MEASURE 0x00094350 63 64 /********************************************* 65 * IOCTL commands for /dev/mixer 66 */ 67 68 /* Mixer devices */ 69 70 #define SOUND_MIXER_NRDEVICES 12 71 #define SOUND_MIXER_VOLUME 0 72 #define SOUND_MIXER_BASS 1 73 #define SOUND_MIXER_TREBLE 2 74 #define SOUND_MIXER_SYNTH 3 75 #define SOUND_MIXER_PCM 4 76 #define SOUND_MIXER_SPEAKER 5 77 #define SOUND_MIXER_LINE 6 78 #define SOUND_MIXER_MIC 7 79 #define SOUND_MIXER_CD 8 80 #define SOUND_MIXER_IMIX 9 /* Recording monitor */ 81 #define SOUND_MIXER_ALTPCM 10 82 #define SOUND_MIXER_RECLEV 11 /* Recording level */ 83 84 /* Some on/off settings (SOUND_SPECIAL_MIN - SOUND_SPECIAL_MAX) */ 85 /* Not counted to SOUND_MIXER_NRDEVICES, but use the same number space */ 86 #define SOUND_ONOFF_MIN 28 87 #define SOUND_ONOFF_MAX 30 88 #define SOUND_MIXER_MUTE 28 /* 0 or 1 */ 89 #define SOUND_MIXER_ENHANCE 29 /* Enhanced stereo (0, 40, 60 or 80) */ 90 #define SOUND_MIXER_LOUD 30 /* 0 or 1 */ 91 92 /* Note! Number 31 cannot be used since the sign bit is reserved */ 93 94 #define SOUND_DEVICE_LABELS {"Vol ", "Bass ", "Trebl", "Synth", "Pcm ", "Spkr ", "Line ", \ 95 "Mic ", "CD ", "Mix ", "Pcm2 ", "rec"} 96 97 #define SOUND_DEVICE_NAMES {"vol", "bass", "treble", "synth", "pcm", "speaker", "line", \ 98 "mic", "cd", "mix", "pcm2", "rec"} 99 100 /* Device bitmask identifiers */ 101 102 #define SOUND_MIXER_RECSRC 0xff /* Arg contains a bit for each recording source */ 103 #define SOUND_MIXER_DEVMASK 0xfe /* Arg contains a bit for each supported device */ 104 #define SOUND_MIXER_RECMASK 0xfd /* Arg contains a bit for each supported recording source */ 105 #define SOUND_MIXER_CAPS 0xfc 106 #define SOUND_CAP_EXCL_INPUT 0x00000001 /* Only one recording source at a time */ 107 #define SOUND_MIXER_STEREODEVS 0xfb /* Mixer channels supporting stereo */ 108 109 /* Device mask bits */ 110 111 #define SOUND_MASK_VOLUME (1 << SOUND_MIXER_VOLUME) 112 #define SOUND_MASK_BASS (1 << SOUND_MIXER_BASS) 113 #define SOUND_MASK_TREBLE (1 << SOUND_MIXER_TREBLE) 114 #define SOUND_MASK_SYNTH (1 << SOUND_MIXER_SYNTH) 115 #define SOUND_MASK_PCM (1 << SOUND_MIXER_PCM) 116 #define SOUND_MASK_SPEAKER (1 << SOUND_MIXER_SPEAKER) 117 #define SOUND_MASK_LINE (1 << SOUND_MIXER_LINE) 118 #define SOUND_MASK_MIC (1 << SOUND_MIXER_MIC) 119 #define SOUND_MASK_CD (1 << SOUND_MIXER_CD) 120 #define SOUND_MASK_IMIX (1 << SOUND_MIXER_IMIX) 121 #define SOUND_MASK_ALTPCM (1 << SOUND_MIXER_ALTPCM) 122 #define SOUND_MASK_RECLEV (1 << SOUND_MIXER_RECLEV) 123 124 #define SOUND_MASK_MUTE (1 << SOUND_MIXER_MUTE) 125 #define SOUND_MASK_ENHANCE (1 << SOUND_MIXER_ENHANCE) 126 #define SOUND_MASK_LOUD (1 << SOUND_MIXER_LOUD) 127 128 #define MIXER_READ(dev) _IOR('M', dev, int) 129 #define SOUND_MIXER_READ_VOLUME MIXER_READ(SOUND_MIXER_VOLUME) 130 #define SOUND_MIXER_READ_BASS MIXER_READ(SOUND_MIXER_BASS) 131 #define SOUND_MIXER_READ_TREBLE MIXER_READ(SOUND_MIXER_TREBLE) 132 #define SOUND_MIXER_READ_SYNTH MIXER_READ(SOUND_MIXER_SYNTH) 133 #define SOUND_MIXER_READ_PCM MIXER_READ(SOUND_MIXER_PCM) 134 #define SOUND_MIXER_READ_SPEAKER MIXER_READ(SOUND_MIXER_SPEAKER) 135 #define SOUND_MIXER_READ_LINE MIXER_READ(SOUND_MIXER_LINE) 136 #define SOUND_MIXER_READ_MIC MIXER_READ(SOUND_MIXER_MIC) 137 #define SOUND_MIXER_READ_CD MIXER_READ(SOUND_MIXER_CD) 138 #define SOUND_MIXER_READ_IMIX MIXER_READ(SOUND_MIXER_IMIX) 139 #define SOUND_MIXER_READ_ALTPCM MIXER_READ(SOUND_MIXER_ALTPCM) 140 #define SOUND_MIXER_READ_RECLEV MIXER_READ(SOUND_MIXER_RECLEV) 141 #define SOUND_MIXER_READ_MUTE MIXER_READ(SOUND_MIXER_MUTE) 142 #define SOUND_MIXER_READ_ENHANCE MIXER_READ(SOUND_MIXER_ENHANCE) 143 #define SOUND_MIXER_READ_LOUD MIXER_READ(SOUND_MIXER_LOUD) 144 145 #define SOUND_MIXER_READ_RECSRC MIXER_READ(SOUND_MIXER_RECSRC) 146 #define SOUND_MIXER_READ_DEVMASK MIXER_READ(SOUND_MIXER_DEVMASK) 147 #define SOUND_MIXER_READ_RECMASK MIXER_READ(SOUND_MIXER_RECMASK) 148 #define SOUND_MIXER_READ_STEREODEVS MIXER_READ(SOUND_MIXER_STEREODEVS) 149 #define SOUND_MIXER_READ_CAPS MIXER_READ(SOUND_MIXER_CAPS) 150 151 #define MIXER_WRITE(dev) _IOWR('M', dev, int) 152 #define SOUND_MIXER_WRITE_VOLUME MIXER_WRITE(SOUND_MIXER_VOLUME) 153 #define SOUND_MIXER_WRITE_BASS MIXER_WRITE(SOUND_MIXER_BASS) 154 #define SOUND_MIXER_WRITE_TREBLE MIXER_WRITE(SOUND_MIXER_TREBLE) 155 #define SOUND_MIXER_WRITE_SYNTH MIXER_WRITE(SOUND_MIXER_SYNTH) 156 #define SOUND_MIXER_WRITE_PCM MIXER_WRITE(SOUND_MIXER_PCM) 157 #define SOUND_MIXER_WRITE_SPEAKER MIXER_WRITE(SOUND_MIXER_SPEAKER) 158 #define SOUND_MIXER_WRITE_LINE MIXER_WRITE(SOUND_MIXER_LINE) 159 #define SOUND_MIXER_WRITE_MIC MIXER_WRITE(SOUND_MIXER_MIC) 160 #define SOUND_MIXER_WRITE_CD MIXER_WRITE(SOUND_MIXER_CD) 161 #define SOUND_MIXER_WRITE_IMIX MIXER_WRITE(SOUND_MIXER_IMIX) 162 #define SOUND_MIXER_WRITE_ALTPCM MIXER_WRITE(SOUND_MIXER_ALTPCM) 163 #define SOUND_MIXER_WRITE_RECLEV MIXER_WRITE(SOUND_MIXER_RECLEV) 164 #define SOUND_MIXER_WRITE_MUTE MIXER_WRITE(SOUND_MIXER_MUTE) 165 #define SOUND_MIXER_WRITE_ENHANCE MIXER_WRITE(SOUND_MIXER_ENHANCE) 166 #define SOUND_MIXER_WRITE_LOUD MIXER_WRITE(SOUND_MIXER_LOUD) 167 168 #define SOUND_MIXER_WRITE_RECSRC MIXER_WRITE(SOUND_MIXER_RECSRC) 169 170 /* 171 * The following mixer ioctl calls are compatible with the BSD driver by 172 * Steve Haehnichen <shaehnic@ucsd.edu> 173 */ 174 175 typedef unsigned char BYTE; 176 typedef unsigned char FLAG; 177 struct stereo_vol 178 { 179 BYTE l; /* Left volume */ 180 BYTE r; /* Right volume */ 181 }; 182 183 #define MIXER_IOCTL_SET_LEVELS _IOW ('s', 20, struct sb_mixer_levels) 184 #define MIXER_IOCTL_SET_PARAMS _IOW ('s', 21, struct sb_mixer_params) 185 #define MIXER_IOCTL_READ_LEVELS _IOR ('s', 22, struct sb_mixer_levels) 186 #define MIXER_IOCTL_READ_PARAMS _IOR ('s', 23, struct sb_mixer_params) 187 #define MIXER_IOCTL_RESET _IO ('s', 24) 188 189 /* 190 * Mixer volume levels for MIXER_IOCTL_SET_VOL & MIXER_IOCTL_READ_VOL 191 */ 192 struct sb_mixer_levels 193 { 194 struct stereo_vol master; /* Master volume */ 195 struct stereo_vol voc; /* DSP Voice volume */ 196 struct stereo_vol fm; /* FM volume */ 197 struct stereo_vol line; /* Line-in volume */ 198 struct stereo_vol cd; /* CD audio */ 199 BYTE mic; /* Microphone level */ 200 }; 201 202 /* 203 * Mixer parameters for MIXER_IOCTL_SET_PARAMS & MIXER_IOCTL_READ_PARAMS 204 */ 205 struct sb_mixer_params 206 { 207 BYTE record_source; /* Recording source (See SRC_xxx below) */ 208 FLAG hifreq_filter; /* Filter frequency (hi/low) */ 209 FLAG filter_input; /* ANFI input filter */ 210 FLAG filter_output; /* DNFI output filter */ 211 FLAG dsp_stereo; /* 1 if DSP is in Stereo mode */ 212 }; 213 214 #define SRC_MIC 1 /* Select Microphone recording source */ 215 #define SRC_CD 3 /* Select CD recording source */ 216 #define SRC_LINE 7 /* Use Line-in for recording source */ 217 218 #endif 219