Changeset 703 for GPL/trunk/alsa-kernel/include/sound/memalloc.h
- Timestamp:
- Sep 26, 2021, 6:18:40 PM (4 years ago)
- Location:
- GPL/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
GPL/trunk
- Property svn:mergeinfo changed
/GPL/branches/uniaud32-next merged: 696-702
- Property svn:mergeinfo changed
-
GPL/trunk/alsa-kernel/include/sound/memalloc.h
r679 r703 13 13 14 14 struct device; 15 struct vm_area_struct; 15 16 16 17 /* … … 65 66 } 66 67 67 #ifdef CONFIG_SND_DMA_SGBUF68 /*69 * Scatter-Gather generic device pages70 */71 void *snd_malloc_sgbuf_pages(struct device *device,72 size_t size, struct snd_dma_buffer *dmab,73 size_t *res_size);74 int snd_free_sgbuf_pages(struct snd_dma_buffer *dmab);75 76 struct snd_sg_page {77 void *buf;78 dma_addr_t addr;79 };80 81 struct snd_sg_buf {82 int size; /* allocated byte size */83 int pages; /* allocated pages */84 int tblsize; /* allocated table size */85 struct snd_sg_page *table; /* address table */86 struct page **page_table; /* page table (for vmap/vunmap) */87 struct device *dev;88 };89 90 /*91 * return the physical address at the corresponding offset92 */93 static inline dma_addr_t snd_sgbuf_get_addr(struct snd_dma_buffer *dmab,94 size_t offset)95 {96 struct snd_sg_buf *sgbuf = dmab->private_data;97 dma_addr_t addr;98 99 if (!sgbuf)100 return dmab->addr + offset;101 addr = sgbuf->table[offset >> PAGE_SHIFT].addr;102 addr &= ~((dma_addr_t)PAGE_SIZE - 1);103 return addr + offset % PAGE_SIZE;104 }105 106 /*107 * return the virtual address at the corresponding offset108 */109 static inline void *snd_sgbuf_get_ptr(struct snd_dma_buffer *dmab,110 size_t offset)111 {112 struct snd_sg_buf *sgbuf = dmab->private_data;113 114 if (!sgbuf)115 return dmab->area + offset;116 return sgbuf->table[offset >> PAGE_SHIFT].buf + offset % PAGE_SIZE;117 }118 119 unsigned int snd_sgbuf_get_chunk_size(struct snd_dma_buffer *dmab,120 unsigned int ofs, unsigned int size);121 #else122 /* non-SG versions */123 static inline dma_addr_t snd_sgbuf_get_addr(struct snd_dma_buffer *dmab,124 size_t offset)125 {126 return dmab->addr + offset;127 }128 129 static inline void *snd_sgbuf_get_ptr(struct snd_dma_buffer *dmab,130 size_t offset)131 {132 return dmab->area + offset;133 }134 135 #define snd_sgbuf_get_chunk_size(dmab, ofs, size) (size)136 137 #endif /* CONFIG_SND_DMA_SGBUF */138 139 68 /* allocate/release a buffer */ 140 69 int snd_dma_alloc_pages(int type, struct device *dev, size_t size, … … 143 72 struct snd_dma_buffer *dmab); 144 73 void snd_dma_free_pages(struct snd_dma_buffer *dmab); 74 int snd_dma_buffer_mmap(struct snd_dma_buffer *dmab, 75 struct vm_area_struct *area); 76 77 dma_addr_t snd_sgbuf_get_addr(struct snd_dma_buffer *dmab, size_t offset); 78 struct page *snd_sgbuf_get_page(struct snd_dma_buffer *dmab, size_t offset); 79 unsigned int snd_sgbuf_get_chunk_size(struct snd_dma_buffer *dmab, 80 unsigned int ofs, unsigned int size); 145 81 146 82 #endif /* __SOUND_MEMALLOC_H */
Note:
See TracChangeset
for help on using the changeset viewer.