All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 7/14] lemote: Alsa memory maps fixup on mips systems
@ 2009-04-09  5:00 yanhua
  0 siblings, 0 replies; only message in thread
From: yanhua @ 2009-04-09  5:00 UTC (permalink / raw)
  To: linux-mips, Ralf Baechle; +Cc: 彭亮锦, zhangfx@lemote.com

The user application mmap audio dma regions must be dma-coherent
---
sound/core/pcm_native.c | 9 +++++++++
sound/core/sgbuf.c | 8 ++++++++
sound/pci/Kconfig | 1 -
3 files changed, 17 insertions(+), 1 deletions(-)

diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index a789efc..438dd80 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -3099,7 +3099,11 @@ static int snd_pcm_mmap_data_fault(struct
vm_area_struct *area,
return VM_FAULT_SIGBUS;
} else {
vaddr = runtime->dma_area + offset;
+#if defined(__mips__) && defined(CONFIG_DMA_NONCOHERENT)
+ page = virt_to_page(CAC_ADDR(vaddr));
+#else
page = virt_to_page(vaddr);
+#endif
}
get_page(page);
vmf->page = page;
@@ -3214,6 +3218,11 @@ static int snd_pcm_mmap(struct file *file, struct
vm_area_struct *area)
if (PCM_RUNTIME_CHECK(substream))
return -ENXIO;

+#if defined(__mips__) && defined(CONFIG_DMA_NONCOHERENT)
+ /* all mmap using uncached mode */
+ area->vm_page_prot = pgprot_noncached(area->vm_page_prot);
+ area->vm_flags |= ( VM_RESERVED | VM_IO);
+#endif
offset = area->vm_pgoff << PAGE_SHIFT;
switch (offset) {
case SNDRV_PCM_MMAP_OFFSET_STATUS:
diff --git a/sound/core/sgbuf.c b/sound/core/sgbuf.c
index 4e7ec2b..977e9ce 100644
--- a/sound/core/sgbuf.c
+++ b/sound/core/sgbuf.c
@@ -114,7 +114,11 @@ void *snd_malloc_sgbuf_pages(struct device *device,
if (!i)
table->addr |= chunk; /* mark head */
table++;
+#if defined(__mips__) && defined(CONFIG_DMA_NONCOHERENT)
+ *pgtable++ = virt_to_page(CAC_ADDR(tmpb.area));
+#else
*pgtable++ = virt_to_page(tmpb.area);
+#endif
tmpb.area += PAGE_SIZE;
tmpb.addr += PAGE_SIZE;
}
@@ -125,7 +129,11 @@ void *snd_malloc_sgbuf_pages(struct device *device,
}

sgbuf->size = size;
+#if defined(__mips__) && defined(CONFIG_DMA_NONCOHERENT)
+ dmab->area = vmap(sgbuf->page_table, sgbuf->pages, VM_MAP | VM_IO,
pgprot_noncached(PAGE_KERNEL));
+#else
dmab->area = vmap(sgbuf->page_table, sgbuf->pages, VM_MAP, PAGE_KERNEL);
+#endif
if (! dmab->area)
goto _failed;
if (res_size)
diff --git a/sound/pci/Kconfig b/sound/pci/Kconfig
index 82b9bdd..4ccfae0 100644
--- a/sound/pci/Kconfig
+++ b/sound/pci/Kconfig
@@ -259,7 +259,6 @@ config SND_CS5530

config SND_CS5535AUDIO
tristate "CS5535/CS5536 Audio"
- depends on X86 && !X86_64
select SND_PCM
select SND_AC97_CODEC
help
-- 
1.5.6.5

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2009-04-09  5:00 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-04-09  5:00 [PATCH 7/14] lemote: Alsa memory maps fixup on mips systems yanhua

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.