1 /* $NetBSD: intr.h,v 1.18 2007/03/11 05:22:24 thorpej Exp $ */ 2 3 /*- 4 * Copyright (c) 1997 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Ignatios Souvatzis. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 3. All advertising materials mentioning features or use of this software 19 * must display the following acknowledgement: 20 * This product includes software developed by the NetBSD 21 * Foundation, Inc. and its contributors. 22 * 4. Neither the name of The NetBSD Foundation nor the names of its 23 * contributors may be used to endorse or promote products derived 24 * from this software without specific prior written permission. 25 * 26 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 27 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 28 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 29 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 30 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 31 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 32 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 33 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 34 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 36 * POSSIBILITY OF SUCH DAMAGE. 37 */ 38 39 /* 40 * machine/intr.h for the Amiga port. 41 * Currently, only a wrapper, for most of the stuff, around the old 42 * include files. 43 */ 44 45 #ifndef _AMIGA_INTR_H_ 46 #define _AMIGA_INTR_H_ 47 48 #include <amiga/amiga/isr.h> 49 #include <amiga/include/mtpr.h> 50 #include <m68k/psl.h> 51 52 #define IPL_NONE 0 53 #define IPL_SOFTCLOCK 1 54 #define IPL_SOFTNET 1 55 #define IPL_SOFTSERIAL 1 56 #define IPL_BIO 3 57 #define IPL_NET 4 58 #define IPL_TTY 5 59 #define IPL_SERIAL 6 60 #define IPL_LPT 7 61 #define IPL_VM 8 62 #define IPL_AUDIO 9 63 #define IPL_CLOCK 10 64 #define IPL_STATCLOCK IPL_CLOCK 65 #define IPL_SCHED IPL_HIGH 66 #define IPL_HIGH 11 67 #define IPL_LOCK IPL_HIGH 68 #define _NIPL 12 69 70 extern int ipl2spl_table[_NIPL]; 71 72 typedef int ipl_t; 73 typedef struct { 74 uint16_t _ipl; 75 } ipl_cookie_t; 76 77 static inline ipl_cookie_t 78 makeiplcookie(ipl_t ipl) 79 { 80 81 return (ipl_cookie_t){._ipl = ipl}; 82 } 83 84 static inline int 85 splraiseipl(ipl_cookie_t icookie) 86 { 87 88 return _splraise(ipl2spl_table[icookie._ipl]); 89 } 90 91 #ifdef splaudio 92 #undef splaudio 93 #endif 94 #define splaudio spl6 95 96 #define spllpt() spl6() 97 98 #if !defined(_LKM) 99 #include "opt_lev6_defer.h" 100 #endif 101 102 #define spl0() _spl0() /* we have real software interrupts */ 103 104 #define splnone() spl0() 105 #define splsoftclock() splraise1() 106 #define splsoftnet() splraise1() 107 #define splsoftserial() splraise1() 108 #define splbio() splraise3() 109 #define splnet() splraise3() 110 111 /* 112 * splserial hack, idea by Jason Thorpe. 113 * drivers which need it (at the present only the coms) raise the variable to 114 * their serial interrupt level. 115 * 116 * ipl2spl_table[IPL_SERIAL] is statically initialized in machdep.c 117 * at the moment; should be some driver independent file. 118 */ 119 120 #define splserial() _splraise(ipl2spl_table[IPL_SERIAL]) 121 #define spltty() splraise4() 122 #define splvm() splraise4() 123 124 #ifndef _LKM 125 126 #ifndef LEV6_DEFER 127 #define splclock() splraise6() 128 #define splstatclock() splraise6() 129 #define splhigh() spl7() 130 #define splsched() spl7() 131 #define spllock() spl7() 132 #else 133 #define splclock() splraise4() 134 #define splstatclock() splraise4() 135 #define splhigh() splraise4() 136 #define splsched() splraise4() 137 #define spllock() splraise4() 138 #endif 139 140 #else /* _LKM */ 141 142 extern int _spllkm6(void); 143 extern int _spllkm7(void); 144 145 #define splclock() _spllkm6() 146 #define splstatclock() _spllkm6() 147 #define spllock() _spllkm7() 148 #define splhigh() _spllkm7() 149 #define splsched() _spllkm7() 150 151 #endif /* _LKM */ 152 153 #define splx(s) _spl(s) 154 155 #endif /* !_AMIGA_INTR_H_ */ 156