Avoids nehalem keyboard issues, better monitors
[akaros.git] / kern / arch / i686 / console.c
index a5df0e6..69db09b 100644 (file)
@@ -405,6 +405,17 @@ kbd_proc_data(void)
        int c;
        uint8_t data;
 
+#ifdef __CONFIG_KB_CORE0_ONLY__
+       /* Ghetto hack to avoid crashing brho's buggy nehalem. */
+       uint32_t eax, ebx, ecx, edx, family, model, stepping;
+       cpuid(1, &eax, &ebx, &ecx, &edx);
+       family = ((eax & 0x0FF00000) >> 20) + ((eax & 0x00000F00) >> 8);
+       model = ((eax & 0x000F0000) >> 12) + ((eax & 0x000000F0) >> 4);
+       stepping = eax & 0x0000000F;
+       if (family == 6 && model == 26 && stepping == 4)
+               if (core_id())
+                       return -1;
+#endif /* __CONFIG_KB_CORE0_ONLY */
 
        if ((inb(KBSTATP) & KBS_DIB) == 0)
                return -1;
@@ -526,7 +537,7 @@ cons_getc(void)
        // poll for any pending input characters,
        // so that this function works even when interrupts are disabled
        // (e.g., when called from the kernel monitor).
-       #ifndef SERIAL_IO
+       #ifndef __CONFIG_SERIAL_IO__
                serial_intr();
        #endif
        kbd_intr();
@@ -550,7 +561,7 @@ cons_putc(int c)
 {
        //static uint32_t lock; zra: moving up for sharC annotations
        spin_lock_irqsave(&lock);
-       #ifndef SERIAL_IO
+       #ifndef __CONFIG_SERIAL_IO__
                serial_putc(c);
        #endif
        //lpt_putc(c);