Changeset 679 for GPL/trunk/alsa-kernel/include/sound/memalloc.h
- Timestamp:
- Mar 18, 2021, 8:57:36 PM (4 years ago)
- Location:
- GPL/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
GPL/trunk
- Property svn:mergeinfo changed
/GPL/branches/uniaud32-linux-3.2.102 (added) merged: 611-614 /GPL/branches/uniaud32-next (added) merged: 615-678
- Property svn:mergeinfo changed
-
GPL/trunk/alsa-kernel/include/sound/memalloc.h
r464 r679 1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 1 2 /* 2 3 * Copyright (c) by Jaroslav Kysela <perex@perex.cz> … … 4 5 * 5 6 * Generic memory allocators 6 *7 *8 * This program is free software; you can redistribute it and/or modify9 * it under the terms of the GNU General Public License as published by10 * the Free Software Foundation; either version 2 of the License, or11 * (at your option) any later version.12 *13 * This program is distributed in the hope that it will be useful,14 * but WITHOUT ANY WARRANTY; without even the implied warranty of15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the16 * GNU General Public License for more details.17 *18 * You should have received a copy of the GNU General Public License19 * along with this program; if not, write to the Free Software20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA21 *22 7 */ 23 8 24 9 #ifndef __SOUND_MEMALLOC_H 25 10 #define __SOUND_MEMALLOC_H 11 12 #include <asm/page.h> 26 13 27 14 struct device; … … 35 22 }; 36 23 37 #ifndef snd_dma_pci_data 38 #define snd_dma_pci_data(pci) (&(pci)->dev) 39 #define snd_dma_isa_data() NULL 40 #define snd_dma_continuous_data(x) ((struct device *)(unsigned long)(x)) 41 #endif 24 #define snd_dma_continuous_data(x) ((struct device *)(__force unsigned long)(x)) 42 25 43 26 … … 48 31 #define SNDRV_DMA_TYPE_CONTINUOUS 1 /* continuous no-DMA memory */ 49 32 #define SNDRV_DMA_TYPE_DEV 2 /* generic device continuous */ 33 #define SNDRV_DMA_TYPE_DEV_UC 5 /* continuous non-cahced */ 50 34 #ifdef CONFIG_SND_DMA_SGBUF 51 35 #define SNDRV_DMA_TYPE_DEV_SG 3 /* generic device SG-buffer */ 36 #define SNDRV_DMA_TYPE_DEV_UC_SG 6 /* SG non-cached */ 52 37 #else 53 38 #define SNDRV_DMA_TYPE_DEV_SG SNDRV_DMA_TYPE_DEV /* no SG-buf support */ 39 #define SNDRV_DMA_TYPE_DEV_UC_SG SNDRV_DMA_TYPE_DEV_UC 54 40 #endif 41 #ifdef CONFIG_GENERIC_ALLOCATOR 42 #define SNDRV_DMA_TYPE_DEV_IRAM 4 /* generic device iram-buffer */ 43 #else 44 #define SNDRV_DMA_TYPE_DEV_IRAM SNDRV_DMA_TYPE_DEV 45 #endif 46 #define SNDRV_DMA_TYPE_VMALLOC 7 /* vmalloc'ed buffer */ 55 47 56 48 /* … … 64 56 void *private_data; /* private for allocator; don't touch */ 65 57 }; 58 59 /* 60 * return the pages matching with the given byte size 61 */ 62 static inline unsigned int snd_sgbuf_aligned_pages(size_t size) 63 { 64 return (size + PAGE_SIZE - 1) >> PAGE_SHIFT; 65 } 66 66 67 67 #ifdef CONFIG_SND_DMA_SGBUF … … 89 89 90 90 /* 91 * return the pages matching with the given byte size92 */93 static inline unsigned int snd_sgbuf_aligned_pages(size_t size)94 {95 return (size + PAGE_SIZE - 1) >> PAGE_SHIFT;96 }97 98 /*99 91 * return the physical address at the corresponding offset 100 92 */ 101 static inline dma_addr_t snd_sgbuf_get_addr(struct snd_sg_buf *sgbuf, size_t offset) 93 static inline dma_addr_t snd_sgbuf_get_addr(struct snd_dma_buffer *dmab, 94 size_t offset) 102 95 { 103 dma_addr_t addr = sgbuf->table[offset >> PAGE_SHIFT].addr; 104 addr &= PAGE_MASK; 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); 105 103 return addr + offset % PAGE_SIZE; 106 104 } … … 109 107 * return the virtual address at the corresponding offset 110 108 */ 111 static inline void *snd_sgbuf_get_ptr(struct snd_sg_buf *sgbuf, size_t offset) 109 static inline void *snd_sgbuf_get_ptr(struct snd_dma_buffer *dmab, 110 size_t offset) 112 111 { 112 struct snd_sg_buf *sgbuf = dmab->private_data; 113 114 if (!sgbuf) 115 return dmab->area + offset; 113 116 return sgbuf->table[offset >> PAGE_SHIFT].buf + offset % PAGE_SIZE; 114 117 } 118 119 unsigned int snd_sgbuf_get_chunk_size(struct snd_dma_buffer *dmab, 120 unsigned int ofs, unsigned int size); 121 #else 122 /* 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 115 137 #endif /* CONFIG_SND_DMA_SGBUF */ 116 138 … … 122 144 void snd_dma_free_pages(struct snd_dma_buffer *dmab); 123 145 124 /* buffer-preservation managements */125 126 #define snd_dma_pci_buf_id(pci) (((unsigned int)(pci)->vendor << 16) | (pci)->device)127 128 size_t snd_dma_get_reserved_buf(struct snd_dma_buffer *dmab, unsigned int id);129 int snd_dma_reserve_buf(struct snd_dma_buffer *dmab, unsigned int id);130 131 /* basic memory allocation functions */132 void *snd_malloc_pages(size_t size, gfp_t gfp_flags);133 void snd_free_pages(void *ptr, size_t size);134 135 146 #endif /* __SOUND_MEMALLOC_H */ 136 147
Note:
See TracChangeset
for help on using the changeset viewer.