branch update for HEAD-2003021201
[reactos.git] / 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    CSHORT Type;
151    CSHORT Size;
152    LIST_ENTRY ListHead;
153    KSPIN_LOCK Lock;
154    BOOLEAN Busy;
155 } KDEVICE_QUEUE, *PKDEVICE_QUEUE;
156
157
158 typedef struct _KAPC
159 {
160    CSHORT Type;
161    CSHORT Size;
162    ULONG Spare0;
163    struct _KTHREAD* Thread;
164    LIST_ENTRY ApcListEntry;
165    PKKERNEL_ROUTINE KernelRoutine;
166    PKRUNDOWN_ROUTINE RundownRoutine;
167    PKNORMAL_ROUTINE NormalRoutine;
168    PVOID NormalContext;
169    PVOID SystemArgument1;
170    PVOID SystemArgument2;
171    CCHAR ApcStateIndex;
172    KPROCESSOR_MODE ApcMode;
173    USHORT Inserted;
174 } __attribute__((packed)) KAPC, *PKAPC;
175
176 typedef struct _KBUGCHECK_CALLBACK_RECORD
177 {
178    LIST_ENTRY Entry;
179    PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
180    PVOID Buffer;
181    ULONG Length;
182    PUCHAR Component;
183    ULONG Checksum;
184    UCHAR State;
185 } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
186
187 typedef struct _KMUTEX
188 {
189    DISPATCHER_HEADER Header;
190    LIST_ENTRY MutantListEntry;
191    struct _KTHREAD* OwnerThread;
192    BOOLEAN Abandoned;
193    UCHAR ApcDisable;
194 } KMUTEX, *PKMUTEX, KMUTANT, *PKMUTANT;
195
196 typedef struct _KSEMAPHORE
197 {
198    DISPATCHER_HEADER Header;
199    LONG Limit;
200 } __attribute__((packed)) KSEMAPHORE, *PKSEMAPHORE;
201
202 typedef struct _KEVENT
203 {
204    DISPATCHER_HEADER Header;
205 } KEVENT, *PKEVENT;
206
207 typedef struct _KEVENT_PAIR
208 {
209    CSHORT Type;
210    CSHORT Size;
211    KEVENT LowEvent;
212    KEVENT HighEvent;
213 } KEVENT_PAIR, *PKEVENT_PAIR;
214
215
216 struct _KDPC;
217
218 /*
219  * PURPOSE: Defines a delayed procedure call routine
220  * NOTE:
221  *      Dpc = The associated DPC object
222  *      DeferredContext = Driver defined context for the DPC
223  *      SystemArgument[1-2] = Undocumented. 
224  * 
225  */
226 typedef VOID STDCALL_FUNC
227 (*PKDEFERRED_ROUTINE)(struct _KDPC* Dpc,
228                       PVOID DeferredContext,
229                       PVOID SystemArgument1,
230                       PVOID SystemArgument2);
231
232 /*
233  * PURPOSE: Defines a delayed procedure call object
234  */
235 typedef struct _KDPC
236 {
237    SHORT Type;
238    UCHAR Number;
239    UCHAR Importance;
240    LIST_ENTRY DpcListEntry;
241    PKDEFERRED_ROUTINE DeferredRoutine;
242    PVOID DeferredContext;
243    PVOID SystemArgument1;
244    PVOID SystemArgument2;
245    PULONG Lock;
246 } __attribute__((packed)) KDPC, *PKDPC;
247
248
249
250 typedef struct _KDEVICE_QUEUE_ENTRY
251 {
252    LIST_ENTRY Entry;
253    ULONG Key;
254    BOOLEAN Inserted;
255 } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY;
256
257 typedef struct _WAIT_CONTEXT_BLOCK
258 {
259    KDEVICE_QUEUE_ENTRY WaitQueueEntry;
260    void * /* in real 'PDRIVER_CONTROL' */ DeviceRoutine;
261    PVOID DeviceContext;
262    ULONG NumberOfMapRegisters;
263    PVOID DeviceObject;
264    PVOID CurrentIrp;
265    PKDPC BufferChainingDpc;
266 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
267
268 struct _KINTERRUPT;
269
270 typedef BOOLEAN STDCALL_FUNC
271 (*PKSERVICE_ROUTINE)(struct _KINTERRUPT* Interrupt,
272                      PVOID ServiceContext);
273
274 typedef struct _KINTERRUPT
275 {
276    ULONG Vector;
277    KAFFINITY ProcessorEnableMask;
278    PKSPIN_LOCK IrqLock;
279    BOOLEAN Shareable;
280    BOOLEAN FloatingSave;
281    PKSERVICE_ROUTINE ServiceRoutine;
282    PVOID ServiceContext;
283    LIST_ENTRY Entry;
284    KIRQL SynchLevel;
285 } KINTERRUPT, *PKINTERRUPT;
286
287 typedef struct _KSYSTEM_TIME
288 {
289    ULONG LowPart;
290    LONG High1Part;
291    LONG High2Part;
292 } KSYSTEM_TIME, *PKSYSTEM_TIME;
293
294 typedef struct _EPROCESS EPROCESS, *PEPROCESS;
295
296 #endif /* __INCLUDE_DDK_KETYPES_H */