From: Michael Werner This patch adds fb support for new multiple agp bridge agpgart api. Signed-off-by: Mike Werner Signed-off-by: Andrew Morton --- 25-akpm/drivers/video/aty/radeon_pm.c | 3 ++- 25-akpm/drivers/video/i810/i810_main.c | 17 +++++++++-------- 25-akpm/drivers/video/intelfb/intelfbdrv.c | 23 ++++++++++++----------- 3 files changed, 23 insertions(+), 20 deletions(-) diff -puN drivers/video/aty/radeon_pm.c~fb-add-support-for-new-multiple-agp-bridge-agpgart-api drivers/video/aty/radeon_pm.c --- 25/drivers/video/aty/radeon_pm.c~fb-add-support-for-new-multiple-agp-bridge-agpgart-api Tue Jan 4 16:28:39 2005 +++ 25-akpm/drivers/video/aty/radeon_pm.c Tue Jan 4 16:28:39 2005 @@ -870,7 +870,8 @@ int radeonfb_pci_suspend(struct pci_dev * not for a module. */ #ifdef CONFIG_AGP - agp_enable(0); + /* The bridge can be determined from agp_backend_acquire */ + agp_enable(agp_bridge, 0); #endif fb_set_suspend(info, 1); diff -puN drivers/video/i810/i810_main.c~fb-add-support-for-new-multiple-agp-bridge-agpgart-api drivers/video/i810/i810_main.c --- 25/drivers/video/i810/i810_main.c~fb-add-support-for-new-multiple-agp-bridge-agpgart-api Tue Jan 4 16:28:39 2005 +++ 25-akpm/drivers/video/i810/i810_main.c Tue Jan 4 16:28:39 2005 @@ -1591,40 +1591,41 @@ static int __devinit i810_alloc_agp_mem( { struct i810fb_par *par = (struct i810fb_par *) info->par; int size; + struct agp_bridge_data *bridge; i810_fix_offsets(par); size = par->fb.size + par->iring.size; - if (agp_backend_acquire()) { + if (!(bridge = agp_backend_acquire(par->dev))) { printk("i810fb_alloc_fbmem: cannot acquire agpgart\n"); return -ENODEV; } if (!(par->i810_gtt.i810_fb_memory = - agp_allocate_memory(size >> 12, AGP_NORMAL_MEMORY))) { + agp_allocate_memory(bridge, size >> 12, AGP_NORMAL_MEMORY))) { printk("i810fb_alloc_fbmem: can't allocate framebuffer " "memory\n"); - agp_backend_release(); + agp_backend_release(bridge); return -ENOMEM; } if (agp_bind_memory(par->i810_gtt.i810_fb_memory, par->fb.offset)) { printk("i810fb_alloc_fbmem: can't bind framebuffer memory\n"); - agp_backend_release(); + agp_backend_release(bridge); return -EBUSY; } if (!(par->i810_gtt.i810_cursor_memory = - agp_allocate_memory(par->cursor_heap.size >> 12, + agp_allocate_memory(bridge, par->cursor_heap.size >> 12, AGP_PHYSICAL_MEMORY))) { printk("i810fb_alloc_cursormem: can't allocate" "cursor memory\n"); - agp_backend_release(); + agp_backend_release(bridge); return -ENOMEM; } if (agp_bind_memory(par->i810_gtt.i810_cursor_memory, par->cursor_heap.offset)) { printk("i810fb_alloc_cursormem: cannot bind cursor memory\n"); - agp_backend_release(); + agp_backend_release(bridge); return -EBUSY; } @@ -1632,7 +1633,7 @@ static int __devinit i810_alloc_agp_mem( i810_fix_pointers(par); - agp_backend_release(); + agp_backend_release(bridge); return 0; } diff -puN drivers/video/intelfb/intelfbdrv.c~fb-add-support-for-new-multiple-agp-bridge-agpgart-api drivers/video/intelfb/intelfbdrv.c --- 25/drivers/video/intelfb/intelfbdrv.c~fb-add-support-for-new-multiple-agp-bridge-agpgart-api Tue Jan 4 16:28:39 2005 +++ 25-akpm/drivers/video/intelfb/intelfbdrv.c Tue Jan 4 16:28:39 2005 @@ -470,6 +470,7 @@ intelfb_pci_register(struct pci_dev *pde struct agp_kern_info gtt_info; int agp_memtype; const char *s; + struct agp_bridge_data *bridge; DBG_MSG("intelfb_pci_register\n"); @@ -605,16 +606,16 @@ intelfb_pci_register(struct pci_dev *pde } /* Use agpgart to manage the GATT */ - if (agp_backend_acquire()) { + if (!(bridge = agp_backend_acquire(pdev))) { ERR_MSG("cannot acquire agp\n"); cleanup(dinfo); return -ENODEV; } /* get the current gatt info */ - if (agp_copy_info(>t_info)) { + if (agp_copy_info(bridge, >t_info)) { ERR_MSG("cannot get agp info\n"); - agp_backend_release(); + agp_backend_release(bridge); cleanup(dinfo); return -ENODEV; } @@ -637,17 +638,17 @@ intelfb_pci_register(struct pci_dev *pde /* Allocate memories (which aren't stolen) */ if (dinfo->accel) { if (!(dinfo->gtt_ring_mem = - agp_allocate_memory(dinfo->ring.size >> 12, + agp_allocate_memory(bridge, dinfo->ring.size >> 12, AGP_NORMAL_MEMORY))) { ERR_MSG("cannot allocate ring buffer memory\n"); - agp_backend_release(); + agp_backend_release(bridge); cleanup(dinfo); return -ENOMEM; } if (agp_bind_memory(dinfo->gtt_ring_mem, dinfo->ring.offset)) { ERR_MSG("cannot bind ring buffer memory\n"); - agp_backend_release(); + agp_backend_release(bridge); cleanup(dinfo); return -EBUSY; } @@ -661,17 +662,17 @@ intelfb_pci_register(struct pci_dev *pde agp_memtype = dinfo->mobile ? AGP_PHYSICAL_MEMORY : AGP_NORMAL_MEMORY; if (!(dinfo->gtt_cursor_mem = - agp_allocate_memory(dinfo->cursor.size >> 12, + agp_allocate_memory(bridge, dinfo->cursor.size >> 12, agp_memtype))) { ERR_MSG("cannot allocate cursor memory\n"); - agp_backend_release(); + agp_backend_release(bridge); cleanup(dinfo); return -ENOMEM; } if (agp_bind_memory(dinfo->gtt_cursor_mem, dinfo->cursor.offset)) { ERR_MSG("cannot bind cursor memory\n"); - agp_backend_release(); + agp_backend_release(bridge); cleanup(dinfo); return -EBUSY; } @@ -686,7 +687,7 @@ intelfb_pci_register(struct pci_dev *pde } if (dinfo->fbmem_gart) { if (!(dinfo->gtt_fb_mem = - agp_allocate_memory(dinfo->fb.size >> 12, + agp_allocate_memory(bridge, dinfo->fb.size >> 12, AGP_NORMAL_MEMORY))) { WRN_MSG("cannot allocate framebuffer memory - use " "the stolen one\n"); @@ -709,7 +710,7 @@ intelfb_pci_register(struct pci_dev *pde dinfo->fb_start = dinfo->fb.offset << 12; /* release agpgart */ - agp_backend_release(); + agp_backend_release(bridge); if (mtrr) set_mtrr(dinfo); _