--- A new FreeBSD audio driver ---
by Luigi Rizzo (luigi@iet.unipi.it)
This is an experimental version of the audio driver for FreeBSD.
I have almost completely rewritten the main parts of the code,
starting from the Voxware 3.5-alpha release with patches from
Amancio Hasty. The only file which is largely similar to the original
ones is "soundcard.h" (for compatibility reasons, since it contains
the definition of all the ioctls).
Visit http://www.iet.unipi.it/~luigi/FreeBSD.html for the latest
information on the drivers. There you can obtain the latest source
package that includes documentation on the design of the driver.
CARD SUPPORT INFORMATION:
For PnP cards, I also include the vendor_id and serial numbers of
cards I have encountered.
CS4236: PnP id 0x3642630e
CS4237: PnP id 0x3742630e
works like a charm. All modes, including full duplex, supported in
MSS mode.
CS4232: PnP id 0x3242630e
this chip is reported as broken in the OSS documentation. As a
matter of fact, on my Intel Zappa motherboard, I have problems in
make it use the secondary DMA channel. I have it working in
half duplex (both capture and playback) in SB3.2 emulation,
and working in playback mode in MSS emulation.
OPTi931: PnP id 0x3109143e
The data sheets of this chip are very cryptic and do not match
what the cards I have seem to do. I have it working
in WSS emulation, in full duplex and all modes.
In SB emulation mode the driver does not work yet (maybe I do
not initialize it the right way). It is not a major concern
anyways.
I am strongly convinced of a couple of bugs in the chip. I have
sent email to OPTI but got no reply so far. The bugs are:
- you cannot set both playback and capture format to use
a companded mode (ULAW, ALAW). If you do, the card will screw
up on the capture section.
The driver has a partial fix in software: when using ULAW, it
programs ULAW on the playback section, U8 on the capture, and
does a conversion in software (much like the SBPro). Of course
you lose 4-5 bits of dynamic range in the process.
- in full duplex (and single DMA mode), the card occasionally
misses interrupts, or generates spurious ones. Spurious ints are
not problematic since they can be ignored, but missed ones are
as you can imagine... This is fixed by auto-dma mode.
SB16 PnP: PnP id 0xXX008c0e
There are many such cards (plain SB16 PnP, AWE32, AWE64, Vibra16,
etc.) all differing in the PnP id. They have different synthesis
devices, which we do not support, so we are not affected by these
differences. Don't worry if the driver identifies the card as a
different SB16 than the one you have.
Full duplex support of this card is tricky since one channel can
work in 16-bit and the other in 8-bit mode. You will need to use
the new set of ioctl to use separate data formats on the two
channels (the vat driver does this). Of course, quality in 8-bit
is much lower than in 16-bit.
Full duplex operation is unsupported by Creative. It seems to
work, although on my Vibra16 the command to stop DMA transfer
seems to erroneously affect both channels instead of the one
they are issued for. The driver has a workaround, but I cannot
guarantee that it works for everybody. I have had several
positive reports.
Yamaha SA2
this card emulates a WSS or SB. Have reports that it works, although
it has mixer problems (maybe the driver has the wrong set of
parameters).
Ensoniq Soundscape VIVO
this card emulates a WSS or SB. Have reports that it works.
GusPnP: PnP id 0x0100561e
I have code to recognize the board as MSS, but some initializations
of the IW chip is still missing, so the card is not supported yet.
I am working on this problem...
OPTI924: PnP
I have this card but it is still unsupported.
OPTI925: PnP id 0x2509143e
there is code to recognize it as a SB clone. I have reports that
it probes ok, but not sure if it works.
OPTI930:
should work as an MSS clone, but support for it is not implemented
yet.
ESS1868
this card is not supported yet. It might work in SB emulation but
am not sure.
ESS688
this card is used on many notebook. I don't have docs on this card
so I cannot support it. Pointers to the data sheets are welcome.
PCI cards:
some vendors have PCI cards. This code _cannot_ work on these
cards as it is now, since they cannot obviously use the ISA DMA
controller. As there are no data sheets available for these PCI
cards, none of them is supported at the moment, although support
should be easy as soon as I can put my hands on the data sheets
and cards.