Subject: PCI-audio & endianness (eso.c/mulaw.c)
To: None <tech-kern@netbsd.org>
From: Leo Weppelman <leo@wau.mis.ah.nl>
List: tech-kern
Date: 10/27/1999 08:33:48
In an effort to test the PCI-bus of my new Hades motherboard, I'm trying as
many PCI-cards as possible. Card of the past days was an ess-solo1.
I ran into 2 endian problems until now (the Hades is an 68060):
1 - dev/sys/pci/eso.c:
This file defines htopci() and pcitoh() macro's that do a bswap32()
when BIG_ENDIAN. This swapped value is than written using
bus_space_write_4() - this is wrong! The bus-functions for a PCI-bus
on a big-endian machine should do the necessary swapping. I'll
remove this endian stuff from this file later this week.
2 - dev/mulaw.c
Here also, endianness is taken into account. However, I can not play
'.au' files when compiling for big-endian. If I compile for the little
endian case, the samples play fine. Now it isn't obvious to me what
is the 'correct' case here. I have absolutely no experience with
audio drivers. From my observation of the eso.c file, it is clear that
the sound-card uses DMA to fetch the data (== no endian conversion) and
from the docs on the Hades PCI-bus it looks that there is no magic
like hardware swaps involved.
Can anybody say something authoritative about case 2? Since .wav files
are not yet working, I expect more problems in the endian field.
Leo.