Print this page
10528 Convert mixer(7I) to mandoc
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/man/man7i/mixer.7i.man.txt
+++ new/usr/src/man/man7i/mixer.7i.man.txt
1 1 MIXER(7I) Ioctl Requests MIXER(7I)
2 2
3 -
4 -
5 3 NAME
6 - mixer - generic mixer device interface
4 + mixer - generic mixer device interface
7 5
8 6 SYNOPSIS
9 - #include <sys/soundcard.h>
7 + #include <sys/soundcard.h>
10 8
11 -
12 9 DESCRIPTION
13 - .
14 -
15 10 Mixer Pseudo-Device
16 - The /dev/mixer pseudo-device is provided for two purposes:
11 + The /dev/mixer pseudo-device is provided for two purposes:
17 12
18 - o The first purpose is for applications that wish to learn
19 - about the list of audio devices on the system, so that they
20 - can select (or provide for users to select) an appropriate
21 - audio device. The /dev/mixer pseudo-device provides
22 - interfaces to enumerate all of the audio devices on the
23 - system.
13 + o The first purpose is for applications that wish to learn about
14 + the list of audio devices on the system, so that they can
15 + select (or provide for users to select) an appropriate audio
16 + device. The /dev/mixer pseudo-device provides interfaces to
17 + enumerate all of the audio devices on the system.
24 18
25 - o The second purpose is for mixer panel type applications
26 - which need to control master settings for the audio hardware
27 - in the system, such as gain levels, balance, port
28 - functionality, and other device features.
19 + o The second purpose is for mixer panel type applications which
20 + need to control master settings for the audio hardware in the
21 + system, such as gain levels, balance, port functionality, and
22 + other device features.
29 23
24 + Ordinary audio applications should not attempt to adjust their playback
25 + or record volumes or other device settings using this device. Instead,
26 + they should use the SNDCTL_DSP_SETPLAYVOL and SNDCTL_DSP_SETRECVOL ioctls
27 + that are documented in dsp(7I).
30 28
31 - Ordinary audio applications should not attempt to adjust their playback
32 - or record volumes or other device settings using this device. Instead,
33 - they should use the SNDCTL_DSP_SETPLAYVOL and SNDCTL_DSP_SETRECVOL
34 - ioctls that are documented in dsp(7I).
35 -
36 29 Sndstat Device
37 - The /dev/sndstat device supports read(2), and can be read to retrieve
38 - human-readable information about the audio devices on the system.
39 - Software should not attempt to interpret the contents of this device.
30 + The /dev/sndstat device supports read(2), and can be read to retrieve
31 + human-readable information about the audio devices on the system.
32 + Software should not attempt to interpret the contents of this device.
40 33
41 34 IOCTLS
42 35 Information IOCTLs
43 - The following ioctls are intended to aid applications in identifying
44 - the audio devices available on the system. These ioctls can be issued
45 - against either the pseudo-device /dev/mixer, or a against a file
46 - descriptor open to any other audio device in the system.
36 + The following ioctls are intended to aid applications in identifying the
37 + audio devices available on the system. These ioctls can be issued
38 + against either the pseudo-device /dev/mixer, or a against a file
39 + descriptor open to any other audio device in the system.
47 40
41 + Applications should issue SNDCTL_SYSINFO first to learn what audio
42 + devices and mixers are available on the system, and then use
43 + SNDCTL_AUDIOINFO or SNDCTL_MIXERINFO to obtain more information about the
44 + audio devices or mixers, respectively.
48 45
49 - Applications should issue SNDCTL_SYSINFO first to learn what audio
50 - devices and mixers are available on the system, and then use
51 - SNDCTL_AUDIOINFO or SNDCTL_MIXERINFO to obtain more information about
52 - the audio devices or mixers, respectively.
46 + OSS_GETVERSION The argument is a pointer to an integer, which
47 + retrieves the version of the OSS API used. The value
48 + is encoded with the major version (currently 4) encoded
49 + in the most significant 16 bits, and a minor version
50 + encoded in the lower 16 bits.
53 51
54 - OSS_GETVERSION
55 - The argument is a pointer to an integer, which
56 - retrieves the version of the OSS API used. The
57 - value is encoded with the major version (currently
58 - 4) encoded in the most significant 16 bits, and a
59 - minor version encoded in the lower 16 bits.
52 + SNDCTL_SYSINFO The argument is a pointer to an oss_sysinfo structure,
53 + which has the following definition:
60 54
55 + typedef struct oss_sysinfo {
56 + char product[32]; /* E.g. SunOS Audio */
57 + char version[32]; /* E.g. 4.0a */
58 + int versionnum; /* See OSS_GETVERSION */
59 + char options[128]; /* NOT SUPPORTED */
61 60
62 - SNDCTL_SYSINFO
63 - The argument is a pointer to an oss_sysinfo
64 - structure, which has the following definition:
61 + int numaudios; /* # of audio/dsp devices */
62 + int openedaudio[8]; /* Reserved, always 0 */
65 63
66 - typedef struct oss_sysinfo {
67 - char product[32]; /* E.g. SunOS Audio */
68 - char version[32]; /* E.g. 4.0a */
69 - int versionnum; /* See OSS_GETVERSION */
70 - char options[128]; /* NOT SUPPORTED */
64 + int numsynths; /* NOT SUPPORTED, always 0 */
65 + int nummidis; /* NOT SUPPORTED, always 0 */
66 + int numtimers; /* NOT SUPPORTED, always 0 */
67 + int nummixers; /* # of mixer devices */
71 68
72 - int numaudios; /* # of audio/dsp devices */
73 - int openedaudio[8]; /* Reserved, always 0 */
69 + /* Mask of midi devices are busy */
70 + int openedmidi[8];
74 71
75 - int numsynths; /* NOT SUPPORTED, always 0 */
76 - int nummidis; /* NOT SUPPORTED, always 0 */
77 - int numtimers; /* NOT SUPPORTED, always 0 */
78 - int nummixers; /* # of mixer devices */
72 + /* Number of sound cards in the system */
73 + int numcards;
79 74
80 - int openedmidi[8]; /* Mask of midi devices are
81 - busy */
82 - int numcards; /* Number of sound cards in
83 - the system */
84 - int numaudioengines; /* Number of audio engines in
85 - the system */
86 - char license[16]; /* E.g. "GPL" or "CDDL" */
87 - char revision_info[256]; /* Reserved */
88 - int filler[172]; /* Reserved */
89 - } oss_sysinfo;
75 + /* Number of audio engines in the system */
76 + int numaudioengines;
77 + char license[16]; /* E.g. "GPL" or "CDDL" */
78 + char revision_info[256]; /* Reserved */
79 + int filler[172]; /* Reserved */
80 + } oss_sysinfo;
90 81
82 + The important fields here are numaudios, which is used
83 + to determine the number of audio devices that can be
84 + queried with SNDCTL_AUDIOINFO, nummixers which provides
85 + a count of mixers on the system, and numcards which
86 + counts to total number of aggregate devices. A card
87 + can consist of one or more audio devices and one or
88 + more mixers, although more typically there is exactly
89 + one audio device and one mixer for each card.
91 90
92 - The important fields here are numaudios, which is
93 - used to determine the number of audio devices that
94 - can be queried with SNDCTL_AUDIOINFO, nummixers
95 - which provides a count of mixers on the system, and
96 - numcards which counts to total number of aggregate
97 - devices. A card can consist of one or more audio
98 - devices and one or more mixers, although more
99 - typically there is exactly one audio device and one
100 - mixer for each card.
91 + SNDCTL_AUDIOINFO The argument is a pointer to an oss_audioinfo
92 + structure, which has the following structure:
101 93
94 + typedef struct oss_audioinfo {
95 + int dev; /* Device to query */
96 + char name[64]; /* Human readable name */
97 + int busy; /* reserved */
98 + int pid; /* reserved */
102 99
103 - SNDCTL_AUDIOINFO
104 - The argument is a pointer to an oss_audioinfo
105 - structure, which has the following structure:
100 + /* PCM_CAP_INPUT, PCM_CAP_OUTPUT */
101 + int caps;
102 + int iformats; /* Supported input formats */
103 + int oformats; /* Supported output formats */
104 + int magic; /* reserved */
105 + char cmd[64]; /* reserved */
106 + int card_number;
107 + int port_number; /* reserved */
108 + int mixer_dev;
106 109
107 - typedef struct oss_audioinfo {
108 - int dev; /* Device to query */
109 - char name[64]; /* Human readable name */
110 - int busy; /* reserved */
111 - int pid; /* reserved */
112 - int caps; /* PCM_CAP_INPUT, PCM_CAP_OUTPUT */
113 - int iformats; /* Supported input formats */
114 - int oformats; /* Supported output formats */
115 - int magic; /* reserved */
116 - char cmd[64]; /* reserved */
117 - int card_number;
118 - int port_number; /* reserved */
119 - int mixer_dev;
120 - int legacy_device; /* Obsolete field.
121 - Replaced by devnode */
122 - int enabled; /* reserved */
123 - int flags; /* reserved */
124 - int min_rate; /* Minimum sample rate */
125 - int max_rate; /* Maximum sample rate */
126 - int min_channels; /* Minimum number
127 - of channels */
128 - int max_channels; /* Maximum number
129 - of channels */
130 - int binding; /* reserved */
131 - int rate_source; /* reserved */
132 - char handle[32]; /* reserved */
133 - unsigned int nrates; /* reserved */
134 - unsigned int rates[20]; /* reserved */
135 - char song_name[64]; /* reserved */
136 - char label[16]; /* reserved */
137 - int latency; /* reserved */
138 - char devnode[32]; /* Device special file
139 - name (absolute path) */
140 - int next_play_engine; /* reserved */
141 - int next_rec_engine; /* reserved */
142 - int filler[184]; /* reserved */
143 - } oss_audioinfo;
110 + /* Obsolete field. Replaced by devnode */
111 + int legacy_device;
112 + int enabled; /* reserved */
113 + int flags; /* reserved */
114 + int min_rate; /* Minimum sample rate */
115 + int max_rate; /* Maximum sample rate */
116 + int min_channels; /* Minimum number of channels */
117 + int max_channels; /* Maximum number of channels */
118 + int binding; /* reserved */
119 + int rate_source; /* reserved */
120 + char handle[32]; /* reserved */
121 + unsigned int nrates; /* reserved */
122 + unsigned int rates[20]; /* reserved */
123 + char song_name[64]; /* reserved */
124 + char label[16]; /* reserved */
125 + int latency; /* reserved */
144 126
127 + /* Device special file name (absolute path) */
128 + char devnode[32];
129 + int next_play_engine; /* reserved */
130 + int next_rec_engine; /* reserved */
131 + int filler[184]; /* reserved */
132 + } oss_audioinfo;
145 133
146 - In the above structure, all of the fields are
147 - reserved except the following: dev, name,
148 - card_number, mixer_dev, caps, min_rate, max_rate,
149 - min_channels, max_channels, and devnode. The
150 - reserved fields are provided for compatibility with
151 - other OSS implementations, and available for legacy
152 - applications. New applications should not attempt
153 - to use these fields.
134 + In the above structure, all of the fields are reserved
135 + except the following: dev, name, card_number,
136 + mixer_dev, caps, min_rate, max_rate, min_channels,
137 + max_channels, and devnode. The reserved fields are
138 + provided for compatibility with other OSS
139 + implementations, and available for legacy applications.
140 + New applications should not attempt to use these
141 + fields.
154 142
155 - The dev field should be initialized by the
156 - application to the number of the device to query.
157 - This is a number between zero (inclusive) and value
158 - of numaudios (exclusive) returned by
159 - SNDCTL_SYSINFO. Alternatively, when issuing the
160 - ioctl against a real mixer or dsp device, the
161 - special value -1 can be used to indicate that the
162 - query is being made against the device opened. If
163 - -1 is used, the field is overwritten with the
164 - device number for the current device on successful
165 - return.
143 + The dev field should be initialized by the application
144 + to the number of the device to query. This is a number
145 + between zero (inclusive) and value of numaudios
146 + (exclusive) returned by SNDCTL_SYSINFO. Alternatively,
147 + when issuing the ioctl against a real mixer or dsp
148 + device, the special value -1 can be used to indicate
149 + that the query is being made against the device opened.
150 + If -1 is used, the field is overwritten with the device
151 + number for the current device on successful return.
166 152
167 - No other fields are significant upon entry, but a
168 - successful return contains details of the device.
153 + No other fields are significant upon entry, but a
154 + successful return contains details of the device.
169 155
170 - The name field is a human readable name
171 - representing the device. Applications should not
172 - try to interpret it.
156 + The name field is a human readable name representing
157 + the device. Applications should not try to interpret
158 + it.
173 159
174 - The card_number field indicates the number assigned
175 - to the aggregate device. This can be used with the
176 - SNDCTL_CARDINFO ioctl.
160 + The card_number field indicates the number assigned to
161 + the aggregate device. This can be used with the
162 + SNDCTL_CARDINFO ioctl.
177 163
178 - The mixer_dev is the mixer device number for the
179 - mixing device associated with the audio device.
180 - This can be used with the SNDCTL_MIXERINFO ioctl.
164 + The mixer_dev is the mixer device number for the mixing
165 + device associated with the audio device. This can be
166 + used with the SNDCTL_MIXERINFO ioctl.
181 167
182 - The caps field contains any of the bits
183 - PCM_CAP_INPUT, PCM_CAP_OUTPUT, and PCM_CAP_DUPLEX.
184 - Indicating whether the device support input,
185 - output, and whether input and output can be used
186 - simultaneously. All other bits are reserved.
168 + The caps field contains any of the bits PCM_CAP_INPUT,
169 + PCM_CAP_OUTPUT, and PCM_CAP_DUPLEX. Indicating whether
170 + the device support input, output, and whether input and
171 + output can be used simultaneously. All other bits are
172 + reserved.
187 173
188 - The min_rate and max_rate fields indicate the
189 - minimum and maximum sample rates supported by the
190 - device. Most applications should try to use the
191 - maximum supported rate for the best audio quality
192 - and lowest system resource consumption.
174 + The min_rate and max_rate fields indicate the minimum
175 + and maximum sample rates supported by the device. Most
176 + applications should try to use the maximum supported
177 + rate for the best audio quality and lowest system
178 + resource consumption.
193 179
194 - The min_channels and max_channels provide an
195 - indication of the number of channels (1 for mono, 2
196 - for stereo, 6 for 5.1, etc.) supported by the
197 - device.
180 + The min_channels and max_channels provide an indication
181 + of the number of channels (1 for mono, 2 for stereo, 6
182 + for 5.1, etc.) supported by the device.
198 183
199 - The devnode field contains the actual full path to
200 - the device node for this device, such as
201 - /dev/sound/audio810:0dsp. Applications should open
202 - this file to access the device.
184 + The devnode field contains the actual full path to the
185 + device node for this device, such as
186 + /dev/sound/audio810:0dsp. Applications should open
187 + this file to access the device.
203 188
189 + SNDCTL_CARDINFO The argument is a pointer to a struct oss_card_info,
190 + which has the following definition:
204 191
205 - SNDCTL_CARDINFO
206 - The argument is a pointer to a struct
207 - oss_card_info, which has the following definition:
192 + typedef struct oss_card_info {
193 + int card;
194 + char shortname[16];
195 + char longname[128];
196 + int flags; /* reserved */
197 + char hw_info[400];
198 + int intr_count; /* reserved */
199 + int ack_count; /* reserved */
200 + int filler[154];
201 + } oss_card_info;
208 202
209 - typedef struct oss_card_info {
210 - int card;
211 - char shortname[16];
212 - char longname[128];
213 - int flags;/* reserved */
214 - char hw_info[400];
215 - int intr_count;/* reserved */
216 - int ack_count;/* reserved */
217 - int filler[154];
218 - } oss_card_info;
203 + This ioctl is used to query for information about the
204 + aggregate audio device.
219 205
206 + The card field should be initialized by the application
207 + to the number of the card to query. This is a number
208 + between zero (inclusive) and value of numcards
209 + (exclusive) returned by SNDCTL_SYSINFO. Alternatively,
210 + when issuing the ioctl against a real mixer or dsp
211 + device, the special value -1 can be used to indicate
212 + that the query is being made against the device opened.
213 + If -1 is used, the field is overwritten with the number
214 + for the current hardware device on successful return.
220 215
221 - This ioctl is used to query for information about
222 - the aggregate audio device.
216 + The shortname, longname, and hw_info contain ASCIIZ
217 + strings describing the device in more detail. The
218 + hw_info member can contain multiple lines of detail,
219 + each line ending in a NEWLINE.
223 220
224 - The card field should be initialized by the
225 - application to the number of the card to query.
226 - This is a number between zero inclusive and value
227 - of numcards (exclusive) returned by
228 - SNDCTL_SYSINFO.) Alternatively, when issuing the
229 - ioctl against a real mixer or dsp device, the
230 - special value -1 can be used to indicate that the
231 - query is being made against the device opened. If
232 - -1 is used, the field is overwritten with the
233 - number for the current hardware device on
234 - successful return.
221 + The flag, intr_count, and ack_count fields are not used
222 + by this implementation.
235 223
236 - The shortname, longname, and hw_info contain ASCIIZ
237 - strings describing the device in more detail. The
238 - hw_info member can contain multiple lines of
239 - detail, each line ending in a NEWLINE.
224 + SNDCTL_MIXERINFO The argument is a pointer to a struct oss_mixer_info,
225 + which has the following definition:
240 226
241 - The flag, intr_count, and ack_count fields are not
242 - used by this implementation.
227 + typedef struct oss_mixerinfo {
228 + int dev;
229 + char id[16]; /* Reserved */
230 + char name[32];
231 + int modify_counter;
232 + int card_number;
233 + int port_number; /* Reserved */
234 + char handle[32]; /* Reserved */
235 + int magic; /* Reserved */
236 + int enabled; /* Reserved */
237 + int caps; /* Reserved */
238 + int flags; /* Reserved */
239 + int nrext;
240 + int priority;
243 241
242 + /* Deice special file name (absolute path) */
243 + char devnode[32];
244 + int legacy_device; /* Reserved */
245 + int filler[245]; /* Reserved */
246 + } oss_mixerinfo;
244 247
245 - SNDCTL_MIXERINFO
246 - The argument is a pointer to a struct
247 - oss_mixer_info, which has the following definition:
248 + In the above structure, all of the fields are reserved
249 + except the following: dev, name, modify_counter,
250 + card_number, nrext, priority, and devnode. The
251 + reserved fields are provided for compatibility with
252 + other OSS implementations, and available for legacy
253 + applications. New applications should not attempt to
254 + use these fields.
248 255
249 - typedef struct oss_mixerinfo {
250 - int dev;
251 - char id[16];/* Reserved */
252 - char name[32];
253 - int modify_counter;
254 - int card_number;
255 - int port_number;/* Reserved */
256 - char handle[32];/* Reserved */
257 - int magic;/* Reserved */
258 - int enabled;/* Reserved */
259 - int caps;/* Reserved */
260 - int flags;/* Reserved */
261 - int nrext;
262 - int priority;
263 - char devnode[32];/* Device special file name
264 - (absolute path) */
265 - int legacy_device;/* Reserved */
266 - int filler[245];/* Reserved */
267 - } oss_mixerinfo;
256 + The dev field should be initialized by the application
257 + to the number of the device to query. This is a number
258 + between zero inclusive and value of nummixers
259 + (exclusive) returned by SNDCTL_SYSINFO, or by
260 + SNDCTL_MIX_NRMIX. Alternatively, when issuing the
261 + ioctl against a real mixer or dsp device, the special
262 + value -1 can be used to indicate that the query is
263 + being made against the device opened. If -1 is used,
264 + the field is overwritten with the mixer number for the
265 + current open file on successful return.
268 266
267 + No other fields are significant upon entry, but on
268 + successful return contains details of the device.
269 269
270 - In the above structure, all of the fields are
271 - reserved except the following: dev, name,
272 - modify_counter, card_number, nrext, priority, and
273 - devnode. The reserved fields are provided for
274 - compatibility with other OSS implementations, and
275 - available for legacy applications. New
276 - applications should not attempt to use these
277 - fields.
270 + The name field is a human readable name representing
271 + the device. Applications should not try to interpret
272 + it.
278 273
279 - The dev field should be initialized by the
280 - application to the number of the device to query.
281 - This is a number between zero inclusive and value
282 - of nummixers (exclusive) returned by
283 - SNDCTL_SYSINFO, or by SNDCTL_MIX_NRMIX.
284 - Alternatively, when issuing the ioctl against a
285 - real mixer or dsp device, the special value -1 can
286 - be used to indicate that the query is being made
287 - against the device opened. If -1 is used, the field
288 - is overwritten with the mixer number for the
289 - current open file on successful return.
274 + The modify_counter is changed by the mixer framework
275 + each time the settings for the various controls or
276 + extensions of the device are changed. Applications can
277 + poll this value to learn if any other changes need to
278 + be searched for.
290 279
291 - No other fields are significant upon entry, but on
292 - successful return contains details of the device.
280 + The card_number field is the number of the aggregate
281 + audio device this mixer is located on. It can be used
282 + with the SNDCTL_CARDINFO ioctl.
293 283
294 - The name field is a human readable name
295 - representing the device. Applications should not
296 - try to interpret it.
284 + The nrext field is the number of mixer extensions
285 + available on this mixer. See the SNDCTL_MIX_NREXT
286 + description.
297 287
298 - The modify_counter is changed by the mixer
299 - framework each time the settings for the various
300 - controls or extensions of the device are changed.
301 - Applications can poll this value to learn if any
302 - other changes need to be searched for.
288 + The priority is used by the framework to assign a
289 + preference that applications can use in choosing a
290 + device. Higher values are preferable. Mixers with
291 + priorities less than -1 should never be selected by
292 + default.
303 293
304 - The card_number field is the number of the
305 - aggregate audio device this mixer is located on. It
306 - can be used with the SNDCTL_CARDINFO ioctl.
294 + The devnode field contains the actual full path to the
295 + device node for the physical mixer, such as
296 + /dev/sound/audio810:0mixer. Applications should open
297 + this file to access the mixer settings.
307 298
308 - The nrext field is the number of mixer extensions
309 - available on this mixer. See the SNDCTL_MIX_NREXT
310 - description.
311 -
312 - The priority is used by the framework to assign a
313 - preference that applications can use in choosing a
314 - device. Higher values are preferable. Mixers with
315 - priorities less than -1 should never be selected by
316 - default.
317 -
318 - The devnode field contains the actual full path to
319 - the device node for the physical mixer, such as
320 - /dev/sound/audio810:0mixer. Applications should
321 - open this file to access the mixer settings.
322 -
323 -
324 299 Mixer Extension IOCTLs
325 - The pseudo /dev/mixer device supports ioctls that can change the
326 - various settings for the audio hardware in the system.
300 + The pseudo /dev/mixer device supports ioctls that can change the oarious
301 + settings for the audio hardware in the system.
327 302
303 + Those ioctls should only be used by dedicated mixer applications or
304 + desktop olumme controls, and not by typical ordinary audio applications
305 + such as media players. Ordinary applications that wish to adjust their
306 + own volume settings should use the SNDCTL_DSP_SETPLAYVOL or
307 + SNDCTL_DSP_SETRECVOL ioctls for that purpose. See dsp(7I) for more
308 + information. Ordinary applications should never attempt to change master
309 + port selection or hardware settings such as monitor gain settings.
328 310
329 - Those ioctls should only be used by dedicated mixer applications or
330 - desktop volume controls, and not by typical ordinary audio applications
331 - such as media players. Ordinary applications that wish to adjust their
332 - own volume settings should use the SNDCTL_DSP_SETPLAYVOL or
333 - SNDCTL_DSP_SETRECVOL ioctls for that purpose. See dsp(7I) for more
334 - information. Ordinary applications should never attempt to change
335 - master port selection or hardware settings such as monitor gain
336 - settings.
311 + The ioctls in this section can only be used to access the mixer device
312 + that is associated with the current file descriptor.
337 313
314 + Applications should not assume that a single /dev/mixer node is able to
315 + access any physical settings. Instead, they should use the ioctl
316 + SNDCTL_MIXERINFO to determine the device path for the real mixer device,
317 + and issue ioctls on a file descriptor opened against the corresponding
318 + devnode field.
338 319
339 - The ioctls in this section can only be used to access the mixer device
340 - that is associated with the current file descriptor.
320 + When a dev member is specified in each of the following ioctls, the
321 + application should specify -1, although for compatibility the mixer
322 + allows the application to specify the mixer device number.
341 323
324 + SNDCTL_MIX_NRMIX The argument is a pointer to an integer, which
325 + receives the number of mixer devices in the system.
326 + Each can be queried by using its number with the
327 + SNDCTL_MIXERINFO ioctl. The same information is
328 + available using the SNDCTL_SYSINFO ioctl.
342 329
343 - Applications should not assume that a single /dev/mixer node is able to
344 - access any physical settings. Instead, they should use the ioctl
345 - SNDCTL_MIXERINFO to determine the device path for the real mixer
346 - device, and issue ioctls on a file descriptor opened against the
347 - corresponding devnode field.
330 + SNDCTL_MIX_NREXT The argument is a pointer to an integer. On entry,
331 + the integer should contain the special value -1. On
332 + return the argument receives the number of mixer
333 + extensions (or mixer controls) supported by the
334 + mixer device. More details about each extension can
335 + be obtained by SNDCTL_MIX_EXTINFO ioctl.
348 336
337 + SNDCTL_MIX_EXTINFO The argument is a pointer to an oss_mixext structure
338 + which is defined as follows:
349 339
350 - When a dev member is specified in each of the following ioctls, the
351 - application should specify -1, although for compatibility the mixer
352 - allows the application to specify the mixer device number.
340 + typedef struct oss_mixext {
341 + int dev; /* Mixer device number */
342 + int ctrl; /* Extension number */
343 + int type; /* Entry type */
344 + int maxvalue;
345 + int minvalue;
346 + int flags;
347 + char id[16]; /* Mnemonic ID (internal use) */
348 + int parent; /* Entry# of parent (-1 if root) */
349 + int dummy; /* NOT SUPPORTED */
350 + int timestamp;
351 + char data[64]; /* Reserved */
353 352
354 - SNDCTL_MIX_NRMIX
355 - The argument is a pointer to an integer, which
356 - receives the number of mixer devices in the
357 - system. Each can be queried by using its number
358 - with the SNDCTL_MIXERINFO ioctl. The same
359 - information is available using the
360 - SNDCTL_SYSINFO ioctl.
353 + /* Mask of allowed enum values */
354 + unsigned char enum_present[32];
355 + int control_no; /* Reserved */
356 + unsigned int desc; /* NOT SUPPORTED */
357 + char extname[32];
358 + int update_counter;
359 + int filler[7]; /* Reserved */
360 + } oss_mixext;
361 361
362 + On entry, the dev field should be initialized to the
363 + value -1, and the ctrl field should be initialized
364 + with the number of the extension being accessed.
365 + Between 0, inclusive, and the value returned by
366 + SNDCTL_MIX_NREXT, exclusive.
362 367
363 - SNDCTL_MIX_NREXT
364 - The argument is a pointer to an integer. On
365 - entry, the integer should contain the special
366 - value -1. On return the argument receives the
367 - number of mixer extensions (or mixer controls)
368 - supported by the mixer device. More details
369 - about each extension can be obtained by
370 - SNDCTL_MIX_EXTINFO ioctl.
368 + Mixer extensions are organized as a logical tree,
369 + starting with a root node. The root node always has
370 + a ctrl value of zero. The structure of the tree can
371 + be determined by looking at the parent field, which
372 + contains the extension number of the parent
373 + extension, or -1 if the extension is the root
374 + extension.
371 375
376 + The type indicates the type of extension used. This
377 + implementation supports the following values:
372 378
373 - SNDCTL_MIX_EXTINFO
374 - The argument is a pointer to an oss_mixext
375 - structure which is defined as follows:
379 + MIXT_DEVROOT Root node for extension tree
380 + MIXT_GROUP Logical grouping of controls
381 + MXIT_ONOFF Boolean value, 0 = off, 1 = on.
382 + MIXT_ENUM Enumerated value, 0 to maxvalue.
383 + MIXT_MONOSLIDER Monophonic slider, 0 to 255.
384 + MIXT_STEREOSLIDER Stereophonic slider, 0 to 255
385 + (encoded as lower two bytes in
386 + value.)
387 + MIXT_MARKER Place holder, can ignore.
376 388
377 - typedef struct oss_mixext {
378 - int dev; /* Mixer device number */
379 - int ctrl; /* Extension number */
380 - int type; /* Entry type */
381 - int maxvalue;
382 - int minvalue;
383 - int flags;
384 - char id[16]; /* Mnemonic ID (internal use) */
385 - int parent; /* Entry# of parent
386 - (-1 if root) */
387 - int dummy; /* NOT SUPPORTED */
388 - int timestamp;
389 - char data[64]; /* Reserved */
390 - unsigned char enum_present[32]; /* Mask
391 - of allowed
392 - enum
393 - values */
394 - int control_no; /* Reserved */
395 - unsigned int desc; /* NOT SUPPORTED */
396 - char extname[32];
397 - int update_counter;
398 - int filler[7]; /* Reserved */
399 - } oss_mixext;
389 + The flags field is a bit array. This implementation
390 + makes use of the following possible bits:
400 391
392 + MIXF_READABLE Extension's value is readable.
393 + MIXF_WRITEABLE Extension's value is modifiable.
394 + MIXF_POLL Extension can self-update.
395 + MIXF_PCMVOL Extension is for master PCM
396 + playback volume.
397 + MIXF_MAINVOL Extension is for a typical analog
398 + volume
399 + MIXF_RECVOL Extension is for master record
400 + gain.
401 + MIXF_MONVOL Extension is for a monitor
402 + source's gain.
401 403
402 - On entry, the dev field should be initialized to
403 - the value -1, and the ctrl field should be
404 - initialized with the number of the extension
405 - being accessed. Between 0, inclusive, and the
406 - value returned by SNDCTL_MIX_NREXT, exclusive.
404 + The id field contains an ASCIIZ identifier for the
405 + extension.
407 406
408 - Mixer extensions are organized as a logical
409 - tree, starting with a root node. The root node
410 - always has a ctrl value of zero. The structure
411 - of the tree can be determined by looking at the
412 - parent field, which contains the extension
413 - number of the parent extension, or -1 if the
414 - extension is the root extension.
407 + The timestamp field is set when the extension tree
408 + is first initialized. Applications must use the
409 + same timestamp value when attempting to change the
410 + values. A change in the timestamp indicates a
411 + change a in the structure of the extension tree.
415 412
416 - The type indicates the type of extension used.
417 - This implementation supports the following
418 - values:
413 + The enum_present field is a bit mask of possible
414 + enumeration values. If a bit is present in the
415 + enum_present mask, then the corresponding
416 + enumeration value is legal. The mask is in little
417 + endian order.
419 418
420 - MIXT_DEVROOT Root node for extension tree
421 - MIXT_GROUP Logical grouping of controls
422 - MXIT_ONOFF Boolean value, 0 = off, 1 = on.
423 - MIXT_ENUM Enumerated value, 0 to maxvalue.
424 - MIXT_MONOSLIDER Monophonic slider, 0 to 255.
425 - MIXT_STEREOSLIDER Stereophonic slider, 0 to 255
426 - (encoded as
427 - lower two bytes in value.)
428 - MIXT_MARKER Place holder, can ignore.
419 + The desc field provides information about scoping,
420 + which can be useful as layout hints to applications.
421 + The following hints are available:
429 422
423 + MIXEXT_SCOPE_MASK Mask of possible scope
424 + values.
425 + MIXEXT_SCOPE_INPUT Extension is an input
426 + control.
427 + MIXEXT_SCOPE_OUTPUT Extension is an output
428 + control.
429 + MIXEXT_SCOPE_MONITOR Extension relates to input
430 + monitoring.
431 + MIXEXT_SCOPE_OTHER scoping hint provided.
430 432
431 - The flags field is a bit array. This
432 - implementation makes use of the following
433 - possible bits:
433 + The extname is the full name of the extension.
434 434
435 - MIXF_READABLE Extension's value is readable.
436 - MIXF_WRITEABLE Extension's value is modifiable.
437 - MIXF_POLL Extension can self-update.
438 - MIXF_PCMVOL Extension is for master
439 - PCM playback volume.
440 - MIXF_MAINVOL Extension is for a typical
441 - analog volume
442 - MIXF_RECVOL Extension is for master
443 - record gain.
444 - MIXF_MONVOL Extension is for a monitor
445 - source's gain.
435 + The update_counter is incremented each time the
436 + control's value is changed.
446 437
438 + SNDCTL_MIX_ENUMINFO The argument is a pointer to an oss_mixer_enuminfo
439 + structure, which is defined as follows:
447 440
448 - The id field contains an ASCIIZ identifier for
449 - the extension.
441 + typedef struct oss_mixer_enuminfo {
442 + int dev;
443 + int ctrl;
444 + int nvalues;
445 + int version;
446 + short strindex[255];
447 + char strings[3000];
448 + } oss_mixer_enuminfo;
450 449
451 - The timestamp field is set when the extension
452 - tree is first initialized. Applications must
453 - use the same timestamp value when attempting to
454 - change the values. A change in the timestamp
455 - indicates a change a in the structure of the
456 - extension tree.
450 + On entry, the dev field should be initialized to the
451 + value -1, and the ctrl field should be initialized
452 + with the number of the extension being accessed.
453 + Between 0, inclusive, and the value returned by
454 + SNDCTL_MIX_NREXT, exclusive.
457 455
458 - The enum_present field is a bit mask of possible
459 - enumeration values. If a bit is present in the
460 - enum_present mask, then the corresponding
461 - enumeration value is legal. The mask is in
462 - little endian order.
456 + On return the nvalues field contains the number of
457 + values, and strindex contains an array of indices
458 + into the strings member, each index pointing to an
459 + ASCIIZ describing the enumeration value.
463 460
464 - The desc field provides information about
465 - scoping, which can be useful as layout hints to
466 - applications. The following hints are available:
461 + SNDCTL_MIX_READ
462 + SNDCTL_MIX_WRITE The argument is a pointer to an oss_mixer_value
463 + structure, defined as follows:
467 464
468 - MIXEXT_SCOPE_MASK Mask of possible scope
469 - values.
470 - MIXEXT_SCOPE_INPUT Extension is an input
471 - control.
472 - MIXEXT_SCOPE_OUTPUT Extension is an
473 - output control.
474 - MIXEXT_SCOPE_MONITOR Extension relates to
475 - input monitoring.
476 - MIXEXT_SCOPE_OTHER No scoping hint provided.
465 + typedef struct oss_mixer_value {
466 + int dev;
467 + int ctrl;
468 + int value;
477 469
470 + /* Reserved for future use. Initialize to 0 */
471 + int flags;
478 472
479 - The extname is the full name of the extension.
473 + /* Must be set to oss_mixext.timestamp */
474 + int timestamp;
480 475
481 - The update_counter is incremented each time the
482 - control's value is changed.
476 + /* Reserved for future use. Initialize to 0 */
477 + int filler[8];
478 + } oss_mixer_value;
483 479
480 + On entry, the dev field should be initialized to the
481 + value -1, and the ctrl field should be initialized
482 + with the number of the extension being accessed.
483 + Between 0, inclusive, and the value returned by
484 + SNDCTL_MIX_NREXT, exclusive. Additionally, the
485 + timestamp member must be initialized to the same
486 + value as was supplied in the oss_mixext structure
487 + used with SNDCTL_MIX_EXTINFO.
484 488
485 - SNDCTL_MIX_ENUMINFO
486 - The argument is a pointer to an
487 - oss_mixer_enuminfo structure, which is defined
488 - as follows:
489 + For SNDCTL_MIX_WRITE, the application should supply
490 + the new value for the extension. For
491 + SNDCTL_MIX_READ, the mixer returns the extensions
492 + current value in value.
489 493
490 - typedef struct oss_mixer_enuminfo {
491 - int dev;
492 - int ctrl;
493 - int nvalues;
494 - int version;
495 - short strindex[255];
496 - char strings[3000];
497 - } oss_mixer_enuminfo;
498 -
499 -
500 - On entry, the dev field should be initialized to
501 - the value -1, and the ctrl field should be
502 - initialized with the number of the extension
503 - being accessed. Between 0, inclusive, and the
504 - value returned by SNDCTL_MIX_NREXT, exclusive.
505 -
506 - On return the nvalues field contains the number
507 - of values, and strindex contains an array of
508 - indices into the strings member, each index
509 - pointing to an ASCIIZ describing the enumeration
510 - value.
511 -
512 -
513 - SNDCTL_MIX_READ
514 - SNDCTL_MIX_WRITE
515 - The argument is a pointer to an oss_mixer_value
516 - structure, defined as follows:
517 -
518 - typedef struct oss_mixer_value {
519 - int dev;
520 - int ctrl;
521 - int value;
522 - int flags; /* Reserved for future use.
523 - Initialize to 0 */
524 - int timestamp; /* Must be set to
525 - oss_mixext.timestamp */
526 - int filler[8]; /* Reserved for future use.
527 - Initialize to 0 */
528 - } oss_mixer_value;
529 -
530 -
531 - On entry, the dev field should be initialized to
532 - the value -1, and the ctrl field should be
533 - initialized with the number of the extension
534 - being accessed. Between 0, inclusive, and the
535 - value returned by SNDCTL_MIX_NREXT, exclusive.
536 - Additionally, the timestamp member must be
537 - initialized to the same value as was supplied in
538 - the oss_mixext structure used with
539 - SNDCTL_MIX_EXTINFO.
540 -
541 - For SNDCTL_MIX_WRITE, the application should
542 - supply the new value for the extension. For
543 - SNDCTL_MIX_READ, the mixer returns the
544 - extensions current value in value.
545 -
546 -
547 494 Compatibility IOCTLs
548 - The following ioctls are for compatibility use only:
495 + The following ioctls are for compatibility use only:
549 496
550 - SOUND_MIXER_READ_VOLUME
551 - SOUND_MIXER_READ_PCM
552 - SOUND_MIXER_READ_OGAIN
553 - SOUND_MIXER_READ_RECGAIN
554 - SOUND_MIXER_READ_RECLEV
555 - SOUND_MIXER_READ_IGAIN
556 - SOUND_MIXER_READ_RECSRC
557 - SOUND_MIXER_READ_RECMASK
558 - SOUND_MIXER_READ_DEVMASK
559 - SOUND_MIXER_READ_STEREODEVS
560 - SOUND_MIXER_WRITE_VOLUME
561 - SOUND_MIXER_WRITE_PCM
562 - SOUND_MIXER_WRITE_OGAIN
563 - SOUND_MIXER_WRITE_RECGAIN
564 - SOUND_MIXER_WRITE_RECLEV
565 - SOUND_MIXER_WRITE_IGAIN
566 - SOUND_MIXER_WRITE_RECSRC
567 - SOUND_MIXER_WRITE_RECMASK
568 - SOUND_MIXER_INFO
569 - SNDCTL_AUDIOINFO_EX
570 - SNDCTL_ENGINEINFO
497 + SOUND_MIXER_READ_VOLUME
498 + SOUND_MIXER_READ_PCM
499 + SOUND_MIXER_READ_OGAIN
500 + SOUND_MIXER_READ_RECGAIN
501 + SOUND_MIXER_READ_RECLEV
502 + SOUND_MIXER_READ_IGAIN
503 + SOUND_MIXER_READ_RECSRC
504 + SOUND_MIXER_READ_RECMASK
505 + SOUND_MIXER_READ_DEVMASK
506 + SOUND_MIXER_READ_STEREODEVS
507 + SOUND_MIXER_WRITE_VOLUME
508 + SOUND_MIXER_WRITE_PCM
509 + SOUND_MIXER_WRITE_OGAIN
510 + SOUND_MIXER_WRITE_RECGAIN
511 + SOUND_MIXER_WRITE_RECLEV
512 + SOUND_MIXER_WRITE_IGAIN
513 + SOUND_MIXER_WRITE_RECSRC
514 + SOUND_MIXER_WRITE_RECMASK
515 + SOUND_MIXER_INFO
516 + SNDCTL_AUDIOINFO_EX
517 + SNDCTL_ENGINEINFO
571 518
519 + These ioctls can affect the software volume levels associated with the
520 + calling process. They have no effect on the physical hardware levels or
521 + settings. They should not be used in new applications.
572 522
523 +FILES
524 + /dev/mixer Symbolic link to the pseudo mixer device for the system
573 525
526 + /dev/sndstat Sound status device
574 527
575 - These ioctls can affect the software volume levels associated with the
576 - calling process. They have no effect on the physical hardware levels or
577 - settings. They should not be used in new applications.
578 -
579 528 ERRORS
580 - An ioctl() fails if:
529 + An ioctl(2) fails if:
581 530
582 - EINVAL
583 - The parameter changes requested in the ioctl are invalid or
584 - are not supported by the device.
531 + EINVAL The parameter changes requested in the ioctl are invalid or are
532 + not supported by the device.
585 533
534 + ENXIO The device or extension referenced does not exist.
586 535
587 - ENXIO
588 - The device or extension referenced does not exist.
536 +ARCHITECTURE
537 + SPARC x86
589 538
539 +INTERFACE STABILITY
540 + The information and mixer extension IOCTLs are Uncommitted. The
541 + Compatibility IOCTLs are Obsolete Uncommitted. The extension names are
542 + Uncommitted.
590 543
591 -FILES
592 - /dev/mixer
593 - Symbolic link to the pseudo mixer device for the system
594 -
595 -
596 - /dev/sndstat
597 - Sound status device
598 -
599 -
600 -ATTRIBUTES
601 - See attributes(5) for a description of the following attributes:
602 -
603 -
604 -
605 -
606 - +----------------+-----------------+
607 - |ATTRIBUTE TYPE | ATTRIBUTE VALUE |
608 - +----------------+-----------------+
609 - |Architecture | SPARC, x86 |
610 - +----------------+-----------------+
611 - |Stability Level | See below. |
612 - +----------------+-----------------+
613 -
614 -
615 - The information and mixer extension IOCTLs are Uncommitted. The
616 - Compatibility IOCTLs are Obsolete Uncommitted. The extension names are
617 - Uncommitted.
618 -
619 544 SEE ALSO
620 - close(2), ioctl(2), open(2), , read(2), attributes(5), dsp(7I)
545 + close(2), ioctl(2), open(2), read(2), attributes(5), dsp(7I)
621 546
622 547 BUGS
623 - The names of mixer extensions are not guaranteed to be predictable.
548 + The names of mixer extensions are not guaranteed to be predictable.
624 549
625 -
626 -
627 - May 21, 2009 MIXER(7I)
550 +illumos February 1, 2019 illumos
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX