vserver 2.0 rc7
[linux-2.6.git] / arch / ppc64 / kernel / pci_direct_iommu.c
index 8faabca..b8f7f58 100644 (file)
 
 #include "pci.h"
 
-static void *pci_direct_alloc_consistent(struct pci_dev *hwdev, size_t size,
-                                  dma_addr_t *dma_handle)
+static void *pci_direct_alloc_coherent(struct device *hwdev, size_t size,
+                                  dma_addr_t *dma_handle, unsigned int __nocast flag)
 {
        void *ret;
 
-       ret = (void *)__get_free_pages(GFP_ATOMIC, get_order(size));
+       ret = (void *)__get_free_pages(flag, get_order(size));
        if (ret != NULL) {
                memset(ret, 0, size);
                *dma_handle = virt_to_abs(ret);
@@ -43,24 +43,24 @@ static void *pci_direct_alloc_consistent(struct pci_dev *hwdev, size_t size,
        return ret;
 }
 
-static void pci_direct_free_consistent(struct pci_dev *hwdev, size_t size,
+static void pci_direct_free_coherent(struct device *hwdev, size_t size,
                                 void *vaddr, dma_addr_t dma_handle)
 {
        free_pages((unsigned long)vaddr, get_order(size));
 }
 
-static dma_addr_t pci_direct_map_single(struct pci_dev *hwdev, void *ptr,
+static dma_addr_t pci_direct_map_single(struct device *hwdev, void *ptr,
                size_t size, enum dma_data_direction direction)
 {
        return virt_to_abs(ptr);
 }
 
-static void pci_direct_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr,
+static void pci_direct_unmap_single(struct device *hwdev, dma_addr_t dma_addr,
                size_t size, enum dma_data_direction direction)
 {
 }
 
-static int pci_direct_map_sg(struct pci_dev *hwdev, struct scatterlist *sg,
+static int pci_direct_map_sg(struct device *hwdev, struct scatterlist *sg,
                int nents, enum dma_data_direction direction)
 {
        int i;
@@ -73,17 +73,23 @@ static int pci_direct_map_sg(struct pci_dev *hwdev, struct scatterlist *sg,
        return nents;
 }
 
-static void pci_direct_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg,
+static void pci_direct_unmap_sg(struct device *hwdev, struct scatterlist *sg,
                int nents, enum dma_data_direction direction)
 {
 }
 
+static int pci_direct_dma_supported(struct device *dev, u64 mask)
+{
+       return mask < 0x100000000ull;
+}
+
 void __init pci_direct_iommu_init(void)
 {
-       pci_dma_ops.pci_alloc_consistent = pci_direct_alloc_consistent;
-       pci_dma_ops.pci_free_consistent = pci_direct_free_consistent;
-       pci_dma_ops.pci_map_single = pci_direct_map_single;
-       pci_dma_ops.pci_unmap_single = pci_direct_unmap_single;
-       pci_dma_ops.pci_map_sg = pci_direct_map_sg;
-       pci_dma_ops.pci_unmap_sg = pci_direct_unmap_sg;
+       pci_dma_ops.alloc_coherent = pci_direct_alloc_coherent;
+       pci_dma_ops.free_coherent = pci_direct_free_coherent;
+       pci_dma_ops.map_single = pci_direct_map_single;
+       pci_dma_ops.unmap_single = pci_direct_unmap_single;
+       pci_dma_ops.map_sg = pci_direct_map_sg;
+       pci_dma_ops.unmap_sg = pci_direct_unmap_sg;
+       pci_dma_ops.dma_supported = pci_direct_dma_supported;
 }