#include "kernel/kernel.h" /* configures the kernel */ /* sections */ #include #include "kernel/kernel.h" #include #include #include #include #include #include "archconst.h" #include "sconst.h" #include #include "arch_proto.h" /* K_STACK_SIZE */ #ifdef CONFIG_SMP #include "kernel/smp.h" #endif /* Selected 386 tss offsets. */ #define TSS3_S_SP0 4 IMPORT(copr_not_available_handler) IMPORT(params_size) IMPORT(params_offset) IMPORT(mon_ds) IMPORT(switch_to_user) IMPORT(multiboot_init) .text /*===========================================================================*/ /* MINIX */ /*===========================================================================*/ .global MINIX MINIX: /* this is the entry point for the MINIX kernel */ jmp multiboot_init /* Multiboot header here*/ .balign 8 #define MULTIBOOT_FLAGS (MULTIBOOT_HEADER_WANT_MEMORY | MULTIBOOT_HEADER_MODS_ALIGNED) multiboot_magic: .long MULTIBOOT_HEADER_MAGIC multiboot_flags: .long MULTIBOOT_FLAGS multiboot_checksum: .long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_FLAGS) .long 0 .long 0 .long 0 .long 0 .long 0 /* Video mode */ multiboot_mode_type: .long MULTIBOOT_VIDEO_MODE_EGA multiboot_width: .long MULTIBOOT_CONSOLE_COLS multiboot_height: .long MULTIBOOT_CONSOLE_LINES multiboot_depth: .long 0 multiboot_init: mov $load_stack_start, %esp /* make usable stack */ mov $0, %ebp push $0 /* set flags to known good state */ popf /* esp, clear nested task and int enable */ push $0 push %ebx /* multiboot information struct */ push %eax /* multiboot magic number */ call _C_LABEL(pre_init) /* Kernel is mapped high now and ready to go, with * the boot info pointer returnd in %eax. Set the * highly mapped stack, initialize it, push the boot * info pointer and jump to the highly mapped kernel. */ mov $k_initial_stktop, %esp push $0 /* Terminate stack */ push %eax call _C_LABEL(kmain) /* not reached */ hang: jmp hang .data load_stack: .space 4096 load_stack_start: