#include <inmate.h>
-#define X86_CR0_PE 0x00000001
-#define X86_CR0_WP 0x00010000
-#define X86_CR0_PG 0x80000000
+#define X86_CR0_PE 0x00000001
+#define X86_CR0_WP 0x00010000
+#define X86_CR0_PG 0x80000000
-#define X86_CR4_PSE 0x00000010
+#define X86_CR4_PSE 0x00000010
+
+#define MSR_MTRR_DEF_TYPE 0x000002ff
+#define MTRR_ENABLE 0x00000800
.code16
.section ".boot", "ax"
mov $(X86_CR0_PG | X86_CR0_WP | X86_CR0_PE),%eax
mov %eax,%cr0
+ movl $MSR_MTRR_DEF_TYPE,%ecx
+ rdmsr
+ or $MTRR_ENABLE,%eax
+ wrmsr
+
mov $stack_top,%esp
mov $INMATE_DS32,%eax
#include <inmate.h>
-#define X86_CR0_PE 0x00000001
-#define X86_CR0_WP 0x00010000
-#define X86_CR0_PG 0x80000000
+#define X86_CR0_PE 0x00000001
+#define X86_CR0_WP 0x00010000
+#define X86_CR0_PG 0x80000000
-#define X86_CR4_PAE 0x00000020
+#define X86_CR4_PAE 0x00000020
-#define MSR_EFER 0xc0000080
-#define EFER_LME 0x00000100
+#define MSR_EFER 0xc0000080
+#define EFER_LME 0x00000100
+
+#define MSR_MTRR_DEF_TYPE 0x000002ff
+#define MTRR_ENABLE 0x00000800
.code16
.section ".boot", "ax"
mov $pml4 + FSEGMENT_BASE,%eax
mov %eax,%cr3
+ movl $MSR_MTRR_DEF_TYPE,%ecx
+ rdmsr
+ or $MTRR_ENABLE,%eax
+ wrmsr
+
movl $MSR_EFER,%ecx
rdmsr
or $EFER_LME,%eax