1  /*
2   * include/linux/dmapool.h
3   *
4   * Allocation pools for DMAable (coherent) memory.
5   *
6   * This file is licensed under  the terms of the GNU General Public
7   * License version 2. This program is licensed "as is" without any
8   * warranty of any kind, whether express or implied.
9   */
10  
11  #ifndef LINUX_DMAPOOL_H
12  #define	LINUX_DMAPOOL_H
13  
14  #include <linux/scatterlist.h>
15  #include <asm/io.h>
16  
17  struct device;
18  
19  #ifdef CONFIG_HAS_DMA
20  
21  struct dma_pool *dma_pool_create(const char *name, struct device *dev,
22  			size_t size, size_t align, size_t allocation);
23  
24  void dma_pool_destroy(struct dma_pool *pool);
25  
26  void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,
27  		     dma_addr_t *handle);
28  void dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t addr);
29  
30  /*
31   * Managed DMA pool
32   */
33  struct dma_pool *dmam_pool_create(const char *name, struct device *dev,
34  				  size_t size, size_t align, size_t allocation);
35  void dmam_pool_destroy(struct dma_pool *pool);
36  
37  #else /* !CONFIG_HAS_DMA */
dma_pool_create(const char * name,struct device * dev,size_t size,size_t align,size_t allocation)38  static inline struct dma_pool *dma_pool_create(const char *name,
39  	struct device *dev, size_t size, size_t align, size_t allocation)
40  { return NULL; }
dma_pool_destroy(struct dma_pool * pool)41  static inline void dma_pool_destroy(struct dma_pool *pool) { }
dma_pool_alloc(struct dma_pool * pool,gfp_t mem_flags,dma_addr_t * handle)42  static inline void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,
43  				   dma_addr_t *handle) { return NULL; }
dma_pool_free(struct dma_pool * pool,void * vaddr,dma_addr_t addr)44  static inline void dma_pool_free(struct dma_pool *pool, void *vaddr,
45  				 dma_addr_t addr) { }
dmam_pool_create(const char * name,struct device * dev,size_t size,size_t align,size_t allocation)46  static inline struct dma_pool *dmam_pool_create(const char *name,
47  	struct device *dev, size_t size, size_t align, size_t allocation)
48  { return NULL; }
dmam_pool_destroy(struct dma_pool * pool)49  static inline void dmam_pool_destroy(struct dma_pool *pool) { }
50  #endif /* !CONFIG_HAS_DMA */
51  
dma_pool_zalloc(struct dma_pool * pool,gfp_t mem_flags,dma_addr_t * handle)52  static inline void *dma_pool_zalloc(struct dma_pool *pool, gfp_t mem_flags,
53  				    dma_addr_t *handle)
54  {
55  	return dma_pool_alloc(pool, mem_flags | __GFP_ZERO, handle);
56  }
57  
58  #endif
59  
60