2 * Jailhouse, a Linux-based partitioning hypervisor
4 * Copyright (c) Siemens AG, 2013
7 * Jan Kiszka <jan.kiszka@siemens.com>
9 * This work is licensed under the terms of the GNU GPL, version 2. See
10 * the COPYING file in the top-level directory.
15 #define X86_CR0_PE 0x00000001
16 #define X86_CR0_WP 0x00010000
17 #define X86_CR0_PG 0x80000000
19 #define X86_CR4_PAE 0x00000020
21 #define MSR_EFER 0xc0000080
22 #define EFER_LME 0x00000100
24 #define MSR_MTRR_DEF_TYPE 0x000002ff
25 #define MTRR_ENABLE 0x00000800
28 .section ".boot", "ax"
35 .section ".startup", "ax"
44 ljmpl $INMATE_CS32,$start32 + FSEGMENT_BASE
53 mov $pml4 + FSEGMENT_BASE,%eax
56 movl $MSR_MTRR_DEF_TYPE,%ecx
66 mov $(X86_CR0_PG | X86_CR0_WP | X86_CR0_PE),%eax
69 ljmpl $INMATE_CS64,$start64 + FSEGMENT_BASE
79 lock xadd %edi,cpu_number + FSEGMENT_BASE
81 cmp $SMP_MAX_CPUS,%edi
87 mov %bl,smp_cpu_ids(%edi)
89 lock incl smp_num_cpus
122 .fill SMP_MAX_CPUS, 1, 0
132 .quad 0x00c09b000000ffff
133 .quad 0x00af9b000000ffff
136 .short gdt_ptr - gdt - 1
137 .long gdt + FSEGMENT_BASE
141 .quad pdpt + FSEGMENT_BASE + 0x003
145 .quad pd + FSEGMENT_BASE + 0x003
149 .quad 0x0000000000000083