[NTOS]: Add a branch-to-self to start testing kernel code.
[reactos.git] / reactos / ntoskrnl / ke / arm / boot.s
1 /*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * FILE: ntoskrnl/ke/arm/boot.s
5 * PURPOSE: Implements the kernel entry point for ARM machines
6 * PROGRAMMERS: ReactOS Portable Systems Group
7 */
8
9 .title "ARM Kernel Entry Point"
10 .include "ntoskrnl/include/internal/arm/kxarm.h"
11 .include "ntoskrnl/include/internal/arm/ksarm.h"
12
13 TEXTAREA
14 NESTED_ENTRY KiSystemStartup
15 PROLOG_END KiSystemStartup
16
17 //
18 // Put us in FIQ mode
19 //
20 b .
21 mrs r3, cpsr
22 orr r3, r1, #CPSR_FIQ_MODE
23 msr cpsr, r3
24
25 //
26 // Set FIQ stack and registers
27 //
28 ldr sp, [a2, #LpbInterruptStack]
29 mov r8, #0
30 mov r9, #0
31 mov r10, #0
32
33 //
34 // Put us in ABORT mode
35 //
36 mrs r3, cpsr
37 orr r3, r1, #CPSR_ABORT_MODE
38 msr cpsr, r3
39
40 //
41 // Set panic stack
42 //
43 ldr sp, [a2, #LpbPanicStack]
44
45 //
46 // Put us in UND (Undefined) mode
47 //
48 mrs r3, cpsr
49 orr r3, r1, #CPSR_UND_MODE
50 msr cpsr, r3
51
52 //
53 // Set panic stack
54 //
55 ldr sp, [a2, #LpbPanicStack]
56
57 //
58 // Put us into SVC (Supervisor) mode
59 //
60 mrs r3, cpsr
61 orr r3, r1, #CPSR_SVC_MODE
62 msr cpsr, r3
63
64 //
65 // Switch to boot kernel stack
66 //
67 ldr sp, [a2, #LpbKernelStack]
68
69 //
70 // Go to C code
71 //
72 b KiInitializeSystem
73
74 ENTRY_END KiSystemStartup