summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Rothwell <sfr@canb.auug.org.au>2009-08-06 19:03:58 +1000
committerStephen Rothwell <sfr@canb.auug.org.au>2009-08-06 19:03:58 +1000
commitc95724fb45e652d936e1cefd299e2debae5a4802 (patch)
treefb4fabb35869207ad4b87c6005a6aa1fe339899b
parent0e15677e63ea35bcb1d5083f386f241de97a71e4 (diff)
Revert "agp: Switch agp_{un,}map_page() to take struct page * argument"
This reverts commit c2980d8c2961113f24863f70d8ad016f55224c81.
-rw-r--r--drivers/char/agp/agp.h6
-rw-r--r--drivers/char/agp/backend.c17
-rw-r--r--drivers/char/agp/intel-agp.c12
3 files changed, 18 insertions, 17 deletions
diff --git a/drivers/char/agp/agp.h b/drivers/char/agp/agp.h
index 4c6e5079d870..17e6d0d3ba36 100644
--- a/drivers/char/agp/agp.h
+++ b/drivers/char/agp/agp.h
@@ -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)(struct page *page, dma_addr_t *ret);
- void (*agp_unmap_page)(struct page *page, dma_addr_t dma);
+ int (*agp_map_page)(void *addr, dma_addr_t *ret);
+ void (*agp_unmap_page)(void *addr, 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;
- struct page *scratch_page_page;
+ unsigned long scratch_page_real;
dma_addr_t scratch_page_dma;
unsigned long gart_bus_addr;
unsigned long gatt_bus_addr;
diff --git a/drivers/char/agp/backend.c b/drivers/char/agp/backend.c
index 343f102090a0..3c3a487f7b9d 100644
--- a/drivers/char/agp/backend.c
+++ b/drivers/char/agp/backend.c
@@ -149,9 +149,9 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge)
return -ENOMEM;
}
- bridge->scratch_page_page = page;
+ bridge->scratch_page_real = phys_to_gart(page_to_phys(page));
if (bridge->driver->agp_map_page) {
- if (bridge->driver->agp_map_page(page,
+ if (bridge->driver->agp_map_page(phys_to_virt(page_to_phys(page)),
&bridge->scratch_page_dma)) {
dev_err(&bridge->dev->dev,
"unable to dma-map scratch page\n");
@@ -205,12 +205,13 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge)
err_out:
if (bridge->driver->needs_scratch_page &&
bridge->driver->agp_unmap_page) {
- bridge->driver->agp_unmap_page(bridge->scratch_page_page,
- bridge->scratch_page_dma);
+ void *va = gart_to_virt(bridge->scratch_page_real);
+
+ bridge->driver->agp_unmap_page(va, bridge->scratch_page_dma);
}
err_out_nounmap:
if (bridge->driver->needs_scratch_page) {
- void *va = page_address(bridge->scratch_page_page);
+ void *va = gart_to_virt(bridge->scratch_page_real);
bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_UNMAP);
bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_FREE);
@@ -237,11 +238,11 @@ static void agp_backend_cleanup(struct agp_bridge_data *bridge)
if (bridge->driver->agp_destroy_page &&
bridge->driver->needs_scratch_page) {
- void *va = page_address(bridge->scratch_page_page);
+ void *va = gart_to_virt(bridge->scratch_page_real);
if (bridge->driver->agp_unmap_page)
- bridge->driver->agp_unmap_page(bridge->scratch_page_page,
- bridge->scratch_page_dma);
+ bridge->driver->agp_unmap_page(va,
+ bridge->scratch_page_dma);
bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_UNMAP);
bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_FREE);
diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
index b92d66cf5e47..de3b5eee76fb 100644
--- a/drivers/char/agp/intel-agp.c
+++ b/drivers/char/agp/intel-agp.c
@@ -181,19 +181,19 @@ static struct _intel_private {
} intel_private;
#ifdef USE_PCI_DMA_API
-static int intel_agp_map_page(struct page *page, dma_addr_t *ret)
+static int intel_agp_map_page(void *addr, dma_addr_t *ret)
{
- *ret = pci_map_page(intel_private.pcidev, page, 0,
- PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
+ *ret = pci_map_single(intel_private.pcidev, addr,
+ PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
if (pci_dma_mapping_error(intel_private.pcidev, *ret))
return -EINVAL;
return 0;
}
-static void intel_agp_unmap_page(struct page *page, dma_addr_t dma)
+static void intel_agp_unmap_page(void *addr, dma_addr_t dma)
{
- pci_unmap_page(intel_private.pcidev, dma,
- PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
+ pci_unmap_single(intel_private.pcidev, dma,
+ PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
}
static void intel_agp_free_sglist(struct agp_memory *mem)