]> err.no Git - linux-2.6/commitdiff
powerpc/dma: Add struct iommu_table argument to iommu_map_sg()
authorMark Nelson <markn@au1.ibm.com>
Fri, 4 Jul 2008 19:05:41 +0000 (05:05 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 9 Jul 2008 06:30:43 +0000 (16:30 +1000)
Make iommu_map_sg take a struct iommu_table. It did so before commit
740c3ce66700640a6e6136ff679b067e92125794 (iommu sg merging: ppc: make
iommu respect the segment size limits).

This stops the function looking in the archdata.dma_data for the iommu
table because in the future it will be called with a device that has
no table there.

This also has the nice side effect of making iommu_map_sg() match the
other map functions.

Signed-off-by: Mark Nelson <markn@au1.ibm.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/dma_64.c
arch/powerpc/kernel/iommu.c
include/asm-powerpc/iommu.h

index 3a317cb0636a4f572790982648b65c077bb84b30..739744508c6ec910aa580c4aef26628ee1e866aa 100644 (file)
@@ -68,7 +68,7 @@ static void dma_iommu_unmap_single(struct device *dev, dma_addr_t dma_handle,
 static int dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
                            int nelems, enum dma_data_direction direction)
 {
-       return iommu_map_sg(dev, sglist, nelems,
+       return iommu_map_sg(dev, dev->archdata.dma_data, sglist, nelems,
                            device_to_mask(dev), direction);
 }
 
index 0c663669bc32cc0dd3bc183368f2225bd5b4d0dc..ccf00fe9cee68ecf2599d7a5bac50dd498b44f49 100644 (file)
@@ -267,11 +267,10 @@ static void iommu_free(struct iommu_table *tbl, dma_addr_t dma_addr,
        spin_unlock_irqrestore(&(tbl->it_lock), flags);
 }
 
-int iommu_map_sg(struct device *dev, struct scatterlist *sglist,
-                int nelems, unsigned long mask,
-                enum dma_data_direction direction)
+int iommu_map_sg(struct device *dev, struct iommu_table *tbl,
+                struct scatterlist *sglist, int nelems,
+                unsigned long mask, enum dma_data_direction direction)
 {
-       struct iommu_table *tbl = dev->archdata.dma_data;
        dma_addr_t dma_next = 0, dma_addr;
        unsigned long flags;
        struct scatterlist *s, *outs, *segstart;
index 852e15f51a1e85f68260f31c2ad737d0b8eb35ad..65f6682bee87526a6aec386b544818b56f110c25 100644 (file)
@@ -79,9 +79,9 @@ extern void iommu_free_table(struct iommu_table *tbl, const char *node_name);
 extern struct iommu_table *iommu_init_table(struct iommu_table * tbl,
                                            int nid);
 
-extern int iommu_map_sg(struct device *dev, struct scatterlist *sglist,
-                       int nelems, unsigned long mask,
-                       enum dma_data_direction direction);
+extern int iommu_map_sg(struct device *dev, struct iommu_table *tbl,
+                       struct scatterlist *sglist, int nelems,
+                       unsigned long mask, enum dma_data_direction direction);
 extern void iommu_unmap_sg(struct iommu_table *tbl, struct scatterlist *sglist,
                           int nelems, enum dma_data_direction direction);