diff options
author | Takashi Iwai <tiwai@suse.de> | 2021-06-09 18:25:49 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2021-06-10 10:15:21 +0200 |
commit | 37af81c5998f4b0f23fb452cffa4b8a1c00ce95b (patch) | |
tree | 1def6906c07dfff4d6ddde09cbaaaa3000af693d /sound/core/memalloc_local.h | |
parent | ALSA: core: Drop snd_sgbuf_get_ptr() (diff) | |
download | linux-37af81c5998f4b0f23fb452cffa4b8a1c00ce95b.tar.xz linux-37af81c5998f4b0f23fb452cffa4b8a1c00ce95b.zip |
ALSA: core: Abstract memory alloc helpers
This patch introduces the ops table to each memory allocation type
(SNDRV_DMA_TYPE_XXX) and abstract the handling for the better code
management. Then we get separate the page allocation, release and
other tasks for each type, especially for the SG buffer.
Each buffer type has now callbacks in the struct snd_malloc_ops, and
the common helper functions call those ops accordingly. The former
inline code that is specific to SG-buffer is moved into the local
sgbuf.c, and we can simplify the PCM code without details of memory
handling.
Link: https://lore.kernel.org/r/20210609162551.7842-4-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/core/memalloc_local.h')
-rw-r--r-- | sound/core/memalloc_local.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/sound/core/memalloc_local.h b/sound/core/memalloc_local.h new file mode 100644 index 000000000000..fe55416253bf --- /dev/null +++ b/sound/core/memalloc_local.h @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-2.0-only +#ifndef __MEMALLOC_LOCAL_H +#define __MEMALLOC_LOCAL_H + +struct snd_malloc_ops { + int (*alloc)(struct snd_dma_buffer *dmab, size_t size); + void (*free)(struct snd_dma_buffer *dmab); + dma_addr_t (*get_addr)(struct snd_dma_buffer *dmab, size_t offset); + struct page *(*get_page)(struct snd_dma_buffer *dmab, size_t offset); + unsigned int (*get_chunk_size)(struct snd_dma_buffer *dmab, + unsigned int ofs, unsigned int size); +}; + +#ifdef CONFIG_SND_DMA_SGBUF +extern const struct snd_malloc_ops snd_dma_sg_ops; +#endif + +#endif /* __MEMALLOC_LOCAL_H */ |