static int __devinit vrc4173_probe(struct pci_dev *dev,
                                   const struct pci_device_id *id)
{
	unsigned long start, flags;
	int err;

	err = pci_enable_device(dev);
	if (err < 0) {
		printk(KERN_ERR "vrc4173: Failed to enable PCI device, aborting\n");
		return err;
	}

	pci_set_master(dev);

	start = pci_resource_start(dev, 0);
	if (start == 0) {
		printk(KERN_ERR "vrc4173:No such PCI I/O resource, aborting\n");
		return -ENXIO;
	}

	flags = pci_resource_flags(dev, 0);
	if ((flags & IORESOURCE_IO) == 0) {
		printk(KERN_ERR "vrc4173: No such PCI I/O resource, aborting\n");
		return -ENXIO;
	}

	err = pci_request_regions(dev, "NEC VRC4173");
	if (err < 0) {
		printk(KERN_ERR "vrc4173: PCI resources are busy, aborting\n");
		return err;
	}

	set_vrc4173_io_offset(start);

	vrc4173_cmu_init();
	vrc4173_giu_init();

	err = vrc4173_icu_init(dev->irq);
	if (err < 0) {
		printk(KERN_ERR "vrc4173: Invalid IRQ %d, aborting\n", dev->irq);
		return err;
	}

	err = vr41xx_cascade_irq(dev->irq, vrc4173_get_irq_number);
	if (err < 0) {
		printk(KERN_ERR "vrc4173: IRQ resource %d is busy, aborting\n", dev->irq);
		return err;
	}

	printk(KERN_INFO
	       "NEC VRC4173 at 0x%#08lx, IRQ is cascaded to %d\n", start, dev->irq);

	return 0;
}
static int __devinit vrc4173_probe(struct pci_dev *pdev,
                                   const struct pci_device_id *ent)
{
	unsigned long start, flags;
	int err;

	if ((err = pci_enable_device(pdev)) < 0) {
		printk(KERN_ERR "vrc4173: failed to enable device -- err=%d\n", err);
		return err;
	}

	pci_set_master(pdev);

	start = pci_resource_start(pdev, 0);
	if (!start) {
		printk(KERN_ERR "vrc4173:No PCI I/O resources, aborting\n");
		return -ENODEV;
	}

	if (!start || (((flags = pci_resource_flags(pdev, 0)) & IORESOURCE_IO) == 0)) {
		printk(KERN_ERR "vrc4173: No PCI I/O resources, aborting\n");
		return -ENODEV;
	}

	if ((err = pci_request_regions(pdev, "NEC VRC4173")) < 0) {
		printk(KERN_ERR "vrc4173: PCI resources are busy, aborting\n");
		return err;
	}

	set_vrc4173_io_offset(start);

	vrc4173_cmu_init();

	vrc4173_icu_init(pdev->irq);

	if ((err = vr41xx_cascade_irq(pdev->irq, vrc4173_get_irq_number)) < 0) {
		printk(KERN_ERR
		       "vrc4173: IRQ resource %d is busy, aborting\n", pdev->irq);
		return err;
	}

	printk(KERN_INFO
	       "NEC VRC4173 at 0x%#08lx, IRQ is cascaded to %d\n", start, pdev->irq);

	return 0;
}
Example #3
0
void __init rockhopper_init_irq(void)
{
	int i;

	if(!vr4133_rockhopper) {
		printk(KERN_ERR "Not a Rockhopper Board \n");
		return;
	}

	for (i = I8259_IRQ_BASE; i <= I8259_IRQ_LAST; i++)
		irq_desc[i].chip = &i8259_irq_type;

	setup_irq(I8259_SLAVE_IRQ, &i8259_slave_cascade);

	vr41xx_set_irq_trigger(CMBVR41XX_INTC_PIN, TRIGGER_LEVEL, SIGNAL_THROUGH);
	vr41xx_set_irq_level(CMBVR41XX_INTC_PIN, LEVEL_HIGH);
	vr41xx_cascade_irq(CMBVR41XX_INTC_IRQ, i8259_get_irq_number);
}