staticvoid
miata_srm_device_interrupt(unsignedlong vector)
{ int irq;
irq = (vector - 0x800) >> 4;
/* * I really hate to do this, but the MIATA SRM console ignores the * low 8 bits in the interrupt summary register, and reports the * vector 0x80 *lower* than I expected from the bit numbering in * the documentation. * This was done because the low 8 summary bits really aren't used * for reporting any interrupts (the PCI-ISA bridge, bit 7, isn't * used for this purpose, as PIC interrupts are delivered as the * vectors 0x800-0x8f0). * But I really don't want to change the fixup code for allocation * of IRQs, nor the alpha_irq_mask maintenance stuff, both of which * look nice and clean now. * So, here's this grotty hack... :-(
*/ if (irq >= 16)
irq = irq + 8;
handle_irq(irq);
}
staticvoid __init
miata_init_irq(void)
{ if (alpha_using_srm)
alpha_mv.device_interrupt = miata_srm_device_interrupt;
#if 0 /* These break on MiataGL so we'll try not to do it at all. */
*(vulp)PYXIS_INT_HILO = 0x000000B2UL; mb(); /* ISA/NMI HI */
*(vulp)PYXIS_RT_COUNT = 0UL; mb(); /* clear count */ #endif
init_i8259a_irqs();
/* Not interested in the bogus interrupts (3,10), Fan Fault (0), NMI (1), or EIDE (9).
We also disable the risers (4,5), since we don't know how to
route the interrupts behind the bridge. */
init_pyxis_irqs(0x63b0000);
common_init_isa_dma(); if (request_irq(16 + 2, no_action, 0, "halt-switch", NULL))
pr_err("Failed to register halt-switch interrupt\n"); if (request_irq(16 + 6, no_action, 0, "timer-cascade", NULL))
pr_err("Failed to register timer-cascade interrupt\n");
}
/* * PCI Fixup configuration. * * Summary @ PYXIS_INT_REQ: * Bit Meaning * 0 Fan Fault * 1 NMI * 2 Halt/Reset switch * 3 none * 4 CID0 (Riser ID) * 5 CID1 (Riser ID) * 6 Interval timer * 7 PCI-ISA Bridge * 8 Ethernet * 9 EIDE (deprecated, ISA 14/15 used) *10 none *11 USB *12 Interrupt Line A from slot 4 *13 Interrupt Line B from slot 4 *14 Interrupt Line C from slot 4 *15 Interrupt Line D from slot 4 *16 Interrupt Line A from slot 5 *17 Interrupt line B from slot 5 *18 Interrupt Line C from slot 5 *19 Interrupt Line D from slot 5 *20 Interrupt Line A from slot 1 *21 Interrupt Line B from slot 1 *22 Interrupt Line C from slot 1 *23 Interrupt Line D from slot 1 *24 Interrupt Line A from slot 2 *25 Interrupt Line B from slot 2 *26 Interrupt Line C from slot 2 *27 Interrupt Line D from slot 2 *27 Interrupt Line A from slot 3 *29 Interrupt Line B from slot 3 *30 Interrupt Line C from slot 3 *31 Interrupt Line D from slot 3 * * The device to slot mapping looks like: * * Slot Device * 3 DC21142 Ethernet * 4 EIDE CMD646 * 5 none * 6 USB * 7 PCI-ISA bridge * 8 PCI-PCI Bridge (SBU Riser) * 9 none * 10 none * 11 PCI on board slot 4 (SBU Riser) * 12 PCI on board slot 5 (SBU Riser) * * These are behind the bridge, so I'm not sure what to do... * * 13 PCI on board slot 1 (SBU Riser) * 14 PCI on board slot 2 (SBU Riser) * 15 PCI on board slot 3 (SBU Riser) * * * This two layered interrupt approach means that we allocate IRQ 16 and * above for PCI interrupts. The IRQ relates to which bit the interrupt * comes in on. This makes interrupt processing much easier.
*/
if (dev->bus->number == 0) {
slot = PCI_SLOT(dev->devfn);
} /* Check for the built-in bridge. */ elseif ((PCI_SLOT(dev->bus->self->devfn) == 8) ||
(PCI_SLOT(dev->bus->self->devfn) == 20)) {
slot = PCI_SLOT(dev->devfn) + 9;
} else
{ /* Must be a card-based bridge. */ do { if ((PCI_SLOT(dev->bus->self->devfn) == 8) ||
(PCI_SLOT(dev->bus->self->devfn) == 20)) {
slot = PCI_SLOT(dev->devfn) + 9; break;
}
pin = pci_swizzle_interrupt_pin(dev, pin);
/* Move up the chain of bridges. */
dev = dev->bus->self; /* Slot of the next bridge. */
slot = PCI_SLOT(dev->devfn);
} while (dev->bus->self);
}
*pinp = pin; return slot;
}
staticvoid __init
miata_init_pci(void)
{
cia_init_pci();
SMC669_Init(0); /* it might be a GL (fails harmlessly if not) */
es1888_init();
}
#ifndef ALPHA_RESTORE_SRM_SETUP switch(mode) { case LINUX_REBOOT_CMD_RESTART: /* Who said DEC engineers have no sense of humor? ;-) */ if (alpha_using_srm) {
*(vuip) PYXIS_RESET = 0x0000dead;
mb();
} break; case LINUX_REBOOT_CMD_HALT: break; case LINUX_REBOOT_CMD_POWER_OFF: break;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.