From 399158308d91e061c61f799a7558497cd0f7ad57 Mon Sep 17 00:00:00 2001 From: uwe Date: Tue, 4 Nov 2003 03:13:48 +0000 Subject: [PATCH] Redo a quick hack for intc_intr_disable() and intc_intr_enable() to have a saner interface/semantic. --- sys/arch/sh3/include/intr.h | 6 +++--- sys/arch/sh3/sh3/interrupt.c | 34 +++++++++++----------------------- 2 files changed, 14 insertions(+), 26 deletions(-) diff --git a/sys/arch/sh3/include/intr.h b/sys/arch/sh3/include/intr.h index 297fe864b696..42731fc6edf6 100644 --- a/sys/arch/sh3/include/intr.h +++ b/sys/arch/sh3/include/intr.h @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.18 2003/10/18 23:21:35 uwe Exp $ */ +/* $NetBSD: intr.h,v 1.19 2003/11/04 03:13:48 uwe Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -82,8 +82,8 @@ extern struct intc_intrhand __intc_intrhand[]; void intc_init(void); void *intc_intr_establish(int, int, int, int (*)(void *), void *); void intc_intr_disestablish(void *); -void intc_intr_enable(int, int); -int intc_intr_disable(int); +void intc_intr_enable(int); +void intc_intr_disable(int); void intc_intr(int, int, int); /* diff --git a/sys/arch/sh3/sh3/interrupt.c b/sys/arch/sh3/sh3/interrupt.c index 54d26af79c82..d98cd5ae9f64 100644 --- a/sys/arch/sh3/sh3/interrupt.c +++ b/sys/arch/sh3/sh3/interrupt.c @@ -1,4 +1,4 @@ -/* $NetBSD: interrupt.c,v 1.10 2003/11/01 02:24:49 uwe Exp $ */ +/* $NetBSD: interrupt.c,v 1.11 2003/11/04 03:13:48 uwe Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -37,7 +37,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.10 2003/11/01 02:24:49 uwe Exp $"); +__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.11 2003/11/04 03:13:48 uwe Exp $"); #include #include @@ -52,7 +52,7 @@ __KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.10 2003/11/01 02:24:49 uwe Exp $"); #include #include -int intc_intr_priority(int, int); +void intc_intr_priority(int, int); struct intc_intrhand *intc_alloc_ih(void); void intc_free_ih(struct intc_intrhand *); int intc_unknown_intr(void *); @@ -147,36 +147,28 @@ intc_intr_disestablish(void *arg) intc_free_ih(ih); } -int +void intc_intr_disable(int evtcode) { - int oldlevel; int s; s = _cpu_intr_suspend(); KASSERT(EVTCODE_TO_IH_INDEX(evtcode) != 0); /* there is a handler */ - oldlevel = intc_intr_priority(evtcode, 0); + intc_intr_priority(evtcode, 0); _cpu_intr_resume(s); - - return (oldlevel); } void -intc_intr_enable(int evtcode, int level) +intc_intr_enable(int evtcode) { -#ifdef DIAGNOSTIC - int oldlevel; -#endif + struct intc_intrhand *ih; int s; s = _cpu_intr_suspend(); -#ifdef DIAGNOSTIC KASSERT(EVTCODE_TO_IH_INDEX(evtcode) != 0); /* there is a handler */ - oldlevel = intc_intr_priority(evtcode, level); - KASSERT(oldlevel == 0); /* that has been disabled previously */ -#else - (void)intc_intr_priority(evtcode, level); -#endif + ih = EVTCODE_IH(evtcode); + /* ih_level is in the SR.IMASK format */ + intc_intr_priority(evtcode, (ih->ih_level >> 4)); _cpu_intr_resume(s); } @@ -187,12 +179,11 @@ intc_intr_enable(int evtcode, int level) * SH7708, SH7708S, SH7708R, SH7750, SH7750S ... evtcode is INTEVT * SH7709, SH7709A ... evtcode is INTEVT2 */ -int +void intc_intr_priority(int evtcode, int level) { volatile uint16_t *iprreg; int pos; - int oldlevel; uint16_t r; #define __SH_IPR(_sh, _ipr, _pos) \ @@ -286,11 +277,8 @@ intc_intr_priority(int evtcode, int level) #endif r = _reg_read_2(iprreg); - oldlevel = (r >> (pos)) & 0xf; r = (r & ~(0xf << (pos))) | (level << (pos)); _reg_write_2(iprreg, r); - - return (oldlevel); } /*