[Top] [All Lists]

[PATCHv2 01/14] common: dma-mapping: introduce alloc_attrs and free_attr

Subject: [PATCHv2 01/14] common: dma-mapping: introduce alloc_attrs and free_attrs methods
From: Marek Szyprowski <>
Date: Tue, 27 Mar 2012 15:42:35 +0200
Cc: Benjamin Herrenschmidt <>, Thomas Gleixner <>, Andrew Morton <>, Arnd Bergmann <>, Stephen Rothwell <>, FUJITA Tomonori <>,,,,,,,,,,,,,, Jonathan Corbet <>, Marek Szyprowski <>, Kyungmin Park <>, Andrzej Pietrasiewicz <>, Kevin Cernekee <>, Dezhong Diao <>, Richard Kuo <>, "David S. Miller" <>, Michal Simek <>, Guan Xuetao <>, Paul Mundt <>, Richard Henderson <>, Ivan Kokshaysky <>, Matt Turner <>, Tony Luck <>, Fenghua Yu <>
In-reply-to: <>
References: <>
Introduce new generic alloc and free methods with attributes argument.

Existing alloc_coherent and free_coherent can be implemented on top of the
new calls with NULL attributes argument. Later also dma_alloc_non_coherent
can be implemented using DMA_ATTR_NONCOHERENT attribute as well as
dma_alloc_writecombine with separate DMA_ATTR_WRITECOMBINE attribute.

This way the drivers will get more generic, platform independent way of
allocating dma buffers with specific parameters.

Signed-off-by: Marek Szyprowski <>
Acked-by: Kyungmin Park <>
Reviewed-by: David Gibson <>
Reviewed-by: Arnd Bergmann <>
 include/linux/dma-mapping.h |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index e13117c..8cc7f95 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -13,6 +13,12 @@ struct dma_map_ops {
                                dma_addr_t *dma_handle, gfp_t gfp);
        void (*free_coherent)(struct device *dev, size_t size,
                              void *vaddr, dma_addr_t dma_handle);
+       void* (*alloc)(struct device *dev, size_t size,
+                               dma_addr_t *dma_handle, gfp_t gfp,
+                               struct dma_attrs *attrs);
+       void (*free)(struct device *dev, size_t size,
+                             void *vaddr, dma_addr_t dma_handle,
+                             struct dma_attrs *attrs);
        dma_addr_t (*map_page)(struct device *dev, struct page *page,
                               unsigned long offset, size_t size,
                               enum dma_data_direction dir,

<Prev in Thread] Current Thread [Next in Thread>