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