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