sparc32: Make mmu_map_dma_area and mmu_unmap_dma_area take a device pointer.
This lets us kill this "map it in every IOMMU" crazy code, and also some of the final references to sbus_root. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@ -186,12 +186,12 @@ static void iounit_release_scsi_sgl(struct device *dev, struct scatterlist *sg,
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SBUS
|
||||
static int iounit_map_dma_area(dma_addr_t *pba, unsigned long va, __u32 addr, int len)
|
||||
static int iounit_map_dma_area(struct device *dev, dma_addr_t *pba, unsigned long va, __u32 addr, int len)
|
||||
{
|
||||
struct iounit_struct *iounit = dev->archdata.iommu;
|
||||
unsigned long page, end;
|
||||
pgprot_t dvma_prot;
|
||||
iopte_t *iopte;
|
||||
struct sbus_bus *sbus;
|
||||
|
||||
*pba = addr;
|
||||
|
||||
@ -213,12 +213,8 @@ static int iounit_map_dma_area(dma_addr_t *pba, unsigned long va, __u32 addr, in
|
||||
|
||||
i = ((addr - IOUNIT_DMA_BASE) >> PAGE_SHIFT);
|
||||
|
||||
for_each_sbus(sbus) {
|
||||
struct iounit_struct *iounit = sbus->ofdev.dev.archdata.iommu;
|
||||
|
||||
iopte = (iopte_t *)(iounit->page_table + i);
|
||||
*iopte = MKIOPTE(__pa(page));
|
||||
}
|
||||
iopte = (iopte_t *)(iounit->page_table + i);
|
||||
*iopte = MKIOPTE(__pa(page));
|
||||
}
|
||||
addr += PAGE_SIZE;
|
||||
va += PAGE_SIZE;
|
||||
@ -229,7 +225,7 @@ static int iounit_map_dma_area(dma_addr_t *pba, unsigned long va, __u32 addr, in
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void iounit_unmap_dma_area(unsigned long addr, int len)
|
||||
static void iounit_unmap_dma_area(struct device *dev, unsigned long addr, int len)
|
||||
{
|
||||
/* XXX Somebody please fill this in */
|
||||
}
|
||||
|
@ -334,11 +334,11 @@ static void iommu_release_scsi_sgl(struct device *dev, struct scatterlist *sg, i
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SBUS
|
||||
static int iommu_map_dma_area(dma_addr_t *pba, unsigned long va,
|
||||
unsigned long addr, int len)
|
||||
static int iommu_map_dma_area(struct device *dev, dma_addr_t *pba, unsigned long va,
|
||||
unsigned long addr, int len)
|
||||
{
|
||||
struct iommu_struct *iommu = dev->archdata.iommu;
|
||||
unsigned long page, end;
|
||||
struct iommu_struct *iommu = sbus_root->ofdev.dev.archdata.iommu;
|
||||
iopte_t *iopte = iommu->page_table;
|
||||
iopte_t *first;
|
||||
int ioptex;
|
||||
@ -401,9 +401,9 @@ static int iommu_map_dma_area(dma_addr_t *pba, unsigned long va,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void iommu_unmap_dma_area(unsigned long busa, int len)
|
||||
static void iommu_unmap_dma_area(struct device *dev, unsigned long busa, int len)
|
||||
{
|
||||
struct iommu_struct *iommu = sbus_root->ofdev.dev.archdata.iommu;
|
||||
struct iommu_struct *iommu = dev->archdata.iommu;
|
||||
iopte_t *iopte = iommu->page_table;
|
||||
unsigned long end;
|
||||
int ioptex = (busa - iommu->start) >> PAGE_SHIFT;
|
||||
|
@ -532,8 +532,8 @@ static inline void sun4c_init_ss2_cache_bug(void)
|
||||
}
|
||||
|
||||
/* Addr is always aligned on a page boundary for us already. */
|
||||
static int sun4c_map_dma_area(dma_addr_t *pba, unsigned long va,
|
||||
unsigned long addr, int len)
|
||||
static int sun4c_map_dma_area(struct device *dev, dma_addr_t *pba, unsigned long va,
|
||||
unsigned long addr, int len)
|
||||
{
|
||||
unsigned long page, end;
|
||||
|
||||
@ -555,7 +555,7 @@ static int sun4c_map_dma_area(dma_addr_t *pba, unsigned long va,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void sun4c_unmap_dma_area(unsigned long busa, int len)
|
||||
static void sun4c_unmap_dma_area(struct device *dev, unsigned long busa, int len)
|
||||
{
|
||||
/* Fortunately for us, bus_addr == uncached_virt in sun4c. */
|
||||
/* XXX Implement this */
|
||||
|
Reference in New Issue
Block a user