aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2010-01-18 08:58:57 -0500
committerTakashi Iwai <tiwai@suse.de>2010-01-18 09:00:34 -0500
commitc32d977b8157bf67cdf47729ce7dd054a26eb534 (patch)
treefedbd1c0d4382e88362abf81f719e6f127e19fa7
parent3e879d7bac705be4813a0ec9560cbe31db4b269f (diff)
ALSA: pcm - Call pgprot_noncached() for vmalloc'ed buffers
pgprot_noncached() can be set for vmalloc'ed buffers safely, and we'd need non-cached behavior more or less, even for the intermediate ring- buffers. Now snd_pcm_lib_mmap_vmalloc() is added as the common PCM mmap callback that is coupled with snd_pcm_lib_alloc_vmalloc_buffer() & co. Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--include/sound/pcm.h4
-rw-r--r--sound/core/pcm_native.c9
-rw-r--r--sound/drivers/vx/vx_pcm.c2
-rw-r--r--sound/mips/sgio2audio.c3
-rw-r--r--sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c1
-rw-r--r--sound/usb/ua101.c2
-rw-r--r--sound/usb/usbaudio.c2
7 files changed, 23 insertions, 0 deletions
diff --git a/include/sound/pcm.h b/include/sound/pcm.h
index 1d4ca2aae50d..aabf48bb8ee6 100644
--- a/include/sound/pcm.h
+++ b/include/sound/pcm.h
@@ -1021,6 +1021,10 @@ int snd_pcm_lib_mmap_iomem(struct snd_pcm_substream *substream, struct vm_area_s
1021#define snd_pcm_lib_mmap_iomem NULL 1021#define snd_pcm_lib_mmap_iomem NULL
1022#endif 1022#endif
1023 1023
1024int snd_pcm_lib_mmap_noncached(struct snd_pcm_substream *substream,
1025 struct vm_area_struct *area);
1026#define snd_pcm_lib_mmap_vmalloc snd_pcm_lib_mmap_noncached
1027
1024static inline void snd_pcm_limit_isa_dma_size(int dma, size_t *max) 1028static inline void snd_pcm_limit_isa_dma_size(int dma, size_t *max)
1025{ 1029{
1026 *max = dma < 4 ? 64 * 1024 : 128 * 1024; 1030 *max = dma < 4 ? 64 * 1024 : 128 * 1024;
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index 5df0d21f18b3..88fff44702a4 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -3176,6 +3176,15 @@ int snd_pcm_lib_mmap_iomem(struct snd_pcm_substream *substream,
3176EXPORT_SYMBOL(snd_pcm_lib_mmap_iomem); 3176EXPORT_SYMBOL(snd_pcm_lib_mmap_iomem);
3177#endif /* SNDRV_PCM_INFO_MMAP */ 3177#endif /* SNDRV_PCM_INFO_MMAP */
3178 3178
3179/* mmap callback with pgprot_noncached */
3180int snd_pcm_lib_mmap_noncached(struct snd_pcm_substream *substream,
3181 struct vm_area_struct *area)
3182{
3183 area->vm_page_prot = pgprot_noncached(area->vm_page_prot);
3184 return snd_pcm_default_mmap(substream, area);
3185}
3186EXPORT_SYMBOL(snd_pcm_lib_mmap_noncached);
3187
3179/* 3188/*
3180 * mmap DMA buffer 3189 * mmap DMA buffer
3181 */ 3190 */
diff --git a/sound/drivers/vx/vx_pcm.c b/sound/drivers/vx/vx_pcm.c
index c8385d26a16f..35a2f71a6af5 100644
--- a/sound/drivers/vx/vx_pcm.c
+++ b/sound/drivers/vx/vx_pcm.c
@@ -905,6 +905,7 @@ static struct snd_pcm_ops vx_pcm_playback_ops = {
905 .trigger = vx_pcm_trigger, 905 .trigger = vx_pcm_trigger,
906 .pointer = vx_pcm_playback_pointer, 906 .pointer = vx_pcm_playback_pointer,
907 .page = snd_pcm_lib_get_vmalloc_page, 907 .page = snd_pcm_lib_get_vmalloc_page,
908 .mmap = snd_pcm_lib_mmap_vmalloc,
908}; 909};
909 910
910 911
@@ -1125,6 +1126,7 @@ static struct snd_pcm_ops vx_pcm_capture_ops = {
1125 .trigger = vx_pcm_trigger, 1126 .trigger = vx_pcm_trigger,
1126 .pointer = vx_pcm_capture_pointer, 1127 .pointer = vx_pcm_capture_pointer,
1127 .page = snd_pcm_lib_get_vmalloc_page, 1128 .page = snd_pcm_lib_get_vmalloc_page,
1129 .mmap = snd_pcm_lib_mmap_vmalloc,
1128}; 1130};
1129 1131
1130 1132
diff --git a/sound/mips/sgio2audio.c b/sound/mips/sgio2audio.c
index 9b486beeb932..6aff217379d9 100644
--- a/sound/mips/sgio2audio.c
+++ b/sound/mips/sgio2audio.c
@@ -691,6 +691,7 @@ static struct snd_pcm_ops snd_sgio2audio_playback1_ops = {
691 .trigger = snd_sgio2audio_pcm_trigger, 691 .trigger = snd_sgio2audio_pcm_trigger,
692 .pointer = snd_sgio2audio_pcm_pointer, 692 .pointer = snd_sgio2audio_pcm_pointer,
693 .page = snd_pcm_lib_get_vmalloc_page, 693 .page = snd_pcm_lib_get_vmalloc_page,
694 .mmap = snd_pcm_lib_mmap_vmalloc,
694}; 695};
695 696
696static struct snd_pcm_ops snd_sgio2audio_playback2_ops = { 697static struct snd_pcm_ops snd_sgio2audio_playback2_ops = {
@@ -703,6 +704,7 @@ static struct snd_pcm_ops snd_sgio2audio_playback2_ops = {
703 .trigger = snd_sgio2audio_pcm_trigger, 704 .trigger = snd_sgio2audio_pcm_trigger,
704 .pointer = snd_sgio2audio_pcm_pointer, 705 .pointer = snd_sgio2audio_pcm_pointer,
705 .page = snd_pcm_lib_get_vmalloc_page, 706 .page = snd_pcm_lib_get_vmalloc_page,
707 .mmap = snd_pcm_lib_mmap_vmalloc,
706}; 708};
707 709
708static struct snd_pcm_ops snd_sgio2audio_capture_ops = { 710static struct snd_pcm_ops snd_sgio2audio_capture_ops = {
@@ -715,6 +717,7 @@ static struct snd_pcm_ops snd_sgio2audio_capture_ops = {
715 .trigger = snd_sgio2audio_pcm_trigger, 717 .trigger = snd_sgio2audio_pcm_trigger,
716 .pointer = snd_sgio2audio_pcm_pointer, 718 .pointer = snd_sgio2audio_pcm_pointer,
717 .page = snd_pcm_lib_get_vmalloc_page, 719 .page = snd_pcm_lib_get_vmalloc_page,
720 .mmap = snd_pcm_lib_mmap_vmalloc,
718}; 721};
719 722
720/* 723/*
diff --git a/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c b/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c
index 0afa683c900e..0d668f471620 100644
--- a/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c
+++ b/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c
@@ -277,6 +277,7 @@ static struct snd_pcm_ops pdacf_pcm_capture_ops = {
277 .trigger = pdacf_pcm_trigger, 277 .trigger = pdacf_pcm_trigger,
278 .pointer = pdacf_pcm_capture_pointer, 278 .pointer = pdacf_pcm_capture_pointer,
279 .page = snd_pcm_lib_get_vmalloc_page, 279 .page = snd_pcm_lib_get_vmalloc_page,
280 .mmap = snd_pcm_lib_mmap_vmalloc,
280}; 281};
281 282
282 283
diff --git a/sound/usb/ua101.c b/sound/usb/ua101.c
index 16dc7bd5e120..4f4ccdf70dd0 100644
--- a/sound/usb/ua101.c
+++ b/sound/usb/ua101.c
@@ -911,6 +911,7 @@ static struct snd_pcm_ops capture_pcm_ops = {
911 .trigger = capture_pcm_trigger, 911 .trigger = capture_pcm_trigger,
912 .pointer = capture_pcm_pointer, 912 .pointer = capture_pcm_pointer,
913 .page = snd_pcm_lib_get_vmalloc_page, 913 .page = snd_pcm_lib_get_vmalloc_page,
914 .mmap = snd_pcm_lib_mmap_vmalloc,
914}; 915};
915 916
916static struct snd_pcm_ops playback_pcm_ops = { 917static struct snd_pcm_ops playback_pcm_ops = {
@@ -923,6 +924,7 @@ static struct snd_pcm_ops playback_pcm_ops = {
923 .trigger = playback_pcm_trigger, 924 .trigger = playback_pcm_trigger,
924 .pointer = playback_pcm_pointer, 925 .pointer = playback_pcm_pointer,
925 .page = snd_pcm_lib_get_vmalloc_page, 926 .page = snd_pcm_lib_get_vmalloc_page,
927 .mmap = snd_pcm_lib_mmap_vmalloc,
926}; 928};
927 929
928static const struct uac_format_type_i_discrete_descriptor * 930static const struct uac_format_type_i_discrete_descriptor *
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
index 4ada98e16309..b8e0b8fda607 100644
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -1997,6 +1997,7 @@ static struct snd_pcm_ops snd_usb_playback_ops = {
1997 .trigger = snd_usb_pcm_playback_trigger, 1997 .trigger = snd_usb_pcm_playback_trigger,
1998 .pointer = snd_usb_pcm_pointer, 1998 .pointer = snd_usb_pcm_pointer,
1999 .page = snd_pcm_lib_get_vmalloc_page, 1999 .page = snd_pcm_lib_get_vmalloc_page,
2000 .mmap = snd_pcm_lib_mmap_vmalloc,
2000}; 2001};
2001 2002
2002static struct snd_pcm_ops snd_usb_capture_ops = { 2003static struct snd_pcm_ops snd_usb_capture_ops = {
@@ -2009,6 +2010,7 @@ static struct snd_pcm_ops snd_usb_capture_ops = {
2009 .trigger = snd_usb_pcm_capture_trigger, 2010 .trigger = snd_usb_pcm_capture_trigger,
2010 .pointer = snd_usb_pcm_pointer, 2011 .pointer = snd_usb_pcm_pointer,
2011 .page = snd_pcm_lib_get_vmalloc_page, 2012 .page = snd_pcm_lib_get_vmalloc_page,
2013 .mmap = snd_pcm_lib_mmap_vmalloc,
2012}; 2014};
2013 2015
2014 2016