diff options
author | Raghuram Subramani <raghus2247@gmail.com> | 2025-01-10 13:23:44 -0500 |
---|---|---|
committer | Raghuram Subramani <raghus2247@gmail.com> | 2025-01-10 13:23:44 -0500 |
commit | 350eb7ff40a007992d28fe597002bc1a3f76e585 (patch) | |
tree | 080265effc0c705d74b5cd73a917abc2b5c718b7 | |
parent | 7ae57ec55f10967f591e10d30144610456985f9d (diff) |
virtual_mm: Implement load_page_directory()
-rw-r--r-- | kernel/CMakeLists.txt | 1 | ||||
-rw-r--r-- | kernel/include/mm/virtual_mm.h | 5 | ||||
-rw-r--r-- | kernel/mm/virtual_mm/virtual_mm.c | 6 |
3 files changed, 12 insertions, 0 deletions
diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index 8238a5a..204295d 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -87,3 +87,4 @@ set(CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_COMPILER} <CMAKE_C_LINK_FLAGS> <FLAGS> <L ) target_link_options(kernel PRIVATE ${LINKER_FLAGS}) +target_link_libraries(kernel PRIVATE gcc) diff --git a/kernel/include/mm/virtual_mm.h b/kernel/include/mm/virtual_mm.h index fa7f505..3f938d2 100644 --- a/kernel/include/mm/virtual_mm.h +++ b/kernel/include/mm/virtual_mm.h @@ -87,4 +87,9 @@ uint32_t *virtual_mm_lookup_table(uint32_t *page_table, uint32_t virtual_addr); uint32_t *virtual_mm_lookup_directory(uint32_t *page_directory, uint32_t virtual_addr); +/* + * Loads a given page directory into CR0 + */ +void virtual_mm_load_page_directory(uint32_t *page_directory); + #endif diff --git a/kernel/mm/virtual_mm/virtual_mm.c b/kernel/mm/virtual_mm/virtual_mm.c index e53ff2b..6350c11 100644 --- a/kernel/mm/virtual_mm/virtual_mm.c +++ b/kernel/mm/virtual_mm/virtual_mm.c @@ -71,3 +71,9 @@ virtual_mm_lookup_directory(uint32_t *page_directory, uint32_t virtual_addr) return NULL; } + +ALWAYS_INLINE void +virtual_mm_load_page_directory(uint32_t *page_directory) +{ + __asm__("movl %0, %%cr0" ::"r"(page_directory)); +} |