intr.h revision 1.18
11.18Smartin/* $NetBSD: intr.h,v 1.18 2003/06/23 11:01:28 martin 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.18Smartin 421.18Smartin#include "opt_multiprocessor.h" 431.1Stsubai 441.1Stsubai/* Interrupt priority `levels'. */ 451.1Stsubai#define IPL_NONE 9 /* nothing */ 461.1Stsubai#define IPL_SOFTCLOCK 8 /* timeouts */ 471.1Stsubai#define IPL_SOFTNET 7 /* protocol stacks */ 481.1Stsubai#define IPL_BIO 6 /* block I/O */ 491.1Stsubai#define IPL_NET 5 /* network */ 501.1Stsubai#define IPL_SOFTSERIAL 4 /* serial */ 511.1Stsubai#define IPL_TTY 3 /* terminal */ 521.17Sthorpej#define IPL_VM 3 /* memory allocation */ 531.1Stsubai#define IPL_AUDIO 2 /* audio */ 541.1Stsubai#define IPL_CLOCK 1 /* clock */ 551.1Stsubai#define IPL_HIGH 1 /* everything */ 561.1Stsubai#define IPL_SERIAL 0 /* serial */ 571.1Stsubai#define NIPL 10 581.1Stsubai 591.1Stsubai/* Interrupt sharing types. */ 601.1Stsubai#define IST_NONE 0 /* none */ 611.1Stsubai#define IST_PULSE 1 /* pulsed */ 621.1Stsubai#define IST_EDGE 2 /* edge-triggered */ 631.1Stsubai#define IST_LEVEL 3 /* level-triggered */ 641.1Stsubai 651.1Stsubai#ifndef _LOCORE 661.1Stsubai 671.1Stsubai/* 681.1Stsubai * Interrupt handler chains. intr_establish() inserts a handler into 691.1Stsubai * the list. The handler is called with its (single) argument. 701.1Stsubai */ 711.1Stsubaistruct intrhand { 721.1Stsubai int (*ih_fun) __P((void *)); 731.1Stsubai void *ih_arg; 741.1Stsubai struct intrhand *ih_next; 751.1Stsubai int ih_level; 761.1Stsubai int ih_irq; 771.1Stsubai}; 781.1Stsubai 791.14Smattvoid softnet __P((int)); 801.13Smattvoid softserial __P((void)); 811.1Stsubai 821.9Stsubaiint splraise __P((int)); 831.9Stsubaiint spllower __P((int)); 841.9Stsubaivoid splx __P((int)); 851.9Stsubaivoid softintr __P((int)); 861.1Stsubai 871.9Stsubaiextern volatile int astpending, tickspending; 881.1Stsubaiextern int imask[]; 891.1Stsubai 901.6Stsubai#define ICU_LEN 64 911.1Stsubai 921.1Stsubai/* Soft interrupt masks. */ 931.1Stsubai#define SIR_CLOCK 28 941.1Stsubai#define SIR_NET 29 951.1Stsubai#define SIR_SERIAL 30 961.1Stsubai#define SPL_CLOCK 31 971.1Stsubai 981.1Stsubai/* 991.1Stsubai * Hardware interrupt masks 1001.1Stsubai */ 1011.1Stsubai#define splbio() splraise(imask[IPL_BIO]) 1021.1Stsubai#define splnet() splraise(imask[IPL_NET]) 1031.1Stsubai#define spltty() splraise(imask[IPL_TTY]) 1041.1Stsubai#define splaudio() splraise(imask[IPL_AUDIO]) 1051.1Stsubai#define splclock() splraise(imask[IPL_CLOCK]) 1061.1Stsubai#define splstatclock() splclock() 1071.1Stsubai#define splserial() splraise(imask[IPL_SERIAL]) 1081.2Sis 1091.2Sis#define spllpt() spltty() 1101.1Stsubai 1111.1Stsubai/* 1121.1Stsubai * Software interrupt masks 1131.1Stsubai * 1141.1Stsubai * NOTE: splsoftclock() is used by hardclock() to lower the priority from 1151.1Stsubai * clock to softclock before it calls softclock(). 1161.1Stsubai */ 1171.5Sthorpej#define spllowersoftclock() spllower(imask[IPL_SOFTCLOCK]) 1181.5Sthorpej#define splsoftclock() splraise(imask[IPL_SOFTCLOCK]) 1191.1Stsubai#define splsoftnet() splraise(imask[IPL_SOFTNET]) 1201.1Stsubai#define splsoftserial() splraise(imask[IPL_SOFTSERIAL]) 1211.1Stsubai 1221.1Stsubai/* 1231.1Stsubai * Miscellaneous 1241.1Stsubai */ 1251.17Sthorpej#define splvm() splraise(imask[IPL_VM]) 1261.1Stsubai#define splhigh() splraise(imask[IPL_HIGH]) 1271.7Sthorpej#define splsched() splhigh() 1281.8Sthorpej#define spllock() splhigh() 1291.1Stsubai#define spl0() spllower(0) 1301.1Stsubai 1311.1Stsubai#define setsoftclock() softintr(SIR_CLOCK) 1321.1Stsubai#define setsoftnet() softintr(SIR_NET) 1331.1Stsubai#define setsoftserial() softintr(SIR_SERIAL) 1341.1Stsubai 1351.4Stsubaiextern long intrcnt[]; 1361.4Stsubai 1371.4Stsubai#define CNT_IRQ0 0 1381.4Stsubai#define CNT_CLOCK 64 1391.4Stsubai#define CNT_SOFTCLOCK 65 1401.4Stsubai#define CNT_SOFTNET 66 1411.4Stsubai#define CNT_SOFTSERIAL 67 1421.4Stsubai 1431.15Schs#ifdef MULTIPROCESSOR 1441.15Schs#define MACPPC_IPI_HALT 0x0001 1451.15Schs#define MACPPC_IPI_FLUSH_FPU 0x0002 1461.15Schs#define MACPPC_IPI_FLUSH_VEC 0x0004 1471.1Stsubai 1481.11Stsubaistruct cpu_info; 1491.15Schsvoid macppc_send_ipi(volatile struct cpu_info *, u_long); 1501.11Stsubai#endif 1511.11Stsubai 1521.11Stsubai#endif /* _LOCORE */ 1531.11Stsubai 1541.11Stsubai#endif /* _MACPPC_INTR_H_ */ 155