Пример #1
0
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;
}
Пример #2
0
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, &param, 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;
}
Пример #3
0
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;
  }
}