ReactOS 0.4.17-dev-1321-g5c122a9
ke.h
Go to the documentation of this file.
4/* Interrupt request levels */
5#define PASSIVE_LEVEL 0
6#define LOW_LEVEL 0
7#define APC_LEVEL 1
8#define DISPATCH_LEVEL 2
9#define CLOCK_LEVEL 13
10#define IPI_LEVEL 14
11#define DRS_LEVEL 14
12#define POWER_LEVEL 14
13#define PROFILE_LEVEL 15
14#define HIGH_LEVEL 15
15
16#define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
17#define SharedUserData ((KUSER_SHARED_DATA * const)KI_USER_SHARED_DATA)
18#define SharedTickCount (KI_USER_SHARED_DATA + 0x320)
19
20#define PAGE_SIZE 0x1000
21#define PAGE_SHIFT 12L
22
23#define PAUSE_PROCESSOR YieldProcessor();
24
25/* FIXME: Based on AMD64 but needed to compile apps */
26#define KERNEL_STACK_SIZE 12288
27#define KERNEL_LARGE_STACK_SIZE 61440
28#define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
29/* FIXME End */
30
31#define EXCEPTION_READ_FAULT 0
32#define EXCEPTION_WRITE_FAULT 1
33#define EXCEPTION_EXECUTE_FAULT 8
34
35#define KeQueryTickCount(CurrentCount) \
36 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
37
39VOID
41 VOID)
42{
45}
46
47#define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
48
55 VOID);
56
59VOID
63#define KeLowerIrql(a) KfLowerIrql(a)
64
73#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
74
81 VOID)
82{
84}
85
89{
90#ifdef CONFIG_SMP
91 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
92#else
93 return KfRaiseIrql(2); // SYNCH_LEVEL = DISPATCH_LEVEL
94#endif
95}
96
101
102#if (NTDDI_VERSION >= NTDDI_WIN7)
103/* KPRCB::Number, the PRCB starts at PCR offset 0x980 */
105ULONG
107{
108 return __readx18dword(0x9a4);
109}
110#endif
111
113VOID
114NTAPI
116 _In_ PMDL Mdl,
117 _In_ BOOLEAN ReadOperation,
118 _In_ BOOLEAN DmaOperation);
119
120#define DbgRaiseAssertionFailure() __break(0xf001)
121
123$if (_NTDDK_)
124
125#define ARM64_MAX_BREAKPOINTS 8
126#define ARM64_MAX_WATCHPOINTS 2
127
128#define CONTEXT_ARM64 0x400000L
129#define CONTEXT_CONTROL (CONTEXT_ARM64 | 0x00000001L)
130#define CONTEXT_INTEGER (CONTEXT_ARM64 | 0x00000002L)
131#define CONTEXT_FLOATING_POINT (CONTEXT_ARM64 | 0x00000004L)
132#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x00000008L)
133#define CONTEXT_X18 (CONTEXT_ARM64 | 0x00000010L)
134#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
135
136typedef union NEON128 {
137 struct {
141 double D[2];
142 float S[4];
143 USHORT H[8];
144 UCHAR B[16];
145} NEON128, *PNEON128;
147
148typedef struct _CONTEXT {
149
150 //
151 // Control flags.
152 //
153
155
156 //
157 // Integer registers
158 //
159
160 ULONG Cpsr;
161 union {
162 struct {
197
200
201 //
202 // Floating Point/NEON Registers
203 //
204
208
209 //
210 // Debug registers
211 //
212
217
219
220#define PCR_MINOR_VERSION 1
221#define PCR_MAJOR_VERSION 1
222
223typedef struct _KPCR
224{
225 _ANONYMOUS_UNION union
226 {
228 _ANONYMOUS_STRUCT struct
229 {
232 struct _KPCR *Self;
236 };
237 };
245 _ANONYMOUS_UNION union
246 {
248 _ANONYMOUS_STRUCT struct
249 {
252 };
253 };
255 _ANONYMOUS_UNION union
256 {
258 _ANONYMOUS_STRUCT struct
259 {
264 };
265 };
266 _ANONYMOUS_UNION union
267 {
269 _ANONYMOUS_STRUCT struct
270 {
276 };
277 };
279 _ANONYMOUS_UNION union
280 {
282 _ANONYMOUS_STRUCT struct
283 {
286 };
287 };
293
294/* x18 holds the PCR address in kernel mode */
296PKPCR
298{
299 return (PKPCR)__getReg(18);
300}
301
302#if (NTDDI_VERSION < NTDDI_WIN7) || !defined(NT_PROCESSOR_GROUPS)
304ULONG
306{
307 return __readx18dword(0x9a4);
308}
309#endif /* (NTDDI_VERSION < NTDDI_WIN7) || !defined(NT_PROCESSOR_GROUPS) */
310
311$endif
unsigned char BOOLEAN
Definition: actypes.h:127
#define NTSYSAPI
Definition: ntoskrnl.h:12
#define D(d)
Definition: builtin.c:4557
Definition: ehthrow.cxx:54
#define _IRQL_requires_max_(irql)
Definition: driverspecs.h:230
#define _IRQL_restores_
Definition: driverspecs.h:233
#define _IRQL_saves_
Definition: driverspecs.h:235
#define _IRQL_raises_(irql)
Definition: driverspecs.h:228
UCHAR KIRQL
Definition: env_spec_w32.h:591
#define KeGetCurrentIrql()
Definition: env_spec_w32.h:706
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
IN OUT PLONG IN OUT PLONG Addend IN OUT PLONG IN LONG IN OUT PLONG IN LONG Increment KeRaiseIrqlToDpcLevel
Definition: CrNtStubs.h:68
VOID FASTCALL KfLowerIrql(IN KIRQL NewIrql)
Definition: pic.c:232
KIRQL FASTCALL KfRaiseIrql(IN KIRQL NewIrql)
Definition: pic.c:187
#define KeGetCurrentThread
Definition: hal.h:55
#define __getReg(reg)
Definition: intrin_arm64.h:753
__INTRIN_INLINE unsigned long __readx18dword(unsigned long offset)
Definition: intrin_arm64.h:800
#define _ReadWriteBarrier()
Definition: intrin_arm.h:36
unsigned __int64 ULONG64
Definition: imports.h:198
#define H
#define KeGetPcr()
Definition: ketypes.h:81
#define _Notliteral_
Definition: no_sal2.h:402
#define _In_
Definition: no_sal2.h:158
#define FASTCALL
Definition: nt_native.h:50
#define _NTDDK_
#define NTHALAPI
Definition: ntoskrnl.h:40
#define DUMMYSTRUCTNAME
Definition: pecoff.h:117
#define _ANONYMOUS_UNION
Definition: pecoff.h:89
#define _ANONYMOUS_STRUCT
Definition: pecoff.h:115
unsigned short USHORT
Definition: pedump.c:61
#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
Definition: ke.h:174
FORCEINLINE ULONG KeGetCurrentProcessorNumber(VOID)
Definition: ke.h:341
FORCEINLINE ULONG KeGetCurrentProcessorIndex(VOID)
Definition: ke.h:162
FORCEINLINE KIRQL KeRaiseIrqlToSynchLevel(VOID)
Definition: ke.h:117
$if(_WDMDDK_) typedef struct _KFLOATING_SAVE
Definition: ke.h:1
struct _KPCR KPCR
#define HIGH_LEVEL
FORCEINLINE VOID KeMemoryBarrier(VOID)
Definition: ke.h:58
struct _KPCR * PKPCR
CONTEXT
Definition: ke.h:288
NEON128 NEON128
Definition: ke.h:146
#define ARM64_MAX_WATCHPOINTS
#define ARM64_MAX_BREAKPOINTS
struct _CONTEXT * PCONTEXT
$endif(_WDMDDK_) $if(_NTDDK_) typedef struct _NEON128
Definition: ke.h:202
NEON128
Definition: ke.h:229
* PNEON128
Definition: ke.h:229
#define MemoryBarrier()
Definition: ke.h:39
_Requires_lock_held_ SpinLock _Releases_lock_ SpinLock _In_ _IRQL_restores_ KIRQL NewIrql
Definition: ke.h:114
@ High
Definition: strmini.h:378
@ Low
Definition: strmini.h:380
Definition: movable.cpp:9
ULONG64 X27
Definition: ke.h:190
ULONG Wcr[ARM_MAX_WATCHPOINTS]
Definition: ke.h:288
struct _CONTEXT::@5074::@5075 DUMMYSTRUCTNAME
ULONG Cpsr
Definition: ke.h:272
ULONG64 Pc
Definition: ke.h:199
ULONG64 X0
Definition: ke.h:163
ULONG64 X23
Definition: ke.h:186
ULONG64 X4
Definition: ke.h:167
ULONG64 X22
Definition: ke.h:185
ULONG64 X15
Definition: ke.h:178
ULONG Wvr[ARM_MAX_WATCHPOINTS]
Definition: ke.h:287
ULONG64 X5
Definition: ke.h:168
ULONG64 X20
Definition: ke.h:183
ULONG64 X10
Definition: ke.h:173
ULONG64 X28
Definition: ke.h:191
ULONG64 X24
Definition: ke.h:187
ULONG ContextFlags
Definition: nt_native.h:1429
ULONG Bcr[ARM_MAX_BREAKPOINTS]
Definition: ke.h:286
ULONG64 X18
Definition: ke.h:181
ULONG64 Lr
Definition: ke.h:193
ULONG64 X14
Definition: ke.h:177
ULONG64 X26
Definition: ke.h:189
ULONG64 X6
Definition: ke.h:169
ULONG Fpcr
Definition: ke.h:206
ULONG64 X13
Definition: ke.h:176
ULONG64 X12
Definition: ke.h:175
ULONG64 X17
Definition: ke.h:180
ULONG Fpsr
Definition: ke.h:207
ULONG64 X1
Definition: ke.h:164
ULONG64 Sp
Definition: ke.h:198
ULONG64 X9
Definition: ke.h:172
ULONG64 X2
Definition: ke.h:165
ULONG64 X16
Definition: ke.h:179
ULONG64 X25
Definition: ke.h:188
ULONG64 X7
Definition: ke.h:170
ULONG Bvr[ARM_MAX_BREAKPOINTS]
Definition: ke.h:285
ULONG64 X3
Definition: ke.h:166
ULONG64 X11
Definition: ke.h:174
ULONG64 X19
Definition: ke.h:182
ULONG64 Fp
Definition: ke.h:192
union _CONTEXT::@5065 DUMMYUNIONNAME
ULONG64 X8
Definition: ke.h:171
ULONG64 X21
Definition: ke.h:184
Definition: ke.h:294
UCHAR DispatchInterrupt
Definition: ke.h:326
ULONG StallScaleFactor
Definition: ke.h:318
UCHAR ApcInterrupt
Definition: ke.h:325
UCHAR SsbMitigationReserved
Definition: ke.h:275
UCHAR BtiCswapHvc
Definition: ke.h:262
UCHAR KvaVbar
Definition: ke.h:260
PVOID Used_Self
Definition: ke.h:306
UCHAR BtiMitigation
Definition: ke.h:257
USHORT MinorVersion
Definition: ke.h:317
UCHAR CachePrefetcherMitigationFlags
Definition: ke.h:281
UCHAR BhbMitigation
Definition: ke.h:278
UCHAR SsbMitigationFlags
Definition: ke.h:268
UCHAR SsbMitigationUser
Definition: ke.h:274
UCHAR SsbMitigationDynamic
Definition: ke.h:272
UCHAR SecondLevelCacheAssociativity
Definition: ke.h:312
UCHAR SsbMitigationFirmware
Definition: ke.h:271
UCHAR SsbMitigationKernel
Definition: ke.h:273
UCHAR BtiCswapSmc
Definition: ke.h:263
ULONG SecondLevelCacheSize
Definition: ke.h:321
PVOID PcrReserved0
Definition: ke.h:233
PVOID Spare1
Definition: ke.h:304
USHORT SoftwareInterruptPending
Definition: ke.h:322
PVOID KdVersionBlock
Definition: ke.h:324
UCHAR BtiVbar
Definition: ke.h:261
PVOID KvaUserModeTtbr1
Definition: ke.h:291
UCHAR CachePrefetcherMitigation
Definition: ke.h:284
NT_TIB NtTib
Definition: ke.h:297
USHORT MajorVersion
Definition: ke.h:316
USHORT InterruptPad
Definition: ke.h:329
ULONG TibPad0[2]
Definition: ke.h:303
struct _KPCR * Self
Definition: ke.h:303
KIRQL CurrentIrql
Definition: ke.h:311
PKSPIN_LOCK_QUEUE LockArray
Definition: ke.h:305
UCHAR Pad1[2]
Definition: ke.h:240
ULONG HalReserved[16]
Definition: ke.h:322
ULONG64 PanicStorage[6]
Definition: ke.h:288
UCHAR Pad2
Definition: ke.h:285
unsigned char UCHAR
Definition: typedefs.h:53
int64_t LONGLONG
Definition: typedefs.h:68
#define NTAPI
Definition: typedefs.h:36
uint64_t ULONGLONG
Definition: typedefs.h:67
uint32_t ULONG
Definition: typedefs.h:59
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
#define FORCEINLINE
Definition: wdftypes.h:67
#define _WDMDDK_
Definition: wdm.template.h:26
#define NTKERNELAPI