Commit 190d4e59 authored by Christoph Hellwig's avatar Christoph Hellwig

vmd: use the proper dma_* APIs instead of direct methods calls

With the bypass support for the direct mapping we might not always have
methods to call, so use the proper APIs instead.  The only downside is
that we will create two dma-debug entries for each mapping if
CONFIG_DMA_DEBUG is enabled.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Acked-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
Tested-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
Tested-by: default avatarTony Luck <tony.luck@intel.com>
parent 55897af6
...@@ -307,39 +307,32 @@ static struct device *to_vmd_dev(struct device *dev) ...@@ -307,39 +307,32 @@ static struct device *to_vmd_dev(struct device *dev)
return &vmd->dev->dev; return &vmd->dev->dev;
} }
static const struct dma_map_ops *vmd_dma_ops(struct device *dev)
{
return get_dma_ops(to_vmd_dev(dev));
}
static void *vmd_alloc(struct device *dev, size_t size, dma_addr_t *addr, static void *vmd_alloc(struct device *dev, size_t size, dma_addr_t *addr,
gfp_t flag, unsigned long attrs) gfp_t flag, unsigned long attrs)
{ {
return vmd_dma_ops(dev)->alloc(to_vmd_dev(dev), size, addr, flag, return dma_alloc_attrs(to_vmd_dev(dev), size, addr, flag, attrs);
attrs);
} }
static void vmd_free(struct device *dev, size_t size, void *vaddr, static void vmd_free(struct device *dev, size_t size, void *vaddr,
dma_addr_t addr, unsigned long attrs) dma_addr_t addr, unsigned long attrs)
{ {
return vmd_dma_ops(dev)->free(to_vmd_dev(dev), size, vaddr, addr, return dma_free_attrs(to_vmd_dev(dev), size, vaddr, addr, attrs);
attrs);
} }
static int vmd_mmap(struct device *dev, struct vm_area_struct *vma, static int vmd_mmap(struct device *dev, struct vm_area_struct *vma,
void *cpu_addr, dma_addr_t addr, size_t size, void *cpu_addr, dma_addr_t addr, size_t size,
unsigned long attrs) unsigned long attrs)
{ {
return vmd_dma_ops(dev)->mmap(to_vmd_dev(dev), vma, cpu_addr, addr, return dma_mmap_attrs(to_vmd_dev(dev), vma, cpu_addr, addr, size,
size, attrs); attrs);
} }
static int vmd_get_sgtable(struct device *dev, struct sg_table *sgt, static int vmd_get_sgtable(struct device *dev, struct sg_table *sgt,
void *cpu_addr, dma_addr_t addr, size_t size, void *cpu_addr, dma_addr_t addr, size_t size,
unsigned long attrs) unsigned long attrs)
{ {
return vmd_dma_ops(dev)->get_sgtable(to_vmd_dev(dev), sgt, cpu_addr, return dma_get_sgtable_attrs(to_vmd_dev(dev), sgt, cpu_addr, addr, size,
addr, size, attrs); attrs);
} }
static dma_addr_t vmd_map_page(struct device *dev, struct page *page, static dma_addr_t vmd_map_page(struct device *dev, struct page *page,
...@@ -347,61 +340,60 @@ static dma_addr_t vmd_map_page(struct device *dev, struct page *page, ...@@ -347,61 +340,60 @@ static dma_addr_t vmd_map_page(struct device *dev, struct page *page,
enum dma_data_direction dir, enum dma_data_direction dir,
unsigned long attrs) unsigned long attrs)
{ {
return vmd_dma_ops(dev)->map_page(to_vmd_dev(dev), page, offset, size, return dma_map_page_attrs(to_vmd_dev(dev), page, offset, size, dir,
dir, attrs); attrs);
} }
static void vmd_unmap_page(struct device *dev, dma_addr_t addr, size_t size, static void vmd_unmap_page(struct device *dev, dma_addr_t addr, size_t size,
enum dma_data_direction dir, unsigned long attrs) enum dma_data_direction dir, unsigned long attrs)
{ {
vmd_dma_ops(dev)->unmap_page(to_vmd_dev(dev), addr, size, dir, attrs); dma_unmap_page_attrs(to_vmd_dev(dev), addr, size, dir, attrs);
} }
static int vmd_map_sg(struct device *dev, struct scatterlist *sg, int nents, static int vmd_map_sg(struct device *dev, struct scatterlist *sg, int nents,
enum dma_data_direction dir, unsigned long attrs) enum dma_data_direction dir, unsigned long attrs)
{ {
return vmd_dma_ops(dev)->map_sg(to_vmd_dev(dev), sg, nents, dir, attrs); return dma_map_sg_attrs(to_vmd_dev(dev), sg, nents, dir, attrs);
} }
static void vmd_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, static void vmd_unmap_sg(struct device *dev, struct scatterlist *sg, int nents,
enum dma_data_direction dir, unsigned long attrs) enum dma_data_direction dir, unsigned long attrs)
{ {
vmd_dma_ops(dev)->unmap_sg(to_vmd_dev(dev), sg, nents, dir, attrs); dma_unmap_sg_attrs(to_vmd_dev(dev), sg, nents, dir, attrs);
} }
static void vmd_sync_single_for_cpu(struct device *dev, dma_addr_t addr, static void vmd_sync_single_for_cpu(struct device *dev, dma_addr_t addr,
size_t size, enum dma_data_direction dir) size_t size, enum dma_data_direction dir)
{ {
vmd_dma_ops(dev)->sync_single_for_cpu(to_vmd_dev(dev), addr, size, dir); dma_sync_single_for_cpu(to_vmd_dev(dev), addr, size, dir);
} }
static void vmd_sync_single_for_device(struct device *dev, dma_addr_t addr, static void vmd_sync_single_for_device(struct device *dev, dma_addr_t addr,
size_t size, enum dma_data_direction dir) size_t size, enum dma_data_direction dir)
{ {
vmd_dma_ops(dev)->sync_single_for_device(to_vmd_dev(dev), addr, size, dma_sync_single_for_device(to_vmd_dev(dev), addr, size, dir);
dir);
} }
static void vmd_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, static void vmd_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg,
int nents, enum dma_data_direction dir) int nents, enum dma_data_direction dir)
{ {
vmd_dma_ops(dev)->sync_sg_for_cpu(to_vmd_dev(dev), sg, nents, dir); dma_sync_sg_for_cpu(to_vmd_dev(dev), sg, nents, dir);
} }
static void vmd_sync_sg_for_device(struct device *dev, struct scatterlist *sg, static void vmd_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
int nents, enum dma_data_direction dir) int nents, enum dma_data_direction dir)
{ {
vmd_dma_ops(dev)->sync_sg_for_device(to_vmd_dev(dev), sg, nents, dir); dma_sync_sg_for_device(to_vmd_dev(dev), sg, nents, dir);
} }
static int vmd_dma_supported(struct device *dev, u64 mask) static int vmd_dma_supported(struct device *dev, u64 mask)
{ {
return vmd_dma_ops(dev)->dma_supported(to_vmd_dev(dev), mask); return dma_supported(to_vmd_dev(dev), mask);
} }
static u64 vmd_get_required_mask(struct device *dev) static u64 vmd_get_required_mask(struct device *dev)
{ {
return vmd_dma_ops(dev)->get_required_mask(to_vmd_dev(dev)); return dma_get_required_mask(to_vmd_dev(dev));
} }
static void vmd_teardown_dma_ops(struct vmd_dev *vmd) static void vmd_teardown_dma_ops(struct vmd_dev *vmd)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment