void __init psc_register_interrupts(void) { sys_request_irq(3, psc_irq, IRQ_FLG_LOCK, "psc3", (void *) 0x30); sys_request_irq(4, psc_irq, IRQ_FLG_LOCK, "psc4", (void *) 0x40); sys_request_irq(5, psc_irq, IRQ_FLG_LOCK, "psc5", (void *) 0x50); sys_request_irq(6, psc_irq, IRQ_FLG_LOCK, "psc6", (void *) 0x60); }
void __init oss_register_interrupts(void) { sys_request_irq(OSS_IRQLEV_SCSI, oss_irq, IRQ_FLG_LOCK, "scsi", (void *) oss); sys_request_irq(OSS_IRQLEV_IOPSCC, mac_scc_dispatch, IRQ_FLG_LOCK, "scc", mac_scc_dispatch); sys_request_irq(OSS_IRQLEV_NUBUS, oss_nubus_irq, IRQ_FLG_LOCK, "nubus", (void *) oss); sys_request_irq(OSS_IRQLEV_SOUND, oss_irq, IRQ_FLG_LOCK, "sound", (void *) oss); sys_request_irq(OSS_IRQLEV_VIA1, via1_irq, IRQ_FLG_LOCK, "via1", (void *) via1); }
int q40_request_irq(unsigned int irq, void (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *devname, void *dev_id) { /*printk("q40_request_irq %d, %s\n",irq,devname);*/ if (irq > Q40_IRQ_MAX || (irq>15 && irq<32)) { printk("%s: Incorrect IRQ %d from %s\n", __FUNCTION__, irq, devname); return -ENXIO; } /* test for ISA ints not implemented by HW */ switch (irq) { case 1: case 2: case 8: case 9: case 12: case 13: printk("%s: ISA IRQ %d from %s not implemented by HW\n", __FUNCTION__, irq, devname); return -ENXIO; case 11: printk("warning IRQ 10 and 11 not distinguishable\n"); irq=10; } if (irq<Q40_IRQ_SAMPLE) { if (irq_tab[irq].dev_id != NULL) { printk("%s: IRQ %d from %s is not replaceable\n", __FUNCTION__, irq, irq_tab[irq].devname); return -EBUSY; } /*printk("IRQ %d set to handler %p\n",irq,handler);*/ if (dev_id==NULL) { printk("WARNING: dev_id == NULL in request_irq\n"); dev_id=(void*)1; } irq_tab[irq].handler = handler; irq_tab[irq].flags = flags; irq_tab[irq].dev_id = dev_id; strncpy(irq_tab[irq].devname,devname,DEVNAME_SIZE); irq_tab[irq].state = 0; return 0; } else { /* Q40_IRQ_SAMPLE :somewhat special actions required here ..*/ sys_request_irq(4,handler,flags,devname,dev_id); sys_request_irq(6,handler,flags,devname,dev_id); return 0; } }
void q40_init_IRQ (void) { int i; disabled=0; for (i = 0; i <= Q40_IRQ_MAX; i++) { irq_tab[i].handler = q40_defhand; irq_tab[i].flags = 0; irq_tab[i].dev_id = NULL; /* irq_tab[i].next = NULL;*/ irq_tab[i].devname[0] = 0; irq_tab[i].count = 0; irq_tab[i].state =0; q40_ablecount[i]=0; /* all enabled */ } /* setup handler for ISA ints */ sys_request_irq(IRQ2,q40_irq2_handler, 0, "q40 ISA and master chip", NULL); /* now enable some ints.. */ master_outb(1,EXT_ENABLE_REG); /* ISA IRQ 5-15 */ /* make sure keyboard IRQ is disabled */ master_outb(0,KEY_IRQ_ENABLE_REG); }
int bvme6000_request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *devname, void *dev_id) { if (irq > 255) { printk("%s: Incorrect IRQ %d from %s\n", __FUNCTION__, irq, devname); return -ENXIO; } #if 0 /* Nothing special about auto-vectored devices for the BVME6000, * but treat it specially to avoid changes elsewhere. */ if (irq >= VEC_INT1 && irq <= VEC_INT7) return sys_request_irq(irq - VEC_SPUR, handler, flags, devname, dev_id); #endif if (!(irq_tab[irq].flags & IRQ_FLG_STD)) { if (irq_tab[irq].flags & IRQ_FLG_LOCK) { printk("%s: IRQ %d from %s is not replaceable\n", __FUNCTION__, irq, irq_tab[irq].devname); return -EBUSY; } if (flags & IRQ_FLG_REPLACE) { printk("%s: %s can't replace IRQ %d from %s\n", __FUNCTION__, devname, irq, irq_tab[irq].devname); return -EBUSY; } } irq_tab[irq].handler = handler; irq_tab[irq].flags = flags; irq_tab[irq].dev_id = dev_id; irq_tab[irq].devname = devname; return 0; }
void __init sun3x_sched_init(void (*vector)(int, void *, struct pt_regs *)) { sys_request_irq(5, sun3x_timer_tick, IRQ_FLG_STD, "timer tick", vector); /* Pulse enable low to get the clock started */ disable_irq(5); enable_irq(5); }
int amiga_request_irq(unsigned int irq, void (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *devname, void *dev_id) { irq_node_t *node; if (irq >= AMI_IRQS) { printk ("%s: Unknown IRQ %d from %s\n", __FUNCTION__, irq, devname); return -ENXIO; } if (irq >= IRQ_AMIGA_AUTO) return sys_request_irq(irq - IRQ_AMIGA_AUTO, handler, flags, devname, dev_id); if (irq >= IRQ_AMIGA_CIAB) return cia_request_irq(&ciab_base, irq - IRQ_AMIGA_CIAB, handler, flags, devname, dev_id); if (irq >= IRQ_AMIGA_CIAA) return cia_request_irq(&ciaa_base, irq - IRQ_AMIGA_CIAA, handler, flags, devname, dev_id); if (ami_servers[irq]) { if (!(node = new_irq_node())) return -ENOMEM; node->handler = handler; node->flags = flags; node->dev_id = dev_id; node->devname = devname; node->next = NULL; amiga_insert_irq(&ami_irq_list[irq], node); } else { if (!(ami_irq_list[irq]->flags & IRQ_FLG_STD)) { if (ami_irq_list[irq]->flags & IRQ_FLG_LOCK) { printk("%s: IRQ %d from %s is not replaceable\n", __FUNCTION__, irq, ami_irq_list[irq]->devname); return -EBUSY; } if (!(flags & IRQ_FLG_REPLACE)) { printk("%s: %s can't replace IRQ %d from %s\n", __FUNCTION__, devname, irq, ami_irq_list[irq]->devname); return -EBUSY; } } ami_irq_list[irq]->handler = handler; ami_irq_list[irq]->flags = flags; ami_irq_list[irq]->dev_id = dev_id; ami_irq_list[irq]->devname = devname; } /* enable the interrupt */ if (irq < IRQ_AMIGA_PORTS && !ami_ablecount[irq]) custom.intena = IF_SETCLR | ami_intena_vals[irq]; return 0; }
void __init via_register_interrupts(void) { if (via_alt_mapping) { sys_request_irq(IRQ_AUTO_1, via1_irq, IRQ_FLG_LOCK|IRQ_FLG_FAST, "software", (void *) via1); sys_request_irq(IRQ_AUTO_6, via1_irq, IRQ_FLG_LOCK|IRQ_FLG_FAST, "via1", (void *) via1); } else { sys_request_irq(IRQ_AUTO_1, via1_irq, IRQ_FLG_LOCK|IRQ_FLG_FAST, "via1", (void *) via1); #if 0 /* interferes with serial on some machines */ if (!psc_present) { sys_request_irq(IRQ_AUTO_6, mac_bang, IRQ_FLG_LOCK, "Off Switch", mac_bang); } #endif } sys_request_irq(IRQ_AUTO_2, via2_irq, IRQ_FLG_LOCK|IRQ_FLG_FAST, "via2", (void *) via2); if (!psc_present) { sys_request_irq(IRQ_AUTO_4, mac_scc_dispatch, IRQ_FLG_LOCK, "scc", mac_scc_dispatch); } request_irq(IRQ_MAC_NUBUS, via_nubus_irq, IRQ_FLG_LOCK|IRQ_FLG_FAST, "nubus", (void *) via2); }
int amiga_request_irq(unsigned int irq, void (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *devname, void *dev_id) { irq_node_t *node; int error = 0; if (irq >= AMI_IRQS) { printk ("%s: Unknown IRQ %d from %s\n", __FUNCTION__, irq, devname); return -ENXIO; } if (irq >= IRQ_AMIGA_AUTO) return sys_request_irq(irq - IRQ_AMIGA_AUTO, handler, flags, devname, dev_id); if (irq >= IRQ_AMIGA_CIAB) return cia_request_irq(&ciab_base, irq - IRQ_AMIGA_CIAB, handler, flags, devname, dev_id); if (irq >= IRQ_AMIGA_CIAA) return cia_request_irq(&ciaa_base, irq - IRQ_AMIGA_CIAA, handler, flags, devname, dev_id); /* * IRQ_AMIGA_PORTS & IRQ_AMIGA_EXTER defaults to shared, * we could add a check here for the SA_SHIRQ flag but all drivers * should be aware of sharing anyway. */ if (ami_servers[irq]) { if (!(node = new_irq_node())) return -ENOMEM; node->handler = handler; node->flags = flags; node->dev_id = dev_id; node->devname = devname; node->next = NULL; error = amiga_insert_irq(&ami_irq_list[irq], node); } else { ami_irq_list[irq]->handler = handler; ami_irq_list[irq]->flags = flags; ami_irq_list[irq]->dev_id = dev_id; ami_irq_list[irq]->devname = devname; } /* enable the interrupt */ if (irq < IRQ_AMIGA_PORTS && !ami_ablecount[irq]) custom.intena = IF_SETCLR | amiga_intena_vals[irq]; return error; }
void sun3_init_IRQ(void) { int i; *sun3_intreg = 1; for(i = 0; i < SYS_IRQS; i++) { if(dev_names[i]) sys_request_irq(i, sun3_default_handler[i], 0, dev_names[i], NULL); } for(i = 0; i < 192; i++) sun3_vechandler[i] = NULL; sun3_vechandler[191] = sun3_vec255; }
void mac_init_IRQ(void) { int i; #ifdef DEBUG_MACINTS printk("mac_init_IRQ(): Setting things up...\n"); #endif /* Initialize the IRQ handler lists. Initially each list is empty, */ for (i = 0; i < NUM_MAC_SOURCES; i++) { mac_irq_list[i] = NULL; } scc_mask = 0; /* Make sure the SONIC interrupt is cleared or things get ugly */ #ifdef SHUTUP_SONIC printk("Killing onboard sonic... "); /* This address should hopefully be mapped already */ if (hwreg_present((void*)(0x50f0a000))) { *(long *)(0x50f0a014) = 0x7fffL; *(long *)(0x50f0a010) = 0L; } printk("Done.\n"); #endif /* SHUTUP_SONIC */ /* * Now register the handlers for the master IRQ handlers * at levels 1-7. Most of the work is done elsewhere. */ if (oss_present) { oss_register_interrupts(); } else { via_register_interrupts(); } if (psc_present) psc_register_interrupts(); if (baboon_present) baboon_register_interrupts(); iop_register_interrupts(); sys_request_irq(7, mac_nmi_handler, IRQ_FLG_LOCK, "NMI", mac_nmi_handler); #ifdef DEBUG_MACINTS printk("mac_init_IRQ(): Done!\n"); #endif }
void __init iop_register_interrupts(void) { if (iop_ism_present) { if (oss_present) { sys_request_irq(OSS_IRQLEV_IOPISM, iop_ism_irq, IRQ_FLG_LOCK, "ISM IOP", (void *) IOP_NUM_ISM); oss_irq_enable(IRQ_MAC_ADB); } else { request_irq(IRQ_VIA2_0, iop_ism_irq, IRQ_FLG_LOCK|IRQ_FLG_FAST, "ISM IOP", (void *) IOP_NUM_ISM); } if (!iop_alive(iop_base[IOP_NUM_ISM])) { printk("IOP: oh my god, they killed the ISM IOP!\n"); } else { printk("IOP: the ISM IOP seems to be alive.\n"); } } }
int sun3_request_irq(unsigned int irq, void (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *devname, void *dev_id) { if(irq < SYS_IRQS) { if(sun3_inthandler[irq] != NULL) { printk("sun3_request_irq: request for irq %d -- already taken!\n", irq); return 1; } sun3_inthandler[irq] = handler; dev_ids[irq] = dev_id; dev_names[irq] = devname; /* setting devname would be nice */ sys_request_irq(irq, sun3_default_handler[irq], 0, devname, NULL); return 0; } else { if((irq >= 64) && (irq <= 255)) { int vec; vec = irq - 64; if(sun3_vechandler[vec] != NULL) { printk("sun3_request_irq: request for vec %d -- already taken!\n", irq); return 1; } sun3_vechandler[vec] = handler; vec_ids[vec] = dev_id; vec_names[vec] = devname; vec_ints[vec] = 0; return 0; } } printk("sun3_request_irq: invalid irq %d\n", irq); return 1; }
int mac_request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *devname, void *dev_id) { irq_node_t *node; #ifdef DEBUG_MACINTS printk ("%s: irq %d requested for %s\n", __FUNCTION__, irq, devname); #endif if (irq < VIA1_SOURCE_BASE) { return sys_request_irq(irq, handler, flags, devname, dev_id); } if (irq >= NUM_MAC_SOURCES) { printk ("%s: unknown irq %d requested by %s\n", __FUNCTION__, irq, devname); } /* Get a node and stick it onto the right list */ if (!(node = new_irq_node())) return -ENOMEM; node->handler = handler; node->flags = flags; node->dev_id = dev_id; node->devname = devname; node->next = NULL; mac_insert_irq(&mac_irq_list[irq], node); /* Now enable the IRQ source */ mac_enable_irq(irq); return 0; }