Home | History | Annotate | Line # | Download | only in include
intr.h revision 1.13.10.1
      1  1.13.10.1    skrll /*	$NetBSD: intr.h,v 1.13.10.1 2004/08/03 10:40:07 skrll Exp $	*/
      2        1.1    soren 
      3        1.1    soren /*
      4        1.1    soren  * Copyright (c) 2000 Soren S. Jorvang
      5        1.1    soren  * All rights reserved.
      6       1.12   simonb  *
      7        1.1    soren  * Redistribution and use in source and binary forms, with or without
      8        1.1    soren  * modification, are permitted provided that the following conditions
      9        1.1    soren  * are met:
     10        1.1    soren  * 1. Redistributions of source code must retain the above copyright
     11        1.1    soren  *    notice, this list of conditions and the following disclaimer.
     12        1.1    soren  * 2. Redistributions in binary form must reproduce the above copyright
     13        1.1    soren  *    notice, this list of conditions and the following disclaimer in the
     14        1.1    soren  *    documentation and/or other materials provided with the distribution.
     15        1.1    soren  * 3. All advertising materials mentioning features or use of this software
     16        1.1    soren  *    must display the following acknowledgement:
     17        1.1    soren  *          This product includes software developed for the
     18  1.13.10.1    skrll  *          NetBSD Project.  See http://www.NetBSD.org/ for
     19        1.1    soren  *          information about NetBSD.
     20        1.1    soren  * 4. The name of the author may not be used to endorse or promote products
     21        1.1    soren  *    derived from this software without specific prior written permission.
     22       1.12   simonb  *
     23        1.1    soren  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     24        1.1    soren  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     25        1.1    soren  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     26        1.1    soren  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     27        1.1    soren  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     28        1.1    soren  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     29        1.1    soren  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     30        1.1    soren  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     31        1.1    soren  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     32        1.1    soren  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     33        1.1    soren  */
     34        1.1    soren 
     35        1.7  thorpej #ifndef	_SGIMIPS_INTR_H_
     36        1.7  thorpej #define	_SGIMIPS_INTR_H_
     37        1.7  thorpej 
     38        1.1    soren #define	IPL_NONE	0	/* Disable only this interrupt. */
     39        1.1    soren #define	IPL_BIO		1	/* Disable block I/O interrupts. */
     40        1.1    soren #define	IPL_NET		2	/* Disable network interrupts. */
     41        1.1    soren #define	IPL_TTY		3	/* Disable terminal interrupts. */
     42        1.1    soren #define	IPL_CLOCK	4	/* Disable clock interrupts. */
     43        1.1    soren #define	IPL_STATCLOCK	5	/* Disable profiling interrupts. */
     44        1.1    soren #ifndef __NO_SOFT_SERIAL_INTERRUPT
     45        1.1    soren #define	IPL_SERIAL	6	/* Disable serial hardware interrupts. */
     46        1.1    soren #endif
     47        1.1    soren #define	IPL_HIGH	7	/* Disable all interrupts. */
     48        1.1    soren #define NIPL		8
     49        1.1    soren 
     50        1.1    soren /* Interrupt sharing types. */
     51        1.1    soren #define IST_NONE	0	/* none */
     52        1.1    soren #define IST_PULSE	1	/* pulsed */
     53        1.1    soren #define IST_EDGE	2	/* edge-triggered */
     54        1.1    soren #define IST_LEVEL	3	/* level-triggered */
     55        1.1    soren 
     56        1.7  thorpej /* Soft interrupt numbers */
     57  1.13.10.1    skrll #define	IPL_SOFT	0	/* generic software interrupts */
     58  1.13.10.1    skrll #define	IPL_SOFTSERIAL	1	/* serial software interrupts */
     59  1.13.10.1    skrll #define	IPL_SOFTNET	2	/* network software interrupts */
     60  1.13.10.1    skrll #define	IPL_SOFTCLOCK	3	/* clock software interrupts */
     61  1.13.10.1    skrll #define	_IPL_NSOFT	4
     62        1.7  thorpej 
     63        1.7  thorpej #define	IPL_SOFTNAMES {							\
     64  1.13.10.1    skrll 	"misc",								\
     65        1.7  thorpej 	"serial",							\
     66        1.7  thorpej 	"net",								\
     67        1.7  thorpej 	"clock",							\
     68        1.7  thorpej }
     69        1.1    soren 
     70        1.1    soren #ifdef _KERNEL
     71        1.1    soren #ifndef _LOCORE
     72        1.1    soren 
     73        1.7  thorpej #include <sys/queue.h>
     74        1.7  thorpej #include <sys/types.h>
     75        1.7  thorpej #include <sys/device.h>
     76        1.1    soren #include <mips/cpuregs.h>
     77        1.1    soren 
     78        1.7  thorpej #define NINTR	32
     79        1.7  thorpej 
     80       1.10    soren struct sgimips_intrhand {
     81       1.10    soren 	LIST_ENTRY(sgimips_intrhand)
     82        1.7  thorpej 		ih_q;
     83  1.13.10.1    skrll 	int	(*ih_fun) (void *);
     84        1.7  thorpej 	void	 *ih_arg;
     85       1.10    soren 	struct	sgimips_intr *ih_intrhead;
     86  1.13.10.1    skrll 	struct	sgimips_intrhand *ih_next;
     87        1.7  thorpej 	int	ih_pending;
     88        1.7  thorpej };
     89        1.7  thorpej 
     90       1.10    soren struct sgimips_intr {
     91       1.10    soren 	LIST_HEAD(,sgimips_intrhand)
     92        1.7  thorpej 		intr_q;
     93        1.7  thorpej 	struct	evcnt ih_evcnt;
     94        1.7  thorpej 	unsigned long intr_ipl;
     95        1.7  thorpej };
     96        1.7  thorpej 
     97       1.10    soren extern struct sgimips_intrhand intrtab[];
     98        1.7  thorpej 
     99        1.1    soren extern int		_splraise(int);
    100       1.12   simonb extern int		_spllower(int);
    101        1.1    soren extern int		_splset(int);
    102        1.1    soren extern int		_splget(void);
    103       1.12   simonb extern void		_splnone(void);
    104        1.1    soren extern void		_setsoftintr(int);
    105        1.1    soren extern void		_clrsoftintr(int);
    106        1.1    soren 
    107        1.2    soren extern u_int32_t 	biomask;
    108        1.2    soren extern u_int32_t 	netmask;
    109        1.2    soren extern u_int32_t 	ttymask;
    110        1.2    soren extern u_int32_t 	clockmask;
    111        1.1    soren 
    112       1.12   simonb #define splhigh()	_splraise(MIPS_INT_MASK)
    113       1.12   simonb #define spl0()		(void)_spllower(0)
    114       1.12   simonb #define splx(s)		(void)_splset(s)
    115       1.12   simonb #define splbio()	_splraise(biomask)
    116       1.12   simonb #define splnet()	_splraise(netmask)
    117       1.12   simonb #define spltty()	_splraise(ttymask)
    118       1.12   simonb #define splvm()		spltty()
    119       1.12   simonb #define splclock()	_splraise(clockmask)
    120       1.12   simonb #define splstatclock()	splclock()
    121        1.2    soren 
    122        1.3  thorpej #define	splsched()	splhigh()
    123        1.4  thorpej #define	spllock()	splhigh()
    124       1.13    rafal #define splserial()	spltty()
    125        1.2    soren #define spllpt()	spltty()
    126        1.1    soren 
    127        1.9    rafal #define splsoft()	_splraise(MIPS_SOFT_INT_MASK_1)
    128        1.9    rafal #define splsoftclock()	splsoft()
    129        1.7  thorpej #define splsoftnet()	splsoft()
    130        1.9    rafal 
    131        1.9    rafal #define spllowersoftclock() _spllower(MIPS_SOFT_INT_MASK_1)
    132        1.1    soren 
    133        1.1    soren extern void *		cpu_intr_establish(int, int, int (*)(void *), void *);
    134  1.13.10.1    skrll 
    135  1.13.10.1    skrll #include <mips/softintr.h>
    136        1.1    soren 
    137        1.1    soren #endif /* _LOCORE */
    138       1.10    soren #endif /* !_KERNEL */
    139        1.7  thorpej 
    140        1.7  thorpej #endif	/* !_SGIMIPS_INTR_H_ */
    141