xref: /openbsd/sys/arch/m88k/include/intr.h (revision 73471bf0)
1 /*	$OpenBSD: intr.h,v 1.14 2018/08/20 15:02:07 visa Exp $	*/
2 /*
3  * Copyright (c) 2001 Wasabi Systems, Inc.
4  * All rights reserved.
5  *
6  * Written by Jason R. Thorpe for Wasabi Systems, Inc.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. All advertising materials mentioning features or use of this software
17  *    must display the following acknowledgement:
18  *	This product includes software developed for the NetBSD Project by
19  *	Wasabi Systems, Inc.
20  * 4. The name of Wasabi Systems, Inc. may not be used to endorse
21  *    or promote products derived from this software without specific prior
22  *    written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
26  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
27  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
28  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34  * POSSIBILITY OF SUCH DAMAGE.
35  */
36 /*
37  * Copyright (C) 2000 Steve Murphree, Jr.
38  * All rights reserved.
39  *
40  * Redistribution and use in source and binary forms, with or without
41  * modification, are permitted provided that the following conditions
42  * are met:
43  * 1. Redistributions of source code must retain the above copyright
44  *    notice, this list of conditions and the following disclaimer.
45  * 2. Redistributions in binary form must reproduce the above copyright
46  *    notice, this list of conditions and the following disclaimer in the
47  *    documentation and/or other materials provided with the distribution.
48  * 3. The name of the author may not be used to endorse or promote products
49  *    derived from this software without specific prior written permission.
50  *
51  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
52  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
53  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
54  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
55  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
56  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
57  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
58  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
59  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
60  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
61  */
62 
63 #ifndef _M88K_INTR_H_
64 #define _M88K_INTR_H_
65 
66 #ifdef _KERNEL
67 #ifndef _LOCORE
68 int	getipl(void);
69 int	setipl(int level);
70 int	splraise(int);
71 int	spl0(void);
72 
73 /* SPL asserts */
74 #ifdef DIAGNOSTIC
75 /*
76  * Although this function is implemented in MI code, it must be in this MD
77  * header because we don't want this header to include MI includes.
78  */
79 void splassert_fail(int, int, const char *);
80 extern int splassert_ctl;
81 void splassert_check(int, const char *);
82 #define splassert(__wantipl) do {			\
83 	if (splassert_ctl > 0) {			\
84 		splassert_check(__wantipl, __func__);	\
85 	}						\
86 } while (0)
87 #define	splsoftassert(wantipl)	splassert(IPL_SOFTINT)
88 #else
89 #define	splassert(wantipl)	do { /* nothing */ } while (0)
90 #define	splsoftassert(wantipl)	do { /* nothing */ } while (0)
91 #endif
92 
93 #endif /* _LOCORE */
94 
95 #define splsoftclock()		splraise(IPL_SOFTINT)
96 #define splsoftnet()		splraise(IPL_SOFTINT)
97 #define splbio()		splraise(IPL_BIO)
98 #define splnet()		splraise(IPL_NET)
99 #define spltty()		splraise(IPL_TTY)
100 #define splclock()		splraise(IPL_CLOCK)
101 #define splstatclock()		splraise(IPL_STATCLOCK)
102 #define	splsched()		splraise(IPL_SCHED)
103 #define splvm()			splraise(IPL_VM)
104 #define splhigh()		setipl(IPL_HIGH)
105 
106 #define splx(x)			((x) ? setipl((x)) : spl0())
107 
108 /*
109  * Generic software interrupt support for all m88k platforms.
110  */
111 
112 #ifndef _LOCORE
113 
114 #define	IPL_SOFT		0
115 #define	IPL_SOFTCLOCK		1
116 #define	IPL_SOFTNET		2
117 #define	IPL_SOFTTTY		3
118 
119 #define	SI_SOFT			0	/* for IPL_SOFT */
120 #define	SI_SOFTCLOCK		1	/* for IPL_SOFTCLOCK */
121 #define	SI_SOFTNET		2	/* for IPL_SOFTNET */
122 #define	SI_SOFTTTY		3	/* for IPL_SOFTTTY */
123 
124 #define	SI_NQUEUES		4
125 
126 #include <machine/mutex.h>
127 #include <sys/queue.h>
128 
129 struct soft_intrhand {
130 	TAILQ_ENTRY(soft_intrhand) sih_list;
131 	void (*sih_func)(void *);
132 	void *sih_arg;
133 	struct soft_intrq *sih_siq;
134 	int sih_pending;
135 };
136 
137 struct soft_intrq {
138 	TAILQ_HEAD(, soft_intrhand) siq_list;
139 	int siq_si;
140 	struct mutex siq_mtx;
141 };
142 
143 void	 softintr_disestablish(void *);
144 void	 softintr_dispatch(int);
145 void	*softintr_establish(int, void (*)(void *), void *);
146 void	 softintr_init(void);
147 void	 softintr_schedule(void *);
148 
149 extern int softpending;
150 
151 #endif	/* _LOCORE */
152 
153 #endif /* _KERNEL */
154 #endif /* _M88K_INTR_H_ */
155