[PATCH v5 3/9] dma-mapping: add dma_{map,unmap}_resource
From: Dan Williams <hidden>
Date: 2016-03-11 06:47:21
Also in:
linux-arch, linux-iommu, linux-renesas-soc, lkml
On Thu, Mar 10, 2016 at 8:05 AM, Niklas S??derlund [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Hi Christoph, On 2016-03-07 23:38:47 -0800, Christoph Hellwig wrote:quoted
Please add some documentation on where/how this should be used. It's not a very obvious interface.Good idea, I have added the following to Documentation/DMA-API.txt and folded it in to this patch. Do you feel it's adequate and do you know anywhere else I should add documentation?diff --git a/Documentation/DMA-API.txt b/Documentation/DMA-API.txt index 45ef3f2..248556a 100644 --- a/Documentation/DMA-API.txt +++ b/Documentation/DMA-API.txt@@ -277,14 +277,29 @@ and <size> parameters are provided to do partial page mapping, it is recommended that you never use these unless you really know what the cache width is. +dma_addr_t +dma_map_resource(struct device *dev, phys_addr_t phys_addr, size_t size, + enum dma_data_direction dir, struct dma_attrs *attrs) + +Maps a MMIO region so it can be accessed by the device and returns the +DMA address of the memory. API should only be used to map device MMIO, +mapping of RAM is not permitted. +
I think it is confusing to use the dma_ prefix for this peer-to-peer mmio functionality. dma_addr_t is a device's view of host memory. Something like bus_addr_t bus_map_resource(). Doesn't this routine also need the source device in addition to the target device? The resource address is from the perspective of the host cpu, it may be a different address space in the view of two devices relative to each other.