Commit c7132aeb72ad1106dc76279de4d005f9e1c5815c
1 parent
b66b3cfe6c
Exists in
master
and in
7 other branches
[ALSA] pcm core: add prealloc_max file to substream directory to show maximum DMA size
Users ask us many times about the maximum DMA size for PCM devices. This file gives them a hint in KB. Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Showing 2 changed files with 24 additions and 0 deletions Side-by-side Diff
include/sound/pcm.h
... | ... | @@ -384,6 +384,7 @@ |
384 | 384 | struct snd_info_entry *proc_sw_params_entry; |
385 | 385 | struct snd_info_entry *proc_status_entry; |
386 | 386 | struct snd_info_entry *proc_prealloc_entry; |
387 | + struct snd_info_entry *proc_prealloc_max_entry; | |
387 | 388 | #endif |
388 | 389 | /* misc flags */ |
389 | 390 | unsigned int hw_opened: 1; |
sound/core/pcm_memory.c
... | ... | @@ -101,6 +101,8 @@ |
101 | 101 | { |
102 | 102 | snd_pcm_lib_preallocate_dma_free(substream); |
103 | 103 | #ifdef CONFIG_SND_VERBOSE_PROCFS |
104 | + snd_info_free_entry(substream->proc_prealloc_max_entry); | |
105 | + substream->proc_prealloc_max_entry = NULL; | |
104 | 106 | snd_info_free_entry(substream->proc_prealloc_entry); |
105 | 107 | substream->proc_prealloc_entry = NULL; |
106 | 108 | #endif |
... | ... | @@ -142,6 +144,18 @@ |
142 | 144 | } |
143 | 145 | |
144 | 146 | /* |
147 | + * read callback for prealloc_max proc file | |
148 | + * | |
149 | + * prints the maximum allowed size in kB. | |
150 | + */ | |
151 | +static void snd_pcm_lib_preallocate_max_proc_read(struct snd_info_entry *entry, | |
152 | + struct snd_info_buffer *buffer) | |
153 | +{ | |
154 | + struct snd_pcm_substream *substream = entry->private_data; | |
155 | + snd_iprintf(buffer, "%lu\n", (unsigned long) substream->dma_max / 1024); | |
156 | +} | |
157 | + | |
158 | +/* | |
145 | 159 | * write callback for prealloc proc file |
146 | 160 | * |
147 | 161 | * accepts the preallocation size in kB. |
... | ... | @@ -203,6 +217,15 @@ |
203 | 217 | } |
204 | 218 | } |
205 | 219 | substream->proc_prealloc_entry = entry; |
220 | + if ((entry = snd_info_create_card_entry(substream->pcm->card, "prealloc_max", substream->proc_root)) != NULL) { | |
221 | + entry->c.text.read = snd_pcm_lib_preallocate_max_proc_read; | |
222 | + entry->private_data = substream; | |
223 | + if (snd_info_register(entry) < 0) { | |
224 | + snd_info_free_entry(entry); | |
225 | + entry = NULL; | |
226 | + } | |
227 | + } | |
228 | + substream->proc_prealloc_max_entry = entry; | |
206 | 229 | } |
207 | 230 | |
208 | 231 | #else /* !CONFIG_SND_VERBOSE_PROCFS */ |