feat: moved block dev loop to a daemon task. Fixed bug in string.c and
main loop
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user