summaryrefslogtreecommitdiff
path: root/kernel/entry.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/entry.c')
-rwxr-xr-x[-rw-r--r--]kernel/entry.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/kernel/entry.c b/kernel/entry.c
index 0b22ee7..19a711c 100644..100755
--- a/kernel/entry.c
+++ b/kernel/entry.c
@@ -24,30 +24,30 @@ void entry_main(uint32_t mb_magic, multiboot_info_t* mb_info) {
// Create initial page tables.
for(unsigned int i = 0; i < 1024; i++) {
// Clear page directory.
- entry_pagedir[i] = 0;
+ entry_map_p2[i] = 0;
// Identity mapping of the current code.
- entry_pagetable_low[i] = ((uint32_t)&addr_phys & 0xffc00000) | (i << 12) | P1_P | P1_W;
+ entry_map_p1[0][i] = ((uint32_t)&addr_phys & 0xffc00000) | (i << 12) | P1_P | P1_W;
// Map kernelspace.
if((i << 12) < ((uint32_t)&addr_virt_end & 0x003fffff)) {
- entry_pagetable_high[i] = ((uint32_t)&addr_load_virt + (i << 12)) | P1_P | P1_W | P1_G;
+ entry_map_p1[1][i] = ((uint32_t)&addr_load_virt + (i << 12)) | P1_P | P1_W | P1_G;
} else {
- entry_pagetable_high[i] = 0;
+ entry_map_p1[1][i] = 0;
}
}
- entry_pagetable_high[((uint32_t)&multiboot_info & 0x003ff000) >> 12] = (uint32_t)&entry_multiboot | P1_P | P1_W | P1_G;
+ entry_map_p1[1][((uint32_t)&multiboot_info & 0x003ff000) >> 12] = (uint32_t)&entry_multiboot_info | P1_P | P1_W | P1_G;
- entry_pagedir[(uint32_t)&addr_phys >> 22] = (uint32_t)&entry_pagetable_low | P2_P | P2_W;
- entry_pagedir[(uint32_t)&addr_virt >> 22] = (uint32_t)&entry_pagetable_high | P2_P | P2_W | P2_G;
+ entry_map_p2[(uint32_t)&addr_phys >> 22] = (uint32_t)&entry_map_p1[0] | P2_P | P2_W;
+ entry_map_p2[(uint32_t)&addr_virt >> 22] = (uint32_t)&entry_map_p1[1] | P2_P | P2_W | P2_G;
// Map map_p1.
- entry_pagedir[1022] = (uint32_t)&entry_pagedir | P2_P | P2_W | P2_G;
+ entry_map_p2[1022] = (uint32_t)&entry_map_p2 | P2_P | P2_W | P2_G;
// Mapping stack to top without creating another page directory.
- entry_pagetable_low[1023] = (uint32_t)&entry_stack | P1_P | P1_W | P1_G;
- entry_pagedir[1023] = (uint32_t)&entry_pagetable_low | P2_P | P2_W | P2_G;
+ entry_map_p1[0][1023] = (uint32_t)&entry_stack | P1_P | P1_W | P1_G;
+ entry_map_p2[1023] = (uint32_t)&entry_map_p1[0] | P2_P | P2_W | P2_G;
// Enable paging.
asm volatile(
@@ -55,7 +55,7 @@ void entry_main(uint32_t mb_magic, multiboot_info_t* mb_info) {
"mov %%cr0, %0\n"
"or $0x80000000, %0\n"
"mov %0, %%cr0\n"
- :: "r" (&entry_pagedir) : "%0"
+ :: "r" (&entry_map_p2) : "%0"
);
// TODO: Check that segments are loaded and mapped right.
@@ -90,25 +90,25 @@ unsigned int strcpy(char* source, char* target) {
void entry_copy_multiboot(multiboot_info_t* mb_info) {
// Copy multiboot structure.
- memcpy(mb_info, &entry_multiboot, sizeof(multiboot_info_t));
- uint32_t low_p = (uint32_t)&entry_multiboot + sizeof(multiboot_info_t);
+ memcpy(mb_info, &entry_multiboot_info, sizeof(multiboot_info_t));
+ uint32_t low_p = (uint32_t)&entry_multiboot_info + sizeof(multiboot_info_t);
uint32_t high_p = (uint32_t)&multiboot_info + sizeof(multiboot_info_t);
// Copy module structures.
memcpy(mb_info->mods_addr, low_p, mb_info->mods_count * sizeof(multiboot_module_t));
- entry_multiboot.mods_addr = (multiboot_module_t*)high_p;
+ entry_multiboot_info.mods_addr = (multiboot_module_t*)high_p;
multiboot_module_t* mods_addr = (multiboot_module_t*)low_p;
low_p += mb_info->mods_count * sizeof(multiboot_module_t);
high_p += mb_info->mods_count * sizeof(multiboot_module_t);
// Copy strings.
unsigned int s;
- s = strcpy(entry_multiboot.cmdline, (char*)low_p);
- entry_multiboot.cmdline = (char*)high_p;
+ s = strcpy(entry_multiboot_info.cmdline, (char*)low_p);
+ entry_multiboot_info.cmdline = (char*)high_p;
low_p += s;
high_p += s;
- for(unsigned int i = 0; i < entry_multiboot.mods_count; i++) {
+ for(unsigned int i = 0; i < entry_multiboot_info.mods_count; i++) {
s = strcpy(mods_addr[i].string, (char*)low_p);
mods_addr[i].string = (char*)high_p;
low_p += s;