home *** CD-ROM | disk | FTP | other *** search
- /*
- * File: spl.h
- * Author: Avadis Tevanian, Jr.
- *
- * Define inline macros for spl routines.
- *
- * HISTORY
- *
- * 14-May-90 Gregg Kellogg (gk) at NeXT
- * Changed SPLCLOCK from 6 to 3, as much scheduling code expects
- * splclock() == splsched(). Added splusclock().
- *
- * 19-Jun-89 Mike DeMoney (mike) at NeXT
- * Modified to allow spl assertions in spl_measured.h
- */
-
- #ifndef _KERNSERV_M68K_SPL_H_
- #define _KERNSERV_M68K_SPL_H_
-
- #ifdef KERNEL_BUILD
- #import <iplmeas.h>
- #else KERNEL_BUILD
- #import <mach/features.h>
- #endif KERNEL_BUILD
-
- #import <bsd/m68k/psl.h>
-
- #if NIPLMEAS && !defined(NO_IPLMEAS)
- #import <machdep/m68k/spl_measured.h>
- #endif NIPLMEAS && !defined(NO_IPLMEAS)
-
- #ifndef SPLU_MACRO
-
- #ifdef ASSEMBLER
- #define SPLU_MACRO(ipl) \
- movw sr,d0; \
- movw \#((ipl)*256 + 0x2000),sr;
-
- #define splx(nsr) \
- movw sr,d0; \
- movw nsr,sr;
-
- #else ASSEMBLER
-
- #define SPLU_MACRO(x) \
- ({ register short ret; \
- asm volatile ("movw sr,%0" : "=dm" (ret)); \
- asm volatile ("movw %1,sr" : "=m" (*(char *)0): "Jdm" ((short)(x)*256+0x2000)); \
- ret; \
- })
-
- #define splx(x) \
- ({ register short ret; \
- asm volatile ("movw sr,%0" : "=dm" (ret)); \
- asm volatile ("movw %1,sr" : "=m" (*(char *)0): "Jdm" ((short)x)); \
- ret; \
- })
-
- #endif ASSEMBLER
-
- #define SPLD_MACRO(ipl) SPLU_MACRO(ipl)
- #define spln(x) splx(x)
-
- #endif SPLU_MACRO
-
- #define ipltospl(ipl) (SR_SUPER | ((ipl) << 8))
-
- /*
- * Define spls as the usual numbers (which should never be used
- * directly.
- */
-
- #define spl0() SPLD_MACRO(0)
- #define spl1() SPLU_MACRO(1)
- #define spl2() SPLU_MACRO(2)
- #define spl3() SPLU_MACRO(3)
- #define spl4() SPLU_MACRO(4)
- #define spl5() SPLU_MACRO(5)
- #define spl6() SPLU_MACRO(6)
- #define spl7() SPLU_MACRO(7)
-
- /*
- * Define spl mnemonics.
- */
- #define IPLHIGH 7
- #define IPLDMA 6
- #define IPLUSCLOCK 6
- #define IPLSCC 5
- #define IPLCLOCK 3
- #define IPLBIO 3
- #define IPLSCHED 3
- #define IPLIMP 3
- #define IPLVM 3
- #define I$T 2
- #define IPLTTY 1
- #define IPLSOFTCLOCK 1
-
- #define splhigh() SPLU_MACRO(IPLHIGH)
- #define splusclock() SPLU_MACRO(IPLUSCLOCK)
- #define spldma() SPLU_MACRO(IPLDMA)
- #define splscc() SPLU_MACRO(IPLSCC)
- #define splclock() SPLU_MACRO(IPLCLOCK)
- #define splbio() SPLU_MACRO(IPLBIO)
- #define splsched() SPLU_MACRO(IPLSCHED)
- #define splimp() SPLU_MACRO(IPLIMP)
- #define splvm() SPLU_MACRO(IPLVM)
- #define splnet() SPLU_MACRO(IPLNET)
- #define spltty() SPLU_MACRO(IPLTTY)
- #define splsoftclock() SPLU_MACRO(IPLSOFTCLOCK)
-
- #endif _KERNSERV_M68K_SPL_H_
-