3 Copyright (c) Alex Ionescu. All rights reserved.
11 PowerPC Type definitions for the Kernel services.
15 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
19 #ifndef _POWERPC_KETYPES_H
20 #define _POWERPC_KETYPES_H
32 #define IPI_PACKET_READY 4
33 #define IPI_SYNCH_REQUEST 10
36 // Trap Frame Definition
38 typedef struct _KTRAP_FRAME
43 UCHAR SavedApcStateIndex
;
44 UCHAR SavedKernelApcDisable
;
45 UCHAR ExceptionRecord
[ROUND_UP(sizeof(EXCEPTION_RECORD
), ULONGLONG
];
89 } KTRAP_FRAME
, *PKTRAP_FRAME
;
92 // Page Table Entry Definition
94 typedef struct _HARDWARE_PTE_PPC
98 ULONG GuardedStorage
:1;
99 ULONG MemoryCoherence
:1;
100 ULONG CacheDisable
:1;
101 ULONG WriteThrough
:1;
107 ULONG PageFrameNumber
:20;
108 } HARDWARE_PTE_PPC
, *PHARDWARE_PTE_PPC
;
110 typedef struct _DESCRIPTOR
115 } KDESCRIPTOR
, *PKDESCRIPTOR
;
118 // Special Registers Structure (outside of CONTEXT)
120 typedef struct _KSPECIAL_REGISTERS
166 } KSPECIAL_REGISTERS
, *PKSPECIAL_REGISTERS
;
169 // Processor State Data
172 typedef struct _KPROCESSOR_STATE
174 PCONTEXT ContextFrame
;
175 KSPECIAL_REGISTERS SpecialRegisters
;
179 // Processor Region Control Block
181 typedef struct _KPRCB
185 struct _KTHREAD
*CurrentThread
;
186 struct _KTHREAD
*NextThread
;
187 struct _KTHREAD
*IdleThread
;
195 KPROCESSOR_STATE ProcessorState
;
196 ULONG KernelReserved
[16];
197 ULONG HalReserved
[16];
199 PVOID LockQueue
[33]; // Used for Queued Spinlocks
200 struct _KTHREAD
*NpxThread
;
201 ULONG InterruptCount
;
207 ULONG AdjustDpcThreshold
;
210 UCHAR DebuggerSavedIRQL
;
212 struct _KNODE
*ParentNode
;
213 ULONG MultiThreadProcessorSet
;
214 struct _KPRCB
*MultiThreadSetMaster
;
215 ULONG ThreadStartCount
[2];
216 ULONG CcFastReadNoWait
;
217 ULONG CcFastReadWait
;
218 ULONG CcFastReadNotPossible
;
219 ULONG CcCopyReadNoWait
;
220 ULONG CcCopyReadWait
;
221 ULONG CcCopyReadNoWaitMiss
;
222 ULONG KeAlignmentFixupCount
;
223 ULONG KeContextSwitches
;
224 ULONG KeDcacheFlushCount
;
225 ULONG KeExceptionDispatchCount
;
226 ULONG KeFirstLevelTbFills
;
227 ULONG KeFloatingEmulationCount
;
228 ULONG KeIcacheFlushCount
;
229 ULONG KeSecondLevelTbFills
;
231 ULONG IoReadOperationCount
;
232 ULONG IoWriteOperationCount
;
233 ULONG IoOtherOperationCount
;
234 LARGE_INTEGER IoReadTransferCount
;
235 LARGE_INTEGER IoWriteTransferCount
;
236 LARGE_INTEGER IoOtherTransferCount
;
237 ULONG SpareCounter1
[8];
238 PP_LOOKASIDE_LIST PPLookasideList
[16];
239 PP_LOOKASIDE_LIST PPNPagedLookasideList
[32];
240 PP_LOOKASIDE_LIST PPPagedLookasideList
[32];
245 PVOID CurrentPacket
[3];
247 ULONG_PTR WorkerRoutine
;
250 ULONG RequestSummary
;
251 struct _KPRCB
*SignalDone
;
253 struct _KDPC_DATA DpcData
[2];
255 ULONG MaximumDpcQueueDepth
;
256 ULONG DpcRequestRate
;
257 ULONG MinimumDpcRate
;
258 UCHAR DpcInterruptRequested
;
259 UCHAR DpcThreadRequested
;
260 UCHAR DpcRoutineActive
;
261 UCHAR DpcThreadActive
;
267 struct _KEVENT
*DpcEvent
;
268 UCHAR ThreadDpcEnable
;
272 ULONG DpcSetEventRequest
;
275 struct _KDPC
* CallDpc
;
277 LIST_ENTRY WaitListHead
;
279 ULONG SelectNextLast
;
280 LIST_ENTRY DispatcherReadyListHead
[32];
281 SINGLE_LIST_ENTRY DeferredReadyListHead
;
283 PVOID ChainedInterruptList
;
284 LONG LookasideIrpFloat
;
285 LONG MmPageFaultCount
;
286 LONG MmCopyOnWriteCount
;
287 LONG MmTransitionCount
;
288 LONG MmCacheTransitionCount
;
289 LONG MmDemandZeroCount
;
290 LONG MmPageReadCount
;
291 LONG MmPageReadIoCount
;
292 LONG MmCacheReadCount
;
294 LONG MmDirtyPagesWriteCount
;
295 LONG MmDirtyWriteIoCount
;
296 LONG MmMappedPagesWriteCount
;
297 LONG MmMappedWriteIoCount
;
298 ULONG SpareFields0
[1];
299 CHAR VendorString
[13];
301 UCHAR LogicalProcessorsPerPhysicalProcessor
;
304 LARGE_INTEGER UpdateSignature
;
305 LARGE_INTEGER IsrTime
;
306 LARGE_INTEGER SpareField1
;
307 FX_SAVE_AREA NpxSaveArea
;
308 PROCESSOR_POWER_STATE PowerState
;
312 // Processor Control Region
314 typedef struct _KIPCR
318 PKINTERRUPT_ROUTINE InterruptRoutine
[MAXIMUM_VECTOR
];
322 ULONG FirstLevelDcacheSize
;
323 ULONG FirstLevelDcacheFillSize
;
324 ULONG FirstLevelIcacheSize
;
325 ULONG FirstLevelIcacheFillSize
;
326 ULONG SecondLevelDcacheSize
;
327 ULONG SecondLevelDcacheFillSize
;
328 ULONG SecondLevelIcacheSize
;
329 ULONG SecondLevelIcacheFillSize
;
332 ULONG DcacheAlignment
;
333 ULONG DcacheFillSize
;
334 ULONG IcacheAlignment
;
335 ULONG IcacheFillSize
;
336 ULONG ProcessorVersion
;
337 ULONG ProcessorRevision
;
338 ULONG ProfileInterval
;
340 ULONG StallExecutionCount
;
341 ULONG StallScaleFactor
;
358 ULONG ReservedVectors
;
359 struct _KTHREAD
*CurrentThread
;
360 ULONG AlignedCachePolicy
;
363 ULONG SoftwareInterrupt
;
367 UCHAR DispatchInterrupt
;
373 ULONG SystemReserved
[16];
374 ULONG HalReserved
[16];
375 ULONG FirstLevelActive
;
376 ULONG SystemServiceDispatchStart
;
377 ULONG SystemServiceDispatchEnd
;
378 ULONG InterruptStack
;
384 PVOID SavedStackLimit
;
398 ULONG OnInterruptStack
;
399 ULONG SavedInitialStack
;
406 typedef struct _KTSS
, KTSS
, *PKTSS
;
409 // PowerPC Exception Frame
411 typedef struct _KEXCEPTION_FRAME
451 } KEXCEPTION_FRAME
, *PKEXCEPTION_FRAME
;