NIX mode.
[akaros.git] / kern / arch / x86 / mp.c
index 71f6b34..32dbbcc 100644 (file)
@@ -18,6 +18,8 @@
 #include <pmap.h>
 #include <smp.h>
 #include <ip.h>
+#include <arch/mptables.h>
+#include <arch/ioapic.h>
 
 /*
  * MultiProcessor Specification Version 1.[14].
@@ -220,7 +222,7 @@ static int 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 %p bp %d\n",
+                               printd("mpparse: cpu %d pa %p bp %d\n",
                                           p[1], l32get(pcmp->apicpa), p[3] & 0x02);
                                if ((p[3] & 0x01) != 0 && maxcores > 0) {
                                        maxcores--;
@@ -229,14 +231,14 @@ static int mpparse(PCMP * pcmp, int maxcores)
                                p += 20;
                                break;
                        case 1: /* bus */
-                               printk("mpparse: bus: %d type %6.6s\n", p[1], (char *)p + 2);
+                               printd("mpparse: bus: %d type %6.6s\n", p[1], (char *)p + 2);
                                if (p[1] >= Nbus) {
-                                       printd("mpparse: bus %d out of range\n", p[1]);
+                                       printk("mpparse: bus %d out of range\n", p[1]);
                                        p += 8;
                                        break;
                                }
                                if (mpbus[p[1]] != NULL) {
-                                       printd("mpparse: bus %d already allocated\n", p[1]);
+                                       printk("mpparse: bus %d already allocated\n", p[1]);
                                        p += 8;
                                        break;
                                }
@@ -245,7 +247,7 @@ static int mpparse(PCMP * pcmp, int maxcores)
                                                continue;
                                        if (memcmp(p + 2, "ISA   ", 6) == 0) {
                                                if (mpisabusno != -1) {
-                                                       printd("mpparse: bus %d already have ISA bus %d\n",
+                                                       printk("mpparse: bus %d already have ISA bus %d\n",
                                                                   p[1], mpisabusno);
                                                        continue;
                                                }
@@ -255,8 +257,8 @@ static int mpparse(PCMP * pcmp, int maxcores)
                                        break;
                                }
                                if (mpbus[p[1]] == NULL)
-                                       printd("mpparse: bus %d type %6.6s unknown\n",
-                                                  p[1], (char *unused_char_p_t)p + 2);
+                                       printk("mpparse: bus %d type %6.6s unknown\n",
+                                                  p[1], (char *)p + 2);
 
                                p += 8;
                                break;
@@ -285,11 +287,13 @@ static int mpparse(PCMP * pcmp, int maxcores)
                                        break;
                                }
                                if ((lo = mpmkintr(p)) == 0) {
+                                       if (MP_VERBOSE_DEBUG)
+                                               mpintrprint("iointr skipped", p);
                                        p += 8;
                                        break;
                                }
                                if (MP_VERBOSE_DEBUG)
-                                       mpintrprint(NULL, p);
+                                       mpintrprint("iointr", p);
 
                                /*
                                 * Always present the device number in the style
@@ -304,8 +308,6 @@ static int mpparse(PCMP * pcmp, int maxcores)
                                devno = p[5];
                                if (memcmp(mpbus[p[4]]->type, "PCI   ", 6) != 0)
                                        devno <<= 2;
-                               void ioapicintrinit(int busno, int apicno, int intin, int devno,
-                                                                       int lo);
                                ioapicintrinit(p[4], p[6], p[7], devno, lo);
 
                                p += 8;
@@ -356,19 +358,19 @@ static int mpparse(PCMP * pcmp, int maxcores)
                                printd("\n");
                                break;
                        case 128:
-                               printk("address space mapping\n");
-                               printk(" bus %d type %d base %#llux length %#llux\n",
+                               printd("address space mapping\n");
+                               printd(" bus %d type %d base %#llux length %#llux\n",
                                           p[2], p[3], l64get(p + 4), l64get(p + 12));
                                p += p[1];
                                break;
                        case 129:
-                               printk("bus hierarchy descriptor\n");
-                               printk(" bus %d sd %d parent bus %d\n", p[2], p[3], p[4]);
+                               printd("bus hierarchy descriptor\n");
+                               printd(" bus %d sd %d parent bus %d\n", p[2], p[3], p[4]);
                                p += p[1];
                                break;
                        case 130:
-                               printk("compatibility bus address space modifier\n");
-                               printk(" bus %d pr %d range list %d\n",
+                               printd("compatibility bus address space modifier\n");
+                               printd(" bus %d pr %d range list %d\n",
                                           p[2], p[3], l32get(p + 4));
                                p += p[1];
                                break;
@@ -401,7 +403,7 @@ static void *sigsearch(char *signature)
                return r;
 #endif
        r = sigscan(KADDR(0xe0000), 0x20000, signature);
-       printk("Found mp table at %p\n", r);
+       printk("Found MP table at %p\n", r);
        if (r != NULL)
                return r;
 
@@ -435,20 +437,15 @@ int mpsinit(int maxcores)
                return ncleft;
        if (sigchecksum(mp, mp->length * 16) != 0)
                return ncleft;
-#define vmap(x,y) KADDR((x))
-#define vunmap(x,y)
-
-       if ((pcmp = vmap(l32get(mp->addr), sizeof(PCMP))) == NULL)
+       if ((pcmp = KADDR_NOCHECK(l32get(mp->addr))) == NULL)
                return ncleft;
        if (pcmp->revision != 1 && pcmp->revision != 4) {
                return ncleft;
        }
        n = l16get(pcmp->length) + l16get(pcmp->xlength);
-       vunmap(pcmp, sizeof(PCMP));
-       if ((pcmp = vmap(l32get(mp->addr), n)) == NULL)
+       if ((pcmp = KADDR_NOCHECK(l32get(mp->addr))) == NULL)
                return ncleft;
        if (sigchecksum(pcmp, l16get(pcmp->length)) != 0) {
-               vunmap(pcmp, n);
                return ncleft;
        }
        if (MP_VERBOSE_DEBUG) {
@@ -468,7 +465,6 @@ int mpsinit(int maxcores)
                i = sigchecksum(p, l16get(pcmp->xlength));
                if (((i + pcmp->xchecksum) & 0xff) != 0) {
                        printd("extended table checksums to %p\n", i);
-                       vunmap(pcmp, n);
                        return ncleft;
                }
        }