Module Name: src
Committed By: thorpej
Date: Fri Jan 19 05:46:36 UTC 2024
Modified Files:
src/sys/arch/virt68k/conf: GENERIC
src/sys/arch/virt68k/include: cpu.h intr.h
src/sys/arch/virt68k/virt68k: intr.c locore.s
Log Message:
Adjust the clockframe to be the same as what the common m68k interrupt
dispatch code expects.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/virt68k/conf/GENERIC
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/virt68k/include/cpu.h
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/virt68k/include/intr.h
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/virt68k/virt68k/intr.c
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/virt68k/virt68k/locore.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/virt68k/conf/GENERIC
diff -u src/sys/arch/virt68k/conf/GENERIC:1.4 src/sys/arch/virt68k/conf/GENERIC:1.5
--- src/sys/arch/virt68k/conf/GENERIC:1.4 Mon Jan 8 05:11:54 2024
+++ src/sys/arch/virt68k/conf/GENERIC Fri Jan 19 05:46:36 2024
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.4 2024/01/08 05:11:54 thorpej Exp $
+# $NetBSD: GENERIC,v 1.5 2024/01/19 05:46:36 thorpej Exp $
#
# GENERIC machine description file
#
@@ -22,7 +22,7 @@ include "arch/virt68k/conf/std.virt68k"
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
-#ident "GENERIC-$Revision: 1.4 $"
+#ident "GENERIC-$Revision: 1.5 $"
makeoptions COPTS="-O2 -fno-reorder-blocks" # see share/mk/sys.mk
@@ -100,7 +100,9 @@ options INET6 # IPV6
options COMPAT_AOUT_M68K # compatibility with NetBSD/m68k a.out
include "conf/compat_netbsd09.config"
-#options COMPAT_SUNOS
+options COMPAT_SUNOS
+options COMPAT_13
+options COMPAT_16
#options COMPAT_M68K4K # compatibility with NetBSD/m68k4k binaries
#options COMPAT_LINUX # compatibility with Linux/m68k binaries
#options COMPAT_OSSAUDIO # compatibility with Linux/m68k binaries
Index: src/sys/arch/virt68k/include/cpu.h
diff -u src/sys/arch/virt68k/include/cpu.h:1.5 src/sys/arch/virt68k/include/cpu.h:1.6
--- src/sys/arch/virt68k/include/cpu.h:1.5 Thu Jan 18 14:39:07 2024
+++ src/sys/arch/virt68k/include/cpu.h Fri Jan 19 05:46:36 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.h,v 1.5 2024/01/18 14:39:07 thorpej Exp $ */
+/* $NetBSD: cpu.h,v 1.6 2024/01/19 05:46:36 thorpej Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -54,17 +54,17 @@
/*
* Arguments to hardclock and gatherstats encapsulate the previous
* machine state in an opaque clockframe. On the virt68k, we use
- * what the hardware pushes on an interrupt (frame format 0).
+ * what the locore.s glue puts on the stack before calling C-code.
*/
struct clockframe {
- u_short sr; /* sr at time of interrupt */
- u_long pc; /* pc at time of interrupt */
- u_short fmt:4,
- vec:12; /* vector offset (4-word frame) */
+ u_int cf_regs[4]; /* d0,d1,a0,a1 */
+ u_short cf_sr; /* sr at time of interrupt */
+ u_long cf_pc; /* pc at time of interrupt */
+ u_short cf_vo; /* vector offset (4-word frame) */
} __attribute__((packed));
-#define CLKF_USERMODE(framep) (((framep)->sr & PSL_S) == 0)
-#define CLKF_PC(framep) ((framep)->pc)
+#define CLKF_USERMODE(framep) (((framep)->cf_sr & PSL_S) == 0)
+#define CLKF_PC(framep) ((framep)->cf_pc)
/*
* The clock interrupt handler can determine if it's a nested
Index: src/sys/arch/virt68k/include/intr.h
diff -u src/sys/arch/virt68k/include/intr.h:1.1 src/sys/arch/virt68k/include/intr.h:1.2
--- src/sys/arch/virt68k/include/intr.h:1.1 Tue Jan 2 07:41:00 2024
+++ src/sys/arch/virt68k/include/intr.h Fri Jan 19 05:46:36 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: intr.h,v 1.1 2024/01/02 07:41:00 thorpej Exp $ */
+/* $NetBSD: intr.h,v 1.2 2024/01/19 05:46:36 thorpej Exp $ */
/*-
* Copyright (c) 2023 The NetBSD Foundation, Inc.
@@ -162,7 +162,7 @@ void intr_register_pic(struct device *,
#include <sys/cpu.h>
#include <sys/device.h>
-void intr_dispatch(struct clockframe *);
+void intr_dispatch(struct clockframe);
#endif /* _VIRT68K_INTR_PRIVATE */
#endif /* !_LOCORE */
Index: src/sys/arch/virt68k/virt68k/intr.c
diff -u src/sys/arch/virt68k/virt68k/intr.c:1.2 src/sys/arch/virt68k/virt68k/intr.c:1.3
--- src/sys/arch/virt68k/virt68k/intr.c:1.2 Tue Jan 2 07:48:46 2024
+++ src/sys/arch/virt68k/virt68k/intr.c Fri Jan 19 05:46:36 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: intr.c,v 1.2 2024/01/02 07:48:46 thorpej Exp $ */
+/* $NetBSD: intr.c,v 1.3 2024/01/19 05:46:36 thorpej Exp $ */
/*-
* Copyright (c) 1996, 2023 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.2 2024/01/02 07:48:46 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.3 2024/01/19 05:46:36 thorpej Exp $");
#define _VIRT68K_INTR_PRIVATE
@@ -47,6 +47,8 @@ __KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.2
#include <sys/bus.h>
#include <sys/intr.h>
+#include <machine/vectors.h>
+
#include <uvm/uvm_extern.h>
#include <dev/goldfish/gfpicvar.h>
@@ -267,9 +269,9 @@ intr_string(void *v, char *buf, size_t b
#define VEC_AVINTR 0x18
void
-intr_dispatch(struct clockframe *frame)
+intr_dispatch(struct clockframe frame)
{
- const int ipl = (frame->vec >> 2) - VEC_AVINTR;
+ const int ipl = VECO_TO_VECI(frame.cf_vo) - VEC_AVINTR;
const int pic = ipl_to_pic(ipl);
int pirq;
@@ -283,7 +285,7 @@ intr_dispatch(struct clockframe *frame)
while ((pirq = gfpic_pending(pics[pic])) >= 0) {
LIST_FOREACH(ih, &intrhands[base + pirq], ih_link) {
- void *arg = ih->ih_arg ? ih->ih_arg : frame;
+ void *arg = ih->ih_arg ? ih->ih_arg : &frame;
if (ih->ih_func(arg)) {
ih->ih_evcnt->ev_count++;
rv = true;
Index: src/sys/arch/virt68k/virt68k/locore.s
diff -u src/sys/arch/virt68k/virt68k/locore.s:1.14 src/sys/arch/virt68k/virt68k/locore.s:1.15
--- src/sys/arch/virt68k/virt68k/locore.s:1.14 Thu Jan 18 12:07:51 2024
+++ src/sys/arch/virt68k/virt68k/locore.s Fri Jan 19 05:46:36 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.s,v 1.14 2024/01/18 12:07:51 isaki Exp $ */
+/* $NetBSD: locore.s,v 1.15 2024/01/19 05:46:36 thorpej Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -500,10 +500,7 @@ Lbrkpt3:
ENTRY_NOPROFILE(intrhand_autovec)
addql #1,_C_LABEL(intr_depth)
INTERRUPT_SAVEREG
- lea %sp@(16),%a1 | get pointer to frame
- movl %a1,%sp@-
jbsr _C_LABEL(intr_dispatch) | call dispatcher
- addql #4,%sp
INTERRUPT_RESTOREREG
subql #1,_C_LABEL(intr_depth)