3 Copyright (c) Alex Ionescu. All rights reserved.
11 ARM Type definitions for the Kernel services.
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
19 #ifndef _ARM_KETYPES_H
20 #define _ARM_KETYPES_H
32 #define IPI_PACKET_READY 8
33 #define IPI_SYNCH_REQUEST 16
38 #define PRCB_MAJOR_VERSION 1
39 #define PRCB_BUILD_DEBUG 1
40 #define PRCB_BUILD_UNIPROCESSOR 2
45 #define LDT_ENTRY ULONG
50 #define INITIAL_STALL_COUNT 100
53 // Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual)
55 #define KSEG0_BASE 0x80000000
58 // Trap Frame Definition
60 typedef struct _KTRAP_FRAME
84 ULONG PreviousTrapFrame
;
85 } KTRAP_FRAME
, *PKTRAP_FRAME
;
88 // Defines the Callback Stack Layout for User Mode Callbacks
90 // Just a stub with some required members for now
92 typedef struct _KCALLOUT_FRAME
95 ULONG DummyFramePointer
;
96 } KCALLOUT_FRAME
, *PKCALLOUT_FRAME
;
98 #ifndef NTOS_MODE_USER
101 // Exception Frame Definition
103 typedef struct _KEXCEPTION_FRAME
120 } KEXCEPTION_FRAME
, *PKEXCEPTION_FRAME
;
123 // ARM Internal Registers
125 typedef union _ARM_TTB_REGISTER
130 ULONG BaseAddress
:18;
135 typedef union _ARM_STATUS_REGISTER
144 ULONG ImpreciseAbort
:1;
147 ULONG GreaterEqual
:4;
151 ULONG StickyOverflow
:1;
153 ULONG CarryBorrowExtend
:1;
155 ULONG NegativeLessThan
:1;
158 } ARM_STATUS_REGISTER
;
160 typedef union _ARM_DOMAIN_REGISTER
182 } ARM_DOMAIN_REGISTER
;
184 typedef union _ARM_CONTROL_REGISTER
189 ULONG AlignmentFaultsEnabled
:1;
190 ULONG DCacheEnabled
:1;
192 ULONG BigEndianEnabled
:1;
196 ULONG ICacheEnabled
:1;
198 ULONG RoundRobinReplacementEnabled
:1;
206 } ARM_CONTROL_REGISTER
, *PARM_CONTROL_REGISTER
;
208 typedef union _ARM_ID_CODE_REGISTER
214 ULONG Architecture
:4;
219 } ARM_ID_CODE_REGISTER
, *PARM_ID_CODE_REGISTER
;
221 typedef union _ARM_CACHE_REGISTER
227 ULONG IAssociativty
:3;
232 ULONG DAssociativty
:3;
240 } ARM_CACHE_REGISTER
, *PARM_CACHE_REGISTER
;
242 typedef union _ARM_LOCKDOWN_REGISTER
252 } ARM_LOCKDOWN_REGISTER
, *PARM_LOCKDOWN_REGISTER
;
257 typedef enum _ARM_DOMAINS
278 // Special Registers Structure (outside of CONTEXT)
280 typedef struct _KSPECIAL_REGISTERS
282 ARM_CONTROL_REGISTER ControlRegister
;
283 ARM_LOCKDOWN_REGISTER LockdownRegister
;
284 ARM_CACHE_REGISTER CacheRegister
;
285 ARM_STATUS_REGISTER StatusRegister
;
286 } KSPECIAL_REGISTERS
, *PKSPECIAL_REGISTERS
;
291 typedef struct _KPROCESSOR_STATE
293 struct _CONTEXT ContextFrame
;
294 struct _KSPECIAL_REGISTERS SpecialRegisters
;
295 } KPROCESSOR_STATE
, *PKPROCESSOR_STATE
;
298 // Processor Region Control Block
300 typedef struct _KPRCB
304 struct _KTHREAD
*CurrentThread
;
305 struct _KTHREAD
*NextThread
;
306 struct _KTHREAD
*IdleThread
;
311 KPROCESSOR_STATE ProcessorState
;
312 ULONG KernelReserved
[16];
313 ULONG HalReserved
[16];
314 KSPIN_LOCK_QUEUE LockQueue
[LockQueueMaximumLock
];
315 struct _KTHREAD
*NpxThread
;
316 ULONG InterruptCount
;
322 ULONG AdjustDpcThreshold
;
325 UCHAR DebuggerSavedIRQL
;
328 ULONG NodeShiftedColor
;
330 struct _KNODE
*ParentNode
;
331 ULONG MultiThreadProcessorSet
;
332 struct _KPRCB
*MultiThreadSetMaster
;
333 ULONG SecondaryColorMask
;
335 ULONG CcFastReadNoWait
;
336 ULONG CcFastReadWait
;
337 ULONG CcFastReadNotPossible
;
338 ULONG CcCopyReadNoWait
;
339 ULONG CcCopyReadWait
;
340 ULONG CcCopyReadNoWaitMiss
;
341 ULONG KeAlignmentFixupCount
;
343 ULONG KeDcacheFlushCount
;
344 ULONG KeExceptionDispatchCount
;
345 ULONG KeFirstLevelTbFills
;
346 ULONG KeIcacheFlushCount
;
347 ULONG KeSecondLevelTbFills
;
349 volatile ULONG IoReadOperationCount
;
350 volatile ULONG IoWriteOperationCount
;
351 volatile ULONG IoOtherOperationCount
;
352 LARGE_INTEGER IoReadTransferCount
;
353 LARGE_INTEGER IoWriteTransferCount
;
354 LARGE_INTEGER IoOtherTransferCount
;
355 ULONG KeContextSwitches
;
356 PP_LOOKASIDE_LIST PPLookasideList
[16];
357 PP_LOOKASIDE_LIST PPNPagedLookasideList
[32];
358 PP_LOOKASIDE_LIST PPPagedLookasideList
[32];
359 volatile ULONG PacketBarrier
;
360 volatile ULONG ReverseStall
;
362 volatile PVOID CurrentPacket
[3];
363 volatile ULONG TargetSet
;
364 volatile PKIPI_WORKER WorkerRoutine
;
365 volatile ULONG IpiFrozen
;
366 volatile ULONG RequestSummary
;
367 volatile struct _KPRCB
*SignalDone
;
368 struct _KDPC_DATA DpcData
[2];
370 ULONG MaximumDpcQueueDepth
;
371 ULONG DpcRequestRate
;
372 ULONG MinimumDpcRate
;
373 volatile UCHAR DpcInterruptRequested
;
374 volatile UCHAR DpcThreadRequested
;
375 volatile UCHAR DpcRoutineActive
;
376 volatile UCHAR DpcThreadActive
;
379 volatile ULONG TimerHand
;
380 volatile ULONG TimerRequest
;
383 UCHAR ThreadDpcEnable
;
384 volatile BOOLEAN QuantumEnd
;
385 volatile UCHAR IdleSchedule
;
386 LONG DpcSetEventRequest
;
389 LIST_ENTRY WaitListHead
;
392 LIST_ENTRY DispatcherReadyListHead
[32];
393 SINGLE_LIST_ENTRY DeferredReadyListHead
;
394 PVOID ChainedInterruptList
;
395 LONG LookasideIrpFloat
;
396 volatile LONG MmPageFaultCount
;
397 volatile LONG MmCopyOnWriteCount
;
398 volatile LONG MmTransitionCount
;
399 volatile LONG MmCacheTransitionCount
;
400 volatile LONG MmDemandZeroCount
;
401 volatile LONG MmPageReadCount
;
402 volatile LONG MmPageReadIoCount
;
403 volatile LONG MmCacheReadCount
;
404 volatile LONG MmCacheIoCount
;
405 volatile LONG MmDirtyPagesWriteCount
;
406 volatile LONG MmDirtyWriteIoCount
;
407 volatile LONG MmMappedPagesWriteCount
;
408 volatile LONG MmMappedWriteIoCount
;
409 CHAR VendorString
[13];
412 volatile LARGE_INTEGER IsrTime
;
413 PROCESSOR_POWER_STATE PowerState
;
417 // Macro to get current KPRCB
421 KeGetCurrentPrcb(VOID
)