Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / arch / x86_64 / include / ipxe / msr.h
diff --git a/qemu/roms/ipxe/src/arch/x86_64/include/ipxe/msr.h b/qemu/roms/ipxe/src/arch/x86_64/include/ipxe/msr.h
new file mode 100644 (file)
index 0000000..a5816ac
--- /dev/null
@@ -0,0 +1,43 @@
+#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 ) {
+       uint32_t high;
+       uint32_t low;
+
+       __asm__ __volatile__ ( "rdmsr" :
+                              "=d" ( high ), "=a" ( low ) : "c" ( msr ) );
+       return ( ( ( ( uint64_t ) high ) << 32 ) | low );
+}
+
+/**
+ * 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 ) {
+       uint32_t high = ( value >> 32 );
+       uint32_t low = ( value >> 0 );
+
+       __asm__ __volatile__ ( "wrmsr" : :
+                              "c" ( msr ), "d" ( high ), "a" ( low ) );
+}
+
+#endif /* _IPXE_MSR_H */