summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/char/agp/backend.c15
-rw-r--r--drivers/char/agp/intel-agp.c24
-rw-r--r--drivers/char/agp/intel-mch-agp.c5
-rw-r--r--include/linux/agp_backend.h18
-rw-r--r--include/linux/pci_ids.h2
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