intr.h revision 1.17
11.17Sthorpej/* $NetBSD: intr.h,v 1.17 2003/06/16 20:01:01 thorpej Exp $ */ 21.1Stsubai 31.3Smycroft/*- 41.3Smycroft * Copyright (c) 1998 The NetBSD Foundation, Inc. 51.3Smycroft * All rights reserved. 61.3Smycroft * 71.3Smycroft * This code is derived from software contributed to The NetBSD Foundation 81.3Smycroft * by Charles M. Hannum. 91.1Stsubai * 101.1Stsubai * Redistribution and use in source and binary forms, with or without 111.1Stsubai * modification, are permitted provided that the following conditions 121.1Stsubai * are met: 131.1Stsubai * 1. Redistributions of source code must retain the above copyright 141.1Stsubai * notice, this list of conditions and the following disclaimer. 151.1Stsubai * 2. Redistributions in binary form must reproduce the above copyright 161.1Stsubai * notice, this list of conditions and the following disclaimer in the 171.1Stsubai * documentation and/or other materials provided with the distribution. 181.1Stsubai * 3. All advertising materials mentioning features or use of this software 191.1Stsubai * must display the following acknowledgement: 201.3Smycroft * This product includes software developed by the NetBSD 211.3Smycroft * Foundation, Inc. and its contributors. 221.3Smycroft * 4. Neither the name of The NetBSD Foundation nor the names of its 231.3Smycroft * contributors may be used to endorse or promote products derived 241.3Smycroft * from this software without specific prior written permission. 251.1Stsubai * 261.3Smycroft * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 271.3Smycroft * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 281.3Smycroft * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 291.3Smycroft * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 301.3Smycroft * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 311.3Smycroft * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 321.3Smycroft * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 331.3Smycroft * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 341.3Smycroft * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 351.3Smycroft * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 361.3Smycroft * POSSIBILITY OF SUCH DAMAGE. 371.1Stsubai */ 381.1Stsubai 391.4Stsubai#ifndef _MACPPC_INTR_H_ 401.4Stsubai#define _MACPPC_INTR_H_ 411.1Stsubai 421.1Stsubai/* Interrupt priority `levels'. */ 431.1Stsubai#define IPL_NONE 9 /* nothing */ 441.1Stsubai#define IPL_SOFTCLOCK 8 /* timeouts */ 451.1Stsubai#define IPL_SOFTNET 7 /* protocol stacks */ 461.1Stsubai#define IPL_BIO 6 /* block I/O */ 471.1Stsubai#define IPL_NET 5 /* network */ 481.1Stsubai#define IPL_SOFTSERIAL 4 /* serial */ 491.1Stsubai#define IPL_TTY 3 /* terminal */ 501.17Sthorpej#define IPL_VM 3 /* memory allocation */ 511.1Stsubai#define IPL_AUDIO 2 /* audio */ 521.1Stsubai#define IPL_CLOCK 1 /* clock */ 531.1Stsubai#define IPL_HIGH 1 /* everything */ 541.1Stsubai#define IPL_SERIAL 0 /* serial */ 551.1Stsubai#define NIPL 10 561.1Stsubai 571.1Stsubai/* Interrupt sharing types. */ 581.1Stsubai#define IST_NONE 0 /* none */ 591.1Stsubai#define IST_PULSE 1 /* pulsed */ 601.1Stsubai#define IST_EDGE 2 /* edge-triggered */ 611.1Stsubai#define IST_LEVEL 3 /* level-triggered */ 621.1Stsubai 631.1Stsubai#ifndef _LOCORE 641.1Stsubai 651.1Stsubai/* 661.1Stsubai * Interrupt handler chains. intr_establish() inserts a handler into 671.1Stsubai * the list. The handler is called with its (single) argument. 681.1Stsubai */ 691.1Stsubaistruct intrhand { 701.1Stsubai int (*ih_fun) __P((void *)); 711.1Stsubai void *ih_arg; 721.1Stsubai struct intrhand *ih_next; 731.1Stsubai int ih_level; 741.1Stsubai int ih_irq; 751.1Stsubai}; 761.1Stsubai 771.14Smattvoid softnet __P((int)); 781.13Smattvoid softserial __P((void)); 791.1Stsubai 801.9Stsubaiint splraise __P((int)); 811.9Stsubaiint spllower __P((int)); 821.9Stsubaivoid splx __P((int)); 831.9Stsubaivoid softintr __P((int)); 841.1Stsubai 851.9Stsubaiextern volatile int astpending, tickspending; 861.1Stsubaiextern int imask[]; 871.1Stsubai 881.6Stsubai#define ICU_LEN 64 891.1Stsubai 901.1Stsubai/* Soft interrupt masks. */ 911.1Stsubai#define SIR_CLOCK 28 921.1Stsubai#define SIR_NET 29 931.1Stsubai#define SIR_SERIAL 30 941.1Stsubai#define SPL_CLOCK 31 951.1Stsubai 961.1Stsubai/* 971.1Stsubai * Hardware interrupt masks 981.1Stsubai */ 991.1Stsubai#define splbio() splraise(imask[IPL_BIO]) 1001.1Stsubai#define splnet() splraise(imask[IPL_NET]) 1011.1Stsubai#define spltty() splraise(imask[IPL_TTY]) 1021.1Stsubai#define splaudio() splraise(imask[IPL_AUDIO]) 1031.1Stsubai#define splclock() splraise(imask[IPL_CLOCK]) 1041.1Stsubai#define splstatclock() splclock() 1051.1Stsubai#define splserial() splraise(imask[IPL_SERIAL]) 1061.2Sis 1071.2Sis#define spllpt() spltty() 1081.1Stsubai 1091.1Stsubai/* 1101.1Stsubai * Software interrupt masks 1111.1Stsubai * 1121.1Stsubai * NOTE: splsoftclock() is used by hardclock() to lower the priority from 1131.1Stsubai * clock to softclock before it calls softclock(). 1141.1Stsubai */ 1151.5Sthorpej#define spllowersoftclock() spllower(imask[IPL_SOFTCLOCK]) 1161.5Sthorpej#define splsoftclock() splraise(imask[IPL_SOFTCLOCK]) 1171.1Stsubai#define splsoftnet() splraise(imask[IPL_SOFTNET]) 1181.1Stsubai#define splsoftserial() splraise(imask[IPL_SOFTSERIAL]) 1191.1Stsubai 1201.1Stsubai/* 1211.1Stsubai * Miscellaneous 1221.1Stsubai */ 1231.17Sthorpej#define splvm() splraise(imask[IPL_VM]) 1241.1Stsubai#define splhigh() splraise(imask[IPL_HIGH]) 1251.7Sthorpej#define splsched() splhigh() 1261.8Sthorpej#define spllock() splhigh() 1271.1Stsubai#define spl0() spllower(0) 1281.1Stsubai 1291.1Stsubai#define setsoftclock() softintr(SIR_CLOCK) 1301.1Stsubai#define setsoftnet() softintr(SIR_NET) 1311.1Stsubai#define setsoftserial() softintr(SIR_SERIAL) 1321.1Stsubai 1331.4Stsubaiextern long intrcnt[]; 1341.4Stsubai 1351.4Stsubai#define CNT_IRQ0 0 1361.4Stsubai#define CNT_CLOCK 64 1371.4Stsubai#define CNT_SOFTCLOCK 65 1381.4Stsubai#define CNT_SOFTNET 66 1391.4Stsubai#define CNT_SOFTSERIAL 67 1401.4Stsubai 1411.15Schs#ifdef MULTIPROCESSOR 1421.15Schs#define MACPPC_IPI_HALT 0x0001 1431.15Schs#define MACPPC_IPI_FLUSH_FPU 0x0002 1441.15Schs#define MACPPC_IPI_FLUSH_VEC 0x0004 1451.1Stsubai 1461.11Stsubaistruct cpu_info; 1471.15Schsvoid macppc_send_ipi(volatile struct cpu_info *, u_long); 1481.11Stsubai#endif 1491.11Stsubai 1501.11Stsubai#endif /* _LOCORE */ 1511.11Stsubai 1521.11Stsubai#endif /* _MACPPC_INTR_H_ */ 153