Module Name: src Committed By: matt Date: Mon Feb 15 07:37:37 UTC 2010
Modified Files: src/sys/arch/evbmips/alchemy [matt-nb5-mips64]: mach_intr.c src/sys/arch/evbmips/atheros [matt-nb5-mips64]: mach_intr.c src/sys/arch/evbmips/evbmips [matt-nb5-mips64]: interrupt.c src/sys/arch/evbmips/include [matt-nb5-mips64]: intr.h src/sys/arch/evbmips/malta [matt-nb5-mips64]: malta_intr.c src/sys/arch/mips/adm5120 [matt-nb5-mips64]: adm5120_intr.c src/sys/arch/mips/alchemy [matt-nb5-mips64]: au_icu.c src/sys/arch/mips/alchemy/include [matt-nb5-mips64]: auvar.h src/sys/arch/mips/atheros [matt-nb5-mips64]: ar5312_intr.c ar5315_intr.c src/sys/arch/mips/atheros/include [matt-nb5-mips64]: ar531xvar.h src/sys/arch/mips/rmi [matt-nb5-mips64]: rmixl_intr.c Log Message: Adapt to the new interrupt framework for NetBSD/mips. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.3.18.1 src/sys/arch/evbmips/alchemy/mach_intr.c cvs rdiff -u -r1.2 -r1.2.18.1 src/sys/arch/evbmips/atheros/mach_intr.c cvs rdiff -u -r1.11.18.2 -r1.11.18.3 src/sys/arch/evbmips/evbmips/interrupt.c cvs rdiff -u -r1.16.18.2 -r1.16.18.3 src/sys/arch/evbmips/include/intr.h cvs rdiff -u -r1.19.16.2 -r1.19.16.3 src/sys/arch/evbmips/malta/malta_intr.c cvs rdiff -u -r1.3 -r1.3.18.1 src/sys/arch/mips/adm5120/adm5120_intr.c cvs rdiff -u -r1.23 -r1.23.18.1 src/sys/arch/mips/alchemy/au_icu.c cvs rdiff -u -r1.9 -r1.9.64.1 src/sys/arch/mips/alchemy/include/auvar.h cvs rdiff -u -r1.6 -r1.6.28.1 src/sys/arch/mips/atheros/ar5312_intr.c cvs rdiff -u -r1.5 -r1.5.28.1 src/sys/arch/mips/atheros/ar5315_intr.c cvs rdiff -u -r1.5 -r1.5.74.1 src/sys/arch/mips/atheros/include/ar531xvar.h cvs rdiff -u -r1.1.2.10 -r1.1.2.11 src/sys/arch/mips/rmi/rmixl_intr.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/evbmips/alchemy/mach_intr.c diff -u src/sys/arch/evbmips/alchemy/mach_intr.c:1.3 src/sys/arch/evbmips/alchemy/mach_intr.c:1.3.18.1 --- src/sys/arch/evbmips/alchemy/mach_intr.c:1.3 Mon Apr 28 20:23:17 2008 +++ src/sys/arch/evbmips/alchemy/mach_intr.c Mon Feb 15 07:37:35 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: mach_intr.c,v 1.3 2008/04/28 20:23:17 martin Exp $ */ +/* $NetBSD: mach_intr.c,v 1.3.18.1 2010/02/15 07:37:35 matt Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mach_intr.c,v 1.3 2008/04/28 20:23:17 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mach_intr.c,v 1.3.18.1 2010/02/15 07:37:35 matt Exp $"); #include "opt_ddb.h" @@ -63,8 +63,8 @@ } void -evbmips_iointr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending) +evbmips_iointr(int ipl, uint32_t pc, uint32_t ipending) { - au_iointr(status, cause, pc, ipending); + au_iointr(ipl, pc, ipending); } Index: src/sys/arch/evbmips/atheros/mach_intr.c diff -u src/sys/arch/evbmips/atheros/mach_intr.c:1.2 src/sys/arch/evbmips/atheros/mach_intr.c:1.2.18.1 --- src/sys/arch/evbmips/atheros/mach_intr.c:1.2 Mon Apr 28 20:23:17 2008 +++ src/sys/arch/evbmips/atheros/mach_intr.c Mon Feb 15 07:37:35 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: mach_intr.c,v 1.2 2008/04/28 20:23:17 martin Exp $ */ +/* $NetBSD: mach_intr.c,v 1.2.18.1 2010/02/15 07:37:35 matt Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mach_intr.c,v 1.2 2008/04/28 20:23:17 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mach_intr.c,v 1.2.18.1 2010/02/15 07:37:35 matt Exp $"); #include "opt_ddb.h" @@ -57,8 +57,8 @@ } void -evbmips_iointr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending) +evbmips_iointr(int ipl, vaddr_t pc, uint32_t ipending) { - ar531x_cpuintr(status, cause, pc, ipending); + ar531x_cpuintr(ipl, pc, ipending); } Index: src/sys/arch/evbmips/evbmips/interrupt.c diff -u src/sys/arch/evbmips/evbmips/interrupt.c:1.11.18.2 src/sys/arch/evbmips/evbmips/interrupt.c:1.11.18.3 --- src/sys/arch/evbmips/evbmips/interrupt.c:1.11.18.2 Fri Feb 5 07:39:52 2010 +++ src/sys/arch/evbmips/evbmips/interrupt.c Mon Feb 15 07:37:36 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: interrupt.c,v 1.11.18.2 2010/02/05 07:39:52 matt Exp $ */ +/* $NetBSD: interrupt.c,v 1.11.18.3 2010/02/15 07:37:36 matt Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.11.18.2 2010/02/05 07:39:52 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.11.18.3 2010/02/15 07:37:36 matt Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -50,38 +50,39 @@ } void -cpu_intr(u_int32_t status, u_int32_t cause, vaddr_t pc, u_int32_t ipending) +cpu_intr(int ppl, vaddr_t pc, uint32_t status) { - struct clockframe cf; - struct cpu_info *ci; + struct cpu_info * const ci = curcpu(); + uint32_t pending; + int ipl; + + KASSERT(ci->ci_cpl == IPL_HIGH); - ci = curcpu(); - ci->ci_idepth++; uvmexp.intrs++; - if (ipending & MIPS_INT_MASK_5) { - /* call the common MIPS3 clock interrupt handler */ - cf.pc = pc; - cf.sr = status; - mips3_clockintr(&cf); - - /* Re-enable clock interrupts. */ - cause &= ~MIPS_INT_MASK_5; - _splset(MIPS_SR_INT_IE | - ((status & ~cause) & MIPS_HARD_INT_MASK)); - } + while (ppl < (ipl = splintr(&pending))) { + splx(ipl); /* lower to interrupt level */ + + KASSERT(pending != 0); - if (ipending & (MIPS_INT_MASK_0|MIPS_INT_MASK_1|MIPS_INT_MASK_2| - MIPS_INT_MASK_3|MIPS_INT_MASK_4)) { - /* Process I/O and error interrupts. */ - evbmips_iointr(status, cause, pc, ipending); + if (pending & MIPS_INT_MASK_5) { + struct clockframe cf; + KASSERT(ipl == IPL_SCHED); + /* call the common MIPS3 clock interrupt handler */ + cf.pc = pc; + cf.sr = status; + cf.intr = (ci->ci_idepth > 1); + mips3_clockintr(&cf); + } + + if (pending & (MIPS_INT_MASK_0|MIPS_INT_MASK_1|MIPS_INT_MASK_2| + MIPS_INT_MASK_3|MIPS_INT_MASK_4)) { + KASSERT(ipl == IPL_VM); + /* Process I/O and error interrupts. */ + evbmips_iointr(ipl, pc, pending); + } + (void)splhigh(); /* disable interrupts */ } - ci->ci_idepth--; -#ifdef __HAVE_FAST_SOFTINTS - ipending &= (MIPS_SOFT_INT_MASK_1|MIPS_SOFT_INT_MASK_0); - if (ipending == 0) - return; - softint_process(ipending); -#endif + KASSERT(ci->ci_cpl == IPL_HIGH); } Index: src/sys/arch/evbmips/include/intr.h diff -u src/sys/arch/evbmips/include/intr.h:1.16.18.2 src/sys/arch/evbmips/include/intr.h:1.16.18.3 --- src/sys/arch/evbmips/include/intr.h:1.16.18.2 Sat Feb 6 02:57:43 2010 +++ src/sys/arch/evbmips/include/intr.h Mon Feb 15 07:37:36 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.16.18.2 2010/02/06 02:57:43 matt Exp $ */ +/* $NetBSD: intr.h,v 1.16.18.3 2010/02/15 07:37:36 matt Exp $ */ /*- * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc. @@ -33,64 +33,10 @@ #define _EVBMIPS_INTR_H_ #include <sys/queue.h> - -#define IPL_NONE 0 /* disable only this interrupt */ -#define IPL_SOFTCLOCK 1 /* software interrupts */ -#define IPL_SOFTBIO 1 /* software interrupts */ -#define IPL_SOFTNET 2 /* software interrupts */ -#define IPL_SOFTSERIAL 2 /* software interrupts */ -#define IPL_VM 3 -#define IPL_SCHED 4 -#define IPL_HIGH 4 - -#define _IPL_N 5 /* max IPL + 1 */ - -#define _IPL_SI0_FIRST IPL_SOFTCLOCK -#define _IPL_SI0_LAST IPL_SOFTBIO - -#define _IPL_SI1_FIRST IPL_SOFTNET -#define _IPL_SI1_LAST IPL_SOFTSERIAL - -#define IST_UNUSABLE -1 /* interrupt cannot be used */ -#define IST_NONE 0 /* none (dummy) */ -#define IST_PULSE 1 /* pulsed */ -#define IST_EDGE 2 /* edge-triggered */ -#define IST_LEVEL 3 /* level-triggered */ -#define IST_LEVEL_HIGH 4 /* level triggered, active high */ -#define IST_LEVEL_LOW 5 /* level triggered, active low */ +#include <mips/intr.h> #ifdef _KERNEL -#include <mips/locore.h> - -extern const uint32_t ipl_sr_bits[_IPL_N]; - -#define spl0() (void) _spllower(0) -#define splx(s) (void) _splset(s) - -#define splsoft() _splraise(ipl_sr_bits[IPL_SOFT]) - -typedef int ipl_t; -typedef struct { - ipl_t _sr; -} ipl_cookie_t; - -static inline ipl_cookie_t -makeiplcookie(ipl_t ipl) -{ - - return (ipl_cookie_t){._sr = ipl_sr_bits[ipl]}; -} - -static inline int -splraiseipl(ipl_cookie_t icookie) -{ - - return _splraise(icookie._sr); -} - -#include <sys/spl.h> - struct evbmips_intrhand { LIST_ENTRY(evbmips_intrhand) ih_q; int (*ih_func)(void *); @@ -99,10 +45,11 @@ int ih_ipl; }; -void evbmips_intr_init(void); void intr_init(void); -void evbmips_iointr(uint32_t, uint32_t, uint32_t, uint32_t); +void evbmips_intr_init(void); +void evbmips_iointr(int, vaddr_t, uint32_t); void *evbmips_intr_establish(int, int (*)(void *), void *); void evbmips_intr_disestablish(void *); + #endif /* _KERNEL */ #endif /* ! _EVBMIPS_INTR_H_ */ Index: src/sys/arch/evbmips/malta/malta_intr.c diff -u src/sys/arch/evbmips/malta/malta_intr.c:1.19.16.2 src/sys/arch/evbmips/malta/malta_intr.c:1.19.16.3 --- src/sys/arch/evbmips/malta/malta_intr.c:1.19.16.2 Sat Feb 6 02:59:04 2010 +++ src/sys/arch/evbmips/malta/malta_intr.c Mon Feb 15 07:37:36 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: malta_intr.c,v 1.19.16.2 2010/02/06 02:59:04 matt Exp $ */ +/* $NetBSD: malta_intr.c,v 1.19.16.3 2010/02/15 07:37:36 matt Exp $ */ /* * Copyright 2001, 2002 Wasabi Systems, Inc. @@ -40,7 +40,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: malta_intr.c,v 1.19.16.2 2010/02/06 02:59:04 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: malta_intr.c,v 1.19.16.3 2010/02/15 07:37:36 matt Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -65,15 +65,28 @@ */ const uint32_t ipl_sr_bits[_IPL_N] = { [IPL_NONE] = 0, + [IPL_PREEMPT] = 0, [IPL_SOFTCLOCK] = MIPS_SOFT_INT_MASK_0, [IPL_SOFTNET] = - MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1, + MIPS_SOFT_INT_MASK_0 | + MIPS_SOFT_INT_MASK_1, [IPL_VM] = - MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 | + MIPS_SOFT_INT_MASK_0 | + MIPS_SOFT_INT_MASK_1 | MIPS_INT_MASK_0, [IPL_SCHED] = - MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 | + MIPS_SOFT_INT_MASK_0 | + MIPS_SOFT_INT_MASK_1 | + MIPS_INT_MASK_0 | + MIPS_INT_MASK_1 | + MIPS_INT_MASK_2 | + MIPS_INT_MASK_3 | + MIPS_INT_MASK_4 | + MIPS_INT_MASK_5, + [IPL_HIGH] = + MIPS_SOFT_INT_MASK_0 | + MIPS_SOFT_INT_MASK_1 | MIPS_INT_MASK_0 | MIPS_INT_MASK_1 | MIPS_INT_MASK_2 | @@ -249,9 +262,8 @@ } void -evbmips_iointr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending) +evbmips_iointr(int ipl, vaddr_t pc, uint32_t ipending) { - struct evbmips_intrhand *ih; /* Check for error interrupts (SMI, GT64120) */ if (ipending & (MIPS_INT_MASK_1 | MIPS_INT_MASK_3)) { @@ -267,15 +279,12 @@ * priority. */ if (ipending & MIPS_INT_MASK_0) { + struct evbmips_intrhand *ih; /* All interrupts are gated through MIPS HW interrupt 0 */ malta_cpuintrs[0].cintr_count.ev_count++; LIST_FOREACH(ih, &malta_cpuintrs[0].cintr_list, ih_q) (*ih->ih_func)(ih->ih_arg); - cause &= ~MIPS_INT_MASK_0; } - - /* Re-enable anything that we have processed. */ - _splset(MIPS_SR_INT_IE | ((status & ~cause) & MIPS_HARD_INT_MASK)); } /* Index: src/sys/arch/mips/adm5120/adm5120_intr.c diff -u src/sys/arch/mips/adm5120/adm5120_intr.c:1.3 src/sys/arch/mips/adm5120/adm5120_intr.c:1.3.18.1 --- src/sys/arch/mips/adm5120/adm5120_intr.c:1.3 Mon Apr 28 20:23:27 2008 +++ src/sys/arch/mips/adm5120/adm5120_intr.c Mon Feb 15 07:37:36 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: adm5120_intr.c,v 1.3 2008/04/28 20:23:27 martin Exp $ */ +/* $NetBSD: adm5120_intr.c,v 1.3.18.1 2010/02/15 07:37:36 matt Exp $ */ /*- * Copyright (c) 2007 Ruslan Ermilov and Vsevolod Lobko. @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: adm5120_intr.c,v 1.3 2008/04/28 20:23:27 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: adm5120_intr.c,v 1.3.18.1 2010/02/15 07:37:36 matt Exp $"); #include "opt_ddb.h" @@ -93,26 +93,19 @@ * given hardware interrupt priority level. */ const uint32_t ipl_sr_bits[_IPL_N] = { - 0, /* 0: IPL_NONE */ - MIPS_SOFT_INT_MASK_0, /* 1: IPL_SOFTCLOCK */ - MIPS_SOFT_INT_MASK_0, /* 2: IPL_SOFTNET */ - - MIPS_SOFT_INT_MASK_0| - MIPS_SOFT_INT_MASK_1| - MIPS_INT_MASK_0, /* 3: IPL_VM */ - - MIPS_SOFT_INT_MASK_0| - MIPS_SOFT_INT_MASK_1| - MIPS_INT_MASK_0| - MIPS_INT_MASK_1| - MIPS_INT_MASK_2| - MIPS_INT_MASK_3| - MIPS_INT_MASK_4| - MIPS_INT_MASK_5, /* 4: IPL_{SCHED,HIGH} */ + [IPL_NONE] = 0, + [IPL_PREEMPT] = 0, + [IPL_SOFTCLOCK] = MIPS_SOFT_INT_MASK_0, + [IPL_SOFTBIO] = MIPS_SOFT_INT_MASK_0, + [IPL_SOFTNET] = MIPS_SOFT_INT_MASK, + [IPL_SOFTSERIAL] = MIPS_SOFT_INT_MASK, + [IPL_VM] = MIPS_SOFT_INT_MASK|MIPS_INT_MASK_0, + [IPL_SCHED] = MIPS_INT_MASK, + [IPL_HIGH] = MIPS_INT_MASK, }; #define NIRQS 32 -const char *adm5120_intrnames[NIRQS] = { +const char * const adm5120_intrnames[NIRQS] = { "timer", /* 0 */ "uart0", /* 1 */ "uart1", /* 2 */ @@ -161,7 +154,7 @@ }; struct adm5120_cpuintr adm5120_cpuintrs[NINTRS]; -const char *adm5120_cpuintrnames[NINTRS] = { +const char * const adm5120_cpuintrnames[NINTRS] = { "int 0 (irq)", "int 1 (fiq)", }; @@ -276,13 +269,12 @@ free(ih, M_DEVBUF); } void -evbmips_iointr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending) +evbmips_iointr(int ipl, uint32_t pc, uint32_t ipending) { struct evbmips_intrhand *ih; - int level; uint32_t irqmask, irqstat; - for (level = NINTRS - 1; level >= 0; level--) { + for (int level = NINTRS - 1; level >= 0; level--) { if ((ipending & (MIPS_INT_MASK_0 << level)) == 0) continue; @@ -299,11 +291,5 @@ (*ih->ih_func)(ih->ih_arg); } } - cause &= ~(MIPS_INT_MASK_0 << level); } - - /* Re-enable anything that we have processed. */ - _splset(MIPS_SR_INT_IE | ((status & ~cause) & MIPS_HARD_INT_MASK)); - - return; } Index: src/sys/arch/mips/alchemy/au_icu.c diff -u src/sys/arch/mips/alchemy/au_icu.c:1.23 src/sys/arch/mips/alchemy/au_icu.c:1.23.18.1 --- src/sys/arch/mips/alchemy/au_icu.c:1.23 Mon Apr 28 20:23:27 2008 +++ src/sys/arch/mips/alchemy/au_icu.c Mon Feb 15 07:37:36 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: au_icu.c,v 1.23 2008/04/28 20:23:27 martin Exp $ */ +/* $NetBSD: au_icu.c,v 1.23.18.1 2010/02/15 07:37:36 matt Exp $ */ /*- * Copyright (c) 2006 Itronix Inc. @@ -68,7 +68,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: au_icu.c,v 1.23 2008/04/28 20:23:27 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: au_icu.c,v 1.23.18.1 2010/02/15 07:37:36 matt Exp $"); #include "opt_ddb.h" @@ -313,7 +313,7 @@ } void -au_iointr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending) +au_iointr(int ipl, vaddr_t pc, uint32_t ipending) { struct au_intrhand *ih; int level; @@ -372,11 +372,7 @@ } } } - cause &= ~(MIPS_INT_MASK_0 << level); } - - /* Re-enable anything that we have processed. */ - _splset(MIPS_SR_INT_IE | ((status & ~cause) & MIPS_HARD_INT_MASK)); } /* Index: src/sys/arch/mips/alchemy/include/auvar.h diff -u src/sys/arch/mips/alchemy/include/auvar.h:1.9 src/sys/arch/mips/alchemy/include/auvar.h:1.9.64.1 --- src/sys/arch/mips/alchemy/include/auvar.h:1.9 Wed Feb 21 22:59:47 2007 +++ src/sys/arch/mips/alchemy/include/auvar.h Mon Feb 15 07:37:36 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: auvar.h,v 1.9 2007/02/21 22:59:47 thorpej Exp $ */ +/* $NetBSD: auvar.h,v 1.9.64.1 2010/02/15 07:37:36 matt Exp $ */ /*- * Copyright (c) 2006 Itronix Inc. @@ -104,7 +104,7 @@ void au_intr_disestablish(void *); void au_intr_enable(int); void au_intr_disable(int); -void au_iointr(u_int32_t, u_int32_t, u_int32_t, u_int32_t); +void au_iointr(int, vaddr_t, uint32_t); void au_cpureg_bus_mem_init(bus_space_tag_t, void *); Index: src/sys/arch/mips/atheros/ar5312_intr.c diff -u src/sys/arch/mips/atheros/ar5312_intr.c:1.6 src/sys/arch/mips/atheros/ar5312_intr.c:1.6.28.1 --- src/sys/arch/mips/atheros/ar5312_intr.c:1.6 Mon Jan 7 07:28:14 2008 +++ src/sys/arch/mips/atheros/ar5312_intr.c Mon Feb 15 07:37:36 2010 @@ -1,4 +1,4 @@ -/* $Id: ar5312_intr.c,v 1.6 2008/01/07 07:28:14 dyoung Exp $ */ +/* $Id: ar5312_intr.c,v 1.6.28.1 2010/02/15 07:37:36 matt Exp $ */ /* * Copyright (c) 2006 Urbana-Champaign Independent Media Center. * Copyright (c) 2006 Garrett D'Amore. @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ar5312_intr.c,v 1.6 2008/01/07 07:28:14 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ar5312_intr.c,v 1.6.28.1 2010/02/15 07:37:36 matt Exp $"); #include <sys/param.h> #include <sys/queue.h> @@ -91,21 +91,19 @@ }; const uint32_t ipl_sr_bits[_IPL_N] = { - 0, /* 0: IPL_NONE */ - MIPS_SOFT_INT_MASK_0, /* 1: IPL_SOFTCLOCK */ - MIPS_SOFT_INT_MASK_0, /* 2: IPL_SOFTNET */ - - MIPS_SOFT_INT_MASK_0 | - MIPS_SOFT_INT_MASK_1 | - MIPS_INT_MASK_0 | - MIPS_INT_MASK_1 | - MIPS_INT_MASK_2 | - MIPS_INT_MASK_3, /* 3: IPL_VM */ - - MIPS_INT_MASK, /* 4: IPL_{SCHED,HIGH} */ + [IPL_NONE] = 0, + [IPL_PREEMPT] = 0, + [IPL_SOFTCLOCK] = MIPS_SOFT_INT_MASK_0, + [IPL_SOFTBIO] = MIPS_SOFT_INT_MASK_0, + [IPL_SOFTNET] = MIPS_SOFT_INT_MASK, + [IPL_SOFTSERIAL] = MIPS_SOFT_INT_MASK, + [IPL_VM] = MIPS_SOFT_INT_MASK | MIPS_INT_MASK_0 + | MIPS_INT_MASK_1 | MIPS_INT_MASK_2 | MIPS_INT_MASK_3, + [IPL_SCHED] = MIPS_INT_MASK, + [IPL_HIGH] = MIPS_INT_MASK, }; -static const char *ar5312_cpuintrnames[NINTRS] = { +static const char * const ar5312_cpuintrnames[NINTRS] = { "int 2 (wlan0)", "int 3 (enet0)", "int 4 (enet1)", @@ -113,7 +111,7 @@ "int 6 (misc)", }; -static const char *ar5312_miscintrnames[NIRQS] = { +static const char * const ar5312_miscintrnames[NIRQS] = { "misc 0 (timer)", "misc 1 (AHBproc error)", "misc 2 (AHBdma error)", @@ -280,24 +278,18 @@ } void -ar531x_cpuintr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending) +ar531x_cpuintr(int ipl, vaddr_t pc, uint32_t ipending) { - uint32_t mask; - int index; struct ar531x_intrhand *ih; /* all others get normal handling */ - for (index = NINTRS - 1; index >= 0; index--) { - mask = MIPS_INT_MASK_0 << index; + for (int index = NINTRS - 1; index >= 0; index--) { + uint32_t mask = MIPS_INT_MASK_0 << index; if (ipending & mask) { ar5312_cpuintrs[index].intr_count.ev_count++; LIST_FOREACH(ih, &ar5312_cpuintrs[index].intr_l, ih_q) (*ih->ih_func)(ih->ih_arg); - cause &= ~mask; } } - - /* re-enable the stuff we processed */ - _splset(MIPS_SR_INT_IE | ((status & ~cause) & MIPS_HARD_INT_MASK)); } Index: src/sys/arch/mips/atheros/ar5315_intr.c diff -u src/sys/arch/mips/atheros/ar5315_intr.c:1.5 src/sys/arch/mips/atheros/ar5315_intr.c:1.5.28.1 --- src/sys/arch/mips/atheros/ar5315_intr.c:1.5 Mon Jan 7 07:12:06 2008 +++ src/sys/arch/mips/atheros/ar5315_intr.c Mon Feb 15 07:37:36 2010 @@ -1,4 +1,4 @@ -/* $Id: ar5315_intr.c,v 1.5 2008/01/07 07:12:06 dyoung Exp $ */ +/* $Id: ar5315_intr.c,v 1.5.28.1 2010/02/15 07:37:36 matt Exp $ */ /* * Copyright (c) 2006 Urbana-Champaign Independent Media Center. * Copyright (c) 2006 Garrett D'Amore. @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ar5315_intr.c,v 1.5 2008/01/07 07:12:06 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ar5315_intr.c,v 1.5.28.1 2010/02/15 07:37:36 matt Exp $"); #include <sys/param.h> #include <sys/queue.h> @@ -89,26 +89,25 @@ }; const uint32_t ipl_sr_bits[_IPL_N] = { - 0, /* 0: IPL_NONE */ - MIPS_SOFT_INT_MASK_0, /* 1: IPL_SOFTCLOCK */ - MIPS_SOFT_INT_MASK_0, /* 2: IPL_SOFTNET */ - - MIPS_SOFT_INT_MASK_0 | - MIPS_SOFT_INT_MASK_1 | - MIPS_INT_MASK_0 | - MIPS_INT_MASK_1 | - MIPS_INT_MASK_2, /* 3: IPL_VM */ - - MIPS_INT_MASK, /* 4: IPL_{SCHED,HIGH} */ + [IPL_NONE] = 0, + [IPL_PREEMPT] = 0, + [IPL_SOFTCLOCK] = MIPS_SOFT_INT_MASK_0, + [IPL_SOFTBIO] = MIPS_SOFT_INT_MASK_0, + [IPL_SOFTNET] = MIPS_SOFT_INT_MASK, + [IPL_SOFTSERIAL] = MIPS_SOFT_INT_MASK, + [IPL_VM] = MIPS_SOFT_INT_MASK | MIPS_INT_MASK_0 + | MIPS_INT_MASK_1 | MIPS_INT_MASK_2, + [IPL_SCHED] = MIPS_INT_MASK, + [IPL_HIGH] = MIPS_INT_MASK, }; -static const char *ar5315_cpuintrnames[NINTRS] = { +static const char * const ar5315_cpuintrnames[NINTRS] = { "int 2 (misc)", "int 3 (wlan)", "int 4 (enet)", }; -static const char *ar5315_miscintrnames[NIRQS] = { +static const char * const ar5315_miscintrnames[NIRQS] = { "misc 0 (uart)", "misc 1 (i2c)", "misc 2 (spi)", @@ -277,24 +276,18 @@ } void -ar531x_cpuintr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending) +ar531x_cpuintr(int ipl, vaddr_t pc, uint32_t ipending) { - uint32_t mask; - int index; struct ar531x_intrhand *ih; /* all others get normal handling */ - for (index = NINTRS - 1; index >= 0; index--) { - mask = MIPS_INT_MASK_0 << index; + for (int index = NINTRS - 1; index >= 0; index--) { + uint32_t mask = MIPS_INT_MASK_0 << index; if (ipending & mask) { ar5315_cpuintrs[index].intr_count.ev_count++; LIST_FOREACH(ih, &ar5315_cpuintrs[index].intr_l, ih_q) (*ih->ih_func)(ih->ih_arg); - cause &= ~mask; } } - - /* re-enable the stuff we processed */ - _splset(MIPS_SR_INT_IE | ((status & ~cause) & MIPS_HARD_INT_MASK)); } Index: src/sys/arch/mips/atheros/include/ar531xvar.h diff -u src/sys/arch/mips/atheros/include/ar531xvar.h:1.5 src/sys/arch/mips/atheros/include/ar531xvar.h:1.5.74.1 --- src/sys/arch/mips/atheros/include/ar531xvar.h:1.5 Tue Sep 26 06:37:32 2006 +++ src/sys/arch/mips/atheros/include/ar531xvar.h Mon Feb 15 07:37:36 2010 @@ -1,4 +1,4 @@ -/* $Id: ar531xvar.h,v 1.5 2006/09/26 06:37:32 gdamore Exp $ */ +/* $Id: ar531xvar.h,v 1.5.74.1 2010/02/15 07:37:36 matt Exp $ */ /* * Copyright (c) 2006 Urbana-Champaign Independent Media Center. * Copyright (c) 2006 Garrett D'Amore. @@ -66,7 +66,7 @@ void *ar531x_misc_intr_establish(int, int (*)(void *), void *); void ar531x_misc_intr_disestablish(void *); -void ar531x_cpuintr(uint32_t, uint32_t, uint32_t, uint32_t); +void ar531x_cpuintr(int, vaddr_t, uint32_t); /* Index: src/sys/arch/mips/rmi/rmixl_intr.c diff -u src/sys/arch/mips/rmi/rmixl_intr.c:1.1.2.10 src/sys/arch/mips/rmi/rmixl_intr.c:1.1.2.11 --- src/sys/arch/mips/rmi/rmixl_intr.c:1.1.2.10 Sat Feb 6 03:10:14 2010 +++ src/sys/arch/mips/rmi/rmixl_intr.c Mon Feb 15 07:37:36 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: rmixl_intr.c,v 1.1.2.10 2010/02/06 03:10:14 cliff Exp $ */ +/* $NetBSD: rmixl_intr.c,v 1.1.2.11 2010/02/15 07:37:36 matt Exp $ */ /*- * Copyright (c) 2007 Ruslan Ermilov and Vsevolod Lobko. @@ -64,7 +64,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rmixl_intr.c,v 1.1.2.10 2010/02/06 03:10:14 cliff Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rmixl_intr.c,v 1.1.2.11 2010/02/15 07:37:36 matt Exp $"); #include "opt_ddb.h" @@ -105,21 +105,13 @@ */ #define _SR_BITS_DFLT (MIPS_INT_MASK_2|MIPS_INT_MASK_3|MIPS_INT_MASK_4) const uint32_t ipl_sr_bits[_IPL_N] = { - [IPL_NONE] = _SR_BITS_DFLT, - [IPL_SOFTCLOCK] = - _SR_BITS_DFLT - | MIPS_SOFT_INT_MASK_0, - [IPL_SOFTNET] = - _SR_BITS_DFLT - | MIPS_SOFT_INT_MASK_0 - | MIPS_SOFT_INT_MASK_1, - [IPL_VM] = - _SR_BITS_DFLT - | MIPS_SOFT_INT_MASK_0 - | MIPS_SOFT_INT_MASK_1 - | MIPS_INT_MASK_0, - [IPL_SCHED] = - MIPS_INT_MASK, + [IPL_NONE] = _SR_BITS_DFLT, + [IPL_PREEMPT] = _SR_BITS_DFLT, + [IPL_SOFTCLOCK] = _SR_BITS_DFLT | MIPS_SOFT_INT_MASK_0, + [IPL_SOFTNET] = _SR_BITS_DFLT | MIPS_SOFT_INT_MASK, + [IPL_VM] = _SR_BITS_DFLT | MIPS_SOFT_INT_MASK | MIPS_INT_MASK_0, + [IPL_SCHED] = MIPS_INT_MASK, + [IPL_HIGH] = MIPS_INT_MASK, }; /* @@ -650,7 +642,7 @@ } void -evbmips_iointr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending) +evbmips_iointr(int ipl, vaddr_t pc, uint32_t ipending) { struct evbmips_intrhand *ih; struct rmixl_intrvec *ivp; @@ -659,8 +651,8 @@ #ifdef IOINTR_DEBUG uint64_t eimr; - printf("%s: status %#x, cause %#x, pc %#x, ipending %#x\n", - __func__, status, cause, pc, ipending); + printf("%s: ipl %d, pc %#x, ipending %#x\n", + __func__, ipl, pc, ipending); asm volatile("dmfc0 %0, $9, 6;" : "=r"(eirr)); asm volatile("dmfc0 %0, $9, 7;" : "=r"(eimr)); @@ -693,13 +685,7 @@ rmixl_irqtab[ih->ih_irq].irq_count.ev_count++; } } - - cause &= ~(MIPS_SOFT_INT_MASK_0 << vec); } - - - /* Re-enable anything that we have processed. */ - _splset(MIPS_SR_INT_IE | ((status & ~cause) & MIPS_HARD_INT_MASK)); } #ifdef DEBUG