faac9650a5
changes: o rip the old select from his distribution to prevent extra pollution o the code now uses audio dma, helps reduce clicks o improved card support, should work in full duplex on sb16 cards o add better voxware ioctl support pointed out by Joao Carlos Mendes Luis <jonny@coppe.ufrj.br> o remove an unused file that I included for more complete history o and MANY other changes I have personally tested this code with a CS4237 based card and an AWE32 (non-PnP). Both cards worked fine in 8bit and 16bit mode.
127 lines
4.7 KiB
Plaintext
127 lines
4.7 KiB
Plaintext
--- 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.
|