1 /* $NetBSD: isr.h,v 1.3 2008/04/28 20:23:26 martin Exp $ */ 2 3 /*- 4 * Copyright (c) 1996 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Jason R. Thorpe. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 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/queue.h> 33 34 /* 35 * The location and size of the autovectored interrupt portion 36 * of the vector table. 37 */ 38 #define ISRAUTOVEC 0x18 39 #define NISRAUTOVEC 8 40 41 /* 42 * The location and size of the vectored interrupt portion 43 * of the vector table. 44 */ 45 #define ISRVECTORED 0x40 46 #define NISRVECTORED 192 47 48 /* 49 * Autovectored interrupt handler cookie. 50 */ 51 struct isr_autovec { 52 LIST_ENTRY(isr_autovec) isr_link; 53 int (*isr_func) __P((void *)); 54 void *isr_arg; 55 int isr_ipl; 56 int isr_priority; 57 }; 58 59 typedef LIST_HEAD(, isr_autovec) isr_autovec_list_t; 60 61 /* 62 * Vectored interrupt handler cookie. The handler may request to 63 * receive the exception frame as an argument by specifying NULL 64 * when establishing the interrupt. 65 */ 66 struct isr_vectored { 67 int (*isr_func) __P((void *)); 68 void *isr_arg; 69 int isr_ipl; 70 }; 71 72 /* 73 * Autovectored ISR priorities. These are not the same as interrupt levels. 74 */ 75 #define ISRPRI_BIO 0 76 #define ISRPRI_NET 1 77 #define ISRPRI_TTY 2 78 #define ISRPRI_TTYNOBUF 3 79 80 void isrinit __P((void)); 81 void isrlink_autovec __P((int (*)(void *), void *, int, int)); 82 void isrlink_vectored __P((int (*)(void *), void *, int, int)); 83 void isrunlink_vectored __P((int)); 84 void isrdispatch_autovec __P((int)); 85 void isrdispatch_vectored __P((int, int, void *)); 86