x86: Add msr read/write functions that use a structure
authorSimon Glass <sjg@chromium.org>
Thu, 13 Nov 2014 05:42:18 +0000 (22:42 -0700)
committerSimon Glass <sjg@chromium.org>
Fri, 21 Nov 2014 06:34:13 +0000 (07:34 +0100)
It is convenient to be able to adjust MSRs with a structure that splits the
two 32-bit halves into separate fields, as they are often dealt with
separately. Add a few functions to support this.

Signed-off-by: Simon Glass <sjg@chromium.org>
arch/x86/include/asm/msr.h

index 3b5915d5e26a871b828677b3f92bb8914fe7ff8e..df4398378caaa9ee2373814316180bdf77deafb1 100644 (file)
@@ -175,6 +175,25 @@ static inline int wrmsr_safe_regs(u32 regs[8])
        return native_wrmsr_safe_regs(regs);
 }
 
+typedef struct msr_t {
+       uint32_t lo;
+       uint32_t hi;
+} msr_t;
+
+static inline struct msr_t msr_read(unsigned msr_num)
+{
+       struct msr_t msr;
+
+       rdmsr(msr_num, msr.lo, msr.hi);
+
+       return msr;
+}
+
+static inline void msr_write(unsigned msr_num, msr_t msr)
+{
+       wrmsr(msr_num, msr.lo, msr.hi);
+}
+
 #define rdtscl(low)                                            \
        ((low) = (u32)__native_read_tsc())