Module Name:    src
Committed By:   thorpej
Date:           Sat Jan 13 23:59:47 UTC 2024

Modified Files:
        src/sys/arch/news68k/conf: files.news68k
        src/sys/arch/news68k/include: cpu.h
        src/sys/arch/news68k/news68k: isr.c isr.h locore.s
Added Files:
        src/sys/arch/news68k/include: vectors.h
Removed Files:
        src/sys/arch/news68k/news68k: vectors.s

Log Message:
Switch news68k over to the common m68k vector table.


To generate a diff of this commit:
cvs rdiff -u -r1.37 -r1.38 src/sys/arch/news68k/conf/files.news68k
cvs rdiff -u -r1.48 -r1.49 src/sys/arch/news68k/include/cpu.h
cvs rdiff -u -r0 -r1.1 src/sys/arch/news68k/include/vectors.h
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/news68k/news68k/isr.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/news68k/news68k/isr.h
cvs rdiff -u -r1.78 -r1.79 src/sys/arch/news68k/news68k/locore.s
cvs rdiff -u -r1.9 -r0 src/sys/arch/news68k/news68k/vectors.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/news68k/conf/files.news68k
diff -u src/sys/arch/news68k/conf/files.news68k:1.37 src/sys/arch/news68k/conf/files.news68k:1.38
--- src/sys/arch/news68k/conf/files.news68k:1.37	Tue Jan  9 04:16:26 2024
+++ src/sys/arch/news68k/conf/files.news68k	Sat Jan 13 23:59:47 2024
@@ -1,4 +1,4 @@
-#	$NetBSD: files.news68k,v 1.37 2024/01/09 04:16:26 thorpej Exp $
+#	$NetBSD: files.news68k,v 1.38 2024/01/13 23:59:47 thorpej Exp $
 
 #	NEWS68K-specific configuration info
 
@@ -29,6 +29,7 @@ file	arch/m68k/m68k/mmu_subr.s
 file	arch/m68k/m68k/pmap_motorola.c
 file	arch/m68k/m68k/procfs_machdep.c		procfs
 file	arch/m68k/m68k/sys_machdep.c
+file	arch/m68k/m68k/vectors.c
 file	arch/m68k/m68k/vm_machdep.c
 file	dev/cons.c
 

Index: src/sys/arch/news68k/include/cpu.h
diff -u src/sys/arch/news68k/include/cpu.h:1.48 src/sys/arch/news68k/include/cpu.h:1.49
--- src/sys/arch/news68k/include/cpu.h:1.48	Fri Jan 12 23:36:29 2024
+++ src/sys/arch/news68k/include/cpu.h	Sat Jan 13 23:59:47 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.h,v 1.48 2024/01/12 23:36:29 thorpej Exp $	*/
+/*	$NetBSD: cpu.h,v 1.49 2024/01/13 23:59:47 thorpej Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -149,15 +149,10 @@ extern u_int intiobase_phys, intiotop_ph
 extern u_int extiobase_phys, extiotop_phys;
 extern u_int intrcnt[];
 
-extern void (*vectab[])(void);
 extern void *romcallvec;
 
 struct frame;
 
-/* locore.s functions */
-void badtrap(void);
-void intrhand_vectored(void);
-
 void doboot(int)
 	__attribute__((__noreturn__));
 void nmihand(struct frame *);

Index: src/sys/arch/news68k/news68k/isr.c
diff -u src/sys/arch/news68k/news68k/isr.c:1.23 src/sys/arch/news68k/news68k/isr.c:1.24
--- src/sys/arch/news68k/news68k/isr.c:1.23	Sat Nov 21 17:55:38 2020
+++ src/sys/arch/news68k/news68k/isr.c	Sat Jan 13 23:59:47 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: isr.c,v 1.23 2020/11/21 17:55:38 thorpej Exp $	*/
+/*	$NetBSD: isr.c,v 1.24 2024/01/13 23:59:47 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: isr.c,v 1.23 2020/11/21 17:55:38 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: isr.c,v 1.24 2024/01/13 23:59:47 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -49,14 +49,16 @@ __KERNEL_RCSID(0, "$NetBSD: isr.c,v 1.23
 
 #include <uvm/uvm_extern.h>
 
+#include <machine/vectors.h>
+
 #include <news68k/news68k/isr.h>
 
-isr_autovec_list_t isr_autovec[NISRAUTOVEC];
-struct	isr_vectored isr_vectored[NISRVECTORED];
+isr_autovec_list_t isr_autovec[NAUTOVECTORS];
+struct	isr_vectored isr_vectored[NUSERVECTORS];
 int idepth;
 
-void set_vector_entry(int, void *);
-void *get_vector_entry(int);
+extern char badtrap[];
+extern char intrhand_vectored[];
 
 void
 isrinit(void)
@@ -64,7 +66,7 @@ isrinit(void)
 	int i;
 
 	/* Initialize the autovector lists. */
-	for (i = 0; i < NISRAUTOVEC; ++i) {
+	for (i = 0; i < NAUTOVECTORS; ++i) {
 		LIST_INIT(&isr_autovec[i]);
 	}
 }
@@ -79,7 +81,7 @@ isrlink_autovec(int (*func)(void *), voi
 	struct isr_autovec *newisr, *curisr;
 	isr_autovec_list_t *list;
 
-	if ((ipl < 0) || (ipl >= NISRAUTOVEC))
+	if ((ipl < 0) || (ipl >= NAUTOVECTORS))
 		panic("isrlink_autovec: bad ipl %d", ipl);
 
 	newisr = kmem_alloc(sizeof(*newisr), KM_SLEEP);
@@ -144,14 +146,14 @@ isrlink_vectored(int (*func)(void *), vo
 {
 	struct isr_vectored *isr;
 
-	if ((ipl < 0) || (ipl >= NISRAUTOVEC))
+	if (ipl < 0 || ipl >= NAUTOVECTORS)
 		panic("isrlink_vectored: bad ipl %d", ipl);
-	if ((vec < ISRVECTORED) || (vec >= ISRVECTORED + NISRVECTORED))
+	if (vec < VECI_USRVEC_START || vec >= NVECTORS)
 		panic("isrlink_vectored: bad vec 0x%x", vec);
 
-	isr = &isr_vectored[vec - ISRVECTORED];
+	isr = &isr_vectored[vec - VECI_USRVEC_START];
 
-	if ((vectab[vec] != badtrap) || (isr->isr_func != NULL))
+	if (vec_get_entry(vec) != badtrap || isr->isr_func != NULL)
 		panic("isrlink_vectored: vec 0x%x not available", vec);
 
 	/* Fill in the new entry. */
@@ -160,7 +162,7 @@ isrlink_vectored(int (*func)(void *), vo
 	isr->isr_ipl = ipl;
 
 	/* Hook into the vector table. */
-	vectab[vec] = intrhand_vectored;
+	vec_set_entry(vec, intrhand_vectored);
 }
 
 /*
@@ -169,15 +171,14 @@ isrlink_vectored(int (*func)(void *), vo
 void
 isrunlink_vectored(int vec)
 {
-
-	if ((vec < ISRVECTORED) || (vec >= ISRVECTORED + NISRVECTORED))
+	if (vec < VECI_USRVEC_START || vec >= NVECTORS)
 		panic("isrunlink_vectored: bad vec 0x%x", vec);
 
-	if (vectab[vec] != intrhand_vectored)
+	if (vec_get_entry(vec) != intrhand_vectored)
 		panic("isrunlink_vectored: not vectored interrupt");
 
-	vectab[vec] = badtrap;
-	memset(&isr_vectored[vec - ISRVECTORED], 0,
+	vec_set_entry(vec, badtrap);
+	memset(&isr_vectored[vec - VECI_USRVEC_START], 0,
 	    sizeof(struct isr_vectored));
 }
 
@@ -193,10 +194,9 @@ isrdispatch_autovec(int evec)
 	int handled = 0, ipl, vec;
 	static int straycount, unexpected;
 
-	vec = (evec & 0xfff) >> 2;
-	if ((vec < ISRAUTOVEC) || (vec >= (ISRAUTOVEC + NISRAUTOVEC)))
-		panic("isrdispatch_autovec: bad vec 0x%x", vec);
-	ipl = vec - ISRAUTOVEC;
+	vec = VECO_TO_VECI(evec & 0xfff);
+	KASSERT(vec >= VECI_INTRAV0 && vec <= VECI_INTRAV7);
+	ipl = vec - VECI_INTRAV0;
 
 	intrcnt[ipl]++;
 	curcpu()->ci_data.cpu_nintr++;
@@ -232,15 +232,15 @@ isrdispatch_vectored(int pc, int evec, v
 	struct isr_vectored *isr;
 	int ipl, vec;
 
-	vec = (evec & 0xfff) >> 2;
+	vec = VECO_TO_VECI(evec & 0xfff);
 	ipl = (getsr() >> 8) & 7;
 
 	intrcnt[ipl]++;
 	curcpu()->ci_data.cpu_nintr++;
 
-	if ((vec < ISRVECTORED) || (vec >= (ISRVECTORED + NISRVECTORED)))
+	if (vec < VECI_USRVEC_START || vec >= NVECTORS)
 		panic("isrdispatch_vectored: bad vec 0x%x", vec);
-	isr = &isr_vectored[vec - ISRVECTORED];
+	isr = &isr_vectored[vec - VECI_USRVEC_START];
 
 	if (isr->isr_func == NULL) {
 		printf("isrdispatch_vectored: no handler for vec 0x%x\n", vec);
@@ -258,29 +258,7 @@ isrdispatch_vectored(int pc, int evec, v
 void
 isrlink_custom(int level, void *handler)
 {
-
-	set_vector_entry(ISRAUTOVEC + level, handler);
-}
-
-/*
- * XXX - could just kill these... [from sun3]
- */
-void
-set_vector_entry(int entry, void *handler)
-{
-
-	if ((entry < 0) || (entry >= NVECTORS))
-		panic("set_vector_entry: setting vector too high or low");
-	vectab[entry] = handler;
-}
-
-void *
-get_vector_entry(int entry)
-{
-
-	if ((entry < 0) || (entry >= NVECTORS))
-		panic("get_vector_entry: setting vector too high or low");
-	return (void *)vectab[entry];
+	vec_set_entry(VECI_INTRAV0 + level, handler);
 }
 
 const uint16_t ipl2psl_table[NIPL] = {

Index: src/sys/arch/news68k/news68k/isr.h
diff -u src/sys/arch/news68k/news68k/isr.h:1.7 src/sys/arch/news68k/news68k/isr.h:1.8
--- src/sys/arch/news68k/news68k/isr.h:1.7	Mon Apr 28 20:23:30 2008
+++ src/sys/arch/news68k/news68k/isr.h	Sat Jan 13 23:59:47 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: isr.h,v 1.7 2008/04/28 20:23:30 martin Exp $	*/
+/*	$NetBSD: isr.h,v 1.8 2024/01/13 23:59:47 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -32,22 +32,6 @@
 #include <sys/queue.h>
 
 /*
- * The location and size of the autovectored interrupt portion
- * of the vector table.
- */
-#define ISRAUTOVEC	0x18
-#define NISRAUTOVEC	8
-
-#define NVECTORS	(ISRAUTOVEC + NISRAUTOVEC)
-
-/*
- * The location and size of the vectored interrupt portion
- * of the vector table.
- */
-#define ISRVECTORED	0x40
-#define NISRVECTORED	192
-
-/*
  * Autovectored interrupt handler cookie.
  */
 struct isr_autovec {

Index: src/sys/arch/news68k/news68k/locore.s
diff -u src/sys/arch/news68k/news68k/locore.s:1.78 src/sys/arch/news68k/news68k/locore.s:1.79
--- src/sys/arch/news68k/news68k/locore.s:1.78	Fri Jan 12 23:36:29 2024
+++ src/sys/arch/news68k/news68k/locore.s	Sat Jan 13 23:59:47 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: locore.s,v 1.78 2024/01/12 23:36:29 thorpej Exp $	*/
+/*	$NetBSD: locore.s,v 1.79 2024/01/13 23:59:47 thorpej Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -67,15 +67,9 @@
 	.space	PAGE_SIZE
 ASLOCAL(tmpstk)
 
-ASLOCAL(monitor_vbr)
-	.long	0
-
 ASLOCAL(monitor)
 	.long	0
 
-#include <news68k/news68k/vectors.s>
-
-
 /*
  * Macro to relocate a symbol, used before MMU is enabled.
  */
@@ -254,11 +248,6 @@ Lnot1200:
 	movl	#CTRL_LED1700,%a0@	| CTRL_LED port for news1700
 Lcom030:
 
-	RELOC(vectab,%a0)
-	RELOC(busaddrerr2030,%a1)
-	movl	%a1,%a0@(8)
-	movl	%a1,%a0@(12)
-
 	movl	%d4,%d1
 	addl	%a5,%d1
 	moveq	#PGSHIFT,%d2
@@ -341,12 +330,6 @@ Lstart2:
  * Enable the MMU.
  * Since the kernel is mapped logical == physical, we just turn it on.
  */
-	movc	%vbr,%d0		| Preserve monitor's VBR address
-	movl	%d0,_ASM_LABEL(monitor_vbr)
-
-	movl	#_C_LABEL(vectab),%d0	| get our VBR address
-	movc	%d0,%vbr
-
 	RELOC(Sysseg_pa, %a0)		| system segment table addr
 	movl	%a0@,%d1		| read value (a PA)
 	RELOC(mmutype, %a0)
@@ -392,7 +375,8 @@ Lmotommu2:
  * Should be running mapped from this point on
  */
 Lenab1:
-	lea	_ASM_LABEL(tmpstk),%sp	| temporary stack
+	lea	_ASM_LABEL(tmpstk),%sp	| re-load temporary stack
+	jbsr	_C_LABEL(vec_init)	| initialize vector table
 /* call final pmap setup */
 	jbsr	_C_LABEL(pmap_bootstrap_finalize)
 /* set kernel stack, user SP */
@@ -925,7 +909,7 @@ Lnocache5:
 	movl	_C_LABEL(bootdev),%d6	| load bootdev
 	movl	%sp@(4),%d2		| arg
 	movl	_C_LABEL(ctrl_power),%a0| CTRL_POWER port
-	movl	_ASM_LABEL(monitor_vbr),%d3	| Fetch original VBR value
+	movl	_C_LABEL(saved_vbr),%d3	| Fetch original VBR value
 	lea	_ASM_LABEL(tmpstk),%sp	| physical SP in case of NMI
 	movl	#0,%a7@-		| value for pmove to TC (turn off MMU)
 	pmove	%a7@,%tc		| disable MMU

Added files:

Index: src/sys/arch/news68k/include/vectors.h
diff -u /dev/null src/sys/arch/news68k/include/vectors.h:1.1
--- /dev/null	Sat Jan 13 23:59:47 2024
+++ src/sys/arch/news68k/include/vectors.h	Sat Jan 13 23:59:47 2024
@@ -0,0 +1,50 @@
+/*	$NetBSD: vectors.h,v 1.1 2024/01/13 23:59:47 thorpej Exp $	*/
+
+/*-
+ * Copyright (c) 2024 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jason R. Thorpe.
+ *
+ * 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.
+ */
+
+#ifndef _NEWS68K_VECTORS_H_
+#define	_NEWS68K_VECTORS_H_
+
+#ifdef _KERNEL
+
+#include <m68k/vectors.h>
+
+#define	MACHINE_AV0_HANDLER	spurintr
+#define	MACHINE_AV1_HANDLER	lev1intr
+#define	MACHINE_AV2_HANDLER	intrhand_autovec
+#define	MACHINE_AV3_HANDLER	lev3intr
+#define	MACHINE_AV4_HANDLER	lev4intr
+#define	MACHINE_AV5_HANDLER	intrhand_autovec
+#define	MACHINE_AV6_HANDLER	intrhand_autovec
+#define	MACHINE_AV7_HANDLER	intrhand_autovec
+
+#endif /* _KERNEL */
+
+#endif /* _NEWS68K_VECTORS_H_ */

Reply via email to