Module Name:    src
Committed By:   matt
Date:           Tue Feb 23 20:32:33 UTC 2010

Modified Files:
        src/sys/arch/mips/mips [matt-nb5-mips64]: spl.S

Log Message:
Instead of a read-only ipl_sr_bits, define a ipl_sr_map struct and fill that
in the interrupt init routine.  There's a default ipl_sr_map will operate
correctly, but isn't performant.


To generate a diff of this commit:
cvs rdiff -u -r1.1.2.2 -r1.1.2.3 src/sys/arch/mips/mips/spl.S

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/mips/mips/spl.S
diff -u src/sys/arch/mips/mips/spl.S:1.1.2.2 src/sys/arch/mips/mips/spl.S:1.1.2.3
--- src/sys/arch/mips/mips/spl.S:1.1.2.2	Mon Feb 15 07:36:04 2010
+++ src/sys/arch/mips/mips/spl.S	Tue Feb 23 20:32:33 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: spl.S,v 1.1.2.2 2010/02/15 07:36:04 matt Exp $	*/
+/*	$NetBSD: spl.S,v 1.1.2.3 2010/02/23 20:32:33 matt Exp $	*/
 
 /*-
  * Copyright (c) 2009, 2010 The NetBSD Foundation, Inc.
@@ -37,10 +37,24 @@
 #include <mips/asm.h>
 #include <mips/cpuregs.h>
 
-RCSID("$NetBSD: spl.S,v 1.1.2.2 2010/02/15 07:36:04 matt Exp $")
+RCSID("$NetBSD: spl.S,v 1.1.2.3 2010/02/23 20:32:33 matt Exp $")
 
 #include "assym.h"
 
+	.data
+	.globl	_C_LABEL(ipl_sr_map)
+	.type	_C_LABEL(ipl_sr_map),@object
+	.p2align INT_SCALESHIFT
+_C_LABEL(ipl_sr_map):
+	.word	0			/* IPL_NONE */
+	.word	MIPS_SOFT_INT_MASK_0	/* IPL_SOFT{CLOCK,BIO} */
+	.word	MIPS_SOFT_INT_MASK	/* IPL_SOFT{NET,SERIAL} */
+	.word	MIPS_INT_MASK		/* IPL_VM */
+	.word	MIPS_INT_MASK		/* IPL_SCHED */
+#if IPL_SCHED != IPL_HIGH
+	.word	MIPS_INT_MASK		/* IPL_HIGH */
+#endif
+
 	.text
 /*
  * MIPS processor interrupt control
@@ -93,7 +107,7 @@
 #endif /* PARANOIA */
 	#move	a1, zero			# avoid lookup on splx(IPL_NONE)
 	#beq	a0, zero, 1f			# skip fetch
-	PTR_LA	v1, _C_LABEL(ipl_sr_bits)	# get address of table
+	PTR_LA	v1, _C_LABEL(ipl_sr_map)	# get address of table
 	sll	a2, a0, INT_SCALESHIFT		# convert IPL to array offset
 	PTR_ADDU v1, a2				# add to table addr
 	INT_L	a1, (v1)			# load SR bits for this IPL
@@ -113,7 +127,7 @@
 #endif /* PARANOIA */
 2:
 #ifdef PARANOIA
-	PTR_LA	v1, _C_LABEL(ipl_sr_bits)	# get address of table
+	PTR_LA	v1, _C_LABEL(ipl_sr_map)	# get address of table
 	sll	a2, a0, INT_SCALESHIFT		# convert IPL to array offset
 	PTR_ADDU v1, a2				# add to table addr
 	INT_L	a1, (v1)			# load SR bits for this IPL
@@ -128,7 +142,7 @@
 END(_splsw_splx)
 
 STATIC_LEAF(_splsw_spl0)
-	INT_L	v1, _C_LABEL(ipl_sr_bits) + 4*IPL_NONE
+	INT_L	v1, _C_LABEL(ipl_sr_map) + 4*IPL_NONE
 	xor	v1, MIPS_INT_MASK | MIPS_SR_INT_IE # invert and or in IE
 	PTR_L	a3, L_CPU(MIPS_CURLWP)
 	mtc0	zero, MIPS_COP_0_CAUSE		# clear SOFT_INT bits
@@ -187,7 +201,7 @@
 
 STATIC_LEAF(_splsw_splraise)
 	move	a1, a0
-	PTR_LA	v1, _C_LABEL(ipl_sr_bits)
+	PTR_LA	v1, _C_LABEL(ipl_sr_map)
 	sll	a2, a0, INT_SCALESHIFT
 	PTR_ADDU v1, a2
 	INT_L	a0, (v1)
@@ -224,41 +238,41 @@
 END(_splsw_splhigh)
 
 STATIC_LEAF(_splsw_splsched)
-	INT_L	a0, _C_LABEL(ipl_sr_bits) + 4*IPL_SCHED
+	INT_L	a0, _C_LABEL(ipl_sr_map) + 4*IPL_SCHED
 	li	a1, IPL_SCHED
 	b	_splraise
 	 nop
 END(_splsw_splsched)
 
 STATIC_LEAF(_splsw_splvm)
-	INT_L	a0, _C_LABEL(ipl_sr_bits) + 4*IPL_VM
+	INT_L	a0, _C_LABEL(ipl_sr_map) + 4*IPL_VM
 	li	a1, IPL_VM
 	b	_splraise
 END(_splsw_splvm)
 
 STATIC_LEAF(_splsw_splsoftserial)
-	INT_L	a0, _C_LABEL(ipl_sr_bits) + 4*IPL_SOFTSERIAL
+	INT_L	a0, _C_LABEL(ipl_sr_map) + 4*IPL_SOFTSERIAL
 	li	a1, IPL_SOFTSERIAL
 	b	_splraise
 	 nop
 END(_splsw_splsoftserial)
 
 STATIC_LEAF(_splsw_splsoftnet)
-	INT_L	a0, _C_LABEL(ipl_sr_bits) + 4*IPL_SOFTNET
+	INT_L	a0, _C_LABEL(ipl_sr_map) + 4*IPL_SOFTNET
 	li	a1, IPL_SOFTNET
 	b	_splraise
 	 nop
 END(_splsw_splsoftnet)
 
 STATIC_LEAF(_splsw_splsoftbio)
-	INT_L	a0, _C_LABEL(ipl_sr_bits) + 4*IPL_SOFTBIO
+	INT_L	a0, _C_LABEL(ipl_sr_map) + 4*IPL_SOFTBIO
 	li	a1, IPL_SOFTBIO
 	b	_splraise
 	 nop
 END(_splsw_splsoftbio)
 
 STATIC_LEAF(_splsw_splsoftclock)
-	INT_L	a0, _C_LABEL(ipl_sr_bits) + 4*IPL_SOFTCLOCK
+	INT_L	a0, _C_LABEL(ipl_sr_map) + 4*IPL_SOFTCLOCK
 	li	a1, IPL_SOFTCLOCK
 	b	_splraise
 	 nop
@@ -273,7 +287,7 @@
 	beq	v1, zero, 2f			# quick exit if nothing pending
 
 	li	v0, IPL_VM			# start at IPL_VM
-	PTR_LA	ta3, _C_LABEL(ipl_sr_bits) + 4*IPL_VM
+	PTR_LA	ta3, _C_LABEL(ipl_sr_map) + 4*IPL_VM
 	INT_L	ta2, -4(ta3)			# load mask for IPL_SOFTSERIAL
 	xor	ta2, MIPS_INT_MASK		# invert
 	and	v1, ta2				# apply to pending bits
@@ -303,7 +317,7 @@
 	mfc0	t0, MIPS_COP_0_STATUS		# get current status
 	and	t0, MIPS_INT_MASK		# just want INT bits
 
-	PTR_LA	t2, _C_LABEL(ipl_sr_bits)
+	PTR_LA	t2, _C_LABEL(ipl_sr_map)
 	sll	t1, INT_SCALESHIFT		# shift cpl to array index
 	PTR_ADDU t2, t1
 	INT_L	t3, (t2)			# load value

Reply via email to