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