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_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); }