aboutsummaryrefslogtreecommitdiff
path: root/src/sys/schedule.S
diff options
context:
space:
mode:
Diffstat (limited to 'src/sys/schedule.S')
-rw-r--r--src/sys/schedule.S53
1 files changed, 0 insertions, 53 deletions
diff --git a/src/sys/schedule.S b/src/sys/schedule.S
deleted file mode 100644
index a47252c..0000000
--- a/src/sys/schedule.S
+++ /dev/null
@@ -1,53 +0,0 @@
-.section ".text"
-.globl schedule
-
-.include "macros.inc"
-
-// Assumption: Enter in SVC mode
-schedule:
- preserve_ctx
- ldr r1, =irqlr
- ldr r0, [r1]
- cmp r0, #0
- beq 1f
- // Replace LR with IRQ's LR
- ldr r3, =scheduler
- ldr r2, [r3, #0] // struct Thread* rthread
- str r0, [r2, #0] // svc_lr -> void* pc
- // Clear IRQ's LR
- mov r0, #0
- str r0, [r1]
-1:
- bl next_thread // Thread* next -> r0
- ldr r3, =scheduler
- str r0, [r3, #0] // next -> rthread
- restore_ctx
- subs pc, lr, #0
-
-.globl cleanup
-cleanup:
- bl c_cleanup
- // usrloop -> rthread
- ldr r3, =scheduler
- ldr r2, =usrloopthread
- str r2, [r3, #0]
- ldr sp, [r2, #4]
- ldmfd sp!,{lr}
- ldmfd sp!,{r0-r12}
- ldr lr, =kernel_usr_task_loop
- // svc sched
- svc #2
-.globl kernel_usr_task_loop
-kernel_usr_task_loop:
- wfe
- b kernel_usr_task_loop
-
-.globl add_thread
-add_thread:
- mrs r3, cpsr
- and r3, #0x1F
- cmp r3, #0x10
- beq 1f
- b svc_add_thread
-1: svc #3
- bx lr