One final round of fixup/cleanup.
authorRonald G. Minnich <rminnich@google.com>
Tue, 4 Mar 2014 16:25:15 +0000 (08:25 -0800)
committerRonald G. Minnich <rminnich@google.com>
Tue, 4 Mar 2014 16:25:15 +0000 (08:25 -0800)
Not working.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
kern/arch/x86/ioapic.c
kern/arch/x86/mp.c
kern/drivers/dev/acpi.c

index d4681b8..118a778 100644 (file)
@@ -129,7 +129,7 @@ printk("%s: busno %d apicno %d intin %d devno %p lo %p\n", __func__,
 
        rdt = rdtlookup(apic, intin);
        if(rdt == NULL){
-printk("NO RDT, install it for apic %d intin %d lo %p\n", apic, intin, lo);
+printk("NO RDT, install it for apic %d intin %d lo %p\n", apicno, intin, lo);
                rdt = &rdtarray[nrdtarray++];
                rdt->apic = apic;
                rdt->intin = intin;
index 3c8932a..df656dd 100644 (file)
@@ -58,7 +58,7 @@ static void
 mpintrprint(char* s, uint8_t* p)
 {
        char buf[128], *b, *e;
-       char format[] = " type %d flags %#ux bus %d IRQ %d APIC %d INTIN %d\n";
+       char format[] = " type %d flags %p bus %d IRQ %d APIC %d INTIN %d\n";
 
        b = buf;
        e = b + sizeof(buf);
@@ -69,9 +69,9 @@ mpintrprint(char* s, uint8_t* p)
        seprintf(b, e, format, p[1], l16get(p+2), p[4], p[5], p[6], p[7]);
        printd(buf);
 */
-       b = printk("mpparse: intr:");
+       printk("mpparse: intr:");
        if(s != NULL)
-               b = printk(" %s:", s);
+               printk(" %s:", s);
        printk(format, p[1], l16get(p+2), p[4], p[5], p[6], p[7]);
 }
 
@@ -213,7 +213,7 @@ mpparse(PCMP* pcmp, int maxcores)
                 * CPU and identical for all. Indicate whether this is
                 * the bootstrap processor (p[3] & 0x02).
                 */
-               printk("mpparse: cpu %d pa %#ux bp %d\n",
+               printk("mpparse: cpu %d pa %p bp %d\n",
                        p[1], l32get(pcmp->apicpa), p[3] & 0x02);
                if((p[3] & 0x01) != 0 && maxcores > 0){
                                maxcores--;
@@ -445,10 +445,10 @@ mpsinit(int maxcores)
        }
 
        if(2){
-               printk("_MP_ @ %#p, addr %#ux length %ud rev %d",
+               printk("_MP_ @ %#p, addr %p length %ud rev %d",
                        mp, l32get(mp->addr), mp->length, mp->revision);
                for(i = 0; i < sizeof(mp->feature); i++)
-                       printk(" %2.2#ux", mp->feature[i]);
+                       printk(" %2.2p", mp->feature[i]);
                printk("\n");
        }
        if(mp->revision != 1 && mp->revision != 4)
index d8b6b48..7d948f0 100644 (file)
@@ -335,6 +335,11 @@ regcpy(struct Regio *dio, uintptr_t da, struct Regio *sio,
        return n*align;
 }
 
+// until we know.
+//#define vmap(x,y) (void *)vmap_pmem((x),(y))
+//#define vunmap(x,y) vunmap_vmem((uintptr_t)(x),(y))
+#define vmap(x,y) KADDR((x))
+#define vunmap(x,y) 
 /*
  * Perform I/O within region in access units of accsz bytes.
  * All units in bytes.
@@ -362,8 +367,7 @@ regio(struct Reg *r, void *p, uint32_t len, uintptr_t off, int iswr)
                // A region might be too large.
                // we don't have this nonsense in akaros, right? 
                if(r->p == NULL)
-                       //r->p = vmap(r->base, len);
-                       r->p = KADDR(r->base);
+                       r->p = vmap(r->base, len);
                if(r->p == NULL)
                        error("regio: vmap failed");
                rp = (uintptr_t)r->p + off;
@@ -443,20 +447,28 @@ sdtmap(uintptr_t pa, int *n, int cksum)
 {
        struct Sdthdr* sdt;
 
-       sdt = KADDR(pa); //vmap(pa, sizeof(struct Sdthdr));
+       if (! pa){
+               printk("sdtmap: NULL pa\n");
+               return NULL;
+       }
+       sdt = vmap(pa, sizeof(*sdt));
        if(sdt == NULL){
                printk("acpi: vmap1: NULL\n");
                return NULL;
        }
        *n = l32get(sdt->length);
-       //vunmap(sdt, sizeof(Sdthdr));
-       if((sdt = KADDR(pa) /*vmap(pa, *n)*/) == NULL){
+       vunmap(sdt, sizeof(*sdt));
+       if (! *n) {
+               printk("sdt has zero length!\n");
+               return NULL;
+       }
+       if((sdt = vmap(pa, *n)) == NULL){
                printk("acpi: NULL vmap\n");
                return NULL;
        }
        if(cksum != 0 && sdtchecksum(sdt, *n) == NULL){
                printk("acpi: SDT: bad checksum\n");
-               //vunmap(sdt, sizeof(Sdthdr));
+               vunmap(sdt, sizeof(*sdt));
                return NULL;
        }
        return sdt;