From: Michael Werner <werner@mrcoffee.engr.sgi.com>

Add bridge parameter to create_gatt_table, free_gatt_table and mask_memory

Signed-off-by: Mike Werner <werner@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/char/agp/agp.h           |   18 +++--
 25-akpm/drivers/char/agp/alpha-agp.c     |    4 -
 25-akpm/drivers/char/agp/amd-k7-agp.c    |    7 +-
 25-akpm/drivers/char/agp/amd64-agp.c     |    3 
 25-akpm/drivers/char/agp/ati-agp.c       |    7 +-
 25-akpm/drivers/char/agp/backend.c       |    8 +-
 25-akpm/drivers/char/agp/efficeon-agp.c  |    6 -
 25-akpm/drivers/char/agp/generic.c       |  103 +++++++++++++++----------------
 25-akpm/drivers/char/agp/hp-agp.c        |   13 ++-
 25-akpm/drivers/char/agp/i460-agp.c      |   15 ++--
 25-akpm/drivers/char/agp/intel-agp.c     |   26 ++++---
 25-akpm/drivers/char/agp/intel-mch-agp.c |   16 ++--
 25-akpm/drivers/char/agp/nvidia-agp.c    |    3 
 25-akpm/drivers/char/agp/sis-agp.c       |   12 +--
 25-akpm/drivers/char/agp/sworks-agp.c    |   12 +--
 25-akpm/drivers/char/agp/uninorth-agp.c  |   18 ++---
 16 files changed, 145 insertions(+), 126 deletions(-)

diff -puN drivers/char/agp/agp.h~agpgart-add-bridge-parameter-to-driver-functions drivers/char/agp/agp.h
--- 25/drivers/char/agp/agp.h~agpgart-add-bridge-parameter-to-driver-functions	2005-01-11 19:56:25.762330152 -0800
+++ 25-akpm/drivers/char/agp/agp.h	2005-01-11 19:56:25.787326352 -0800
@@ -101,13 +101,14 @@ struct agp_bridge_driver {
 	struct gatt_mask *masks;
 	int (*fetch_size)(void);
 	int (*configure)(void);
-	void (*agp_enable)(u32);
+	void (*agp_enable)(struct agp_bridge_data *, u32);
 	void (*cleanup)(void);
 	void (*tlb_flush)(struct agp_memory *);
-	unsigned long (*mask_memory)(unsigned long, int);
+	unsigned long (*mask_memory)(struct agp_bridge_data *,
+		unsigned long, int);
 	void (*cache_flush)(void);
-	int (*create_gatt_table)(void);
-	int (*free_gatt_table)(void);
+	int (*create_gatt_table)(struct agp_bridge_data *);
+	int (*free_gatt_table)(struct agp_bridge_data *);
 	int (*insert_memory)(struct agp_memory *, off_t, int);
 	int (*remove_memory)(struct agp_memory *, off_t, int);
 	struct agp_memory *(*alloc_by_type) (size_t, int);
@@ -245,9 +246,9 @@ int agp_frontend_initialize(void);
 void agp_frontend_cleanup(void);
 
 /* Generic routines. */
-void agp_generic_enable(u32 mode);
-int agp_generic_create_gatt_table(void);
-int agp_generic_free_gatt_table(void);
+void agp_generic_enable(struct agp_bridge_data *bridge, u32 mode);
+int agp_generic_create_gatt_table(struct agp_bridge_data *bridge);
+int agp_generic_free_gatt_table(struct agp_bridge_data *bridge);
 struct agp_memory *agp_create_memory(int scratch_pages);
 int agp_generic_insert_memory(struct agp_memory *mem, off_t pg_start, int type);
 int agp_generic_remove_memory(struct agp_memory *mem, off_t pg_start, int type);
@@ -262,7 +263,8 @@ void agp_device_command(u32 command, int
 int agp_3_5_enable(struct agp_bridge_data *bridge);
 void global_cache_flush(void);
 void get_agp_version(struct agp_bridge_data *bridge);
-unsigned long agp_generic_mask_memory(unsigned long addr, int type);
+unsigned long agp_generic_mask_memory(struct agp_bridge_data *bridge,
+	unsigned long addr, int type);
 struct agp_bridge_data *agp_generic_find_bridge(struct pci_dev *pdev);
 
 /* generic routines for agp>=3 */
diff -puN drivers/char/agp/alpha-agp.c~agpgart-add-bridge-parameter-to-driver-functions drivers/char/agp/alpha-agp.c
--- 25/drivers/char/agp/alpha-agp.c~agpgart-add-bridge-parameter-to-driver-functions	2005-01-11 19:56:25.763330000 -0800
+++ 25-akpm/drivers/char/agp/alpha-agp.c	2005-01-11 19:56:25.787326352 -0800
@@ -76,9 +76,9 @@ static void alpha_core_agp_tlbflush(stru
 	alpha_mv.mv_pci_tbi(agp->hose, 0, -1);
 }
 
-static void alpha_core_agp_enable(u32 mode)
+static void alpha_core_agp_enable(struct agp_bridge_data *bridge, u32 mode)
 {
-	alpha_agp_info *agp = agp_bridge->dev_private_data;
+	alpha_agp_info *agp = bridge->dev_private_data;
 
 	agp->mode.lw = agp_collect_device_status(mode, agp->capability.lw);
 
diff -puN drivers/char/agp/amd64-agp.c~agpgart-add-bridge-parameter-to-driver-functions drivers/char/agp/amd64-agp.c
--- 25/drivers/char/agp/amd64-agp.c~agpgart-add-bridge-parameter-to-driver-functions	2005-01-11 19:56:25.765329696 -0800
+++ 25-akpm/drivers/char/agp/amd64-agp.c	2005-01-11 19:56:25.788326200 -0800
@@ -106,7 +106,8 @@ static int amd64_insert_memory(struct ag
 	}
 
 	for (i = 0, j = pg_start; i < mem->page_count; i++, j++) {
-		tmp = agp_bridge->driver->mask_memory(mem->memory[i], mem->type);
+		tmp = agp_bridge->driver->mask_memory(agp_bridge,
+			mem->memory[i], mem->type);
 
 		BUG_ON(tmp & 0xffffff0000000ffcULL);
 		pte = (tmp & 0x000000ff00000000ULL) >> 28;
diff -puN drivers/char/agp/amd-k7-agp.c~agpgart-add-bridge-parameter-to-driver-functions drivers/char/agp/amd-k7-agp.c
--- 25/drivers/char/agp/amd-k7-agp.c~agpgart-add-bridge-parameter-to-driver-functions	2005-01-11 19:56:25.767329392 -0800
+++ 25-akpm/drivers/char/agp/amd-k7-agp.c	2005-01-11 19:56:25.788326200 -0800
@@ -132,7 +132,7 @@ static int amd_create_gatt_pages(int nr_
 #define GET_GATT(addr) (amd_irongate_private.gatt_pages[\
 	GET_PAGE_DIR_IDX(addr)]->remapped)
 
-static int amd_create_gatt_table(void)
+static int amd_create_gatt_table(struct agp_bridge_data *bridge)
 {
 	struct aper_size_info_lvl2 *value;
 	struct amd_page_map page_dir;
@@ -175,7 +175,7 @@ static int amd_create_gatt_table(void)
 	return 0;
 }
 
-static int amd_free_gatt_table(void)
+static int amd_free_gatt_table(struct agp_bridge_data *bridge)
 {
 	struct amd_page_map page_dir;
 
@@ -314,7 +314,8 @@ static int amd_insert_memory(struct agp_
 	for (i = 0, j = pg_start; i < mem->page_count; i++, j++) {
 		addr = (j * PAGE_SIZE) + agp_bridge->gart_bus_addr;
 		cur_gatt = GET_GATT(addr);
-		writel(agp_generic_mask_memory(mem->memory[i], mem->type), cur_gatt+GET_GATT_OFF(addr));
+		writel(agp_generic_mask_memory(agp_bridge,
+			mem->memory[i], mem->type), cur_gatt+GET_GATT_OFF(addr));
 		readl(cur_gatt+GET_GATT_OFF(addr));	/* PCI Posting. */
 	}
 	amd_irongate_tlbflush(mem);
diff -puN drivers/char/agp/ati-agp.c~agpgart-add-bridge-parameter-to-driver-functions drivers/char/agp/ati-agp.c
--- 25/drivers/char/agp/ati-agp.c~agpgart-add-bridge-parameter-to-driver-functions	2005-01-11 19:56:25.768329240 -0800
+++ 25-akpm/drivers/char/agp/ati-agp.c	2005-01-11 19:56:25.789326048 -0800
@@ -291,7 +291,8 @@ static int ati_insert_memory(struct agp_
 	for (i = 0, j = pg_start; i < mem->page_count; i++, j++) {
 		addr = (j * PAGE_SIZE) + agp_bridge->gart_bus_addr;
 		cur_gatt = GET_GATT(addr);
-		writel(agp_bridge->driver->mask_memory(mem->memory[i], mem->type), cur_gatt+GET_GATT_OFF(addr));
+		writel(agp_bridge->driver->mask_memory(agp_bridge,
+			mem->memory[i], mem->type), cur_gatt+GET_GATT_OFF(addr));
 		readl(cur_gatt+GET_GATT_OFF(addr));	/* PCI Posting. */
 	}
 	agp_bridge->driver->tlb_flush(mem);
@@ -319,7 +320,7 @@ static int ati_remove_memory(struct agp_
 	return 0;
 }
 
-static int ati_create_gatt_table(void)
+static int ati_create_gatt_table(struct agp_bridge_data *bridge)
 {
 	struct aper_size_info_lvl2 *value;
 	ati_page_map page_dir;
@@ -380,7 +381,7 @@ static int ati_create_gatt_table(void)
 	return 0;
 }
 
-static int ati_free_gatt_table(void)
+static int ati_free_gatt_table(struct agp_bridge_data *bridge)
 {
 	ati_page_map page_dir;
 
diff -puN drivers/char/agp/backend.c~agpgart-add-bridge-parameter-to-driver-functions drivers/char/agp/backend.c
--- 25/drivers/char/agp/backend.c~agpgart-add-bridge-parameter-to-driver-functions	2005-01-11 19:56:25.770328936 -0800
+++ 25-akpm/drivers/char/agp/backend.c	2005-01-11 19:56:25.790325896 -0800
@@ -149,7 +149,7 @@ static int agp_backend_initialize(struct
 
 		bridge->scratch_page_real = virt_to_phys(addr);
 		bridge->scratch_page =
-		    bridge->driver->mask_memory(bridge->scratch_page_real, 0);
+		    bridge->driver->mask_memory(bridge, bridge->scratch_page_real, 0);
 	}
 
 	size_value = bridge->driver->fetch_size();
@@ -158,7 +158,7 @@ static int agp_backend_initialize(struct
 		rc = -EINVAL;
 		goto err_out;
 	}
-	if (bridge->driver->create_gatt_table()) {
+	if (bridge->driver->create_gatt_table(bridge)) {
 		printk(KERN_ERR PFX
 		    "unable to get memory for graphics translation table.\n");
 		rc = -ENOMEM;
@@ -190,7 +190,7 @@ err_out:
 		bridge->driver->agp_destroy_page(
 				phys_to_virt(bridge->scratch_page_real));
 	if (got_gatt)
-		bridge->driver->free_gatt_table();
+		bridge->driver->free_gatt_table(bridge);
 	if (got_keylist) {
 		vfree(bridge->key_list);
 		bridge->key_list = NULL;
@@ -204,7 +204,7 @@ static void agp_backend_cleanup(struct a
 	if (bridge->driver->cleanup)
 		bridge->driver->cleanup();
 	if (bridge->driver->free_gatt_table)
-		bridge->driver->free_gatt_table();
+		bridge->driver->free_gatt_table(bridge);
 	if (bridge->key_list) {
 		vfree(bridge->key_list);
 		bridge->key_list = NULL;
diff -puN drivers/char/agp/efficeon-agp.c~agpgart-add-bridge-parameter-to-driver-functions drivers/char/agp/efficeon-agp.c
--- 25/drivers/char/agp/efficeon-agp.c~agpgart-add-bridge-parameter-to-driver-functions	2005-01-11 19:56:25.771328784 -0800
+++ 25-akpm/drivers/char/agp/efficeon-agp.c	2005-01-11 19:56:25.791325744 -0800
@@ -148,7 +148,7 @@ static int efficeon_configure(void)
 	return 0;
 }
 
-static int efficeon_free_gatt_table(void)
+static int efficeon_free_gatt_table(struct agp_bridge_data *bridge)
 {
 	int index, freed = 0;
 
@@ -183,7 +183,7 @@ static int efficeon_free_gatt_table(void
 #define GET_GATT(addr) (efficeon_private.gatt_pages[\
 	GET_PAGE_DIR_IDX(addr)]->remapped)
 
-static int efficeon_create_gatt_table(void)
+static int efficeon_create_gatt_table(struct agp_bridge_data *bridge)
 {
 	int index;
 	const int pati    = EFFICEON_PATI;
@@ -209,7 +209,7 @@ static int efficeon_create_gatt_table(vo
 
 		page = get_zeroed_page(GFP_KERNEL);
 		if (!page) {
-			efficeon_free_gatt_table();
+			efficeon_free_gatt_table(agp_bridge);
 			return -ENOMEM;
 		}
 		SetPageReserved(virt_to_page((char *)page));
diff -puN drivers/char/agp/generic.c~agpgart-add-bridge-parameter-to-driver-functions drivers/char/agp/generic.c
--- 25/drivers/char/agp/generic.c~agpgart-add-bridge-parameter-to-driver-functions	2005-01-11 19:56:25.772328632 -0800
+++ 25-akpm/drivers/char/agp/generic.c	2005-01-11 19:56:25.793325440 -0800
@@ -605,42 +605,42 @@ void get_agp_version(struct agp_bridge_d
 EXPORT_SYMBOL(get_agp_version);
 
 
-void agp_generic_enable(u32 mode)
+void agp_generic_enable(struct agp_bridge_data *bridge, u32 mode)
 {
 	u32 command, temp;
 	u32 agp3;
 
-	get_agp_version(agp_bridge);
+	get_agp_version(bridge);
 
 	printk(KERN_INFO PFX "Found an AGP %d.%d compliant device at %s.\n",
-				agp_bridge->major_version,
-				agp_bridge->minor_version,
-				agp_bridge->dev->slot_name);
+				bridge->major_version,
+				bridge->minor_version,
+				bridge->dev->slot_name);
 
-	pci_read_config_dword(agp_bridge->dev,
-		      agp_bridge->capndx + PCI_AGP_STATUS, &command);
+	pci_read_config_dword(bridge->dev,
+		      bridge->capndx + PCI_AGP_STATUS, &command);
 
 	command = agp_collect_device_status(mode, command);
 	command |= AGPSTAT_AGP_ENABLE;
 
 	/* Do AGP version specific frobbing. */
-	if(agp_bridge->major_version >= 3) {
-		pci_read_config_dword(agp_bridge->dev,
-			agp_bridge->capndx+AGPSTAT, &agp3);
+	if(bridge->major_version >= 3) {
+		pci_read_config_dword(bridge->dev,
+			bridge->capndx+AGPSTAT, &agp3);
 
 		/* Check to see if we are operating in 3.0 mode */
 		if (agp3 & AGPSTAT_MODE_3_0) {
 			/* If we have 3.5, we can do the isoch stuff. */
-			if (agp_bridge->minor_version >= 5)
-				agp_3_5_enable(agp_bridge);
+			if (bridge->minor_version >= 5)
+				agp_3_5_enable(bridge);
 			agp_device_command(command, TRUE);
 			return;
 		} else {
 		    /* Disable calibration cycle in RX91<1> when not in AGP3.0 mode of operation.*/
 		    command &= ~(7<<10) ;
-		    pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx+AGPCTRL, &temp);
+		    pci_read_config_dword(bridge->dev, bridge->capndx+AGPCTRL, &temp);
 		    temp |= (1<<9);
-		    pci_write_config_dword(agp_bridge->dev, agp_bridge->capndx+AGPCTRL, temp);
+		    pci_write_config_dword(bridge->dev, bridge->capndx+AGPCTRL, temp);
 
 		    printk (KERN_INFO PFX "Device is in legacy mode,"
 				" falling back to 2.x\n");
@@ -653,7 +653,7 @@ void agp_generic_enable(u32 mode)
 EXPORT_SYMBOL(agp_generic_enable);
 
 
-int agp_generic_create_gatt_table(void)
+int agp_generic_create_gatt_table(struct agp_bridge_data *bridge)
 {
 	char *table;
 	char *table_end;
@@ -665,17 +665,17 @@ int agp_generic_create_gatt_table(void)
 	struct page *page;
 
 	/* The generic routines can't handle 2 level gatt's */
-	if (agp_bridge->driver->size_type == LVL2_APER_SIZE)
+	if (bridge->driver->size_type == LVL2_APER_SIZE)
 		return -EINVAL;
 
 	table = NULL;
-	i = agp_bridge->aperture_size_idx;
-	temp = agp_bridge->current_size;
+	i = bridge->aperture_size_idx;
+	temp = bridge->current_size;
 	size = page_order = num_entries = 0;
 
-	if (agp_bridge->driver->size_type != FIXED_APER_SIZE) {
+	if (bridge->driver->size_type != FIXED_APER_SIZE) {
 		do {
-			switch (agp_bridge->driver->size_type) {
+			switch (bridge->driver->size_type) {
 			case U8_APER_SIZE:
 				size = A_SIZE_8(temp)->size;
 				page_order =
@@ -706,29 +706,29 @@ int agp_generic_create_gatt_table(void)
 
 			if (table == NULL) {
 				i++;
-				switch (agp_bridge->driver->size_type) {
+				switch (bridge->driver->size_type) {
 				case U8_APER_SIZE:
-					agp_bridge->current_size = A_IDX8(agp_bridge);
+					bridge->current_size = A_IDX8(bridge);
 					break;
 				case U16_APER_SIZE:
-					agp_bridge->current_size = A_IDX16(agp_bridge);
+					bridge->current_size = A_IDX16(bridge);
 					break;
 				case U32_APER_SIZE:
-					agp_bridge->current_size = A_IDX32(agp_bridge);
+					bridge->current_size = A_IDX32(bridge);
 					break;
 					/* This case will never really happen. */
 				case FIXED_APER_SIZE:
 				case LVL2_APER_SIZE:
 				default:
-					agp_bridge->current_size =
-					    agp_bridge->current_size;
+					bridge->current_size =
+					    bridge->current_size;
 					break;
 				}
-				temp = agp_bridge->current_size;
+				temp = bridge->current_size;
 			} else {
-				agp_bridge->aperture_size_idx = i;
+				bridge->aperture_size_idx = i;
 			}
-		} while (!table && (i < agp_bridge->driver->num_aperture_sizes));
+		} while (!table && (i < bridge->driver->num_aperture_sizes));
 	} else {
 		size = ((struct aper_size_info_fixed *) temp)->size;
 		page_order = ((struct aper_size_info_fixed *) temp)->page_order;
@@ -744,15 +744,15 @@ int agp_generic_create_gatt_table(void)
 	for (page = virt_to_page(table); page <= virt_to_page(table_end); page++)
 		SetPageReserved(page);
 
-	agp_bridge->gatt_table_real = (u32 *) table;
+	bridge->gatt_table_real = (u32 *) table;
 	agp_gatt_table = (void *)table;
 
-	agp_bridge->driver->cache_flush();
-	agp_bridge->gatt_table = ioremap_nocache(virt_to_phys(table),
+	bridge->driver->cache_flush();
+	bridge->gatt_table = ioremap_nocache(virt_to_phys(table),
 					(PAGE_SIZE * (1 << page_order)));
-	agp_bridge->driver->cache_flush();
+	bridge->driver->cache_flush();
 
-	if (agp_bridge->gatt_table == NULL) {
+	if (bridge->gatt_table == NULL) {
 		for (page = virt_to_page(table); page <= virt_to_page(table_end); page++)
 			ClearPageReserved(page);
 
@@ -760,28 +760,28 @@ int agp_generic_create_gatt_table(void)
 
 		return -ENOMEM;
 	}
-	agp_bridge->gatt_bus_addr = virt_to_phys(agp_bridge->gatt_table_real);
+	bridge->gatt_bus_addr = virt_to_phys(bridge->gatt_table_real);
 
 	/* AK: bogus, should encode addresses > 4GB */
 	for (i = 0; i < num_entries; i++) {
-		writel(agp_bridge->scratch_page, agp_bridge->gatt_table+i);
-		readl(agp_bridge->gatt_table+i);	/* PCI Posting. */
+		writel(bridge->scratch_page, bridge->gatt_table+i);
+		readl(bridge->gatt_table+i);	/* PCI Posting. */
 	}
 
 	return 0;
 }
 EXPORT_SYMBOL(agp_generic_create_gatt_table);
 
-int agp_generic_free_gatt_table(void)
+int agp_generic_free_gatt_table(struct agp_bridge_data *bridge)
 {
 	int page_order;
 	char *table, *table_end;
 	void *temp;
 	struct page *page;
 
-	temp = agp_bridge->current_size;
+	temp = bridge->current_size;
 
-	switch (agp_bridge->driver->size_type) {
+	switch (bridge->driver->size_type) {
 	case U8_APER_SIZE:
 		page_order = A_SIZE_8(temp)->page_order;
 		break;
@@ -807,19 +807,19 @@ int agp_generic_free_gatt_table(void)
 	 * called, then all agp memory is deallocated and removed
 	 * from the table. */
 
-	iounmap(agp_bridge->gatt_table);
-	table = (char *) agp_bridge->gatt_table_real;
+	iounmap(bridge->gatt_table);
+	table = (char *) bridge->gatt_table_real;
 	table_end = table + ((PAGE_SIZE * (1 << page_order)) - 1);
 
 	for (page = virt_to_page(table); page <= virt_to_page(table_end); page++)
 		ClearPageReserved(page);
 
-	free_pages((unsigned long) agp_bridge->gatt_table_real, page_order);
+	free_pages((unsigned long) bridge->gatt_table_real, page_order);
 
 	agp_gatt_table = NULL;
-	agp_bridge->gatt_table = NULL;
-	agp_bridge->gatt_table_real = NULL;
-	agp_bridge->gatt_bus_addr = 0;
+	bridge->gatt_table = NULL;
+	bridge->gatt_table_real = NULL;
+	bridge->gatt_bus_addr = 0;
 
 	return 0;
 }
@@ -888,7 +888,7 @@ int agp_generic_insert_memory(struct agp
 	}
 
 	for (i = 0, j = pg_start; i < mem->page_count; i++, j++) {
-		writel(bridge->driver->mask_memory(mem->memory[i], mem->type), bridge->gatt_table+j);
+		writel(bridge->driver->mask_memory(bridge, mem->memory[i], mem->type), bridge->gatt_table+j);
 		readl(bridge->gatt_table+j);	/* PCI Posting. */
 	}
 
@@ -996,7 +996,7 @@ void agp_enable(struct agp_bridge_data *
 {
 	if (!bridge)
 		return;
-	bridge->driver->agp_enable(mode);
+	bridge->driver->agp_enable(bridge, mode);
 }
 EXPORT_SYMBOL(agp_enable);
 
@@ -1024,11 +1024,12 @@ void global_cache_flush(void)
 }
 EXPORT_SYMBOL(global_cache_flush);
 
-unsigned long agp_generic_mask_memory(unsigned long addr, int type)
+unsigned long agp_generic_mask_memory(struct agp_bridge_data *bridge,
+	unsigned long addr, int type)
 {
 	/* memory type is ignored in the generic routine */
-	if (agp_bridge->driver->masks)
-		return addr | agp_bridge->driver->masks[0].mask;
+	if (bridge->driver->masks)
+		return addr | bridge->driver->masks[0].mask;
 	else
 		return addr;
 }
diff -puN drivers/char/agp/hp-agp.c~agpgart-add-bridge-parameter-to-driver-functions drivers/char/agp/hp-agp.c
--- 25/drivers/char/agp/hp-agp.c~agpgart-add-bridge-parameter-to-driver-functions	2005-01-11 19:56:25.774328328 -0800
+++ 25-akpm/drivers/char/agp/hp-agp.c	2005-01-11 19:56:25.793325440 -0800
@@ -289,7 +289,7 @@ hp_zx1_tlbflush (struct agp_memory *mem)
 }
 
 static int
-hp_zx1_create_gatt_table (void)
+hp_zx1_create_gatt_table (struct agp_bridge_data *bridge)
 {
 	struct _hp_private *hp = &hp_private;
 	int i;
@@ -317,7 +317,7 @@ hp_zx1_create_gatt_table (void)
 }
 
 static int
-hp_zx1_free_gatt_table (void)
+hp_zx1_free_gatt_table (struct agp_bridge_data *bridge)
 {
 	struct _hp_private *hp = &hp_private;
 
@@ -367,7 +367,9 @@ hp_zx1_insert_memory (struct agp_memory 
 		for (k = 0;
 		     k < hp->io_pages_per_kpage;
 		     k++, j++, paddr += hp->io_page_size) {
-			hp->gatt[j] = agp_bridge->driver->mask_memory(paddr, type);
+			hp->gatt[j] =
+				agp_bridge->driver->mask_memory(agp_bridge,
+					paddr, type);
 		}
 	}
 
@@ -396,13 +398,14 @@ hp_zx1_remove_memory (struct agp_memory 
 }
 
 static unsigned long
-hp_zx1_mask_memory (unsigned long addr, int type)
+hp_zx1_mask_memory (struct agp_bridge_data *bridge,
+	unsigned long addr, int type)
 {
 	return HP_ZX1_PDIR_VALID_BIT | addr;
 }
 
 static void
-hp_zx1_enable (u32 mode)
+hp_zx1_enable (struct agp_bridge_data *bridge, u32 mode)
 {
 	struct _hp_private *hp = &hp_private;
 	u32 command;
diff -puN drivers/char/agp/i460-agp.c~agpgart-add-bridge-parameter-to-driver-functions drivers/char/agp/i460-agp.c
--- 25/drivers/char/agp/i460-agp.c~agpgart-add-bridge-parameter-to-driver-functions	2005-01-11 19:56:25.775328176 -0800
+++ 25-akpm/drivers/char/agp/i460-agp.c	2005-01-11 19:56:25.794325288 -0800
@@ -233,7 +233,7 @@ static int i460_configure (void)
 	return 0;
 }
 
-static int i460_create_gatt_table (void)
+static int i460_create_gatt_table (struct agp_bridge_data *bridge)
 {
 	int page_order, num_entries, i;
 	void *temp;
@@ -258,7 +258,7 @@ static int i460_create_gatt_table (void)
 	return 0;
 }
 
-static int i460_free_gatt_table (void)
+static int i460_free_gatt_table (struct agp_bridge_data *bridge)
 {
 	int num_entries, i;
 	void *temp;
@@ -314,7 +314,8 @@ static int i460_insert_memory_small_io_p
 	for (i = 0, j = io_pg_start; i < mem->page_count; i++) {
 		paddr = mem->memory[i];
 		for (k = 0; k < I460_IOPAGES_PER_KPAGE; k++, j++, paddr += io_page_size)
-			WR_GATT(j, agp_bridge->driver->mask_memory(paddr, mem->type));
+			WR_GATT(j, agp_bridge->driver->mask_memory(agp_bridge,
+				paddr, mem->type));
 	}
 	WR_FLUSH_GATT(j - 1);
 	return 0;
@@ -427,7 +428,8 @@ static int i460_insert_memory_large_io_p
 			if (i460_alloc_large_page(lp) < 0)
 				return -ENOMEM;
 			pg = lp - i460.lp_desc;
-			WR_GATT(pg, agp_bridge->driver->mask_memory(lp->paddr, 0));
+			WR_GATT(pg, agp_bridge->driver->mask_memory(agp_bridge,
+				lp->paddr, 0));
 			WR_FLUSH_GATT(pg);
 		}
 
@@ -529,10 +531,11 @@ static void i460_destroy_page (void *pag
 
 #endif /* I460_LARGE_IO_PAGES */
 
-static unsigned long i460_mask_memory (unsigned long addr, int type)
+static unsigned long i460_mask_memory (struct agp_bridge_data *bridge,
+	unsigned long addr, int type)
 {
 	/* Make sure the returned address is a valid GATT entry */
-	return agp_bridge->driver->masks[0].mask
+	return bridge->driver->masks[0].mask
 		| (((addr & ~((1 << I460_IO_PAGE_SHIFT) - 1)) & 0xffffff000) >> 12);
 }
 
diff -puN drivers/char/agp/intel-agp.c~agpgart-add-bridge-parameter-to-driver-functions drivers/char/agp/intel-agp.c
--- 25/drivers/char/agp/intel-agp.c~agpgart-add-bridge-parameter-to-driver-functions	2005-01-11 19:56:25.777327872 -0800
+++ 25-akpm/drivers/char/agp/intel-agp.c	2005-01-11 19:56:25.796324984 -0800
@@ -150,7 +150,7 @@ static void intel_i810_tlbflush(struct a
 	return;
 }
 
-static void intel_i810_agp_enable(u32 mode)
+static void intel_i810_agp_enable(struct agp_bridge_data *bridge, u32 mode)
 {
 	return;
 }
@@ -229,8 +229,9 @@ static int intel_i810_insert_entries(str
 insert:
 	global_cache_flush();
 	for (i = 0, j = pg_start; i < mem->page_count; i++, j++) {
-		writel(agp_bridge->driver->mask_memory(mem->memory[i], mem->type),
-				intel_i810_private.registers+I810_PTE_BASE+(j*4));
+		writel(agp_bridge->driver->mask_memory(agp_bridge,
+			mem->memory[i], mem->type),
+			intel_i810_private.registers+I810_PTE_BASE+(j*4));
 		readl(intel_i810_private.registers+I810_PTE_BASE+(j*4));	/* PCI Posting. */
 	}
 	global_cache_flush();
@@ -337,10 +338,11 @@ static void intel_i810_free_by_type(stru
 	kfree(curr);
 }
 
-static unsigned long intel_i810_mask_memory(unsigned long addr, int type)
+static unsigned long intel_i810_mask_memory(struct agp_bridge_data *bridge,
+	unsigned long addr, int type)
 {
 	/* Type checking must be done elsewhere */
-	return addr | agp_bridge->driver->masks[type].mask;
+	return addr | bridge->driver->masks[type].mask;
 }
 
 static struct aper_size_info_fixed intel_i830_sizes[] =
@@ -445,7 +447,7 @@ static void intel_i830_init_gtt_entries(
 /* The intel i830 automatically initializes the agp aperture during POST.
  * Use the memory already set aside for in the GTT.
  */
-static int intel_i830_create_gatt_table(void)
+static int intel_i830_create_gatt_table(struct agp_bridge_data *bridge)
 {
 	int page_order;
 	struct aper_size_info_fixed *size;
@@ -480,7 +482,7 @@ static int intel_i830_create_gatt_table(
 /* Return the gatt table to a sane state. Use the top of stolen
  * memory for the GTT.
  */
-static int intel_i830_free_gatt_table(void)
+static int intel_i830_free_gatt_table(struct agp_bridge_data *bridge)
 {
 	return 0;
 }
@@ -580,8 +582,9 @@ static int intel_i830_insert_entries(str
 	global_cache_flush();	/* FIXME: Necessary ?*/
 
 	for (i = 0, j = pg_start; i < mem->page_count; i++, j++) {
-		writel(agp_bridge->driver->mask_memory(mem->memory[i], mem->type),
-				intel_i830_private.registers+I810_PTE_BASE+(j*4));
+		writel(agp_bridge->driver->mask_memory(agp_bridge,
+			mem->memory[i], mem->type),
+			intel_i830_private.registers+I810_PTE_BASE+(j*4));
 		readl(intel_i830_private.registers+I810_PTE_BASE+(j*4));	/* PCI Posting. */
 	}
 
@@ -689,7 +692,8 @@ static int intel_i915_insert_entries(str
 	global_cache_flush();
 
 	for (i = 0, j = pg_start; i < mem->page_count; i++, j++) {
-		writel(agp_bridge->driver->mask_memory(mem->memory[i], mem->type), intel_i830_private.gtt+j);
+		writel(agp_bridge->driver->mask_memory(agp_bridge,
+			mem->memory[i], mem->type), intel_i830_private.gtt+j);
 		readl(intel_i830_private.gtt+j);	/* PCI Posting. */
 	}
 
@@ -741,7 +745,7 @@ static int intel_i915_fetch_size(void)
 /* The intel i915 automatically initializes the agp aperture during POST.
  * Use the memory already set aside for in the GTT.
  */
-static int intel_i915_create_gatt_table(void)
+static int intel_i915_create_gatt_table(struct agp_bridge_data *bridge)
 {
 	int page_order;
 	struct aper_size_info_fixed *size;
diff -puN drivers/char/agp/intel-mch-agp.c~agpgart-add-bridge-parameter-to-driver-functions drivers/char/agp/intel-mch-agp.c
--- 25/drivers/char/agp/intel-mch-agp.c~agpgart-add-bridge-parameter-to-driver-functions	2005-01-11 19:56:25.778327720 -0800
+++ 25-akpm/drivers/char/agp/intel-mch-agp.c	2005-01-11 19:56:25.797324832 -0800
@@ -24,7 +24,7 @@ static void intel_i810_tlbflush(struct a
 	return;
 }
 
-static void intel_i810_agp_enable(u32 mode)
+static void intel_i810_agp_enable(struct agp_bridge_data *bridge, u32 mode)
 {
 	return;
 }
@@ -69,10 +69,11 @@ static void intel_i810_free_by_type(stru
 	kfree(curr);
 }
 
-static unsigned long intel_i810_mask_memory(unsigned long addr, int type)
+static unsigned long intel_i810_mask_memory(struct agp_bridge_data *bridge,
+	unsigned long addr, int type)
 {
 	/* Type checking must be done elsewhere */
-	return addr | agp_bridge->driver->masks[type].mask;
+	return addr | bridge->driver->masks[type].mask;
 }
 
 static struct aper_size_info_fixed intel_i830_sizes[] =
@@ -156,7 +157,7 @@ static void intel_i830_init_gtt_entries(
 /* The intel i830 automatically initializes the agp aperture during POST.
  * Use the memory already set aside for in the GTT.
  */
-static int intel_i830_create_gatt_table(void)
+static int intel_i830_create_gatt_table(struct agp_bridge_data *bridge)
 {
 	int page_order;
 	struct aper_size_info_fixed *size;
@@ -191,7 +192,7 @@ static int intel_i830_create_gatt_table(
 /* Return the gatt table to a sane state. Use the top of stolen
  * memory for the GTT.
  */
-static int intel_i830_free_gatt_table(void)
+static int intel_i830_free_gatt_table(struct agp_bridge_data *bridge)
 {
 	return 0;
 }
@@ -291,8 +292,9 @@ static int intel_i830_insert_entries(str
 	global_cache_flush();	/* FIXME: ?? */
 
 	for (i = 0, j = pg_start; i < mem->page_count; i++, j++) {
-		writel(agp_bridge->driver->mask_memory(mem->memory[i], mem->type),
-				intel_i830_private.registers+I810_PTE_BASE+(j*4));
+		writel(agp_bridge->driver->mask_memory(agp_bridge,
+			mem->memory[i], mem->type),
+			intel_i830_private.registers+I810_PTE_BASE+(j*4));
 		readl(intel_i830_private.registers+I810_PTE_BASE+(j*4));	/* PCI Posting. */
 	}
 
diff -puN drivers/char/agp/nvidia-agp.c~agpgart-add-bridge-parameter-to-driver-functions drivers/char/agp/nvidia-agp.c
--- 25/drivers/char/agp/nvidia-agp.c~agpgart-add-bridge-parameter-to-driver-functions	2005-01-11 19:56:25.779327568 -0800
+++ 25-akpm/drivers/char/agp/nvidia-agp.c	2005-01-11 19:56:25.798324680 -0800
@@ -215,7 +215,8 @@ static int nvidia_insert_memory(struct a
 		mem->is_flushed = TRUE;
 	}
 	for (i = 0, j = pg_start; i < mem->page_count; i++, j++) {
-		writel(agp_bridge->driver->mask_memory(mem->memory[i], mem->type),
+		writel(agp_bridge->driver->mask_memory(agp_bridge,
+			mem->memory[i], mem->type),
 			agp_bridge->gatt_table+nvidia_private.pg_offset+j);
 		readl(agp_bridge->gatt_table+nvidia_private.pg_offset+j);	/* PCI Posting. */
 	}
diff -puN drivers/char/agp/sis-agp.c~agpgart-add-bridge-parameter-to-driver-functions drivers/char/agp/sis-agp.c
--- 25/drivers/char/agp/sis-agp.c~agpgart-add-bridge-parameter-to-driver-functions	2005-01-11 19:56:25.780327416 -0800
+++ 25-akpm/drivers/char/agp/sis-agp.c	2005-01-11 19:56:25.798324680 -0800
@@ -70,18 +70,18 @@ static void sis_cleanup(void)
 			      (previous_size->size_value & ~(0x03)));
 }
 
-static void sis_delayed_enable(u32 mode)
+static void sis_delayed_enable(struct agp_bridge_data *bridge, u32 mode)
 {
 	struct pci_dev *device = NULL;
 	u32 command;
 	int rate;
 
 	printk(KERN_INFO PFX "Found an AGP %d.%d compliant device at %s.\n",
-		agp_bridge->major_version,
-		agp_bridge->minor_version,
-		agp_bridge->dev->slot_name);
+		bridge->major_version,
+		bridge->minor_version,
+		bridge->dev->slot_name);
 
-	pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx + PCI_AGP_STATUS, &command);
+	pci_read_config_dword(bridge->dev, bridge->capndx + PCI_AGP_STATUS, &command);
 	command = agp_collect_device_status(mode, command);
 	command |= AGPSTAT_AGP_ENABLE;
 	rate = (command & 0x7) << 2;
@@ -101,7 +101,7 @@ static void sis_delayed_enable(u32 mode)
 		 * command register triggers a 5ms screwup during which the master
 		 * cannot be configured		 
 		 */
-		if (device->device == agp_bridge->dev->device) {
+		if (device->device == bridge->dev->device) {
 			printk(KERN_INFO PFX "SiS delay workaround: giving bridge time to recover.\n");
 			msleep(10);
 		}
diff -puN drivers/char/agp/sworks-agp.c~agpgart-add-bridge-parameter-to-driver-functions drivers/char/agp/sworks-agp.c
--- 25/drivers/char/agp/sworks-agp.c~agpgart-add-bridge-parameter-to-driver-functions	2005-01-11 19:56:25.782327112 -0800
+++ 25-akpm/drivers/char/agp/sworks-agp.c	2005-01-11 19:56:25.799324528 -0800
@@ -141,7 +141,7 @@ static int serverworks_create_gatt_pages
 #define GET_GATT_OFF(addr) ((addr & 0x003ff000) >> 12)
 #endif
 
-static int serverworks_create_gatt_table(void)
+static int serverworks_create_gatt_table(struct agp_bridge_data *bridge)
 {
 	struct aper_size_info_lvl2 *value;
 	struct serverworks_page_map page_dir;
@@ -192,7 +192,7 @@ static int serverworks_create_gatt_table
 	return 0;
 }
 
-static int serverworks_free_gatt_table(void)
+static int serverworks_free_gatt_table(struct agp_bridge_data *bridge)
 {
 	struct serverworks_page_map page_dir;
    
@@ -341,7 +341,7 @@ static int serverworks_insert_memory(str
 	for (i = 0, j = pg_start; i < mem->page_count; i++, j++) {
 		addr = (j * PAGE_SIZE) + agp_bridge->gart_bus_addr;
 		cur_gatt = SVRWRKS_GET_GATT(addr);
-		writel(agp_bridge->driver->mask_memory(mem->memory[i], mem->type), cur_gatt+GET_GATT_OFF(addr));
+		writel(agp_bridge->driver->mask_memory(agp_bridge, mem->memory[i], mem->type), cur_gatt+GET_GATT_OFF(addr));
 	}
 	serverworks_tlbflush(mem);
 	return 0;
@@ -387,12 +387,12 @@ static struct aper_size_info_lvl2 server
 	{32, 8192, 0xfe000000}
 };
 
-static void serverworks_agp_enable(u32 mode)
+static void serverworks_agp_enable(struct agp_bridge_data *bridge, u32 mode)
 {
 	u32 command;
 
 	pci_read_config_dword(serverworks_private.svrwrks_dev,
-			      agp_bridge->capndx + PCI_AGP_STATUS,
+			      bridge->capndx + PCI_AGP_STATUS,
 			      &command);
 
 	command = agp_collect_device_status(mode, command);
@@ -403,7 +403,7 @@ static void serverworks_agp_enable(u32 m
 	command |= 0x100;
 
 	pci_write_config_dword(serverworks_private.svrwrks_dev,
-			       agp_bridge->capndx + PCI_AGP_COMMAND,
+			       bridge->capndx + PCI_AGP_COMMAND,
 			       command);
 
 	agp_device_command(command, 0);
diff -puN drivers/char/agp/uninorth-agp.c~agpgart-add-bridge-parameter-to-driver-functions drivers/char/agp/uninorth-agp.c
--- 25/drivers/char/agp/uninorth-agp.c~agpgart-add-bridge-parameter-to-driver-functions	2005-01-11 19:56:25.783326960 -0800
+++ 25-akpm/drivers/char/agp/uninorth-agp.c	2005-01-11 19:56:25.800324376 -0800
@@ -124,13 +124,13 @@ static int uninorth_insert_memory(struct
 	return 0;
 }
 
-static void uninorth_agp_enable(u32 mode)
+static void uninorth_agp_enable(struct agp_bridge_data *bridge, u32 mode)
 {
 	u32 command, scratch;
 	int timeout;
 
-	pci_read_config_dword(agp_bridge->dev,
-			      agp_bridge->capndx + PCI_AGP_STATUS,
+	pci_read_config_dword(bridge->dev,
+			      bridge->capndx + PCI_AGP_STATUS,
 			      &command);
 
 	command = agp_collect_device_status(mode, command);
@@ -140,11 +140,11 @@ static void uninorth_agp_enable(u32 mode
 
 	timeout = 0;
 	do {
-		pci_write_config_dword(agp_bridge->dev,
-				       agp_bridge->capndx + PCI_AGP_COMMAND,
+		pci_write_config_dword(bridge->dev,
+				       bridge->capndx + PCI_AGP_COMMAND,
 				       command);
-		pci_read_config_dword(agp_bridge->dev,
-				       agp_bridge->capndx + PCI_AGP_COMMAND,
+		pci_read_config_dword(bridge->dev,
+				      bridge->capndx + PCI_AGP_COMMAND,
 				       &scratch);
 	} while ((scratch & 0x100) == 0 && ++timeout < 1000);
 	if ((scratch & 0x100) == 0)
@@ -155,7 +155,7 @@ static void uninorth_agp_enable(u32 mode
 	uninorth_tlbflush(NULL);
 }
 
-static int uninorth_create_gatt_table(void)
+static int uninorth_create_gatt_table(struct agp_bridge_data *bridge)
 {
 	char *table;
 	char *table_end;
@@ -212,7 +212,7 @@ static int uninorth_create_gatt_table(vo
 	return 0;
 }
 
-static int uninorth_free_gatt_table(void)
+static int uninorth_free_gatt_table(struct agp_bridge_data *bridge)
 {
 	int page_order;
 	char *table, *table_end;
_