Module Name:    src
Committed By:   thorpej
Date:           Sat Jan 13 18:42:11 UTC 2024

Modified Files:
        src/sys/arch/m68k/include: vectors.h
        src/sys/arch/m68k/m68k: vectors.c

Log Message:
Provide some vector table override hooks and interfaces needed by the
sun68k platforms.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/m68k/include/vectors.h
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/m68k/m68k/vectors.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/m68k/include/vectors.h
diff -u src/sys/arch/m68k/include/vectors.h:1.1 src/sys/arch/m68k/include/vectors.h:1.2
--- src/sys/arch/m68k/include/vectors.h:1.1	Sat Jan 13 17:10:03 2024
+++ src/sys/arch/m68k/include/vectors.h	Sat Jan 13 18:42:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: vectors.h,v 1.1 2024/01/13 17:10:03 thorpej Exp $	*/
+/*	$NetBSD: vectors.h,v 1.2 2024/01/13 18:42:11 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2024 The NetBSD Foundation, Inc.
@@ -71,7 +71,8 @@
 #define	VECI_rsvd21		21	/* unassigned, reserved */
 #define	VECI_rsvd22		22	/* unassigned, reserved */
 #define	VECI_rsvd23		23	/* unassigned, reserved */
-#define	VECI_SPURIOUS_INTR	24	/* Spurious Interrupt */
+#define	VECI_INTRAV0		24	/* Spurious Interrupt */
+#define	VECI_SPURIOUS_INTR	VECI_INTRAV0
 #define	VECI_INTRAV1		25	/* Level 1 Interrupt Autovector */
 #define	VECI_INTRAV2		26	/* Level 2 Interrupt Autovector */
 #define	VECI_INTRAV3		27	/* Level 3 Interrupt Autovector */
@@ -118,8 +119,8 @@
 #define	VECI_INTRAV(ipl)	((ipl) + VECI_SPURIOUS_INTR)
 #define	VECI_TRAP(x)		((x) + VECI_TRAP0)
 
-#define	VECI_TO_VEC(x)		((x) << 2)
-#define	VEC_TO_VECI(x)		((unsigned int)(x) >> 2)
+#define	VECI_TO_VECO(x)		((x) << 2)
+#define	VECO_TO_VECI(x)		((unsigned int)(x) >> 2)
 
 #ifdef _KERNEL
 
@@ -127,6 +128,8 @@ extern void *vectab[NVECTORS];
 
 void	vec_init(void);
 void	vec_reset(void);
+void	*vec_get_entry(int);
+void	vec_set_entry(int, void *);
 
 #endif /* _KERNEL */
 

Index: src/sys/arch/m68k/m68k/vectors.c
diff -u src/sys/arch/m68k/m68k/vectors.c:1.1 src/sys/arch/m68k/m68k/vectors.c:1.2
--- src/sys/arch/m68k/m68k/vectors.c:1.1	Sat Jan 13 17:10:03 2024
+++ src/sys/arch/m68k/m68k/vectors.c	Sat Jan 13 18:42:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: vectors.c,v 1.1 2024/01/13 17:10:03 thorpej Exp $	*/
+/*	$NetBSD: vectors.c,v 1.2 2024/01/13 18:42:11 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2024 The NetBSD Foundation, Inc.
@@ -29,6 +29,11 @@
  * POSSIBILITY OF SUCH DAMAGE.  
  */
 
+#ifdef _KERNEL_OPT
+#include "opt_compat_netbsd.h"
+#include "opt_compat_sunos.h"
+#endif 
+
 #include <sys/types.h>
 
 #include <machine/cpu.h>
@@ -48,12 +53,12 @@ extern char badtrap[];
 extern char coperr[];
 extern char fmterr[];
 extern char trap0[];
-#ifdef COMPAT_13
+#if defined(COMPAT_13) || defined(COMPAT_SUNOS)
 extern char trap1[];
 #define	TRAP1_HANDLER		trap1
 #else
 #define	TRAP1_HANDLER		illinst
-#endif /* COMPAT_13 */
+#endif /* COMPAT_13 || COMPAT_SUNOS */
 extern char trap2[];
 #ifdef COMPAT_16
 extern char trap3[];
@@ -75,15 +80,39 @@ extern char MACHINE_AV5_HANDLER[];
 extern char MACHINE_AV6_HANDLER[];
 extern char MACHINE_AV7_HANDLER[];
 
-#ifndef __mc68010__
+#ifdef MACHINE_BUSERR_HANDLER
+extern char MACHINE_BUSERR_HANDLER[];
+#endif
+
+#ifdef MACHINE_ADDRERR_HANDLER
+extern char MACHINE_ADDRERR_HANDLER[];
+#endif
+
+#ifdef __mc68010__
+
+#define	BUSERR_HANDLER		MACHINE_BUSERR_HANDLER
+#define	ADDRERR_HANDLER		MACHINE_ADDRERR_HANDLER
+
+#else
 
 #if defined(M68020) || defined(M68030)
-extern char busaddrerr2030[];
+#ifdef MACHINE_BUSERR_HANDLER
+#define	BUSERR_HANDLER2030	MACHINE_BUSERR_HANDLER
+#else
+extern char buserr2030[];
+#define	BUSERR_HANDLER2030	buserr2030
+#endif
+#ifdef MACHINE_ADDRERR_HANDLER
+#define	ADDRERR_HANDLER2030	MACHINE_ADDRERR_HANDLER
+#else
+extern char addrerr2030[];
+#define	ADDRERR_HANDLER2030	addrerr2030
+#endif
 #if defined(M68040) || defined(M68060)
 #define	NEED_FIXUP_2030
 #else
-#define	BUSERR_HANDLER		busaddrerr2030
-#define	ADDRERR_HANDLER		busaddrerr2030
+#define	BUSERR_HANDLER		BUSERR_HANDLER2030
+#define	ADDRERR_HANDLER		ADDRERR_HANDLER2030
 #endif
 #endif /* M68020 || M68030 */
 
@@ -168,6 +197,14 @@ extern char FP_CALL_TOP[], I_CALL_TOP[];
 
 #endif /* __mc68010__ */
 
+#ifndef MACHINE_RESET_SP
+#define	MACHINE_RESET_SP	NULL
+#endif
+
+#ifndef MACHINE_RESET_PC
+#define	MACHINE_RESET_PC	NULL
+#endif
+
 #ifndef BUSERR_HANDLER
 #define	BUSERR_HANDLER		badtrap
 #endif
@@ -221,6 +258,8 @@ extern char FP_CALL_TOP[], I_CALL_TOP[];
 #endif
 
 void *vectab[NVECTORS] = {
+	[VECI_RIISP]		=	MACHINE_RESET_SP,
+	[VECI_RIPC]		=	MACHINE_RESET_PC,
 	[VECI_BUSERR]		=	BUSERR_HANDLER,
 	[VECI_ADDRERR]		=	ADDRERR_HANDLER,
 	[VECI_ILLINST]		=	illinst,
@@ -243,7 +282,7 @@ void *vectab[NVECTORS] = {
 	[VECI_rsvd21]		=	badtrap,
 	[VECI_rsvd22]		=	badtrap,
 	[VECI_rsvd23]		=	badtrap,
-	[VECI_SPURIOUS_INTR]	=	MACHINE_AV0_HANDLER,
+	[VECI_INTRAV0]		=	MACHINE_AV0_HANDLER,
 	[VECI_INTRAV1]		=	MACHINE_AV1_HANDLER,
 	[VECI_INTRAV2]		=	MACHINE_AV2_HANDLER,
 	[VECI_INTRAV3]		=	MACHINE_AV3_HANDLER,
@@ -496,8 +535,8 @@ vec_init(void)
 #ifdef NEED_FIXUP_2030
 	case CPU_68020:
 	case CPU_68030:
-		vectab[VECI_BUSERR]        = busaddrerr2030;
-		vectab[VECI_ADDRERR]       = busaddrerr2030;
+		vectab[VECI_BUSERR]        = BUSERR_HANDLER2030;
+		vectab[VECI_ADDRERR]       = ADDRERR_HANDLER2030;
 		break;
 #endif /* NEED_FIXUP_2030 */
 
@@ -550,3 +589,32 @@ vec_reset(void)
 {
 	setvbr(saved_vbr);
 }
+
+/*
+ * vec_get_entry --
+ *	Get a vector table entry.
+ */
+void *
+vec_get_entry(int vec)
+{
+	KASSERT(vec >= 0);
+	KASSERT(vec < NVECTORS);
+	return vectab[vec];
+}
+
+/*
+ * vec_set_entry --
+ *	Set a vector table entry.
+ */
+void
+vec_set_entry(int vec, void *addr)
+{
+	KASSERT(vec >= 0);
+	KASSERT(vec < NVECTORS);
+	vectab[vec] = addr;
+#if defined(M68040) || defined(M68060)
+	if (cputype == CPU_68040 || cputype == CPU_68060) {
+		DCIS();
+	}
+#endif
+}

Reply via email to