diff --git a/src/kernel/kmain.c b/src/kernel/kmain.c index 6201a3c..064164c 100644 --- a/src/kernel/kmain.c +++ b/src/kernel/kmain.c @@ -39,6 +39,7 @@ void sysinit(){ vfs_detect_partitions(dir_data[i]); } printf("Bleh\n"); + //why did i stop working on this? what was wrong with this? for(;;); } extern void kmain(kernel_info_t *kernel_info){ diff --git a/src/kernel/shared/kstdlib.c b/src/kernel/shared/kstdlib.c index d9e0cc4..b6334da 100644 --- a/src/kernel/shared/kstdlib.c +++ b/src/kernel/shared/kstdlib.c @@ -61,17 +61,30 @@ void vector_set(uint32_t pos, vector_t *vector, void *new_element){ ((uint8_t *)(vector->ptr))[i] = ((uint8_t *)new_element)[i]; } } +// void vector_push(vector_t *vector, void *new_element){ +// if((vector->size * vector->sizeof_elements)/4096 > ((vector->size + 1) * vector->sizeof_elements)/4096){ +// vector->size++; +// void *newptr = kmalloc((vector->size * vector->sizeof_elements)/4096); +// for(uint8_t i = 0; i < (vector->size - 1) * vector->sizeof_elements; i++){ +// ((uint8_t *)(newptr))[i] = ((uint8_t *)vector->ptr)[i * vector->size]; +// } +// } +// for(uint32_t i = 0; i < vector->sizeof_elements; i++){ +// ((uint8_t *)(vector->ptr))[vector->size + i] = ((uint8_t *)new_element)[vector->size + i]; +// } +// printf(" (vector push ) %d", vector->size); +// } void vector_push(vector_t *vector, void *new_element){ - if((vector->size * vector->sizeof_elements)/4096 + 1> ((vector->size + 1) * vector->sizeof_elements)/4096 + 1){ - vector->size++; + if(((vector->size + 1) * vector->sizeof_elements) >> 12 != (vector->size * vector->sizeof_elements)){ void *newptr = kmalloc((vector->size * vector->sizeof_elements)/4096); for(uint8_t i = 0; i < (vector->size - 1) * vector->sizeof_elements; i++){ ((uint8_t *)(newptr))[i] = ((uint8_t *)vector->ptr)[i * vector->size]; } } for(uint32_t i = 0; i < vector->sizeof_elements; i++){ - ((uint8_t *)(vector->ptr))[vector->size + i] = ((uint8_t *)new_element)[vector->size + i]; + ((uint8_t *)(vector->ptr))[vector->size + i] = ((uint8_t *)new_element)[i]; } + vector->size++; } void vector_pop(uint32_t pos, vector_t *vector, void *element){ for(uint32_t i = 0; i < vector->sizeof_elements; i++){ diff --git a/src/kernel/shared/kstdlib.h b/src/kernel/shared/kstdlib.h index 15cfc27..d89440e 100644 --- a/src/kernel/shared/kstdlib.h +++ b/src/kernel/shared/kstdlib.h @@ -18,6 +18,7 @@ typedef struct vector{ void *ptr; uint32_t size; uint32_t sizeof_elements; + uint32_t pages; }vector_t; vector_t *init_vector(void *vecptr, uint32_t sizeof_elements, uint32_t elements, void *initializer); diff --git a/src/kernel/system/intirc.c b/src/kernel/system/intirc.c index f9c263a..48de027 100644 --- a/src/kernel/system/intirc.c +++ b/src/kernel/system/intirc.c @@ -29,6 +29,7 @@ void initrc_read(vfile_t *file){ } if(!strcmp(statement, "ECHO")){ //this is purely for testing purposes. + printf("[ INITRC ]"); i++; while(ptr[i] != '\n' && ptr[i]){ if(ptr[i] != '\"'){ diff --git a/src/kernel/system/modules.c b/src/kernel/system/modules.c index 37b6a55..82f1142 100644 --- a/src/kernel/system/modules.c +++ b/src/kernel/system/modules.c @@ -21,14 +21,15 @@ uint32_t module_api(uint32_t func, ...){ if(structure == 0){ return_value = -1; } - vector_push(modules, structure); uint32_t tmp = pm_alloc(); (structure->key) = (modules->size ^ 190507) + tmp << 12 ^ 4405648937 ^ 8592807313 >> 5; structure->key & 0xffffff00 | modules->size; + vector_push(modules, structure); pm_free(tmp); return_value = 0; + printf("vector size -> %d", structure->key); break; - case MODULE_API_ADDINT: + case MODULE_API_ADDINT: uint32_t int_index = va_arg(vars, uint32_t); uint32_t key = va_arg(vars, uint32_t); void *interrupt_handler = va_arg(vars, void *); @@ -124,16 +125,19 @@ uint32_t module_api(uint32_t func, ...){ uint32_t size = va_arg(vars, uint32_t); return_value = (uint32_t)kmalloc_page_paddr((uint32_t)paddr, size); break; - case MODULE_ADD_FS_HANDLER: - void *handler = va_arg(vars, void (*)(void *, uint32_t, ...)); + case MODULE_MESSAGE_HANDLER: key = va_arg(vars, uint32_t); - vfs_add_mount_handler(handler, key); + void *handler = va_arg(vars, void (*)()); + for(int i = 0; i < modules->size; i++){ + module_t* module = ((module_t *)vector_get(i, modules)); + if(module->key == key){ + module->message_handler = handler; + return_value = 0; + break; + } + return_value = -1; + } break; - case MODULE_DEL_FS_HANDLER: - key = va_arg(vars, uint32_t); - vfs_del_mount_handler(key); - break; - } va_end(vars); return return_value; diff --git a/src/kernel/system/modules.h b/src/kernel/system/modules.h index e040884..ee89489 100644 --- a/src/kernel/system/modules.h +++ b/src/kernel/system/modules.h @@ -31,8 +31,7 @@ enum MODULE_API_FUNCS{ MODULE_API_FREE, //free memory allocated by malloc MODULE_API_PMALLOC64K, MODULE_API_KMALLOC_PADDR, - MODULE_ADD_FS_HANDLER, - MODULE_DEL_FS_HANDLER, + MODULE_MESSAGE_HANDLER, }; typedef struct module{ @@ -42,6 +41,7 @@ typedef struct module{ uint8_t flags; uint16_t interrupts; uint32_t key; + void (*message_handler)(uint32_t message, ...); void (*fini)(void); }module_t; diff --git a/src/kernel/system/vfs.c b/src/kernel/system/vfs.c index 834a2b4..fc58998 100644 --- a/src/kernel/system/vfs.c +++ b/src/kernel/system/vfs.c @@ -69,25 +69,25 @@ void vfs_detect_partitions(vfile_t *file){ return; } -void vfs_add_mount_handler(int (*mount_handler)(vfile_t *device, MOUNT_OPERATION op, ...), uint32_t key){ - if(mount_handler == 0){ - return; - } - for(uint32_t i = 0; i < 32; i++){ - if(mount_handlers[i].callback == 0){ - mount_handlers[i].callback = mount_handler; - mount_handlers[i].key = key; - } - } -} -void vfs_del_mount_handler(uint32_t key){ - for(uint32_t i = 0; i < 32; i++){ - if(mount_handlers[i].key == key){ - mount_handlers[i].callback = 0; - mount_handlers[i].key = 0; - } - } -} +// void vfs_add_mount_handler(int (*mount_handler)(vfile_t *device, MOUNT_OPERATION op, ...), uint32_t key){ +// if(mount_handler == 0){ +// return; +// } +// for(uint32_t i = 0; i < 32; i++){ +// if(mount_handlers[i].callback == 0){ +// mount_handlers[i].callback = mount_handler; +// mount_handlers[i].key = key; +// } +// } +// } +// void vfs_del_mount_handler(uint32_t key){ +// for(uint32_t i = 0; i < 32; i++){ +// if(mount_handlers[i].key == key){ +// mount_handlers[i].callback = 0; +// mount_handlers[i].key = 0; +// } +// } +// } void vfs_init(){ mlog(MODULE_NAME, "Initializing VFS\n", MLOG_PRINT); diff --git a/src/kernel/system/vfs.h b/src/kernel/system/vfs.h index e9c9857..c99e418 100644 --- a/src/kernel/system/vfs.h +++ b/src/kernel/system/vfs.h @@ -82,6 +82,6 @@ int fwrite(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t coun int fread(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count); vfile_t *search_dir(char *name, vfile_t dir); vfile_t *fopen(char *name); -void vfs_del_mount_handler(uint32_t key); -void vfs_add_mount_handler(int (*mount_handler)(vfile_t *device, MOUNT_OPERATION op, ...), uint32_t key); +// void vfs_del_mount_handler(uint32_t key); +// void vfs_add_mount_handler(int (*mount_handler)(vfile_t *device, MOUNT_OPERATION op, ...), uint32_t key); void vfs_detect_partitions(vfile_t *file); \ No newline at end of file diff --git a/src/kmodules/modlib.h b/src/kmodules/modlib.h index 08df20d..bea5660 100644 --- a/src/kmodules/modlib.h +++ b/src/kmodules/modlib.h @@ -21,8 +21,7 @@ enum MODULE_API_FUNCS{ MODULE_API_FREE, //free memory allocated by malloc MODULE_API_PMALLOC64K, MODULE_API_KMALLOC_PADDR, - MODULE_ADD_FS_HANDLER, - MODULE_DEL_FS_HANDLER, + MODULE_MESSAGE_HANDLER }; typedef uint32_t (*KOS_MAPI_FP)(unsigned int function, ...); @@ -33,6 +32,7 @@ typedef struct module{ uint8_t flags; uint16_t interrupts; uint32_t key; + void (*message_handler)(uint32_t message, ...); void (*fini)(void); }module_t;