Sound drivers probe and attach in almost the same way as any hardware driver module. You might want to look at the ISA or PCI specific sections of the handbook for more information.
However, sound drivers differ in some ways:
They declare themselves as pcm
class devices, with a struct
snddev_info device private structure:
Most sound drivers need to store additional private
information about their device. A private data structure is
usually allocated in the attach routine. Its address is
passed to pcm
by the calls to
pcm_register()
and
mixer_init()
.
pcm
later passes back this address
as a parameter in calls to the sound driver
interfaces.
The sound driver attach routine should declare its MIXER
or AC97 interface to pcm
by calling
mixer_init()
. For a MIXER interface,
this causes in turn a call to
xxxmixer_init()
.
The sound driver attach routine declares its general
CHANNEL configuration to pcm
by
calling pcm_register(dev, sc, nplay,
nrec)
, where sc
is the address
for the device data structure, used in further calls from
pcm
, and nplay
and nrec
are the number of play and
record channels.
The sound driver attach routine declares each of its
channel objects by calls to
pcm_addchan()
. This sets up the
channel glue in pcm
and causes in
turn a call to
xxxchannel_init()
.
The sound driver detach routine should call
pcm_unregister()
before releasing its
resources.
There are two possible methods to handle non-PnP devices:
Use a device_identify()
method
(example: sound/isa/es1888.c
). The
device_identify()
method probes for the
hardware at known addresses and, if it finds a supported
device, creates a new pcm device which is then passed to
probe/attach.
Use a custom kernel configuration with appropriate hints
for pcm devices (example:
sound/isa/mss.c
).
pcm
drivers should implement
device_suspend
,
device_resume
and
device_shutdown
routines, so that power
management and module unloading function correctly.
This, and other documents, can be downloaded from http://ftp.FreeBSD.org/pub/FreeBSD/doc/
For questions about FreeBSD, read the
documentation before
contacting <questions@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.