1,5 → 1,6 |
# |
# Copyright (C) 2001-2004 Jakub Jermar |
# Copyright (C) 2005-2006 Martin Decky |
# All rights reserved. |
# |
# Redistribution and use in source and binary forms, with or without |
31,6 → 32,8 |
#include <arch/mm/page.h> |
#include <arch/pm.h> |
|
#define START_STACK (BOOT_OFFSET - BOOT_STACK_SIZE) |
|
.section K_TEXT_START, "ax" |
|
KTEXT=8 |
38,40 → 41,34 |
|
.code32 |
.align 4 |
.global multiboot_image_start |
multiboot_header: |
.long MULTIBOOT_HEADER_MAGIC |
.long MULTIBOOT_HEADER_FLAGS |
.long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) # checksum |
.long multiboot_header + BOOT_OFFSET |
.long unmapped_ktext_start + BOOT_OFFSET |
.long multiboot_header |
.long unmapped_ktext_start |
.long 0 |
.long 0 |
.long multiboot_image_start + BOOT_OFFSET |
.long multiboot_image_start |
|
multiboot_image_start: |
movl $BOOTSTRAP_OFFSET - 0x400, %esp # initialize stack pointer |
|
lgdt protected_bootstrap_gdtr - 0x80000000 # initialize Global Descriptor Table register |
movl $START_STACK, %esp # initialize stack pointer |
lgdt KA2PA(bootstrap_gdtr) # initialize Global Descriptor Table register |
|
movw $KDATA, %cx |
movw %cx, %es |
movw %cx, %gs |
movw %cx, %fs |
movw %cx, %ds # kernel data + stack |
movw %cx, %ds # kernel data + stack |
movw %cx, %ss |
|
jmpl $KTEXT, $multiboot_meeting_point + BOOT_OFFSET |
jmpl $KTEXT, $multiboot_meeting_point |
multiboot_meeting_point: |
|
pushl %ebx # save parameters from GRUB |
pushl %eax |
|
movl $BOOTSTRAP_OFFSET + BOOT_OFFSET, %esi |
movl $BOOTSTRAP_OFFSET, %edi |
movl $_hardcoded_unmapped_size, %ecx |
cld |
rep movsb |
|
call map_kernel # map kernel and turn paging on |
|
popl %eax |
170,7 → 167,19 |
|
invalid_boot: |
|
call main_bsp - BOOT_OFFSET # never returns |
#ifdef CONFIG_SMP |
|
# copy AP bootstrap routines below 1 MB |
|
movl $BOOT_OFFSET, %esi |
movl $AP_BOOT_OFFSET, %edi |
movl $_hardcoded_unmapped_size, %ecx |
cld |
rep movsb |
|
#endif |
|
call main_bsp # never returns |
|
cli |
hlt |
214,9 → 223,3 |
.align 4096 |
page_directory: |
.space 4096, 0 |
|
.global real_bootstrap_gdtr_boot |
real_bootstrap_gdtr_boot: |
.word selector(GDT_ITEMS) |
.long KA2PA(gdt)-BOOT_OFFSET |
|