xref: /linux/include/linux/dmapool.h (revision c1ce6c2b)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  * include/linux/dmapool.h
31da177e4SLinus Torvalds  *
41da177e4SLinus Torvalds  * Allocation pools for DMAable (coherent) memory.
51da177e4SLinus Torvalds  *
61da177e4SLinus Torvalds  * This file is licensed under  the terms of the GNU General Public
71da177e4SLinus Torvalds  * License version 2. This program is licensed "as is" without any
81da177e4SLinus Torvalds  * warranty of any kind, whether express or implied.
91da177e4SLinus Torvalds  */
101da177e4SLinus Torvalds 
111da177e4SLinus Torvalds #ifndef LINUX_DMAPOOL_H
121da177e4SLinus Torvalds #define	LINUX_DMAPOOL_H
131da177e4SLinus Torvalds 
1484be456fSChristoph Hellwig #include <linux/scatterlist.h>
151da177e4SLinus Torvalds #include <asm/io.h>
161da177e4SLinus Torvalds 
17ce66b032SMark Brown struct device;
18ce66b032SMark Brown 
19*c1ce6c2bSGeert Uytterhoeven #ifdef CONFIG_HAS_DMA
20*c1ce6c2bSGeert Uytterhoeven 
211da177e4SLinus Torvalds struct dma_pool *dma_pool_create(const char *name, struct device *dev,
221da177e4SLinus Torvalds 			size_t size, size_t align, size_t allocation);
231da177e4SLinus Torvalds 
241da177e4SLinus Torvalds void dma_pool_destroy(struct dma_pool *pool);
251da177e4SLinus Torvalds 
26dd0fc66fSAl Viro void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,
273a11ec5eSVictor Fusco 		     dma_addr_t *handle);
281da177e4SLinus Torvalds void dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t addr);
291da177e4SLinus Torvalds 
309ac7849eSTejun Heo /*
319ac7849eSTejun Heo  * Managed DMA pool
329ac7849eSTejun Heo  */
339ac7849eSTejun Heo struct dma_pool *dmam_pool_create(const char *name, struct device *dev,
349ac7849eSTejun Heo 				  size_t size, size_t align, size_t allocation);
359ac7849eSTejun Heo void dmam_pool_destroy(struct dma_pool *pool);
369ac7849eSTejun Heo 
37*c1ce6c2bSGeert Uytterhoeven #else /* !CONFIG_HAS_DMA */
dma_pool_create(const char * name,struct device * dev,size_t size,size_t align,size_t allocation)38*c1ce6c2bSGeert Uytterhoeven static inline struct dma_pool *dma_pool_create(const char *name,
39*c1ce6c2bSGeert Uytterhoeven 	struct device *dev, size_t size, size_t align, size_t allocation)
40*c1ce6c2bSGeert Uytterhoeven { return NULL; }
dma_pool_destroy(struct dma_pool * pool)41*c1ce6c2bSGeert Uytterhoeven 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*c1ce6c2bSGeert Uytterhoeven static inline void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,
43*c1ce6c2bSGeert Uytterhoeven 				   dma_addr_t *handle) { return NULL; }
dma_pool_free(struct dma_pool * pool,void * vaddr,dma_addr_t addr)44*c1ce6c2bSGeert Uytterhoeven static inline void dma_pool_free(struct dma_pool *pool, void *vaddr,
45*c1ce6c2bSGeert Uytterhoeven 				 dma_addr_t addr) { }
dmam_pool_create(const char * name,struct device * dev,size_t size,size_t align,size_t allocation)46*c1ce6c2bSGeert Uytterhoeven static inline struct dma_pool *dmam_pool_create(const char *name,
47*c1ce6c2bSGeert Uytterhoeven 	struct device *dev, size_t size, size_t align, size_t allocation)
48*c1ce6c2bSGeert Uytterhoeven { return NULL; }
dmam_pool_destroy(struct dma_pool * pool)49*c1ce6c2bSGeert Uytterhoeven static inline void dmam_pool_destroy(struct dma_pool *pool) { }
50*c1ce6c2bSGeert Uytterhoeven #endif /* !CONFIG_HAS_DMA */
51*c1ce6c2bSGeert Uytterhoeven 
dma_pool_zalloc(struct dma_pool * pool,gfp_t mem_flags,dma_addr_t * handle)52*c1ce6c2bSGeert Uytterhoeven static inline void *dma_pool_zalloc(struct dma_pool *pool, gfp_t mem_flags,
53*c1ce6c2bSGeert Uytterhoeven 				    dma_addr_t *handle)
54*c1ce6c2bSGeert Uytterhoeven {
55*c1ce6c2bSGeert Uytterhoeven 	return dma_pool_alloc(pool, mem_flags | __GFP_ZERO, handle);
56*c1ce6c2bSGeert Uytterhoeven }
57*c1ce6c2bSGeert Uytterhoeven 
581da177e4SLinus Torvalds #endif
591da177e4SLinus Torvalds 
60