/SPARTAN/trunk/src/main/main.c |
---|
139,7 → 139,7 |
thread_t *t; |
the_initialize(THE); |
arch_pre_mm_init(); |
heap_init(config.base + hardcoded_ktext_size + hardcoded_kdata_size, CONFIG_HEAP_SIZE + heap_delta); |
frame_init(); |
/SPARTAN/trunk/arch/ia32/include/boot/boot.h |
---|
29,6 → 29,7 |
#ifndef __ia32_BOOT_H__ |
#define __ia32_BOOT_H__ |
#define BOOT_OFFSET 0x100000 |
#define MULTIBOOT_HEADER_MAGIC 0x1BADB002 |
#define MULTIBOOT_HEADER_FLAGS 0x00010003 |
/SPARTAN/trunk/arch/ia32/src/ia32.c |
---|
60,7 → 60,7 |
i8042_init(); /* a20 bit */ |
i8259_init(); /* PIC */ |
i8254_init(); /* hard clock */ |
trap_register(VECTOR_SYSCALL, syscall); |
#ifdef __SMP__ |
/SPARTAN/trunk/arch/ia32/src/boot/boot.S |
---|
42,20 → 42,21 |
# |
kernel_image_start: |
cli |
xorw %ax,%ax |
movw %ax,%ds |
movw %ax,%ss # initialize stack segment register |
movl $0x7c00,%esp # initialize stack pointer |
xorw %ax, %ax |
movw %ax, %ds |
movw %ax, %ss # initialize stack segment register |
movl $0x7c00, %esp # initialize stack pointer |
call memmap_arch_init |
lgdt gdtr # initialize Global Descriptor Table register |
movl %cr0,%eax |
orl $0x1,%eax |
movl %eax,%cr0 # switch to protected mode |
jmpl $8,$meeting_point |
movl %cr0, %eax |
orl $0x1, %eax |
movl %eax, %cr0 # switch to protected mode |
jmpl $8, $boot_image_start |
.code32 |
.align 4 |
multiboot_header: |
62,27 → 63,50 |
.long MULTIBOOT_HEADER_MAGIC |
.long MULTIBOOT_HEADER_FLAGS |
.long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) # checksum |
.long multiboot_header |
.long unmapped_ktext_start |
.long multiboot_header + BOOT_OFFSET |
.long unmapped_ktext_start + BOOT_OFFSET |
.long 0 |
.long 0 |
.long multiboot_image_start |
.long multiboot_image_start + BOOT_OFFSET |
boot_image_start: |
movw $16, %ax |
movw %ax, %es |
movw %ax, %gs |
movw %ax, %fs |
movw %ax, %ds # kernel data + stack |
movw %ax, %ss |
call map_kernel # map kernel and turn paging on |
movb $0xd1, %al # enable A20 using the keyboard controller |
outb %al, $0x64 |
movb $0xdf, %al |
outb %al, $0x60 |
movl $0x8000, %esi |
movl $0x8000 + BOOT_OFFSET, %edi |
movl $_hardcoded_kernel_size, %ecx |
cld |
rep movsb |
jmp protected |
multiboot_image_start: |
movl $0x7c00, %esp # initialize stack pointer |
lgdt gdtr |
meeting_point: |
movw $16,%ax |
movw %ax,%es |
movw %ax,%gs |
movw %ax,%fs |
movw %ax,%ds # kernel data + stack |
movw %ax,%ss |
movw $16, %ax |
movw %ax, %es |
movw %ax, %gs |
movw %ax, %fs |
movw %ax, %ds # kernel data + stack |
movw %ax, %ss |
call map_kernel # map kernel and turn paging on |
protected: |
call main_bsp # never returns |
cli |
/SPARTAN/trunk/arch/ia32/src/mm/frame.c |
---|
44,6 → 44,9 |
frame_region_not_free(0xa0000,0xff000); |
frame_region_not_free(0xfec00000,0xffffffff); |
/* This is a nasty hack, which should be fixed soon */ |
frame_region_not_free(0x9000, 0xa000); |
for (i=e820counter;i>0;i--) { |
if (e820table[i-1].type!=MEMMAP_MEMORY_AVAILABLE) { |
frame_region_not_free(e820table[i-1].base_address,e820table[i-1].size); |
/SPARTAN/trunk/arch/ia32/src/mm/page.c |
---|
37,6 → 37,7 |
#include <synch/spinlock.h> |
#include <debug.h> |
#include <memstr.h> |
#include <print.h> |
__address bootstrap_dba; |
50,7 → 51,7 |
memsetb(dba, PAGE_SIZE, 0); |
bootstrap_dba = dba; |
/* |
* Identity mapping for all frames. |
* PA2KA(identity) mapping for all frames. |
/SPARTAN/trunk/arch/ia32/src/drivers/i8042.c |
---|
36,15 → 36,10 |
/* |
* i8042 processor driver. |
* Its very essential function is enabling the A20. |
*/ |
void i8042_init(void) |
{ |
/* A20: deadly if not enabled */ |
outb(0x64,0xd1); |
outb(0x60,0xdf); |
trap_register(VECTOR_KBD, i8042_interrupt); |
} |
/SPARTAN/trunk/arch/ia32/_link.ld |
---|
22,7 → 22,7 |
unmapped_kdata_end = .; |
} |
.mapped (0x80000000+SIZEOF(.unmapped)+0x8000) : AT (0x8000+SIZEOF(.unmapped)) { |
.mapped (0x80100000+SIZEOF(.unmapped)+0x8000) : AT (0x8000+SIZEOF(.unmapped)) { |
ktext_start = .; |
*(.text); |
ktext_end = .; |
32,7 → 32,7 |
*(.rodata*); /* string literals */ |
*(COMMON); /* global variables */ |
hardcoded_load_address = .; |
LONG(0x80008000); |
LONG(0x80108000); |
hardcoded_ktext_size = .; |
LONG(ktext_end - ktext_start + (unmapped_ktext_end - unmapped_ktext_start)); |
hardcoded_kdata_size = .; |
41,4 → 41,7 |
*(K_DATA_END); |
kdata_end = .; |
} |
_hardcoded_kernel_size = (ktext_end - ktext_start) + (unmapped_ktext_end - unmapped_ktext_start) + (kdata_end - kdata_start) + (unmapped_kdata_end - unmapped_kdata_start); |
} |