Clean up user library include paths (XCC)
[akaros.git] / user / vmm / apic.c
index d77733a..d189dc3 100644 (file)
 #include <stdint.h>
 #include <err.h>
 #include <sys/mman.h>
-#include <ros/vmm.h>
+#include <vmm/vmm.h>
 #include <vmm/virtio.h>
 #include <vmm/virtio_mmio.h>
 #include <vmm/virtio_ids.h>
 #include <vmm/virtio_config.h>
 
+
 #define APIC_CONFIG 0x100
 
 int debug_apic = 1;
@@ -34,13 +35,6 @@ int debug_apic = 1;
        if (debug_apic) { fprintf(stderr, "apic: " fmt , ## __VA_ARGS__); }
 
 
-struct apicinfo {
-       int state; // not used yet. */
-       int id;
-       uint64_t apicbase;
-       uint64_t ioapicbase;
-};
-
 static struct apicinfo apicinfo;
 
 enum {
@@ -174,6 +168,10 @@ int apic(struct vmctl *v, uint64_t gpa, int destreg, uint64_t *regp, int store)
        uint32_t offset = gpa & 0xfffff;
        /* basic sanity tests. */
        // TODO: Should be minus the base but FIXME
+
+       //fprintf(stderr, "WE SHOULD NEVER BE HERE: user/vmm/apic.c");
+       //exit(1);
+
        offset = gpa & 0xfffff;
        if (offset & 0xf) {
                DPRINTF("bad register offset; low nibl is non-zero\n");
@@ -194,3 +192,20 @@ int apic(struct vmctl *v, uint64_t gpa, int destreg, uint64_t *regp, int store)
        }
 
 }
+
+void vapic_status_dump(FILE *f, void *vapic)
+{
+       uint32_t *p = (uint32_t *)vapic;
+       int i;
+       fprintf(f, "-- BEGIN APIC STATUS DUMP --\n");
+       for (i = 0x100/sizeof(*p); i < 0x180/sizeof(*p); i+=4) {
+               fprintf(f, "VISR : 0x%x: 0x%08x\n", i, p[i]);
+       }
+       for (i = 0x200/sizeof(*p); i < 0x280/sizeof(*p); i+=4) {
+               fprintf(f, "VIRR : 0x%x: 0x%08x\n", i, p[i]);
+       }
+       i = 0x0B0/sizeof(*p);
+       fprintf(f, "EOI FIELD : 0x%x, 0x%08x\n", i, p[i]);
+
+       fprintf(f, "-- END APIC STATUS DUMP --\n");
+}