GIT 79850dbedb0526bf682850d82b158e574f4ed040 git+ssh://master.kernel.org/pub/scm/linux/kernel/git/davej/agpgart.git commit 79850dbedb0526bf682850d82b158e574f4ed040 Author: Dave Jones Date: Thu Jan 5 17:16:34 2006 -0800 [AGPGART] Don't initialise AGP on PCI[E] systems Signed-off-by: Dave Jones --- diff --git a/drivers/char/agp/agp.h b/drivers/char/agp/agp.h index b4af87c..e905248 100644 --- a/drivers/char/agp/agp.h +++ b/drivers/char/agp/agp.h @@ -268,6 +268,7 @@ void get_agp_version(struct agp_bridge_d 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); +struct pci_dev *agp_find_graphic_card(void); /* generic routines for agp>=3 */ int agp3_generic_fetch_size(void); diff --git a/drivers/char/agp/backend.c b/drivers/char/agp/backend.c index 80ee17a..ae2f687 100644 --- a/drivers/char/agp/backend.c +++ b/drivers/char/agp/backend.c @@ -320,6 +320,12 @@ EXPORT_SYMBOL(agp_try_unsupported_boot); static int __init agp_init(void) { + /* If we don't have an AGP graphics card, stop right here. */ + if (agp_find_graphic_card() == 0) { + agp_off = 1; + return -ENODEV; + } + if (!agp_off) printk(KERN_INFO "Linux agpgart interface v%d.%d (c) Dave Jones\n", AGPGART_VERSION_MAJOR, AGPGART_VERSION_MINOR); diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c index 5567ce8..1c69379 100644 --- a/drivers/char/agp/generic.c +++ b/drivers/char/agp/generic.c @@ -605,6 +605,22 @@ done: } } +struct pci_dev *agp_find_graphic_card(void) +{ + struct pci_dev *device = NULL; + u8 cap_ptr = 0; + + for (;;) { + device = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, device); + if (!device) + break; + + cap_ptr = pci_find_capability(device, PCI_CAP_ID_AGP); + if (cap_ptr) + break; + } + return device; +} /** * agp_collect_device_status - determine correct agp_cmd from various agp_stat's @@ -621,16 +637,8 @@ u32 agp_collect_device_status(struct agp u32 vga_agpstat; u8 cap_ptr; - for (;;) { - device = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, device); - if (!device) { - printk(KERN_INFO PFX "Couldn't find an AGP VGA controller.\n"); - return 0; - } - cap_ptr = pci_find_capability(device, PCI_CAP_ID_AGP); - if (cap_ptr) - break; - } + device = agp_find_graphic_card(); + cap_ptr = pci_find_capability(device, PCI_CAP_ID_AGP); /* * Ok, here we have a AGP device. Disable impossible