Annotation of qemu/roms/openbios/arch/sparc32/psr.h, revision 1.1.1.1

1.1       root        1: /* $Id: psr.h,v 1.1 2002/07/12 17:12:03 zaitcev Exp $
                      2:  * psr.h: This file holds the macros for masking off various parts of
                      3:  *        the processor status register on the Sparc. This is valid
                      4:  *        for Version 8. On the V9 this is renamed to the PSTATE
                      5:  *        register and its members are accessed as fields like
                      6:  *        PSTATE.PRIV for the current CPU privilege level.
                      7:  *
                      8:  * Copyright (C) 1994 David S. Miller ([email protected])
                      9:  */
                     10: 
                     11: #ifndef __LINUX_SPARC_PSR_H
                     12: #define __LINUX_SPARC_PSR_H
                     13: 
                     14: /* The Sparc PSR fields are laid out as the following:
                     15:  *
                     16:  *  ------------------------------------------------------------------------
                     17:  *  | impl  | vers  | icc   | resv  | EC | EF | PIL  | S | PS | ET |  CWP  |
                     18:  *  | 31-28 | 27-24 | 23-20 | 19-14 | 13 | 12 | 11-8 | 7 | 6  | 5  |  4-0  |
                     19:  *  ------------------------------------------------------------------------
                     20:  */
                     21: #define PSR_CWP     0x0000001f         /* current window pointer     */
                     22: #define PSR_ET      0x00000020         /* enable traps field         */
                     23: #define PSR_PS      0x00000040         /* previous privilege level   */
                     24: #define PSR_S       0x00000080         /* current privilege level    */
                     25: #define PSR_PIL     0x00000f00         /* processor interrupt level  */
                     26: #define PSR_EF      0x00001000         /* enable floating point      */
                     27: #define PSR_EC      0x00002000         /* enable co-processor        */
                     28: #define PSR_LE      0x00008000         /* SuperSparcII little-endian */
                     29: #define PSR_ICC     0x00f00000         /* integer condition codes    */
                     30: #define PSR_C       0x00100000         /* carry bit                  */
                     31: #define PSR_V       0x00200000         /* overflow bit               */
                     32: #define PSR_Z       0x00400000         /* zero bit                   */
                     33: #define PSR_N       0x00800000         /* negative bit               */
                     34: #define PSR_VERS    0x0f000000         /* cpu-version field          */
                     35: #define PSR_IMPL    0xf0000000         /* cpu-implementation field   */
                     36: 
                     37: #ifdef __KERNEL__
                     38: 
                     39: #ifndef __ASSEMBLY__
                     40: /* Get the %psr register. */
                     41: extern __inline__ unsigned int get_psr(void)
                     42: {
                     43:        unsigned int psr;
                     44:        __asm__ __volatile__(
                     45:                "rd     %%psr, %0\n\t"
                     46:                "nop\n\t"
                     47:                "nop\n\t"
                     48:                "nop\n\t"
                     49:        : "=r" (psr)
                     50:        : /* no inputs */
                     51:        : "memory");
                     52: 
                     53:        return psr;
                     54: }
                     55: 
                     56: extern __inline__ void put_psr(unsigned int new_psr)
                     57: {
                     58:        __asm__ __volatile__(
                     59:                "wr     %0, 0x0, %%psr\n\t"
                     60:                "nop\n\t"
                     61:                "nop\n\t"
                     62:                "nop\n\t"
                     63:        : /* no outputs */
                     64:        : "r" (new_psr)
                     65:        : "memory", "cc");
                     66: }
                     67: 
                     68: /* Get the %fsr register.  Be careful, make sure the floating point
                     69:  * enable bit is set in the %psr when you execute this or you will
                     70:  * incur a trap.
                     71:  */
                     72: 
                     73: extern unsigned int fsr_storage;
                     74: 
                     75: extern __inline__ unsigned int get_fsr(void)
                     76: {
                     77:        unsigned int fsr = 0;
                     78: 
                     79:        __asm__ __volatile__(
                     80:                "st     %%fsr, %1\n\t"
                     81:                "ld     %1, %0\n\t"
                     82:        : "=r" (fsr)
                     83:        : "m" (fsr_storage));
                     84: 
                     85:        return fsr;
                     86: }
                     87: 
                     88: #endif /* !(__ASSEMBLY__) */
                     89: 
                     90: #endif /* (__KERNEL__) */
                     91: 
                     92: #endif /* !(__LINUX_SPARC_PSR_H) */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.