From: Michael Brown Date: Sun, 20 Jul 2014 10:10:00 +0000 (+0100) Subject: [i386] Add functions to read and write model-specific registers X-Git-Tag: v1.20.1~1124 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=945b8de1fd4f4e93d3a221e790a2ed28aa20cad9;p=thirdparty%2Fipxe.git [i386] Add functions to read and write model-specific registers Signed-off-by: Michael Brown --- diff --git a/src/arch/i386/include/ipxe/msr.h b/src/arch/i386/include/ipxe/msr.h new file mode 100644 index 000000000..c88e26a39 --- /dev/null +++ b/src/arch/i386/include/ipxe/msr.h @@ -0,0 +1,38 @@ +#ifndef _IPXE_MSR_H +#define _IPXE_MSR_H + +/** @file + * + * Model-specific registers + * + */ + +FILE_LICENCE ( GPL2_OR_LATER ); + +/** + * Read model-specific register + * + * @v msr Model-specific register + * @ret value Value + */ +static inline __attribute__ (( always_inline )) uint64_t +rdmsr ( unsigned int msr ) { + uint64_t value; + + __asm__ __volatile__ ( "rdmsr" : "=A" ( value ) : "c" ( msr ) ); + return value; +} + +/** + * Write model-specific register + * + * @v msr Model-specific register + * @v value Value + */ +static inline __attribute__ (( always_inline )) void +wrmsr ( unsigned int msr, uint64_t value ) { + + __asm__ __volatile__ ( "wrmsr" : : "c" ( msr ), "A" ( value ) ); +} + +#endif /* _IPXE_MSR_H */