Added hal dispatch tables.
[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
7 typedef struct _LOADER_PARAMETER_BLOCK
8 {
9 /*
10 * Magic value (useless really)
11 */
12 unsigned int magic;
13
14 /*
15 * Cursor position
16 */
17 unsigned int cursorx;
18 unsigned int cursory;
19
20 /*
21 * Number of files (including the kernel) loaded
22 */
23 unsigned int nr_files;
24
25 /*
26 * Range of physical memory being used by the system
27 */
28 unsigned int start_mem;
29 unsigned int end_mem;
30
31 /*
32 * List of module lengths (terminated by a 0)
33 */
34 unsigned int module_length[64];
35
36 /*
37 * Kernel parameter string
38 */
39 char kernel_parameters[256];
40
41 } LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;
42
43 #ifdef __NTOSKRNL__
44 extern CHAR EXPORTED KeNumberProcessors;
45 extern LOADER_PARAMETER_BLOCK EXPORTED KeLoaderBlock;
46 #else
47 extern CHAR IMPORTED KeNumberProcessors;
48 extern LOADER_PARAMETER_BLOCK IMPORTED KeLoaderBlock;
49 #endif
50
51
52 struct _KMUTANT;
53
54 typedef LONG KPRIORITY;
55
56 typedef VOID (*PKBUGCHECK_CALLBACK_ROUTINE)(PVOID Buffer, ULONG Length);
57 typedef BOOLEAN (*PKSYNCHRONIZE_ROUTINE)(PVOID SynchronizeContext);
58
59 struct _KAPC;
60
61 typedef VOID (*PKNORMAL_ROUTINE)(PVOID NormalContext,
62 PVOID SystemArgument1,
63 PVOID SystemArgument2);
64 typedef VOID (*PKKERNEL_ROUTINE)(struct _KAPC* Apc,
65 PKNORMAL_ROUTINE* NormalRoutine,
66 PVOID* NormalContext,
67 PVOID* SystemArgument1,
68 PVOID* SystemArgument2);
69
70 typedef VOID (*PKRUNDOWN_ROUTINE)(struct _KAPC* Apc);
71
72 struct _DISPATCHER_HEADER;
73
74 typedef struct _KWAIT_BLOCK
75 /*
76 * PURPOSE: Object describing the wait a thread is currently performing
77 */
78 {
79 LIST_ENTRY WaitListEntry;
80 struct _KTHREAD* Thread;
81 struct _DISPATCHER_HEADER *Object;
82 struct _KWAIT_BLOCK* NextWaitBlock;
83 USHORT WaitKey;
84 USHORT WaitType;
85 } KWAIT_BLOCK, *PKWAIT_BLOCK;
86
87 typedef struct _DISPATCHER_HEADER
88 {
89 UCHAR Type;
90 UCHAR Absolute;
91 UCHAR Size;
92 UCHAR Inserted;
93 LONG SignalState;
94 LIST_ENTRY WaitListHead;
95 } DISPATCHER_HEADER;
96
97
98 typedef struct _KQUEUE
99 {
100 DISPATCHER_HEADER Header;
101 LIST_ENTRY EntryListHead;
102 ULONG CurrentCount;
103 ULONG MaximumCount;
104 LIST_ENTRY ThreadListEntry;
105 } KQUEUE, *PKQUEUE;
106
107 struct _KDPC;
108
109 typedef struct _KTIMER
110 {
111 DISPATCHER_HEADER Header;
112 ULARGE_INTEGER DueTime;
113 LIST_ENTRY TimerListEntry;
114 struct _KDPC* Dpc;
115 LONG Period;
116 } KTIMER, *PKTIMER;
117
118 /*
119 typedef struct _KTIMER
120 {
121 LIST_ENTRY entry;
122 signed long long expire_time;
123 struct _KDPC* dpc;
124 BOOLEAN signaled;
125 BOOLEAN running;
126 TIMER_TYPE type;
127 ULONG period;
128 } KTIMER, *PKTIMER;
129 */
130
131 struct _KSPIN_LOCK;
132
133 typedef struct _KSPIN_LOCK
134 {
135 ULONG Lock;
136 } KSPIN_LOCK, *PKSPIN_LOCK;
137
138 typedef struct _KDEVICE_QUEUE
139 {
140 LIST_ENTRY ListHead;
141 BOOLEAN Busy;
142 KSPIN_LOCK Lock;
143 } KDEVICE_QUEUE, *PKDEVICE_QUEUE;
144
145
146 typedef struct _KAPC
147 {
148 CSHORT Type;
149 CSHORT Size;
150 ULONG Spare0;
151 struct _KTHREAD* Thread;
152 LIST_ENTRY ApcListEntry;
153 PKKERNEL_ROUTINE KernelRoutine;
154 PKRUNDOWN_ROUTINE RundownRoutine;
155 PKNORMAL_ROUTINE NormalRoutine;
156 PVOID NormalContext;
157 PVOID SystemArgument1;
158 PVOID SystemArgument2;
159 CCHAR ApcStateIndex;
160 KPROCESSOR_MODE ApcMode;
161 BOOLEAN Inserted;
162 } KAPC, *PKAPC;
163
164 typedef struct
165 {
166 LIST_ENTRY Entry;
167 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
168 PVOID Buffer;
169 ULONG Length;
170 PUCHAR Component;
171 ULONG Checksum;
172 UCHAR State;
173 } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
174
175 typedef struct _KMUTEX
176 {
177 DISPATCHER_HEADER Header;
178 LIST_ENTRY MutantListEntry;
179 struct _KTHREAD* OwnerThread;
180 BOOLEAN Abandoned;
181 UCHAR ApcDisable;
182 } KMUTEX, *PKMUTEX, KMUTANT, *PKMUTANT;
183
184 typedef struct
185 {
186 DISPATCHER_HEADER Header;
187 LONG Limit;
188 } KSEMAPHORE, *PKSEMAPHORE;
189
190 typedef struct _KEVENT
191 {
192 DISPATCHER_HEADER Header;
193 } KEVENT, *PKEVENT;
194
195
196
197 typedef VOID (*PDRIVER_ADD_DEVICE)(VOID);
198
199 struct _KDPC;
200
201 /*
202 * PURPOSE: Defines a delayed procedure call routine
203 * NOTE:
204 * Dpc = The associated DPC object
205 * DeferredContext = Driver defined context for the DPC
206 * SystemArgument[1-2] = Undocumented.
207 *
208 */
209 typedef VOID (*PKDEFERRED_ROUTINE)(struct _KDPC* Dpc, PVOID DeferredContext,
210 PVOID SystemArgument1, PVOID SystemArgument2);
211
212 typedef struct _KDPC
213 /*
214 * PURPOSE: Defines a delayed procedure call object
215 */
216 {
217 SHORT Type;
218 UCHAR Number;
219 UCHAR Importance;
220 LIST_ENTRY DpcListEntry;
221 PKDEFERRED_ROUTINE DeferredRoutine;
222 PVOID DeferredContext;
223 PVOID SystemArgument1;
224 PVOID SystemArgument2;
225 PULONG Lock;
226 } KDPC, *PKDPC;
227
228
229
230 typedef struct _KDEVICE_QUEUE_ENTRY
231 {
232 LIST_ENTRY Entry;
233 ULONG Key;
234 } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY;
235
236 typedef struct _WAIT_CONTEXT_BLOCK
237 {
238 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
239
240 struct _KINTERRUPT;
241
242 typedef BOOLEAN (*PKSERVICE_ROUTINE)(struct _KINTERRUPT* Interrupt,
243 PVOID ServiceContext);
244
245 typedef struct _KINTERRUPT
246 {
247 ULONG Vector;
248 KAFFINITY ProcessorEnableMask;
249 PKSPIN_LOCK IrqLock;
250 BOOLEAN Shareable;
251 BOOLEAN FloatingSave;
252 PKSERVICE_ROUTINE ServiceRoutine;
253 PVOID ServiceContext;
254 LIST_ENTRY Entry;
255 KIRQL SynchLevel;
256 } KINTERRUPT, *PKINTERRUPT;
257
258 #endif /* __INCLUDE_DDK_KETYPES_H */