diff options
| author | Miquel Sabaté Solà <mikisabate@gmail.com> | 2024-11-24 23:27:13 +0100 |
|---|---|---|
| committer | Miquel Sabaté Solà <mikisabate@gmail.com> | 2024-11-24 23:27:13 +0100 |
| commit | f4986dab75fa612f4f3d525187cd04c029d9bc6b (patch) | |
| tree | c70dd8bd8bd420578bf0a2af01e23ecec89bea0c /kernel/main.c | |
| parent | 1e81d5c0e4503c86f60ee21da76694ac0693a2e3 (diff) | |
| download | fbos-f4986dab75fa612f4f3d525187cd04c029d9bc6b.tar.gz fbos-f4986dab75fa612f4f3d525187cd04c029d9bc6b.zip | |
Accept tasks as a parameter on initrd extraction
This allows this functionality to be properly extracted for unit tests.
Signed-off-by: Miquel Sabaté Solà <mikisabate@gmail.com>
Diffstat (limited to 'kernel/main.c')
| -rw-r--r-- | kernel/main.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/kernel/main.c b/kernel/main.c index 58d67f5..fdcef1f 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -4,13 +4,16 @@ #include <fbos/sched.h> #include <fbos/dt.h> -unsigned long init_stack[4][THREAD_SIZE / sizeof(unsigned long)]; +// Stacks to be used by our processes. +unsigned long stack[4][THREAD_SIZE / sizeof(unsigned long)]; +// Initialize the list of structs by providing a fixed stack address and empty +// values everywhere else. struct task_struct tasks[4] = { - [TASK_INIT] = { .stack = init_stack[0], .entry_addr = nullptr, }, - [TASK_FIZZ] = { .stack = init_stack[1], .entry_addr = nullptr, }, - [TASK_BUZZ] = { .stack = init_stack[2], .entry_addr = nullptr, }, - [TASK_FIZZBUZZ] = { .stack = init_stack[3], .entry_addr = nullptr, }, + [TASK_INIT] = { .stack = stack[0], .entry_addr = nullptr, }, + [TASK_FIZZ] = { .stack = stack[1], .entry_addr = nullptr, }, + [TASK_BUZZ] = { .stack = stack[2], .entry_addr = nullptr, }, + [TASK_FIZZBUZZ] = { .stack = stack[3], .entry_addr = nullptr, }, }; /* @@ -24,7 +27,7 @@ __noreturn __kernel void start_kernel(void *dtb) // Extract information from the DTB blob. struct initrd_addr addr = find_dt_initrd_addr(dtb); - extract_initrd((unsigned char *)addr.start, addr.end - addr.start); + extract_initrd((unsigned char *)addr.start, addr.end - addr.start, tasks); // At this point everything has already been handled: setup the interrupt // vector and enable the timer to start ticking and scheduling the three |
