pstate.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:5k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

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