dma-mapping: Add devm_ interface for dma_map_single()
Subsystems (5)
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
@@ -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
@@ -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
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
@@ -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
@@ -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
@@ -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
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
@@ -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
@@ -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