psl.h revision 1.15
1/* $NetBSD: psl.h,v 1.15 2008/01/06 01:37:54 matt Exp $ */ 2 3/* 4 * Copyright (c) 1995 Mark Brinicombe. 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. All advertising materials mentioning features or use of this software 16 * must display the following acknowledgement: 17 * This product includes software developed by Mark Brinicombe 18 * for the NetBSD Project. 19 * 4. The name of the company nor the name of the author may be used to 20 * endorse or promote products derived from this software without specific 21 * prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 24 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 25 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 26 * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 27 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 29 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * 35 * RiscBSD kernel project 36 * 37 * psl.h 38 * 39 * spl prototypes. 40 * Eventually this will become a set of defines. 41 * 42 * Created : 21/07/95 43 */ 44 45#ifndef _ARM_PSL_H_ 46#define _ARM_PSL_H_ 47#include <machine/intr.h> 48#if (! defined(_LOCORE)) && (! defined(hpcarm)) 49#include <arm/softintr.h> 50#endif 51 52/* 53 * These are the different SPL states 54 * 55 * Each state has an interrupt mask associated with it which 56 * indicate which interrupts are allowed. 57 */ 58 59#define _SPL_0 0 60#ifdef __HAVE_FAST_SOFTINTS 61#define _SPL_SOFTCLOCK 1 62#define _SPL_SOFTBIO 2 63#define _SPL_SOFTNET 3 64#define _SPL_SOFTSERIAL 4 65#define _SPL_VM 5 66#define _SPL_SCHED 6 67#define _SPL_HIGH 7 68#define _SPL_LEVELS 8 69#else 70#define _SPL_SOFTCLOCK _SPL_0 71#define _SPL_SOFTBIO _SPL_0 72#define _SPL_SOFTNET _SPL_0 73#define _SPL_SOFTSERIAL _SPL_0 74#define _SPL_VM 1 75#define _SPL_SCHED 2 76#define _SPL_HIGH 3 77#define _SPL_LEVELS 4 78#endif 79 80#define spl0() splx(_SPL_0) 81#ifdef __HAVE_FAST_SOFTINTS 82#define splsoftclock() raisespl(_SPL_SOFTCLOCK) 83#define splsoftbio() raisespl(_SPL_SOFTBIO) 84#define splsoftnet() raisespl(_SPL_SOFTNET) 85#define splsoftserial() raisespl(_SPL_SOFTSERIAL) 86#else 87#define splsoftclock() spl0() 88#define splsoftbio() spl0() 89#define splsoftnet() spl0() 90#define splsoftserial() spl0() 91#endif 92#define splvm() raisespl(_SPL_VM) 93#define splsched() raisespl(_SPL_SCHED) 94#define splhigh() raisespl(_SPL_HIGH) 95 96#ifdef _KERNEL 97#ifndef _LOCORE 98int raisespl (int); 99int lowerspl (int); 100int splx (int); 101 102#ifdef __HAVE_FAST_SOFTINTS 103void _setsoftintr (int si); 104#endif 105 106extern int current_spl_level; 107 108extern u_int spl_masks[_SPL_LEVELS + 1]; 109 110typedef uint8_t ipl_t; 111typedef struct { 112 uint8_t _spl; 113} ipl_cookie_t; 114 115int ipl_to_spl(ipl_t); 116 117static inline ipl_cookie_t 118makeiplcookie(ipl_t ipl) 119{ 120 121 return (ipl_cookie_t){._spl = (uint8_t)ipl_to_spl(ipl)}; 122} 123 124static inline int 125splraiseipl(ipl_cookie_t icookie) 126{ 127 128 return raisespl(icookie._spl); 129} 130#endif /* _LOCORE */ 131#endif /* _KERNEL */ 132 133#endif /* _ARM_PSL_H_ */ 134/* End of psl.h */ 135