diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index c62fc4e78cdb..fe87f565768e 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h @@ -771,6 +771,10 @@ int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr, void dma_release_declared_memory(struct device *dev); void *dma_mark_declared_memory_occupied(struct device *dev, dma_addr_t device_addr, size_t size); +dma_addr_t dma_get_device_base(struct device *dev, + struct dma_coherent_mem *mem); +unsigned long dma_get_size(struct dma_coherent_mem *mem); + #else static inline int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr, @@ -790,6 +794,17 @@ dma_mark_declared_memory_occupied(struct device *dev, { return ERR_PTR(-EBUSY); } +static inline dma_addr_t +dma_get_device_base(struct device *dev, struct dma_coherent_mem *mem) +{ + return 0; +} + +static inline unsigned long dma_get_size(struct dma_coherent_mem *mem) +{ + return 0; +} + #endif /* CONFIG_HAVE_GENERIC_DMA_COHERENT */ #ifdef CONFIG_HAS_DMA diff --git a/kernel/dma/coherent.c b/kernel/dma/coherent.c index 597d40893862..83e48618b6ca 100644 --- a/kernel/dma/coherent.c +++ b/kernel/dma/coherent.c @@ -29,14 +29,21 @@ static inline struct dma_coherent_mem *dev_get_coherent_memory(struct device *de return NULL; } -static inline dma_addr_t dma_get_device_base(struct device *dev, - struct dma_coherent_mem * mem) +dma_addr_t dma_get_device_base(struct device *dev, + struct dma_coherent_mem *mem) { if (mem->use_dev_dma_pfn_offset) return (mem->pfn_base - dev->dma_pfn_offset) << PAGE_SHIFT; else return mem->device_base; } +EXPORT_SYMBOL_GPL(dma_get_device_base); + +unsigned long dma_get_size(struct dma_coherent_mem *mem) +{ + return mem->size << PAGE_SHIFT; +} +EXPORT_SYMBOL_GPL(dma_get_size); static int dma_init_coherent_memory( phys_addr_t phys_addr, dma_addr_t device_addr, size_t size, int flags,