summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/amd64/machdep.c2
-rw-r--r--sys/include/sys/machdep.h28
-rw-r--r--sys/kern/init_main.c3
3 files changed, 29 insertions, 4 deletions
diff --git a/sys/arch/amd64/machdep.c b/sys/arch/amd64/machdep.c
index dd2cdc7..747d23a 100644
--- a/sys/arch/amd64/machdep.c
+++ b/sys/arch/amd64/machdep.c
@@ -63,6 +63,6 @@ processor_halt(void)
__weak void
processor_init(struct processor *processor)
{
- gdt_load(processor->gdtr);
+ gdt_load(processor->machdep.gdtr);
interrupts_init(processor);
}
diff --git a/sys/include/sys/machdep.h b/sys/include/sys/machdep.h
index 5f2112c..f98b123 100644
--- a/sys/include/sys/machdep.h
+++ b/sys/include/sys/machdep.h
@@ -39,9 +39,35 @@
#if defined(_KERNEL)
-struct processor {
+/*
+ * Arch specifics go here
+ * along with an #if defined(...)
+ *
+ * XXX: When porting more architectures this
+ * may get messy. Figure out a way to
+ * seperate this into a different header.
+ */
+struct processor_machdep {
+#if defined(__x86_64__)
struct gdtr *gdtr;
struct gdt_entry *gdt;
+#endif /* defined(__x86_64__) */
+};
+
+/*
+ * Sets arch specifics to their
+ * defaults.
+ */
+#if defined(__x86_64__)
+#define DEFAULT_PROCESSOR_MACHDEP \
+ { \
+ .gdtr = &g_early_gdtr, \
+ .gdt = &g_dmmy_gdt[0] \
+ }
+#endif /* defined(__x86_64__) */
+
+struct processor {
+ struct processor_machdep machdep;
};
__weak void processor_init(struct processor *processor);
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c
index 2ae2a09..f4db156 100644
--- a/sys/kern/init_main.c
+++ b/sys/kern/init_main.c
@@ -40,8 +40,7 @@ __KERNEL_META("$Vega$: init_main.c, Ian Marco Moffett, "
"Where the Vega kernel first starts up");
static struct processor bsp = {
- .gdtr = &g_early_gdtr,
- .gdt = &g_dmmy_gdt[0]
+ .machdep = DEFAULT_PROCESSOR_MACHDEP
};
void