xref: /openbsd/sys/arch/sparc64/include/intr.h (revision db3296cf)
1 /*	$OpenBSD: intr.h,v 1.6 2003/06/24 21:54:39 henric Exp $	*/
2 /*	$NetBSD: intr.h,v 1.8 2001/01/14 23:50:30 thorpej Exp $ */
3 
4 /*-
5  * Copyright (c) 1998 The NetBSD Foundation, Inc.
6  * All rights reserved.
7  *
8  * This code is derived from software contributed to The NetBSD Foundation
9  * by Paul Kranenburg.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in the
18  *    documentation and/or other materials provided with the distribution.
19  * 3. All advertising materials mentioning features or use of this software
20  *    must display the following acknowledgement:
21  *        This product includes software developed by the NetBSD
22  *        Foundation, Inc. and its contributors.
23  * 4. Neither the name of The NetBSD Foundation nor the names of its
24  *    contributors may be used to endorse or promote products derived
25  *    from this software without specific prior written permission.
26  *
27  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
28  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
29  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
30  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
31  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37  * POSSIBILITY OF SUCH DAMAGE.
38  */
39 
40 #ifndef _SPARC64_INTR_H_
41 #define _SPARC64_INTR_H_
42 
43 #ifndef _SPARC64_INTREG_H_
44 #include <sparc64/sparc64/intreg.h>
45 #endif
46 
47 /*
48  * Interrupt handler chains.  Interrupt handlers should return 0 for
49  * ``not me'' or 1 (``I took care of it'').  intr_establish() inserts a
50  * handler into the list.  The handler is called with its (single)
51  * argument, or with a pointer to a clockframe if ih_arg is NULL.
52  */
53 struct intrhand {
54         int                     (*ih_fun)(void *);
55         void                    *ih_arg;
56         short                   ih_number;      /* interrupt number */
57                                                 /* the H/W provides */
58         char                    ih_pil;         /* interrupt priority */
59         volatile char           ih_busy;        /* handler is on list */
60         struct intrhand         *ih_next;       /* global list */
61         struct intrhand         *ih_pending;    /* pending list */
62         volatile u_int64_t      *ih_map;        /* interrupt map reg */
63         volatile u_int64_t      *ih_clr;        /* clear interrupt reg */
64         u_int64_t               ih_count;       /* # of interrupts */
65         const void              *ih_bus;        /* parent bus */
66         char                    ih_name[1];     /* device name */
67 };
68 
69 extern struct intrhand *intrlev[MAXINTNUM];
70 
71 void    intr_establish(int, struct intrhand *);
72 
73 /* XXX - arbitrary numbers; no interpretation is defined yet */
74 #define	IPL_NONE	0		/* nothing */
75 #define	IPL_SOFTINT	1		/* softint */
76 #define	IPL_SOFTCLOCK	1		/* timeouts */
77 #define	IPL_SOFTNET	1		/* protocol stack */
78 #define	IPL_BIO		PIL_BIO		/* block I/O */
79 #define	IPL_NET		PIL_NET		/* network */
80 #define	IPL_SOFTSERIAL	4		/* serial */
81 #define	IPL_TTY		PIL_TTY		/* terminal */
82 #define	IPL_VM		PIL_VM		/* memory allocation */
83 #define	IPL_AUDIO	PIL_AUD		/* audio */
84 #define	IPL_CLOCK	PIL_CLOCK	/* clock */
85 #define	IPL_SERIAL	PIL_SER		/* serial */
86 #define	IPL_SCHED	PIL_SCHED	/* scheduler */
87 #define	IPL_LOCK	PIL_LOCK	/* locks */
88 #define IPL_STATCLOCK	PIL_STATCLOCK	/* statclock */
89 #define	IPL_HIGH	PIL_HIGH	/* everything */
90 
91 void *
92 softintr_establish(int level, void (*fun)(void *), void *arg);
93 
94 void
95 softintr_disestablish(void *cookie);
96 
97 void
98 softintr_schedule(void *cookie);
99 
100 #endif /* _SPARC64_INTR_H_ */
101