home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
NeXTSTEP 3.2 (Developer)
/
NS_dev_3.2.iso
/
NextDeveloper
/
Headers
/
kernserv
/
m68k
/
spl.h
next >
Wrap
Text File
|
1993-10-19
|
2KB
|
112 lines
/*
* 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 IPLNET 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_