Home | History | Annotate | Line # | Download | only in include
psl.h revision 1.11
      1  1.11        is /*	$NetBSD: psl.h,v 1.11 1996/11/30 00:33:49 is Exp $	*/
      2   1.7       cgd 
      3   1.6    chopps #ifndef _MACHINE_PSL_H_
      4   1.6    chopps #define _MACHINE_PSL_H_
      5   1.1        mw 
      6   1.4        mw #include <m68k/psl.h>
      7   1.5    chopps 
      8   1.8     veego #if defined(_KERNEL) && !defined(_LOCORE)
      9   1.8     veego 
     10   1.8     veego #if 0
     11   1.8     veego #define _debug_spl(s) \
     12   1.8     veego ({ \
     13   1.8     veego         register int _spl_r; \
     14   1.8     veego \
     15   1.8     veego         __asm __volatile ("clrl %0; movew sr,%0; movew %1,sr" : \
     16   1.8     veego                 "&=d" (_spl_r) : "di" (s)); \
     17   1.8     veego 	if ((_spl_r&PSL_IPL) > ((s)&PSL_IPL)&&((s)&PSL_IPL)!=PSL_IPL1) \
     18  1.10  christos 		printf ("%s:%d:spl(%d) ==> spl(%d)!!\n",__FILE__,__LINE__, \
     19   1.8     veego 		    ((PSL_IPL&_spl_r)>>8), ((PSL_IPL&(s))>>8)); \
     20   1.8     veego         _spl_r; \
     21   1.8     veego })
     22   1.8     veego #else
     23   1.8     veego /*
     24   1.8     veego  * Don't lower IPL below current IPL (unless new IPL is 6)
     25   1.8     veego  */
     26   1.8     veego #define _debug_spl(s) \
     27   1.8     veego ({ \
     28   1.8     veego         register int _spl_r; \
     29   1.8     veego \
     30   1.8     veego         __asm __volatile ("clrl %0; movew sr,%0" : \
     31   1.8     veego                 "&=d" (_spl_r)); \
     32   1.8     veego 	if ((((s)&PSL_IPL) >= PSL_IPL6) || (_spl_r&PSL_IPL) < ((s)&PSL_IPL) || ((s)&PSL_IPL) <= PSL_IPL1) \
     33   1.8     veego 		__asm __volatile ("movew %0,sr" : : "di" (s)); \
     34   1.8     veego         _spl_r; \
     35   1.8     veego })
     36   1.8     veego #endif
     37   1.8     veego 
     38   1.8     veego #define _spl_no_check(s) \
     39   1.8     veego ({ \
     40   1.8     veego         register int _spl_r; \
     41   1.8     veego \
     42   1.8     veego         __asm __volatile ("clrl %0; movew sr,%0; movew %1,sr" : \
     43   1.8     veego                 "&=d" (_spl_r) : "di" (s)); \
     44   1.8     veego         _spl_r; \
     45   1.8     veego })
     46   1.8     veego #if defined (DEBUGXX)		/* No workee */
     47   1.8     veego #define _spl _debug_spl
     48   1.8     veego #else
     49   1.8     veego #define _spl _spl_no_check
     50   1.8     veego #endif
     51   1.8     veego 
     52   1.8     veego #define spl0()	_spl(PSL_S|PSL_IPL0)
     53   1.8     veego #define spl1()	_spl(PSL_S|PSL_IPL1)
     54   1.8     veego #define spl2()	_spl(PSL_S|PSL_IPL2)
     55   1.8     veego #define spl3()	_spl(PSL_S|PSL_IPL3)
     56   1.8     veego #define spl4()	_spl(PSL_S|PSL_IPL4)
     57   1.8     veego #define spl5()	_spl(PSL_S|PSL_IPL5)
     58   1.8     veego #define spl6()	_spl(PSL_S|PSL_IPL6)
     59   1.8     veego #define spl7()	_spl(PSL_S|PSL_IPL7)
     60   1.8     veego 
     61   1.8     veego #define splnone()	spl0()
     62   1.8     veego #define splsoftclock()	spl1()
     63   1.8     veego #define splsoftnet()	spl1()
     64   1.8     veego #define splbio()	spl3()
     65   1.8     veego #define splnet()	spl3()
     66  1.11        is 
     67  1.11        is /*
     68  1.11        is  * spltty hack, idea by Jason Thorpe.
     69  1.11        is  * drivers which need it (at the present only drcom) raise the variable to
     70  1.11        is  * spl5 (the idea being that only ser.c really wants it below 5, and ser
     71  1.11        is  * and drcom will never be present at the same time).
     72  1.11        is  *
     73  1.11        is  * XXX ttyspl is statically initialized in drcom.c at the moment; should
     74  1.11        is  * be some driver independent file.
     75  1.11        is  *
     76  1.11        is  * XXX should ttyspl be volatile? I think not; it is intended to be set only
     77  1.11        is  * during xxx_attach() time, and will be used only later.
     78  1.11        is  *	-is
     79  1.11        is  */
     80  1.11        is 
     81  1.11        is extern u_int16_t	amiga_ttyspl;
     82  1.11        is #define spltty()	_spl(amiga_ttyspl)
     83  1.11        is #define splimp()	spltty()	/* XXX for the full story, see i386 */
     84  1.11        is 
     85   1.8     veego #ifndef LEV6_DEFER
     86   1.8     veego #define splclock()	spl6()
     87   1.8     veego #define splstatclock()	spl6()
     88   1.8     veego #define splvm()		spl6()
     89   1.8     veego #define splhigh()	spl7()
     90   1.8     veego #define splsched()	spl7()
     91   1.8     veego #else
     92   1.8     veego #define splclock()	spl4()
     93   1.8     veego #define splstatclock()	spl4()
     94   1.8     veego #define splvm()		spl4()
     95   1.8     veego #define splhigh()	spl4()
     96   1.8     veego #define splsched()	spl4()
     97   1.5    chopps #endif
     98   1.8     veego 
     99   1.8     veego #define splx(s)		_spl_no_check(s)
    100   1.8     veego 
    101   1.8     veego #endif	/* KERNEL && !_LOCORE */
    102   1.8     veego #endif	/* _MACHINE_PSL_H_ */
    103