]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/9/pc/mp.c
etheriwl: implement 4965 firmware bootstrap (untested)
[plan9front.git] / sys / src / 9 / pc / mp.c
index b392c6a46b233dcd98432f0d452db8f4ac32be1f..27eee1da670a4008fa0c9eb8f326346ee4b6a4ad 100644 (file)
@@ -99,7 +99,7 @@ checkmtrr(void)
        /*
         * If there are MTRR registers, snarf them for validation.
         */
-       if(!(m->cpuiddx & 0x1000))
+       if(!(m->cpuiddx & Mtrr))
                return;
 
        rdmsr(0x0FE, &m->mtrrcap);
@@ -185,6 +185,7 @@ squidboy(Apic* apic)
        checkmtrr();
 
        apic->online = 1;
+       coherence();
 
        lapicinit(apic);
        lapiconline();
@@ -251,14 +252,14 @@ mpstartap(Apic* apic)
         * The offsets are known in the AP bootstrap code.
         */
        apbootp = (ulong*)(APBOOTSTRAP+0x08);
-       *apbootp++ = (ulong)squidboy;
+       *apbootp++ = (ulong)squidboy;   /* assembler jumps here eventually */
        *apbootp++ = PADDR(pdb);
        *apbootp = (ulong)apic;
 
        /*
         * Universal Startup Algorithm.
         */
-       p = KADDR(0x467);
+       p = KADDR(0x467);               /* warm-reset vector */
        *p++ = PADDR(APBOOTSTRAP);
        *p++ = PADDR(APBOOTSTRAP)>>8;
        i = (PADDR(APBOOTSTRAP) & ~0xFFFF)/16;
@@ -267,8 +268,9 @@ mpstartap(Apic* apic)
                print("mp: bad APBOOTSTRAP\n");
        *p++ = i;
        *p = i>>8;
+       coherence();
 
-       nvramwrite(0x0F, 0x0A);
+       nvramwrite(0x0F, 0x0A);         /* shutdown code: warm reset upon init ipi */
        lapicstartap(apic, PADDR(APBOOTSTRAP));
        for(i = 0; i < 1000; i++){
                if(apic->online)
@@ -327,6 +329,7 @@ mpinit(void)
                return;
        }
        apic->online = 1;
+
        lapicinit(apic);
 
        /*
@@ -579,7 +582,7 @@ msiintrenable(Vctl *v)
        int tbdf, vno, cap, cpu, ok64;
        Pcidev *pci;
 
-       if(getconf("*msi") == nil)
+       if(getconf("*nomsi") != nil)
                return -1;
        tbdf = v->tbdf;
        if(tbdf == BUSUNKNOWN || BUSTYPE(tbdf) != BusPCI)