We now have a good initialization routine for ARM. We call HalInitializeProcessor...
[reactos.git] / reactos / ntoskrnl / include / internal / arm / ke.h
1 #ifndef __NTOSKRNL_INCLUDE_INTERNAL_ARM_KE_H
2 #define __NTOSKRNL_INCLUDE_INTERNAL_ARM_KE_H
3
4 #if __GNUC__ >=3
5 #pragma GCC system_header
6 #endif
7
8
9 //
10 //Lockdown TLB entries
11 //
12 #define PCR_ENTRY 0
13 #define PDR_ENTRY 2
14
15 #define KeArchHaltProcessor() KeArmHaltProcessor()
16
17 typedef union _ARM_TTB_REGISTER
18 {
19 struct
20 {
21 ULONG Reserved:14;
22 ULONG BaseAddress:18;
23 };
24 ULONG AsUlong;
25 } ARM_TTB_REGISTER;
26
27 typedef union _ARM_DOMAIN_REGISTER
28 {
29 struct
30 {
31 ULONG Domain0:2;
32 ULONG Domain1:2;
33 ULONG Domain2:2;
34 ULONG Domain3:2;
35 ULONG Domain4:2;
36 ULONG Domain5:2;
37 ULONG Domain6:2;
38 ULONG Domain7:2;
39 ULONG Domain8:2;
40 ULONG Domain9:2;
41 ULONG Domain10:2;
42 ULONG Domain11:2;
43 ULONG Domain12:2;
44 ULONG Domain13:2;
45 ULONG Domain14:2;
46 ULONG Domain15:2;
47 };
48 ULONG AsUlong;
49 } ARM_DOMAIN_REGISTER;
50
51 typedef union _ARM_CONTROL_REGISTER
52 {
53 struct
54 {
55 ULONG MmuEnabled:1;
56 ULONG AlignmentFaultsEnabled:1;
57 ULONG DCacheEnabled:1;
58 ULONG Sbo:3;
59 ULONG BigEndianEnabled:1;
60 ULONG System:1;
61 ULONG Rom:1;
62 ULONG Sbz:2;
63 ULONG ICacheEnabled:1;
64 ULONG HighVectors:1;
65 ULONG RoundRobinReplacementEnabled:1;
66 ULONG Armv4Compat:1;
67 ULONG Sbo1:1;
68 ULONG Sbz1:1;
69 ULONG Sbo2:1;
70 ULONG Reserved:14;
71 };
72 ULONG AsUlong;
73 } ARM_CONTROL_REGISTER, *PARM_CONTROL_REGISTER;
74
75 typedef union _ARM_ID_CODE_REGISTER
76 {
77 struct
78 {
79 ULONG Revision:4;
80 ULONG PartNumber:12;
81 ULONG Architecture:4;
82 ULONG Variant:4;
83 ULONG Identifier:8;
84 };
85 ULONG AsUlong;
86 } ARM_ID_CODE_REGISTER, *PARM_ID_CODE_REGISTER;
87
88 typedef union _ARM_CACHE_REGISTER
89 {
90 struct
91 {
92 ULONG ILength:2;
93 ULONG IMultipler:1;
94 ULONG IAssociativty:3;
95 ULONG ISize:4;
96 ULONG IReserved:2;
97 ULONG DLength:2;
98 ULONG DMultipler:1;
99 ULONG DAssociativty:3;
100 ULONG DSize:4;
101 ULONG DReserved:2;
102 ULONG Separate:1;
103 ULONG CType:4;
104 ULONG Reserved:3;
105 };
106 ULONG AsUlong;
107 } ARM_CACHE_REGISTER, *PARM_CACHE_REGISTER;
108
109 typedef union _ARM_LOCKDOWN_REGISTER
110 {
111 struct
112 {
113 ULONG Preserve:1;
114 ULONG Ignored:25;
115 ULONG Victim:3;
116 ULONG Reserved:3;
117 };
118 ULONG AsUlong;
119 } ARM_LOCKDOWN_REGISTER, *PARM_LOCKDOWN_REGISTER;
120
121 typedef enum _ARM_DOMAINS
122 {
123 Domain0,
124 Domain1,
125 Domain2,
126 Domain3,
127 Domain4,
128 Domain5,
129 Domain6,
130 Domain7,
131 Domain8,
132 Domain9,
133 Domain10,
134 Domain11,
135 Domain12,
136 Domain13,
137 Domain14,
138 Domain15
139 } ARM_DOMAINS;
140
141 VOID
142 NTAPI
143 KeArmInitThreadWithContext(
144 IN PKTHREAD Thread,
145 IN PKSYSTEM_ROUTINE SystemRoutine,
146 IN PKSTART_ROUTINE StartRoutine,
147 IN PVOID StartContext,
148 IN PCONTEXT Context
149 );
150
151 VOID
152 KiPassiveRelease(
153 VOID
154
155 );
156
157 VOID
158 KiApcInterrupt(
159 VOID
160 );
161
162 #include "mm.h"
163
164 VOID
165 KeFillFixedEntryTb(
166 IN ARM_PTE Pte,
167 IN PVOID Virtual,
168 IN ULONG Index
169 );
170
171 VOID
172 KeFlushTb(
173 VOID
174 );
175
176 #define KeArchInitThreadWithContext KeArmInitThreadWithContext
177
178 #endif