psl.h
来自「基于组件方式开发操作系统的OSKIT源代码」· C头文件 代码 · 共 178 行
H
178 行
/* $NetBSD: psl.h,v 1.11 1998/09/06 04:22:43 mark Exp $ *//* * Copyright (c) 1995 Mark Brinicombe. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by Mark Brinicombe * for the NetBSD Project. * 4. The name of the company nor the name of the author may be used to * endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * RiscBSD kernel project * * psl.h * * spl prototypes. * Eventually this will become a set of defines. * * Created : 21/07/95 */#include <machine/intr.h>/* * These are the different SPL states * * Each state has an interrupt mask associated with it which * indicate which interrupts are allowed. */#define _SPL_0 0#define _SPL_SOFTCLOCK 1#define _SPL_SOFTNET 2#define _SPL_BIO 3#define _SPL_NET 4#define _SPL_SOFTSERIAL 5#define _SPL_TTY 6#define _SPL_IMP 7#define _SPL_AUDIO 8#define _SPL_CLOCK 9#define _SPL_HIGH 10#define _SPL_SERIAL 11#define _SPL_LEVELS 12#define spl0() splx(_SPL_0)/*#define splsoft() raisespl(_SPL_SOFT)*/#define splsoftnet() raisespl(_SPL_SOFTNET)#define splsoftclock() lowerspl(_SPL_SOFTCLOCK)#define splbio() raisespl(_SPL_BIO)#define splnet() raisespl(_SPL_NET)#define splsoftserial() raisespl(_SPL_SOFTSERIAL)#define spltty() raisespl(_SPL_TTY)#define spllpt() spltty()#define splimp() raisespl(_SPL_IMP)#define splaudio() raisespl(_SPL_AUDIO)#define splclock() raisespl(_SPL_CLOCK)#define splstatclock() raisespl(_SPL_CLOCK)#define splserial() raisespl(_SPL_SERIAL)#define splhigh() raisespl(_SPL_HIGH)#ifdef OSKIT#include "osenv.h"volatile int cpl;/* * Add a mask to cpl, and return the old value of cpl. */static __inline intraisespl(ncpl) register int ncpl;{ register int ocpl = cpl; cpl = ocpl | ncpl; if (!ocpl) osenv_intr_disable(); return (ocpl);}/* * Restore a value to cpl (unmasking interrupts). If any unmasked * interrupts are pending, call Xspllower() to process them. */static __inline voidsplx(ncpl) register int ncpl;{ cpl = ncpl; if (!cpl) osenv_intr_enable();}/* * Same as splx(), but we return the old value of spl, for the * benefit of some splsoftclock() callers. */static __inline intlowerspl(ncpl) register int ncpl;{ register int ocpl = cpl; cpl = ncpl; if (!cpl) osenv_intr_enable(); return (ocpl);}/* * These two are for state save/restore across calls out of the component. */static __inline intreset_spl(void){ int ocpl = cpl; cpl = 0; return ocpl;}static __inline voidrestore_spl(int ncpl){ cpl = ncpl; if (cpl) osenv_intr_disable();}#else#ifdef _KERNEL#ifndef _LOCOREint raisespl __P((int));int lowerspl __P((int));int splx __P((int));void setsoftast __P((void));void setsoftclock __P((void));void setsoftnet __P((void));void setsoftserial __P((void));void setsoftintr __P((u_int intrmask));#endifextern int current_spl_level;extern u_int spl_masks[_SPL_LEVELS];extern u_int spl_smasks[_SPL_LEVELS];#endif /* _LOCORE */#endif /* _KERNEL *//* End of psl.h */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?