Ignore:
Timestamp:
Sep 26, 2021, 6:18:40 PM (4 years ago)
Author:
David Azarewicz
Message:

Merge changes from next branch.

Location:
GPL/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • GPL/trunk

  • GPL/trunk/alsa-kernel/include/sound/memalloc.h

    r679 r703  
    1313
    1414struct device;
     15struct vm_area_struct;
    1516
    1617/*
     
    6566}
    6667
    67 #ifdef CONFIG_SND_DMA_SGBUF
    68 /*
    69  * Scatter-Gather generic device pages
    70  */
    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 offset
    92  */
    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 offset
    108  */
    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 #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 
    137 #endif /* CONFIG_SND_DMA_SGBUF */
    138 
    13968/* allocate/release a buffer */
    14069int snd_dma_alloc_pages(int type, struct device *dev, size_t size,
     
    14372                                 struct snd_dma_buffer *dmab);
    14473void snd_dma_free_pages(struct snd_dma_buffer *dmab);
     74int snd_dma_buffer_mmap(struct snd_dma_buffer *dmab,
     75                        struct vm_area_struct *area);
     76
     77dma_addr_t snd_sgbuf_get_addr(struct snd_dma_buffer *dmab, size_t offset);
     78struct page *snd_sgbuf_get_page(struct snd_dma_buffer *dmab, size_t offset);
     79unsigned int snd_sgbuf_get_chunk_size(struct snd_dma_buffer *dmab,
     80                                      unsigned int ofs, unsigned int size);
    14581
    14682#endif /* __SOUND_MEMALLOC_H */
Note: See TracChangeset for help on using the changeset viewer.