Changes to suit addition of a single macro in the types header.
[reactos.git] / reactos / include / ddk / ketypes.h
1 /* KERNEL TYPES **************************************************************/
2
3 #ifndef __INCLUDE_DDK_KETYPES_H
4 #define __INCLUDE_DDK_KETYPES_H
5
6 #define MB_FLAGS_MEM_INFO (0x1)
7 #define MB_FLAGS_BOOT_DEVICE (0x2)
8 #define MB_FLAGS_COMMAND_LINE (0x4)
9 #define MB_FLAGS_MODULE_INFO (0x8)
10 #define MB_FLAGS_AOUT_SYMS (0x10)
11 #define MB_FLAGS_ELF_SYMS (0x20)
12 #define MB_FLAGS_MMAP_INFO (0x40)
13 #define MB_FLAGS_DRIVES_INFO (0x80)
14 #define MB_FLAGS_CONFIG_TABLE (0x100)
15 #define MB_FLAGS_BOOT_LOADER_NAME (0x200)
16 #define MB_FLAGS_APM_TABLE (0x400)
17 #define MB_FLAGS_GRAPHICS_TABLE (0x800)
18
19 typedef struct _LOADER_MODULE
20 {
21 ULONG ModStart;
22 ULONG ModEnd;
23 ULONG String;
24 ULONG Reserved;
25 } LOADER_MODULE, *PLOADER_MODULE;
26
27 typedef struct _ADDRESS_RANGE
28 {
29 ULONG BaseAddrLow;
30 ULONG BaseAddrHigh;
31 ULONG LengthLow;
32 ULONG LengthHigh;
33 ULONG Type;
34 } ADDRESS_RANGE, *PADDRESS_RANGE;
35
36 typedef struct _LOADER_PARAMETER_BLOCK
37 {
38 ULONG Flags;
39 ULONG MemLower;
40 ULONG MemHigher;
41 ULONG BootDevice;
42 ULONG CommandLine;
43 ULONG ModsCount;
44 ULONG ModsAddr;
45 UCHAR Syms[12];
46 ULONG MmapLength;
47 ULONG MmapAddr;
48 ULONG DrivesCount;
49 ULONG DrivesAddr;
50 ULONG ConfigTable;
51 ULONG BootLoaderName;
52 } LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;
53
54 #ifdef __NTOSKRNL__
55 extern CHAR EXPORTED KeNumberProcessors;
56 extern LOADER_PARAMETER_BLOCK EXPORTED KeLoaderBlock;
57 extern ULONG EXPORTED KeDcacheFlushCount;
58 extern ULONG EXPORTED KeIcacheFlushCount;
59 #else
60 extern CHAR IMPORTED KeNumberProcessors;
61 extern LOADER_PARAMETER_BLOCK IMPORTED KeLoaderBlock;
62 extern ULONG EXPORTED KeDcacheFlushCount;
63 extern ULONG EXPORTED KeIcacheFlushCount;
64 #endif
65
66
67
68 struct _KMUTANT;
69
70 typedef LONG KPRIORITY;
71
72 typedef VOID STDCALL_FUNC
73 (*PKBUGCHECK_CALLBACK_ROUTINE)(PVOID Buffer, ULONG Length);
74
75 typedef BOOLEAN STDCALL_FUNC
76 (*PKSYNCHRONIZE_ROUTINE)(PVOID SynchronizeContext);
77
78 struct _KAPC;
79
80 typedef VOID STDCALL_FUNC
81 (*PKNORMAL_ROUTINE)(PVOID NormalContext,
82 PVOID SystemArgument1,
83 PVOID SystemArgument2);
84
85 typedef VOID STDCALL_FUNC
86 (*PKKERNEL_ROUTINE)(struct _KAPC* Apc,
87 PKNORMAL_ROUTINE* NormalRoutine,
88 PVOID* NormalContext,
89 PVOID* SystemArgument1,
90 PVOID* SystemArgument2);
91
92 typedef VOID STDCALL_FUNC
93 (*PKRUNDOWN_ROUTINE)(struct _KAPC* Apc);
94
95 struct _DISPATCHER_HEADER;
96
97 typedef struct _KWAIT_BLOCK
98 /*
99 * PURPOSE: Object describing the wait a thread is currently performing
100 */
101 {
102 LIST_ENTRY WaitListEntry;
103 struct _KTHREAD* Thread;
104 struct _DISPATCHER_HEADER *Object;
105 struct _KWAIT_BLOCK* NextWaitBlock;
106 USHORT WaitKey;
107 USHORT WaitType;
108 } KWAIT_BLOCK, *PKWAIT_BLOCK;
109
110 typedef struct _DISPATCHER_HEADER
111 {
112 UCHAR Type;
113 UCHAR Absolute;
114 UCHAR Size;
115 UCHAR Inserted;
116 LONG SignalState;
117 LIST_ENTRY WaitListHead;
118 } __attribute__((packed)) DISPATCHER_HEADER, *PDISPATCHER_HEADER;
119
120
121 typedef struct _KQUEUE
122 {
123 DISPATCHER_HEADER Header;
124 LIST_ENTRY EntryListHead;
125 ULONG CurrentCount;
126 ULONG MaximumCount;
127 LIST_ENTRY ThreadListEntry;
128 } KQUEUE, *PKQUEUE;
129
130 struct _KDPC;
131
132 typedef struct _KTIMER
133 {
134 DISPATCHER_HEADER Header;
135 ULARGE_INTEGER DueTime;
136 LIST_ENTRY TimerListEntry;
137 struct _KDPC* Dpc;
138 LONG Period;
139 } KTIMER, *PKTIMER;
140
141 struct _KSPIN_LOCK;
142
143 typedef struct _KSPIN_LOCK
144 {
145 ULONG Lock;
146 } KSPIN_LOCK, *PKSPIN_LOCK;
147
148 typedef struct _KDEVICE_QUEUE
149 {
150 LIST_ENTRY ListHead;
151 BOOLEAN Busy;
152 KSPIN_LOCK Lock;
153 } KDEVICE_QUEUE, *PKDEVICE_QUEUE;
154
155
156 typedef struct _KAPC
157 {
158 CSHORT Type;
159 CSHORT Size;
160 ULONG Spare0;
161 struct _KTHREAD* Thread;
162 LIST_ENTRY ApcListEntry;
163 PKKERNEL_ROUTINE KernelRoutine;
164 PKRUNDOWN_ROUTINE RundownRoutine;
165 PKNORMAL_ROUTINE NormalRoutine;
166 PVOID NormalContext;
167 PVOID SystemArgument1;
168 PVOID SystemArgument2;
169 CCHAR ApcStateIndex;
170 KPROCESSOR_MODE ApcMode;
171 USHORT Inserted;
172 } __attribute__((packed)) KAPC, *PKAPC;
173
174 typedef struct _KBUGCHECK_CALLBACK_RECORD
175 {
176 LIST_ENTRY Entry;
177 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
178 PVOID Buffer;
179 ULONG Length;
180 PUCHAR Component;
181 ULONG Checksum;
182 UCHAR State;
183 } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
184
185 typedef struct _KMUTEX
186 {
187 DISPATCHER_HEADER Header;
188 LIST_ENTRY MutantListEntry;
189 struct _KTHREAD* OwnerThread;
190 BOOLEAN Abandoned;
191 UCHAR ApcDisable;
192 } KMUTEX, *PKMUTEX, KMUTANT, *PKMUTANT;
193
194 typedef struct _KSEMAPHORE
195 {
196 DISPATCHER_HEADER Header;
197 LONG Limit;
198 } __attribute__((packed)) KSEMAPHORE, *PKSEMAPHORE;
199
200 typedef struct _KEVENT
201 {
202 DISPATCHER_HEADER Header;
203 } KEVENT, *PKEVENT;
204
205 typedef struct _KEVENT_PAIR
206 {
207 CSHORT Type;
208 CSHORT Size;
209 KEVENT LowEvent;
210 KEVENT HighEvent;
211 } KEVENT_PAIR, *PKEVENT_PAIR;
212
213
214 struct _KDPC;
215
216 /*
217 * PURPOSE: Defines a delayed procedure call routine
218 * NOTE:
219 * Dpc = The associated DPC object
220 * DeferredContext = Driver defined context for the DPC
221 * SystemArgument[1-2] = Undocumented.
222 *
223 */
224 typedef VOID STDCALL_FUNC
225 (*PKDEFERRED_ROUTINE)(struct _KDPC* Dpc,
226 PVOID DeferredContext,
227 PVOID SystemArgument1,
228 PVOID SystemArgument2);
229
230 /*
231 * PURPOSE: Defines a delayed procedure call object
232 */
233 typedef struct _KDPC
234 {
235 SHORT Type;
236 UCHAR Number;
237 UCHAR Importance;
238 LIST_ENTRY DpcListEntry;
239 PKDEFERRED_ROUTINE DeferredRoutine;
240 PVOID DeferredContext;
241 PVOID SystemArgument1;
242 PVOID SystemArgument2;
243 PULONG Lock;
244 } __attribute__((packed)) KDPC, *PKDPC;
245
246
247
248 typedef struct _KDEVICE_QUEUE_ENTRY
249 {
250 LIST_ENTRY Entry;
251 ULONG Key;
252 BOOLEAN Inserted;
253 } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY;
254
255 typedef struct _WAIT_CONTEXT_BLOCK
256 {
257 int unknown;
258 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
259
260 struct _KINTERRUPT;
261
262 typedef BOOLEAN STDCALL_FUNC
263 (*PKSERVICE_ROUTINE)(struct _KINTERRUPT* Interrupt,
264 PVOID ServiceContext);
265
266 typedef struct _KINTERRUPT
267 {
268 ULONG Vector;
269 KAFFINITY ProcessorEnableMask;
270 PKSPIN_LOCK IrqLock;
271 BOOLEAN Shareable;
272 BOOLEAN FloatingSave;
273 PKSERVICE_ROUTINE ServiceRoutine;
274 PVOID ServiceContext;
275 LIST_ENTRY Entry;
276 KIRQL SynchLevel;
277 } KINTERRUPT, *PKINTERRUPT;
278
279 typedef struct _KSYSTEM_TIME
280 {
281 ULONG LowPart;
282 LONG High1Part;
283 LONG High2Part;
284 } KSYSTEM_TIME, *PKSYSTEM_TIME;
285
286 typedef struct _EPROCESS EPROCESS, *PEPROCESS;
287
288 #endif /* __INCLUDE_DDK_KETYPES_H */