801909c90790af45269912055ec16abe063dc0f5
[tpg/acess2.git] / Kernel / arch / armv7 / proc.S
1 /*
2  * Acess2 ARM
3  * - By John Hodge (thePowersGang)
4  *
5  * arch/arm7/proc.S
6  * - Process management assembly
7  */
8
9 #include "include/assembly.h"
10
11 .globl KernelThreadHeader
12 @ SP+12: Argument 1
13 @ SP+8: Argument Count
14 @ SP+4: Function
15 @ SP+0: Thread Pointer
16 KernelThreadHeader:
17         ldr r0, [sp],#4
18         @ TODO: Do something with the thread pointer
19         
20         ldr r4, [sp],#4 @ Function
21         ldr r5, [sp],#4
22         @ Get arguments
23         sub r5, #1
24         ldrhs r0, [sp],#4
25 @       suble r5, #1
26 @       ldrhs r1, [sp],#4
27 @       suble r5, #1
28 @       ldrhs r2, [sp],#4
29 @       suble r5, #1
30 @       ldrhs r3, [sp],#4
31
32         blx r4
33         
34         ldr r0, =0
35         bl Threads_Exit
36         b .
37
38 .globl Proc_int_DropToUser
39 @ R0: User IP
40 @ R1: User SP
41 Proc_int_DropToUser:
42         cps #16
43         mov sp, r1
44         mov pc, r0
45
46 .globl SwitchTask
47 @ R0: New stack
48 @ R1: Pointer to where to save old stack
49 @ R2: New IP
50 @ R3: Pointer to save old IP
51 @ SP+0: New address space
52 SwitchTask:
53         push {r4-r12,lr}
54
55         @ Save IP       
56         ldr r4, =.return
57         str r4, [r3]
58         @ Save SP
59         str sp, [r1]
60
61         @ Only update TTBR0 if the task has an explicit address space
62         ldr r1, [sp,#4*10]
63         tst r1, r1
64         mcrne p15, 0, r1, c2, c0, 0     @ Set TTBR0 to r0
65
66         @ Restore SP
67         mov sp, r0
68
69         bx r2
70
71 .return:
72         pop {r4-r12,pc}
73
74 .extern MM_Clone
75 .extern MM_DumpTables
76 .globl Proc_CloneInt
77 Proc_CloneInt:
78         @ R0: SP Destination
79         @ R1: Mem Destination
80         push {r4-r12,lr}
81         mov r4, r1      @ Save mem destination
82         str sp, [r0]    @ Save SP to SP dest
83
84         bl MM_Clone
85         str r0, [r4]    @ Save clone return to Mem Dest
86
87         ldr r0, =Proc_CloneInt_new
88         pop {r4-r12,pc}
89 Proc_CloneInt_new:
90         cps #18
91                 
92         mov r0, #0
93         mov r1, #0
94         sub r1, #1
95         bl MM_DumpTables
96
97 @       ldr r0, =csProc_CloneInt_NewTaskMessage
98 @       bl Log
99         
100         cps #19
101         mov r0, #0
102         pop {r4-r12,pc}
103
104
105 .section .rodata
106 csProc_CloneInt_NewTaskMessage:
107         .asciz "New task"

UCC git Repository :: git.ucc.asn.au