summaryrefslogtreecommitdiff
path: root/linux-core
diff options
context:
space:
mode:
authorIan Romanick <idr@us.ibm.com>2005-05-27 23:42:11 +0000
committerIan Romanick <idr@us.ibm.com>2005-05-27 23:42:11 +0000
commit4a84416c458027462ee6112a5fa442415597f6c2 (patch)
treecd39aea11afea9b04442e5a818b220e40b3c70b9 /linux-core
parentc9abd2fec509c271339d1ca3addd95df884df80a (diff)
Modify drm_driver::device_is_agp to return a tri-state value to indicate
that a device absolutely is, absolutely is not, or may or may not be AGP. Modify the i915 DRM to use this to force all i9x5 devices to be "AGP" (even the PCI-e devices). Reported by: Lukas Hejtmanek
Diffstat (limited to 'linux-core')
-rw-r--r--linux-core/drmP.h15
-rw-r--r--linux-core/i915_drv.c1
-rw-r--r--linux-core/mga_drv.c5
3 files changed, 13 insertions, 8 deletions
diff --git a/linux-core/drmP.h b/linux-core/drmP.h
index 167bef0f..24d8a23b 100644
--- a/linux-core/drmP.h
+++ b/linux-core/drmP.h
@@ -548,8 +548,10 @@ struct drm_driver {
*
* \param dev DRM device handle
*
- * \returns true if the card really is attached to AGP, false
- * otherwise.
+ * \returns
+ * One of three values is returned depending on whether or not the
+ * card is absolutely \b not AGP (return of 0), absolutely \b is AGP
+ * (return of 1), or may or may not be AGP (return of 2).
*/
int (*device_is_agp) (struct drm_device * dev);
@@ -1028,9 +1030,12 @@ static __inline__ struct drm_map *drm_core_findmap(struct drm_device *dev,
static __inline__ int drm_device_is_agp(drm_device_t *dev)
{
- if ( (dev->driver->device_is_agp != NULL)
- && ! (*dev->driver->device_is_agp)( dev ) ) {
- return 0;
+ if ( dev->driver->device_is_agp != NULL ) {
+ int err = (*dev->driver->device_is_agp)( dev );
+
+ if (err != 2) {
+ return err;
+ }
}
return pci_find_capability(dev->pdev, PCI_CAP_ID_AGP);
diff --git a/linux-core/i915_drv.c b/linux-core/i915_drv.c
index 7256cb3c..d09b9d43 100644
--- a/linux-core/i915_drv.c
+++ b/linux-core/i915_drv.c
@@ -60,6 +60,7 @@ static struct drm_driver driver = {
DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED,
.pretakedown = i915_driver_pretakedown,
.prerelease = i915_driver_prerelease,
+ .device_is_agp = i915_driver_device_is_agp,
.irq_preinstall = i915_driver_irq_preinstall,
.irq_postinstall = i915_driver_irq_postinstall,
.irq_uninstall = i915_driver_irq_uninstall,
diff --git a/linux-core/mga_drv.c b/linux-core/mga_drv.c
index c04de5a3..c8bb042d 100644
--- a/linux-core/mga_drv.c
+++ b/linux-core/mga_drv.c
@@ -148,8 +148,7 @@ MODULE_LICENSE("GPL and additional rights");
* \param dev The device to be tested.
*
* \returns
- * If the device is a PCI G450, zero is returned. Otherwise non-zero is
- * returned.
+ * If the device is a PCI G450, zero is returned. Otherwise 2 is returned.
*/
int mga_driver_device_is_agp(drm_device_t * dev)
{
@@ -176,5 +175,5 @@ int mga_driver_device_is_agp(drm_device_t * dev)
return 0;
}
- return 1;
+ return 2;
}