From f412efdbfd9689123bf145c22d7ab0a0ad768b87 Mon Sep 17 00:00:00 2001 From: secXsQuared Date: Mon, 29 Aug 2016 13:06:57 -0400 Subject: [PATCH] hmmm? --- x64/src/hal/hal_intr.c | 2 -- x64/src/kernel/inc/k_pmm.h | 13 +++---------- x64/src/kernel/k_pmm.c | 31 +++++++++++++------------------ x64/src/kernel/k_vmm.c | 2 +- 4 files changed, 17 insertions(+), 31 deletions(-) diff --git a/x64/src/hal/hal_intr.c b/x64/src/hal/hal_intr.c index eb3eddc..663bdcf 100644 --- a/x64/src/hal/hal_intr.c +++ b/x64/src/hal/hal_intr.c @@ -3,13 +3,11 @@ * See COPYING under root for details */ -#include "k_bit_ops.h" #include "hal_arch.h" #include "hal_intr.h" #include "hal_print.h" #include "hal_mem.h" - static uint8_t _idts[HAL_CORE_COUNT][IDT_ENTRY_NUM*IDT_ENTRY_SIZE]; hal_idt_ptr_t _idt_ptrs[HAL_CORE_COUNT]; static k_intr_handler_t _intr_handler_table[HAL_CORE_COUNT][IDT_ENTRY_NUM]; diff --git a/x64/src/kernel/inc/k_pmm.h b/x64/src/kernel/inc/k_pmm.h index 78499a9..c829634 100644 --- a/x64/src/kernel/inc/k_pmm.h +++ b/x64/src/kernel/inc/k_pmm.h @@ -7,13 +7,6 @@ #include "s_pmm.h" #include "k_atomic.h" -#define PMM_STATUS_SUCCESS 0 -#define PMM_STATUS_CANNOT_ALLOC_NODE 1 -#define PMM_STATUS_PAGE_NOT_FOUND 2 -#define PMM_STATUS_INVALID_ARGUMENTS 3 -#define PMM_STATUS_INIT_UNALIGNED 4 -#define PMM_STATUS_NOT_ENOUGH_PAGE 5 - //#define PMM_PAGE_ATTR_FREE_BIT 0 //#define PMM_PAGE_ATTR_PAGED_BIT 1 // @@ -22,11 +15,11 @@ // uint32_t attr; //} k_physical_page_attr_t; -int32_t KAPI k_pmm_init(k_pmm_info_t *info); +k_status_t KAPI ke_pmm_init(k_pmm_info_t *info); -int32_t KAPI k_alloc_page(k_physical_addr_t *out); +k_status_t KAPI k_alloc_page(k_physical_addr_t *out); -int32_t KAPI k_free_page(k_physical_addr_t base); +k_status_t KAPI k_free_page(k_physical_addr_t base); // TODO: implement these somehow, i might just reserve the first 16MB for these int32_t KAPI k_alloc_contiguous_pages(uint64_t num_of_page, diff --git a/x64/src/kernel/k_pmm.c b/x64/src/kernel/k_pmm.c index caf1925..4c8f3a4 100644 --- a/x64/src/kernel/k_pmm.c +++ b/x64/src/kernel/k_pmm.c @@ -1,3 +1,5 @@ +#include +#include #include "k_alloc.h" #include "k_bug_check.h" #include "k_pmm.h" @@ -10,15 +12,10 @@ typedef struct //k_physical_page_attr_t attr; } k_physical_page_descriptor_t; -typedef struct -{ - k_avl_tree_t active_tree; - k_linked_list_t free_list; - k_spin_lock_t lock; - _Bool initialized; -} k_pmm_descriptor_t; - -static k_pmm_descriptor_t _pmm_desc; +static k_avl_tree_t active_tree; +static k_linked_list_t free_list; +static k_spin_lock_t lock; +static _Bool initialized; /* * A comparison function between tree_node and your_node @@ -27,7 +24,7 @@ static k_pmm_descriptor_t _pmm_desc; * = 0 if tree_node == your_node * > 0 if tree_node > your_node */ -static int32_t _avl_compare(k_avl_tree_node_t *tree_node, k_avl_tree_node_t *my_node) +static int32_t base_addr_compare(k_avl_tree_node_t *tree_node, k_avl_tree_node_t *my_node) { k_physical_addr_t tree_base = OBTAIN_STRUCT_ADDR(tree_node, k_physical_page_descriptor_t, @@ -43,7 +40,7 @@ static int32_t _avl_compare(k_avl_tree_node_t *tree_node, k_avl_tree_node_t *my_ return 0; } -int32_t KAPI k_pmm_init(k_pmm_info_t *info) +k_status_t KAPI ke_pmm_init(k_pmm_info_t *info) { if (info == NULL || desc == NULL || desc->initialized) { @@ -51,7 +48,7 @@ int32_t KAPI k_pmm_init(k_pmm_info_t *info) } ke_linked_list_init(&desc->free_list); - ke_avl_tree_init(&desc->active_tree, _avl_compare); + ke_avl_tree_init(&desc->active_tree, base_addr_compare); for (uint32_t i = 0; i < info->num_of_nodes; i++) { k_pmm_node_t *each_node = &info->nodes[i]; @@ -88,7 +85,7 @@ int32_t KAPI k_pmm_init(k_pmm_info_t *info) // potential callers of these, since timer/interrupts queue DPC, which might trigger // page fault (kernel heap), therefore, it must set IRQL to DISABLED -int32_t KAPI k_alloc_page(k_pmm_descriptor_t *desc, k_physical_addr_t *out) +k_status_t KAPI ke_alloc_page(k_pmm_descriptor_t *desc, k_physical_addr_t *out) { if (desc == NULL || !desc->initialized) return PMM_STATUS_INVALID_ARGUMENTS; @@ -105,8 +102,7 @@ int32_t KAPI k_alloc_page(k_pmm_descriptor_t *desc, k_physical_addr_t *out) free_list_node); ke_avl_tree_insert(&desc->active_tree, &page_info->avl_tree_node); *out = page_info->base; - } - else + } else { result = PMM_STATUS_NOT_ENOUGH_PAGE; } @@ -148,7 +144,7 @@ int32_t KAPI k_alloc_page(k_pmm_descriptor_t *desc, k_physical_addr_t *out) // return result; //} -int32_t KAPI k_free_page(k_pmm_descriptor_t* desc, k_physical_addr_t base) +k_status_t KAPI ke_free_page(k_pmm_descriptor_t *desc, k_physical_addr_t base) { if (desc == NULL || !desc->initialized) return PMM_STATUS_INVALID_ARGUMENTS; @@ -166,8 +162,7 @@ int32_t KAPI k_free_page(k_pmm_descriptor_t* desc, k_physical_addr_t base) { page_info = OBTAIN_STRUCT_ADDR(node, k_physical_page_descriptor_t, avl_tree_node); ke_linked_list_push_back(&desc->free_list, &page_info->free_list_node); - } - else + } else { result = PMM_STATUS_PAGE_NOT_FOUND; } diff --git a/x64/src/kernel/k_vmm.c b/x64/src/kernel/k_vmm.c index 5473ffa..dbc50dc 100644 --- a/x64/src/kernel/k_vmm.c +++ b/x64/src/kernel/k_vmm.c @@ -40,7 +40,7 @@ int32_t KAPI k_vmm_init(k_vmm_descriptor_t *desc) { return VMM_STATUS_INVALID_ARGUMENTS; } - ke_avl_tree_init(&desc->region_tree, _avl_compare); + ke_avl_tree_init(&desc->region_tree, base_addr_compare); return VMM_STATUS_SUCCESS; }