feat: moved block dev loop to a daemon task. Fixed bug in string.c and

main loop
This commit is contained in:
2021-03-01 21:42:35 +01:00
parent 990b850c43
commit 76792dd6fd
7 changed files with 32 additions and 21 deletions

View File

@@ -6,6 +6,9 @@
#include <libk/libk.h>
#include <libc/kprintf.h>
#include <mem/malloc.h>
#include <tasks/task.h>
#include <tasks/locking.h>
#include <attributes.h>
#include "blockdev.h"
#define MAX_BLOCK_DEVS 64
@@ -15,6 +18,8 @@ int last_block_dev = 0;
block_device block_devices[MAX_BLOCK_DEVS];
int last_block_driver = 0;
block_dev_driver block_dev_drivers[MAX_BLOCK_DRIVERS];
semaphore_t *block_semaphore;
bool blockdev_task_running = false;
uint8_t block_dev_register_driver(block_dev_driver *driver) {
if (last_block_dev >= MAX_BLOCK_DEVS - 1) {
@@ -30,6 +35,10 @@ uint8_t block_dev_register(block_device *device) {
return BLOCK_DEV_REGISTER_FULL;
}
if (blockdev_task_running) {
semaphore_signal(block_semaphore);
}
memcpy((uint8_t *) &block_devices[last_block_dev++], (const uint8_t *) device, sizeof(block_device));
return BLOCK_DEV_REGISTER_OK;
}
@@ -76,12 +85,19 @@ void block_dev_scan() {
}
}
void block_dev_scan_repeat() {
while (block_dev_num_not_scanned() > 0) {
void noreturn block_dev_task(void *data) {
while (true) {
semaphore_wait(block_semaphore);
block_dev_scan();
}
}
void block_dev_start_task() {
block_semaphore = semaphore_create(1);
blockdev_task_running = true;
task_spawn(block_dev_task, NULL);
}
void block_dev_print_info() {
printf("Block devices:\n");
for (int i = 0; i < last_block_dev; ++i) {

View File

@@ -64,7 +64,7 @@ uint8_t block_dev_register(block_device *device);
void block_dev_free(block_device *device);
void block_dev_scan_repeat();
void block_dev_start_task();
void block_dev_print_info();