Adding small hack to getting SetPixel color right when it is more that 3 bytes long.
[reactos.git] / reactos / include / ndk / powerpc / ketypes.h
1 /*++ NDK Version: 0095
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 ketypes.h (PPC)
8
9 Abstract:
10
11 PowerPC Type definitions for the Kernel services.
12
13 Author:
14
15 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
16
17 --*/
18
19 #ifndef _POWERPC_KETYPES_H
20 #define _POWERPC_KETYPES_H
21
22 //
23 // Dependencies
24 //
25
26 //
27 // IPI Types
28 //
29 #define IPI_APC 1
30 #define IPI_DPC 2
31 #define IPI_FREEZE 3
32 #define IPI_PACKET_READY 4
33 #define IPI_SYNCH_REQUEST 10
34
35 //
36 // Trap Frame Definition
37 //
38 typedef struct _KTRAP_FRAME
39 {
40 PVOID TrapFrame;
41 UCHAR OldIrql;
42 UCHAR PreviousMode;
43 UCHAR SavedApcStateIndex;
44 UCHAR SavedKernelApcDisable;
45 UCHAR ExceptionRecord[ROUND_UP(sizeof(EXCEPTION_RECORD), ULONGLONG];
46 ULONG FILL2;
47 ULONG Gpr0;
48 ULONG Gpr1;
49 ULONG Gpr2;
50 ULONG Gpr3;
51 ULONG Gpr4;
52 ULONG Gpr5;
53 ULONG Gpr6;
54 ULONG Gpr7;
55 ULONG Gpr8;
56 ULONG Gpr9;
57 ULONG Gpr10;
58 ULONG Gpr11;
59 ULONG Gpr12;
60 DOUBLE Fpr0;
61 DOUBLE Fpr1;
62 DOUBLE Fpr2;
63 DOUBLE Fpr3;
64 DOUBLE Fpr4;
65 DOUBLE Fpr5;
66 DOUBLE Fpr6;
67 DOUBLE Fpr7;
68 DOUBLE Fpr8;
69 DOUBLE Fpr9;
70 DOUBLE Fpr10;
71 DOUBLE Fpr11;
72 DOUBLE Fpr12;
73 DOUBLE Fpr13;
74 DOUBLE Fpscr;
75 ULONG Cr;
76 ULONG Xer;
77 ULONG Msr;
78 ULONG Iar;
79 ULONG Lr;
80 ULONG Ctr;
81 ULONG Dr0;
82 ULONG Dr1;
83 ULONG Dr2;
84 ULONG Dr3;
85 ULONG Dr4;
86 ULONG Dr5;
87 ULONG Dr6;
88 ULONG Dr7;
89 } KTRAP_FRAME, *PKTRAP_FRAME;
90
91 //
92 // Page Table Entry Definition
93 //
94 typedef struct _HARDWARE_PTE_PPC
95 {
96 ULONG Dirty:2;
97 ULONG Valid:1;
98 ULONG GuardedStorage:1;
99 ULONG MemoryCoherence:1;
100 ULONG CacheDisable:1;
101 ULONG WriteThrough:1;
102 ULONG Change:1;
103 ULONG Reference:1;
104 ULONG Write:1;
105 ULONG CopyOnWrite:1;
106 ULONG rsvd1:1;
107 ULONG PageFrameNumber:20;
108 } HARDWARE_PTE_PPC, *PHARDWARE_PTE_PPC;
109
110 typedef struct _DESCRIPTOR
111 {
112 USHORT Pad;
113 USHORT Limit;
114 ULONG Base;
115 } KDESCRIPTOR, *PKDESCRIPTOR;
116
117 //
118 // Special Registers Structure (outside of CONTEXT)
119 //
120 typedef struct _KSPECIAL_REGISTERS
121 {
122 ULONG KernelDr0;
123 ULONG KernelDr1;
124 ULONG KernelDr2;
125 ULONG KernelDr3;
126 ULONG KernelDr4;
127 ULONG KernelDr5;
128 ULONG KernelDr6;
129 ULONG KernelDr7;
130 ULONG Sprg0;
131 ULONG Sprg1;
132 ULONG Sr0;
133 ULONG Sr1;
134 ULONG Sr2;
135 ULONG Sr3;
136 ULONG Sr4;
137 ULONG Sr5;
138 ULONG Sr6;
139 ULONG Sr7;
140 ULONG Sr8;
141 ULONG Sr9;
142 ULONG Sr10;
143 ULONG Sr11;
144 ULONG Sr12;
145 ULONG Sr13;
146 ULONG Sr14;
147 ULONG Sr15;
148 ULONG DBAT0L;
149 ULONG DBAT0U;
150 ULONG DBAT1L;
151 ULONG DBAT1U;
152 ULONG DBAT2L;
153 ULONG DBAT2U;
154 ULONG DBAT3L;
155 ULONG DBAT3U;
156 ULONG IBAT0L;
157 ULONG IBAT0U;
158 ULONG IBAT1L;
159 ULONG IBAT1U;
160 ULONG IBAT2L;
161 ULONG IBAT2U;
162 ULONG IBAT3L;
163 ULONG IBAT3U;
164 ULONG Sdr1;
165 ULONG Reserved[9];
166 } KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;
167
168 //
169 // Processor State Data
170 //
171 #pragma pack(push,4)
172 typedef struct _KPROCESSOR_STATE
173 {
174 PCONTEXT ContextFrame;
175 KSPECIAL_REGISTERS SpecialRegisters;
176 } KPROCESSOR_STATE;
177
178 //
179 // Processor Region Control Block
180 //
181 typedef struct _KPRCB
182 {
183 USHORT MinorVersion;
184 USHORT MajorVersion;
185 struct _KTHREAD *CurrentThread;
186 struct _KTHREAD *NextThread;
187 struct _KTHREAD *IdleThread;
188 UCHAR Number;
189 UCHAR Reserved;
190 USHORT BuildType;
191 KAFFINITY SetMember;
192 UCHAR CpuType;
193 UCHAR CpuID;
194 USHORT CpuStep;
195 KPROCESSOR_STATE ProcessorState;
196 ULONG KernelReserved[16];
197 ULONG HalReserved[16];
198 UCHAR PrcbPad0[92];
199 PVOID LockQueue[33]; // Used for Queued Spinlocks
200 struct _KTHREAD *NpxThread;
201 ULONG InterruptCount;
202 ULONG KernelTime;
203 ULONG UserTime;
204 ULONG DpcTime;
205 ULONG DebugDpcTime;
206 ULONG InterruptTime;
207 ULONG AdjustDpcThreshold;
208 ULONG PageColor;
209 UCHAR SkipTick;
210 UCHAR DebuggerSavedIRQL;
211 UCHAR Spare1[6];
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;
230 ULONG KeSystemCalls;
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];
241 ULONG PacketBarrier;
242 ULONG ReverseStall;
243 PVOID IpiFrame;
244 UCHAR PrcbPad2[52];
245 PVOID CurrentPacket[3];
246 ULONG TargetSet;
247 ULONG_PTR WorkerRoutine;
248 ULONG IpiFrozen;
249 UCHAR PrcbPad3[40];
250 ULONG RequestSummary;
251 struct _KPRCB *SignalDone;
252 UCHAR PrcbPad4[56];
253 struct _KDPC_DATA DpcData[2];
254 PVOID DpcStack;
255 ULONG MaximumDpcQueueDepth;
256 ULONG DpcRequestRate;
257 ULONG MinimumDpcRate;
258 UCHAR DpcInterruptRequested;
259 UCHAR DpcThreadRequested;
260 UCHAR DpcRoutineActive;
261 UCHAR DpcThreadActive;
262 ULONG PrcbLock;
263 ULONG DpcLastCount;
264 ULONG TimerHand;
265 ULONG TimerRequest;
266 PVOID DpcThread;
267 struct _KEVENT *DpcEvent;
268 UCHAR ThreadDpcEnable;
269 BOOLEAN QuantumEnd;
270 UCHAR PrcbPad50;
271 UCHAR IdleSchedule;
272 ULONG DpcSetEventRequest;
273 UCHAR PrcbPad5[18];
274 LONG TickOffset;
275 struct _KDPC* CallDpc;
276 ULONG PrcbPad7[8];
277 LIST_ENTRY WaitListHead;
278 ULONG ReadySummary;
279 ULONG SelectNextLast;
280 LIST_ENTRY DispatcherReadyListHead[32];
281 SINGLE_LIST_ENTRY DeferredReadyListHead;
282 ULONG PrcbPad72[11];
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;
293 LONG MmCacheIoCount;
294 LONG MmDirtyPagesWriteCount;
295 LONG MmDirtyWriteIoCount;
296 LONG MmMappedPagesWriteCount;
297 LONG MmMappedWriteIoCount;
298 ULONG SpareFields0[1];
299 CHAR VendorString[13];
300 UCHAR InitialApicId;
301 UCHAR LogicalProcessorsPerPhysicalProcessor;
302 ULONG MHz;
303 ULONG FeatureBits;
304 LARGE_INTEGER UpdateSignature;
305 LARGE_INTEGER IsrTime;
306 LARGE_INTEGER SpareField1;
307 FX_SAVE_AREA NpxSaveArea;
308 PROCESSOR_POWER_STATE PowerState;
309 } KPRCB, *PKPRCB;
310
311 //
312 // Processor Control Region
313 //
314 typedef struct _KIPCR
315 {
316 USHORT MinorVersion;
317 USHORT MajorVersion;
318 PKINTERRUPT_ROUTINE InterruptRoutine[MAXIMUM_VECTOR];
319 ULONG PcrPage2;
320 ULONG Kseg0Top;
321 ULONG Spare7[30];
322 ULONG FirstLevelDcacheSize;
323 ULONG FirstLevelDcacheFillSize;
324 ULONG FirstLevelIcacheSize;
325 ULONG FirstLevelIcacheFillSize;
326 ULONG SecondLevelDcacheSize;
327 ULONG SecondLevelDcacheFillSize;
328 ULONG SecondLevelIcacheSize;
329 ULONG SecondLevelIcacheFillSize;
330 struct _KPRCB *Prcb;
331 PVOID Teb;
332 ULONG DcacheAlignment;
333 ULONG DcacheFillSize;
334 ULONG IcacheAlignment;
335 ULONG IcacheFillSize;
336 ULONG ProcessorVersion;
337 ULONG ProcessorRevision;
338 ULONG ProfileInterval;
339 ULONG ProfileCount;
340 ULONG StallExecutionCount;
341 ULONG StallScaleFactor;
342 ULONG Spare;
343 union
344 {
345 ULONG CachePolicy;
346 struct
347 {
348 UCHAR IcacheMode;
349 UCHAR DcacheMode;
350 USHORT ModeSpare;
351 };
352 };
353 UCHAR IrqlMask[32];
354 UCHAR IrqlTable[9];
355 UCHAR CurrentIrql;
356 CCHAR Number;
357 KAFFINITY SetMember;
358 ULONG ReservedVectors;
359 struct _KTHREAD *CurrentThread;
360 ULONG AlignedCachePolicy;
361 union
362 {
363 ULONG SoftwareInterrupt;
364 struct
365 {
366 UCHAR ApcInterrupt;
367 UCHAR DispatchInterrupt;
368 UCHAR Spare4;
369 UCHAR Spare5;
370 };
371 };
372 KAFFINITY NotMember;
373 ULONG SystemReserved[16];
374 ULONG HalReserved[16];
375 ULONG FirstLevelActive;
376 ULONG SystemServiceDispatchStart;
377 ULONG SystemServiceDispatchEnd;
378 ULONG InterruptStack;
379 ULONG QuantumEnd;
380 PVOID InitialStack;
381 PVOID PanicStack;
382 ULONG BadVaddr;
383 PVOID StackLimit;
384 PVOID SavedStackLimit;
385 ULONG SavedV0;
386 ULONG SavedV1;
387 UCHAR DebugActive;
388 UCHAR Spare6[3];
389 ULONG GprSave[6];
390 ULONG SiR0;
391 ULONG SiR2;
392 ULONG SiR3;
393 ULONG SiR4;
394 ULONG SiR5;
395 ULONG Spare0;
396 ULONG Spare8;
397 ULONG PgDirRa;
398 ULONG OnInterruptStack;
399 ULONG SavedInitialStack;
400 } KIPCR, *PKIPCR;
401 #pragma pack(pop)
402
403 //
404 // TSS Definition
405 //
406 typedef struct _KTSS, KTSS, *PKTSS;
407
408 //
409 // PowerPC Exception Frame
410 //
411 typedef struct _KEXCEPTION_FRAME
412 {
413 ULONG Fill1;
414 ULONG Gpr13;
415 ULONG Gpr14;
416 ULONG Gpr15;
417 ULONG Gpr16;
418 ULONG Gpr17;
419 ULONG Gpr18;
420 ULONG Gpr19;
421 ULONG Gpr20;
422 ULONG Gpr21;
423 ULONG Gpr22;
424 ULONG Gpr23;
425 ULONG Gpr24;
426 ULONG Gpr25;
427 ULONG Gpr26;
428 ULONG Gpr27;
429 ULONG Gpr28;
430 ULONG Gpr29;
431 ULONG Gpr30;
432 ULONG Gpr31;
433 DOUBLE Fpr14;
434 DOUBLE Fpr15;
435 DOUBLE Fpr16;
436 DOUBLE Fpr17;
437 DOUBLE Fpr18;
438 DOUBLE Fpr19;
439 DOUBLE Fpr20;
440 DOUBLE Fpr21;
441 DOUBLE Fpr22;
442 DOUBLE Fpr23;
443 DOUBLE Fpr24;
444 DOUBLE Fpr25;
445 DOUBLE Fpr26;
446 DOUBLE Fpr27;
447 DOUBLE Fpr28;
448 DOUBLE Fpr29;
449 DOUBLE Fpr30;
450 DOUBLE Fpr31;
451 } KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
452
453 #endif