void dec_550_intr_disestablish(void *ccv, void *cookie) { struct cia_config *ccp = ccv; struct alpha_shared_intrhand *ih = cookie; unsigned int irq = ih->ih_num; int s; #if NSIO /* * We have to determine if this is an ISA IRQ or not! We do this * by checking to see if the intrhand points back to an intrhead * that points to our cia_config. If not, it's an ISA IRQ. Pretty * disgusting, eh? */ if (ih->ih_intrhead->intr_private != ccp) { sio_intr_disestablish(NULL /*XXX*/, cookie); return; } #endif s = splhigh(); alpha_shared_intr_disestablish(dec_550_pci_intr, cookie, "dec 550 irq"); if (alpha_shared_intr_isactive(dec_550_pci_intr, irq) == 0) { dec_550_intr_disable(irq); alpha_shared_intr_set_dfltsharetype(dec_550_pci_intr, irq, IST_NONE); scb_free(0x900 + SCB_IDXTOVEC(irq)); } splx(s); }
void jensenio_eisa_intr_disestablish(void *v, void *cookie) { struct alpha_shared_intrhand *ih = cookie; int s, irq = ih->ih_num; s = splhigh(); /* Remove it from the link. */ alpha_shared_intr_disestablish(jensenio_eisa_intr, cookie, "eisa irq"); if (JENSEN_IRQ_IS_EISA(irq) == 0) { splx(s); return; } if (alpha_shared_intr_isactive(jensenio_eisa_intr, irq) == 0) { jensenio_enable_intr(irq, 0); alpha_shared_intr_set_dfltsharetype(jensenio_eisa_intr, irq, jensenio_intr_deftype[irq]); } splx(s); }
void sio_intr_disestablish(void *v, void *cookie) { struct alpha_shared_intrhand *ih = cookie; int s, ist, irq = ih->ih_num; s = splhigh(); /* Remove it from the link. */ alpha_shared_intr_disestablish(sio_intr, cookie, "isa irq"); /* * Decide if we should disable the interrupt. We must ensure * that: * * - An initially-enabled interrupt is never disabled. * - An initially-LT interrupt is never untyped. */ if (alpha_shared_intr_isactive(sio_intr, irq) == 0) { /* * IRQs 0, 1, 8, and 13 must always be edge-triggered * (see setup). */ switch (irq) { case 0: case 1: case 8: case 13: /* * If the interrupt was initially level-triggered * a warning was printed in setup. */ ist = IST_EDGE; break; default: ist = IST_NONE; break; } sio_setirqstat(irq, 0, ist); alpha_shared_intr_set_dfltsharetype(sio_intr, irq, ist); /* Release our SCB vector. */ scb_free(0x800 + SCB_IDXTOVEC(irq)); } splx(s); }
void dec_eb66_intr_disestablish(void *lcv, void *cookie) { struct alpha_shared_intrhand *ih = cookie; unsigned int irq = ih->ih_num; int s; s = splhigh(); alpha_shared_intr_disestablish(eb66_pci_intr, cookie, "eb66 irq"); if (alpha_shared_intr_isactive(eb66_pci_intr, irq) == 0) { eb66_intr_disable(irq); alpha_shared_intr_set_dfltsharetype(eb66_pci_intr, irq, IST_NONE); scb_free(0x900 + SCB_IDXTOVEC(irq)); } splx(s); }
void jensenio_eisa_intr_disestablish(void *v, void *cookie) { struct alpha_shared_intrhand *ih = cookie; int s, irq = ih->ih_num; s = splhigh(); /* Remove it from the link. */ alpha_shared_intr_disestablish(jensenio_eisa_intr, cookie, "eisa irq"); if (alpha_shared_intr_isactive(jensenio_eisa_intr, irq) == 0) { jensenio_enable_intr(irq, 0); alpha_shared_intr_set_dfltsharetype(jensenio_eisa_intr, irq, jensenio_intr_deftype[irq]); scb_free(0x800 + SCB_IDXTOVEC(irq)); } splx(s); }