iPXE
msr.h
Go to the documentation of this file.
1 #ifndef _IPXE_MSR_H
2 #define _IPXE_MSR_H
3 
4 /** @file
5  *
6  * Model-specific registers
7  *
8  */
9 
10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11 
12 /**
13  * Read model-specific register
14  *
15  * @v msr Model-specific register
16  * @ret value Value
17  */
18 static inline __attribute__ (( always_inline )) uint64_t
19 rdmsr ( unsigned int msr ) {
21 
22  __asm__ __volatile__ ( "rdmsr" : "=A" ( value ) : "c" ( msr ) );
23  return value;
24 }
25 
26 /**
27  * Write model-specific register
28  *
29  * @v msr Model-specific register
30  * @v value Value
31  */
32 static inline __attribute__ (( always_inline )) void
33 wrmsr ( unsigned int msr, uint64_t value ) {
34 
35  __asm__ __volatile__ ( "wrmsr" : : "c" ( msr ), "A" ( value ) );
36 }
37 
38 #endif /* _IPXE_MSR_H */
unsigned long long uint64_t
Definition: stdint.h:13
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
static uint64_t value
Definition: msr.h:33
__asm__ __volatile__("\n1:\n\t" "movb -1(%3,%1), %%al\n\t" "stosb\n\t" "loop 1b\n\t" "xorl %%eax, %%eax\n\t" "mov %4, %1\n\t" "rep stosb\n\t" :"=&D"(discard_D), "=&c"(discard_c), "+m"(*value) :"r"(data), "g"(pad_len), "0"(value0), "1"(len) :"eax")
__asm__(".section \".rodata\", \"a\", " PROGBITS "\n\t" "\nprivate_key_data:\n\t" ".size private_key_data, ( . - private_key_data )\n\t" ".equ private_key_len, ( . - private_key_data )\n\t" ".previous\n\t")
static __attribute__((always_inline)) uint64_t rdmsr(unsigned int msr)
Read model-specific register.
Definition: msr.h:18