Added GNU Debugger stub for remote debugging.
[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 #else
58 extern CHAR IMPORTED KeNumberProcessors;
59 extern LOADER_PARAMETER_BLOCK IMPORTED KeLoaderBlock;
60 #endif
61
62
63 struct _KMUTANT;
64
65 typedef LONG KPRIORITY;
66
67 typedef VOID STDCALL
68 (*PKBUGCHECK_CALLBACK_ROUTINE)(PVOID Buffer,
69 ULONG Length);
70
71 typedef BOOLEAN STDCALL
72 (*PKSYNCHRONIZE_ROUTINE)(PVOID SynchronizeContext);
73
74 struct _KAPC;
75
76 typedef VOID STDCALL
77 (*PKNORMAL_ROUTINE)(PVOID NormalContext,
78 PVOID SystemArgument1,
79 PVOID SystemArgument2);
80
81 typedef VOID STDCALL
82 (*PKKERNEL_ROUTINE)(struct _KAPC* Apc,
83 PKNORMAL_ROUTINE* NormalRoutine,
84 PVOID* NormalContext,
85 PVOID* SystemArgument1,
86 PVOID* SystemArgument2);
87
88 typedef VOID STDCALL
89 (*PKRUNDOWN_ROUTINE)(struct _KAPC* Apc);
90
91 struct _DISPATCHER_HEADER;
92
93 typedef struct _KWAIT_BLOCK
94 /*
95 * PURPOSE: Object describing the wait a thread is currently performing
96 */
97 {
98 LIST_ENTRY WaitListEntry;
99 struct _KTHREAD* Thread;
100 struct _DISPATCHER_HEADER *Object;
101 struct _KWAIT_BLOCK* NextWaitBlock;
102 USHORT WaitKey;
103 USHORT WaitType;
104 } KWAIT_BLOCK, *PKWAIT_BLOCK;
105
106 typedef struct _DISPATCHER_HEADER
107 {
108 UCHAR Type;
109 UCHAR Absolute;
110 UCHAR Size;
111 UCHAR Inserted;
112 LONG SignalState;
113 LIST_ENTRY WaitListHead;
114 } __attribute__((packed)) DISPATCHER_HEADER, *PDISPATCHER_HEADER;
115
116
117 typedef struct _KQUEUE
118 {
119 DISPATCHER_HEADER Header;
120 LIST_ENTRY EntryListHead;
121 ULONG CurrentCount;
122 ULONG MaximumCount;
123 LIST_ENTRY ThreadListEntry;
124 } KQUEUE, *PKQUEUE;
125
126 struct _KDPC;
127
128 typedef struct _KTIMER
129 {
130 DISPATCHER_HEADER Header;
131 ULARGE_INTEGER DueTime;
132 LIST_ENTRY TimerListEntry;
133 struct _KDPC* Dpc;
134 LONG Period;
135 } KTIMER, *PKTIMER;
136
137 struct _KSPIN_LOCK;
138
139 typedef struct _KSPIN_LOCK
140 {
141 ULONG Lock;
142 } KSPIN_LOCK, *PKSPIN_LOCK;
143
144 typedef struct _KDEVICE_QUEUE
145 {
146 LIST_ENTRY ListHead;
147 BOOLEAN Busy;
148 KSPIN_LOCK Lock;
149 } KDEVICE_QUEUE, *PKDEVICE_QUEUE;
150
151
152 typedef struct _KAPC
153 {
154 CSHORT Type;
155 CSHORT Size;
156 ULONG Spare0;
157 struct _KTHREAD* Thread;
158 LIST_ENTRY ApcListEntry;
159 PKKERNEL_ROUTINE KernelRoutine;
160 PKRUNDOWN_ROUTINE RundownRoutine;
161 PKNORMAL_ROUTINE NormalRoutine;
162 PVOID NormalContext;
163 PVOID SystemArgument1;
164 PVOID SystemArgument2;
165 CCHAR ApcStateIndex;
166 KPROCESSOR_MODE ApcMode;
167 USHORT Inserted;
168 } __attribute__((packed)) KAPC, *PKAPC;
169
170 typedef struct _KBUGCHECK_CALLBACK_RECORD
171 {
172 LIST_ENTRY Entry;
173 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
174 PVOID Buffer;
175 ULONG Length;
176 PUCHAR Component;
177 ULONG Checksum;
178 UCHAR State;
179 } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
180
181 typedef struct _KMUTEX
182 {
183 DISPATCHER_HEADER Header;
184 LIST_ENTRY MutantListEntry;
185 struct _KTHREAD* OwnerThread;
186 BOOLEAN Abandoned;
187 UCHAR ApcDisable;
188 } KMUTEX, *PKMUTEX, KMUTANT, *PKMUTANT;
189
190 typedef struct _KSEMAPHORE
191 {
192 DISPATCHER_HEADER Header;
193 LONG Limit;
194 } __attribute__((packed)) KSEMAPHORE, *PKSEMAPHORE;
195
196 typedef struct _KEVENT
197 {
198 DISPATCHER_HEADER Header;
199 } KEVENT, *PKEVENT;
200
201 typedef struct _KEVENT_PAIR
202 {
203 CSHORT Type;
204 CSHORT Size;
205 KEVENT LowEvent;
206 KEVENT HighEvent;
207 } KEVENT_PAIR, *PKEVENT_PAIR;
208
209
210 struct _KDPC;
211
212 /*
213 * PURPOSE: Defines a delayed procedure call routine
214 * NOTE:
215 * Dpc = The associated DPC object
216 * DeferredContext = Driver defined context for the DPC
217 * SystemArgument[1-2] = Undocumented.
218 *
219 */
220 typedef VOID STDCALL
221 (*PKDEFERRED_ROUTINE)(struct _KDPC* Dpc,
222 PVOID DeferredContext,
223 PVOID SystemArgument1,
224 PVOID SystemArgument2);
225
226 /*
227 * PURPOSE: Defines a delayed procedure call object
228 */
229 typedef struct _KDPC
230 {
231 SHORT Type;
232 UCHAR Number;
233 UCHAR Importance;
234 LIST_ENTRY DpcListEntry;
235 PKDEFERRED_ROUTINE DeferredRoutine;
236 PVOID DeferredContext;
237 PVOID SystemArgument1;
238 PVOID SystemArgument2;
239 PULONG Lock;
240 } __attribute__((packed)) KDPC, *PKDPC;
241
242
243
244 typedef struct _KDEVICE_QUEUE_ENTRY
245 {
246 LIST_ENTRY Entry;
247 ULONG Key;
248 BOOLEAN Inserted;
249 } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY;
250
251 typedef struct _WAIT_CONTEXT_BLOCK
252 {
253 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
254
255 struct _KINTERRUPT;
256
257 typedef BOOLEAN STDCALL
258 (*PKSERVICE_ROUTINE)(struct _KINTERRUPT* Interrupt,
259 PVOID ServiceContext);
260
261 typedef struct _KINTERRUPT
262 {
263 ULONG Vector;
264 KAFFINITY ProcessorEnableMask;
265 PKSPIN_LOCK IrqLock;
266 BOOLEAN Shareable;
267 BOOLEAN FloatingSave;
268 PKSERVICE_ROUTINE ServiceRoutine;
269 PVOID ServiceContext;
270 LIST_ENTRY Entry;
271 KIRQL SynchLevel;
272 } KINTERRUPT, *PKINTERRUPT;
273
274 typedef struct _KSYSTEM_TIME
275 {
276 ULONG LowPart;
277 LONG High1Part;
278 LONG High2Part;
279 } KSYSTEM_TIME, *PKSYSTEM_TIME;
280
281 typedef struct _EPROCESS EPROCESS, *PEPROCESS;
282
283 #endif /* __INCLUDE_DDK_KETYPES_H */