Subject: Re: am7930 driver revisited...
To: None <tech-kern@netbsd.org>
From: Jonathan Stone <jonathan@DSG.Stanford.EDU>
List: tech-kern
Date: 03/14/1999 01:27:30
Okay...

Here's a uuencoded tarfile that should at least compile on both sparc
and pmaxes.  (it boots on pmaxes modulo AUDIO_DEBUG, but i havent
gotten it to play anything; that may require the ioctl asic dma).

This uses MD hooks to do register reads and writes, insert delays,
etc.  The MD hooks are in <machine/am7930_machdep.h>.  If we used a
regmap, the register hooks for 8-bit reads and writes could be
replaced wiht bus_space accessors, modulo the delay() requirements.
The DEC turbochannel lofi board will need a register-map anyway,
but probably not for 1.4.

I think the sparc assembly pDMA code may just work as-is, but it's a
hack: it relies on the sparc bus_space_handle being a pointer and
lying at the same offset as the old au_amd field.  that should be
re-written to grab the bus_space_{tag,handle} via genassym.cf rather
than overloading the old AU_AMD pointer with the bus_space_handle.

But if someone can test the code links on a sparc, I can cons up
diffs to fix AU_AMD. :)


begin 664 sparc_audio.tgz
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
$`/```)@5
`
end