Module Name:    src
Committed By:   kiyohara
Date:           Sat Apr 24 09:39:57 UTC 2010

Modified Files:
        src/sys/arch/bebox/include: intr.h
        src/sys/arch/ibmnws/include: intr.h
        src/sys/arch/mvmeppc/include: intr.h
        src/sys/arch/ofppc/include: intr.h
        src/sys/arch/powerpc/include: cpu.h
        src/sys/arch/powerpc/pic: intr.c picvar.h
        src/sys/arch/powerpc/powerpc: clock.c
        src/sys/arch/prep/include: intr.h
        src/sys/arch/sandpoint/include: intr.h

Log Message:
Support 64-bit imask for powerpc/pic.


To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/bebox/include/intr.h
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/ibmnws/include/intr.h
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/mvmeppc/include/intr.h
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/ofppc/include/intr.h
cvs rdiff -u -r1.69 -r1.70 src/sys/arch/powerpc/include/cpu.h
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/powerpc/pic/intr.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/powerpc/pic/picvar.h
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/powerpc/powerpc/clock.c
cvs rdiff -u -r1.31 -r1.32 src/sys/arch/prep/include/intr.h
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/sandpoint/include/intr.h

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/bebox/include/intr.h
diff -u src/sys/arch/bebox/include/intr.h:1.28 src/sys/arch/bebox/include/intr.h:1.29
--- src/sys/arch/bebox/include/intr.h:1.28	Mon Apr 28 20:23:15 2008
+++ src/sys/arch/bebox/include/intr.h	Sat Apr 24 09:39:56 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: intr.h,v 1.28 2008/04/28 20:23:15 martin Exp $	*/
+/*	$NetBSD: intr.h,v 1.29 2010/04/24 09:39:56 kiyohara Exp $	*/
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -40,7 +40,6 @@
 void enable_intr(void);
 void disable_intr(void);
 
-extern int imask[];
 extern paddr_t bebox_mb_reg;
 
 #define ICU_LEN		32

Index: src/sys/arch/ibmnws/include/intr.h
diff -u src/sys/arch/ibmnws/include/intr.h:1.12 src/sys/arch/ibmnws/include/intr.h:1.13
--- src/sys/arch/ibmnws/include/intr.h:1.12	Mon Apr 28 20:23:26 2008
+++ src/sys/arch/ibmnws/include/intr.h	Sat Apr 24 09:39:57 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: intr.h,v 1.12 2008/04/28 20:23:26 martin Exp $	*/
+/*	$NetBSD: intr.h,v 1.13 2010/04/24 09:39:57 kiyohara Exp $	*/
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -44,7 +44,6 @@
 void enable_intr(void);
 void disable_intr(void);
 
-extern int imask[];
 extern vaddr_t prep_intr_reg;
 extern uint32_t prep_intr_reg_off;
 

Index: src/sys/arch/mvmeppc/include/intr.h
diff -u src/sys/arch/mvmeppc/include/intr.h:1.13 src/sys/arch/mvmeppc/include/intr.h:1.14
--- src/sys/arch/mvmeppc/include/intr.h:1.13	Mon Apr 28 20:23:29 2008
+++ src/sys/arch/mvmeppc/include/intr.h	Sat Apr 24 09:39:57 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: intr.h,v 1.13 2008/04/28 20:23:29 martin Exp $	*/
+/*	$NetBSD: intr.h,v 1.14 2010/04/24 09:39:57 kiyohara Exp $	*/
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -39,7 +39,6 @@
 void enable_intr(void);
 void disable_intr(void);
 
-extern int imask[];
 extern vaddr_t mvmeppc_intr_reg;
 
 #define	ICU_LEN		32

Index: src/sys/arch/ofppc/include/intr.h
diff -u src/sys/arch/ofppc/include/intr.h:1.12 src/sys/arch/ofppc/include/intr.h:1.13
--- src/sys/arch/ofppc/include/intr.h:1.12	Mon Apr 28 20:23:30 2008
+++ src/sys/arch/ofppc/include/intr.h	Sat Apr 24 09:39:57 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: intr.h,v 1.12 2008/04/28 20:23:30 martin Exp $	*/
+/*	$NetBSD: intr.h,v 1.13 2010/04/24 09:39:57 kiyohara Exp $	*/
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -40,7 +40,6 @@
 
 #define ICU_LEN		32
 #define IRQ_SLAVE	2
-extern int imask[];
 
 #endif
 

Index: src/sys/arch/powerpc/include/cpu.h
diff -u src/sys/arch/powerpc/include/cpu.h:1.69 src/sys/arch/powerpc/include/cpu.h:1.70
--- src/sys/arch/powerpc/include/cpu.h:1.69	Thu Mar 18 13:47:05 2010
+++ src/sys/arch/powerpc/include/cpu.h	Sat Apr 24 09:39:57 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.h,v 1.69 2010/03/18 13:47:05 kiyohara Exp $	*/
+/*	$NetBSD: cpu.h,v 1.70 2010/04/24 09:39:57 kiyohara Exp $	*/
 
 /*
  * Copyright (C) 1999 Wolfgang Solfrank.
@@ -74,7 +74,7 @@
 	volatile int ci_cpl;
 	volatile int ci_iactive;
 	volatile int ci_idepth;
-	volatile int ci_ipending;
+	volatile imask_t ci_ipending;
 	int ci_intrdepth;
 	int ci_mtx_oldspl;
 	int ci_mtx_count;

Index: src/sys/arch/powerpc/pic/intr.c
diff -u src/sys/arch/powerpc/pic/intr.c:1.7 src/sys/arch/powerpc/pic/intr.c:1.8
--- src/sys/arch/powerpc/pic/intr.c:1.7	Wed Mar 10 18:28:30 2010
+++ src/sys/arch/powerpc/pic/intr.c	Sat Apr 24 09:39:57 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: intr.c,v 1.7 2010/03/10 18:28:30 kiyohara Exp $ */
+/*	$NetBSD: intr.c,v 1.8 2010/04/24 09:39:57 kiyohara Exp $ */
 
 /*-
  * Copyright (c) 2007 Michael Lorenz
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.7 2010/03/10 18:28:30 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.8 2010/04/24 09:39:57 kiyohara Exp $");
 
 #include "opt_multiprocessor.h"
 
@@ -51,11 +51,6 @@
 
 #define MAX_PICS	8	/* 8 PICs ought to be enough for everyone */
 
-#define NVIRQ		32	/* 32 virtual IRQs */
-#define NIRQ		128	/* up to 128 HW IRQs */
-
-#define HWIRQ_MAX	(NVIRQ - 4 - 1)
-#define HWIRQ_MASK	0x0fffffff
 #define	LEGAL_VIRQ(x)	((x) >= 0 && (x) < NVIRQ)
 
 struct pic_ops *pics[MAX_PICS];
@@ -63,7 +58,7 @@
 int max_base = 0;
 uint8_t	virq[NIRQ];
 int	virq_max = 0;
-int	imask[NIPL];
+imask_t	imask[NIPL];
 int	primary_pic = 0;
 
 static int	fakeintr(void *);
@@ -352,10 +347,10 @@
 
 	/* Then figure out which IRQs use each level. */
 	for (level = 0; level < NIPL; level++) {
-		register int irqs = 0;
+		register imask_t irqs = 0;
 		for (irq = 0, is = intrsources; irq < NVIRQ; irq++, is++)
 			if (is->is_level & (1 << level))
-				irqs |= 1 << irq;
+				irqs |= 1ULL << irq;
 		imask[level] = irqs;
 	}
 
@@ -363,14 +358,14 @@
 	 * IPL_CLOCK should mask clock interrupt even if interrupt handler
 	 * is not registered.
 	 */
-	imask[IPL_CLOCK] |= 1 << SPL_CLOCK;
+	imask[IPL_CLOCK] |= 1ULL << SPL_CLOCK;
 
 	/*
 	 * Initialize soft interrupt masks to block themselves.
 	 */
-	imask[IPL_SOFTCLOCK] = 1 << SIR_CLOCK;
-	imask[IPL_SOFTNET] = 1 << SIR_NET;
-	imask[IPL_SOFTSERIAL] = 1 << SIR_SERIAL;
+	imask[IPL_SOFTCLOCK] = 1ULL << SIR_CLOCK;
+	imask[IPL_SOFTNET] = 1ULL << SIR_NET;
+	imask[IPL_SOFTSERIAL] = 1ULL << SIR_SERIAL;
 
 	/*
 	 * IPL_NONE is used for hardware interrupts that are never blocked,
@@ -419,7 +414,7 @@
 
 	/* And eventually calculate the complete masks. */
 	for (irq = 0, is = intrsources; irq < NVIRQ; irq++, is++) {
-		register int irqs = 1 << irq;
+		register imask_t irqs = 1ULL << irq;
 		for (q = is->is_hand; q; q = q->ih_next)
 			irqs |= imask[q->ih_level];
 		is->is_mask = irqs;
@@ -463,7 +458,7 @@
 
 	msr = mfmsr();
 	mtmsr(msr & ~PSL_EE);
-	ci->ci_ipending |= 1 << v;
+	ci->ci_ipending |= 1ULL << v;
 	mtmsr(msr);
 }
 
@@ -476,7 +471,7 @@
 	struct pic_ops *pic;
 	int irq;
 	int pcpl;
-	int hwpend;
+	imask_t hwpend;
 	int emsr, dmsr;
 
 	if (ci->ci_iactive)
@@ -496,9 +491,10 @@
 	/* Do now unmasked pendings */
 	ci->ci_idepth++;
 	while ((hwpend = (ci->ci_ipending & ~pcpl & HWIRQ_MASK)) != 0) {
-		irq = 31 - cntlzw(hwpend);
+		/* Get most significant pending bit */
+		irq = MS_PENDING(hwpend);
 		KASSERT(irq <= virq_max);
-		ci->ci_ipending &= ~(1 << irq);
+		ci->ci_ipending &= ~(1ULL << irq);
 		if (irq == 0) {
 			printf("VIRQ0");
 			continue;
@@ -536,8 +532,8 @@
 	ci->ci_idepth--;
 
 #ifdef __HAVE_FAST_SOFTINTS
-	if ((ci->ci_ipending & ~pcpl) & (1 << SIR_SERIAL)) {
-		ci->ci_ipending &= ~(1 << SIR_SERIAL);
+	if ((ci->ci_ipending & ~pcpl) & (1ULL << SIR_SERIAL)) {
+		ci->ci_ipending &= ~(1ULL << SIR_SERIAL);
 		splsoftserial();
 		mtmsr(emsr);
 		softintr__run(IPL_SOFTSERIAL);
@@ -546,8 +542,8 @@
 		ci->ci_ev_softserial.ev_count++;
 		goto again;
 	}
-	if ((ci->ci_ipending & ~pcpl) & (1 << SIR_NET)) {
-		ci->ci_ipending &= ~(1 << SIR_NET);
+	if ((ci->ci_ipending & ~pcpl) & (1ULL << SIR_NET)) {
+		ci->ci_ipending &= ~(1ULL << SIR_NET);
 		splsoftnet();
 		mtmsr(emsr);
 		softintr__run(IPL_SOFTNET);
@@ -556,8 +552,8 @@
 		ci->ci_ev_softnet.ev_count++;
 		goto again;
 	}
-	if ((ci->ci_ipending & ~pcpl) & (1 << SIR_CLOCK)) {
-		ci->ci_ipending &= ~(1 << SIR_CLOCK);
+	if ((ci->ci_ipending & ~pcpl) & (1ULL << SIR_CLOCK)) {
+		ci->ci_ipending &= ~(1ULL << SIR_CLOCK);
 		splsoftclock();
 		mtmsr(emsr);
 		softintr__run(IPL_SOFTCLOCK);
@@ -581,7 +577,8 @@
 	struct intr_source *is;
 	struct intrhand *ih;
 	int irq, realirq;
-	int pcpl, msr, r_imen, bail;
+	int pcpl, msr, bail;
+	imask_t r_imen;
 
 	realirq = pic->pic_get_irq(pic, PIC_GET_IRQ);
 	if (realirq == 255)
@@ -612,7 +609,7 @@
 	}
 #endif /* PIC_DEBUG */
 	KASSERT(realirq < pic->pic_numintrs);
-	r_imen = 1 << irq;
+	r_imen = 1ULL << irq;
 	is = &intrsources[irq];
 
 	if ((pcpl & r_imen) != 0) {
@@ -685,7 +682,7 @@
 	__asm volatile("sync; eieio");	/* don't reorder.... */
 
 	ocpl = ci->ci_cpl;
-	ci->ci_cpl = ocpl | ncpl;
+	ci->ci_cpl = ncpl;
 	__asm volatile("sync; eieio");	/* reorder protect */
 	return ocpl;
 }
@@ -726,7 +723,7 @@
 
 	msrsave = mfmsr();
 	mtmsr(msrsave & ~PSL_EE);
-	curcpu()->ci_ipending |= 1 << ipl;
+	curcpu()->ci_ipending |= 1ULL << ipl;
 	mtmsr(msrsave);
 }
 
@@ -734,9 +731,9 @@
 genppc_cpu_configure(void)
 {
 	aprint_normal("biomask %x netmask %x ttymask %x\n",
-	    imask[IPL_BIO] & 0x1fffffff,
-	    imask[IPL_NET] & 0x1fffffff,
-	    imask[IPL_TTY] & 0x1fffffff);
+	    (u_int)imask[IPL_BIO] & 0x1fffffff,
+	    (u_int)imask[IPL_NET] & 0x1fffffff,
+	    (u_int)imask[IPL_TTY] & 0x1fffffff);
 
 	spl0();
 }

Index: src/sys/arch/powerpc/pic/picvar.h
diff -u src/sys/arch/powerpc/pic/picvar.h:1.6 src/sys/arch/powerpc/pic/picvar.h:1.7
--- src/sys/arch/powerpc/pic/picvar.h:1.6	Wed Aug 19 06:22:54 2009
+++ src/sys/arch/powerpc/pic/picvar.h	Sat Apr 24 09:39:57 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: picvar.h,v 1.6 2009/08/19 06:22:54 nisimura Exp $ */
+/*	$NetBSD: picvar.h,v 1.7 2010/04/24 09:39:57 kiyohara Exp $ */
 
 /*-
  * Copyright (c) 2007 Michael Lorenz
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: picvar.h,v 1.6 2009/08/19 06:22:54 nisimura Exp $");
+__KERNEL_RCSID(0, "$NetBSD: picvar.h,v 1.7 2010/04/24 09:39:57 kiyohara Exp $");
 
 #ifndef PIC_VAR_H
 #define PIC_VAR_H
@@ -58,7 +58,7 @@
 	int is_type;
 	int is_level;
 	int is_hwirq;
-	int is_mask;
+	imask_t is_mask;
 	struct intrhand *is_hand;
 	struct pic_ops *is_pic;
 	struct evcnt is_ev;

Index: src/sys/arch/powerpc/powerpc/clock.c
diff -u src/sys/arch/powerpc/powerpc/clock.c:1.7 src/sys/arch/powerpc/powerpc/clock.c:1.8
--- src/sys/arch/powerpc/powerpc/clock.c:1.7	Thu Feb 25 23:31:48 2010
+++ src/sys/arch/powerpc/powerpc/clock.c	Sat Apr 24 09:39:57 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: clock.c,v 1.7 2010/02/25 23:31:48 matt Exp $	*/
+/*	$NetBSD: clock.c,v 1.8 2010/04/24 09:39:57 kiyohara Exp $	*/
 /*      $OpenBSD: clock.c,v 1.3 1997/10/13 13:42:53 pefo Exp $	*/
 
 /*
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.7 2010/02/25 23:31:48 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.8 2010/04/24 09:39:57 kiyohara Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -171,7 +171,7 @@
 		 * Do standard timer interrupt stuff.
 		 * Do softclock stuff only on the last iteration.
 		 */
-		frame->pri = pri | (1 << SIR_CLOCK);
+		frame->pri = pri | (1ULL << SIR_CLOCK);
 		while (--nticks > 0)
 			hardclock(frame);
 		frame->pri = pri;

Index: src/sys/arch/prep/include/intr.h
diff -u src/sys/arch/prep/include/intr.h:1.31 src/sys/arch/prep/include/intr.h:1.32
--- src/sys/arch/prep/include/intr.h:1.31	Mon Apr 28 20:23:33 2008
+++ src/sys/arch/prep/include/intr.h	Sat Apr 24 09:39:57 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: intr.h,v 1.31 2008/04/28 20:23:33 martin Exp $	*/
+/*	$NetBSD: intr.h,v 1.32 2010/04/24 09:39:57 kiyohara Exp $	*/
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -44,7 +44,6 @@
 void enable_intr(void);
 void disable_intr(void);
 
-extern int imask[];
 extern vaddr_t prep_intr_reg;
 extern uint32_t prep_intr_reg_off;
 

Index: src/sys/arch/sandpoint/include/intr.h
diff -u src/sys/arch/sandpoint/include/intr.h:1.16 src/sys/arch/sandpoint/include/intr.h:1.17
--- src/sys/arch/sandpoint/include/intr.h:1.16	Mon Apr 28 20:23:34 2008
+++ src/sys/arch/sandpoint/include/intr.h	Sat Apr 24 09:39:57 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: intr.h,v 1.16 2008/04/28 20:23:34 martin Exp $	*/
+/*	$NetBSD: intr.h,v 1.17 2010/04/24 09:39:57 kiyohara Exp $	*/
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -41,8 +41,6 @@
 void enable_intr(void);
 void disable_intr(void);
 
-extern int imask[];
-
 #define	ICU_LEN			64
 #define IRQ_SLAVE		2
 

Reply via email to