1 /* $Id: pstate.h,v 1.6 1997/06/25 07:39:45 jj Exp $ */ 2 #ifndef _SPARC64_PSTATE_H 3 #define _SPARC64_PSTATE_H 5 /* The V9 PSTATE Register (with SpitFire extensions). 7 * ----------------------------------------------------------------------- 8 * | Resv | IG | MG | CLE | TLE | MM | RED | PEF | AM | PRIV | IE | AG | 9 * ----------------------------------------------------------------------- 10 * 63 12 11 10 9 8 7 6 5 4 3 2 1 0 12 #define PSTATE_IG 0x0000000000000800/* Interrupt Globals. */ 13 #define PSTATE_MG 0x0000000000000400/* MMU Globals. */ 14 #define PSTATE_CLE 0x0000000000000200/* Current Little Endian. */ 15 #define PSTATE_TLE 0x0000000000000100/* Trap Little Endian. */ 16 #define PSTATE_MM 0x00000000000000c0/* Memory Model. */ 17 #define PSTATE_TSO 0x0000000000000000/* MM: Total Store Order */ 18 #define PSTATE_PSO 0x0000000000000040/* MM: Partial Store Order */ 19 #define PSTATE_RMO 0x0000000000000080/* MM: Relaxed Memory Order */ 20 #define PSTATE_RED 0x0000000000000020/* Reset Error Debug State. */ 21 #define PSTATE_PEF 0x0000000000000010/* Floating Point Enable. */ 22 #define PSTATE_AM 0x0000000000000008/* Address Mask. */ 23 #define PSTATE_PRIV 0x0000000000000004/* Privilege. */ 24 #define PSTATE_IE 0x0000000000000002/* Interrupt Enable. */ 25 #define PSTATE_AG 0x0000000000000001/* Alternate Globals. */ 27 /* The V9 TSTATE Register (with SpitFire and Linux extensions). 29 * --------------------------------------------------------------- 30 * | Resv | CCR | ASI | %pil | PSTATE | Resv | CWP | 31 * --------------------------------------------------------------- 32 * 63 40 39 32 31 24 23 20 19 8 7 5 4 0 34 #define TSTATE_CCR 0x000000ff00000000/* Condition Codes. */ 35 #define TSTATE_XCC 0x000000f000000000/* Condition Codes. */ 36 #define TSTATE_XNEG 0x0000008000000000/* %xcc Negative. */ 37 #define TSTATE_XZERO 0x0000004000000000/* %xcc Zero. */ 38 #define TSTATE_XOVFL 0x0000002000000000/* %xcc Overflow. */ 39 #define TSTATE_XCARRY 0x0000001000000000/* %xcc Carry. */ 40 #define TSTATE_ICC 0x0000000f00000000/* Condition Codes. */ 41 #define TSTATE_INEG 0x0000000800000000/* %icc Negative. */ 42 #define TSTATE_IZERO 0x0000000400000000/* %icc Zero. */ 43 #define TSTATE_IOVFL 0x0000000200000000/* %icc Overflow. */ 44 #define TSTATE_ICARRY 0x0000000100000000/* %icc Carry. */ 45 #define TSTATE_ASI 0x00000000ff000000/* Address Space Identifier. */ 46 #define TSTATE_PIL 0x0000000000f00000/* %pil (Linux traps set this) */ 47 #define TSTATE_PSTATE 0x00000000000fff00/* PSTATE. */ 48 #define TSTATE_IG 0x0000000000080000/* Interrupt Globals. */ 49 #define TSTATE_MG 0x0000000000040000/* MMU Globals. */ 50 #define TSTATE_CLE 0x0000000000020000/* Current Little Endian. */ 51 #define TSTATE_TLE 0x0000000000010000/* Trap Little Endian. */ 52 #define TSTATE_MM 0x000000000000c000/* Memory Model. */ 53 #define TSTATE_TSO 0x0000000000000000/* MM: Total Store Order */ 54 #define TSTATE_PSO 0x0000000000004000/* MM: Partial Store Order */ 55 #define TSTATE_RMO 0x0000000000008000/* MM: Relaxed Memory Order */ 56 #define TSTATE_RED 0x0000000000002000/* Reset Error Debug State. */ 57 #define TSTATE_PEF 0x0000000000001000/* Floating Point Enable. */ 58 #define TSTATE_AM 0x0000000000000800/* Address Mask. */ 59 #define TSTATE_PRIV 0x0000000000000400/* Privilege. */ 60 #define TSTATE_IE 0x0000000000000200/* Interrupt Enable. */ 61 #define TSTATE_AG 0x0000000000000100/* Alternate Globals. */ 62 #define TSTATE_CWP 0x000000000000001f/* Current Window Pointer. */ 64 /* Floating-Point Registers State Register. 66 * -------------------------------- 67 * | Resv | FEF | DU | DL | 68 * -------------------------------- 71 #define FPRS_FEF 0x0000000000000004/* Enable Floating Point. */ 72 #define FPRS_DU 0x0000000000000002/* Dirty Upper. */ 73 #define FPRS_DL 0x0000000000000001/* Dirty Lower. */ 77 * ------------------------------------------------------ 78 * | MANUF | IMPL | MASK | Resv | MAXTL | Resv | MAXWIN | 79 * ------------------------------------------------------ 80 * 63 48 47 32 31 24 23 16 15 8 7 5 4 0 82 #define VERS_MANUF 0xffff000000000000/* Manufacturer. */ 83 #define VERS_IMPL 0x0000ffff00000000/* Implementation. */ 84 #define VERS_MASK 0x00000000ff000000/* Mask Set Revision. */ 85 #define VERS_MAXTL 0x000000000000ff00/* Maximum Trap Level. */ 86 #define VERS_MAXWIN 0x000000000000001f/* Maximum Reg Window Index. */ 88 #if defined(__KERNEL__) && !defined(__ASSEMBLY__) 89 #define set_pstate(bits) \ 90 __asm__ __volatile__( \ 91 "rdpr %%pstate, %%g1\n\t" \ 92 "or %%g1, %0, %%g1\n\t" \ 93 "wrpr %%g1, 0x0, %%pstate\n\t" \ 98 #define clear_pstate(bits) \ 99 __asm__ __volatile__( \ 100 "rdpr %%pstate, %%g1\n\t" \ 101 "andn %%g1, %0, %%g1\n\t" \ 102 "wrpr %%g1, 0x0, %%pstate\n\t" \ 107 #define change_pstate(bits) \ 108 __asm__ __volatile__( \ 109 "rdpr %%pstate, %%g1\n\t" \ 110 "wrpr %%g1, %0, %%pstate\n\t" \ 116 #endif/* !(_SPARC64_PSTATE_H) */