[BACK]Return to intr.h CVS log [TXT][DIR] Up to [local] / sys / arch / vax / include

Annotation of sys/arch/vax/include/intr.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: intr.h,v 1.8 2007/05/16 19:37:06 thib Exp $   */
                      2: /*     $NetBSD: intr.h,v 1.1 1998/08/18 23:55:00 matt Exp $    */
                      3:
                      4: /*
                      5:  * Copyright (c) 1998 Matt Thomas.
                      6:  * All rights reserved.
                      7:  *
                      8:  * Redistribution and use in source and binary forms, with or without
                      9:  * modification, are permitted provided that the following conditions
                     10:  * are met:
                     11:  * 1. Redistributions of source code must retain the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer.
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  * 3. The name of the company nor the name of the author may be used to
                     17:  *    endorse or promote products derived from this software without specific
                     18:  *    prior written permission.
                     19:  *
                     20:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
                     21:  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
                     22:  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     23:  * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
                     24:  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
                     25:  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
                     26:  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     27:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     28:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     29:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     30:  * SUCH DAMAGE.
                     31:  */
                     32:
                     33: #ifndef _VAX_INTR_H_
                     34: #define _VAX_INTR_H_
                     35:
                     36: /* Define the various Interrupt Priority Levels */
                     37:
                     38: /* Interrupt Priority Levels are not mutually exclusive. */
                     39:
                     40: #define IPL_NONE       0x00
                     41: #define        IPL_SOFTCLOCK   0x08
                     42: #define        IPL_SOFTNET     0x0c
                     43: #define IPL_BIO                0x15    /* block I/O */
                     44: #define IPL_NET                0x15    /* network */
                     45: #define IPL_TTY                0x15    /* terminal */
                     46: #define IPL_VM         0x17    /* memory allocation */
                     47: #define        IPL_AUDIO       0x15    /* audio */
                     48: #define IPL_CLOCK      0x18    /* clock */
                     49: #define IPL_STATCLOCK  0x18    /* statclock */
                     50: #define        IPL_HIGH        0x1f
                     51:
                     52: #define        IST_UNUSABLE    -1      /* interrupt cannot be used */
                     53: #define        IST_NONE        0       /* none (dummy) */
                     54: #define        IST_PULSE       1       /* pulsed */
                     55: #define        IST_EDGE        2       /* edge-triggered */
                     56: #define        IST_LEVEL       3       /* level-triggered */
                     57:
                     58: #ifndef lint
                     59: #define _splset(reg)                                           \
                     60: ({                                                             \
                     61:        register int val;                                       \
                     62:        __asm __volatile ("mfpr $0x12,%0;mtpr %1,$0x12"         \
                     63:                                : "=&g" (val)                   \
                     64:                                : "g" (reg));                   \
                     65:        val;                                                    \
                     66: })
                     67:
                     68: #define        _splraise(reg)                                          \
                     69: ({                                                             \
                     70:        register int val;                                       \
                     71:        __asm __volatile ("mfpr $0x12,%0"                       \
                     72:                                : "=&g" (val)                   \
                     73:                                : );                            \
                     74:        if ((reg) > val) {                                      \
                     75:                __asm __volatile ("mtpr %0,$0x12"               \
                     76:                                :                               \
                     77:                                : "g" (reg));                   \
                     78:        }                                                       \
                     79:        val;                                                    \
                     80: })
                     81:
                     82: #define        splx(reg)                                               \
                     83:        __asm __volatile ("mtpr %0,$0x12" : : "g" (reg))
                     84: #endif
                     85:
                     86: #define        spl0()          _splset(IPL_NONE)
                     87: #define splsoftclock() _splraise(IPL_SOFTCLOCK)
                     88: #define splsoftnet()   _splraise(IPL_SOFTNET)
                     89: #define splbio()       _splraise(IPL_BIO)
                     90: #define splnet()       _splraise(IPL_NET)
                     91: #define spltty()       _splraise(IPL_TTY)
                     92: #define splvm()                _splraise(IPL_VM)
                     93: #define splclock()     _splraise(IPL_CLOCK)
                     94: #define splstatclock() _splraise(IPL_STATCLOCK)
                     95: #define splhigh()      _splset(IPL_HIGH)
                     96: #define        splsched()      splhigh()
                     97:
                     98: /* These are better to use when playing with VAX buses */
                     99: #define        spl4()          _splraise(0x14)
                    100: #define        spl5()          _splraise(0x15)
                    101: #define        spl6()          _splraise(0x16)
                    102: #define        spl7()          _splraise(0x17)
                    103:
                    104: /* SPL asserts */
                    105: #ifdef DIAGNOSTIC
                    106: /*
                    107:  * Although this function is implemented in MI code, it must be in this MD
                    108:  * header because we don't want this header to include MI includes.
                    109:  */
                    110: void splassert_fail(int, int, const char *);
                    111: extern int splassert_ctl;
                    112: void splassert_check(int, const char *);
                    113: #define splassert(__wantipl) do {                      \
                    114:        if (splassert_ctl > 0) {                        \
                    115:                splassert_check(__wantipl, __func__);   \
                    116:        }                                               \
                    117: } while (0)
                    118: #else
                    119: #define        splassert(wantipl)      do { /* nothing */ } while (0)
                    120: #endif
                    121:
                    122: #endif /* _VAX_INTR_H */

CVSweb