[alsa-devel] hw_params function and OSS emulation

Takashi Iwai tiwai at suse.de
Thu Aug 23 21:01:54 CEST 2007

At Thu, 23 Aug 2007 13:43:40 -0500,
Timur Tabi wrote:
> Takashi Iwai wrote:
> > Err, usually, application = user-space application.  Do you mean
> > really this?
> Yes.  The application allocates a buffer, locks it down, and passes it to the 
> kernel.  Since the buffer was allocated in user space, it is virtual 
> contiguous but not physically contiguous, hence the need for a list of 
> physical addresses.  To the hardware, the buffer appears as a collection of 
> scattered buffers.  Hence, scatter/gather.

Hm, then it must be a really special application.  I've never seen
linux audio apps doing such things...

The problem in your scenario is that the buffers allocated from
user-space are not always DMA-able for devices, thus not always usable
for the hardware.

> Like I said, I haven't look at the ALSA API for S/G, so I may be talking about 
> an implementation of S/G that does not apply to ALSA.

The ALSA SG-buffer helper is simply to allocate individual pages and
gather as a virtually linear buffer.  From the user-space, it's
nothing but a normal linear buffer.

The helper is specific to devices that can handle SG-buffers with
kernel PAGE grains, and for architectures with vmap support.

Anyway, the hw_params implementation is basically free for drivers.
The driver can use its own SG-buffer handler if the given SG-buffer
helper doesn't match with the requirement.


More information about the Alsa-devel mailing list