msr.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:6k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef X86_64_MSR_H
  2. #define X86_64_MSR_H 1
  3. #ifndef __ASSEMBLY__
  4. /*
  5.  * Access to machine-specific registers (available on 586 and better only)
  6.  * Note: the rd* operations modify the parameters directly (without using
  7.  * pointer indirection), this allows gcc to optimize better
  8.  */
  9. #define rdmsr(msr,val1,val2) 
  10.        __asm__ __volatile__("rdmsr" 
  11.     : "=a" (val1), "=d" (val2) 
  12.     : "c" (msr))
  13. #define rdmsrl(msr,val) do { unsigned long a__,b__; 
  14.        __asm__ __volatile__("rdmsr" 
  15.     : "=a" (a__), "=d" (b__) 
  16.     : "c" (msr)); 
  17.        val = a__ | (b__<<32); 
  18. } while(0); 
  19. #define wrmsr(msr,val1,val2) 
  20.      __asm__ __volatile__("wrmsr" 
  21.   : /* no outputs */ 
  22.   : "c" (msr), "a" (val1), "d" (val2))
  23. #define wrmsrl(msr,val) wrmsr(msr,(__u32)((__u64)(val)),((__u64)(val))>>32) 
  24. /* wrmsrl with exception handling */
  25. #define checking_wrmsrl(msr,val) ({ int ret__;
  26. asm volatile("2: wrmsr ; xorl %0,%0n"
  27.      "1:nt"
  28.      ".section .fixup,"ax"nt"
  29.      "3:  movl %4,%0 ; jmp 1bnt"
  30.      ".previousnt"
  31.        ".section __ex_table,"a"n"
  32.      "   .align 8nt"
  33.      "   .quad  2b,3bnt"
  34.      ".previous"
  35.      : "=a" (ret__)
  36.      : "c" (msr), "0" ((__u32)val), "d" ((val)>>32), "i" (-EFAULT));
  37. ret__; })
  38. #define rdtsc(low,high) 
  39.      __asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high))
  40. #define rdtscl(low) 
  41.      __asm__ __volatile__ ("rdtsc" : "=a" (low) : : "edx")
  42. #define rdtscll(val) do { 
  43.      unsigned int a,d; 
  44.      asm volatile("rdtsc" : "=a" (a), "=d" (d)); 
  45.      (val) = ((unsigned long)a) | (((unsigned long)d)<<32); 
  46. } while(0)
  47. #define rdpmc(counter,low,high) 
  48.      __asm__ __volatile__("rdpmc" 
  49.   : "=a" (low), "=d" (high) 
  50.   : "c" (counter))
  51. #define write_tsc(val1,val2) wrmsr(0x10, val1, val2)
  52. #define rdpmc(counter,low,high) 
  53.      __asm__ __volatile__("rdpmc" 
  54.   : "=a" (low), "=d" (high) 
  55.   : "c" (counter))
  56. #endif
  57. /* AMD/K8 specific MSRs */ 
  58. #define MSR_EFER 0xc0000080 /* extended feature register */
  59. #define MSR_STAR 0xc0000081 /* legacy mode SYSCALL target */
  60. #define MSR_LSTAR 0xc0000082  /* long mode SYSCALL target */
  61. #define MSR_CSTAR 0xc0000083 /* compatibility mode SYSCALL target */
  62. #define MSR_SYSCALL_MASK 0xc0000084 /* EFLAGS mask for syscall */
  63. #define MSR_FS_BASE 0xc0000100 /* 64bit GS base */
  64. #define MSR_GS_BASE 0xc0000101 /* 64bit FS base */
  65. #define MSR_KERNEL_GS_BASE  0xc0000102 /* SwapGS GS shadow (or USER_GS from kernel) */ 
  66. /* EFER bits: */ 
  67. #define _EFER_SCE 0  /* SYSCALL/SYSRET */
  68. #define _EFER_LME 8  /* Long mode enable */
  69. #define _EFER_LMA 10 /* Long mode active (read-only) */
  70. #define _EFER_NX 11  /* No execute enable */
  71. #define EFER_SCE (1<<_EFER_SCE)
  72. #define EFER_LME (1<<EFER_LME)
  73. #define EFER_LMA (1<<EFER_LMA)
  74. #define EFER_NX (1<<_EFER_NX)
  75. /* Intel MSRs. Some also available on other CPUs */
  76. #define MSR_IA32_PLATFORM_ID 0x17
  77. #define MSR_IA32_PERFCTR0      0xc1
  78. #define MSR_IA32_PERFCTR1      0xc2
  79. #define MSR_MTRRcap 0x0fe
  80. #define MSR_IA32_BBL_CR_CTL        0x119
  81. #define MSR_IA32_MCG_CAP       0x179
  82. #define MSR_IA32_MCG_STATUS        0x17a
  83. #define MSR_IA32_MCG_CTL       0x17b
  84. #define MSR_IA32_EVNTSEL0      0x186
  85. #define MSR_IA32_EVNTSEL1      0x187
  86. #define MSR_IA32_DEBUGCTLMSR       0x1d9
  87. #define MSR_IA32_LASTBRANCHFROMIP  0x1db
  88. #define MSR_IA32_LASTBRANCHTOIP        0x1dc
  89. #define MSR_IA32_LASTINTFROMIP     0x1dd
  90. #define MSR_IA32_LASTINTTOIP       0x1de
  91. #define MSR_MTRRfix64K_00000 0x250
  92. #define MSR_MTRRfix16K_80000 0x258
  93. #define MSR_MTRRfix16K_A0000 0x259
  94. #define MSR_MTRRfix4K_C0000 0x268
  95. #define MSR_MTRRfix4K_C8000 0x269
  96. #define MSR_MTRRfix4K_D0000 0x26a
  97. #define MSR_MTRRfix4K_D8000 0x26b
  98. #define MSR_MTRRfix4K_E0000 0x26c
  99. #define MSR_MTRRfix4K_E8000 0x26d
  100. #define MSR_MTRRfix4K_F0000 0x26e
  101. #define MSR_MTRRfix4K_F8000 0x26f
  102. #define MSR_MTRRdefType 0x2ff
  103. #define MSR_IA32_MC0_CTL       0x400
  104. #define MSR_IA32_MC0_STATUS        0x401
  105. #define MSR_IA32_MC0_ADDR      0x402
  106. #define MSR_IA32_MC0_MISC      0x403
  107. #define MSR_P6_PERFCTR0 0xc1
  108. #define MSR_P6_PERFCTR1 0xc2
  109. #define MSR_P6_EVNTSEL0 0x186
  110. #define MSR_P6_EVNTSEL1 0x187
  111. /* K7/K8 MSRs. Not complete. See the architecture manual for a more complete list. */
  112. #define MSR_K7_EVNTSEL0            0xC0010000
  113. #define MSR_K7_PERFCTR0            0xC0010004
  114. #define MSR_K7_EVNTSEL1            0xC0010001
  115. #define MSR_K7_PERFCTR1            0xC0010005
  116. #define MSR_K7_EVNTSEL2            0xC0010002
  117. #define MSR_K7_PERFCTR2            0xC0010006
  118. #define MSR_K7_EVNTSEL3            0xC0010003
  119. #define MSR_K7_PERFCTR3            0xC0010007
  120. #define MSR_K8_TOP_MEM1    0xC001001A
  121. #define MSR_K8_TOP_MEM2    0xC001001D
  122. #define MSR_K8_SYSCFG    0xC0000010
  123. /* K6 MSRs */
  124. #define MSR_K6_EFER 0xC0000080
  125. #define MSR_K6_STAR 0xC0000081
  126. #define MSR_K6_WHCR 0xC0000082
  127. #define MSR_K6_UWCCR 0xC0000085
  128. #define MSR_K6_PSOR 0xC0000087
  129. #define MSR_K6_PFIR 0xC0000088
  130. /* Centaur-Hauls/IDT defined MSRs. */
  131. #define MSR_IDT_FCR1 0x107
  132. #define MSR_IDT_FCR2 0x108
  133. #define MSR_IDT_FCR3 0x109
  134. #define MSR_IDT_FCR4 0x10a
  135. #define MSR_IDT_MCR0 0x110
  136. #define MSR_IDT_MCR1 0x111
  137. #define MSR_IDT_MCR2 0x112
  138. #define MSR_IDT_MCR3 0x113
  139. #define MSR_IDT_MCR4 0x114
  140. #define MSR_IDT_MCR5 0x115
  141. #define MSR_IDT_MCR6 0x116
  142. #define MSR_IDT_MCR7 0x117
  143. #define MSR_IDT_MCR_CTRL 0x120
  144. /* VIA Cyrix defined MSRs*/
  145. #define MSR_VIA_FCR 0x1107
  146. /* Intel defined MSRs. */
  147. #define MSR_IA32_P5_MC_ADDR 0
  148. #define MSR_IA32_P5_MC_TYPE 1
  149. #define MSR_IA32_PLATFORM_ID 0x17
  150. #define MSR_IA32_EBL_CR_POWERON 0x2a
  151. #define MSR_IA32_APICBASE               0x1b
  152. #define MSR_IA32_APICBASE_BSP           (1<<8)
  153. #define MSR_IA32_APICBASE_ENABLE        (1<<11)
  154. #define MSR_IA32_APICBASE_BASE          (0xfffff<<12)
  155. #endif