Module Name: src
Committed By: thorpej
Date: Sat Jan 13 17:10:03 UTC 2024
Added Files:
src/sys/arch/m68k/include: vectors.h
src/sys/arch/m68k/m68k: vectors.c
Log Message:
Add a common vector table implementation for m68k platforms.
To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 src/sys/arch/m68k/include/vectors.h
cvs rdiff -u -r0 -r1.1 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.
Added files:
Index: src/sys/arch/m68k/include/vectors.h
diff -u /dev/null src/sys/arch/m68k/include/vectors.h:1.1
--- /dev/null Sat Jan 13 17:10:03 2024
+++ src/sys/arch/m68k/include/vectors.h Sat Jan 13 17:10:03 2024
@@ -0,0 +1,133 @@
+/* $NetBSD: vectors.h,v 1.1 2024/01/13 17:10:03 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 _M68K_VECTORS_H_
+#define _M68K_VECTORS_H_
+
+/*
+ * Vector numbers (*4 for byte offset into table).
+ *
+ * VECI_RIISP and VECI_RIPC are fetched using Supervisor Program
+ * space. The rest, Supervisor Data space.
+ *
+ * VECI_PMMU_ILLOP and VECI_PMMU_ACCESS are defined for the 68020, but
+ * not used on the 68030.
+ *
+ * VECI_CPV and VECI_PMMU_CONF are defined for the 68020 and 68030, but
+ * not used on the 68040 or 68060.
+ *
+ * VECI_UNIMP_FP_DATA, VECI_UNIMP_EA and VECI_UNIMP_II are defined for
+ * the 68060 and reserved on all other processors.
+ */
+#define VECI_RIISP 0 /* Reset Initial Interrupt SP */
+#define VECI_RIPC 1 /* Reset Initial PC */
+#define VECI_BUSERR 2 /* Bus Error */
+#define VECI_ADDRERR 3 /* Address Error */
+#define VECI_ILLINST 4 /* Illegal Instruction */
+#define VECI_ZERODIV 5 /* Zero Divide */
+#define VECI_CHK 6 /* CHK, CHK2 instruction */
+#define VECI_TRAPcc 7 /* cpTRAPcc, TRAPcc, TRAPV */
+#define VECI_PRIV 8 /* Privilege Violation */
+#define VECI_TRACE 9 /* Trace */
+#define VECI_LINE1010 10 /* Line 1010 Emulator */
+#define VECI_LINE1111 11 /* Line 1111 Emulator */
+#define VECI_rsvd12 12 /* unassigned, reserved */
+#define VECI_CPV 13 /* Coprocessor Prototol Violation */
+#define VECI_FORMATERR 14 /* Format Error */
+#define VECI_UNINT_INTR 15 /* Uninitialized Interrupt */
+#define VECI_rsvd16 16 /* unassigned, reserved */
+#define VECI_rsvd17 17 /* unassigned, reserved */
+#define VECI_rsvd18 18 /* unassigned, reserved */
+#define VECI_rsvd19 19 /* unassigned, reserved */
+#define VECI_rsvd20 20 /* unassigned, reserved */
+#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_INTRAV1 25 /* Level 1 Interrupt Autovector */
+#define VECI_INTRAV2 26 /* Level 2 Interrupt Autovector */
+#define VECI_INTRAV3 27 /* Level 3 Interrupt Autovector */
+#define VECI_INTRAV4 28 /* Level 4 Interrupt Autovector */
+#define VECI_INTRAV5 29 /* Level 5 Interrupt Autovector */
+#define VECI_INTRAV6 30 /* Level 6 Interrupt Autovector */
+#define VECI_INTRAV7 31 /* Level 7 Interrupt Autovector */
+#define VECI_TRAP0 32 /* Trap #0 instruction */
+#define VECI_TRAP1 33 /* Trap #1 instruction */
+#define VECI_TRAP2 34 /* Trap #2 instruction */
+#define VECI_TRAP3 35 /* Trap #3 instruction */
+#define VECI_TRAP4 36 /* Trap #4 instruction */
+#define VECI_TRAP5 37 /* Trap #5 instruction */
+#define VECI_TRAP6 38 /* Trap #6 instruction */
+#define VECI_TRAP7 39 /* Trap #7 instruction */
+#define VECI_TRAP8 40 /* Trap #8 instruction */
+#define VECI_TRAP9 41 /* Trap #9 instruction */
+#define VECI_TRAP10 42 /* Trap #10 instruction */
+#define VECI_TRAP11 43 /* Trap #11 instruction */
+#define VECI_TRAP12 44 /* Trap #12 instruction */
+#define VECI_TRAP13 45 /* Trap #13 instruction */
+#define VECI_TRAP14 46 /* Trap #14 instruction */
+#define VECI_TRAP15 47 /* Trap #15 instruction */
+#define VECI_FP_BSUN 48 /* FPCP Branch or Set on Unordered */
+#define VECI_FP_INEX 49 /* FPCP Inexact Result */
+#define VECI_FP_DZ 50 /* FPCP Divide by Zero */
+#define VECI_FP_UNFL 51 /* FPCP Underflow */
+#define VECI_FP_OPERR 52 /* FPCP Operand Error */
+#define VECI_FP_OVFL 53 /* FPCP Overflow */
+#define VECI_FP_SNAN 54 /* FPCP Signalling NaN */
+#define VECI_UNIMP_FP_DATA 55 /* FP Unimplemented Data Type */
+#define VECI_PMMU_CONF 56 /* PMMU Configuration */
+#define VECI_PMMU_ILLOP 57 /* PMMU Illegal Operation */
+#define VECI_PMMU_ACCESS 58 /* PMMU Access Level Violation */
+#define VECI_rsvd59 59 /* unassigned, reserved */
+#define VECI_UNIMP_EA 60 /* Unimplemented Effective Address */
+#define VECI_UNIMP_II 61 /* Umimplemented Integer Instruction */
+#define VECI_rsvd62 62 /* unassigned, reserved */
+#define VECI_rsvd63 63 /* unassigned, reserved */
+#define VECI_USRVEC_START 64 /* User defined vectors (192) */
+
+#define NVECTORS 256
+
+#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)
+
+#ifdef _KERNEL
+
+extern void *vectab[NVECTORS];
+
+void vec_init(void);
+void vec_reset(void);
+
+#endif /* _KERNEL */
+
+#endif /* _M68K_VECTORS_H_ */
Index: src/sys/arch/m68k/m68k/vectors.c
diff -u /dev/null src/sys/arch/m68k/m68k/vectors.c:1.1
--- /dev/null Sat Jan 13 17:10:03 2024
+++ src/sys/arch/m68k/m68k/vectors.c Sat Jan 13 17:10:03 2024
@@ -0,0 +1,552 @@
+/* $NetBSD: vectors.c,v 1.1 2024/01/13 17:10:03 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.
+ */
+
+#include <sys/types.h>
+
+#include <machine/cpu.h>
+#include <machine/vectors.h>
+
+#include <m68k/cacheops.h>
+#include <m68k/frame.h>
+
+extern char illinst[];
+extern char zerodiv[];
+extern char chkinst[];
+extern char trapvinst[];
+extern char privinst[];
+extern char trace[];
+extern char fpfline[];
+extern char badtrap[];
+extern char coperr[];
+extern char fmterr[];
+extern char trap0[];
+#ifdef COMPAT_13
+extern char trap1[];
+#define TRAP1_HANDLER trap1
+#else
+#define TRAP1_HANDLER illinst
+#endif /* COMPAT_13 */
+extern char trap2[];
+#ifdef COMPAT_16
+extern char trap3[];
+#define TRAP3_HANDLER trap3
+#else
+#define TRAP3_HANDLER illinst
+#endif /* COMPAT_16 */
+extern char trap12[];
+extern char trap15[];
+extern char fpfault[];
+extern char fpunsupp[];
+
+extern char MACHINE_AV0_HANDLER[];
+extern char MACHINE_AV1_HANDLER[];
+extern char MACHINE_AV2_HANDLER[];
+extern char MACHINE_AV3_HANDLER[];
+extern char MACHINE_AV4_HANDLER[];
+extern char MACHINE_AV5_HANDLER[];
+extern char MACHINE_AV6_HANDLER[];
+extern char MACHINE_AV7_HANDLER[];
+
+#ifndef __mc68010__
+
+#if defined(M68020) || defined(M68030)
+extern char busaddrerr2030[];
+#if defined(M68040) || defined(M68060)
+#define NEED_FIXUP_2030
+#else
+#define BUSERR_HANDLER busaddrerr2030
+#define ADDRERR_HANDLER busaddrerr2030
+#endif
+#endif /* M68020 || M68030 */
+
+#if defined(M68040)
+extern char buserr40[], addrerr4060[];
+#ifdef FPSP
+extern char bsun[], inex[], dz[], unfl[], operr[], ovfl[], snan[];
+#define FP_BSUN_HANDLER40 bsun
+#define FP_INEX_HANDLER40 inex
+#define FP_DZ_HANDLER40 dz
+#define FP_UNFL_HANDLER40 unfl
+#define FP_OPERR_HANDLER40 operr
+#define FP_OVFL_HANDLER40 ovfl
+#define FP_SNAN_HANDLER40 snan
+#else
+#define FP_BSUN_HANDLER40 fpfault
+#define FP_INEX_HANDLER40 fpfault
+#define FP_DZ_HANDLER40 fpfault
+#define FP_UNFL_HANDLER40 fpfault
+#define FP_OPERR_HANDLER40 fpfault
+#define FP_OVFL_HANDLER40 fpfault
+#define FP_SNAN_HANDLER40 fpfault
+#endif
+#if defined(M68020) || defined(M68030) || defined(M68060)
+#define NEED_FIXUP_40
+#else
+#define BUSERR_HANDLER buserr40
+#define ADDRERR_HANDLER addrerr4060
+#define FP_BSUN_HANDLER FP_BSUN_HANDLER40
+#define FP_INEX_HANDLER FP_INEX_HANDLER40
+#define FP_DZ_HANDLER FP_DZ_HANDLER40
+#define FP_UNFL_HANDLER FP_UNFL_HANDLER40
+#define FP_OPERR_HANDLER FP_OPERR_HANDLER40
+#define FP_OVFL_HANDLER FP_OVFL_HANDLER40
+#define FP_SNAN_HANDLER FP_SNAN_HANDLER40
+#endif
+#endif /* M68040 */
+
+#if defined(M68060)
+extern char buserr60[], addrerr4060[];
+#ifdef M060SP
+extern char FP_CALL_TOP[], I_CALL_TOP[];
+#define LINE111_HANDLER60 &FP_CALL_TOP[128 + 0x30]
+#define FP_INEX_HANDLER60 &FP_CALL_TOP[128 + 0x28]
+#define FP_DZ_HANDLER60 &FP_CALL_TOP[128 + 0x20]
+#define FP_UNFL_HANDLER60 &FP_CALL_TOP[128 + 0x18]
+#define FP_OPERR_HANDLER60 &FP_CALL_TOP[128 + 0x08]
+#define FP_OVFL_HANDLER60 &FP_CALL_TOP[128 + 0x10]
+#define FP_SNAN_HANDLER60 &FP_CALL_TOP[128 + 0x00]
+#define UNIMP_FP_DATA_HANDLER60 &FP_CALL_TOP[128 + 0x38]
+#define UNIMP_EA_HANDLER60 &FP_CALL_TOP[128 + 0x40]
+#define UNIMP_II_HANDLER60 &I_CALL_TOP[128 + 0x00]
+#else
+#define LINE111_HANDLER60 fpfline
+#define FP_INEX_HANDLER60 fpfault
+#define FP_DZ_HANDLER60 fpfault
+#define FP_UNFL_HANDLER60 fpfault
+#define FP_OPERR_HANDLER60 fpfault
+#define FP_OVFL_HANDLER60 fpfault
+#define FP_SNAN_HANDLER60 fpfault
+#define UNIMP_FP_DATA_HANDLER60 fpunsupp
+#define UNIMP_EA_HANDLER60 badtrap /* XXX illinst? */
+#define UNIMP_II_HANDLER60 illinst
+#endif
+#if defined(M68020) || defined(M68030) || defined(M68040)
+#define NEED_FIXUP_60
+#else
+#define BUSERR_HANDLER buserr60
+#define ADDRERR_HANDLER addrerr4060
+#define LINE111_HANDLER LINE111_HANDLER60
+#define FP_INEX_HANDLER FP_INEX_HANDLER60
+#define FP_DZ_HANDLER FP_DZ_HANDLER60
+#define FP_UNFL_HANDLER FP_UNFL_HANDLER60
+#define FP_OPERR_HANDLER FP_OPERR_HANDLER60
+#define FP_OVFL_HANDLER FP_OVFL_HANDLER60
+#define FP_SNAN_HANDLER FP_SNAN_HANDLER60
+#define UNIMP_FP_DATA_HANDLER UNIMP_FP_DATA_HANDLER60
+#define UNIMP_EA_HANDLER UNIMP_EA_HANDLER60
+#define UNIMP_II_HANDLER UNIMP_II_HANDLER60
+#endif
+#endif /* M68060 */
+
+#endif /* __mc68010__ */
+
+#ifndef BUSERR_HANDLER
+#define BUSERR_HANDLER badtrap
+#endif
+
+#ifndef ADDRERR_HANDLER
+#define ADDRERR_HANDLER badtrap
+#endif
+
+#ifndef LINE1111_HANDLER
+#define LINE1111_HANDLER fpfline
+#endif
+
+#ifndef FP_BSUN_HANDLER
+#define FP_BSUN_HANDLER fpfault
+#endif
+
+#ifndef FP_INEX_HANDLER
+#define FP_INEX_HANDLER fpfault
+#endif
+
+#ifndef FP_DZ_HANDLER
+#define FP_DZ_HANDLER fpfault
+#endif
+
+#ifndef FP_UNFL_HANDLER
+#define FP_UNFL_HANDLER fpfault
+#endif
+
+#ifndef FP_OPERR_HANDLER
+#define FP_OPERR_HANDLER fpfault
+#endif
+
+#ifndef FP_OVFL_HANDLER
+#define FP_OVFL_HANDLER fpfault
+#endif
+
+#ifndef FP_SNAN_HANDLER
+#define FP_SNAN_HANDLER fpfault
+#endif
+
+#ifndef UNIMP_FP_DATA_HANDLER
+#define UNIMP_FP_DATA_HANDLER fpunsupp
+#endif
+
+#ifndef UNIMP_EA_HANDLER
+#define UNIMP_EA_HANDLER badtrap
+#endif
+
+#ifndef UNIMP_II_HANDLER
+#define UNIMP_II_HANDLER badtrap
+#endif
+
+void *vectab[NVECTORS] = {
+ [VECI_BUSERR] = BUSERR_HANDLER,
+ [VECI_ADDRERR] = ADDRERR_HANDLER,
+ [VECI_ILLINST] = illinst,
+ [VECI_ZERODIV] = zerodiv,
+ [VECI_CHK] = chkinst,
+ [VECI_TRAPcc] = trapvinst,
+ [VECI_PRIV] = privinst,
+ [VECI_TRACE] = trace,
+ [VECI_LINE1010] = illinst,
+ [VECI_LINE1111] = LINE1111_HANDLER,
+ [VECI_rsvd12] = badtrap,
+ [VECI_CPV] = coperr,
+ [VECI_FORMATERR] = fmterr,
+ [VECI_UNINT_INTR] = badtrap,
+ [VECI_rsvd16] = badtrap,
+ [VECI_rsvd17] = badtrap,
+ [VECI_rsvd18] = badtrap,
+ [VECI_rsvd19] = badtrap,
+ [VECI_rsvd20] = badtrap,
+ [VECI_rsvd21] = badtrap,
+ [VECI_rsvd22] = badtrap,
+ [VECI_rsvd23] = badtrap,
+ [VECI_SPURIOUS_INTR] = MACHINE_AV0_HANDLER,
+ [VECI_INTRAV1] = MACHINE_AV1_HANDLER,
+ [VECI_INTRAV2] = MACHINE_AV2_HANDLER,
+ [VECI_INTRAV3] = MACHINE_AV3_HANDLER,
+ [VECI_INTRAV4] = MACHINE_AV4_HANDLER,
+ [VECI_INTRAV5] = MACHINE_AV5_HANDLER,
+ [VECI_INTRAV6] = MACHINE_AV6_HANDLER,
+ [VECI_INTRAV7] = MACHINE_AV7_HANDLER,
+ [VECI_TRAP0] = trap0, /* syscalls */
+ [VECI_TRAP1] = TRAP1_HANDLER, /* 1.3 sigreturn */
+ [VECI_TRAP2] = trap2, /* trace */
+ [VECI_TRAP3] = TRAP3_HANDLER, /* 1.6 sigreturn */
+ [VECI_TRAP4] = illinst,
+ [VECI_TRAP5] = illinst,
+ [VECI_TRAP6] = illinst,
+ [VECI_TRAP7] = illinst,
+ [VECI_TRAP8] = illinst,
+ [VECI_TRAP9] = illinst,
+ [VECI_TRAP10] = illinst,
+ [VECI_TRAP11] = illinst,
+ [VECI_TRAP12] = trap12,
+ [VECI_TRAP13] = illinst,
+ [VECI_TRAP14] = illinst,
+ [VECI_TRAP15] = trap15,
+ [VECI_FP_BSUN] = FP_BSUN_HANDLER,
+ [VECI_FP_INEX] = FP_INEX_HANDLER,
+ [VECI_FP_DZ] = FP_DZ_HANDLER,
+ [VECI_FP_UNFL] = FP_UNFL_HANDLER,
+ [VECI_FP_OPERR] = FP_OPERR_HANDLER,
+ [VECI_FP_OVFL] = FP_OVFL_HANDLER,
+ [VECI_FP_SNAN] = FP_SNAN_HANDLER,
+ [VECI_UNIMP_FP_DATA] = UNIMP_FP_DATA_HANDLER,
+ [VECI_PMMU_CONF] = badtrap,
+ [VECI_PMMU_ILLOP] = badtrap,
+ [VECI_PMMU_ACCESS] = badtrap,
+ [VECI_rsvd59] = badtrap,
+ [VECI_UNIMP_EA] = UNIMP_EA_HANDLER,
+ [VECI_UNIMP_II] = UNIMP_II_HANDLER,
+ [VECI_rsvd62] = badtrap,
+ [VECI_rsvd63] = badtrap,
+ [VECI_USRVEC_START+0] = badtrap,
+ [VECI_USRVEC_START+1] = badtrap,
+ [VECI_USRVEC_START+2] = badtrap,
+ [VECI_USRVEC_START+3] = badtrap,
+ [VECI_USRVEC_START+4] = badtrap,
+ [VECI_USRVEC_START+5] = badtrap,
+ [VECI_USRVEC_START+6] = badtrap,
+ [VECI_USRVEC_START+7] = badtrap,
+ [VECI_USRVEC_START+8] = badtrap,
+ [VECI_USRVEC_START+9] = badtrap,
+ [VECI_USRVEC_START+10] = badtrap,
+ [VECI_USRVEC_START+11] = badtrap,
+ [VECI_USRVEC_START+12] = badtrap,
+ [VECI_USRVEC_START+13] = badtrap,
+ [VECI_USRVEC_START+14] = badtrap,
+ [VECI_USRVEC_START+15] = badtrap,
+ [VECI_USRVEC_START+16] = badtrap,
+ [VECI_USRVEC_START+17] = badtrap,
+ [VECI_USRVEC_START+18] = badtrap,
+ [VECI_USRVEC_START+19] = badtrap,
+ [VECI_USRVEC_START+20] = badtrap,
+ [VECI_USRVEC_START+21] = badtrap,
+ [VECI_USRVEC_START+22] = badtrap,
+ [VECI_USRVEC_START+23] = badtrap,
+ [VECI_USRVEC_START+24] = badtrap,
+ [VECI_USRVEC_START+25] = badtrap,
+ [VECI_USRVEC_START+26] = badtrap,
+ [VECI_USRVEC_START+27] = badtrap,
+ [VECI_USRVEC_START+28] = badtrap,
+ [VECI_USRVEC_START+29] = badtrap,
+ [VECI_USRVEC_START+30] = badtrap,
+ [VECI_USRVEC_START+31] = badtrap,
+ [VECI_USRVEC_START+32] = badtrap,
+ [VECI_USRVEC_START+33] = badtrap,
+ [VECI_USRVEC_START+34] = badtrap,
+ [VECI_USRVEC_START+35] = badtrap,
+ [VECI_USRVEC_START+36] = badtrap,
+ [VECI_USRVEC_START+37] = badtrap,
+ [VECI_USRVEC_START+38] = badtrap,
+ [VECI_USRVEC_START+39] = badtrap,
+ [VECI_USRVEC_START+40] = badtrap,
+ [VECI_USRVEC_START+41] = badtrap,
+ [VECI_USRVEC_START+42] = badtrap,
+ [VECI_USRVEC_START+43] = badtrap,
+ [VECI_USRVEC_START+44] = badtrap,
+ [VECI_USRVEC_START+45] = badtrap,
+ [VECI_USRVEC_START+46] = badtrap,
+ [VECI_USRVEC_START+47] = badtrap,
+ [VECI_USRVEC_START+48] = badtrap,
+ [VECI_USRVEC_START+49] = badtrap,
+ [VECI_USRVEC_START+50] = badtrap,
+ [VECI_USRVEC_START+51] = badtrap,
+ [VECI_USRVEC_START+52] = badtrap,
+ [VECI_USRVEC_START+53] = badtrap,
+ [VECI_USRVEC_START+54] = badtrap,
+ [VECI_USRVEC_START+55] = badtrap,
+ [VECI_USRVEC_START+56] = badtrap,
+ [VECI_USRVEC_START+57] = badtrap,
+ [VECI_USRVEC_START+58] = badtrap,
+ [VECI_USRVEC_START+59] = badtrap,
+ [VECI_USRVEC_START+60] = badtrap,
+ [VECI_USRVEC_START+61] = badtrap,
+ [VECI_USRVEC_START+62] = badtrap,
+ [VECI_USRVEC_START+63] = badtrap,
+ [VECI_USRVEC_START+64] = badtrap,
+ [VECI_USRVEC_START+65] = badtrap,
+ [VECI_USRVEC_START+66] = badtrap,
+ [VECI_USRVEC_START+67] = badtrap,
+ [VECI_USRVEC_START+68] = badtrap,
+ [VECI_USRVEC_START+69] = badtrap,
+ [VECI_USRVEC_START+70] = badtrap,
+ [VECI_USRVEC_START+71] = badtrap,
+ [VECI_USRVEC_START+72] = badtrap,
+ [VECI_USRVEC_START+73] = badtrap,
+ [VECI_USRVEC_START+74] = badtrap,
+ [VECI_USRVEC_START+75] = badtrap,
+ [VECI_USRVEC_START+76] = badtrap,
+ [VECI_USRVEC_START+77] = badtrap,
+ [VECI_USRVEC_START+78] = badtrap,
+ [VECI_USRVEC_START+79] = badtrap,
+ [VECI_USRVEC_START+80] = badtrap,
+ [VECI_USRVEC_START+81] = badtrap,
+ [VECI_USRVEC_START+82] = badtrap,
+ [VECI_USRVEC_START+83] = badtrap,
+ [VECI_USRVEC_START+84] = badtrap,
+ [VECI_USRVEC_START+85] = badtrap,
+ [VECI_USRVEC_START+86] = badtrap,
+ [VECI_USRVEC_START+87] = badtrap,
+ [VECI_USRVEC_START+88] = badtrap,
+ [VECI_USRVEC_START+89] = badtrap,
+ [VECI_USRVEC_START+90] = badtrap,
+ [VECI_USRVEC_START+91] = badtrap,
+ [VECI_USRVEC_START+92] = badtrap,
+ [VECI_USRVEC_START+93] = badtrap,
+ [VECI_USRVEC_START+94] = badtrap,
+ [VECI_USRVEC_START+95] = badtrap,
+ [VECI_USRVEC_START+96] = badtrap,
+ [VECI_USRVEC_START+97] = badtrap,
+ [VECI_USRVEC_START+98] = badtrap,
+ [VECI_USRVEC_START+99] = badtrap,
+ [VECI_USRVEC_START+100] = badtrap,
+ [VECI_USRVEC_START+101] = badtrap,
+ [VECI_USRVEC_START+102] = badtrap,
+ [VECI_USRVEC_START+103] = badtrap,
+ [VECI_USRVEC_START+104] = badtrap,
+ [VECI_USRVEC_START+105] = badtrap,
+ [VECI_USRVEC_START+106] = badtrap,
+ [VECI_USRVEC_START+107] = badtrap,
+ [VECI_USRVEC_START+108] = badtrap,
+ [VECI_USRVEC_START+109] = badtrap,
+ [VECI_USRVEC_START+110] = badtrap,
+ [VECI_USRVEC_START+111] = badtrap,
+ [VECI_USRVEC_START+112] = badtrap,
+ [VECI_USRVEC_START+113] = badtrap,
+ [VECI_USRVEC_START+114] = badtrap,
+ [VECI_USRVEC_START+115] = badtrap,
+ [VECI_USRVEC_START+116] = badtrap,
+ [VECI_USRVEC_START+117] = badtrap,
+ [VECI_USRVEC_START+118] = badtrap,
+ [VECI_USRVEC_START+119] = badtrap,
+ [VECI_USRVEC_START+120] = badtrap,
+ [VECI_USRVEC_START+121] = badtrap,
+ [VECI_USRVEC_START+122] = badtrap,
+ [VECI_USRVEC_START+123] = badtrap,
+ [VECI_USRVEC_START+124] = badtrap,
+ [VECI_USRVEC_START+125] = badtrap,
+ [VECI_USRVEC_START+126] = badtrap,
+ [VECI_USRVEC_START+127] = badtrap,
+ [VECI_USRVEC_START+128] = badtrap,
+ [VECI_USRVEC_START+129] = badtrap,
+ [VECI_USRVEC_START+130] = badtrap,
+ [VECI_USRVEC_START+131] = badtrap,
+ [VECI_USRVEC_START+132] = badtrap,
+ [VECI_USRVEC_START+133] = badtrap,
+ [VECI_USRVEC_START+134] = badtrap,
+ [VECI_USRVEC_START+135] = badtrap,
+ [VECI_USRVEC_START+136] = badtrap,
+ [VECI_USRVEC_START+137] = badtrap,
+ [VECI_USRVEC_START+138] = badtrap,
+ [VECI_USRVEC_START+139] = badtrap,
+ [VECI_USRVEC_START+140] = badtrap,
+ [VECI_USRVEC_START+141] = badtrap,
+ [VECI_USRVEC_START+142] = badtrap,
+ [VECI_USRVEC_START+143] = badtrap,
+ [VECI_USRVEC_START+144] = badtrap,
+ [VECI_USRVEC_START+145] = badtrap,
+ [VECI_USRVEC_START+146] = badtrap,
+ [VECI_USRVEC_START+147] = badtrap,
+ [VECI_USRVEC_START+148] = badtrap,
+ [VECI_USRVEC_START+149] = badtrap,
+ [VECI_USRVEC_START+150] = badtrap,
+ [VECI_USRVEC_START+151] = badtrap,
+ [VECI_USRVEC_START+152] = badtrap,
+ [VECI_USRVEC_START+153] = badtrap,
+ [VECI_USRVEC_START+154] = badtrap,
+ [VECI_USRVEC_START+155] = badtrap,
+ [VECI_USRVEC_START+156] = badtrap,
+ [VECI_USRVEC_START+157] = badtrap,
+ [VECI_USRVEC_START+158] = badtrap,
+ [VECI_USRVEC_START+159] = badtrap,
+ [VECI_USRVEC_START+160] = badtrap,
+ [VECI_USRVEC_START+161] = badtrap,
+ [VECI_USRVEC_START+162] = badtrap,
+ [VECI_USRVEC_START+163] = badtrap,
+ [VECI_USRVEC_START+164] = badtrap,
+ [VECI_USRVEC_START+165] = badtrap,
+ [VECI_USRVEC_START+166] = badtrap,
+ [VECI_USRVEC_START+167] = badtrap,
+ [VECI_USRVEC_START+168] = badtrap,
+ [VECI_USRVEC_START+169] = badtrap,
+ [VECI_USRVEC_START+170] = badtrap,
+ [VECI_USRVEC_START+171] = badtrap,
+ [VECI_USRVEC_START+172] = badtrap,
+ [VECI_USRVEC_START+173] = badtrap,
+ [VECI_USRVEC_START+174] = badtrap,
+ [VECI_USRVEC_START+175] = badtrap,
+ [VECI_USRVEC_START+176] = badtrap,
+ [VECI_USRVEC_START+177] = badtrap,
+ [VECI_USRVEC_START+178] = badtrap,
+ [VECI_USRVEC_START+179] = badtrap,
+ [VECI_USRVEC_START+180] = badtrap,
+ [VECI_USRVEC_START+181] = badtrap,
+ [VECI_USRVEC_START+182] = badtrap,
+ [VECI_USRVEC_START+183] = badtrap,
+ [VECI_USRVEC_START+184] = badtrap,
+ [VECI_USRVEC_START+185] = badtrap,
+ [VECI_USRVEC_START+186] = badtrap,
+ [VECI_USRVEC_START+187] = badtrap,
+ [VECI_USRVEC_START+188] = badtrap,
+ [VECI_USRVEC_START+189] = badtrap,
+ [VECI_USRVEC_START+190] = badtrap,
+ [VECI_USRVEC_START+191] = badtrap,
+};
+
+static void **saved_vbr;
+
+/*
+ * vec_init --
+ * Initialize the vector table and Vector Base Register.
+ *
+ * N.B. We rely on the cputype variable having been initialized
+ * and the MMU having been enabled.
+ */
+void
+vec_init(void)
+{
+#if !defined(__mc68010__) && \
+ (defined(NEED_FIXUP_2030) || defined(NEED_FIXUP_40) || \
+ defined(NEED_FIXUP_60))
+ switch (cputype) {
+#ifdef NEED_FIXUP_2030
+ case CPU_68020:
+ case CPU_68030:
+ vectab[VECI_BUSERR] = busaddrerr2030;
+ vectab[VECI_ADDRERR] = busaddrerr2030;
+ break;
+#endif /* NEED_FIXUP_2030 */
+
+#ifdef NEED_FIXUP_40
+ case CPU_68040:
+ vectab[VECI_BUSERR] = buserr40;
+ vectab[VECI_ADDRERR] = addrerr4060;
+ vectab[VECI_FP_BSUN] = FP_BSUN_HANDLER40;
+ vectab[VECI_FP_INEX] = FP_INEX_HANDLER40;
+ vectab[VECI_FP_DZ] = FP_DZ_HANDLER40;
+ vectab[VECI_FP_UNFL] = FP_UNFL_HANDLER40;
+ vectab[VECI_FP_OPERR] = FP_OPERR_HANDLER40;
+ vectab[VECI_FP_OVFL] = FP_OVFL_HANDLER40;
+ vectab[VECI_FP_SNAN] = FP_SNAN_HANDLER40;
+ DCIS();
+ break;
+#endif /* NEED_FIXUP_40 */
+
+#ifdef NEED_FIXUP_60
+ case CPU_68060:
+ vectab[VECI_BUSERR] = buserr60;
+ vectab[VECI_ADDRERR] = addrerr4060;
+ vectab[VECI_FP_INEX] = FP_INEX_HANDLER60;
+ vectab[VECI_FP_DZ] = FP_DZ_HANDLER60;
+ vectab[VECI_FP_UNFL] = FP_UNFL_HANDLER60;
+ vectab[VECI_FP_OPERR] = FP_OPERR_HANDLER60;
+ vectab[VECI_FP_OVFL] = FP_OVFL_HANDLER60;
+ vectab[VECI_FP_SNAN] = FP_SNAN_HANDLER60;
+ vectab[VECI_UNIMP_FP_DATA] = UNIMP_FP_DATA_HANDLER60;
+ vectab[VECI_UNIMP_EA] = UNIMP_EA_HANDLER60;
+ vectab[VECI_UNIMP_II] = UNIMP_II_HANDLER60;
+ DCIS();
+ break;
+#endif /* NEED_FIXUP_60 */
+ default:
+ panic("vec_init");
+ break;
+ }
+#endif
+ saved_vbr = getvbr();
+ setvbr(vectab);
+}
+
+/*
+ * vec_reset --
+ * Reset the Vector Base Register.
+ */
+void
+vec_reset(void)
+{
+ setvbr(saved_vbr);
+}