MP table: Test 0xe0000 when searching MP float pointer structure
authorMichael Neumann <mneumann@ntecs.de>
Wed, 13 Oct 2010 21:23:13 +0000 (23:23 +0200)
committerMichael Neumann <mneumann@ntecs.de>
Wed, 13 Oct 2010 21:23:13 +0000 (23:23 +0200)
Apply commit 1df86978bda289b743b2fc978e82721462823b97 for x86_64.

MultiProcessor Specification version 1.4 never mentions this location,
however, some brain-dead BIOSes put MP table there ...  "Extened BIOS"
location is taken from mptable(8) in the base system.

Reported-and-Tested-by: ruse39 on EFnet #dragonflybsd
sys/platform/pc64/x86_64/mp_machdep.c

index 70832da..1b70bca 100644 (file)
@@ -73,6 +73,7 @@
 #define WARMBOOT_SEG           (KERNBASE + 0x0469)
 
 #define BIOS_BASE              (0xf0000)
+#define BIOS_BASE2             (0xe0000)
 #define BIOS_SIZE              (0x10000)
 #define BIOS_COUNT             (BIOS_SIZE/4)
 
@@ -400,6 +401,11 @@ mptable_search(void)
        if ((x = mptable_search_sig(target, BIOS_COUNT)) > 0)
                return x;
 
+       /* search the extended BIOS */
+       target = (u_int32_t)BIOS_BASE2;
+       if ((x = mptable_search_sig(target, BIOS_COUNT)) > 0)
+               return x;
+
        /* nothing found */
        return 0;
 }