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