Commit c7132aeb72ad1106dc76279de4d005f9e1c5815c

Authored by Jaroslav Kysela
1 parent b66b3cfe6c

[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

... ... @@ -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 */