Home | History | Annotate | Line # | Download | only in include
intr.h revision 1.1.1.1.2.1
      1  1.1.1.1.2.1    bouyer /*	$NetBSD: intr.h,v 1.1.1.1.2.1 2000/11/20 20:46:46 bouyer 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.1.1.1.2.1    bouyer int	_splraise __P((int));
     60  1.1.1.1.2.1    bouyer int	_spllower __P((int));
     61  1.1.1.1.2.1    bouyer int	_splset __P((int));
     62  1.1.1.1.2.1    bouyer int	_splget __P((void));
     63  1.1.1.1.2.1    bouyer void	_splnone __P((void));
     64  1.1.1.1.2.1    bouyer void	_setsoftintr __P((int));
     65  1.1.1.1.2.1    bouyer 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.1  takemura #define splimp()	(_splraise(splvec.splimp))
     74          1.1  takemura #define splpmap()	(_splraise(splvec.splimp))
     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.1.1.1.2.1    bouyer #define splsoftnet()	_splraise(MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)
     80  1.1.1.1.2.1    bouyer 
     81  1.1.1.1.2.1    bouyer #define	splsched()	splhigh()
     82  1.1.1.1.2.1    bouyer #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.1  takemura 	int	splimp;
     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.1.1.1.2.1    bouyer #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.1.1.1.2.1    bouyer #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.1.1.1.2.1    bouyer #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.1  takemura 
    131  1.1.1.1.2.1    bouyer /*
    132  1.1.1.1.2.1    bouyer  * software simulated interrupt
    133  1.1.1.1.2.1    bouyer  */
    134  1.1.1.1.2.1    bouyer extern unsigned ssir;
    135  1.1.1.1.2.1    bouyer 
    136  1.1.1.1.2.1    bouyer #define SIR_NET		0x1
    137  1.1.1.1.2.1    bouyer 
    138  1.1.1.1.2.1    bouyer #define setsoftnet()	setsoft(SIR_NET)
    139  1.1.1.1.2.1    bouyer #define setsoft(x) \
    140  1.1.1.1.2.1    bouyer 	do { ssir |= (x); _setsoftintr(MIPS_SOFT_INT_MASK_1); } while (0)
    141  1.1.1.1.2.1    bouyer 
    142  1.1.1.1.2.1    bouyer #define setsoftclock()	_setsoftintr(MIPS_SOFT_INT_MASK_0)
    143  1.1.1.1.2.1    bouyer #define clearsoftclock() _clrsoftintr(MIPS_SOFT_INT_MASK_0)
    144  1.1.1.1.2.1    bouyer #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