aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/pci/pci.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ia64/pci/pci.c')
-rw-r--r--arch/ia64/pci/pci.c44
1 files changed, 1 insertions, 43 deletions
diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c
index 53d0a8ee35d7..77b15f80f101 100644
--- a/arch/ia64/pci/pci.c
+++ b/arch/ia64/pci/pci.c
@@ -504,54 +504,12 @@ pcibios_update_irq (struct pci_dev *dev, int irq)
504 /* ??? FIXME -- record old value for shutdown. */ 504 /* ??? FIXME -- record old value for shutdown. */
505} 505}
506 506
507static inline int
508pcibios_enable_resources (struct pci_dev *dev, int mask)
509{
510 u16 cmd, old_cmd;
511 int idx;
512 struct resource *r;
513 unsigned long type_mask = IORESOURCE_IO | IORESOURCE_MEM;
514
515 if (!dev)
516 return -EINVAL;
517
518 pci_read_config_word(dev, PCI_COMMAND, &cmd);
519 old_cmd = cmd;
520 for (idx=0; idx<PCI_NUM_RESOURCES; idx++) {
521 /* Only set up the desired resources. */
522 if (!(mask & (1 << idx)))
523 continue;
524
525 r = &dev->resource[idx];
526 if (!(r->flags & type_mask))
527 continue;
528 if ((idx == PCI_ROM_RESOURCE) &&
529 (!(r->flags & IORESOURCE_ROM_ENABLE)))
530 continue;
531 if (!r->start && r->end) {
532 printk(KERN_ERR
533 "PCI: Device %s not available because of resource collisions\n",
534 pci_name(dev));
535 return -EINVAL;
536 }
537 if (r->flags & IORESOURCE_IO)
538 cmd |= PCI_COMMAND_IO;
539 if (r->flags & IORESOURCE_MEM)
540 cmd |= PCI_COMMAND_MEMORY;
541 }
542 if (cmd != old_cmd) {
543 printk("PCI: Enabling device %s (%04x -> %04x)\n", pci_name(dev), old_cmd, cmd);
544 pci_write_config_word(dev, PCI_COMMAND, cmd);
545 }
546 return 0;
547}
548
549int 507int
550pcibios_enable_device (struct pci_dev *dev, int mask) 508pcibios_enable_device (struct pci_dev *dev, int mask)
551{ 509{
552 int ret; 510 int ret;
553 511
554 ret = pcibios_enable_resources(dev, mask); 512 ret = pci_enable_resources(dev, mask);
555 if (ret < 0) 513 if (ret < 0)
556 return ret; 514 return ret;
557 515