ACPI init reorg
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 5 Mar 2014 01:08:41 +0000 (17:08 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 5 Mar 2014 01:30:26 +0000 (17:30 -0800)
Init the ACPI as soon as possible, and handle the APIC during IDT init.

kern/arch/x86/init.c
kern/arch/x86/trap.c
kern/drivers/dev/acpi.c
kern/include/acpi.h
kern/src/init.c

index 8458250..85100dd 100644 (file)
@@ -69,20 +69,6 @@ void arch_init()
        asm volatile ("fninit");
        save_fp_state(&x86_default_fpu); /* used in arch/trap.h for fpu init */
        pci_init();
-#ifdef CONFIG_ENABLE_MPTABLES
-       int ncleft;
-       int mpsinit(int maxcores);
-       int acpiinit(void);
-       /* this also does the mpacpi ... is that enough? */
-       ncleft = mpsinit(254);
-       /* NEVER printd here ... */
-       printk("mpacpi is %d\n", mpacpi(ncleft));
-       acpiinit();
-       void ioapiconline(void);
-       ioapiconline();
-       void apiconline(void);
-       apiconline();
-#endif
        // this returns when all other cores are done and ready to receive IPIs
        #ifdef CONFIG_SINGLE_CORE
                smp_percpu_init();
index cb9662f..91f5e8a 100644 (file)
@@ -160,6 +160,19 @@ void idt_init(void)
 
        asm volatile("lidt %0" : : "m"(idt_pd));
 
+#ifdef CONFIG_ENABLE_MPTABLES
+       int ncleft;
+       int mpsinit(int maxcores);
+
+       ncleft = mpsinit(MAX_NUM_CPUS);
+       /* NEVER printd here ... */
+       printk("mpacpi is %d\n", mpacpi(ncleft));
+
+       void ioapiconline(void);
+       void apiconline(void);
+       apiconline(); /* TODO: do this this for all cores*/
+       ioapiconline();
+#else
        // This will go away when we start using the IOAPIC properly
        pic_remap();
        // set LINT0 to receive ExtINTs (KVM's default).  At reset they are 0x1000.
@@ -168,6 +181,8 @@ void idt_init(void)
        mask_lapic_lvt(LAPIC_LVT_LINT0);
        // and turn it on
        lapic_enable();
+#endif
+
        /* register the generic timer_interrupt() handler for the per-core timers */
        register_raw_irq(LAPIC_TIMER_DEFAULT_VECTOR, timer_interrupt, NULL);
        /* register the kernel message handler */
index 047270c..8252504 100644 (file)
@@ -608,12 +608,6 @@ static struct Atable *acpifadt(uint8_t * p, int unused)
        gasget(&fp->xgpe0blk, p + 220);
        gasget(&fp->xgpe1blk, p + 232);
 
-#if 0
-       static char buf[8192];          // XXX
-       char *out;
-       out = dumpfadt(buf, &buf[8191], fp);
-       printk("%s\n", out);
-#endif
        if (fp->xfacs != 0)
                loadfacs(fp->xfacs);
        else
@@ -670,14 +664,6 @@ static struct Atable *acpimsct(uint8_t * p, int len)
                *stl = st;
                stl = &st->next;
        }
-#if 0
-       // no longer works if called from init.c
-       char *dump;
-       dump = kzmalloc(1024, KMALLOC_WAIT);
-       dumpmsct(dump, &dump[1023], msct);
-       printk("%s\n", dump);
-       kfree(dump);
-#endif
        return NULL;    /* can be unmapped once parsed */
 }
 
@@ -774,14 +760,6 @@ static struct Atable *acpisrat(uint8_t * p, int len)
                        stl = &st->next;
                }
        }
-
-#if 0
-       char *dump;
-       dump = kzmalloc(8192, KMALLOC_WAIT);
-       dumpsrat(dump, &dump[8192], srat);
-       printk("%s\n", dump);
-       kfree(dump);
-#endif
        return NULL;    /* can be unmapped once parsed */
 }
 
@@ -832,18 +810,10 @@ static struct Atable *acpislit(uint8_t * p, int len)
                se->dom = k;
                se->dist = *p;
        }
-
-#warning "no qsort"
 #if 0
-       char *dump;
-       dump = kzmalloc(8192, KMALLOC_WAIT);
-       dumpslit(dump, &dump[8191], slit);
-       printk("%s", dump);
-       kfree(dump);
+       /* TODO: might need to sort this shit */
        for (i = 0; i < slit->rowlen; i++)
                qsort(slit->e[i], slit->rowlen, sizeof(slit->e[0][0]), cmpslitent);
-
-       dumpslit(slit);
 #endif
        return NULL;    /* can be unmapped once parsed */
 }
@@ -1114,13 +1084,6 @@ static struct Atable *acpimadt(uint8_t * p, int len)
                        stl = &st->next;
                }
        }
-#if 0
-       char *dump;
-       dump = kzmalloc(8192, KMALLOC_WAIT);
-       dumpmadt(dump, &dump[8191], apics);
-       printk("%s\n", dump);
-       kfree(dump);
-#endif
        return NULL;    /* can be unmapped once parsed */
 }
 
index 4e45819..92f08de 100644 (file)
@@ -381,3 +381,5 @@ struct Xsdt {
 };
 
 extern uintptr_t acpimblocksize(uintptr_t, int *);
+
+int acpiinit(void);
index 31d7ab7..1a76999 100644 (file)
@@ -45,6 +45,7 @@
 #include <console.h>
 #include <linker_func.h>
 #include <ip.h>
+#include <acpi.h>
 #include <coreboot_tables.h>
 
 // zra: flag for Ivy
@@ -74,6 +75,7 @@ void kernel_init(multiboot_info_t *mboot_info)
        radix_init();
        cache_color_alloc_init();       // Inits data structs
        colored_page_alloc_init();      // Allocates colors for agnostic processes
+       acpiinit();
        kthread_init();                                 /* might need to tweak when this happens */
        vmr_init();
        file_init();