diff --git a/kernel/mm/mm.cc b/kernel/mm/mm.cc index 68ce2f3..6dbc14c 100644 --- a/kernel/mm/mm.cc +++ b/kernel/mm/mm.cc @@ -8,8 +8,6 @@ static bool mm_use_virtual_offset; -extern "C" { - pagedirectory_t page_directory __attribute__ ((aligned (4096))); static mm_mem_range_t mm_mmap_entries[MM_MAX_MMAP_ENTRIES]; @@ -129,8 +127,10 @@ void mm_bootstrap() mm_use_virtual_offset = false; } -} /* extern "C" */ - +/************************************************************************** + * Map virtual_address to physical_address. * + * Both addresses should be page-aligned. * + *************************************************************************/ int mm_map(u32_t virtual_address, u32_t physical_address, u32_t user_mode, u32_t writable) { @@ -142,7 +142,7 @@ int mm_map(u32_t virtual_address, u32_t physical_address, u32_t page_table_address = mm_page_alloc(); if (page_table_address == 0) { - return 1; + return 0; } page_directory[directory_index] = page_table_address | 0x1 << 2 /* PTs can be user mode */ @@ -162,7 +162,7 @@ int mm_map(u32_t virtual_address, u32_t physical_address, | (writable & 0x1) << 1 | 0x1; /* present */ - return 0; + return 1; } /************************************************************************** diff --git a/kernel/mm/mm.h b/kernel/mm/mm.h index 03d08d9..626111e 100644 --- a/kernel/mm/mm.h +++ b/kernel/mm/mm.h @@ -6,10 +6,6 @@ #include "hos_defines.h" #include "multiboot.h" -#ifdef __cplusplus -extern "C" { -#endif - typedef u32_t pagedirectory_entry_t; #define NUM_PAGETABLE_ENTRIES (PAGE_SIZE / sizeof(pagedirectory_entry_t)) @@ -28,10 +24,6 @@ typedef struct void mm_record_mmap_entry(mb_mmap_t * mmap); void mm_bootstrap(); -#ifdef __cplusplus -} -#endif - int mm_map(u32_t virtual_address, u32_t physical_address, u32_t user_mode, u32_t writable);