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