Windows kernel is well-thought. Refactoring...

This commit is contained in:
hyperassembler 2015-10-13 21:19:49 -04:00
parent 3a217327c9
commit cce6d1558f
18 changed files with 133 additions and 118 deletions

View File

@ -2,7 +2,7 @@
#include "../sys/kdef.h"
#include "mem.h"
void NATIVE64 mem_copy(void *src, void *dst, uint64_t size)
void _KERNEL_ABI mem_copy(void *src, void *dst, uint64_t size)
{
if (src == NULL || dst == NULL)
return;
@ -13,7 +13,7 @@ void NATIVE64 mem_copy(void *src, void *dst, uint64_t size)
return;
}
void NATIVE64 mem_set(void *src, int8_t const val, uint64_t size)
void _KERNEL_ABI mem_set(void *src, int8_t const val, uint64_t size)
{
if (src == NULL)
return;
@ -22,7 +22,7 @@ void NATIVE64 mem_set(void *src, int8_t const val, uint64_t size)
return;
}
void NATIVE64 mem_move(void *src, void *dst, uint64_t size)
void _KERNEL_ABI mem_move(void *src, void *dst, uint64_t size)
{
if (src == NULL || dst == NULL)
return;

View File

@ -4,10 +4,10 @@
#include "../sys/type.h"
#include "../sys/kdef.h"
void NATIVE64 mem_copy(void *src, void *dst, uint64_t size);
void _KERNEL_ABI mem_copy(void *src, void *dst, uint64_t size);
void NATIVE64 mem_move(void *src, void *dst, uint64_t size);
void _KERNEL_ABI mem_move(void *src, void *dst, uint64_t size);
void NATIVE64 mem_set(void *src, int8_t const val, uint64_t size);
void _KERNEL_ABI mem_set(void *src, int8_t const val, uint64_t size);
#endif

View File

@ -1,6 +1,6 @@
#include "str.h"
uint64_t NATIVE64 str_len(char const *str)
uint64_t _KERNEL_ABI str_len(char const *str)
{
uint64_t length = 0;
if(str == NULL)
@ -13,7 +13,7 @@ uint64_t NATIVE64 str_len(char const *str)
return length;
}
uint64_t NATIVE64 str_cmp(char const *str1, char const *str2)
uint64_t _KERNEL_ABI str_cmp(char const *str1, char const *str2)
{
if(str1 == NULL || str2 == NULL)
return 0;

View File

@ -4,7 +4,7 @@
#include "../sys/kdef.h"
#include "../sys/type.h"
uint64_t NATIVE64 str_len(char const *str);
uint64_t NATIVE64 str_cmp(char const *str1, char const *str2);
uint64_t _KERNEL_ABI str_len(char const *str);
uint64_t _KERNEL_ABI str_cmp(char const *str1, char const *str2);
#endif

View File

@ -4,7 +4,7 @@
#include <stddef.h>
#include <stdarg.h>
#define NATIVE64 __attribute__((sysv_abi))
#define _KERNEL_ABI __attribute__((sysv_abi))
#define ALIGN_DOWN(val, alignment) (((val) / (alignment)) * (alignment))
@ -18,4 +18,14 @@
#define SEG_SELECTOR(Index,RPL) (((Index) << 3) + (RPL))
#define _IN_OPT
#define _OUT_OPT
#define _IN
#define _OUT
typedef enum {
KERNEL_STATUS_SUCCESS = 0,
KERNEL_STATUS_FAIL = 1
} kernel_status_t;
#endif

View File

@ -1,7 +1,7 @@
#include "../../../sys/kdef.h"
#include "linked_list.h"
void NATIVE64 linked_list_node_init(linked_list_node_t * node)
void _KERNEL_ABI linked_list_node_init(linked_list_node_t * node)
{
if(node != NULL)
{
@ -11,7 +11,7 @@ void NATIVE64 linked_list_node_init(linked_list_node_t * node)
return;
}
linked_list_node_t * NATIVE64 linked_list_node_get(linked_list_node_t * head, int index)
linked_list_node_t *_KERNEL_ABI linked_list_node_get(linked_list_node_t * head, int index)
{
if(head == NULL || index < 0)
return NULL;
@ -24,7 +24,7 @@ linked_list_node_t * NATIVE64 linked_list_node_get(linked_list_node_t * head, in
return head;
}
int NATIVE64 linked_list_node_size(linked_list_node_t * head)
int _KERNEL_ABI linked_list_node_size(linked_list_node_t * head)
{
int i = 0;
while(head != NULL)
@ -36,7 +36,7 @@ int NATIVE64 linked_list_node_size(linked_list_node_t * head)
}
//returns new head
linked_list_node_t * NATIVE64 linked_list_node_insert(linked_list_node_t * head, int index, linked_list_node_t * node)
linked_list_node_t *_KERNEL_ABI linked_list_node_insert(linked_list_node_t * head, int index, linked_list_node_t * node)
{
if(head == NULL)
return node;
@ -65,7 +65,7 @@ linked_list_node_t * NATIVE64 linked_list_node_insert(linked_list_node_t * head,
}
}
void NATIVE64 linked_list_node_add(linked_list_node_t * head, linked_list_node_t * node)
void _KERNEL_ABI linked_list_node_add(linked_list_node_t * head, linked_list_node_t * node)
{
if(head == NULL || node == NULL)
return;
@ -75,7 +75,7 @@ void NATIVE64 linked_list_node_add(linked_list_node_t * head, linked_list_node_t
}
//returns new head
linked_list_node_t * NATIVE64 linked_list_node_remove(linked_list_node_t *head, int index)
linked_list_node_t *_KERNEL_ABI linked_list_node_remove(linked_list_node_t *head, int index)
{
if(head == NULL || index < 0)
return head;
@ -102,7 +102,7 @@ linked_list_node_t * NATIVE64 linked_list_node_remove(linked_list_node_t *head,
}
void NATIVE64 linked_list_init(linked_list_t * list)
void _KERNEL_ABI linked_list_init(linked_list_t * list)
{
if(list != NULL)
{
@ -112,7 +112,7 @@ void NATIVE64 linked_list_init(linked_list_t * list)
return;
}
void NATIVE64 linked_list_add(linked_list_t * list, linked_list_node_t * node)
void _KERNEL_ABI linked_list_add(linked_list_t * list, linked_list_node_t * node)
{
if(list != NULL && node != NULL)
{
@ -128,7 +128,7 @@ void NATIVE64 linked_list_add(linked_list_t * list, linked_list_node_t * node)
return;
}
void NATIVE64 linked_list_insert(linked_list_t * list, int index, linked_list_node_t * node)
void _KERNEL_ABI linked_list_insert(linked_list_t * list, int index, linked_list_node_t * node)
{
if(list != NULL && index > 0 && node != NULL)
{
@ -138,14 +138,14 @@ void NATIVE64 linked_list_insert(linked_list_t * list, int index, linked_list_no
return;
}
linked_list_node_t * NATIVE64 linked_list_get(linked_list_t * list, int index)
linked_list_node_t *_KERNEL_ABI linked_list_get(linked_list_t * list, int index)
{
if(list == NULL || index < 0 || index >= list->size)
return NULL;
return linked_list_node_get(list->head,index);
}
void NATIVE64 linked_list_remove(linked_list_t *list, int index)
void _KERNEL_ABI linked_list_remove(linked_list_t *list, int index)
{
if(list != NULL && index >= 0 && index < list->size)
{

View File

@ -13,26 +13,26 @@ typedef struct
int size;
} linked_list_t;
void NATIVE64 linked_list_init(linked_list_t * list);
void _KERNEL_ABI linked_list_init(linked_list_t * list);
void NATIVE64 linked_list_add(linked_list_t * list, linked_list_node_t * node);
void _KERNEL_ABI linked_list_add(linked_list_t * list, linked_list_node_t * node);
void NATIVE64 linked_list_insert(linked_list_t * list, int index, linked_list_node_t * node);
void _KERNEL_ABI linked_list_insert(linked_list_t * list, int index, linked_list_node_t * node);
linked_list_node_t * NATIVE64 linked_list_get(linked_list_t * list, int index);
linked_list_node_t *_KERNEL_ABI linked_list_get(linked_list_t * list, int index);
void NATIVE64 linked_list_remove(linked_list_t *list, int index);
void _KERNEL_ABI linked_list_remove(linked_list_t *list, int index);
int NATIVE64 linked_list_node_size(linked_list_node_t * head);
int _KERNEL_ABI linked_list_node_size(linked_list_node_t * head);
void NATIVE64 linked_list_node_init(linked_list_node_t * node);
void _KERNEL_ABI linked_list_node_init(linked_list_node_t * node);
void NATIVE64 linked_list_node_add(linked_list_node_t * head, linked_list_node_t * node);
void _KERNEL_ABI linked_list_node_add(linked_list_node_t * head, linked_list_node_t * node);
linked_list_node_t * NATIVE64 linked_list_node_insert(linked_list_node_t * head, int index, linked_list_node_t * node);
linked_list_node_t *_KERNEL_ABI linked_list_node_insert(linked_list_node_t * head, int index, linked_list_node_t * node);
linked_list_node_t * NATIVE64 linked_list_node_get(linked_list_node_t * head, int index);
linked_list_node_t *_KERNEL_ABI linked_list_node_get(linked_list_node_t * head, int index);
linked_list_node_t * NATIVE64 linked_list_node_remove(linked_list_node_t *head, int index);
linked_list_node_t *_KERNEL_ABI linked_list_node_remove(linked_list_node_t *head, int index);
#endif

View File

@ -3,19 +3,19 @@
#define MAX(a, b) (((a) > (b) ? (a) : (b)))
int NATIVE64 _avl_tree_node_get_height(avl_tree_node_t *node)
int _KERNEL_ABI _avl_tree_node_get_height(avl_tree_node_t *node)
{
return node == NULL ? -1 : node->height;
}
int NATIVE64 _avl_tree_node_get_balance_factor(avl_tree_node_t *node)
int _KERNEL_ABI _avl_tree_node_get_balance_factor(avl_tree_node_t *node)
{
if (node == NULL)
return 0;
return _avl_tree_node_get_height(node->left) - _avl_tree_node_get_height(node->right);
}
avl_tree_node_t * NATIVE64 _avl_tree_node_right_rotate(avl_tree_node_t *root)
avl_tree_node_t *_KERNEL_ABI _avl_tree_node_right_rotate(avl_tree_node_t *root)
{
avl_tree_node_t *left_children = root->left;
//adjust parents first
@ -32,7 +32,7 @@ avl_tree_node_t * NATIVE64 _avl_tree_node_right_rotate(avl_tree_node_t *root)
return left_children;
}
avl_tree_node_t * NATIVE64 _avl_tree_node_left_rotate(avl_tree_node_t *root)
avl_tree_node_t *_KERNEL_ABI _avl_tree_node_left_rotate(avl_tree_node_t *root)
{
avl_tree_node_t *right_children = root->right;
//adjust parents
@ -49,7 +49,7 @@ avl_tree_node_t * NATIVE64 _avl_tree_node_left_rotate(avl_tree_node_t *root)
return right_children;
}
avl_tree_node_t * NATIVE64 _avl_tree_node_balance(avl_tree_node_t *node)
avl_tree_node_t *_KERNEL_ABI _avl_tree_node_balance(avl_tree_node_t *node)
{
const int bf = _avl_tree_node_get_balance_factor(node);
@ -86,7 +86,7 @@ avl_tree_node_t * NATIVE64 _avl_tree_node_balance(avl_tree_node_t *node)
}
avl_tree_node_t * NATIVE64 _avl_tree_node_insert(avl_tree_node_t *root, avl_tree_node_t *node, int(*compare)(void *, void *), avl_tree_node_t *parent)
avl_tree_node_t *_KERNEL_ABI _avl_tree_node_insert(avl_tree_node_t *root, avl_tree_node_t *node, int(*compare)(void *, void *), avl_tree_node_t *parent)
{
if (node == NULL)
return root;
@ -232,12 +232,12 @@ void _avl_tree_swap_nodes(avl_tree_node_t *node1, avl_tree_node_t *node2)
}
//Interface
avl_tree_node_t * NATIVE64 avl_tree_node_insert(avl_tree_node_t * root, avl_tree_node_t * node, int(*compare)(void*,void*))
avl_tree_node_t *_KERNEL_ABI avl_tree_node_insert(avl_tree_node_t * root, avl_tree_node_t * node, int(*compare)(void*, void*))
{
return _avl_tree_node_insert(root, node, compare, NULL);
}
avl_tree_node_t * NATIVE64 avl_tree_node_delete(avl_tree_node_t * root, avl_tree_node_t * node, int (*compare)(void *, void *))
avl_tree_node_t *_KERNEL_ABI avl_tree_node_delete(avl_tree_node_t * root, avl_tree_node_t * node, int (*compare)(void *, void *))
{
if (root == NULL || node == NULL)
return root;
@ -286,7 +286,7 @@ avl_tree_node_t * NATIVE64 avl_tree_node_delete(avl_tree_node_t * root, avl_tree
return root;
}
avl_tree_node_t * NATIVE64 avl_tree_node_search(avl_tree_node_t *root, avl_tree_node_t * node, int(*compare)(void *, void *))
avl_tree_node_t *_KERNEL_ABI avl_tree_node_search(avl_tree_node_t *root, avl_tree_node_t * node, int(*compare)(void *, void *))
{
if(root == NULL)
return NULL;
@ -299,7 +299,7 @@ avl_tree_node_t * NATIVE64 avl_tree_node_search(avl_tree_node_t *root, avl_tree_
return avl_tree_node_search(root->left, node, compare);
}
void NATIVE64 avl_tree_node_init(avl_tree_node_t * it)
void _KERNEL_ABI avl_tree_node_init(avl_tree_node_t * it)
{
if(it != NULL)
{
@ -312,7 +312,7 @@ void NATIVE64 avl_tree_node_init(avl_tree_node_t * it)
}
avl_tree_node_t * NATIVE64 avl_tree_node_smallest(avl_tree_node_t *root)
avl_tree_node_t *_KERNEL_ABI avl_tree_node_smallest(avl_tree_node_t *root)
{
if (root == NULL)
return NULL;
@ -321,7 +321,7 @@ avl_tree_node_t * NATIVE64 avl_tree_node_smallest(avl_tree_node_t *root)
return root;
}
avl_tree_node_t * NATIVE64 avl_tree_node_largest(avl_tree_node_t *root)
avl_tree_node_t *_KERNEL_ABI avl_tree_node_largest(avl_tree_node_t *root)
{
if (root == NULL)
return NULL;
@ -331,7 +331,7 @@ avl_tree_node_t * NATIVE64 avl_tree_node_largest(avl_tree_node_t *root)
}
avl_tree_node_t * NATIVE64 avl_tree_node_next(avl_tree_node_t *it)
avl_tree_node_t *_KERNEL_ABI avl_tree_node_next(avl_tree_node_t *it)
{
if (it == NULL)
return NULL;
@ -355,7 +355,7 @@ avl_tree_node_t * NATIVE64 avl_tree_node_next(avl_tree_node_t *it)
}
}
avl_tree_node_t * NATIVE64 avl_tree_node_prev(avl_tree_node_t *it)
avl_tree_node_t *_KERNEL_ABI avl_tree_node_prev(avl_tree_node_t *it)
{
if (it == NULL)
return NULL;
@ -385,7 +385,7 @@ avl_tree_node_t * avl_tree_search(avl_tree_t *tree, avl_tree_node_t * node, int
}
void NATIVE64 avl_tree_insert(avl_tree_t *tree, void *data, int (*compare)(void *, void *))
void _KERNEL_ABI avl_tree_insert(avl_tree_t *tree, void *data, int (*compare)(void *, void *))
{
if(tree != NULL && data != NULL && compare != NULL)
{
@ -398,7 +398,7 @@ void NATIVE64 avl_tree_insert(avl_tree_t *tree, void *data, int (*compare)(void
return;
}
void NATIVE64 avl_tree_delete(avl_tree_t *tree, void *data, int (*compare)(void *, void *))
void _KERNEL_ABI avl_tree_delete(avl_tree_t *tree, void *data, int (*compare)(void *, void *))
{
if(tree != NULL && data != NULL && compare != NULL && tree->size != 0)
{
@ -411,7 +411,7 @@ void NATIVE64 avl_tree_delete(avl_tree_t *tree, void *data, int (*compare)(void
return;
}
void NATIVE64 avl_tree_init(avl_tree_t * tree)
void _KERNEL_ABI avl_tree_init(avl_tree_t * tree)
{
if(tree != NULL)
{
@ -422,14 +422,14 @@ void NATIVE64 avl_tree_init(avl_tree_t * tree)
}
// TESTS
int NATIVE64 avl_tree_node_calculate_height(avl_tree_node_t *tree)
int _KERNEL_ABI avl_tree_node_calculate_height(avl_tree_node_t *tree)
{
if (tree == NULL)
return -1;
return MAX(avl_tree_node_calculate_height(tree->left), avl_tree_node_calculate_height(tree->right)) + 1;
}
int NATIVE64 avl_tree_node_test(avl_tree_node_t *tree, int (*compare)(void*,void*))
int _KERNEL_ABI avl_tree_node_test(avl_tree_node_t *tree, int (*compare)(void*, void*))
{
if (tree == NULL)
return 1;

View File

@ -16,36 +16,36 @@ typedef struct
int size;
} avl_tree_t;
avl_tree_node_t * NATIVE64 avl_tree_node_insert(avl_tree_node_t * root, avl_tree_node_t * node, int(*compare)(void*,void*));
avl_tree_node_t *_KERNEL_ABI avl_tree_node_insert(avl_tree_node_t * root, avl_tree_node_t * node, int(*compare)(void*, void*));
avl_tree_node_t * NATIVE64 avl_tree_node_delete(avl_tree_node_t * root, avl_tree_node_t * node, int (*compare)(void *, void *));
avl_tree_node_t *_KERNEL_ABI avl_tree_node_delete(avl_tree_node_t * root, avl_tree_node_t * node, int (*compare)(void *, void *));
avl_tree_node_t * NATIVE64 avl_tree_node_search(avl_tree_node_t *root, avl_tree_node_t * node, int(*compare)(void *, void *));
avl_tree_node_t *_KERNEL_ABI avl_tree_node_search(avl_tree_node_t *root, avl_tree_node_t * node, int(*compare)(void *, void *));
void NATIVE64 avl_tree_node_init(avl_tree_node_t * it);
void _KERNEL_ABI avl_tree_node_init(avl_tree_node_t * it);
avl_tree_node_t * NATIVE64 avl_tree_node_next(avl_tree_node_t *it);
avl_tree_node_t *_KERNEL_ABI avl_tree_node_next(avl_tree_node_t *it);
avl_tree_node_t * NATIVE64 avl_tree_node_prev(avl_tree_node_t *it);
avl_tree_node_t *_KERNEL_ABI avl_tree_node_prev(avl_tree_node_t *it);
avl_tree_node_t * NATIVE64 avl_tree_node_smallest(avl_tree_node_t *root);
avl_tree_node_t *_KERNEL_ABI avl_tree_node_smallest(avl_tree_node_t *root);
avl_tree_node_t * NATIVE64 avl_tree_node_largest(avl_tree_node_t *root);
avl_tree_node_t *_KERNEL_ABI avl_tree_node_largest(avl_tree_node_t *root);
avl_tree_node_t * avl_tree_search(avl_tree_t *tree, avl_tree_node_t * node, int (*compare)(void *, void *));
void NATIVE64 avl_tree_insert(avl_tree_t *tree, void *data, int (*compare)(void *, void *));
void _KERNEL_ABI avl_tree_insert(avl_tree_t *tree, void *data, int (*compare)(void *, void *));
void NATIVE64 avl_tree_delete(avl_tree_t *tree, void *data, int (*compare)(void *, void *));
void _KERNEL_ABI avl_tree_delete(avl_tree_t *tree, void *data, int (*compare)(void *, void *));
void NATIVE64 avl_tree_init(avl_tree_t * tree);
void _KERNEL_ABI avl_tree_init(avl_tree_t * tree);
// TESTS
int NATIVE64 avl_tree_node_calculate_height(avl_tree_node_t *tree);
int _KERNEL_ABI avl_tree_node_calculate_height(avl_tree_node_t *tree);
int NATIVE64 avl_tree_node_test(avl_tree_node_t *tree, int(*compare)(void *, void *));
int _KERNEL_ABI avl_tree_node_test(avl_tree_node_t *tree, int(*compare)(void *, void *));
#endif

View File

@ -7,7 +7,7 @@
#include "../common/lib/mem.h"
#include "../common/sys/sys_info.h"
boot_info_t* NATIVE64 hal_init(multiboot_info_t* m_info)
boot_info_t*_KERNEL_ABI hal_init(multiboot_info_t* m_info)
{
text_pos = get_pos(0, 0);

View File

@ -6,17 +6,17 @@
#include "../common/sys/sys_info.h"
//concurrency
extern void NATIVE64 hal_spin_lock(uint32_t * lock);
extern void NATIVE64 hal_spin_unlock(uint32_t * lock);
extern void _KERNEL_ABI hal_spin_lock(uint32_t * lock);
extern void _KERNEL_ABI hal_spin_unlock(uint32_t * lock);
// loaded kernel addr
extern char kernel_start[];
extern char kernel_end[];
//hal
boot_info_t* NATIVE64 hal_init(multiboot_info_t* m_info);
boot_info_t*_KERNEL_ABI hal_init(multiboot_info_t* m_info);
//debug
extern void NATIVE64 BOCHS_MAGIC_BREAKPOINT();
extern void _KERNEL_ABI BOCHS_MAGIC_BREAKPOINT();
#endif

View File

@ -8,7 +8,10 @@ void hal_interrupt_handler_dummy(void)
}
void NATIVE64 hal_write_gate(void *const gate, uint64_t const offset, uint32_t const selector, uint32_t const attr)
kernel_status_t _KERNEL_ABI hal_write_gate(_IN void *const gate,
_IN uint64_t const offset,
_IN uint32_t const selector,
_IN uint32_t const attr)
{
((uint8_t*)gate)[0] = (uint8_t)(offset & 0xFF);
((uint8_t*)gate)[1] = (uint8_t)((offset >> 8) & 0xFF);
@ -26,21 +29,23 @@ void NATIVE64 hal_write_gate(void *const gate, uint64_t const offset, uint32_t c
((uint8_t*)gate)[13] = 0;
((uint8_t*)gate)[14] = 0;
((uint8_t*)gate)[15] = 0;
return;
return KERNEL_STATUS_SUCCESS;
}
void NATIVE64 hal_set_interrupt_handler(uint64_t index, void (*handler)(void))
kernel_status_t _KERNEL_ABI hal_set_interrupt_handler(_IN uint64_t index,
_IN void (*handler)(void))
{
hal_write_gate(g_idt + 16*index, (uint64_t)handler, SEG_SELECTOR(1,0), GATE_DPL_0 | GATE_PRESENT | GATE_TYPE_INTERRUPT);
return;
return KERNEL_STATUS_SUCCESS;
}
void NATIVE64 hal_assert(int64_t expression, char* message)
kernel_status_t _KERNEL_ABI hal_assert(_IN int64_t expression,
_IN_OPT char* message)
{
if(!expression)
{
hal_printf("HAL: Assertion failed. Detail: %s", message == NULL ? "NULL" : message);
hal_halt_cpu();
}
return;
return KERNEL_STATUS_SUCCESS;
}

View File

@ -12,20 +12,20 @@
#define GATE_TYPE_INTERRUPT (14ull << 8)
#define GATE_TYPE_TRAP (15ull << 8)
extern void NATIVE64 hal_write_port(uint64_t port, int64_t data);
extern int64_t NATIVE64 hal_read_port(uint64_t port);
void NATIVE64 hal_interrupt_handler_dummy();
extern void _KERNEL_ABI hal_write_port(uint64_t port, int64_t data);
extern int64_t _KERNEL_ABI hal_read_port(uint64_t port);
void _KERNEL_ABI hal_interrupt_handler_dummy();
void NATIVE64 hal_set_interrupt_handler(uint64_t index, void (*handler)());
extern void NATIVE64 hal_enable_interrupt();
extern void NATIVE64 hal_disable_interrupt();
extern void NATIVE64 hal_interrupt_handler_wrapper();
extern void NATIVE64 hal_halt_cpu();
kernel_status_t _KERNEL_ABI hal_set_interrupt_handler(uint64_t index, void (*handler)());
extern void _KERNEL_ABI hal_enable_interrupt();
extern void _KERNEL_ABI hal_disable_interrupt();
extern void _KERNEL_ABI hal_interrupt_handler_wrapper();
extern void _KERNEL_ABI hal_halt_cpu();
void NATIVE64 hal_write_gate(void *const gate, uint64_t const offset, uint32_t const selector, uint32_t const attr);
kernel_status_t _KERNEL_ABI hal_write_gate(void *const gate, uint64_t const offset, uint32_t const selector, uint32_t const attr);
//assert
void NATIVE64 hal_assert(int64_t exp, char* message);
kernel_status_t _KERNEL_ABI hal_assert(int64_t exp, char* message);
extern uint8_t g_idt[];
#endif

View File

@ -6,7 +6,7 @@
char* _cur_heap = NULL;
extern char kernel_heap[kernel_heap_size];
void NATIVE64 hal_write_pt_entry(void *const base, uint64_t const p_addr, uint64_t const attr)
void _KERNEL_ABI hal_write_pt_entry(void *const base, uint64_t const p_addr, uint64_t const attr)
{
if(base == NULL)
return;
@ -22,7 +22,7 @@ void NATIVE64 hal_write_pt_entry(void *const base, uint64_t const p_addr, uint64
return;
}
void NATIVE64 hal_write_pd_entry(void *const base, uint64_t const pt_addr, uint64_t const attr)
void _KERNEL_ABI hal_write_pd_entry(void *const base, uint64_t const pt_addr, uint64_t const attr)
{
if(base == NULL)
return;
@ -38,7 +38,7 @@ void NATIVE64 hal_write_pd_entry(void *const base, uint64_t const pt_addr, uint6
return;
}
void NATIVE64 hal_write_pdpt_entry(void *const base, uint64_t const pd_addr, uint64_t const attr)
void _KERNEL_ABI hal_write_pdpt_entry(void *const base, uint64_t const pd_addr, uint64_t const attr)
{
if(base == NULL)
return;
@ -54,7 +54,7 @@ void NATIVE64 hal_write_pdpt_entry(void *const base, uint64_t const pd_addr, uin
return;
}
void NATIVE64 hal_write_pml4_entry(void *const base, uint64_t const pdpt_addr, uint64_t const attr)
void _KERNEL_ABI hal_write_pml4_entry(void *const base, uint64_t const pdpt_addr, uint64_t const attr)
{
if(base == NULL)
return;
@ -70,7 +70,7 @@ void NATIVE64 hal_write_pml4_entry(void *const base, uint64_t const pdpt_addr, u
return;
}
void NATIVE64 hal_write_segment_descriptor(void *const gdt, uint32_t const base, uint32_t const limit, uint64_t const attr)
void _KERNEL_ABI hal_write_segment_descriptor(void *const gdt, uint32_t const base, uint32_t const limit, uint64_t const attr)
{
if (gdt == NULL)
return;
@ -86,13 +86,13 @@ void NATIVE64 hal_write_segment_descriptor(void *const gdt, uint32_t const base,
return;
}
void NATIVE64 hal_create_initial_page_table(void* const base, uint64_t size)
void _KERNEL_ABI hal_create_initial_page_table(void* const base, uint64_t size)
{
};
//uint64_t NATIVE64 hal_map_page(void* const base, uint64_t const p_addr, uint64_t const v_addr, uint64_t const flags)
//uint64_t _KERNEL_ABI hal_map_page(void* const base, uint64_t const p_addr, uint64_t const v_addr, uint64_t const flags)
//{
// // assume the initial page table has already been allocated
//
@ -134,7 +134,7 @@ void NATIVE64 hal_create_initial_page_table(void* const base, uint64_t size)
// return 0;
//}
void*NATIVE64 hal_halloc(size_t const size)
void*_KERNEL_ABI hal_halloc(size_t const size)
{
if(_cur_heap == NULL)
_cur_heap = kernel_heap;
@ -147,7 +147,7 @@ void*NATIVE64 hal_halloc(size_t const size)
return NULL;
}
void NATIVE64 hal_hfree(void *ptr)
void _KERNEL_ABI hal_hfree(void *ptr)
{
return;
}

View File

@ -86,30 +86,30 @@ typedef struct __attribute__((packed))
uint64_t edx;
} cpuid_t;
void*NATIVE64 hal_halloc(size_t const size);
void*_KERNEL_ABI hal_halloc(size_t const size);
void NATIVE64 hal_hfree(void *ptr);
void _KERNEL_ABI hal_hfree(void *ptr);
extern void NATIVE64 hal_flush_gdt(gdt_ptr_t *gdt_ptr, uint64_t code_slct, uint64_t data_slct);
extern void _KERNEL_ABI hal_flush_gdt(gdt_ptr_t *gdt_ptr, uint64_t code_slct, uint64_t data_slct);
extern void NATIVE64 hal_flush_tlb();
extern void _KERNEL_ABI hal_flush_tlb();
extern void NATIVE64 hal_cpuid(uint64_t * eax, uint64_t * ebx, uint64_t* ecx, uint64_t* edx);
extern void _KERNEL_ABI hal_cpuid(uint64_t * eax, uint64_t * ebx, uint64_t* ecx, uint64_t* edx);
extern void NATIVE64 hal_flush_idt(idt_ptr_t* idt_ptr);
extern void _KERNEL_ABI hal_flush_idt(idt_ptr_t* idt_ptr);
extern void NATIVE64 hal_write_page_base(void* base);
extern void _KERNEL_ABI hal_write_page_base(void* base);
extern void* NATIVE64 hal_read_page_base();
extern void*_KERNEL_ABI hal_read_page_base();
void NATIVE64 hal_write_segment_descriptor(void *const gdt, uint32_t const base, uint32_t const limit, uint64_t const attr);
void _KERNEL_ABI hal_write_segment_descriptor(void *const gdt, uint32_t const base, uint32_t const limit, uint64_t const attr);
void NATIVE64 hal_write_pml4_entry(void *const base, uint64_t const pdpt_addr, uint64_t const attr);
void _KERNEL_ABI hal_write_pml4_entry(void *const base, uint64_t const pdpt_addr, uint64_t const attr);
void NATIVE64 hal_write_pdpt_entry(void *const base, uint64_t const pd_addr, uint64_t const attr);
void _KERNEL_ABI hal_write_pdpt_entry(void *const base, uint64_t const pd_addr, uint64_t const attr);
void NATIVE64 hal_write_pd_entry(void *const base, uint64_t const pt_addr, uint64_t const attr);
void _KERNEL_ABI hal_write_pd_entry(void *const base, uint64_t const pt_addr, uint64_t const attr);
void NATIVE64 hal_write_pt_entry(void *const base, uint64_t const p_addr, uint64_t const attr);
void _KERNEL_ABI hal_write_pt_entry(void *const base, uint64_t const p_addr, uint64_t const attr);
#endif

View File

@ -4,13 +4,13 @@
#include "print.h"
#include "var.h"
void NATIVE64 _hal_print_scroll()
void _KERNEL_ABI _hal_print_scroll()
{
mem_move((void *) (0xb8000 + get_pos(1, 0) * 2), (void *) (0xb8000 + get_pos(0, 0) * 2), (80 * 24) * 2);
return;
}
void NATIVE64 _hal_print_str(char const *str)
void _KERNEL_ABI _hal_print_str(char const *str)
{
if(str == NULL)
return;
@ -45,7 +45,7 @@ void NATIVE64 _hal_print_str(char const *str)
return;
}
void NATIVE64 _hal_print_uint(uint64_t number)
void _KERNEL_ABI _hal_print_uint(uint64_t number)
{
char arr[21]; // do not need to initialize
arr[20] = 0; //zero-terminated
@ -64,7 +64,7 @@ void NATIVE64 _hal_print_uint(uint64_t number)
return;
}
void NATIVE64 _hal_print_int(int64_t number)
void _KERNEL_ABI _hal_print_int(int64_t number)
{
char arr[21]; // do not need to initialize
arr[20] = 0; //zero-terminated
@ -93,7 +93,7 @@ void NATIVE64 _hal_print_int(int64_t number)
return;
}
void NATIVE64 _hal_print_hex(uint64_t number, uint64_t capital)
void _KERNEL_ABI _hal_print_hex(uint64_t number, uint64_t capital)
{
char const lookup_table_cap[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
char const lookup_table[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
@ -115,14 +115,14 @@ void NATIVE64 _hal_print_hex(uint64_t number, uint64_t capital)
return;
}
void NATIVE64 hal_clear_screen(void)
void _KERNEL_ABI hal_clear_screen(void)
{
text_pos = 0; // reset text_pos
mem_set((void *) 0xb8000, 0, 25 * 80 * 2);
return;
}
void NATIVE64 hal_printf(char const *format, ...)
void _KERNEL_ABI hal_printf(char const *format, ...)
{
va_list args;
va_start(args, format);

View File

@ -7,7 +7,7 @@
#define get_row(pos) (pos / 80)
#define get_pos(row,col) ((row) * 80 + (col))
void NATIVE64 hal_clear_screen(void);
void NATIVE64 hal_printf(char const *format, ...);
void _KERNEL_ABI hal_clear_screen(void);
void _KERNEL_ABI hal_printf(char const *format, ...);
#endif

View File

@ -7,7 +7,7 @@
#include "../common/util/list/linked_list/linked_list.h"
void NATIVE64 kmain(multiboot_info_t *multiboot_info)
void _KERNEL_ABI kmain(multiboot_info_t *multiboot_info)
{
boot_info_t* boot_info = hal_init(multiboot_info);