Skip to contentSkip to conversation

dma-mapping: Add devm_ interface for dma_map_single()

PATCH Superseded Eli Billauer 1 participant 3 messages May 17, 2014

Subsystems (5)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/3 dma-mapping: Add devm_ interface for dma_map_single()

dmam_map_single() and dmam_unmap_single() are the managed counterparts for the respective dma_* functions.

Note that dmam_map_single() returns zero on failure, and not a value to be handled by dma_mapping_error(): The error check is done by dmam_map_single() to avoid the registration of a mapping that failed.

---
 Documentation/driver-model/devres.txt |    2 +
 drivers/base/dma-mapping.c            |   80 +++++++++++++++++++++++++++++++++
 include/linux/dma-mapping.h           |    5 ++-
 3 files changed, 86 insertions(+), 1 deletions(-)
Documentation/driver-model/devres.txt +2 -0
index e1a2707..13b8be0 100644
@@ -266,6 +266,8 @@ DMA
   dmam_declare_coherent_memory()
   dmam_pool_create()
   dmam_pool_destroy()
+  dmam_map_single()
+  dmam_unmap_single()
 
 PCI
   pcim_enable_device()	: after success, all PCI ops become managed
drivers/base/dma-mapping.c +80 -0

89 lines not on this page · raw message

include/linux/dma-mapping.h +4 -1
index fd4aee2..cdb14a8 100644
@@ -233,7 +233,10 @@ static inline void dmam_release_declared_memory(struct device *dev)
 {
 }
 #endif /* ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY */
-
+dma_addr_t dmam_map_single(struct device *dev, void *ptr, size_t size,
+			   enum dma_data_direction direction);
+void dmam_unmap_single(struct device *dev, dma_addr_t dma_handle,
+		       size_t size, enum dma_data_direction direction);
 #ifndef CONFIG_HAVE_DMA_ATTRS
 struct dma_attrs;
 
Signature · 1 line
1.7.2.3
#1 lore raw

PATCH 2/3 dma-mapping: Add devm_ interface for dma_map_single_attrs()

dmam_map_single_attrs() and dmam_unmap_single_attrs() replace the non-*_attrs functions, which are implemented as defines instead.

The case of a non-NULL @attrs parameter has not been tested.

---
 Documentation/driver-model/devres.txt    |    2 +
 drivers/base/dma-mapping.c               |   43 +++++++++++++++++++++--------
 include/asm-generic/dma-mapping-common.h |    2 +
 include/linux/dma-mapping.h              |   10 ++++---
 4 files changed, 41 insertions(+), 16 deletions(-)
Documentation/driver-model/devres.txt +2 -0
index 13b8be0..2112a00 100644
@@ -268,6 +268,8 @@ DMA
   dmam_pool_destroy()
   dmam_map_single()
   dmam_unmap_single()
+  dmam_map_single_attrs()
+  dmam_unmap_single_attrs()
 
 PCI
   pcim_enable_device()	: after success, all PCI ops become managed
drivers/base/dma-mapping.c +31 -12

98 lines not on this page · raw message

include/asm-generic/dma-mapping-common.h +2 -0
index de8bf89..aaa7c68 100644
@@ -175,6 +175,8 @@ dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
 #define dma_unmap_single(d, a, s, r) dma_unmap_single_attrs(d, a, s, r, NULL)
 #define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, NULL)
 #define dma_unmap_sg(d, s, n, r) dma_unmap_sg_attrs(d, s, n, r, NULL)
+#define dmam_map_single(d, a, s, r) dmam_map_single_attrs(d, a, s, r, NULL)
+#define dmam_unmap_single(d, a, s, r) dmam_unmap_single_attrs(d, a, s, r, NULL)
 
 extern int dma_common_mmap(struct device *dev, struct vm_area_struct *vma,
 			   void *cpu_addr, dma_addr_t dma_addr, size_t size);
include/linux/dma-mapping.h +6 -4
index cdb14a8..ba2a403 100644
@@ -233,10 +233,12 @@ static inline void dmam_release_declared_memory(struct device *dev)
 {
 }
 #endif /* ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY */
-dma_addr_t dmam_map_single(struct device *dev, void *ptr, size_t size,
-			   enum dma_data_direction direction);
-void dmam_unmap_single(struct device *dev, dma_addr_t dma_handle,
-		       size_t size, enum dma_data_direction direction);
+dma_addr_t dmam_map_single_attrs(struct device *dev, void *ptr, size_t size,
+				 enum dma_data_direction direction,
+				 struct dma_attrs *attrs);
+void dmam_unmap_single_attrs(struct device *dev, dma_addr_t dma_handle,
+			     size_t size, enum dma_data_direction direction,
+			     struct dma_attrs *attrs);
 #ifndef CONFIG_HAVE_DMA_ATTRS
 struct dma_attrs;
 
Signature · 1 line
1.7.2.3
#2 lore raw

PATCH 3/3 dma-mapping: pci: Add devm_ interface for pci_map_single

In reply to Eli Billauer
---
 Documentation/driver-model/devres.txt |    2 ++
 include/asm-generic/pci-dma-compat.h  |   17 +++++++++++++++++
 2 files changed, 19 insertions(+), 0 deletions(-)
Documentation/driver-model/devres.txt +2 -0
index 2112a00..fea2c69 100644
@@ -274,6 +274,8 @@ DMA
 PCI
   pcim_enable_device()	: after success, all PCI ops become managed
   pcim_pin_device()	: keep PCI device enabled after release
+  pcim_map_single()
+  pcim_unmap_single()
 
 IOMAP
   devm_ioport_map()
include/asm-generic/pci-dma-compat.h +17 -0
index 1437b7d..444e598 100644
@@ -113,4 +113,21 @@ static inline int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
 }
 #endif
 
+/*
+ * Managed DMA API
+ */
+
+static inline dma_addr_t
+pcim_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction)
+{
+	return dmam_map_single(hwdev == NULL ? NULL : &hwdev->dev, ptr, size, (enum dma_data_direction)direction);
+}
+
+static inline void
+pcim_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr,
+		 size_t size, int direction)
+{
+	dmam_unmap_single(hwdev == NULL ? NULL : &hwdev->dev, dma_addr, size, (enum dma_data_direction)direction);
+}
+
 #endif
Signature · 1 line
1.7.2.3