ALSA: Allocate larger pages in sgbuf
authorTakashi Iwai <tiwai@suse.de>
Wed, 30 Jul 2008 13:13:33 +0000 (15:13 +0200)
committerJaroslav Kysela <perex@perex.cz>
Mon, 25 Aug 2008 07:57:38 +0000 (09:57 +0200)
commit51e9f2e665bf2b6a01be275d64c336d942c59a66
tree75b79c23288a820eea6959e79060e3e4fb9d0eae
parent4e184f8fc06411f35fdcf4b9bc6187c857bf7214
ALSA: Allocate larger pages in sgbuf

Most hardwares have limited buffer-descriptor table length.  This
also restricts the max buffer size of the sound driver.
For example, snd-hda-intel has 1MB buffer size limit, and this is
because it can have at most 256 BDL entries.  For supporting larger
buffers, we need to allocate larger pages even for sg-buffers.

This patch changes the sgbuf allocation code to try to allocate
larger pages first.  At each head of the allocated pages, the
number of allocated pages is stored in the lowest bits of the
corresponding entry of the table addr field.  This change isn't
visible as long as the driver uses snd_sgbuf_get_addr() helper.

Also, the patch adds a new function, snd_pcm_sgbuf_get_chunk_size().
This returns the size of the chunk on continuous pages starting at
the given position offset.  If the chunk reaches to a non-continuous
page, it returns the size to the boundary.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
include/sound/memalloc.h
include/sound/pcm.h
sound/core/pcm_memory.c
sound/core/sgbuf.c