aboutsummaryrefslogtreecommitdiffstats
path: root/include/sound
diff options
context:
space:
mode:
Diffstat (limited to 'include/sound')
-rw-r--r--include/sound/memalloc.h12
-rw-r--r--include/sound/pcm.h27
2 files changed, 35 insertions, 4 deletions
diff --git a/include/sound/memalloc.h b/include/sound/memalloc.h
index ae2921d9ddcc..96d0dc171459 100644
--- a/include/sound/memalloc.h
+++ b/include/sound/memalloc.h
@@ -65,6 +65,11 @@ struct snd_dma_buffer {
65/* 65/*
66 * Scatter-Gather generic device pages 66 * Scatter-Gather generic device pages
67 */ 67 */
68void *snd_malloc_sgbuf_pages(struct device *device,
69 size_t size, struct snd_dma_buffer *dmab,
70 size_t *res_size);
71int snd_free_sgbuf_pages(struct snd_dma_buffer *dmab);
72
68struct snd_sg_page { 73struct snd_sg_page {
69 void *buf; 74 void *buf;
70 dma_addr_t addr; 75 dma_addr_t addr;
@@ -95,6 +100,13 @@ static inline dma_addr_t snd_sgbuf_get_addr(struct snd_sg_buf *sgbuf, size_t off
95 return sgbuf->table[offset >> PAGE_SHIFT].addr + offset % PAGE_SIZE; 100 return sgbuf->table[offset >> PAGE_SHIFT].addr + offset % PAGE_SIZE;
96} 101}
97 102
103/*
104 * return the virtual address at the corresponding offset
105 */
106static inline void *snd_sgbuf_get_ptr(struct snd_sg_buf *sgbuf, size_t offset)
107{
108 return sgbuf->table[offset >> PAGE_SHIFT].buf + offset % PAGE_SIZE;
109}
98 110
99/* allocate/release a buffer */ 111/* allocate/release a buffer */
100int snd_dma_alloc_pages(int type, struct device *dev, size_t size, 112int snd_dma_alloc_pages(int type, struct device *dev, size_t size,
diff --git a/include/sound/pcm.h b/include/sound/pcm.h
index 9ce74633e6ff..8db89630c821 100644
--- a/include/sound/pcm.h
+++ b/include/sound/pcm.h
@@ -974,10 +974,29 @@ int snd_pcm_lib_preallocate_pages_for_all(struct snd_pcm *pcm,
974int snd_pcm_lib_malloc_pages(struct snd_pcm_substream *substream, size_t size); 974int snd_pcm_lib_malloc_pages(struct snd_pcm_substream *substream, size_t size);
975int snd_pcm_lib_free_pages(struct snd_pcm_substream *substream); 975int snd_pcm_lib_free_pages(struct snd_pcm_substream *substream);
976 976
977#define snd_pcm_substream_sgbuf(substream) ((substream)->runtime->dma_buffer_p->private_data) 977/*
978#define snd_pcm_sgbuf_pages(size) snd_sgbuf_aligned_pages(size) 978 * SG-buffer handling
979#define snd_pcm_sgbuf_get_addr(sgbuf,ofs) snd_sgbuf_get_addr(sgbuf,ofs) 979 */
980struct page *snd_pcm_sgbuf_ops_page(struct snd_pcm_substream *substream, unsigned long offset); 980#define snd_pcm_substream_sgbuf(substream) \
981 ((substream)->runtime->dma_buffer_p->private_data)
982
983static inline dma_addr_t
984snd_pcm_sgbuf_get_addr(struct snd_pcm_substream *substream, unsigned int ofs)
985{
986 struct snd_sg_buf *sg = snd_pcm_substream_sgbuf(substream);
987 return snd_sgbuf_get_addr(sg, ofs);
988}
989
990static inline void *
991snd_pcm_sgbuf_get_ptr(struct snd_pcm_substream *substream, unsigned int ofs)
992{
993 struct snd_sg_buf *sg = snd_pcm_substream_sgbuf(substream);
994 return snd_sgbuf_get_ptr(sg, ofs);
995}
996
997struct page *snd_pcm_sgbuf_ops_page(struct snd_pcm_substream *substream,
998 unsigned long offset);
999
981 1000
982/* handle mmap counter - PCM mmap callback should handle this counter properly */ 1001/* handle mmap counter - PCM mmap callback should handle this counter properly */
983static inline void snd_pcm_mmap_data_open(struct vm_area_struct *area) 1002static inline void snd_pcm_mmap_data_open(struct vm_area_struct *area)