aboutsummaryrefslogtreecommitdiff
path: root/src/cpu
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu')
-rw-r--r--src/cpu/atomic/swap.h1
-rw-r--r--src/cpu/irq.S82
-rw-r--r--src/cpu/irq.c4
3 files changed, 2 insertions, 85 deletions
diff --git a/src/cpu/atomic/swap.h b/src/cpu/atomic/swap.h
index 3584d4e..cbed62c 100644
--- a/src/cpu/atomic/swap.h
+++ b/src/cpu/atomic/swap.h
@@ -8,6 +8,7 @@
/// https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/3_Processes.html
/// https://developer.arm.com/documentation/dht0008/a/arm-synchronization-primitives/practical-uses/implementing-a-semaphore?lang=en
+// TODO: Once scheduling works, have a failed lock put thread in waiting state
static inline void atm_lock(unsigned long pid, unsigned long* addr)
{
unsigned long tmp, current_lock_value;
diff --git a/src/cpu/irq.S b/src/cpu/irq.S
deleted file mode 100644
index fbb6ab7..0000000
--- a/src/cpu/irq.S
+++ /dev/null
@@ -1,82 +0,0 @@
-a_irq_handler:
- push {lr}
- cpsid i // Disable IRQ
- // r2 = CORE0_INTERRUPT_SOURCE
- // if r2 & 0b100000000
- mov r2, #0x40000000
- ldr r3, [r2, #0x60]
- tst r3, #256
- beq a_irq_handler.timer
- // r2 = IRQ_PEND2
- // r2 & 1 << 25
- mov r2, #0xB208
- movt r2, #0x3F00
- ldr r3, [r2]
- tst r3, #0x2000000
- beq a_irq_handler.exit
- mov r2, #0x1040
- movt r2, #0x3F20
- ldr r3, [r2]
- tst r3, #16
- beq a_irq_handler.exit
- mov r2, #0x1000
- movt r2, #0x3F20
- ldrb r0, [r2]
- push {r0}
-
- // If 't' was pressed
- // disable timer
- cmp r0, #0x74
- bne a_irq_handler.ttimer
- mrc p15, #0, r0, c14, c3, #1
- cmp r0, #0
- beq a_irq_handler.etimer
- // Disable
- mov r0, #0
- mcr p15, 0, r0, c14, c3, 1
- b a_irq_handler.ttimer
-a_irq_handler.etimer:
- // Enable
- ldr r0, =cntfrq
- bl write_cntv_tval
- mov r0, #1
- mcr p15, 0, r0, c14, c3, 1
- // Otherwise continue
-a_irq_handler.ttimer:
- pop {r0}
- bl uart_char
- ldr r0, =imsg
- bl uart_string
- cpsie i // Enable IRQ
- pop {pc}
-a_irq_handler.timer:
-
- // r2 = CORE0_INTERRUPT_SOURCE
- // if r2 & 0b1000
- mov r2, #0x40000000
- ldr r3, [r2, #0x60]
- tst r3, #8
- beq a_irq_handler.exit
- bl c_timer
- //ldr r0, =imsg
- //bl uart_string
-a_irq_handler.exit:
- cpsie i // Enable IRQ
- pop {pc}
-
-.globl a_fiq_handler
-a_fiq_handler:
- push {lr}
- cpsie f // Disable FIQ
- bl c_timer
- ldr r0, =fmsg
- bl uart_string
-a_fiq_handler.exit:
- cpsie f // Enable FIQ
- pop {pc}
-
-.section ".data"
-imsg:
- .asciz " asm_irq_handler\n"
-fmsg:
- .asciz " asm_fiq_handler\n"
diff --git a/src/cpu/irq.c b/src/cpu/irq.c
index dbd4c10..4a96018 100644
--- a/src/cpu/irq.c
+++ b/src/cpu/irq.c
@@ -2,14 +2,12 @@
#include "../drivers/uart.h"
#include "../graphics/drawer.h"
#include "../sys/core.h"
+#include "../sys/kernel.h"
#include "../sys/timer.h"
#include "../util/mutex.h"
#include "../util/status.h"
#include "../util/time.h"
-extern unsigned long cmdidx;
-extern char cmd[2048];
-
void localtest(void);
void c_irq_handler(void)