Add constants for fast path resume copying
[coreboot.git] / util / inteltool / cpu.c
index e79380aef43b5e1b2fb8aa032ee858d28affe81b..f0183816f7a347a88289650d30c36dad55d806fc 100644 (file)
 
 #include "inteltool.h"
 
+#ifdef __x86_64__
+# define BREG  "%%rbx"
+#else
+# define BREG  "%%ebx"
+#endif
+
 int fd_msr;
 
 unsigned int cpuid(unsigned int op)
 {
        uint32_t ret;
 
-#if defined(__DARWIN__) && !defined(__LP64__)
+#if defined(__PIC__) || defined(__DARWIN__) && !defined(__LP64__)
        asm volatile (
-               "pushl %%ebx\n"
-               "cpuid\n"
-               "popl %%ebx\n"
+               "push " BREG "\n\t"
+               "cpuid\n\t"
+               "pop " BREG "\n\t"
                : "=a" (ret) : "a" (op) : "%ecx", "%edx"
        );
 #else
@@ -51,7 +57,7 @@ int msr_readerror = 0;
 
 msr_t rdmsr(int addr)
 {
-       uint8_t buf[8];
+       uint32_t buf[2];
        msr_t msr = { 0xffffffff, 0xffffffff };
 
        if (lseek(fd_msr, (off_t) addr, SEEK_SET) == -1) {
@@ -61,9 +67,8 @@ msr_t rdmsr(int addr)
        }
 
        if (read(fd_msr, buf, 8) == 8) {
-               msr.lo = *(uint32_t *)buf;
-               msr.hi = *(uint32_t *)(buf + 4);
-
+               msr.lo = buf[0];
+               msr.hi = buf[1];
                return msr;
        }