mmu.h 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. /*
  2. * This file is part of the UCB release of Plan 9. It is subject to the license
  3. * terms in the LICENSE file found in the top-level directory of this
  4. * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
  5. * part of the UCB release of Plan 9, including this file, may be copied,
  6. * modified, propagated, or distributed except according to the terms contained
  7. * in the LICENSE file.
  8. */
  9. /* Cr0 */
  10. #define Pe 0x00000001 /* Protected Mode Enable */
  11. #define Mp 0x00000002 /* Monitor Coprocessor */
  12. #define Em 0x00000004 /* Emulate Coprocessor */
  13. #define Ts 0x00000008 /* Task Switched */
  14. #define Et 0x00000010 /* Extension Type */
  15. #define Ne 0x00000020 /* Numeric Error */
  16. #define Wp 0x00010000 /* Write Protect */
  17. #define Am 0x00040000 /* Alignment Mask */
  18. #define Nw 0x20000000 /* Not Writethrough */
  19. #define Cd 0x40000000 /* Cache Disable */
  20. #define Pg 0x80000000 /* Paging Enable */
  21. /* Cr3 */
  22. #define Pwt 0x00000008 /* Page-Level Writethrough */
  23. #define Pcd 0x00000010 /* Page-Level Cache Disable */
  24. /* Cr4 */
  25. #define Vme 0x00000001 /* Virtual-8086 Mode Extensions */
  26. #define Pvi 0x00000002 /* Protected Mode Virtual Interrupts */
  27. #define Tsd 0x00000004 /* Time-Stamp Disable */
  28. #define De 0x00000008 /* Debugging Extensions */
  29. #define Pse 0x00000010 /* Page-Size Extensions */
  30. #define Pae 0x00000020 /* Physical Address Extension */
  31. #define Mce 0x00000040 /* Machine Check Enable */
  32. #define Pge 0x00000080 /* Page-Global Enable */
  33. #define Pce 0x00000100 /* Performance Monitoring Counter Enable */
  34. #define Osfxsr 0x00000200 /* FXSAVE/FXRSTOR Support */
  35. #define Osxmmexcpt 0x00000400 /* Unmasked Exception Support */
  36. /* Rflags */
  37. #define Cf 0x00000001 /* Carry Flag */
  38. #define Pf 0x00000004 /* Parity Flag */
  39. #define Af 0x00000010 /* Auxiliary Flag */
  40. #define Zf 0x00000040 /* Zero Flag */
  41. #define Sf 0x00000080 /* Sign Flag */
  42. #define Tf 0x00000100 /* Trap Flag */
  43. #define If 0x00000200 /* Interrupt Flag */
  44. #define Df 0x00000400 /* Direction Flag */
  45. #define Of 0x00000800 /* Overflow Flag */
  46. #define Iopl0 0x00000000 /* I/O Privilege Level */
  47. #define Iopl1 0x00001000
  48. #define Iopl2 0x00002000
  49. #define Iopl3 0x00003000
  50. #define Nt 0x00004000 /* Nested Task */
  51. #define Rf 0x00010000 /* Resume Flag */
  52. #define Vm 0x00020000 /* Virtual-8086 Mode */
  53. #define Ac 0x00040000 /* Alignment Check */
  54. #define Vif 0x00080000 /* Virtual Interrupt Flag */
  55. #define Vip 0x00100000 /* Virtual Interrupt Pending */
  56. #define Id 0x00200000 /* ID Flag */
  57. /* MSRs */
  58. #define PerfEvtbase 0xc0010000 /* Performance Event Select */
  59. #define PerfCtrbase 0xc0010004 /* Performance Counters */
  60. #define Efer 0xc0000080 /* Extended Feature Enable */
  61. #define Star 0xc0000081 /* Legacy Target IP and [CS]S */
  62. #define Lstar 0xc0000082 /* Long Mode Target IP */
  63. #define Cstar 0xc0000083 /* Compatibility Target IP */
  64. #define Sfmask 0xc0000084 /* SYSCALL Flags Mask */
  65. #define FSbase 0xc0000100 /* 64-bit FS Base Address */
  66. #define GSbase 0xc0000101 /* 64-bit GS Base Address */
  67. #define KernelGSbase 0xc0000102 /* SWAPGS instruction */
  68. /* Efer */
  69. #define Sce 0x00000001 /* System Call Extension */
  70. #define Lme 0x00000100 /* Long Mode Enable */
  71. #define Lma 0x00000400 /* Long Mode Active */
  72. #define Nxe 0x00000800 /* No-Execute Enable */
  73. #define Svme 0x00001000 /* SVM Extension Enable */
  74. #define Ffxsr 0x00004000 /* Fast FXSAVE/FXRSTOR */
  75. /* PML4E/PDPE/PDE/PTE */
  76. #define PteP 0x0000000000000001 /* Present */
  77. #define PteRW 0x0000000000000002 /* Read/Write */
  78. #define PteU 0x0000000000000004 /* User/Supervisor */
  79. #define PtePWT 0x0000000000000008 /* Page-Level Write Through */
  80. #define PtePCD 0x0000000000000010 /* Page Level Cache Disable */
  81. #define PteA 0x0000000000000020 /* Accessed */
  82. #define PteD 0x0000000000000040 /* Dirty */
  83. #define PtePS 0x0000000000000080 /* Page Size */
  84. #define Pte4KPAT PtePS /* PTE PAT */
  85. #define PteG 0x0000000000000100 /* Global */
  86. #define Pte2MPAT 0x0000000000001000 /* PDE PAT */
  87. #define Pte1GPAT Pte2MPAT /* PDPE PAT */
  88. #define PteNX 0x8000000000000000 /* No Execute */
  89. /* Exceptions */
  90. #define IdtDE 0 /* Divide-by-Zero Error */
  91. #define IdtDB 1 /* Debug */
  92. #define IdtNMI 2 /* Non-Maskable-Interrupt */
  93. #define IdtBP 3 /* Breakpoint */
  94. #define IdtOF 4 /* Overflow */
  95. #define IdtBR 5 /* Bound-Range */
  96. #define IdtUD 6 /* Invalid-Opcode */
  97. #define IdtNM 7 /* Device-Not-Available */
  98. #define IdtDF 8 /* Double-Fault */
  99. #define Idt09 9 /* unsupported */
  100. #define IdtTS 10 /* Invalid-TSS */
  101. #define IdtNP 11 /* Segment-Not-Present */
  102. #define IdtSS 12 /* Stack */
  103. #define IdtGP 13 /* General-Protection */
  104. #define IdtPF 14 /* Page-Fault */
  105. #define Idt0F 15 /* reserved */
  106. #define IdtMF 16 /* x87 FPE-Pending */
  107. #define IdtAC 17 /* Alignment-Check */
  108. #define IdtMC 18 /* Machine-Check */
  109. #define IdtXF 19 /* SIMD Floating-Point */
  110. /* Vestigial Segmented Virtual Memory */
  111. #define SdISTM 0x0000000700000000 /* Interrupt Stack Table Mask */
  112. #define SdA 0x0000010000000000 /* Accessed */
  113. #define SdR 0x0000020000000000 /* Readable (Code) */
  114. #define SdW 0x0000020000000000 /* Writeable (Data) */
  115. #define SdE 0x0000040000000000 /* Expand Down */
  116. #define SdaTSS 0x0000090000000000 /* Available TSS */
  117. #define SdbTSS 0x00000b0000000000 /* Busy TSS */
  118. #define SdCG 0x00000c0000000000 /* Call Gate */
  119. #define SdIG 0x00000e0000000000 /* Interrupt Gate */
  120. #define SdTG 0x00000f0000000000 /* Trap Gate */
  121. #define SdCODE 0x0000080000000000 /* Code/Data */
  122. #define SdS 0x0000100000000000 /* System/User */
  123. #define SdDPL0 0x0000000000000000 /* Descriptor Privilege Level */
  124. #define SdDPL1 0x0000200000000000
  125. #define SdDPL2 0x0000400000000000
  126. #define SdDPL3 0x0000600000000000
  127. #define SdP 0x0000800000000000 /* Present */
  128. #define Sd4G 0x000f00000000ffff /* 4G Limit */
  129. #define SdL 0x0020000000000000 /* Long Attribute */
  130. #define SdD 0x0040000000000000 /* Default Operand Size */
  131. #define SdG 0x0080000000000000 /* Granularity */
  132. /* Performance Counter Configuration */
  133. #define PeHo 0x0000020000000000 /* Host only */
  134. #define PeGo 0x0000010000000000 /* Guest only */
  135. #define PeEvMskH 0x0000000f00000000 /* Event mask H */
  136. #define PeCtMsk 0x00000000ff000000 /* Counter mask */
  137. #define PeInMsk 0x0000000000800000 /* Invert mask */
  138. #define PeCtEna 0x0000000000400000 /* Counter enable */
  139. #define PeInEna 0x0000000000100000 /* Interrupt enable */
  140. #define PePnCtl 0x0000000000080000 /* Pin control */
  141. #define PeEdg 0x0000000000040000 /* Edge detect */
  142. #define PeOS 0x0000000000020000 /* OS mode */
  143. #define PeUsr 0x0000000000010000 /* User mode */
  144. #define PeUnMsk 0x000000000000ff00 /* Unit Mask */
  145. #define PeEvMskL 0x00000000000000ff /* Event Mask L */
  146. #define PeEvMsksh 32 /* Event mask shift */
  147. /* Segment Selector */
  148. #define SsRPL0 0x0000 /* Requestor Privilege Level */
  149. #define SsRPL1 0x0001
  150. #define SsRPL2 0x0002
  151. #define SsRPL3 0x0003
  152. #define SsTIGDT 0x0000 /* GDT Table Indicator */
  153. #define SsTILDT 0x0004 /* LDT Table Indicator */
  154. #define SsSIM 0xfff8 /* Selector Index Mask */
  155. #define SSEL(si, tirpl) (((si)<<3)|(tirpl)) /* Segment Selector */
  156. #define SiNULL 0 /* NULL selector index */
  157. #define SiCS 1 /* CS selector index */
  158. #define SiDS 2 /* DS selector index */
  159. #define SiU32CS 3 /* User CS selector index */
  160. #define SiUDS 4 /* User DS selector index */
  161. #define SiUCS 5 /* User CS selector index */
  162. #define SiFS 6 /* FS selector index */
  163. #define SiGS 7 /* GS selector index */
  164. #define SiTSS 8 /* TSS selector index */