static int __devinit agp_sis_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct agp_bridge_data *bridge; u8 cap_ptr; cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP); if (!cap_ptr) return -ENODEV; dev_info(&pdev->dev, "SiS chipset [%04x/%04x]\n", pdev->vendor, pdev->device); bridge = agp_alloc_bridge(); if (!bridge) return -ENOMEM; bridge->driver = &sis_driver; bridge->dev = pdev; bridge->capndx = cap_ptr; get_agp_version(bridge); /* Fill in the mode register */ pci_read_config_dword(pdev, bridge->capndx+PCI_AGP_STATUS, &bridge->mode); sis_get_driver(bridge); pci_set_drvdata(pdev, bridge); return agp_add_bridge(bridge); }
static int __devinit agp_via_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct agp_device_ids *devs = via_agp_device_ids; struct agp_bridge_data *bridge; int j = 0; u8 cap_ptr; cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP); if (!cap_ptr) return -ENODEV; j = ent - agp_via_pci_table; printk (KERN_INFO PFX "Detected VIA %s chipset\n", devs[j].chipset_name); bridge = agp_alloc_bridge(); if (!bridge) return -ENOMEM; bridge->dev = pdev; bridge->capndx = cap_ptr; bridge->driver = &via_driver; /* * Garg, there are KT400s with KT266 IDs. */ if (pdev->device == PCI_DEVICE_ID_VIA_8367_0) { /* Is there a KT400 subsystem ? */ if (pdev->subsystem_device == PCI_DEVICE_ID_VIA_8377_0) { printk(KERN_INFO PFX "Found KT400 in disguise as a KT266.\n"); check_via_agp3(bridge); } } /* If this is an AGP3 bridge, check which mode its in and adjust. */ get_agp_version(bridge); if (bridge->major_version >= 3) check_via_agp3(bridge); /* Fill in the mode register */ pci_read_config_dword(pdev, bridge->capndx+PCI_AGP_STATUS, &bridge->mode); pci_set_drvdata(pdev, bridge); return agp_add_bridge(bridge); }
void agp_generic_enable(u32_t requested_mode) { u32_t bridge_agpstat, temp; get_agp_version(bridge); dbgprintf("Found an AGP %d.%d compliant device.\n", bridge->major_version, bridge->minor_version); bridge_agpstat = pciReadLong(bridge->PciTag, bridge->capndx + PCI_AGP_STATUS); bridge_agpstat = agp_collect_device_status(bridge, requested_mode, bridge_agpstat); if (bridge_agpstat == 0) /* Something bad happened. FIXME: Return error code? */ return; bridge_agpstat |= AGPSTAT_AGP_ENABLE; /* Do AGP version specific frobbing. */ if (bridge->major_version >= 3) { if (bridge->mode & AGPSTAT_MODE_3_0) { /* If we have 3.5, we can do the isoch stuff. */ if (bridge->minor_version >= 5) agp_3_5_enable(bridge); agp_device_command(bridge_agpstat, TRUE); return; } else { /* Disable calibration cycle in RX91<1> when not in AGP3.0 mode of operation.*/ bridge_agpstat &= ~(7<<10) ; temp = pciReadLong(bridge->PciTag, bridge->capndx+AGPCTRL); temp |= (1<<9); pciWriteLong(bridge->PciTag, bridge->capndx+AGPCTRL, temp); dbgprintf("Device is in legacy mode," " falling back to 2.x\n"); } } /* AGP v<3 */ agp_device_command(bridge_agpstat, FALSE); }
static int __devinit agp_sis_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct agp_device_ids *devs = sis_agp_device_ids; struct agp_bridge_data *bridge; u8 cap_ptr; int j; cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP); if (!cap_ptr) return -ENODEV; /* probe for known chipsets */ for (j = 0; devs[j].chipset_name; j++) { if (pdev->device == devs[j].device_id) { printk(KERN_INFO PFX "Detected SiS %s chipset\n", devs[j].chipset_name); goto found; } } printk(KERN_ERR PFX "Unsupported SiS chipset (device id: %04x)\n", pdev->device); return -ENODEV; found: bridge = agp_alloc_bridge(); if (!bridge) return -ENOMEM; bridge->driver = &sis_driver; bridge->dev = pdev; bridge->capndx = cap_ptr; get_agp_version(bridge); /* Fill in the mode register */ pci_read_config_dword(pdev, bridge->capndx+PCI_AGP_STATUS, &bridge->mode); sis_get_driver(bridge); pci_set_drvdata(pdev, bridge); return agp_add_bridge(bridge); }