Module Name:    src
Committed By:   thorpej
Date:           Mon Jan 15 02:16:52 UTC 2024

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

Log Message:
Switch luna68k over to the common interrupt dispatch code.


To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.34 src/sys/arch/luna68k/conf/files.luna68k
cvs rdiff -u -r1.39 -r1.40 src/sys/arch/luna68k/include/cpu.h
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/luna68k/include/intr.h
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/luna68k/include/vectors.h
cvs rdiff -u -r1.27 -r0 src/sys/arch/luna68k/luna68k/isr.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/luna68k/luna68k/isr.h
cvs rdiff -u -r1.76 -r1.77 src/sys/arch/luna68k/luna68k/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/luna68k/conf/files.luna68k
diff -u src/sys/arch/luna68k/conf/files.luna68k:1.33 src/sys/arch/luna68k/conf/files.luna68k:1.34
--- src/sys/arch/luna68k/conf/files.luna68k:1.33	Sun Jan 14 00:17:46 2024
+++ src/sys/arch/luna68k/conf/files.luna68k	Mon Jan 15 02:16:52 2024
@@ -1,5 +1,5 @@
 #
-#	$NetBSD: files.luna68k,v 1.33 2024/01/14 00:17:46 thorpej Exp $
+#	$NetBSD: files.luna68k,v 1.34 2024/01/15 02:16:52 thorpej Exp $
 #
 maxpartitions 8
 maxusers 2 8 64
@@ -10,7 +10,6 @@ defflag			PANICBUTTON
 file arch/luna68k/luna68k/autoconf.c
 file arch/luna68k/luna68k/clock.c
 file arch/luna68k/luna68k/disksubr.c
-file arch/luna68k/luna68k/isr.c
 file arch/luna68k/luna68k/machdep.c
 file arch/luna68k/luna68k/pmap_bootstrap.c
 file arch/luna68k/luna68k/trap.c
@@ -18,6 +17,8 @@ file arch/m68k/m68k/cacheops.c
 file arch/m68k/m68k/db_memrw.c		ddb | kgdb
 file arch/m68k/m68k/kgdb_machdep.c	kgdb
 file arch/m68k/m68k/fpu.c		compile-with "${M68K_KERN_FPU}"
+file arch/m68k/m68k/m68k_intr.c
+file arch/m68k/m68k/m68k_intr_stubs.s
 file arch/m68k/m68k/m68k_trap.c
 file arch/m68k/m68k/mmu_subr.s
 file arch/m68k/m68k/pmap_motorola.c

Index: src/sys/arch/luna68k/include/cpu.h
diff -u src/sys/arch/luna68k/include/cpu.h:1.39 src/sys/arch/luna68k/include/cpu.h:1.40
--- src/sys/arch/luna68k/include/cpu.h:1.39	Tue Jan  9 04:16:25 2024
+++ src/sys/arch/luna68k/include/cpu.h	Mon Jan 15 02:16:52 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.h,v 1.39 2024/01/09 04:16:25 thorpej Exp $ */
+/* $NetBSD: cpu.h,v 1.40 2024/01/15 02:16:52 thorpej Exp $ */
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -57,19 +57,20 @@
 /*
  * Arguments to hardclock and gatherstats encapsulate the previous
  * machine state in an opaque clockframe.  On the luna68k, 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	vo;		/* 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)
 #if 0
 /* We would like to do it this way... */
-#define CLKF_INTR(framep)	(((framep)->sr & PSL_M) == 0)
+#define CLKF_INTR(framep)	(((framep)->cf_sr & PSL_M) == 0)
 #else
 /* but until we start using PSL_M, we have to do this instead */
 #define CLKF_INTR(framep)	(0)	/* XXX */

Index: src/sys/arch/luna68k/include/intr.h
diff -u src/sys/arch/luna68k/include/intr.h:1.16 src/sys/arch/luna68k/include/intr.h:1.17
--- src/sys/arch/luna68k/include/intr.h:1.16	Tue Jul 11 11:06:04 2023
+++ src/sys/arch/luna68k/include/intr.h	Mon Jan 15 02:16:52 2024
@@ -1,11 +1,11 @@
-/* $NetBSD: intr.h,v 1.16 2023/07/11 11:06:04 riastradh Exp $ */
+/*	$NetBSD: intr.h,v 1.17 2024/01/15 02:16:52 thorpej Exp $	*/
 
 /*-
- * Copyright (c) 2000 The NetBSD Foundation, Inc.
+ * Copyright (c) 2024 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
  * This code is derived from software contributed to The NetBSD Foundation
- * by Tohru Nishimura.
+ * by Jason R. Thorpe.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -29,67 +29,18 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef _MACHINE_INTR_H
-#define _MACHINE_INTR_H
+#ifndef _LUNA68K_INTR_H_
+#define _LUNA68K_INTR_H_
 
-#if defined(_KERNEL) || defined(_KMEMUSER)
-typedef struct {
-	uint16_t _psl;
-} ipl_cookie_t;
-#endif
+#include <m68k/psl.h>
 
-#ifdef _KERNEL
+#define	MACHINE_PSL_IPL_SOFTCLOCK	PSL_IPL1
+#define	MACHINE_PSL_IPL_SOFTBIO		PSL_IPL1
+#define	MACHINE_PSL_IPL_SOFTNET		PSL_IPL1
+#define	MACHINE_PSL_IPL_SOFTSERIAL	PSL_IPL1
+#define	MACHINE_PSL_IPL_VM		PSL_IPL4
+#define	MACHINE_PSL_IPL_SCHED		PSL_IPL5
 
-/*
- * spl functions
- */
-#include <machine/psl.h>
-
-#define spl0()		_spl0()
-#define splnone()	spl0()
-#define splsoftclock()	splraise1()
-#define splsoftbio()	splraise1()
-#define splsoftnet()	splraise1()
-#define splsoftserial()	splraise1()
-#define splvm()		splraise4()
-#define splsched()	splraise5()
-#define splhigh()	spl7()
-
-#define	IPL_NONE	0
-#define	IPL_SOFTCLOCK	1
-#define	IPL_SOFTBIO	2
-#define	IPL_SOFTNET	3
-#define	IPL_SOFTSERIAL	4
-#define	IPL_VM		5
-#define	IPL_SCHED	6
-#define	IPL_HIGH	7
-#define	NIPL		8
-
-extern const uint16_t ipl2psl_table[NIPL];
-
-typedef int ipl_t;
-
-static inline ipl_cookie_t
-makeiplcookie(ipl_t ipl)
-{
-
-	return (ipl_cookie_t){._psl = ipl2psl_table[ipl]};
-}
-
-static inline int
-splraiseipl(ipl_cookie_t icookie)
-{
-
-	return _splraise(icookie._psl);
-}
-
-static inline void
-splx(int sr)
-{
-
-	__asm volatile("movew %0,%%sr" : : "di" (sr));
-}
-
-#endif /* _KERNEL */
+#include <m68k/intr.h>
 
-#endif	/* _MACHINE_INTR_H */
+#endif	/* _LUNA68K_INTR_H */

Index: src/sys/arch/luna68k/include/vectors.h
diff -u src/sys/arch/luna68k/include/vectors.h:1.1 src/sys/arch/luna68k/include/vectors.h:1.2
--- src/sys/arch/luna68k/include/vectors.h:1.1	Sun Jan 14 00:17:46 2024
+++ src/sys/arch/luna68k/include/vectors.h	Mon Jan 15 02:16:52 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: vectors.h,v 1.1 2024/01/14 00:17:46 thorpej Exp $	*/
+/*	$NetBSD: vectors.h,v 1.2 2024/01/15 02:16:52 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2024 The NetBSD Foundation, Inc.
@@ -37,12 +37,12 @@
 #include <m68k/vectors.h>
 
 #define	MACHINE_AV0_HANDLER	spurintr
-#define	MACHINE_AV1_HANDLER	intrhand_autovec
-#define	MACHINE_AV2_HANDLER	intrhand_autovec
-#define	MACHINE_AV3_HANDLER	intrhand_autovec
-#define	MACHINE_AV4_HANDLER	intrhand_autovec
+#define	MACHINE_AV1_HANDLER	intrstub_autovec
+#define	MACHINE_AV2_HANDLER	intrstub_autovec
+#define	MACHINE_AV3_HANDLER	intrstub_autovec
+#define	MACHINE_AV4_HANDLER	intrstub_autovec
 #define	MACHINE_AV5_HANDLER	lev5intr
-#define	MACHINE_AV6_HANDLER	intrhand_autovec
+#define	MACHINE_AV6_HANDLER	intrstub_autovec
 #define	MACHINE_AV7_HANDLER	lev7intr
 
 #endif /* _KERNEL */

Index: src/sys/arch/luna68k/luna68k/isr.h
diff -u src/sys/arch/luna68k/luna68k/isr.h:1.5 src/sys/arch/luna68k/luna68k/isr.h:1.6
--- src/sys/arch/luna68k/luna68k/isr.h:1.5	Sun Jan 14 00:17:46 2024
+++ src/sys/arch/luna68k/luna68k/isr.h	Mon Jan 15 02:16:52 2024
@@ -1,7 +1,7 @@
-/*	$NetBSD: isr.h,v 1.5 2024/01/14 00:17:46 thorpej Exp $	*/
+/*	$NetBSD: isr.h,v 1.6 2024/01/15 02:16:52 thorpej Exp $	*/
 
 /*-
- * Copyright (c) 1996 The NetBSD Foundation, Inc.
+ * Copyright (c) 2004 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
  * This code is derived from software contributed to The NetBSD Foundation
@@ -29,54 +29,26 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <sys/queue.h>
+#ifndef _LUNA68K_ISR_H_
+#define	_LUNA68K_ISR_H_
 
-/*
- * The location and size of the autovectored interrupt portion
- * of the vector table.
- */
-#define ISRAUTOVEC	0x18
-#define NISRAUTOVEC	8
-
-/*
- * The location and size of the vectored interrupt portion
- * of the vector table.
- */
-#define ISRVECTORED	0x40
-#define NISRVECTORED	192
+#include <sys/intr.h>
 
 /*
- * Autovectored interrupt handler cookie.
+ * Aliases for the legacy luna68k ISR routines.
  */
-struct isr_autovec {
-	LIST_ENTRY(isr_autovec) isr_link;
-	int		(*isr_func)(void *);
-	void		*isr_arg;
-	int		isr_ipl;
-	int		isr_priority;
-};
 
-typedef LIST_HEAD(, isr_autovec) isr_autovec_list_t;
+static inline void
+isrinit(void)
+{
+	m68k_intr_init(NULL);
+}
+
+static inline void
+isrlink_autovec(int (*func)(void *), void *arg, int ipl, int isrpri)
+{
+	/* XXX leaks interrupt handle. */
+	m68k_intr_establish(func, arg, NULL, 0, ipl, isrpri, 0);
+}
 
-/*
- * Vectored interrupt handler cookie.  The handler may request to
- * receive the exception frame as an argument by specifying NULL
- * when establishing the interrupt.
- */
-struct isr_vectored {
-	int		(*isr_func)(void *);
-	void		*isr_arg;
-	int		isr_ipl;
-};
-
-/*
- * Autovectored ISR priorities.  These are not the same as interrupt levels.
- */
-#define ISRPRI_BIO		0
-#define ISRPRI_NET		1
-#define ISRPRI_TTY		2
-#define ISRPRI_TTYNOBUF		3
-
-void	isrinit(void);
-void	isrlink_autovec(int (*)(void *), void *, int, int);
-void	isrdispatch_autovec(int);
+#endif /* _LUNA68K_ISR_H_ */

Index: src/sys/arch/luna68k/luna68k/locore.s
diff -u src/sys/arch/luna68k/luna68k/locore.s:1.76 src/sys/arch/luna68k/luna68k/locore.s:1.77
--- src/sys/arch/luna68k/luna68k/locore.s:1.76	Sun Jan 14 00:17:46 2024
+++ src/sys/arch/luna68k/luna68k/locore.s	Mon Jan 15 02:16:52 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.s,v 1.76 2024/01/14 00:17:46 thorpej Exp $ */
+/* $NetBSD: locore.s,v 1.77 2024/01/15 02:16:52 thorpej Exp $ */
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -552,17 +552,6 @@ Lbrkpt3:
 
 /*
  * Interrupt handlers.
- *
- * For auto-vectored interrupts, the CPU provides the
- * vector 0x18+level.  Note we count spurious interrupts,
- * but don't do anything else with them.
- *
- * _intrhand_autovec is the entry point for auto-vectored
- * interrupts.
- *
- * For vectored interrupts, we pull the pc, evec, and exception frame
- * and pass them to the vectored interrupt dispatcher.  The vectored
- * interrupt dispatcher will deal with strays.
  */
 
 ENTRY_NOPROFILE(spurintr)		/* Level 0 */
@@ -572,15 +561,6 @@ ENTRY_NOPROFILE(spurintr)		/* Level 0 */
 	INTERRUPT_RESTOREREG
 	jra	_ASM_LABEL(rei)
 
-ENTRY_NOPROFILE(intrhand_autovec)	/* Levels 1 through 6 */
-	INTERRUPT_SAVEREG
-	movw	%sp@(22),%sp@-		| push exception vector
-	clrw	%sp@-
-	jbsr	_C_LABEL(isrdispatch_autovec)	| call dispatcher
-	addql	#4,%sp
-	INTERRUPT_RESTOREREG
-	jra	_ASM_LABEL(rei)		| all done
-
 ENTRY_NOPROFILE(lev7intr)		/* Level 7: NMI */
 	addql	#1,_C_LABEL(intrcnt)+32
 	clrl	%sp@-
@@ -603,7 +583,7 @@ ENTRY_NOPROFILE(lev5intr)
 	tstl	_C_LABEL(clock_enable)	| is hardclock() available?
 	jeq	1f
 	INTERRUPT_SAVEREG
-	lea	%sp@(16),%a1		| %a1 = &clockframe
+	lea	%sp@(0),%a1		| %a1 = &clockframe
 	movl	%a1,%sp@-
 	jbsr	_C_LABEL(hardclock)	| hardclock(&frame)
 	addql	#4,%sp
@@ -616,7 +596,7 @@ ENTRY_NOPROFILE(lev5intr)
 					| XP device has also lev5 intr,
 					| routing to autovec
 	subql	#1,_C_LABEL(idepth)
-	jbra	_ASM_LABEL(intrhand_autovec)
+	jbra	_C_LABEL(intrstub_autovec)
 #endif
 
 /*

Reply via email to