• Jim Quinlan's avatar
    dma-mapping: introduce DMA range map, supplanting dma_pfn_offset · e0d07278
    Jim Quinlan authored
    The new field 'dma_range_map' in struct device is used to facilitate the
    use of single or multiple offsets between mapping regions of cpu addrs and
    dma addrs.  It subsumes the role of "dev->dma_pfn_offset" which was only
    capable of holding a single uniform offset and had no region bounds
    checking.
    
    The function of_dma_get_range() has been modified so that it takes a single
    argument -- the device node -- and returns a map, NULL, or an error code.
    The map is an array that holds the information regarding the DMA regions.
    Each range entry contains the address offset, the cpu_start address, the
    dma_start address, and the size of the region.
    
    of_dma_configure() is the typical manner to set range offsets but there are
    a number of ad hoc assignments to "dev->dma_pfn_offset" in the kernel
    driver code.  These cases now invoke the function
    dma_direct_set_offset(dev, cpu_addr, dma_addr, size).
    Signed-off-by: default avatarJim Quinlan <james.quinlan@broadcom.com>
    [hch: various interface cleanups]
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
    Tested-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
    Tested-by: default avatarNathan Chancellor <natechancellor@gmail.com>
    e0d07278
direct.c 13.9 KB