I'm working on an APIC subsystem so I want to use the multiprocessor specification. I implemented some test code to find the MP Floating Pointer Structure. I can't find it at the specified locations (on a real, multiprocessor system). Possible locations:
My code:a. In the first kilobyte of Extended BIOS Data Area (EBDA), or
b. Within the last kilobyte of system base memory (e.g., 639K-640K for systems with 640
KB of base memory or 511K-512K for systems with 512 KB of base memory) if the
EBDA segment is undefined, or
c. In the BIOS ROM address space between 0F0000h and 0FFFFFh.
Code: Select all
static void *
ol_cpu_mp_search_config_table(void * base, uint16_t i /* amount of tries */)
{
while(i--)
{
if( *((uint32_t *)base) == OL_CPU_MP_FPS_SIGNATURE)
{
return base;
}
else
{
printnum(*((uint32_t *)base), 16, 0, 0);
putc(0xa);
base += 1;
}
}
return NULL;
}
Code: Select all
(void*)(*((uint16_t *)0x40e)<<4)
Is it likely that my PC doesn't support the MP spec? Or does someone see a bug in my code, since it always returns a NULL-pointer.The exact starting address of the EBDA segment for EISA or MCA systems can be found in a two-
byte location (40:0Eh) of the BIOS data area.
Greets,
Bietje