xref: /netbsd-src/share/man/man4/audio.4 (revision 6a493d6bc668897c91594964a732d38505b70cbb)
1.\"	$NetBSD: audio.4,v 1.72 2011/09/06 01:17:48 jmcneill Exp $
2.\"
3.\" Copyright (c) 1996 The NetBSD Foundation, Inc.
4.\" All rights reserved.
5.\"
6.\" This code is derived from software contributed to The NetBSD Foundation
7.\" by John T. Kohl.
8.\"
9.\" Redistribution and use in source and binary forms, with or without
10.\" modification, are permitted provided that the following conditions
11.\" are met:
12.\" 1. Redistributions of source code must retain the above copyright
13.\"    notice, this list of conditions and the following disclaimer.
14.\" 2. Redistributions in binary form must reproduce the above copyright
15.\"    notice, this list of conditions and the following disclaimer in the
16.\"    documentation and/or other materials provided with the distribution.
17.\"
18.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28.\" POSSIBILITY OF SUCH DAMAGE.
29.\"
30.Dd September 5, 2011
31.Dt AUDIO 4
32.Os
33.Sh NAME
34.Nm audio
35.Nd device-independent audio driver layer
36.Sh SYNOPSIS
37.In sys/audioio.h
38.Sh DESCRIPTION
39The
40.Nm
41driver provides support for various audio peripherals.
42It provides a uniform programming interface layer above different
43underlying audio hardware drivers.
44The audio layer provides full-duplex operation if the
45underlying hardware configuration supports it.
46.Pp
47There are four device files available for audio operation:
48.Pa /dev/audio ,
49.Pa /dev/sound ,
50.Pa /dev/audioctl ,
51and
52.Pa /dev/mixer .
53.Pp
54.Pa /dev/audio
55and
56.Pa /dev/sound
57are used for recording or playback of digital samples.
58.Pp
59.Pa /dev/mixer
60is used to manipulate volume, recording source, or other audio mixer
61functions.
62.Pp
63.Pa /dev/audioctl
64accepts the same
65.Xr ioctl 2
66operations as
67.Pa /dev/sound ,
68but no other operations.
69.Pp
70In contrast to
71.Pa /dev/sound
72which has the exclusive open property
73.Pa /dev/audioctl
74can be opened at any time and can be used to manipulate the audio device
75while it is in use.
76.Sh SAMPLING DEVICES
77When
78.Pa /dev/audio
79is opened, it automatically directs the underlying driver to manipulate
80monaural 8-bit mu-law samples.
81In addition, if it is opened read-only
82(write-only) the device is set to half-duplex record (play) mode with
83recording (playing) unpaused and playing (recording) paused.
84When
85.Pa /dev/sound
86is opened, it maintains the previous audio sample mode and
87record/playback mode.
88In all other respects
89.Pa /dev/audio
90and
91.Pa /dev/sound
92are identical.
93.Pp
94Only one process may hold open a sampling device at a given time
95(although file descriptors may be shared between processes once the
96first open completes).
97.Pp
98On a half-duplex device, writes while recording is in progress will be
99immediately discarded.
100Similarly, reads while playback is in progress
101will be filled with silence but delayed to return at the current
102sampling rate.
103If both playback and recording are requested on a half-duplex
104device, playback mode takes precedence and recordings will get silence.
105.Pp
106On a full-duplex device, reads and writes may operate
107concurrently without interference.
108If a full-duplex capable audio device is opened for both reading and writing
109it will start in half-duplex play mode; full-duplex mode has to be set
110explicitly.
111.Pp
112On either type of device, if the playback mode is paused then silence is
113played instead of the provided samples, and if recording is paused then
114the process blocks in
115.Xr read 2
116until recording is unpaused.
117.Pp
118If a writing process does not call
119.Xr write 2
120frequently enough to provide samples at the pace the hardware
121consumes them silence is inserted.
122If the
123.Dv AUMODE_PLAY_ALL
124mode is not set the writing process must
125provide enough data via
126subsequent write calls to
127.Dq catch up
128in time to the current audio
129block before any more process-provided samples will be played.
130If a reading process does not call
131.Xr read 2
132frequently enough, it will simply miss samples.
133.Pp
134The audio device is normally accessed with
135.Xr read 2
136or
137.Xr write 2
138calls, but it can also be mapped into user memory with
139.Xr mmap 2
140(when supported by the device).
141Once the device has been mapped it can no longer be accessed
142by read or write; all access is by reading and writing to
143the mapped memory.
144The device appears as a block of memory
145of size
146.Va buffersize
147(as available via
148.Dv AUDIO_GETINFO
149or
150.Dv AUDIO_GETBUFINFO ) .
151The device driver will continuously move data from this buffer
152from/to the audio hardware, wrapping around at the end of the buffer.
153To find out where the hardware is currently accessing data in the buffer the
154.Dv AUDIO_GETIOFFS
155and
156.Dv AUDIO_GETOOFFS
157calls can be used.
158The playing and recording buffers are distinct and must be
159mapped separately if both are to be used.
160Only encodings that are not emulated (i.e. where
161.Dv AUDIO_ENCODINGFLAG_EMULATED
162is not set) work properly for a mapped device.
163.Pp
164The audio device, like most devices, can be used in
165.Va select ,
166can be set in non-blocking mode and can be set (with a
167.Dv FIOASYNC
168ioctl) to send a
169.Dv SIGIO
170when I/O is possible.
171The mixer device can be set to generate a
172.Dv SIGIO
173whenever a mixer value is changed.
174.Pp
175The following
176.Xr ioctl 2
177commands are supported on the sample devices:
178.Pp
179.Bl -tag -width indent
180.It Dv AUDIO_FLUSH
181This command stops all playback and recording, clears all queued
182buffers, resets error counters, and restarts recording and playback as
183appropriate for the current sampling mode.
184.It Dv AUDIO_RERROR (int)
185This command fetches the count of dropped input samples into its integer
186argument.
187There is no information regarding when in the sample stream
188they were dropped.
189.It Dv AUDIO_WSEEK (u_long)
190This command fetches the count of samples that are queued ahead of the
191first sample in the most recent sample block written into its integer argument.
192.It Dv AUDIO_DRAIN
193This command suspends the calling process until all queued playback
194samples have been played by the hardware.
195.It Dv AUDIO_GETDEV (audio_device_t)
196This command fetches the current hardware device information into the
197audio_device_t argument.
198.Bd -literal
199typedef struct audio_device {
200        char name[MAX_AUDIO_DEV_LEN];
201        char version[MAX_AUDIO_DEV_LEN];
202        char config[MAX_AUDIO_DEV_LEN];
203} audio_device_t;
204.Ed
205.It Dv AUDIO_GETFD (int)
206The command returns the current setting of the full duplex mode.
207.It Dv AUDIO_GETENC (audio_encoding_t)
208This command is used iteratively to fetch sample encoding names and
209format_ids into the input/output audio_encoding_t argument.
210.Bd -literal
211typedef struct audio_encoding {
212	int index;      /* input: nth encoding */
213	char name[MAX_AUDIO_DEV_LEN]; /* name of encoding */
214	int encoding;   /* value for encoding parameter */
215	int precision;  /* value for precision parameter */
216	int flags;
217#define AUDIO_ENCODINGFLAG_EMULATED 1 /* software emulation mode */
218} audio_encoding_t;
219.Ed
220.Pp
221To query
222all the supported encodings, start with an index field of 0 and
223continue with successive encodings (1, 2, ...) until the command returns
224an error.
225.It Dv AUDIO_SETFD (int)
226This command sets the device into full-duplex operation if its integer
227argument has a non-zero value, or into half-duplex operation if it
228contains a zero value.
229If the device does not support full-duplex
230operation, attempting to set full-duplex mode returns an error.
231.It Dv AUDIO_GETPROPS (int)
232This command gets a bit set of hardware properties.
233If the hardware
234has a certain property the corresponding bit is set, otherwise it is not.
235The properties can have the following values:
236.Pp
237.Bl -tag -width AUDIO_PROP_INDEPENDENT -compact
238.It Dv AUDIO_PROP_FULLDUPLEX
239the device admits full duplex operation.
240.It Dv AUDIO_PROP_MMAP
241the device can be used with
242.Xr mmap 2 .
243.It Dv AUDIO_PROP_INDEPENDENT
244the device can set the playing and recording encoding parameters
245independently.
246.It Dv AUDIO_PROP_PLAYBACK
247the device is capable of audio playback.
248.It Dv AUDIO_PROP_CAPTURE
249the device is capable of audio capture.
250.El
251.It Dv AUDIO_GETIOFFS (audio_offset_t)
252.It Dv AUDIO_GETOOFFS (audio_offset_t)
253This command fetches the current offset in the input(output) buffer where
254the audio hardware's DMA engine will be putting(getting) data.
255It mostly useful when the device
256buffer is available in user space via the
257.Xr mmap 2
258call.
259The information is returned in the audio_offset structure.
260.Bd -literal
261typedef struct audio_offset {
262	u_int	samples;   /* Total number of bytes transferred */
263	u_int	deltablks; /* Blocks transferred since last checked */
264	u_int	offset;    /* Physical transfer offset in buffer */
265} audio_offset_t;
266.Ed
267.It Dv AUDIO_GETINFO (audio_info_t)
268.It Dv AUDIO_GETBUFINFO (audio_info_t)
269.It Dv AUDIO_SETINFO (audio_info_t)
270Get or set audio information as encoded in the audio_info structure.
271.Bd -literal
272typedef struct audio_info {
273	struct	audio_prinfo play;   /* info for play (output) side */
274	struct	audio_prinfo record; /* info for record (input) side */
275        u_int	monitor_gain;			/* input to output mix */
276	/* BSD extensions */
277	u_int	blocksize;	/* H/W read/write block size */
278	u_int	hiwat;		/* output high water mark */
279	u_int	lowat;		/* output low water mark */
280	u_int	_ispare1;
281	u_int	mode;		/* current device mode */
282#define AUMODE_PLAY	0x01
283#define AUMODE_RECORD	0x02
284#define AUMODE_PLAY_ALL 0x04	/* do not do real-time correction */
285} audio_info_t;
286.Ed
287.Pp
288When setting the current state with
289.Dv AUDIO_SETINFO ,
290the audio_info structure should first be initialized with
291.Dv AUDIO_INITINFO Po \*[Am]info Pc
292and then the particular values to be changed should be set.
293This allows the audio driver to only set those things that you wish
294to change and eliminates the need to query the device with
295.Dv AUDIO_GETINFO
296or
297.Dv AUDIO_GETBUFINFO
298first.
299.Pp
300The
301.Va mode
302field should be set to
303.Dv AUMODE_PLAY ,
304.Dv AUMODE_RECORD ,
305.Dv AUMODE_PLAY_ALL ,
306or a bitwise OR combination of the three.
307Only full-duplex audio devices support
308simultaneous record and playback.
309.Pp
310.Va hiwat
311and
312.Va lowat
313are used to control write behavior.
314Writes to the audio devices will queue up blocks until the high-water
315mark is reached, at which point any more write calls will block
316until the queue is drained to the low-water mark.
317.Va hiwat
318and
319.Va lowat
320set those high- and low-water marks (in audio blocks).
321The default for
322.Va hiwat
323is the maximum value and for
324.Va lowat
32575 % of
326.Va hiwat .
327.Pp
328.Va blocksize
329sets the current audio blocksize.
330The generic audio driver layer and the hardware driver have the
331opportunity to adjust this block size to get it within
332implementation-required limits.
333Upon return from an
334.Dv AUDIO_SETINFO
335call, the actual blocksize set is returned in this field.
336Normally the
337.Va blocksize
338is calculated to correspond to 50ms of sound and it is recalculated
339when the encoding parameter changes, but if the
340.Va blocksize
341is set explicitly this value becomes sticky, i.e., it remains
342even when the encoding is changed.
343The stickiness can be cleared by reopening the device or setting the
344.Va blocksize
345to 0.
346.Bd -literal
347struct audio_prinfo {
348	u_int	sample_rate;	/* sample rate in samples/s */
349	u_int	channels;	/* number of channels, usually 1 or 2 */
350	u_int	precision;	/* number of bits/sample */
351	u_int	encoding;	/* data encoding (AUDIO_ENCODING_* below) */
352	u_int	gain;		/* volume level */
353	u_int	port;		/* selected I/O port */
354	u_long	seek;		/* BSD extension */
355	u_int	avail_ports;	/* available I/O ports */
356	u_int	buffer_size;	/* total size audio buffer */
357	u_int	_ispare[1];
358	/* Current state of device: */
359	u_int	samples;	/* number of samples */
360	u_int	eof;		/* End Of File (zero-size writes) counter */
361	u_char	pause;		/* non-zero if paused, zero to resume */
362	u_char	error;		/* non-zero if underflow/overflow occurred */
363	u_char	waiting;	/* non-zero if another process hangs in open */
364	u_char	balance;	/* stereo channel balance */
365	u_char	cspare[2];
366	u_char	open;		/* non-zero if currently open */
367	u_char	active;		/* non-zero if I/O is currently active */
368};
369.Ed
370.Pp
371Note:  many hardware audio drivers require identical playback and
372recording sample rates, sample encodings, and channel counts.
373The playing information is always set last and will prevail on such hardware.
374If the hardware can handle different settings the
375.Dv AUDIO_PROP_INDEPENDENT
376property is set.
377.Pp
378The encoding parameter can have the following values:
379.Pp
380.Bl -tag -width AUDIO_ENCODING_SLINEAR_BE -compact
381.It Dv AUDIO_ENCODING_ULAW
382mu-law encoding, 8 bits/sample
383.It Dv AUDIO_ENCODING_ALAW
384A-law encoding, 8 bits/sample
385.It Dv AUDIO_ENCODING_SLINEAR
386two's complement signed linear encoding with the platform byte order
387.It Dv AUDIO_ENCODING_ULINEAR
388unsigned linear encoding with the platform byte order
389.It Dv AUDIO_ENCODING_ADPCM
390ADPCM encoding, 8 bits/sample
391.It Dv AUDIO_ENCODING_SLINEAR_LE
392two's complement signed linear encoding with little endian byte order
393.It Dv AUDIO_ENCODING_SLINEAR_BE
394two's complement signed linear encoding with big endian byte order
395.It Dv AUDIO_ENCODING_ULINEAR_LE
396unsigned linear encoding with little endian byte order
397.It Dv AUDIO_ENCODING_ULINEAR_BE
398unsigned linear encoding with big endian byte order
399.It Dv AUDIO_ENCODING_AC3
400Dolby Digital AC3
401.El
402.Pp
403The
404.Va gain ,
405.Va port
406and
407.Va balance
408settings provide simple shortcuts to the richer mixer
409interface described below and are not obtained by
410.Dv AUDIO_GETBUFINFO .
411The gain should be in the range
412.Bq Dv AUDIO_MIN_GAIN , Dv AUDIO_MAX_GAIN
413and the balance in the range
414.Bq Dv AUDIO_LEFT_BALANCE , Dv AUDIO_RIGHT_BALANCE
415with the normal setting at
416.Dv AUDIO_MID_BALANCE .
417.Pp
418The input port should be a combination of:
419.Pp
420.Bl -tag -width AUDIO_MICROPHONE -compact
421.It Dv AUDIO_MICROPHONE
422to select microphone input.
423.It Dv AUDIO_LINE_IN
424to select line input.
425.It Dv AUDIO_CD
426to select CD input.
427.El
428.Pp
429The output port should be a combination of:
430.Pp
431.Bl -tag -width AUDIO_HEADPHONE -compact
432.It Dv AUDIO_SPEAKER
433to select speaker output.
434.It Dv AUDIO_HEADPHONE
435to select headphone output.
436.It Dv AUDIO_LINE_OUT
437to select line output.
438.El
439.Pp
440The available ports can be found in
441.Va avail_ports
442.Dv ( AUDIO_GETBUFINFO
443only).
444.Pp
445.Va buffer_size
446is the total size of the audio buffer.
447The buffer size divided by the
448.Va blocksize
449gives the maximum value for
450.Va hiwat .
451Currently the
452.Va buffer_size
453can only be read and not set.
454.Pp
455The
456.Va seek
457and
458.Va samples
459fields are only used by
460.Dv AUDIO_GETINFO
461and
462.Dv AUDIO_GETBUFINFO .
463.Va seek
464represents the count of
465samples pending;
466.Va samples
467represents the total number of bytes recorded or played, less those
468that were dropped due to inadequate consumption/production rates.
469.Pp
470.Va pause
471returns the current pause/unpause state for recording or playback.
472For
473.Dv AUDIO_SETINFO ,
474if the pause value is specified it will either pause
475or unpause the particular direction.
476.El
477.Sh MIXER DEVICE
478The mixer device,
479.Pa /dev/mixer ,
480may be manipulated with
481.Xr ioctl 2
482but does not support
483.Xr read 2
484or
485.Xr write 2 .
486It supports the following
487.Xr ioctl 2
488commands:
489.Bl -tag -width indent
490.It Dv AUDIO_GETDEV (audio_device_t)
491This command is the same as described above for the sampling devices.
492.It Dv AUDIO_MIXER_READ (mixer_ctrl_t)
493.It Dv AUDIO_MIXER_WRITE (mixer_ctrl_t)
494These commands read the current mixer state or set new mixer state for
495the specified device
496.Va dev .
497.Va type
498identifies which type of value is supplied in the
499.Va mixer_ctrl_t
500argument.
501.Bd -literal
502#define AUDIO_MIXER_CLASS  0
503#define AUDIO_MIXER_ENUM   1
504#define AUDIO_MIXER_SET    2
505#define AUDIO_MIXER_VALUE  3
506typedef struct mixer_ctrl {
507	int dev;			/* input: nth device */
508	int type;
509	union {
510		int ord;		/* enum */
511		int mask;		/* set */
512		mixer_level_t value;	/* value */
513	} un;
514} mixer_ctrl_t;
515
516#define AUDIO_MIN_GAIN  0
517#define AUDIO_MAX_GAIN  255
518typedef struct mixer_level {
519        int num_channels;
520        u_char level[8];               /* [num_channels] */
521} mixer_level_t;
522#define AUDIO_MIXER_LEVEL_MONO  0
523#define AUDIO_MIXER_LEVEL_LEFT  0
524#define AUDIO_MIXER_LEVEL_RIGHT 1
525.Ed
526.Pp
527For a mixer value, the
528.Va value
529field specifies both the number of channels and the values for each
530channel.
531If the channel count does not match the current channel count, the
532attempt to change the setting may fail (depending on the hardware
533device driver implementation).
534For an enumeration value, the
535.Va ord
536field should be set to one of the possible values as returned by a prior
537.Dv AUDIO_MIXER_DEVINFO
538command.
539The type
540.Dv AUDIO_MIXER_CLASS
541is only used for classifying particular mixer device
542types and is not used for
543.Dv AUDIO_MIXER_READ
544or
545.Dv AUDIO_MIXER_WRITE .
546.It Dv AUDIO_MIXER_DEVINFO (mixer_devinfo_t)
547This command is used iteratively to fetch audio mixer device information
548into the input/output mixer_devinfo_t argument.
549To query all the supported devices, start with an index field of
5500 and continue with successive devices (1, 2, ...) until the
551command returns an error.
552.Bd -literal
553typedef struct mixer_devinfo {
554	int index;		/* input: nth mixer device */
555	audio_mixer_name_t label;
556	int type;
557	int mixer_class;
558	int next, prev;
559#define AUDIO_MIXER_LAST	-1
560	union {
561		struct audio_mixer_enum {
562			int num_mem;
563			struct {
564				audio_mixer_name_t label;
565				int ord;
566			} member[32];
567		} e;
568		struct audio_mixer_set {
569			int num_mem;
570			struct {
571				audio_mixer_name_t label;
572				int mask;
573			} member[32];
574		} s;
575		struct audio_mixer_value {
576			audio_mixer_name_t units;
577			int num_channels;
578			int delta;
579		} v;
580	} un;
581} mixer_devinfo_t;
582.Ed
583.Pp
584The
585.Va label
586field identifies the name of this particular mixer control.
587The
588.Va index
589field may be used as the
590.Va dev
591field in
592.Dv AUDIO_MIXER_READ
593and
594.Dv AUDIO_MIXER_WRITE
595commands.
596The
597.Va type
598field identifies the type of this mixer control.
599Enumeration types are typically used for on/off style controls (e.g. a
600mute control) or for input/output device selection (e.g. select
601recording input source from CD, line in, or microphone).
602Set types are similar to enumeration types but any combination
603of the mask bits can be used.
604.Pp
605The
606.Va mixer_class
607field identifies what class of control this is.
608The
609.Pq arbitrary
610value set by the hardware driver may be determined by examining the
611.Va mixer_class
612field of the class itself,
613a mixer of type
614.Dv AUDIO_MIXER_CLASS .
615For example, a mixer controlling the input gain on the line in circuit
616would have a
617.Va mixer_class
618that matches an input class device with the name
619.Dq inputs
620.Dv ( AudioCinputs ) ,
621and would have a
622.Va label
623of
624.Dq line
625.Dv ( AudioNline ) .
626Mixer controls which control audio circuitry for a particular audio
627source (e.g. line-in, CD in, DAC output) are collected under the input class,
628while those which control all audio sources (e.g. master volume,
629equalization controls) are under the output class.
630Hardware devices capable of recording typically also have a record class,
631for controls that only affect recording,
632and also a monitor class.
633.Pp
634The
635.Va next
636and
637.Va prev
638may be used by the hardware device driver to provide hints for the next
639and previous devices in a related set (for example, the line in level
640control would have the line in mute as its
641.Dq next
642value).
643If there is no relevant next or previous value,
644.Dv AUDIO_MIXER_LAST
645is specified.
646.Pp
647For
648.Dv AUDIO_MIXER_ENUM
649mixer control types,
650the enumeration values and their corresponding names are filled in.
651For example, a mute control would return appropriate values paired with
652.Dv AudioNon
653and
654.Dv AudioNoff .
655For
656.Dv AUDIO_MIXER_VALUE
657and
658.Dv AUDIO_MIXER_SET
659mixer control types, the channel count is
660returned; the units name specifies what the level controls (typical
661values are
662.Dv AudioNvolume ,
663.Dv AudioNtreble ,
664.Dv AudioNbass ) .
665.\" For AUDIO_MIXER_SET mixer control types, what is what?
666.El
667.Pp
668By convention, all the mixer devices can be distinguished from other
669mixer controls because they use a name from one of the
670.Dv AudioC*
671string values.
672.Sh FILES
673.Bl -tag -width /dev/audioctl -compact
674.It Pa /dev/audio
675.It Pa /dev/audioctl
676.It Pa /dev/sound
677.It Pa /dev/mixer
678.El
679.Sh SEE ALSO
680.Xr audioctl 1 ,
681.Xr mixerctl 1 ,
682.Xr ioctl 2 ,
683.Xr ossaudio 3 ,
684.Xr midi 4 ,
685.Xr radio 4
686.Ss ISA bus
687.Xr aria 4 ,
688.Xr ess 4 ,
689.Xr gus 4 ,
690.Xr guspnp 4 ,
691.Xr pas 4 ,
692.Xr sb 4 ,
693.Xr wss 4 ,
694.Xr ym 4
695.Ss PCI bus
696.Xr auacer 4 ,
697.Xr auich 4 ,
698.Xr auixp 4 ,
699.Xr autri 4 ,
700.Xr auvia 4 ,
701.Xr azalia 4 ,
702.Xr clcs 4 ,
703.Xr clct 4 ,
704.Xr cmpci 4 ,
705.Xr eap 4 ,
706.Xr emuxki 4 ,
707.Xr esa 4 ,
708.Xr esm 4 ,
709.Xr eso 4 ,
710.Xr fms 4 ,
711.Xr neo 4 ,
712.Xr sv 4 ,
713.Xr yds 4
714.Ss TURBOchannel
715.Xr bba 4
716.Ss USB
717.Xr uaudio 4
718.Sh BUGS
719If the device is used in
720.Xr mmap 2
721it is currently always mapped for writing (playing) due to
722VM system weirdness.
723