Module Name: src
Committed By: thorpej
Date: Tue Jan 16 01:16:47 UTC 2024
Modified Files:
src/sys/arch/m68k/include: intr.h
src/sys/arch/m68k/m68k: m68k_intr.c m68k_intr_stubs.s
Log Message:
- Declare idepth as volatile.
- Provide a m68k_intrvec_intrhand() routine that returns the interrupt
handle for a given vectored interrupt. XXX This is gross and should
burn to the ground, but is needed to support legacy ISR interfaces.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/m68k/include/intr.h
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/m68k/m68k/m68k_intr.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/m68k/m68k/m68k_intr_stubs.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/m68k/include/intr.h
diff -u src/sys/arch/m68k/include/intr.h:1.4 src/sys/arch/m68k/include/intr.h:1.5
--- src/sys/arch/m68k/include/intr.h:1.4 Mon Jan 15 18:47:03 2024
+++ src/sys/arch/m68k/include/intr.h Tue Jan 16 01:16:46 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: intr.h,v 1.4 2024/01/15 18:47:03 thorpej Exp $ */
+/* $NetBSD: intr.h,v 1.5 2024/01/16 01:16:46 thorpej Exp $ */
/*-
* Copyright (c) 2023, 2024 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@ typedef struct {
#endif
#ifdef _KERNEL
-extern int idepth; /* interrupt depth */
+extern volatile int idepth; /* interrupt depth */
extern const uint16_t ipl2psl_table[NIPL];
typedef int ipl_t; /* logical IPL_* value */
@@ -198,6 +198,10 @@ void *m68k_intr_establish(int (*)(void *
int/*vec*/, int/*m68k ipl*/, int/*isrpri*/, int/*flags*/);
bool m68k_intr_disestablish(void *);
+#ifdef __HAVE_M68K_INTR_VECTORED
+void *m68k_intrvec_intrhand(int vec); /* XXX */
+#endif
+
#endif /* _KERNEL */
#endif /* _M68k_INTR_H_ */
Index: src/sys/arch/m68k/m68k/m68k_intr.c
diff -u src/sys/arch/m68k/m68k/m68k_intr.c:1.7 src/sys/arch/m68k/m68k/m68k_intr.c:1.8
--- src/sys/arch/m68k/m68k/m68k_intr.c:1.7 Mon Jan 15 19:27:16 2024
+++ src/sys/arch/m68k/m68k/m68k_intr.c Tue Jan 16 01:16:46 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: m68k_intr.c,v 1.7 2024/01/15 19:27:16 thorpej Exp $ */
+/* $NetBSD: m68k_intr.c,v 1.8 2024/01/16 01:16:46 thorpej Exp $ */
/*-
* Copyright (c) 1996, 2023, 2024 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: m68k_intr.c,v 1.7 2024/01/15 19:27:16 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: m68k_intr.c,v 1.8 2024/01/16 01:16:46 thorpej Exp $");
#define _M68K_INTR_PRIVATE
@@ -70,7 +70,7 @@ extern char intrstub_vectored[];
/* A dummy event counter where interrupt stats go to die. */
static struct evcnt bitbucket;
-int idepth;
+volatile int idepth;
static struct m68k_intrhand_list m68k_intrhands_autovec[NAUTOVECTORS];
#ifdef __HAVE_M68K_INTR_VECTORED
@@ -215,6 +215,16 @@ m68k_intrvec_remove(struct m68k_intrhand
*slot = NULL;
}
+/* XXX This is horrible and should burn to the ground. */
+void *
+m68k_intrvec_intrhand(int vec)
+{
+ KASSERT(vec >= MACHINE_USERVEC_START);
+ KASSERT(vec < NVECTORS);
+
+ return m68k_intrhands_vectored[vec - MACHINE_USERVEC_START];
+}
+
#endif /* __HAVE_M68K_INTR_VECTORED */
/*
Index: src/sys/arch/m68k/m68k/m68k_intr_stubs.s
diff -u src/sys/arch/m68k/m68k/m68k_intr_stubs.s:1.1 src/sys/arch/m68k/m68k/m68k_intr_stubs.s:1.2
--- src/sys/arch/m68k/m68k/m68k_intr_stubs.s:1.1 Sun Jan 14 22:32:32 2024
+++ src/sys/arch/m68k/m68k/m68k_intr_stubs.s Tue Jan 16 01:16:46 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: m68k_intr_stubs.s,v 1.1 2024/01/14 22:32:32 thorpej Exp $ */
+/* $NetBSD: m68k_intr_stubs.s,v 1.2 2024/01/16 01:16:46 thorpej Exp $ */
/*
* Copyright (c) 1980, 1990, 1993
@@ -50,6 +50,13 @@
#endif
/*
+ * XXX Some platforms (e.g. news68k) have hardware-assisted ASTs, and
+ * XXX thus don't need to branch to rei() after an interrupt. Figure
+ * XXX out a way to handle these platforms. This works for now; the
+ * XXX hardware-assist is just an optimization.
+ */
+
+/*
* Vector stub for auto-vectored interrupts. Calls the dispatch
* routine with the frame BY VALUE (saves a few instructions).
*/