[alsa-devel] embedded sound architecture question
Lorenz Kolb
alsa-dev at lkmail.de
Sun May 13 12:02:13 CEST 2007
On Wed, 2007-05-09 at 14:20 -0700, John L. Utz III wrote:
> On Wed, 09 May 2007 22:47:34 +0200
> "Joachim Förster" <mls.JOFT at gmx.de> wrote:
> > My question is: Does the architecture described below make sense/is
> > reasonable with ALSA and Linux?
>
> i think you might have to answer an earlier question first; 'does it
> make sense to call this an ac97 controller?' I dont recall seeing a
> ring buffer as part of the ac97 standard. i'd suggest that you take the
> time to flesh out completely how the ring buffer is supposed to replace
> dma and ram while still presenting an ac97 set of verbs because i am
> stuck with the gut feeling that you will some important things will
> have to be really different.
Hi, I am the "Hardware-Guy" in the project.
And I am quite sure there is no limitation on what to built into the
AC'97 controller (from a specs point of view)
The controller's job in the AC'97 standard is afaik mainly a parallel to
serial conversion. As the codec's link is serial.
But I am not quite sure, if you do understand: we have complete control
of what the hardware-part does. So our main idea is: presenting some
sort of "dedicated" RAM to the system.
So what does memory mean for a system: it is a bunch of addresses
offering both a read() and a write() (maybe also a burst_read() and
burst_write()).
The only question is: will Linux-kernel be able to see our dedicated
memory as memory and does this way make sense for ALSA.
It is not a question of "is this possible for a AC'97 controller?".
We are not building a simple/stupid AC'97 controller as it can be found
on billions of mainboards, but in some parts it sticks to the rules of
AC'97 (at least in case of the interface towards the codec, as the codec
is an AC'97). So actually it is an AC'97 controller, as it drives an
AC'97 codec.
So what are the benefits of the idea not using "normal" DMA?
Each write/read to memory normally "freezes" the CPU, either because the
CPU does this read/write or because the Bus is occupied. Having an
dedicated memory in the controller avoids this quite well. The CPU
freezes only whenever it writes data to the controller's memory (or
reads from it). Accessing the memory from the controller does not have
an effect on the bus and thus neither cpu nor memory nor bus become
occupied.
The main reason why we do not want to rely on the cpu is because it is
for an embedded system. So we do not talk about giga-hertz. We talk
about a system with a 100 MHz bus architecture and a PowerPC with 300
MHz. And the system has more tasks than only playing some audio...
So the design goal is minimizing the system load while offering a
maximum of features (with an affordable amount of logic).
Greetings,
Lorenz Kolb
More information about the Alsa-devel
mailing list