diff options
| -rw-r--r-- | drivers/char/agp/backend.c | 15 | ||||
| -rw-r--r-- | drivers/char/agp/intel-agp.c | 24 | ||||
| -rw-r--r-- | drivers/char/agp/intel-mch-agp.c | 5 | ||||
| -rw-r--r-- | include/linux/agp_backend.h | 18 | ||||
| -rw-r--r-- | include/linux/pci_ids.h | 2 |
5 files changed, 25 insertions, 39 deletions
diff --git a/drivers/char/agp/backend.c b/drivers/char/agp/backend.c index 33e1c707d7c5..9eeaeea49a6c 100644 --- a/drivers/char/agp/backend.c +++ b/drivers/char/agp/backend.c @@ -214,17 +214,6 @@ static void agp_backend_cleanup(struct agp_bridge_data *bridge) phys_to_virt(bridge->scratch_page_real)); } -static const drm_agp_t drm_agp = { - &agp_free_memory, - &agp_allocate_memory, - &agp_bind_memory, - &agp_unbind_memory, - &agp_enable, - &agp_backend_acquire, - &agp_backend_release, - &agp_copy_info -}; - /* XXX Kludge alert: agpgart isn't ready for multiple bridges yet */ struct agp_bridge_data *agp_alloc_bridge(void) { @@ -277,9 +266,6 @@ int agp_add_bridge(struct agp_bridge_data *bridge) goto frontend_err; } - /* FIXME: What to do with this? */ - inter_module_register("drm_agp", THIS_MODULE, &drm_agp); - agp_count++; return 0; @@ -298,7 +284,6 @@ void agp_remove_bridge(struct agp_bridge_data *bridge) bridge->type = NOT_SUPPORTED; agp_frontend_cleanup(); agp_backend_cleanup(bridge); - inter_module_unregister("drm_agp"); agp_count--; module_put(bridge->driver->owner); } diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c index d9c7e60af166..3721259ca339 100644 --- a/drivers/char/agp/intel-agp.c +++ b/drivers/char/agp/intel-agp.c @@ -6,7 +6,7 @@ * Intel(R) 855GM/852GM and 865G support added by David Dawes * <dawes@tungstengraphics.com>. * - * Intel(R) 915G support added by Alan Hourihane + * Intel(R) 915G/915GM support added by Alan Hourihane * <alanh@tungstengraphics.com>. */ @@ -415,14 +415,16 @@ static void intel_i830_init_gtt_entries(void) break; case I915_GMCH_GMS_STOLEN_48M: /* Check it's really I915G */ - if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915G_HB) + if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915G_HB || + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915G_HB) gtt_entries = MB(48) - KB(size); else gtt_entries = 0; break; case I915_GMCH_GMS_STOLEN_64M: /* Check it's really I915G */ - if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915G_HB) + if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915G_HB || + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915G_HB) gtt_entries = MB(64) - KB(size); else gtt_entries = 0; @@ -1648,6 +1650,14 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev, } name = "915G"; break; + case PCI_DEVICE_ID_INTEL_82915GM_HB: + if (find_i830(PCI_DEVICE_ID_INTEL_82915GM_IG)) { + bridge->driver = &intel_915_driver; + } else { + bridge->driver = &intel_845_driver; + } + name = "915GM"; + break; case PCI_DEVICE_ID_INTEL_7505_0: bridge->driver = &intel_7505_driver; name = "E7505"; @@ -1720,8 +1730,13 @@ static void __devexit agp_intel_remove(struct pci_dev *pdev) { struct agp_bridge_data *bridge = pci_get_drvdata(pdev); - pci_dev_put(pdev); agp_remove_bridge(bridge); + + if (intel_i810_private.i810_dev) + pci_dev_put(intel_i810_private.i810_dev); + if (intel_i830_private.i830_dev) + pci_dev_put(intel_i830_private.i830_dev); + agp_put_bridge(bridge); } @@ -1775,6 +1790,7 @@ static struct pci_device_id agp_intel_pci_table[] = { ID(PCI_DEVICE_ID_INTEL_7505_0), ID(PCI_DEVICE_ID_INTEL_7205_0), ID(PCI_DEVICE_ID_INTEL_82915G_HB), + ID(PCI_DEVICE_ID_INTEL_82915GM_HB), { } }; diff --git a/drivers/char/agp/intel-mch-agp.c b/drivers/char/agp/intel-mch-agp.c index 2611543bf587..5902726d8884 100644 --- a/drivers/char/agp/intel-mch-agp.c +++ b/drivers/char/agp/intel-mch-agp.c @@ -569,15 +569,16 @@ static void __devexit agp_intelmch_remove(struct pci_dev *pdev) { struct agp_bridge_data *bridge = pci_get_drvdata(pdev); - pci_dev_put(pdev); agp_remove_bridge(bridge); + if (intel_i830_private.i830_dev) + pci_dev_put(intel_i830_private.i830_dev); agp_put_bridge(bridge); } static int agp_intelmch_resume(struct pci_dev *pdev) { struct agp_bridge_data *bridge = pci_get_drvdata(pdev); - + pci_restore_state(pdev); if (bridge->driver == &intel_845_driver) diff --git a/include/linux/agp_backend.h b/include/linux/agp_backend.h index 905f5332177a..7936986c289e 100644 --- a/include/linux/agp_backend.h +++ b/include/linux/agp_backend.h @@ -96,23 +96,5 @@ extern void agp_enable(u32); extern int agp_backend_acquire(void); extern void agp_backend_release(void); -/* - * Interface between drm and agp code. When agp initializes, it makes - * the below structure available via inter_module_register(), drm might - * use it. Keith Owens <kaos@ocs.com.au> 28 Oct 2000. - */ -typedef struct { - void (*free_memory)(struct agp_memory *); - struct agp_memory * (*allocate_memory)(size_t, u32); - int (*bind_memory)(struct agp_memory *, off_t); - int (*unbind_memory)(struct agp_memory *); - void (*enable)(u32); - int (*acquire)(void); - void (*release)(void); - int (*copy_info)(struct agp_kern_info *); -} drm_agp_t; - -extern const drm_agp_t *drm_agp_p; - #endif /* __KERNEL__ */ #endif /* _AGP_BACKEND_H */ diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 710135a0567a..20afe3145d66 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h @@ -2226,6 +2226,8 @@ #define PCI_DEVICE_ID_INTEL_82875_IG 0x257b #define PCI_DEVICE_ID_INTEL_82915G_HB 0x2580 #define PCI_DEVICE_ID_INTEL_82915G_IG 0x2582 +#define PCI_DEVICE_ID_INTEL_82915GM_HB 0x2590 +#define PCI_DEVICE_ID_INTEL_82915GM_IG 0x2592 #define PCI_DEVICE_ID_INTEL_ICH6_0 0x2640 #define PCI_DEVICE_ID_INTEL_ICH6_1 0x2641 #define PCI_DEVICE_ID_INTEL_ICH6_2 0x2642 |
