intr.h revision 1.3
1/*	$NetBSD: intr.h,v 1.3 2007/12/03 15:34:12 ad Exp $ */
2
3/*-
4 * Copyright (c) 2007 Michael Lorenz
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. Neither the name of The NetBSD Foundation nor the names of its
16 *    contributors may be used to endorse or promote products derived
17 *    from this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#include <sys/cdefs.h>
33__KERNEL_RCSID(0, "$NetBSD: intr.h,v 1.3 2007/12/03 15:34:12 ad Exp $");
34
35#ifndef POWERPC_INTR_MACHDEP_H
36#define POWERPC_INTR_MACHDEP_H
37
38void *intr_establish(int, int, int, int (*)(void *), void *);
39void intr_disestablish(void *);
40const char *intr_typename(int);
41void genppc_cpu_configure(void);
42
43/* Interrupt priority `levels'. */
44#define	IPL_NONE	0	/* nothing */
45#define	IPL_SOFTCLOCK	1	/* timeouts */
46#define	IPL_SOFTBIO	2	/* block I/O */
47#define	IPL_SOFTNET	3	/* protocol stacks */
48#define	IPL_SOFTSERIAL	4	/* serial */
49#define	IPL_VM		5	/* memory allocation */
50#define	IPL_SCHED	6
51#define	IPL_HIGH	7	/* everything */
52#define	NIPL		8
53
54/* Interrupt sharing types. */
55#define	IST_NONE	0	/* none */
56#define	IST_PULSE	1	/* pulsed */
57#define	IST_EDGE	2	/* edge-triggered */
58#define	IST_LEVEL	3	/* level-triggered */
59
60#ifndef _LOCORE
61/*
62 * Interrupt handler chains.  intr_establish() inserts a handler into
63 * the list.  The handler is called with its (single) argument.
64 */
65struct intrhand {
66	int	(*ih_fun)(void *);
67	void	*ih_arg;
68	struct	intrhand *ih_next;
69	int	ih_level;
70	int	ih_irq;
71};
72
73int splraise(int);
74int spllower(int);
75void splx(int);
76void softintr(int);
77
78extern int imask[];
79
80/* Soft interrupt masks. */
81#define SIR_CLOCK	27
82#define SIR_BIO		28
83#define SIR_NET		29
84#define SIR_SERIAL	30
85#define SPL_CLOCK	31
86
87#define setsoftclock()	softintr(SIR_CLOCK)
88#define setsoftbio()	softintr(SIR_BIO)
89#define setsoftnet()	softintr(SIR_NET)
90#define setsoftserial()	softintr(SIR_SERIAL)
91
92#define spl0()		spllower(0)
93
94typedef int ipl_t;
95typedef struct {
96	ipl_t _ipl;
97} ipl_cookie_t;
98
99static inline ipl_cookie_t
100makeiplcookie(ipl_t ipl)
101{
102
103	return (ipl_cookie_t){._ipl = ipl};
104}
105
106static inline int
107splraiseipl(ipl_cookie_t icookie)
108{
109
110	return splraise(imask[icookie._ipl]);
111}
112
113#include <sys/spl.h>
114
115#endif /* _LOCORE */
116
117#endif /* POWERPC_INTR_MACHDEP_H */
118