Space to Tab

This commit is contained in:
secXsQuared 2018-02-17 23:06:57 -05:00
parent 362f3d0ce8
commit 0988ae8baf
40 changed files with 3655 additions and 3171 deletions

View File

@ -9,7 +9,9 @@
static void KABI halp_obtain_cpu_info(boot_info_t *hal_info)
{
if (hal_info == NULL)
{
return;
}
uint32_t eax = 0, ebx = 0, ecx = 0, edx = 0;
hal_cpuid(&eax, &ebx, &ecx, &edx);
lb_mem_copy(&ebx, &hal_info->cpu_vd_str[0], sizeof(uint32_t));
@ -21,7 +23,9 @@ static void KABI halp_obtain_cpu_info(boot_info_t *hal_info)
status_t KABI hal_init(void *m_info)
{
if (m_info == NULL || (uint64_t) m_info & lb_bit_field_mask(0, 2))
{
return STATUS_FAIL;
}
// init HAL infrastructures
hal_print_init();

View File

@ -67,7 +67,9 @@ status_t KABI hal_write_initial_page_table(void* multiboot_info)
void KABI hal_write_pt(void *const base, uintptr_t const p_addr, uint64_t const attr)
{
if (base == NULL)
{
return;
}
uint64_t entry = (p_addr & 0xFFFFFFFFFF000) | attr;
((uint8_t *) base)[0] = (uint8_t) (entry & 0xFF);
((uint8_t *) base)[1] = (uint8_t) ((entry >> 8) & 0xFF);
@ -83,7 +85,9 @@ void KABI hal_write_pt(void *const base, uintptr_t const p_addr, uint64_t const
void KABI hal_write_pd(void *const base, uintptr_t const pt_addr, uint64_t const attr)
{
if (base == NULL)
{
return;
}
uint64_t entry = (pt_addr & 0xFFFFFFFFFF000) | attr;
((uint8_t *) base)[0] = (uint8_t) (entry & 0xFF);
((uint8_t *) base)[1] = (uint8_t) ((entry >> 8) & 0xFF);
@ -99,7 +103,9 @@ void KABI hal_write_pd(void *const base, uintptr_t const pt_addr, uint64_t const
void KABI hal_write_pdpt(void *const base, uintptr_t const pd_addr, uint64_t const attr)
{
if (base == NULL)
{
return;
}
uint64_t entry = (pd_addr & 0xFFFFFFFFFF000) | attr;
((uint8_t *) base)[0] = (uint8_t) (entry & 0xFF);
((uint8_t *) base)[1] = (uint8_t) ((entry >> 8) & 0xFF);
@ -115,7 +121,9 @@ void KABI hal_write_pdpt(void *const base, uintptr_t const pd_addr, uint64_t con
void KABI hal_write_pml4(void *const base, uintptr_t const pdpt_addr, uint64_t const attr)
{
if (base == NULL)
{
return;
}
uint64_t const entry = (pdpt_addr & 0xFFFFFFFFFF000) | attr;
((uint8_t *) base)[0] = (uint8_t) (entry & 0xFF);
((uint8_t *) base)[1] = (uint8_t) ((entry >> 8) & 0xFF);
@ -132,7 +140,9 @@ void KABI hal_write_segment_descriptor(void *const gdt, uint32_t const base, uin
uint64_t const attr)
{
if (gdt == NULL)
{
return;
}
uint64_t const seg_desc = (((uint64_t) base & 0xFFFF) << 16) | ((((uint64_t) base >> 16) & 0xFF) << 32) |
((((uint64_t) base >> 24) & 0xFF) << 56) | ((uint64_t) limit & 0xFFFF) |
((((uint64_t) limit >> 16) & 0xF) << 48) | attr;

View File

@ -23,7 +23,9 @@ static void KABI halp_print_scroll(void)
static void KABI halp_print_str(char const *str)
{
if (str == NULL)
{
return;
}
while (*str != 0)
{
if (*str == '\n')
@ -68,8 +70,10 @@ static void KABI halp_print_uint(uint64_t number)
number = quo;
arr[index--] = (char) ('0' + rmd);
if (number == 0)
{
break;
}
}
halp_print_str(&(arr[index + 1]));
return;
}
@ -93,8 +97,10 @@ static void KABI halp_print_int(int64_t number)
number = quo;
arr[index--] = (char) ('0' + rmd);
if (number == 0)
{
break;
}
}
if (isNegative)
{
arr[index--] = '-';
@ -119,8 +125,10 @@ static void KABI halp_print_hex(uint64_t number, uint64_t capital)
number = quo;
arr[index--] = look_up[rmd];
if (number == 0)
{
break;
}
}
halp_print_str(&(arr[index + 1]));
return;
}

View File

@ -65,6 +65,7 @@ extern void KABI hal_read_idt(hal_idt_ptr_t **idt_ptr);
* Control Register Operations
*/
#define MSR_IA32_APIC_BASE 0x1B
extern void KABI hal_read_msr(uint32_t *ecx, uint32_t *edx, uint32_t *eax);
extern void KABI hal_write_msr(uint32_t *ecx, uint32_t *edx, uint32_t *eax);
@ -78,5 +79,4 @@ extern void KABI hal_write_cr8(uint64_t pri);
extern uint64_t KABI hal_read_cr8(void);
#endif

View File

@ -43,264 +43,518 @@ int32_t KABI hal_interrupt_init(void);
* System exception Handlers
*/
extern void KABI hal_interrupt_handler_0(void);
extern void KABI hal_interrupt_handler_1(void);
extern void KABI hal_interrupt_handler_2(void);
extern void KABI hal_interrupt_handler_3(void);
extern void KABI hal_interrupt_handler_4(void);
extern void KABI hal_interrupt_handler_5(void);
extern void KABI hal_interrupt_handler_6(void);
extern void KABI hal_interrupt_handler_7(void);
extern void KABI hal_interrupt_handler_8(void);
extern void KABI hal_interrupt_handler_9(void);
extern void KABI hal_interrupt_handler_10(void);
extern void KABI hal_interrupt_handler_11(void);
extern void KABI hal_interrupt_handler_12(void);
extern void KABI hal_interrupt_handler_13(void);
extern void KABI hal_interrupt_handler_14(void);
extern void KABI hal_interrupt_handler_15(void);
extern void KABI hal_interrupt_handler_16(void);
extern void KABI hal_interrupt_handler_17(void);
extern void KABI hal_interrupt_handler_18(void);
extern void KABI hal_interrupt_handler_19(void);
extern void KABI hal_interrupt_handler_20(void);
extern void KABI hal_interrupt_handler_21(void);
extern void KABI hal_interrupt_handler_22(void);
extern void KABI hal_interrupt_handler_23(void);
extern void KABI hal_interrupt_handler_24(void);
extern void KABI hal_interrupt_handler_25(void);
extern void KABI hal_interrupt_handler_26(void);
extern void KABI hal_interrupt_handler_27(void);
extern void KABI hal_interrupt_handler_28(void);
extern void KABI hal_interrupt_handler_29(void);
extern void KABI hal_interrupt_handler_30(void);
extern void KABI hal_interrupt_handler_31(void);
/**
* Kernel defined interrupt handlers
*/
extern void KABI hal_interrupt_handler_32(void);
extern void KABI hal_interrupt_handler_33(void);
extern void KABI hal_interrupt_handler_34(void);
extern void KABI hal_interrupt_handler_35(void);
extern void KABI hal_interrupt_handler_36(void);
extern void KABI hal_interrupt_handler_37(void);
extern void KABI hal_interrupt_handler_38(void);
extern void KABI hal_interrupt_handler_39(void);
extern void KABI hal_interrupt_handler_40(void);
extern void KABI hal_interrupt_handler_41(void);
extern void KABI hal_interrupt_handler_42(void);
extern void KABI hal_interrupt_handler_43(void);
extern void KABI hal_interrupt_handler_44(void);
extern void KABI hal_interrupt_handler_45(void);
extern void KABI hal_interrupt_handler_46(void);
extern void KABI hal_interrupt_handler_47(void);
extern void KABI hal_interrupt_handler_48(void);
extern void KABI hal_interrupt_handler_49(void);
extern void KABI hal_interrupt_handler_50(void);
extern void KABI hal_interrupt_handler_51(void);
extern void KABI hal_interrupt_handler_52(void);
extern void KABI hal_interrupt_handler_53(void);
extern void KABI hal_interrupt_handler_54(void);
extern void KABI hal_interrupt_handler_55(void);
extern void KABI hal_interrupt_handler_56(void);
extern void KABI hal_interrupt_handler_57(void);
extern void KABI hal_interrupt_handler_58(void);
extern void KABI hal_interrupt_handler_59(void);
extern void KABI hal_interrupt_handler_60(void);
extern void KABI hal_interrupt_handler_61(void);
extern void KABI hal_interrupt_handler_62(void);
extern void KABI hal_interrupt_handler_63(void);
extern void KABI hal_interrupt_handler_64(void);
extern void KABI hal_interrupt_handler_65(void);
extern void KABI hal_interrupt_handler_66(void);
extern void KABI hal_interrupt_handler_67(void);
extern void KABI hal_interrupt_handler_68(void);
extern void KABI hal_interrupt_handler_69(void);
extern void KABI hal_interrupt_handler_70(void);
extern void KABI hal_interrupt_handler_71(void);
extern void KABI hal_interrupt_handler_72(void);
extern void KABI hal_interrupt_handler_73(void);
extern void KABI hal_interrupt_handler_74(void);
extern void KABI hal_interrupt_handler_75(void);
extern void KABI hal_interrupt_handler_76(void);
extern void KABI hal_interrupt_handler_77(void);
extern void KABI hal_interrupt_handler_78(void);
extern void KABI hal_interrupt_handler_79(void);
extern void KABI hal_interrupt_handler_80(void);
extern void KABI hal_interrupt_handler_81(void);
extern void KABI hal_interrupt_handler_82(void);
extern void KABI hal_interrupt_handler_83(void);
extern void KABI hal_interrupt_handler_84(void);
extern void KABI hal_interrupt_handler_85(void);
extern void KABI hal_interrupt_handler_86(void);
extern void KABI hal_interrupt_handler_87(void);
extern void KABI hal_interrupt_handler_88(void);
extern void KABI hal_interrupt_handler_89(void);
extern void KABI hal_interrupt_handler_90(void);
extern void KABI hal_interrupt_handler_91(void);
extern void KABI hal_interrupt_handler_92(void);
extern void KABI hal_interrupt_handler_93(void);
extern void KABI hal_interrupt_handler_94(void);
extern void KABI hal_interrupt_handler_95(void);
extern void KABI hal_interrupt_handler_96(void);
extern void KABI hal_interrupt_handler_97(void);
extern void KABI hal_interrupt_handler_98(void);
extern void KABI hal_interrupt_handler_99(void);
extern void KABI hal_interrupt_handler_100(void);
extern void KABI hal_interrupt_handler_101(void);
extern void KABI hal_interrupt_handler_102(void);
extern void KABI hal_interrupt_handler_103(void);
extern void KABI hal_interrupt_handler_104(void);
extern void KABI hal_interrupt_handler_105(void);
extern void KABI hal_interrupt_handler_106(void);
extern void KABI hal_interrupt_handler_107(void);
extern void KABI hal_interrupt_handler_108(void);
extern void KABI hal_interrupt_handler_109(void);
extern void KABI hal_interrupt_handler_110(void);
extern void KABI hal_interrupt_handler_111(void);
extern void KABI hal_interrupt_handler_112(void);
extern void KABI hal_interrupt_handler_113(void);
extern void KABI hal_interrupt_handler_114(void);
extern void KABI hal_interrupt_handler_115(void);
extern void KABI hal_interrupt_handler_116(void);
extern void KABI hal_interrupt_handler_117(void);
extern void KABI hal_interrupt_handler_118(void);
extern void KABI hal_interrupt_handler_119(void);
extern void KABI hal_interrupt_handler_120(void);
extern void KABI hal_interrupt_handler_121(void);
extern void KABI hal_interrupt_handler_122(void);
extern void KABI hal_interrupt_handler_123(void);
extern void KABI hal_interrupt_handler_124(void);
extern void KABI hal_interrupt_handler_125(void);
extern void KABI hal_interrupt_handler_126(void);
extern void KABI hal_interrupt_handler_127(void);
extern void KABI hal_interrupt_handler_128(void);
extern void KABI hal_interrupt_handler_129(void);
extern void KABI hal_interrupt_handler_130(void);
extern void KABI hal_interrupt_handler_131(void);
extern void KABI hal_interrupt_handler_132(void);
extern void KABI hal_interrupt_handler_133(void);
extern void KABI hal_interrupt_handler_134(void);
extern void KABI hal_interrupt_handler_135(void);
extern void KABI hal_interrupt_handler_136(void);
extern void KABI hal_interrupt_handler_137(void);
extern void KABI hal_interrupt_handler_138(void);
extern void KABI hal_interrupt_handler_139(void);
extern void KABI hal_interrupt_handler_140(void);
extern void KABI hal_interrupt_handler_141(void);
extern void KABI hal_interrupt_handler_142(void);
extern void KABI hal_interrupt_handler_143(void);
extern void KABI hal_interrupt_handler_144(void);
extern void KABI hal_interrupt_handler_145(void);
extern void KABI hal_interrupt_handler_146(void);
extern void KABI hal_interrupt_handler_147(void);
extern void KABI hal_interrupt_handler_148(void);
extern void KABI hal_interrupt_handler_149(void);
extern void KABI hal_interrupt_handler_150(void);
extern void KABI hal_interrupt_handler_151(void);
extern void KABI hal_interrupt_handler_152(void);
extern void KABI hal_interrupt_handler_153(void);
extern void KABI hal_interrupt_handler_154(void);
extern void KABI hal_interrupt_handler_155(void);
extern void KABI hal_interrupt_handler_156(void);
extern void KABI hal_interrupt_handler_157(void);
extern void KABI hal_interrupt_handler_158(void);
extern void KABI hal_interrupt_handler_159(void);
extern void KABI hal_interrupt_handler_160(void);
extern void KABI hal_interrupt_handler_161(void);
extern void KABI hal_interrupt_handler_162(void);
extern void KABI hal_interrupt_handler_163(void);
extern void KABI hal_interrupt_handler_164(void);
extern void KABI hal_interrupt_handler_165(void);
extern void KABI hal_interrupt_handler_166(void);
extern void KABI hal_interrupt_handler_167(void);
extern void KABI hal_interrupt_handler_168(void);
extern void KABI hal_interrupt_handler_169(void);
extern void KABI hal_interrupt_handler_170(void);
extern void KABI hal_interrupt_handler_171(void);
extern void KABI hal_interrupt_handler_172(void);
extern void KABI hal_interrupt_handler_173(void);
extern void KABI hal_interrupt_handler_174(void);
extern void KABI hal_interrupt_handler_175(void);
extern void KABI hal_interrupt_handler_176(void);
extern void KABI hal_interrupt_handler_177(void);
extern void KABI hal_interrupt_handler_178(void);
extern void KABI hal_interrupt_handler_179(void);
extern void KABI hal_interrupt_handler_180(void);
extern void KABI hal_interrupt_handler_181(void);
extern void KABI hal_interrupt_handler_182(void);
extern void KABI hal_interrupt_handler_183(void);
extern void KABI hal_interrupt_handler_184(void);
extern void KABI hal_interrupt_handler_185(void);
extern void KABI hal_interrupt_handler_186(void);
extern void KABI hal_interrupt_handler_187(void);
extern void KABI hal_interrupt_handler_188(void);
extern void KABI hal_interrupt_handler_189(void);
extern void KABI hal_interrupt_handler_190(void);
extern void KABI hal_interrupt_handler_191(void);
extern void KABI hal_interrupt_handler_192(void);
extern void KABI hal_interrupt_handler_193(void);
extern void KABI hal_interrupt_handler_194(void);
extern void KABI hal_interrupt_handler_195(void);
extern void KABI hal_interrupt_handler_196(void);
extern void KABI hal_interrupt_handler_197(void);
extern void KABI hal_interrupt_handler_198(void);
extern void KABI hal_interrupt_handler_199(void);
extern void KABI hal_interrupt_handler_200(void);
extern void KABI hal_interrupt_handler_201(void);
extern void KABI hal_interrupt_handler_202(void);
extern void KABI hal_interrupt_handler_203(void);
extern void KABI hal_interrupt_handler_204(void);
extern void KABI hal_interrupt_handler_205(void);
extern void KABI hal_interrupt_handler_206(void);
extern void KABI hal_interrupt_handler_207(void);
extern void KABI hal_interrupt_handler_208(void);
extern void KABI hal_interrupt_handler_209(void);
extern void KABI hal_interrupt_handler_210(void);
extern void KABI hal_interrupt_handler_211(void);
extern void KABI hal_interrupt_handler_212(void);
extern void KABI hal_interrupt_handler_213(void);
extern void KABI hal_interrupt_handler_214(void);
extern void KABI hal_interrupt_handler_215(void);
extern void KABI hal_interrupt_handler_216(void);
extern void KABI hal_interrupt_handler_217(void);
extern void KABI hal_interrupt_handler_218(void);
extern void KABI hal_interrupt_handler_219(void);
extern void KABI hal_interrupt_handler_220(void);
extern void KABI hal_interrupt_handler_221(void);
extern void KABI hal_interrupt_handler_222(void);
extern void KABI hal_interrupt_handler_223(void);
extern void KABI hal_interrupt_handler_224(void);
extern void KABI hal_interrupt_handler_225(void);
extern void KABI hal_interrupt_handler_226(void);
extern void KABI hal_interrupt_handler_227(void);
extern void KABI hal_interrupt_handler_228(void);
extern void KABI hal_interrupt_handler_229(void);
extern void KABI hal_interrupt_handler_230(void);
extern void KABI hal_interrupt_handler_231(void);
extern void KABI hal_interrupt_handler_232(void);
extern void KABI hal_interrupt_handler_233(void);
extern void KABI hal_interrupt_handler_234(void);
extern void KABI hal_interrupt_handler_235(void);
extern void KABI hal_interrupt_handler_236(void);
extern void KABI hal_interrupt_handler_237(void);
extern void KABI hal_interrupt_handler_238(void);
extern void KABI hal_interrupt_handler_239(void);
extern void KABI hal_interrupt_handler_240(void);
extern void KABI hal_interrupt_handler_241(void);
extern void KABI hal_interrupt_handler_242(void);
extern void KABI hal_interrupt_handler_243(void);
extern void KABI hal_interrupt_handler_244(void);
extern void KABI hal_interrupt_handler_245(void);
extern void KABI hal_interrupt_handler_246(void);
extern void KABI hal_interrupt_handler_247(void);
extern void KABI hal_interrupt_handler_248(void);
extern void KABI hal_interrupt_handler_249(void);
extern void KABI hal_interrupt_handler_250(void);
extern void KABI hal_interrupt_handler_251(void);
extern void KABI hal_interrupt_handler_252(void);
extern void KABI hal_interrupt_handler_253(void);
extern void KABI hal_interrupt_handler_254(void);
extern void KABI hal_interrupt_handler_255(void);

View File

@ -13,7 +13,9 @@ typedef uint32_t irql_t;
#define IRQL_PASSIVE_LEVEL (1 << 0)
irql_t KABI hal_set_irql(irql_t irql);
irql_t KABI hal_get_irql(void);
uint32_t KABI hal_get_core_id(void);
/**

View File

@ -5,6 +5,7 @@
#include "kernel/hal/print.h"
void KABI ke_printf(const char *str, ...);
void KABI ke_vprintf(const char *str, va_list args);
#endif

View File

@ -1,5 +1,6 @@
#ifndef _KERNEL_KE_RWLOCK_H_
#define _KERNEL_KE_RWLOCK_H_
#include "kernel/ke/spin_lock.h"
#include "type.h"

View File

@ -4,7 +4,8 @@
void KABI ke_trap(void)
{
while(true){};
while (true)
{};
}
void KABI ke_panic(uint64_t reason)

View File

@ -13,7 +13,8 @@ void KABI ke_spin_lock(k_spin_lock_t *lock)
{
if (lock != NULL)
{
while (ke_interlocked_compare_exchange_32(&lock->val, 0, 1) != 0);
while (ke_interlocked_compare_exchange_32(&lock->val, 0, 1) != 0)
{}
}
return;
}

View File

@ -33,12 +33,21 @@ static int32_t mmp_base_paddr_compare(void *tree_node, void *my_node)
physical_page_descriptor_t,
avl_tree_node)->base;
if (tree_base > my_base)
{
return 1;
else if (tree_base < my_base)
return -1;
}
else
{
if (tree_base < my_base)
{
return -1;
}
else
{
return 0;
}
}
}
status_t KABI sx_pmm_init(pmm_info_t *info)
{
@ -112,7 +121,8 @@ status_t KABI mm_alloc_page(uintptr_t *out)
free_list_node);
lb_avl_tree_insert(&active_tree, &page_info->avl_tree_node);
*out = page_info->base;
} else
}
else
{
result = MM_NOT_ENOUGH_PAGE;
}
@ -147,7 +157,8 @@ status_t KABI mm_query_page_attr(uintptr_t base,
{
page_info = OBTAIN_STRUCT_ADDR(node, physical_page_descriptor_t, avl_tree_node);
*out = page_info->attr;
} else
}
else
{
result = MM_INVALID_ARGUMENTS;
}
@ -177,7 +188,8 @@ status_t KABI mm_free_page(uintptr_t base)
{
page_info = OBTAIN_STRUCT_ADDR(node, physical_page_descriptor_t, avl_tree_node);
lb_linked_list_push_back(&free_list, &page_info->free_list_node);
} else
}
else
{
result = MM_INVALID_ARGUMENTS;
}

View File

@ -36,12 +36,21 @@ static int32_t rfp_handle_compare(void *tree_node, void *my_node)
handle_node_t *my_tcb = OBTAIN_STRUCT_ADDR(my_node, handle_node_t, tree_node);
if ((uintptr_t) tcb->handle > (uintptr_t) my_tcb->handle)
{
return -1;
else if ((uintptr_t) tcb->handle == (uintptr_t) my_tcb->handle)
return 0;
}
else
{
if ((uintptr_t) tcb->handle == (uintptr_t) my_tcb->handle)
{
return 0;
}
else
{
return 1;
}
}
}
static handle_node_t *rfp_search_handle_node(handle_t handle)
{
@ -70,7 +79,9 @@ status_t KABI rf_reference_create(ref_node_t *ref,
ke_assert(ke_get_irql() <= IRQL_DPC_LEVEL);
if (ref == NULL || free_func == NULL)
{
return RF_INVALID_ARGUMENTS;
}
ref->free_routine = free_func;
ref->ref_count = 1;
@ -83,7 +94,9 @@ status_t KABI rf_reference_obj(ref_node_t *ref_node)
ke_assert(ke_get_irql() <= IRQL_DPC_LEVEL);
if (ref_node == NULL)
{
return RF_INVALID_ARGUMENTS;
}
int32_t old_ref_count = ke_interlocked_increment_32(&ref_node->ref_count, 1);
@ -97,7 +110,9 @@ status_t KABI rf_dereference_obj(ref_node_t *ref_node)
ke_assert(ke_get_irql() <= IRQL_DPC_LEVEL);
if (ref_node == NULL)
{
return RF_INVALID_ARGUMENTS;
}
status_t result = STATUS_SUCCESS;
@ -138,7 +153,8 @@ static status_t KABI rf_open_obj_by_handle(handle_t handle, ref_node_t **out)
if (handle_node == NULL)
{
status = RF_INVALID_HANDLE;
} else
}
else
{
ref = handle_node->ref;
}
@ -164,10 +180,14 @@ static status_t KABI rf_create_handle(ref_node_t *ref,
ke_assert(ke_get_irql() <= IRQL_DPC_LEVEL);
if (!initialized)
{
return RF_UNINITIALIZED;
}
if (ref == NULL || node == NULL || out == NULL)
{
return RF_INVALID_ARGUMENTS;
}
status_t result = STATUS_SUCCESS;
irql_t irql;
@ -183,7 +203,8 @@ static status_t KABI rf_create_handle(ref_node_t *ref,
if (existing_node == NULL)
{
lb_avl_tree_insert(&handle_tree, &node->tree_node);
} else
}
else
{
result = RF_DUPLICATED_HANDLE;
}
@ -196,7 +217,8 @@ static status_t KABI rf_create_handle(ref_node_t *ref,
{
rf_reference_obj(ref);
*out = node->handle;
} else
}
else
{
node->free_routine(node, NULL);
}
@ -209,7 +231,9 @@ static status_t KABI rf_close_handle(handle_t handle)
ke_assert(ke_get_irql() <= IRQL_DPC_LEVEL);
if (!initialized)
{
return RF_UNINITIALIZED;
}
irql_t irql;
status_t status = STATUS_SUCCESS;
@ -221,7 +245,8 @@ static status_t KABI rf_close_handle(handle_t handle)
if (handle_node == NULL)
{
status = RF_INVALID_HANDLE;
} else
}
else
{
ref = handle_node->ref;
lb_avl_tree_delete(&handle_tree, &handle_node->tree_node);
@ -253,7 +278,9 @@ status_t KABI sx_create_handle(ref_node_t *ref, handle_t *out)
ke_assert(ke_get_irql() <= IRQL_DPC_LEVEL);
if (!initialized)
{
return RF_UNINITIALIZED;
}
handle_node_t *node;
node = (handle_node_t *) ke_alloc(sizeof(handle_node_t));
@ -272,7 +299,9 @@ status_t KABI sx_close_handle(handle_t handle)
ke_assert(ke_get_irql() <= IRQL_DPC_LEVEL);
if (!initialized)
{
return RF_UNINITIALIZED;
}
// need to keep sx version since need to do handle check here
@ -284,10 +313,14 @@ status_t KABI sx_open_obj_by_handle(handle_t handle, ref_node_t **out)
ke_assert(ke_get_irql() <= IRQL_DPC_LEVEL);
if (!initialized)
{
return RF_UNINITIALIZED;
}
if (out == NULL)
{
return RF_INVALID_ARGUMENTS;
}
// check special handles first
// if (handle == K_HANDLE_CURRENT_THREAD)

View File

@ -8,7 +8,9 @@ static inline int32_t KABI lbp_avl_tree_node_get_height(avl_tree_node_t *node)
static inline int32_t KABI lbp_avl_tree_node_get_balance_factor(avl_tree_node_t *node)
{
if (node == NULL)
{
return 0;
}
return lbp_avl_tree_node_get_height(node->left) - lbp_avl_tree_node_get_height(node->right);
}
@ -19,7 +21,9 @@ static avl_tree_node_t *KABI lbp_avl_tree_node_right_rotate(avl_tree_node_t *roo
left_children->parent = root->parent;
root->parent = left_children;
if (left_children->right != NULL)
{
left_children->right->parent = root;
}
//perform rotation
root->left = root->left->right;
left_children->right = root;
@ -38,7 +42,9 @@ static avl_tree_node_t *KABI lbp_avl_tree_node_left_rotate(avl_tree_node_t *root
right_children->parent = root->parent;
root->parent = right_children;
if (right_children->left != NULL)
{
right_children->left->parent = root;
}
//perform rotation
root->right = root->right->left;
right_children->left = root;
@ -59,8 +65,10 @@ static avl_tree_node_t *KABI lbp_avl_tree_node_balance(avl_tree_node_t *node)
{
const int32_t left_bf = lbp_avl_tree_node_get_balance_factor(node->left);
if (left_bf >= 0)
{
//left left
return lbp_avl_tree_node_right_rotate(node);
}
else
{
//left right
@ -68,7 +76,9 @@ static avl_tree_node_t *KABI lbp_avl_tree_node_balance(avl_tree_node_t *node)
return lbp_avl_tree_node_right_rotate(node);
}
}
else if (bf < -1)
else
{
if (bf < -1)
{
const int32_t right_bf = lbp_avl_tree_node_get_balance_factor(node->right);
if (right_bf <= 0)
@ -84,7 +94,10 @@ static avl_tree_node_t *KABI lbp_avl_tree_node_balance(avl_tree_node_t *node)
}
}
else
{
return node;
}
}
}
@ -93,7 +106,9 @@ static avl_tree_node_t *KABI lbp_avl_tree_node_insert(avl_tree_node_t *root, avl
avl_tree_node_t *parent)
{
if (node == NULL || compare == NULL)
{
return root;
}
if (root == NULL)
{
node->parent = parent;
@ -102,11 +117,20 @@ static avl_tree_node_t *KABI lbp_avl_tree_node_insert(avl_tree_node_t *root, avl
const int32_t comp = compare(root, node);
if (comp < 0)
{
root->right = lbp_avl_tree_node_insert(root->right, node, compare, root);
else if (comp == 0)
return root;
}
else
{
if (comp == 0)
{
return root;
}
else
{
root->left = lbp_avl_tree_node_insert(root->left, node, compare, root);
}
}
root->height = lb_max_32(lbp_avl_tree_node_get_height(root->left), lbp_avl_tree_node_get_height(root->right)) + 1;
@ -116,7 +140,9 @@ static avl_tree_node_t *KABI lbp_avl_tree_node_insert(avl_tree_node_t *root, avl
static void lbp_avl_tree_swap_nodes(avl_tree_node_t *node1, avl_tree_node_t *node2)
{
if (node1 == NULL || node2 == NULL)
{
return;
}
avl_tree_node_t *parent = NULL;
avl_tree_node_t *child = NULL;
avl_tree_node_t *temp = NULL;
@ -126,11 +152,14 @@ static void lbp_avl_tree_swap_nodes(avl_tree_node_t *node1, avl_tree_node_t *nod
parent = node2;
child = node1;
}
else if (node2->parent != NULL && node2->parent == node1)
else
{
if (node2->parent != NULL && node2->parent == node1)
{
parent = node1;
child = node2;
}
}
if (parent != NULL && child != NULL)
{
@ -138,10 +167,14 @@ static void lbp_avl_tree_swap_nodes(avl_tree_node_t *node1, avl_tree_node_t *nod
if (parent->parent != NULL)
{
if (parent->parent->left == parent)
{
parent->parent->left = child;
}
else
{
parent->parent->right = child;
}
}
//update left/right for parent
if (parent->left != NULL && child != parent->left)
{
@ -153,9 +186,13 @@ static void lbp_avl_tree_swap_nodes(avl_tree_node_t *node1, avl_tree_node_t *nod
}
//update left/right for children
if (child->left != NULL)
{
child->left->parent = parent;
}
if (child->right != NULL)
{
child->right->parent = parent;
}
child->parent = parent->parent;
parent->parent = child;
@ -189,30 +226,46 @@ static void lbp_avl_tree_swap_nodes(avl_tree_node_t *node1, avl_tree_node_t *nod
//not connected case
//adjust all the nodes other than node1,node2
if (node1->left != NULL)
{
node1->left->parent = node2;
}
if (node1->right != NULL)
{
node1->right->parent = node2;
}
if (node2->left != NULL)
{
node2->left->parent = node1;
}
if (node2->right != NULL)
{
node2->right->parent = node1;
}
if (node1->parent != NULL)
{
if (node1->parent->left == node1)
{
node1->parent->left = node2;
}
else
{
node1->parent->right = node2;
}
}
if (node2->parent != NULL)
{
if (node2->parent->left == node2)
{
node2->parent->left = node1;
}
else
{
node2->parent->right = node1;
}
}
//adjust node1,node2
temp = node1->parent;
@ -241,12 +294,20 @@ static avl_tree_node_t *KABI lbp_avl_tree_node_delete(avl_tree_node_t *root,
avl_tree_node_t **deleted_node)
{
if (root == NULL || node == NULL || compare == NULL || deleted_node == NULL)
{
return root;
}
const int32_t comp = compare(root, node);
if (comp < 0)
{
root->right = lbp_avl_tree_node_delete(root->right, node, compare, deleted_node);
else if (comp > 0)
}
else
{
if (comp > 0)
{
root->left = lbp_avl_tree_node_delete(root->left, node, compare, deleted_node);
}
else
{
*deleted_node = root;
@ -279,8 +340,11 @@ static avl_tree_node_t *KABI lbp_avl_tree_node_delete(avl_tree_node_t *root,
root = successor;
}
}
}
if (root == NULL)
{
return root;
}
root->height = lb_max_32(lbp_avl_tree_node_get_height(root->left), lbp_avl_tree_node_get_height(root->right)) + 1;
root = lbp_avl_tree_node_balance(root);
return root;
@ -290,15 +354,26 @@ static avl_tree_node_t *KABI lbp_avl_tree_node_search(avl_tree_node_t *root, avl
callback_func_t compare)
{
if (root == NULL || compare == NULL)
{
return NULL;
}
const int32_t comp = compare(root, node);
if (comp < 0)
{
return lbp_avl_tree_node_search(root->right, node, compare);
else if (comp == 0)
return root;
}
else
{
if (comp == 0)
{
return root;
}
else
{
return lbp_avl_tree_node_search(root->left, node, compare);
}
}
}
static void KABI lbp_avl_tree_node_init(avl_tree_node_t *it)
@ -317,24 +392,36 @@ static void KABI lbp_avl_tree_node_init(avl_tree_node_t *it)
avl_tree_node_t *KABI lb_avl_tree_smallest(avl_tree_t *tree)
{
if (tree == NULL)
{
return NULL;
}
avl_tree_node_t *entry = tree->root;
if (entry == NULL)
{
return NULL;
}
while (entry->left != NULL)
{
entry = entry->left;
}
return entry;
}
avl_tree_node_t *KABI lb_avl_tree_largest(avl_tree_t *tree)
{
if (tree == NULL)
{
return NULL;
}
avl_tree_node_t *entry = tree->root;
if (entry == NULL)
{
return NULL;
}
while (entry->right != NULL)
{
entry = entry->right;
}
return entry;
}
@ -342,13 +429,17 @@ avl_tree_node_t *KABI lb_avl_tree_largest(avl_tree_t *tree)
avl_tree_node_t *KABI lb_avl_tree_larger(avl_tree_node_t *it)
{
if (it == NULL)
{
return NULL;
}
avl_tree_node_t *root = it;
if (root->right != NULL)
{
root = root->right;
while (root->left != NULL)
{
root = root->left;
}
return root;
}
else
@ -356,7 +447,9 @@ avl_tree_node_t *KABI lb_avl_tree_larger(avl_tree_node_t *it)
while (root->parent != NULL)
{
if (root->parent->left == root)
{
return root->parent;
}
root = root->parent;
}
return NULL;
@ -366,13 +459,17 @@ avl_tree_node_t *KABI lb_avl_tree_larger(avl_tree_node_t *it)
avl_tree_node_t *KABI lb_avl_tree_smaller(avl_tree_node_t *it)
{
if (it == NULL)
{
return NULL;
}
avl_tree_node_t *root = it;
if (root->left != NULL)
{
root = root->left;
while (root->right != NULL)
{
root = root->right;
}
return root;
}
else
@ -380,7 +477,9 @@ avl_tree_node_t *KABI lb_avl_tree_smaller(avl_tree_node_t *it)
while (root->parent != NULL)
{
if (root->parent->right == root)
{
return root->parent;
}
root = root->parent;
}
return NULL;
@ -416,9 +515,13 @@ avl_tree_node_t *KABI lb_avl_tree_delete(avl_tree_t *tree, avl_tree_node_t *data
int32_t KABI lb_avl_tree_size(avl_tree_t *tree)
{
if (tree == NULL)
{
return -1;
}
if (tree->root == NULL)
{
return 0;
}
int32_t size = 0;
avl_tree_node_t *entry = lb_avl_tree_smallest(tree);
while (entry != NULL)
@ -446,39 +549,54 @@ void KABI lb_avl_tree_init(avl_tree_t *tree, callback_func_t compare)
static int32_t KABI lbp_avl_tree_node_calculate_height(avl_tree_node_t *tree)
{
if (tree == NULL)
{
return -1;
return lb_max_32(lbp_avl_tree_node_calculate_height(tree->left), lbp_avl_tree_node_calculate_height(tree->right)) + 1;
}
return lb_max_32(lbp_avl_tree_node_calculate_height(tree->left), lbp_avl_tree_node_calculate_height(tree->right)) +
1;
}
static bool KABI lbp_avl_tree_node_test(avl_tree_node_t *tree, callback_func_t compare)
{
if (tree == NULL)
{
return true;
}
if (lbp_avl_tree_node_get_balance_factor(tree) < -1 || lbp_avl_tree_node_get_balance_factor(tree) > 1 ||
lbp_avl_tree_node_calculate_height(tree) != tree->height)
{
return false;
}
if (tree->left != NULL)
{
if (tree->left->parent != tree)
{
return false;
}
}
if (tree->right != NULL)
{
if (tree->right->parent != tree)
{
return false;
}
}
if (compare != NULL)
{
if ((tree->right != NULL && compare(tree, tree->right) > 0) ||
(tree->left != NULL && compare(tree, tree->left) < 0))
{
return false;
}
}
return lbp_avl_tree_node_test(tree->left, compare) && lbp_avl_tree_node_test(tree->right, compare);
}
bool KABI lb_avl_tree_validate(avl_tree_t *tree)
{
if (tree == NULL)
{
return true;
}
return lbp_avl_tree_node_test(tree->root, tree->compare);
}

View File

@ -13,7 +13,9 @@ static void KABI lbp_init_linked_list_node(linked_list_node_t *node)
static void KABI lbp_append_node(linked_list_node_t *target, linked_list_node_t *node)
{
if (target == NULL || node == NULL)
{
return;
}
linked_list_node_t *next = target->next;
// update the next node
@ -36,7 +38,9 @@ static void KABI lbp_append_node(linked_list_node_t *target, linked_list_node_t
static void KABI lbp_prepend_node(linked_list_node_t *target, linked_list_node_t *node)
{
if (target == NULL || node == NULL)
{
return;
}
linked_list_node_t *prev = target->prev;
// update the prev node
@ -58,7 +62,9 @@ static void KABI lbp_prepend_node(linked_list_node_t *target, linked_list_node_t
static void KABI lbp_unlink_node(linked_list_node_t *node)
{
if (node == NULL)
{
return;
}
if (node->prev != NULL)
{
@ -86,9 +92,13 @@ void KABI lb_linked_list_init(linked_list_t *list)
int32_t KABI lb_linked_list_size(linked_list_t *list)
{
if (list == NULL)
{
return -1;
}
if (list->head == NULL)
{
return 0;
}
int32_t size = 1;
linked_list_node_t *cur_node = list->head;
@ -103,7 +113,9 @@ int32_t KABI lb_linked_list_size(linked_list_t *list)
void KABI lb_linked_list_push_front(linked_list_t *list, linked_list_node_t *node)
{
if (list == NULL || node == NULL)
{
return;
}
lbp_init_linked_list_node(node);
@ -115,7 +127,9 @@ void KABI lb_linked_list_push_front(linked_list_t *list, linked_list_node_t *nod
void KABI lb_linked_list_push_back(linked_list_t *list, linked_list_node_t *node)
{
if (list == NULL || node == NULL)
{
return;
}
lbp_init_linked_list_node(node);
@ -127,14 +141,18 @@ void KABI lb_linked_list_push_back(linked_list_t *list, linked_list_node_t *node
linked_list_node_t *KABI lb_linked_list_pop_front(linked_list_t *list)
{
if (list == NULL)
{
return NULL;
}
return lb_linked_list_remove_ref(list, list->head);
}
linked_list_node_t *KABI lb_linked_list_pop_back(linked_list_t *list)
{
if (list == NULL)
{
return NULL;
}
return lb_linked_list_remove_ref(list, list->tail);
}
@ -143,7 +161,9 @@ linked_list_node_t *KABI lb_linked_list_pop_back(linked_list_t *list)
void KABI lb_linked_list_insert_ref(linked_list_t *list, linked_list_node_t *prev_node, linked_list_node_t *node)
{
if (list == NULL || node == NULL)
{
return;
}
lbp_init_linked_list_node(node);
if (prev_node == NULL)
{
@ -178,7 +198,9 @@ void KABI lb_linked_list_insert_ref(linked_list_t *list, linked_list_node_t *pre
void KABI lb_linked_list_insert(linked_list_t *list, int32_t index, linked_list_node_t *node)
{
if (list == NULL || index < 0 || node == NULL)
{
return;
}
linked_list_node_t *prev_node = lb_linked_list_get(list, index - 1);
lbp_init_linked_list_node(node);
@ -200,11 +222,15 @@ void KABI lb_linked_list_insert(linked_list_t *list, int32_t index, linked_list_
linked_list_node_t *KABI lb_linked_list_remove(linked_list_t *list, int32_t index)
{
if (list == NULL || index < 0)
{
return NULL;
}
linked_list_node_t *cur_node = lb_linked_list_get(list, index);
if (cur_node == NULL)
{
return NULL;
}
return lb_linked_list_remove_ref(list, cur_node);
}
@ -212,7 +238,9 @@ linked_list_node_t *KABI lb_linked_list_remove(linked_list_t *list, int32_t inde
linked_list_node_t *KABI lb_linked_list_remove_ref(linked_list_t *list, linked_list_node_t *node)
{
if (list == NULL || node == NULL)
{
return NULL;
}
lbp_unlink_node(node);
@ -234,9 +262,12 @@ linked_list_node_t *KABI lb_linked_list_remove_ref(linked_list_t *list, linked_l
linked_list_node_t *KABI lb_linked_list_get(linked_list_t *list, int32_t index)
{
if (list == NULL || index < 0 || list->head == NULL)
{
return NULL;
}
linked_list_node_t *cur_node = list->head;
while (index-- && (cur_node = cur_node->next) != NULL);
while (index-- && (cur_node = cur_node->next) != NULL)
{}
return cur_node;
}
@ -282,7 +313,9 @@ int32_t KABI lb_linked_list_search(linked_list_t *list, linked_list_node_t *targ
callback_func_t equals)
{
if (list == NULL || target == NULL)
{
return -1;
}
int32_t result = 0;
linked_list_node_t *node = lb_linked_list_first(list);
while (node != NULL)

View File

@ -45,9 +45,13 @@ static int counter = 0;
static bool _pre_order_assert(avl_tree_node_t *node, int order[], int size)
{
if (node == NULL)
{
return true;
}
if (counter >= size)
{
return false;
}
bool result = true;
int_tree_node *my_node = OBTAIN_STRUCT_ADDR(node, int_tree_node, tree_entry);

View File

@ -41,7 +41,9 @@ static bool assert_list(linked_list_t *list, int val[], int size)
int i = 0;
if (!validate_list(list))
{
return false;
}
while (node != NULL && i < size)
{