diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/device.h | 11 | ||||
| -rw-r--r-- | include/linux/dma-mapping.h | 15 | 
2 files changed, 26 insertions, 0 deletions
diff --git a/include/linux/device.h b/include/linux/device.h index 479c0b31593..2258d89bf52 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -410,6 +410,15 @@ extern int devres_release_group(struct device *dev, void *id);  extern void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp);  extern void devm_kfree(struct device *dev, void *p); +struct device_dma_parameters { +	/* +	 * a low level driver may set these to teach IOMMU code about +	 * sg limitations. +	 */ +	unsigned int max_segment_size; +	unsigned long segment_boundary_mask; +}; +  struct device {  	struct klist		klist_children;  	struct klist_node	knode_parent;	/* node in sibling list */ @@ -445,6 +454,8 @@ struct device {  					     64 bit addresses for consistent  					     allocations such descriptors. */ +	struct device_dma_parameters *dma_parms; +  	struct list_head	dma_pools;	/* dma pools (if dma'ble) */  	struct dma_coherent_mem	*dma_mem; /* internal for coherent mem diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index 4470950892b..df3a3610caf 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h @@ -60,6 +60,21 @@ static inline int is_device_dma_capable(struct device *dev)  extern u64 dma_get_required_mask(struct device *dev); +static inline unsigned int dma_get_max_seg_size(struct device *dev) +{ +	return dev->dma_parms ? dev->dma_parms->max_segment_size : 65536; +} + +static inline unsigned int dma_set_max_seg_size(struct device *dev, +						unsigned int size) +{ +	if (dev->dma_parms) { +		dev->dma_parms->max_segment_size = size; +		return 0; +	} else +		return -EIO; +} +  /* flags for the coherent memory api */  #define	DMA_MEMORY_MAP			0x01  #define DMA_MEMORY_IO			0x02  |