ALSA: pcm - define snd_pcm_default_page_ops()

Add a helper (inline) function as the default page ops.  Any hacks wrt
the page address conversion will be applied in this function.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Takashi Iwai 2009-11-26 12:43:39 +01:00
parent 657b1989da
commit 9eb4a06788

View File

@ -3062,6 +3062,13 @@ static int snd_pcm_mmap_control(struct snd_pcm_substream *substream, struct file
} }
#endif /* coherent mmap */ #endif /* coherent mmap */
static inline struct page *
snd_pcm_default_page_ops(struct snd_pcm_substream *substream, unsigned long ofs)
{
void *vaddr = substream->runtime->dma_area + ofs;
return virt_to_page(vaddr);
}
/* /*
* fault callback for mmapping a RAM page * fault callback for mmapping a RAM page
*/ */
@ -3072,7 +3079,6 @@ static int snd_pcm_mmap_data_fault(struct vm_area_struct *area,
struct snd_pcm_runtime *runtime; struct snd_pcm_runtime *runtime;
unsigned long offset; unsigned long offset;
struct page * page; struct page * page;
void *vaddr;
size_t dma_bytes; size_t dma_bytes;
if (substream == NULL) if (substream == NULL)
@ -3082,14 +3088,12 @@ static int snd_pcm_mmap_data_fault(struct vm_area_struct *area,
dma_bytes = PAGE_ALIGN(runtime->dma_bytes); dma_bytes = PAGE_ALIGN(runtime->dma_bytes);
if (offset > dma_bytes - PAGE_SIZE) if (offset > dma_bytes - PAGE_SIZE)
return VM_FAULT_SIGBUS; return VM_FAULT_SIGBUS;
if (substream->ops->page) { if (substream->ops->page)
page = substream->ops->page(substream, offset); page = substream->ops->page(substream, offset);
if (!page) else
return VM_FAULT_SIGBUS; page = snd_pcm_default_page_ops(substream, offset);
} else { if (!page)
vaddr = runtime->dma_area + offset; return VM_FAULT_SIGBUS;
page = virt_to_page(vaddr);
}
get_page(page); get_page(page);
vmf->page = page; vmf->page = page;
return 0; return 0;