]> rtime.felk.cvut.cz Git - arc.git/blob - arch/hc1x/hcs12d/kernel/arch_krn.sx
Starting 'hcs12x' branch
[arc.git] / arch / hc1x / hcs12d / kernel / arch_krn.sx
1 \r
2 \r
3 #define _ASSEMBLER_\r
4 #include "kernel_offset.h"\r
5 #include "context.h"\r
6 #include "asm_hc1x.sx"\r
7 #include "context.sx"\r
8 \r
9 .extern os_sys\r
10 .extern os_proc_start_extended\r
11 \r
12 #define IRQ_ENABLE()            cpsie   i\r
13 #define IRQ_DISABLE()           cpsid   i\r
14 \r
15 \r
16 .global Os_ArchSwapContextToW\r
17 .global Os_ArchSwapContextTo\r
18 .global Os_ArchSwapContext\r
19 .global Os_ArchSetSpAndCall\r
20 \r
21 .section .text\r
22 \r
23 /* void Os_ArchSetSpAndCall(void *sp, void (*f)(void) ); */\r
24 Os_ArchSetSpAndCall:\r
25                 MOVE_ARG 1, x                           // f --> X\r
26                 MOVE_ARG 0, sp                          // sp (D) --> SP\r
27                 jmp             0, x                            // f()\r
28 \r
29 \r
30 Os_ArchSwapContextToW:\r
31 /*\r
32                 mr              r1,r5\r
33                 b               Os_ArchSwapContextTo\r
34 */\r
35 \r
36 /* void Os_ArchSwapContext(void *old, void *new); */\r
37 Os_ArchSwapContext:\r
38 Os_ArchSwapContext_get_args:\r
39                 MOVE_ARG 0, x                                   // old --> X\r
40                 MOVE_ARG 1, y                                   // new --> Y\r
41                 \r
42                 SAVE_CONTEXT_FROM_FUNCTION\r
43                 \r
44                 sts             PCB_STACK_CURR_P, x             // SP --> old->stack.curr\r
45                 bra             Os_ArchSwapContextTo_do\r
46 \r
47 \r
48 /* void Os_ArchSwapContextTo(void *old, void *new); */\r
49 Os_ArchSwapContextTo:\r
50 Os_ArchSwapContextTo_get_args:\r
51 // Get stack for new task\r
52                 MOVE_ARG 1, y                                   // new --> Y\r
53                 \r
54 Os_ArchSwapContextTo_do:\r
55 // Set current process\r
56                 sty             os_sys                                  // new (Y) --> os_sys.curr_pcb\r
57 // Restore context\r
58                 lds             PCB_STACK_CURR_P, y             // new->stack.curr --> SP\r
59                 \r
60                 RESTORE_CONTEXT_FOR_FUNCTION\r
61                 \r
62                 rtc\r
63 \r