Module Name:    src
Committed By:   bsh
Date:           Fri Mar 11 03:16:14 UTC 2011

Modified Files:
        src/sys/arch/arm/gemini: files.gemini
        src/sys/arch/arm/imx: files.imx31 files.imx51
        src/sys/arch/arm/omap: files.omap2
        src/sys/arch/arm/pic: files.pic pic.c
Added Files:
        src/sys/arch/arm/pic: pic_splfuncs.c

Log Message:
split arch/arm/pic/pic.c so that we can implement more efficient version of 
splfoo() while using pic framework.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/gemini/files.gemini
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/imx/files.imx31
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/imx/files.imx51
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/omap/files.omap2
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/pic/files.pic
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/pic/pic.c
cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/pic/pic_splfuncs.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/arm/gemini/files.gemini
diff -u src/sys/arch/arm/gemini/files.gemini:1.10 src/sys/arch/arm/gemini/files.gemini:1.11
--- src/sys/arch/arm/gemini/files.gemini:1.10	Sun Dec 14 01:57:02 2008
+++ src/sys/arch/arm/gemini/files.gemini	Fri Mar 11 03:16:13 2011
@@ -1,4 +1,4 @@
-#	$NetBSD: files.gemini,v 1.10 2008/12/14 01:57:02 matt Exp $
+#	$NetBSD: files.gemini,v 1.11 2011/03/11 03:16:13 bsh Exp $
 #
 # Configuration info for GEMINI CPU support
 # Based on omap/files.omap2
@@ -38,7 +38,7 @@
 ##file	arch/arm/gemini/gemini_nobyteacc_io.S		obio
 
 # GEMINI interrupt controller
-device	geminiicu: pic
+device	geminiicu: pic, pic_splfuncs
 attach	geminiicu at obio with geminiicu
 file	arch/arm/gemini/gemini_icu.c		geminiicu needs-flag
 

Index: src/sys/arch/arm/imx/files.imx31
diff -u src/sys/arch/arm/imx/files.imx31:1.6 src/sys/arch/arm/imx/files.imx31:1.7
--- src/sys/arch/arm/imx/files.imx31:1.6	Mon Nov 15 18:19:19 2010
+++ src/sys/arch/arm/imx/files.imx31	Fri Mar 11 03:16:13 2011
@@ -1,4 +1,4 @@
-#	$NetBSD: files.imx31,v 1.6 2010/11/15 18:19:19 bsh Exp $
+#	$NetBSD: files.imx31,v 1.7 2011/03/11 03:16:13 bsh Exp $
 #
 # Configuration info for the Freescale i.MX31
 #
@@ -23,7 +23,7 @@
 
 # iMX AdVanced Interrupt Controller
 include "arch/arm/pic/files.pic"
-device	avic: pic
+device	avic: pic, pic_splfuncs
 attach	avic at ahb
 file	arch/arm/imx/imx31_icu.c		avic		needs-flag
 file	arch/arm/arm32/irq_dispatch.S

Index: src/sys/arch/arm/imx/files.imx51
diff -u src/sys/arch/arm/imx/files.imx51:1.2 src/sys/arch/arm/imx/files.imx51:1.3
--- src/sys/arch/arm/imx/files.imx51:1.2	Tue Nov 30 13:05:27 2010
+++ src/sys/arch/arm/imx/files.imx51	Fri Mar 11 03:16:13 2011
@@ -1,4 +1,4 @@
-#	$NetBSD: files.imx51,v 1.2 2010/11/30 13:05:27 bsh Exp $
+#	$NetBSD: files.imx51,v 1.3 2011/03/11 03:16:13 bsh Exp $
 #
 # Configuration info for the Freescale i.MX51
 #
@@ -18,7 +18,7 @@
 
 # iMX51 TrustZone Interrupt Controller
 include "arch/arm/pic/files.pic"
-device	tzic: pic
+device	tzic: pic, pic_splfuncs
 attach	tzic at axi
 file	arch/arm/imx/imx51_tzic.c		tzic	needs-flag
 file	arch/arm/arm32/irq_dispatch.S

Index: src/sys/arch/arm/omap/files.omap2
diff -u src/sys/arch/arm/omap/files.omap2:1.7 src/sys/arch/arm/omap/files.omap2:1.8
--- src/sys/arch/arm/omap/files.omap2:1.7	Sat Feb 26 18:07:18 2011
+++ src/sys/arch/arm/omap/files.omap2	Fri Mar 11 03:16:13 2011
@@ -1,4 +1,4 @@
-#	$NetBSD: files.omap2,v 1.7 2011/02/26 18:07:18 ahoka Exp $
+#	$NetBSD: files.omap2,v 1.8 2011/03/11 03:16:13 bsh Exp $
 #
 # Configuration info for Texas Instruments OMAP2/OMAP3 CPU support
 # Based on xscale/files.pxa2x0
@@ -32,7 +32,7 @@
 file	arch/arm/xscale/pxa2x0_a4x_io.S		obio
 
 # OMAP2 interrupt controller
-device	omapicu: pic
+device	omapicu: pic, pic_splfuncs
 attach	omapicu at obio with omap2icu
 file	arch/arm/omap/omap2_icu.c		(omap2 | omap3) & omapicu
 file	arch/arm/omap/omap2430_intr.c		omap2 & !omapicu

Index: src/sys/arch/arm/pic/files.pic
diff -u src/sys/arch/arm/pic/files.pic:1.2 src/sys/arch/arm/pic/files.pic:1.3
--- src/sys/arch/arm/pic/files.pic:1.2	Sun Apr 27 18:58:45 2008
+++ src/sys/arch/arm/pic/files.pic	Fri Mar 11 03:16:14 2011
@@ -1,7 +1,9 @@
-#	$NetBSD: files.pic,v 1.2 2008/04/27 18:58:45 matt Exp $
+#	$NetBSD: files.pic,v 1.3 2011/03/11 03:16:14 bsh Exp $
 #
 # Configuration info for the common PIC code.
 #
 define	pic
+define	pic_splfuncs
 
 file	arch/arm/pic/pic.c		pic
+file	arch/arm/pic/pic_splfuncs.c	pic & pic_splfuncs

Index: src/sys/arch/arm/pic/pic.c
diff -u src/sys/arch/arm/pic/pic.c:1.7 src/sys/arch/arm/pic/pic.c:1.8
--- src/sys/arch/arm/pic/pic.c:1.7	Tue Feb  1 21:44:27 2011
+++ src/sys/arch/arm/pic/pic.c	Fri Mar 11 03:16:14 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: pic.c,v 1.7 2011/02/01 21:44:27 jakllsch Exp $	*/
+/*	$NetBSD: pic.c,v 1.8 2011/03/11 03:16:14 bsh Exp $	*/
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -28,7 +28,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pic.c,v 1.7 2011/02/01 21:44:27 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pic.c,v 1.8 2011/03/11 03:16:14 bsh Exp $");
 
 #define _INTR_PRIVATE
 #include <sys/param.h>
@@ -158,7 +158,14 @@
 			return ipl_irq_mask;
 
 		irq_mask = __BIT(irq);
-		KASSERT(pic->pic_sources[irq_base + irq] != NULL);
+#if 1
+    		KASSERT(pic->pic_sources[irq_base + irq] != NULL);
+#else
+		if (pic->pic_sources[irq_base + irq] == NULL) {
+			aprint_error("stray interrupt? irq_base=%zu irq=%d\n",
+			    irq_base, irq);
+		} else
+#endif
 		if (pic->pic_sources[irq_base + irq]->is_ipl == ipl)
 			ipl_irq_mask |= irq_mask;
 
@@ -521,47 +528,6 @@
 	free(is, M_INTRSOURCE);
 }
 
-int
-_splraise(int newipl)
-{
-	struct cpu_info * const ci = curcpu();
-	const int oldipl = ci->ci_cpl;
-	KASSERT(newipl < NIPL);
-	if (newipl > ci->ci_cpl)
-		ci->ci_cpl = newipl;
-	return oldipl;
-}
-int
-_spllower(int newipl)
-{
-	struct cpu_info * const ci = curcpu();
-	const int oldipl = ci->ci_cpl;
-	KASSERT(panicstr || newipl <= ci->ci_cpl);
-	if (newipl < ci->ci_cpl) {
-		register_t psw = disable_interrupts(I32_bit);
-		ci->ci_intr_depth++;
-		pic_do_pending_ints(psw, newipl, NULL);
-		ci->ci_intr_depth--;
-		restore_interrupts(psw);
-	}
-	return oldipl;
-}
-
-void
-splx(int savedipl)
-{
-	struct cpu_info * const ci = curcpu();
-	KASSERT(savedipl < NIPL);
-	if (savedipl < ci->ci_cpl) {
-		register_t psw = disable_interrupts(I32_bit);
-		ci->ci_intr_depth++;
-		pic_do_pending_ints(psw, savedipl, NULL);
-		ci->ci_intr_depth--;
-		restore_interrupts(psw);
-	}
-	ci->ci_cpl = savedipl;
-}
-
 void *
 intr_establish(int irq, int ipl, int type, int (*func)(void *), void *arg)
 {

Added files:

Index: src/sys/arch/arm/pic/pic_splfuncs.c
diff -u /dev/null src/sys/arch/arm/pic/pic_splfuncs.c:1.1
--- /dev/null	Fri Mar 11 03:16:14 2011
+++ src/sys/arch/arm/pic/pic_splfuncs.c	Fri Mar 11 03:16:14 2011
@@ -0,0 +1,83 @@
+/*	$NetBSD: pic_splfuncs.c,v 1.1 2011/03/11 03:16:14 bsh Exp $	*/
+/*-
+ * Copyright (c) 2008 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Matt Thomas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: pic_splfuncs.c,v 1.1 2011/03/11 03:16:14 bsh Exp $");
+
+#define _INTR_PRIVATE
+#include <sys/param.h>
+#include <sys/evcnt.h>
+#include <sys/atomic.h>
+#include <sys/malloc.h>
+#include <sys/mallocvar.h>
+#include <sys/atomic.h>
+
+#include <arm/armreg.h>
+#include <arm/cpu.h>
+#include <arm/cpufunc.h>
+
+#include <arm/pic/picvar.h>
+
+
+int
+_splraise(int newipl)
+{
+	struct cpu_info * const ci = curcpu();
+	const int oldipl = ci->ci_cpl;
+	KASSERT(newipl < NIPL);
+	if (newipl > ci->ci_cpl)
+		ci->ci_cpl = newipl;
+	return oldipl;
+}
+int
+_spllower(int newipl)
+{
+	struct cpu_info * const ci = curcpu();
+	const int oldipl = ci->ci_cpl;
+	KASSERT(panicstr || newipl <= ci->ci_cpl);
+	if (newipl < ci->ci_cpl) {
+		register_t psw = disable_interrupts(I32_bit);
+		pic_do_pending_ints(psw, newipl, NULL);
+		restore_interrupts(psw);
+	}
+	return oldipl;
+}
+
+void
+splx(int savedipl)
+{
+	struct cpu_info * const ci = curcpu();
+	KASSERT(savedipl < NIPL);
+	if (savedipl < ci->ci_cpl) {
+		register_t psw = disable_interrupts(I32_bit);
+		pic_do_pending_ints(psw, savedipl, NULL);
+		restore_interrupts(psw);
+	}
+	ci->ci_cpl = savedipl;
+}

Reply via email to