1 /* $NetBSD: intr.h,v 1.10 1997/07/07 20:37:34 cgd Exp $ */ 2 3 /* 4 * Copyright (c) 1997 Christopher G. Demetriou. All rights reserved. 5 * Copyright (c) 1996 Carnegie-Mellon University. 6 * All rights reserved. 7 * 8 * Author: Chris G. Demetriou 9 * 10 * Permission to use, copy, modify and distribute this software and 11 * its documentation is hereby granted, provided that both the copyright 12 * notice and this permission notice appear in all copies of the 13 * software, derivative works or modified versions, and any portions 14 * thereof, and that both notices appear in supporting documentation. 15 * 16 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 17 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 18 * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 19 * 20 * Carnegie Mellon requests users of this software to return to 21 * 22 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 23 * School of Computer Science 24 * Carnegie Mellon University 25 * Pittsburgh PA 15213-3890 26 * 27 * any improvements or extensions that they make and grant Carnegie the 28 * rights to redistribute these changes. 29 */ 30 31 #ifndef _ALPHA_INTR_H_ 32 #define _ALPHA_INTR_H_ 33 34 #include <sys/queue.h> 35 36 #define IPL_NONE 0 /* disable only this interrupt */ 37 #define IPL_BIO 1 /* disable block I/O interrupts */ 38 #define IPL_NET 2 /* disable network interrupts */ 39 #define IPL_TTY 3 /* disable terminal interrupts */ 40 #define IPL_CLOCK 4 /* disable clock interrupts */ 41 #define IPL_HIGH 5 /* disable all interrupts */ 42 43 #define IST_UNUSABLE -1 /* interrupt cannot be used */ 44 #define IST_NONE 0 /* none (dummy) */ 45 #define IST_PULSE 1 /* pulsed */ 46 #define IST_EDGE 2 /* edge-triggered */ 47 #define IST_LEVEL 3 /* level-triggered */ 48 49 /* IPL-lowering/restoring macros */ 50 #define splx(s) \ 51 ((s) == ALPHA_PSL_IPL_0 ? spl0() : alpha_pal_swpipl(s)) 52 #define splsoft() alpha_pal_swpipl(ALPHA_PSL_IPL_SOFT) 53 #define splsoftclock() splsoft() 54 #define splsoftnet() splsoft() 55 56 /* IPL-raising functions/macros */ 57 static __inline int _splraise __P((int)) __attribute__ ((unused)); 58 static __inline int 59 _splraise(s) 60 int s; 61 { 62 int cur = alpha_pal_rdps() & ALPHA_PSL_IPL_MASK; 63 return (s > cur ? alpha_pal_swpipl(s) : cur); 64 } 65 #define splnet() _splraise(ALPHA_PSL_IPL_IO) 66 #define splbio() _splraise(ALPHA_PSL_IPL_IO) 67 #define splimp() _splraise(ALPHA_PSL_IPL_IO) 68 #define spltty() _splraise(ALPHA_PSL_IPL_IO) 69 #define splclock() _splraise(ALPHA_PSL_IPL_CLOCK) 70 #define splstatclock() _splraise(ALPHA_PSL_IPL_CLOCK) 71 #define splhigh() _splraise(ALPHA_PSL_IPL_HIGH) 72 73 /* 74 * simulated software interrupt register 75 */ 76 extern u_int64_t ssir; 77 78 #define SIR_NET 0x1 79 #define SIR_CLOCK 0x2 80 81 #define setsoftnet() ssir |= SIR_NET 82 #define setsoftclock() ssir |= SIR_CLOCK 83 84 /* 85 * Alpha shared-interrupt-line common code. 86 */ 87 88 struct alpha_shared_intrhand { 89 TAILQ_ENTRY(alpha_shared_intrhand) 90 ih_q; 91 int (*ih_fn) __P((void *)); 92 void *ih_arg; 93 int ih_level; 94 }; 95 96 struct alpha_shared_intr { 97 TAILQ_HEAD(,alpha_shared_intrhand) 98 intr_q; 99 int intr_sharetype; 100 int intr_dfltsharetype; 101 int intr_nstrays; 102 int intr_maxstrays; 103 }; 104 105 struct alpha_shared_intr *alpha_shared_intr_alloc __P((unsigned int)); 106 int alpha_shared_intr_dispatch __P((struct alpha_shared_intr *, 107 unsigned int)); 108 void *alpha_shared_intr_establish __P((struct alpha_shared_intr *, 109 unsigned int, int, int, int (*)(void *), void *, const char *)); 110 int alpha_shared_intr_get_sharetype __P((struct alpha_shared_intr *, 111 unsigned int)); 112 int alpha_shared_intr_isactive __P((struct alpha_shared_intr *, 113 unsigned int)); 114 void alpha_shared_intr_set_dfltsharetype __P((struct alpha_shared_intr *, 115 unsigned int, int)); 116 void alpha_shared_intr_set_maxstrays __P((struct alpha_shared_intr *, 117 unsigned int, int)); 118 void alpha_shared_intr_stray __P((struct alpha_shared_intr *, unsigned int, 119 const char *)); 120 121 #endif 122