2
* minimal bootstrap to set up flat 32-bit protected mode
15
pmode_stack_start = 0x10000
16
pmode_stack_shift = 16
17
pmode_stack_size = (1 << pmode_stack_shift)
30
ljmpl $8, $pmode + bstart
34
mov $(APIC_BASE + APIC_REG_IPI_VECTOR), %dx
36
movw $ap_switch_to_pmode, ipi_vec*4
40
mov $(APIC_BASE + APIC_REG_SIPI_ADDR), %dx
42
mov $(APIC_BASE + APIC_REG_NCPU), %dx
50
mov $(APIC_BASE + APIC_REG_SEND_SIPI), %dx
56
mov $(APIC_BASE + APIC_REG_SEND_IPI), %dx
59
cmp cpu_up_pmode, %esi
60
jne wait_for_cpu_pmode
68
mov $(APIC_BASE + APIC_REG_ID), %dx
85
ljmpl $8, $ap_pmode + bstart
95
mov $(APIC_BASE + APIC_REG_ID), %dx
97
mov %eax, cpu_up_pmode
98
shl $pmode_stack_shift, %eax
99
lea pmode_stack_start + pmode_stack_size(%eax), %esp
113
mov $pmode_stack_start + pmode_stack_size, %esp
123
.word gdt_end - gdt - 1
130
.quad 0x00cf9b000000ffff // flat 32-bit code segment
131
.quad 0x00cf93000000ffff // flat 32-bit data segment