void acpi_pr_errata (void) { struct pci_dev *dev = NULL; while ((dev = pci_find_subsys(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, dev))) { switch (dev->device) { case PCI_DEVICE_ID_INTEL_82801BA_8: /* PIIX4U4 */ case PCI_DEVICE_ID_INTEL_82801BA_9: /* PIIX4U3 */ case PCI_DEVICE_ID_INTEL_82451NX: /* PIIX4NX */ case PCI_DEVICE_ID_INTEL_82372FB_1: /* PIIX4U2 */ case PCI_DEVICE_ID_INTEL_82801AA_1: /* PIIX4U */ case PCI_DEVICE_ID_INTEL_82443MX_1: /* PIIX4E2 */ case PCI_DEVICE_ID_INTEL_82801AB_1: /* PIIX4E */ case PCI_DEVICE_ID_INTEL_82371AB: /* PIIX4 */ acpi_piix4_bmisx = pci_resource_start(dev, 4); return; } } return; }
static int __init search_cards(struct capi_driver * driver, int pci_id, int nr) { struct pci_dev * dev = NULL; int retval = 0; while ((dev = pci_find_subsys( PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_21285, PCI_VENDOR_ID_AVM, pci_id, dev))) { struct capicardparams param; if (pci_enable_device(dev) < 0) { printk(KERN_ERR "%s: failed to enable AVM-C%d\n", driver->name, nr); continue; } pci_set_master(dev); param.port = pci_resource_start(dev, 1); param.irq = dev->irq; param.membase = pci_resource_start(dev, 0); printk(KERN_INFO "%s: PCI BIOS reports AVM-C%d at i/o %#x, irq %d, mem %#x\n", driver->name, nr, param.port, param.irq, param.membase); retval = c4_add_card(driver, ¶m, nr); if (retval != 0) { printk(KERN_ERR "%s: no AVM-C%d at i/o %#x, irq %d detected, mem %#x\n", driver->name, nr, param.port, param.irq, param.membase); continue; } ncards++; } return retval; }
static int pcicommand(pcidata* x) { struct pci_dev* sh=(struct pci_dev*)x->starthandle; switch(x->command) { case CMD_FIND_SLOT: x->handle=(unsigned long)pci_find_slot(x->busnum, PCI_DEVFN(x->devnum,x->funnum)); return 0; case CMD_FIND_SUBSYS: x->handle=(unsigned long)pci_find_subsys(x->vendor, x->device, x->subsys_vendor, x->subsys_device, sh); return 0; case CMD_FIND_DEVICE: x->handle=(unsigned long)pci_find_device(x->vendor, x->device, sh); return 0; case CMD_FIND_CLASS: x->handle=(unsigned long)pci_find_class(x->class, sh); return 0; case CMD_FIND_CAPAB: x->cappos=pci_find_capability(sh, x->capability); return 0; case CMD_SET_POWER: x->oldpowerstate=pci_set_power_state(sh, x->powerstate); return 0; case CMD_ENABLE: x->result=pci_enable_device(sh); return 0; case CMD_DISABLE: pci_disable_device(sh); return 0; case CMD_RELEASE: release_device(sh,0); return 0; case CMD_REQUEST: { char* name; if (x->res_name) { int len; char c; int i; len=0; while (!COPY_FROM_USER(&c, x->res_name+len,1)) { if (!c) break; len++; } name=kmalloc(len+1,GFP_KERNEL); for (i=0;i<len;i++) { name[i]=0; COPY_FROM_USER(name+i, x->res_name+i,1); } name[i]=0; } else { name=kmalloc(22,GFP_KERNEL); strcpy(name,"amithlon pci system"); } x->result=pci_request_regions(sh,name); if (!x->result) { /* Successful */ pci_list* n=kmalloc(sizeof(pci_list),GFP_KERNEL); n->dev=sh; if (x->releasecode) { int size=find_code_size(x->releasecode); n->releasecode=kmalloc(size,GFP_KERNEL); COPY_FROM_USER(n->releasecode,x->releasecode,size); } else n->releasecode=NULL; n->name=name; n->next=devlist; n->prev_p=&devlist; if (devlist) devlist->prev_p=&(n->next); devlist=n; } else { kfree(name); } } return 0; case CMD_READBYTE: x->confdata=0; x->result=pci_read_config_byte(sh, x->offset, (u8*)&(x->confdata)); return 0; case CMD_READWORD: x->confdata=0; x->result=pci_read_config_word(sh, x->offset, (u16*)&(x->confdata)); return 0; case CMD_READLONG: x->confdata=0; x->result=pci_read_config_dword(sh, x->offset, (u32*)&(x->confdata)); return 0; case CMD_WRITEBYTE: x->result=pci_write_config_byte(sh, x->offset, (u8)(x->confdata)); return 0; case CMD_WRITEWORD: x->result=pci_write_config_word(sh, x->offset, (u16)(x->confdata)); return 0; case CMD_WRITELONG: x->result=pci_write_config_dword(sh, x->offset, (u32)(x->confdata)); return 0; case CMD_GETBASE: x->start=sh->resource[x->basenum].start; x->end=sh->resource[x->basenum].end; x->flags=sh->resource[x->basenum].flags; return 0; case CMD_GETINFO: x->irq=sh->irq; x->devnum=PCI_SLOT(sh->devfn); x->funnum=PCI_FUNC(sh->devfn); x->busnum=sh->bus->number; return 0; case CMD_GETNAME: { int len=0; do { if (COPY_TO_USER((void*)(x->res_name+len),(void*)(sh->name+len),1)) return -EFAULT; } while (sh->name[len++]); } return 0; default: return -EINVAL; } }