interrupt.h revision 66698
1/*
2 * Copyright (c) 1997, Stefan Esser <se@freebsd.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice unmodified, this list of conditions, and the following
10 *    disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 *
26 * $FreeBSD: head/sys/sys/interrupt.h 66698 2000-10-05 23:09:57Z jhb $
27 */
28
29#ifndef _SYS_INTERRUPT_H_
30#define _SYS_INTERRUPT_H_
31
32/*
33 * Describe a hardware interrupt handler.
34 *
35 * Multiple interrupt handlers for a specific vector can be chained
36 * together via the 'next' pointer.
37 */
38
39struct ithd;
40
41struct intrec {
42	driver_intr_t	*handler;	/* code address of handler */
43	void		*argument;	/* argument to pass to handler */
44	enum intr_type	flags;		/* flag bits (sys/bus.h) */
45	char		*name;		/* name of handler */
46	struct ithd	*ithd;		/* handler we're connected to */
47	struct intrec	*next;		/* next handler for this irq */
48};
49
50typedef void swihand_t __P((void));
51
52extern swihand_t *shandlers[];
53
54void	register_swi __P((int intr, swihand_t *handler));
55void	swi_dispatcher __P((int intr));
56swihand_t swi_generic;
57swihand_t swi_null;
58void	unregister_swi __P((int intr, swihand_t *handler));
59int	ithread_priority __P((int flags));
60void	sched_softintr __P((void));
61
62#endif
63