diff options
| author | Michal Idziorek <m.i@gmx.at> | 2014-09-03 16:05:48 +0200 |
|---|---|---|
| committer | Michal Idziorek <m.i@gmx.at> | 2014-09-03 16:05:48 +0200 |
| commit | ae361f46b092264f5107eaaf8fc594e0ca679014 (patch) | |
| tree | 560ec382c3b3c9b5759996df7fdcd8f6032a763c /kernel | |
| parent | e5e674724ec527c45efaa1622d0e9a1618757ca3 (diff) | |
fix bug in apic.c and update of Readme
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/acpi.c | 6 | ||||
| -rw-r--r-- | kernel/kernel.c | 29 |
2 files changed, 12 insertions, 23 deletions
diff --git a/kernel/acpi.c b/kernel/acpi.c index da16be8..586336c 100644 --- a/kernel/acpi.c +++ b/kernel/acpi.c @@ -65,8 +65,10 @@ uint8_t *apci_get_next_entry(uint8_t *addr,smp_processors *procdata) // usable if(addr[4]&1) { - if(procdata->processors>=SMP_MAX_PROC) + if(procdata->processors>=SMP_MAX_PROC){ + panic(FOOLOS_MODULE_NAME,"we do not support that many processors. recompile with higher SMP_MAX_PROC."); + } procdata->local_apic_id[procdata->processors]=addr[3]; procdata->processors++; @@ -139,6 +141,8 @@ bool acpi_find(smp_processors *procdata) { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"Looking for RSDP Table"); char *search=0x7ffff; //will be 16 bit aligned; + procdata->processors=0; + procdata->boot=0; while(search<=0xfffff) { diff --git a/kernel/kernel.c b/kernel/kernel.c index 40c576a..6931ad1 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -146,32 +146,17 @@ void kernel_main(uint32_t initial_stack, int mp) // - // Initialize other processors (run this before entering paged mode) + // Gather Info about other processors. + // ACPI or MP // - // This currently uses the MP Floating Pointer Struct. - // Should support APCI in future too. - // - - smp_processors procdata1; - smp_processors procdata2; smp_processors procdata; // try to find acpi tables - bool succ_acpi=acpi_find(&procdata1); - - // fallback to mp tables - bool succ_mp=mp_find(&procdata2); - - if(!succ_acpi&&!succ_mp) - panic(FOOLOS_MODULE_NAME,"ACPI and MP search failed! I do not want to continue!"); - - if(succ_acpi)procdata=procdata1; - else procdata=procdata2; - - // multiprocessing! + if(!acpi_find(&procdata)) + if(!mp_find(&procdata)) + panic(FOOLOS_MODULE_NAME,"ACPI and MP search failed! I do not want to continue!"); - smp_log_procdata(&procdata1); - smp_log_procdata(&procdata2); + // Start the other Processors (also before paging !) smp_start_aps(&procdata); @@ -195,7 +180,7 @@ void kernel_main(uint32_t initial_stack, int mp) // Initialize Floppy Disk // - // floppy_init(); + //floppy_init(); // |
