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 0x64
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
79 UCHAR ExceptionRecord
[(sizeof(EXCEPTION_RECORD
) + 7) & (~7)];
86 } KTRAP_FRAME
, *PKTRAP_FRAME
;
88 #ifndef NTOS_MODE_USER
91 // Exception Frame Definition
93 typedef struct _KEXCEPTION_FRAME
96 } KEXCEPTION_FRAME
, *PKEXCEPTION_FRAME
;
101 typedef struct _KPROCESSOR_STATE
103 struct _CONTEXT ContextFrame
;
104 } KPROCESSOR_STATE
, *PKPROCESSOR_STATE
;
107 // Processor Region Control Block
109 typedef struct _KPRCB
113 struct _KTHREAD
*CurrentThread
;
114 struct _KTHREAD
*NextThread
;
115 struct _KTHREAD
*IdleThread
;
120 KPROCESSOR_STATE ProcessorState
;
121 ULONG KernelReserved
[16];
122 ULONG HalReserved
[16];
123 KSPIN_LOCK_QUEUE LockQueue
[LockQueueMaximumLock
];
124 struct _KTHREAD
*NpxThread
;
125 ULONG InterruptCount
;
131 ULONG AdjustDpcThreshold
;
134 UCHAR DebuggerSavedIRQL
;
137 ULONG NodeShiftedColor
;
138 struct _KNODE
*ParentNode
;
139 ULONG MultiThreadProcessorSet
;
140 struct _KPRCB
*MultiThreadSetMaster
;
141 ULONG SecondaryColorMask
;
143 ULONG CcFastReadNoWait
;
144 ULONG CcFastReadWait
;
145 ULONG CcFastReadNotPossible
;
146 ULONG CcCopyReadNoWait
;
147 ULONG CcCopyReadWait
;
148 ULONG CcCopyReadNoWaitMiss
;
149 ULONG KeAlignmentFixupCount
;
151 ULONG KeDcacheFlushCount
;
152 ULONG KeExceptionDispatchCount
;
153 ULONG KeFirstLevelTbFills
;
154 ULONG KeIcacheFlushCount
;
155 ULONG KeSecondLevelTbFills
;
157 volatile ULONG IoReadOperationCount
;
158 volatile ULONG IoWriteOperationCount
;
159 volatile ULONG IoOtherOperationCount
;
160 LARGE_INTEGER IoReadTransferCount
;
161 LARGE_INTEGER IoWriteTransferCount
;
162 LARGE_INTEGER IoOtherTransferCount
;
163 PP_LOOKASIDE_LIST PPLookasideList
[16];
164 PP_LOOKASIDE_LIST PPNPagedLookasideList
[32];
165 PP_LOOKASIDE_LIST PPPagedLookasideList
[32];
166 volatile ULONG PacketBarrier
;
167 volatile ULONG ReverseStall
;
169 volatile PVOID CurrentPacket
[3];
170 volatile ULONG TargetSet
;
171 volatile PKIPI_WORKER WorkerRoutine
;
172 volatile ULONG IpiFrozen
;
173 volatile ULONG RequestSummary
;
174 volatile struct _KPRCB
*SignalDone
;
175 struct _KDPC_DATA DpcData
[2];
177 ULONG MaximumDpcQueueDepth
;
178 ULONG DpcRequestRate
;
179 ULONG MinimumDpcRate
;
180 volatile UCHAR DpcInterruptRequested
;
181 volatile UCHAR DpcThreadRequested
;
182 volatile UCHAR DpcRoutineActive
;
183 volatile UCHAR DpcThreadActive
;
186 volatile ULONG TimerHand
;
187 volatile ULONG TimerRequest
;
190 UCHAR ThreadDpcEnable
;
191 volatile BOOLEAN QuantumEnd
;
192 volatile UCHAR IdleSchedule
;
193 LONG DpcSetEventRequest
;
196 LIST_ENTRY WaitListHead
;
199 LIST_ENTRY DispatcherReadyListHead
[32];
200 SINGLE_LIST_ENTRY DeferredReadyListHead
;
201 PVOID ChainedInterruptList
;
202 LONG LookasideIrpFloat
;
203 volatile LONG MmPageFaultCount
;
204 volatile LONG MmCopyOnWriteCount
;
205 volatile LONG MmTransitionCount
;
206 volatile LONG MmCacheTransitionCount
;
207 volatile LONG MmDemandZeroCount
;
208 volatile LONG MmPageReadCount
;
209 volatile LONG MmPageReadIoCount
;
210 volatile LONG MmCacheReadCount
;
211 volatile LONG MmCacheIoCount
;
212 volatile LONG MmDirtyPagesWriteCount
;
213 volatile LONG MmDirtyWriteIoCount
;
214 volatile LONG MmMappedPagesWriteCount
;
215 volatile LONG MmMappedWriteIoCount
;
216 CHAR VendorString
[13];
219 volatile LARGE_INTEGER IsrTime
;
220 PROCESSOR_POWER_STATE PowerState
;
224 // Macro to get current KPRCB
228 KeGetCurrentPrcb(VOID
)
234 // Macro to get current CPU
239 KeGetCurrentProcessorNumber(VOID
)