Windows kernel is well-thought. Refactoring...
This commit is contained in:
parent
3a217327c9
commit
cce6d1558f
|
@ -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;
|
||||
|
|
|
@ -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
|
|
@ -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;
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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
|
|
@ -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;
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue