agp: Switch agp_{un,}map_page() to take struct page * argument
authorDavid Woodhouse <David.Woodhouse@intel.com>
Wed, 29 Jul 2009 07:39:26 +0000 (08:39 +0100)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Mon, 3 Aug 2009 08:04:54 +0000 (09:04 +0100)
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
drivers/char/agp/agp.h
drivers/char/agp/backend.c
drivers/char/agp/intel-agp.c

index 17e6d0d..4c6e507 100644 (file)
@@ -122,8 +122,8 @@ struct agp_bridge_driver {
        int (*agp_type_to_mask_type) (struct agp_bridge_data *, int);
        void (*chipset_flush)(struct agp_bridge_data *);
 
-       int (*agp_map_page)(void *addr, dma_addr_t *ret);
-       void (*agp_unmap_page)(void *addr, dma_addr_t dma);
+       int (*agp_map_page)(struct page *page, dma_addr_t *ret);
+       void (*agp_unmap_page)(struct page *page, dma_addr_t dma);
        int (*agp_map_memory)(struct agp_memory *mem);
        void (*agp_unmap_memory)(struct agp_memory *mem);
 };
@@ -139,7 +139,7 @@ struct agp_bridge_data {
        u32 __iomem *gatt_table;
        u32 *gatt_table_real;
        unsigned long scratch_page;
-       unsigned long scratch_page_real;
+       struct page *scratch_page_page;
        dma_addr_t scratch_page_dma;
        unsigned long gart_bus_addr;
        unsigned long gatt_bus_addr;
index 3c3a487..343f102 100644 (file)
@@ -149,9 +149,9 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge)
                        return -ENOMEM;
                }
 
-               bridge->scratch_page_real = phys_to_gart(page_to_phys(page));
+               bridge->scratch_page_page = page;
                if (bridge->driver->agp_map_page) {
-                       if (bridge->driver->agp_map_page(phys_to_virt(page_to_phys(page)),
+                       if (bridge->driver->agp_map_page(page,
                                                         &bridge->scratch_page_dma)) {
                                dev_err(&bridge->dev->dev,
                                        "unable to dma-map scratch page\n");
@@ -205,13 +205,12 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge)
 err_out:
        if (bridge->driver->needs_scratch_page &&
            bridge->driver->agp_unmap_page) {
-               void *va = gart_to_virt(bridge->scratch_page_real);
-
-               bridge->driver->agp_unmap_page(va, bridge->scratch_page_dma);
+               bridge->driver->agp_unmap_page(bridge->scratch_page_page,
+                                              bridge->scratch_page_dma);
        }
 err_out_nounmap:
        if (bridge->driver->needs_scratch_page) {
-               void *va = gart_to_virt(bridge->scratch_page_real);
+               void *va = page_address(bridge->scratch_page_page);
 
                bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_UNMAP);
                bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_FREE);
@@ -238,11 +237,11 @@ static void agp_backend_cleanup(struct agp_bridge_data *bridge)
 
        if (bridge->driver->agp_destroy_page &&
            bridge->driver->needs_scratch_page) {
-               void *va = gart_to_virt(bridge->scratch_page_real);
+               void *va = page_address(bridge->scratch_page_page);
 
                if (bridge->driver->agp_unmap_page)
-                       bridge->driver->agp_unmap_page(va,
-                                              bridge->scratch_page_dma);
+                       bridge->driver->agp_unmap_page(bridge->scratch_page_page,
+                                                      bridge->scratch_page_dma);
 
                bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_UNMAP);
                bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_FREE);
index b8f2c75..148d7e3 100644 (file)
@@ -181,19 +181,19 @@ static struct _intel_private {
 } intel_private;
 
 #ifdef USE_PCI_DMA_API
-static int intel_agp_map_page(void *addr, dma_addr_t *ret)
+static int intel_agp_map_page(struct page *page, dma_addr_t *ret)
 {
-       *ret = pci_map_single(intel_private.pcidev, addr,
-                             PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
+       *ret = pci_map_page(intel_private.pcidev, page, 0,
+                           PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
        if (pci_dma_mapping_error(intel_private.pcidev, *ret))
                return -EINVAL;
        return 0;
 }
 
-static void intel_agp_unmap_page(void *addr, dma_addr_t dma)
+static void intel_agp_unmap_page(struct page *page, dma_addr_t dma)
 {
-       pci_unmap_single(intel_private.pcidev, dma,
-                        PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
+       pci_unmap_page(intel_private.pcidev, dma,
+                      PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
 }
 
 static int intel_agp_map_memory(struct agp_memory *mem)