1 /* $NetBSD: psl.h,v 1.1 1996/09/30 16:34:32 ws Exp $ */ 2 3 /* 4 * Copyright (C) 1995, 1996 Wolfgang Solfrank. 5 * Copyright (C) 1995, 1996 TooLs GmbH. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. All advertising materials mentioning features or use of this software 17 * must display the following acknowledgement: 18 * This product includes software developed by TooLs GmbH. 19 * 4. The name of TooLs GmbH may not be used to endorse or promote products 20 * derived from this software without specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR 23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25 * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 27 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 28 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 29 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 30 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 31 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 #ifndef _MACHINE_PSL_H_ 34 #define _MACHINE_PSL_H_ 35 36 /* 37 * Flags in MSR: 38 */ 39 #define PSL_POW 0x00040000 40 #define PSL_ILE 0x00010000 41 #define PSL_EE 0x00008000 42 #define PSL_PR 0x00004000 43 #define PSL_FP 0x00002000 44 #define PSL_ME 0x00001000 45 #define PSL_FE0 0x00000800 46 #define PSL_SE 0x00000400 47 #define PSL_BE 0x00000200 48 #define PSL_FE1 0x00000100 49 #define PSL_IP 0x00000040 50 #define PSL_IR 0x00000020 51 #define PSL_DR 0x00000010 52 #define PSL_RI 0x00000002 53 #define PSL_LE 0x00000001 54 55 /* 56 * Floating-point exception modes: 57 */ 58 #define PSL_FE_DIS 0 59 #define PSL_FE_NONREC PSL_FE1 60 #define PSL_FE_REC PSL_FE0 61 #define PSL_FE_PREC (PSL_FE0 | PSL_FE1) 62 #define PSL_FE_DFLT PSL_FE_DIS 63 64 /* 65 * Note that PSL_POW and PSL_ILE are not in the saved copy of the MSR 66 */ 67 #define PSL_MBO 0 68 #define PSL_MBZ 0 69 70 #define PSL_USERSET (PSL_EE | PSL_PR | PSL_ME | PSL_IR | PSL_DR | PSL_RI) 71 72 #define PSL_USERSTATIC (PSL_USERSET | PSL_IP | 0x87c0008c) 73 74 75 #ifdef _KERNEL 76 /* 77 * Current processor level. 78 */ 79 #ifndef _LOCORE 80 extern int cpl; 81 extern int clockpending, softclockpending, softnetpending; 82 #endif 83 #define SPLBIO 0x01 84 #define SPLNET 0x02 85 #define SPLTTY 0x04 86 #define SPLIMP 0x08 87 #define SPLSOFTCLOCK 0x10 88 #define SPLSOFTNET 0x20 89 #define SPLCLOCK 0x80 90 #define SPLMACHINE 0x0f /* levels handled by machine interface */ 91 92 #ifndef _LOCORE 93 extern int splx __P((int)); 94 95 extern int splraise __P((int)); 96 97 extern __inline int 98 splhigh() 99 { 100 return splraise(-1); 101 } 102 103 extern __inline int 104 spl0() 105 { 106 return splx(0); 107 } 108 109 extern __inline int 110 splbio() 111 { 112 return splraise(SPLBIO | SPLSOFTCLOCK | SPLSOFTNET); 113 } 114 115 extern __inline int 116 splnet() 117 { 118 return splraise(SPLNET | SPLSOFTCLOCK | SPLSOFTNET); 119 } 120 121 extern __inline int 122 spltty() 123 { 124 return splraise(SPLTTY | SPLSOFTCLOCK | SPLSOFTNET); 125 } 126 127 extern __inline int 128 splimp() 129 { 130 return splraise(SPLIMP | SPLSOFTCLOCK | SPLSOFTNET); 131 } 132 extern __inline int 133 splclock() 134 { 135 return splraise(SPLCLOCK | SPLSOFTCLOCK | SPLSOFTNET); 136 } 137 138 extern __inline int 139 splsoftclock() 140 { 141 return splraise(SPLSOFTCLOCK); 142 } 143 144 extern __inline int 145 splsoftnet() 146 { 147 return splraise(SPLSOFTNET); 148 } 149 150 extern __inline void 151 setsoftclock() 152 { 153 softclockpending = 1; 154 if (!(cpl & SPLSOFTCLOCK)) 155 splx(cpl); 156 } 157 158 extern __inline void 159 setsoftnet() 160 { 161 softnetpending = 1; 162 if (!(cpl & SPLSOFTNET)) 163 splx(cpl); 164 } 165 166 #endif /* !_LOCORE */ 167 168 #define splstatclock() splclock() 169 170 #endif /* _KERNEL */ 171 #endif /* _MACHINE_PSL_H_ */ 172