intr.h revision 1.1
1/* 	$NetBSD: intr.h,v 1.1 2001/09/05 04:53:40 matt Exp $	*/
2
3/*
4 * Copyright (c) 1997 Mark Brinicombe.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 *    notice, this list of conditions and the following disclaimer in the
14 *    documentation and/or other materials provided with the distribution.
15 * 3. All advertising materials mentioning features or use of this software
16 *    must display the following acknowledgement:
17 *	This product includes software developed by Mark Brinicombe
18 *	for the NetBSD Project.
19 * 4. The name of the company nor the name of the author may be used to
20 *    endorse or promote products derived from this software without specific
21 *    prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
24 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26 * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
27 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 */
35
36#ifndef _EVBARM_INTR_H_
37#define _EVBARM_INTR_H_
38
39/* Define the various Interrupt Priority Levels */
40
41/* Interrupt Priority Levels are mutually exclusive. */
42
43#define	IPL_NONE	0	/* no interrupts blocked */
44#define	IPL_SOFT	1	/* generic soft interrupts */
45#define	IPL_SOFTCLOCK	2	/* clock soft interrupts */
46#define	IPL_SOFTNET	3	/* network soft interrupts */
47#define	IPL_SOFTSERIAL	4	/* serial soft interrupts */
48#define IPL_BIO		5	/* block I/O */
49#define IPL_NET		6	/* network */
50#define IPL_TTY		7	/* terminal */
51#define IPL_IMP		8	/* memory allocation */
52#define IPL_AUDIO	9	/* audio */
53#define IPL_CLOCK	10	/* clock */
54#define IPL_SERIAL	11	/* serial */
55#define IPL_PERF	12	/* peformance monitoring unit */
56#define IPL_HIGH	13	/* blocks all interrupts */
57
58#define IPL_LEVELS	14
59
60#define	IST_UNUSABLE	-1	/* interrupt cannot be used */
61#define	IST_NONE	0	/* none (dummy) */
62#define	IST_PULSE	1	/* pulsed */
63#define	IST_EDGE	2	/* edge-triggered */
64#define	IST_LEVEL	3	/* level-triggered */
65
66#if defined (_KERNEL) && !defined(_LOCORE)
67#include <sys/queue.h>
68
69extern int _splraise(int);
70extern int _spllower(int);
71extern int _splget(int);
72extern int _splset(int);
73extern int _splnone(void);
74extern int _softintrset(int);
75extern int _softintrclr(int);
76
77#define	splsoftclock()		_splraise(IPL_SOFTCLOCK)
78#define	splsoftnet()		_splraise(IPL_SOFTNET)
79#define	splsoftserial()		_splraise(IPL_SOFTSERIAL)
80#define	splbio()		_splraise(IPL_BIO)
81#define	splnet()		_splraise(IPL_NET)
82#define	spltty()		_splraise(IPL_TTY)
83#define	splvm()			_splraise(IPL_IMP)
84#define	splaudio()		_splraise(IPL_AUDIO)
85#define	splclock()		_splraise(IPL_CLOCK)
86#define	splserial()		_splraise(IPL_SERIAL)
87#define	splhigh()		_splraise(IPL_HIGH)
88#define	spl0()			(void) _splnone()
89#define	splx(s)			(void) _splset(s)
90
91#define	spllock()		splhigh()
92#define	splsched()		splclock()
93#define	splstatclock()		splclock()
94
95#define	spllowersoftclock()	_spllower(IPL_SOFTCLOCK)
96
97#define	setsoftclock()		_softintrset(IPL_SOFTCLOCK)
98#define	setsoftnet()		_softintrset(IPL_SOFTNET)
99#define	setsoftserial()		_softintrset(IPL_SOFTSERIAL)
100
101struct intrsource {
102	void *is_cookie;
103	LIST_ENTRY(evbarm_intrsource) is_link;
104	void *(*is_establish)(void *, int, int, int (*)(void *), void *);
105	void (*is_disestablish)(void *, void *);
106
107	void (*is_setmask)(int);
108};
109
110#define	intr_establish(src, irq, type, func, arg) \
111	(((src)->is_establish)((src)->is_cookie, irq, type, func, arg))
112#define	intr_disestablish(src, ih) \
113	(((src)->is_disestablish)((src)->is_cookie, ih))
114#endif	/* _KERNEL */
115
116#endif	/* _EVBARM_INTR_H */
117