27a4938e1deb6bcd7cffda61bf3f4904247f795a
[reactos.git] / reactos / ntoskrnl / ke / arm / boot.s
1 /*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL - See COPYING 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 mrs r3, cpsr
21 orr r3, r1, #CPSR_FIQ_MODE
22 msr cpsr, r3
23
24 //
25 // Set FIQ stack and registers
26 //
27 ldr sp, [a2, #LpbInterruptStack]
28 mov r8, #0
29 mov r9, #0
30 mov r10, #0
31
32 //
33 // Put us in ABORT mode
34 //
35 mrs r3, cpsr
36 orr r3, r1, #CPSR_ABORT_MODE
37 msr cpsr, r3
38
39 //
40 // Set panic stack
41 //
42 ldr sp, [a2, #LpbPanicStack]
43
44 //
45 // Put us in UND (Undefined) mode
46 //
47 mrs r3, cpsr
48 orr r3, r1, #CPSR_UND_MODE
49 msr cpsr, r3
50
51 //
52 // Set panic stack
53 //
54 ldr sp, [a2, #LpbPanicStack]
55
56 //
57 // Put us into SVC (Supervisor) mode
58 //
59 mrs r3, cpsr
60 orr r3, r1, #CPSR_SVC_MODE
61 msr cpsr, r3
62
63 //
64 // Switch to boot kernel stack
65 //
66 ldr sp, [a2, #LpbKernelStack]
67
68 //
69 // Go to C code
70 //
71 b KiInitializeSystem
72
73 ENTRY_END KiSystemStartup