Home | History | Annotate | Line # | Download | only in include
intr.h revision 1.9
      1  1.9   thorpej /*	$NetBSD: intr.h,v 1.9 2001/04/12 19:22:52 thorpej Exp $	*/
      2  1.1  takemura 
      3  1.1  takemura /*
      4  1.1  takemura  * Copyright (c) 1998 Jonathan Stone.  All rights reserved.
      5  1.1  takemura  *
      6  1.1  takemura  * Redistribution and use in source and binary forms, with or without
      7  1.1  takemura  * modification, are permitted provided that the following conditions
      8  1.1  takemura  * are met:
      9  1.1  takemura  * 1. Redistributions of source code must retain the above copyright
     10  1.1  takemura  *    notice, this list of conditions and the following disclaimer.
     11  1.1  takemura  * 2. Redistributions in binary form must reproduce the above copyright
     12  1.1  takemura  *    notice, this list of conditions and the following disclaimer in the
     13  1.1  takemura  *    documentation and/or other materials provided with the distribution.
     14  1.1  takemura  * 3. All advertising materials mentioning features or use of this software
     15  1.1  takemura  *    must display the following acknowledgement:
     16  1.1  takemura  *	This product includes software developed by Jonathan Stone for
     17  1.1  takemura  *      the NetBSD Project.
     18  1.1  takemura  * 4. The name of the author may not be used to endorse or promote products
     19  1.1  takemura  *    derived from this software without specific prior written permission.
     20  1.1  takemura  *
     21  1.1  takemura  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     22  1.1  takemura  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     23  1.1  takemura  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     24  1.1  takemura  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     25  1.1  takemura  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     26  1.1  takemura  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     27  1.1  takemura  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     28  1.1  takemura  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     29  1.1  takemura  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     30  1.1  takemura  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31  1.1  takemura  */
     32  1.1  takemura 
     33  1.1  takemura #ifndef _HPCMIPS_INTR_H_
     34  1.1  takemura #define _HPCMIPS_INTR_H_
     35  1.1  takemura 
     36  1.1  takemura #define	IPL_NONE	0	/* disable only this interrupt */
     37  1.1  takemura #define	IPL_BIO		1	/* disable block I/O interrupts */
     38  1.1  takemura #define	IPL_NET		2	/* disable network interrupts */
     39  1.1  takemura #define	IPL_TTY		3	/* disable terminal interrupts */
     40  1.1  takemura #define	IPL_CLOCK	4	/* disable clock interrupts */
     41  1.1  takemura #define	IPL_STATCLOCK	5	/* disable profiling interrupts */
     42  1.1  takemura #if 0 /* XXX */
     43  1.1  takemura #define	IPL_SERIAL	6	/* disable serial hardware interrupts */
     44  1.1  takemura #endif
     45  1.1  takemura #define	IPL_DMA		7	/* disable DMA reload interrupts */
     46  1.1  takemura #define	IPL_HIGH	8	/* disable all interrupts */
     47  1.1  takemura 
     48  1.1  takemura /* Interrupt sharing types. */
     49  1.1  takemura #define	IST_NONE	0	/* none */
     50  1.1  takemura #define	IST_PULSE	1	/* pulsed */
     51  1.1  takemura #define	IST_EDGE	2	/* edge-triggered */
     52  1.1  takemura #define	IST_LEVEL	3	/* level-triggered */
     53  1.1  takemura 
     54  1.1  takemura #ifdef _KERNEL
     55  1.1  takemura #ifndef _LOCORE
     56  1.1  takemura 
     57  1.1  takemura #include <mips/cpuregs.h>
     58  1.1  takemura 
     59  1.3      sato int	_splraise __P((int));
     60  1.3      sato int	_spllower __P((int));
     61  1.3      sato int	_splset __P((int));
     62  1.3      sato int	_splget __P((void));
     63  1.3      sato void	_splnone __P((void));
     64  1.3      sato void	_setsoftintr __P((int));
     65  1.3      sato void	_clrsoftintr __P((int));
     66  1.1  takemura 
     67  1.1  takemura #define splhigh()	_splraise(MIPS_INT_MASK)
     68  1.1  takemura #define spl0()		(void)_spllower(0)
     69  1.1  takemura #define splx(s)		(void)_splset(s)
     70  1.1  takemura #define splbio()	(_splraise(splvec.splbio))
     71  1.1  takemura #define splnet()	(_splraise(splvec.splnet))
     72  1.1  takemura #define spltty()	(_splraise(splvec.spltty))
     73  1.9   thorpej #define splimp()	(_splraise(splvec.splvm))
     74  1.9   thorpej #define splvm()		(_splraise(splvec.splvm))
     75  1.1  takemura #define splclock()	(_splraise(splvec.splclock))
     76  1.1  takemura #define splstatclock()	(_splraise(splvec.splstatclock))
     77  1.1  takemura #define spllowersoftclock() _spllower(MIPS_SOFT_INT_MASK_0)
     78  1.1  takemura #define splsoftclock()	_splraise(MIPS_SOFT_INT_MASK_0)
     79  1.4      soda #define splsoftnet()	_splraise(MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)
     80  1.6   thorpej 
     81  1.6   thorpej #define	splsched()	splhigh()
     82  1.7   thorpej #define	spllock()	splhigh()
     83  1.1  takemura 
     84  1.1  takemura struct splvec {
     85  1.1  takemura 	int	splbio;
     86  1.1  takemura 	int	splnet;
     87  1.1  takemura 	int	spltty;
     88  1.9   thorpej 	int	splvm;
     89  1.1  takemura 	int	splclock;
     90  1.1  takemura 	int	splstatclock;
     91  1.1  takemura };
     92  1.1  takemura extern struct splvec splvec;
     93  1.1  takemura 
     94  1.1  takemura /* Conventionals ... */
     95  1.1  takemura 
     96  1.1  takemura #define MIPS_SPLHIGH (MIPS_INT_MASK)
     97  1.1  takemura #define MIPS_SPL0 (MIPS_INT_MASK_0|MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)
     98  1.1  takemura #define MIPS_SPL1 (MIPS_INT_MASK_1|MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)
     99  1.2       uch #define MIPS_SPL2 (MIPS_INT_MASK_2|MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)
    100  1.1  takemura #define MIPS_SPL3 (MIPS_INT_MASK_3|MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)
    101  1.2       uch #define MIPS_SPL4 (MIPS_INT_MASK_4|MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)
    102  1.1  takemura #define MIPS_SPL_0_1	 (MIPS_INT_MASK_1|MIPS_SPL0)
    103  1.1  takemura #define MIPS_SPL_0_1_2	 (MIPS_INT_MASK_2|MIPS_SPL_0_1)
    104  1.1  takemura #define MIPS_SPL_0_1_3	 (MIPS_INT_MASK_3|MIPS_SPL_0_1)
    105  1.1  takemura #define MIPS_SPL_0_1_2_3 (MIPS_INT_MASK_3|MIPS_SPL_0_1_2)
    106  1.2       uch #define MIPS_SPL_2_4     (MIPS_INT_MASK_4|MIPS_SPL2)
    107  1.1  takemura 
    108  1.1  takemura /*
    109  1.1  takemura  * Index into intrcnt[], which is defined in locore
    110  1.1  takemura  */
    111  1.1  takemura extern u_long intrcnt[];
    112  1.1  takemura 
    113  1.1  takemura #define	SOFTCLOCK_INTR	0
    114  1.1  takemura #define	SOFTNET_INTR	1
    115  1.1  takemura #define	SERIAL0_INTR	2
    116  1.1  takemura #define	SERIAL1_INTR	3
    117  1.1  takemura #define	SERIAL2_INTR	4
    118  1.1  takemura #define	LANCE_INTR	5
    119  1.1  takemura #define	SCSI_INTR	6
    120  1.1  takemura #define	ERROR_INTR	7
    121  1.1  takemura #define	HARDCLOCK	8
    122  1.1  takemura #define	FPU_INTR	9
    123  1.1  takemura #define	SLOT0_INTR	10
    124  1.1  takemura #define	SLOT1_INTR	11
    125  1.1  takemura #define	SLOT2_INTR	12
    126  1.1  takemura #define	DTOP_INTR	13
    127  1.1  takemura #define	ISDN_INTR	14
    128  1.1  takemura #define	FLOPPY_INTR	15
    129  1.1  takemura #define	STRAY_INTR	16
    130  1.5       uch 
    131  1.5       uch /*
    132  1.5       uch  * software simulated interrupt
    133  1.5       uch  */
    134  1.5       uch extern unsigned ssir;
    135  1.5       uch 
    136  1.5       uch #define SIR_NET		0x1
    137  1.5       uch 
    138  1.5       uch #define setsoftnet()	setsoft(SIR_NET)
    139  1.5       uch #define setsoft(x) \
    140  1.5       uch 	do { ssir |= (x); _setsoftintr(MIPS_SOFT_INT_MASK_1); } while (0)
    141  1.5       uch 
    142  1.5       uch #define setsoftclock()	_setsoftintr(MIPS_SOFT_INT_MASK_0)
    143  1.5       uch #define clearsoftclock() _clrsoftintr(MIPS_SOFT_INT_MASK_0)
    144  1.5       uch #define clearsoftnet()	 _clrsoftintr(MIPS_SOFT_INT_MASK_1)
    145  1.1  takemura 
    146  1.1  takemura #endif /* !_LOCORE */
    147  1.1  takemura #endif /* _KERNEL */
    148  1.1  takemura 
    149  1.1  takemura #endif /* !_HPCMIPS_INTR_H_ */
    150