![](https://secure.gravatar.com/avatar/5b19e9d0e834ea10ef75803718ad564b.jpg?s=120&d=mm&r=g)
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.
Takashi