summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZachary Yedidia <zyedidia@gmail.com>2022-05-13 15:32:12 -0700
committerZachary Yedidia <zyedidia@gmail.com>2022-05-13 15:32:12 -0700
commit1aef408ec5cd68af28f3c75e5599bc87a04b9e83 (patch)
treebe0c52584aa49411a39095ba608bc9e2a3a83888
parent4d16c701e4e498a5d2979cbc194b4e32f2b620b2 (diff)
Use basic proc by default and fix dev barrier
-rw-r--r--defs.mk4
-rw-r--r--kern/interrupts.c2
-rw-r--r--kern/kern.c20
-rw-r--r--kern/proc.c9
-rw-r--r--kern/proc.h2
5 files changed, 22 insertions, 15 deletions
diff --git a/defs.mk b/defs.mk
index c917bf3..e28340a 100644
--- a/defs.mk
+++ b/defs.mk
@@ -8,6 +8,8 @@ OBJCOPY = $(PREFIX)-objcopy
OBJDUMP = $(PREFIX)-objdump
QEMU = qemu-system-arm
+# Custom qemu with dev barrier checking
+# QEMU = /home/zyedidia/programming/qemu-dev/build/qemu-system-arm
BOARD = raspi1ap
GDB = gdb-multiarch
@@ -20,7 +22,7 @@ ARCH = armv6zk
PIOS ?= $(shell git rev-parse --show-toplevel)
-CFLAGS = -O$(O) -g -Wall -nostdlib -nostartfiles -ffreestanding -Wa,-mcpu=$(CPU) -Wa,-march=$(ARCH)
+CFLAGS = -O$(O) -g -Wall -Werror -nostdlib -nostartfiles -ffreestanding -Wa,-mcpu=$(CPU) -Wa,-march=$(ARCH)
ASFLAGS = -mcpu=$(CPU) -march=$(ARCH)
LDFLAGS = -T $(MEMMAP)
LDLIBS = $(LIBGCC)
diff --git a/kern/interrupts.c b/kern/interrupts.c
index f140212..9c80a84 100644
--- a/kern/interrupts.c
+++ b/kern/interrupts.c
@@ -19,7 +19,7 @@ typedef struct {
uint32_t disable_basic_irqs;
} irq_ctrl_t;
-static volatile irq_ctrl_t *const irq_ctrl = (irq_ctrl_t *) pa2ka(0x2000B200);
+static volatile irq_ctrl_t *const irq_ctrl = (irq_ctrl_t *) pa2ka(0x2000b200);
void irq_enable_basic(uint32_t irq) {
irq_ctrl->enable_basic_irqs = bit_set(irq_ctrl->enable_basic_irqs, irq);
diff --git a/kern/kern.c b/kern/kern.c
index a99a8ce..39d0b4b 100644
--- a/kern/kern.c
+++ b/kern/kern.c
@@ -44,18 +44,24 @@ void kernel_start() {
irq_init();
irq_enable(BASIC_TIMER_IRQ);
+ dsb();
timer_irq_load(0x1000);
printf("kernel booted\n");
- extern unsigned char _binary_pidos_bin_start;
- extern unsigned char _binary_pidos_bin_end;
-
- proc_t *p_pidos_1 = proc_new(&_binary_pidos_bin_start, (size_t) (&_binary_pidos_bin_end - &_binary_pidos_bin_start));
- proc_new(&_binary_pidos_bin_start, (size_t) (&_binary_pidos_bin_end - &_binary_pidos_bin_start));
-
- // TODO/NOTE(masot): Currently, proc_run enables IRQs
+#ifdef PIDOS
+ extern uint8_t _binary_pidos_bin_start;
+ extern uint8_t _binary_pidos_bin_end;
+ proc_t *p_pidos_1 = proc_new(&_binary_pidos_bin_start, &_binary_pidos_bin_end);
+ proc_new(&_binary_pidos_bin_start, &_binary_pidos_bin_end);
+ enable_interrupts(); // TODO: Set this in the SPSR
proc_run(p_pidos_1);
+#else
+ extern uint8_t _binary_basic_bin_start;
+ extern uint8_t _binary_basic_bin_end;
+ proc_t* p_basic = proc_new(&_binary_basic_bin_start, &_binary_basic_bin_end);
+ proc_run(p_basic);
+#endif
reboot();
return;
diff --git a/kern/proc.c b/kern/proc.c
index d08fad2..8fd8bc7 100644
--- a/kern/proc.c
+++ b/kern/proc.c
@@ -8,12 +8,14 @@ static pid_t id;
proc_t procs[NPROC];
proc_t *curproc;
-proc_t *proc_new(uint8_t *code, size_t codesz) {
+proc_t *proc_new(uint8_t *code_start, uint8_t *code_end) {
+ size_t codesz = code_end - code_start;
+
proc_t *proc = &procs[id];
proc->id = id++;
proc->pt = kalloc_pt();
proc->state = PROC_RUNNABLE;
- proc->code = code;
+ proc->code = code_start;
proc->codesz = codesz;
// map kernel into pt
for (uintptr_t pa = 0; pa < MEMSIZE_PHYSICAL; pa += SIZE_1MB) {
@@ -42,7 +44,6 @@ void __attribute__((noreturn)) proc_run(proc_t *proc) {
vm_set_pt(proc->pt);
curproc = proc;
- enable_interrupts(); // TODO: Set this in the SPSR
// NOTE: To use SPSR, need to be sure we are *NOT* in user/system mode.
// TODO(masot): add an assert like that
set_spsr((get_cpsr() & ~0b11111) | 0b10000);
@@ -51,8 +52,6 @@ void __attribute__((noreturn)) proc_run(proc_t *proc) {
}
}
-thread_id = 0;
-
void swippityswap(regs_t *live_state, proc_t *new_thread, proc_t *old_thread) {
memcpy(&(old_thread->regs), live_state, sizeof(regs_t));
memcpy(live_state, &(new_thread->regs), sizeof(regs_t));
diff --git a/kern/proc.h b/kern/proc.h
index 592538e..6f04825 100644
--- a/kern/proc.h
+++ b/kern/proc.h
@@ -46,6 +46,6 @@ typedef struct {
extern proc_t *curproc;
-proc_t *proc_new(uint8_t *code, size_t codesz);
+proc_t *proc_new(uint8_t *code_start, uint8_t *code_end);
void proc_run(proc_t *proc);
void proc_scheduler_irq(regs_t *regs);
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback