include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit...
[safe/jmp/linux-2.6] / arch / powerpc / platforms / iseries / iommu.c
index bbe828f..ce61cea 100644 (file)
@@ -29,6 +29,7 @@
 #include <linux/list.h>
 #include <linux/pci.h>
 #include <linux/module.h>
+#include <linux/slab.h>
 
 #include <asm/iommu.h>
 #include <asm/vio.h>
@@ -66,7 +67,7 @@ static int tce_build_iSeries(struct iommu_table *tbl, long index, long npages,
 
                rc = HvCallXm_setTce((u64)tbl->it_index, (u64)index, tce);
                if (rc)
-                       panic("PCI_DMA: HvCallXm_setTce failed, Rc: 0x%lx\n",
+                       panic("PCI_DMA: HvCallXm_setTce failed, Rc: 0x%llx\n",
                                        rc);
                index++;
                uaddr += TCE_PAGE_SIZE;
@@ -81,7 +82,7 @@ static void tce_free_iSeries(struct iommu_table *tbl, long index, long npages)
        while (npages--) {
                rc = HvCallXm_setTce((u64)tbl->it_index, (u64)index, 0);
                if (rc)
-                       panic("PCI_DMA: HvCallXm_setTce failed, Rc: 0x%lx\n",
+                       panic("PCI_DMA: HvCallXm_setTce failed, Rc: 0x%llx\n",
                                        rc);
                index++;
        }
@@ -174,9 +175,10 @@ static struct iommu_table *iommu_table_find(struct iommu_table * tbl)
 }
 
 
-void iommu_devnode_init_iSeries(struct pci_dev *pdev, struct device_node *dn)
+static void pci_dma_dev_setup_iseries(struct pci_dev *pdev)
 {
        struct iommu_table *tbl;
+       struct device_node *dn = pci_device_to_OF_node(pdev);
        struct pci_dn *pdn = PCI_DN(dn);
        const u32 *lsn = of_get_property(dn, "linux,logical-slot-number", NULL);
 
@@ -192,8 +194,10 @@ void iommu_devnode_init_iSeries(struct pci_dev *pdev, struct device_node *dn)
                pdn->iommu_table = iommu_init_table(tbl, -1);
        else
                kfree(tbl);
-       pdev->dev.archdata.dma_data = pdn->iommu_table;
+       set_iommu_table_base(&pdev->dev, pdn->iommu_table);
 }
+#else
+#define pci_dma_dev_setup_iseries      NULL
 #endif
 
 static struct iommu_table veth_iommu_table;
@@ -202,7 +206,7 @@ static struct iommu_table vio_iommu_table;
 void *iseries_hv_alloc(size_t size, dma_addr_t *dma_handle, gfp_t flag)
 {
        return iommu_alloc_coherent(NULL, &vio_iommu_table, size, dma_handle,
-                               DMA_32BIT_MASK, flag, -1);
+                               DMA_BIT_MASK(32), flag, -1);
 }
 EXPORT_SYMBOL_GPL(iseries_hv_alloc);
 
@@ -217,7 +221,7 @@ dma_addr_t iseries_hv_map(void *vaddr, size_t size,
 {
        return iommu_map_page(NULL, &vio_iommu_table, virt_to_page(vaddr),
                              (unsigned long)vaddr % PAGE_SIZE, size,
-                             DMA_32BIT_MASK, direction, NULL);
+                             DMA_BIT_MASK(32), direction, NULL);
 }
 
 void iseries_hv_unmap(dma_addr_t dma_handle, size_t size,
@@ -251,5 +255,6 @@ void iommu_init_early_iSeries(void)
        ppc_md.tce_build = tce_build_iSeries;
        ppc_md.tce_free  = tce_free_iSeries;
 
+       ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_iseries;
        set_pci_dma_ops(&dma_iommu_ops);
 }