Closes T154: pmap, kernel: Add support for write-combining on ia32/64
[barrelfish] / kernel / include / arch / x86 / startup_x86.h
index 8d179e2..19de999 100644 (file)
@@ -16,6 +16,7 @@
 #define __STARTUP_X86_H
 
 #include <startup.h>
+#include <arch/x86/start_aps.h>
 
 #define BOOTINFO_BASE           ((lvaddr_t)0x200000)
 #define ARGS_BASE               (BOOTINFO_BASE + BOOTINFO_SIZE)
@@ -40,4 +41,34 @@ struct dcb *spawn_app_init(struct x86_core_data *core_data,
 
 extern struct x86_core_data *glbl_core_data; // XXX: Arch specific
 
+// global pointers used in init_ap.S
+extern uint64_t x86_64_start_ap;
+extern uint64_t x86_64_init_ap_wait;
+extern uint64_t x86_32_start_ap;
+extern uint64_t x86_32_init_ap_wait;
+
+static inline void start_ap_signal(void)
+{
+
+    //pointer to a variable used as pseudo-lock to synchronize the BSP
+    //and the AP which gets enabled
+#if defined(__k1om__) || defined(__x86_64__)
+    volatile uint32_t *ap_wait = (volatile uint32_t *)
+        local_phys_to_mem((lpaddr_t)&x86_64_init_ap_wait - ((lpaddr_t)&x86_64_start_ap) +
+                          X86_64_REAL_MODE_LINEAR_OFFSET);
+#elif defined (__i386__)
+#       if !defined(__scc__)
+    volatile uint32_t *ap_wait = (volatile uint32_t *)
+        local_phys_to_mem((lpaddr_t)&x86_32_init_ap_wait - ((lpaddr_t)&x86_32_start_ap) +
+                          X86_32_REAL_MODE_LINEAR_OFFSET);
+#       endif
+#else
+#error "Architecture not supported"
+#endif
+
+    *ap_wait = AP_STARTED;
+}
+
+void configure_page_attribute_table(void);
+
 #endif // __STARTUP_X86_H