642a06ef5d97ef8bb15aca7724428023b753767c
[reactos.git] / reactos / include / ddk / winnt4.h
1 /*
2 * winnt4.h
3 *
4 * Definitions only used in Windows NT 4.0 and earlier versions
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #ifndef __WINNT4_H
24 #define __WINNT4_H
25
26 #if __GNUC__ >=3
27 #pragma GCC system_header
28 #endif
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 typedef struct _ZONE_SEGMENT_HEADER {
35 SINGLE_LIST_ENTRY SegmentList;
36 PVOID Reserved;
37 } ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
38
39 typedef struct _ZONE_HEADER {
40 SINGLE_LIST_ENTRY FreeList;
41 SINGLE_LIST_ENTRY SegmentList;
42 ULONG BlockSize;
43 ULONG TotalSegmentSize;
44 } ZONE_HEADER, *PZONE_HEADER;
45
46 static __inline PVOID
47 ExAllocateFromZone(
48 IN PZONE_HEADER Zone)
49 {
50 if (Zone->FreeList.Next)
51 Zone->FreeList.Next = Zone->FreeList.Next->Next;
52 return (PVOID) Zone->FreeList.Next;
53 }
54
55 NTKERNELAPI
56 NTSTATUS
57 NTAPI
58 ExExtendZone(
59 IN PZONE_HEADER Zone,
60 IN PVOID Segment,
61 IN ULONG SegmentSize);
62
63 static __inline PVOID
64 ExFreeToZone(
65 IN PZONE_HEADER Zone,
66 IN PVOID Block)
67 {
68 ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
69 Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
70 return ((PSINGLE_LIST_ENTRY) Block)->Next;
71 }
72
73 NTKERNELAPI
74 NTSTATUS
75 NTAPI
76 ExInitializeZone(
77 IN PZONE_HEADER Zone,
78 IN ULONG BlockSize,
79 IN PVOID InitialSegment,
80 IN ULONG InitialSegmentSize);
81
82 /*
83 * PVOID
84 * ExInterlockedAllocateFromZone(
85 * IN PZONE_HEADER Zone,
86 * IN PKSPIN_LOCK Lock)
87 */
88 #define ExInterlockedAllocateFromZone(Zone, \
89 Lock) \
90 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
91
92 NTKERNELAPI
93 NTSTATUS
94 NTAPI
95 ExInterlockedExtendZone(
96 IN PZONE_HEADER Zone,
97 IN PVOID Segment,
98 IN ULONG SegmentSize,
99 IN PKSPIN_LOCK Lock);
100
101 NTKERNELAPI
102 PVOID
103 NTAPI
104 ExInterlockedFreeToZone(
105 IN PZONE_HEADER Zone,
106 IN PVOID Block,
107 IN PKSPIN_LOCK Lock);
108
109 /*
110 * VOID
111 * ExInitializeWorkItem(
112 * IN PWORK_QUEUE_ITEM Item,
113 * IN PWORKER_THREAD_ROUTINE Routine,
114 * IN PVOID Context)
115 */
116 #define ExInitializeWorkItem(Item, \
117 Routine, \
118 Context) \
119 { \
120 (Item)->WorkerRoutine = Routine; \
121 (Item)->Parameter = Context; \
122 (Item)->List.Flink = NULL; \
123 }
124
125 /*
126 * BOOLEAN
127 * ExIsFullZone(
128 * IN PZONE_HEADER Zone)
129 */
130 #define ExIsFullZone(Zone) \
131 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
132
133 NTKERNELAPI
134 VOID
135 NTAPI
136 ExQueueWorkItem(
137 IN PWORK_QUEUE_ITEM WorkItem,
138 IN WORK_QUEUE_TYPE QueueType);
139
140 NTKERNELAPI
141 BOOLEAN
142 NTAPI
143 ExIsObjectInFirstZoneSegment(
144 IN PZONE_HEADER Zone,
145 IN PVOID Object);
146
147 NTKERNELAPI
148 VOID
149 NTAPI
150 ExReleaseResource(
151 IN PERESOURCE Resource);
152
153 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
154 #define ExAcquireResourceShared ExAcquireResourceSharedLite
155 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
156 #define ExDeleteResource ExDeleteResourceLite
157 #define ExInitializeResource ExInitializeResourceLite
158 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
159 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
160 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
161 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
162
163 NTKERNELAPI
164 INTERLOCKED_RESULT
165 NTAPI
166 ExInterlockedDecrementLong(
167 IN PLONG Addend,
168 IN PKSPIN_LOCK Lock);
169
170 NTKERNELAPI
171 ULONG
172 NTAPI
173 ExInterlockedExchangeUlong(
174 IN PULONG Target,
175 IN ULONG Value,
176 IN PKSPIN_LOCK Lock);
177
178 NTKERNELAPI
179 INTERLOCKED_RESULT
180 NTAPI
181 ExInterlockedIncrementLong(
182 IN PLONG Addend,
183 IN PKSPIN_LOCK Lock);
184
185 NTHALAPI
186 VOID
187 NTAPI
188 HalAcquireDisplayOwnership(
189 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters);
190
191 NTHALAPI
192 NTSTATUS
193 NTAPI
194 HalAllocateAdapterChannel(
195 IN PADAPTER_OBJECT AdapterObject,
196 IN PWAIT_CONTEXT_BLOCK Wcb,
197 IN ULONG NumberOfMapRegisters,
198 IN PDRIVER_CONTROL ExecutionRoutine);
199
200 NTHALAPI
201 PVOID
202 NTAPI
203 HalAllocateCommonBuffer(
204 IN PADAPTER_OBJECT AdapterObject,
205 IN ULONG Length,
206 OUT PPHYSICAL_ADDRESS LogicalAddress,
207 IN BOOLEAN CacheEnabled);
208
209 NTHALAPI
210 NTSTATUS
211 NTAPI
212 HalAssignSlotResources(
213 IN PUNICODE_STRING RegistryPath,
214 IN PUNICODE_STRING DriverClassName,
215 IN PDRIVER_OBJECT DriverObject,
216 IN PDEVICE_OBJECT DeviceObject,
217 IN INTERFACE_TYPE BusType,
218 IN ULONG BusNumber,
219 IN ULONG SlotNumber,
220 IN OUT PCM_RESOURCE_LIST *AllocatedResources);
221
222 NTHALAPI
223 VOID
224 NTAPI
225 HalFreeCommonBuffer(
226 IN PADAPTER_OBJECT AdapterObject,
227 IN ULONG Length,
228 IN PHYSICAL_ADDRESS LogicalAddress,
229 IN PVOID VirtualAddress,
230 IN BOOLEAN CacheEnabled);
231
232 NTHALAPI
233 PADAPTER_OBJECT
234 NTAPI
235 HalGetAdapter(
236 IN PDEVICE_DESCRIPTION DeviceDescription,
237 IN OUT PULONG NumberOfMapRegisters);
238
239 NTHALAPI
240 ULONG
241 NTAPI
242 HalGetBusData(
243 IN BUS_DATA_TYPE BusDataType,
244 IN ULONG BusNumber,
245 IN ULONG SlotNumber,
246 IN PVOID Buffer,
247 IN ULONG Length);
248
249 NTHALAPI
250 ULONG
251 NTAPI
252 HalGetBusDataByOffset(
253 IN BUS_DATA_TYPE BusDataType,
254 IN ULONG BusNumber,
255 IN ULONG SlotNumber,
256 IN PVOID Buffer,
257 IN ULONG Offset,
258 IN ULONG Length);
259
260 NTHALAPI
261 ULONG
262 NTAPI
263 HalGetDmaAlignmentRequirement(
264 VOID);
265
266 NTHALAPI
267 ULONG
268 NTAPI
269 HalGetInterruptVector(
270 IN INTERFACE_TYPE InterfaceType,
271 IN ULONG BusNumber,
272 IN ULONG BusInterruptLevel,
273 IN ULONG BusInterruptVector,
274 OUT PKIRQL Irql,
275 OUT PKAFFINITY Affinity);
276
277 NTHALAPI
278 ULONG
279 NTAPI
280 HalReadDmaCounter(
281 IN PADAPTER_OBJECT AdapterObject);
282
283 NTHALAPI
284 ULONG
285 NTAPI
286 HalSetBusData(
287 IN BUS_DATA_TYPE BusDataType,
288 IN ULONG BusNumber,
289 IN ULONG SlotNumber,
290 IN PVOID Buffer,
291 IN ULONG Length);
292
293 NTHALAPI
294 ULONG
295 NTAPI
296 HalSetBusDataByOffset(
297 IN BUS_DATA_TYPE BusDataType,
298 IN ULONG BusNumber,
299 IN ULONG SlotNumber,
300 IN PVOID Buffer,
301 IN ULONG Offset,
302 IN ULONG Length);
303
304 NTHALAPI
305 BOOLEAN
306 NTAPI
307 HalTranslateBusAddress(
308 IN INTERFACE_TYPE InterfaceType,
309 IN ULONG BusNumber,
310 IN PHYSICAL_ADDRESS BusAddress,
311 IN OUT PULONG AddressSpace,
312 OUT PPHYSICAL_ADDRESS TranslatedAddress);
313
314 NTKERNELAPI
315 NTSTATUS
316 NTAPI
317 IoAllocateAdapterChannel(
318 IN PADAPTER_OBJECT AdapterObject,
319 IN PDEVICE_OBJECT DeviceObject,
320 IN ULONG NumberOfMapRegisters,
321 IN PDRIVER_CONTROL ExecutionRoutine,
322 IN PVOID Context);
323
324 NTKERNELAPI
325 NTSTATUS
326 NTAPI
327 IoAssignResources(
328 IN PUNICODE_STRING RegistryPath,
329 IN PUNICODE_STRING DriverClassName OPTIONAL,
330 IN PDRIVER_OBJECT DriverObject,
331 IN PDEVICE_OBJECT DeviceObject OPTIONAL,
332 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources,
333 IN OUT PCM_RESOURCE_LIST *AllocatedResources);
334
335 NTKERNELAPI
336 NTSTATUS
337 NTAPI
338 IoAttachDeviceByPointer(
339 IN PDEVICE_OBJECT SourceDevice,
340 IN PDEVICE_OBJECT TargetDevice);
341
342 NTHALAPI
343 BOOLEAN
344 NTAPI
345 IoFlushAdapterBuffers(
346 IN PADAPTER_OBJECT AdapterObject,
347 IN PMDL Mdl,
348 IN PVOID MapRegisterBase,
349 IN PVOID CurrentVa,
350 IN ULONG Length,
351 IN BOOLEAN WriteToDevice);
352
353 NTHALAPI
354 VOID
355 NTAPI
356 IoFreeAdapterChannel(
357 IN PADAPTER_OBJECT AdapterObject);
358
359 NTHALAPI
360 VOID
361 NTAPI
362 IoFreeMapRegisters(
363 IN PADAPTER_OBJECT AdapterObject,
364 IN PVOID MapRegisterBase,
365 IN ULONG NumberOfMapRegisters);
366
367 NTHALAPI
368 PHYSICAL_ADDRESS
369 NTAPI
370 IoMapTransfer(
371 IN PADAPTER_OBJECT AdapterObject,
372 IN PMDL Mdl,
373 IN PVOID MapRegisterBase,
374 IN PVOID CurrentVa,
375 IN OUT PULONG Length,
376 IN BOOLEAN WriteToDevice);
377
378 NTKERNELAPI
379 PMDL
380 NTAPI
381 MmCreateMdl(
382 IN PMDL MemoryDescriptorList OPTIONAL,
383 IN PVOID Base,
384 IN SIZE_T Length);
385
386 NTKERNELAPI
387 BOOLEAN
388 NTAPI
389 MmIsNonPagedSystemAddressValid(
390 IN PVOID VirtualAddress);
391
392 NTSYSAPI
393 LARGE_INTEGER
394 NTAPI
395 RtlEnlargedIntegerMultiply(
396 IN LONG Multiplicand,
397 IN LONG Multiplier);
398
399 NTSYSAPI
400 ULONG
401 NTAPI
402 RtlEnlargedUnsignedDivide(
403 IN ULARGE_INTEGER Dividend,
404 IN ULONG Divisor,
405 IN OUT PULONG Remainder);
406
407 NTSYSAPI
408 LARGE_INTEGER
409 NTAPI
410 RtlEnlargedUnsignedMultiply(
411 IN ULONG Multiplicand,
412 IN ULONG Multiplier);
413
414 #ifndef _M_AMD64
415 NTSYSAPI
416 LARGE_INTEGER
417 NTAPI
418 RtlExtendedIntegerMultiply(
419 IN LARGE_INTEGER Multiplicand,
420 IN LONG Multiplier);
421
422 NTSYSAPI
423 LARGE_INTEGER
424 NTAPI
425 RtlExtendedLargeIntegerDivide(
426 IN LARGE_INTEGER Dividend,
427 IN ULONG Divisor,
428 IN OUT PULONG Remainder);
429 #endif
430
431 NTSYSAPI
432 LARGE_INTEGER
433 NTAPI
434 RtlExtendedMagicDivide(
435 IN LARGE_INTEGER Dividend,
436 IN LARGE_INTEGER MagicDivisor,
437 IN CCHAR ShiftCount);
438
439 NTSYSAPI
440 LARGE_INTEGER
441 NTAPI
442 RtlLargeIntegerAdd(
443 IN LARGE_INTEGER Addend1,
444 IN LARGE_INTEGER Addend2);
445
446 NTSYSAPI
447 VOID
448 NTAPI
449 RtlLargeIntegerAnd(
450 IN OUT LARGE_INTEGER Result,
451 IN LARGE_INTEGER Source,
452 IN LARGE_INTEGER Mask);
453
454 NTSYSAPI
455 LARGE_INTEGER
456 NTAPI
457 RtlLargeIntegerArithmeticShift(
458 IN LARGE_INTEGER LargeInteger,
459 IN CCHAR ShiftCount);
460
461 NTSYSAPI
462 LARGE_INTEGER
463 NTAPI
464 RtlLargeIntegerDivide(
465 IN LARGE_INTEGER Dividend,
466 IN LARGE_INTEGER Divisor,
467 IN OUT PLARGE_INTEGER Remainder);
468
469 NTSYSAPI
470 BOOLEAN
471 NTAPI
472 RtlLargeIntegerEqualTo(
473 IN LARGE_INTEGER Operand1,
474 IN LARGE_INTEGER Operand2);
475
476 NTSYSAPI
477 BOOLEAN
478 NTAPI
479 RtlLargeIntegerEqualToZero(
480 IN LARGE_INTEGER Operand);
481
482 NTSYSAPI
483 BOOLEAN
484 NTAPI
485 RtlLargeIntegerGreaterOrEqualToZero(
486 IN LARGE_INTEGER Operand);
487
488 NTSYSAPI
489 BOOLEAN
490 NTAPI
491 RtlLargeIntegerGreaterThan(
492 IN LARGE_INTEGER Operand1,
493 IN LARGE_INTEGER Operand2);
494
495 NTSYSAPI
496 BOOLEAN
497 NTAPI
498 RtlLargeIntegerGreaterThanOrEqualTo(
499 IN LARGE_INTEGER Operand1,
500 IN LARGE_INTEGER Operand2);
501
502 NTSYSAPI
503 BOOLEAN
504 NTAPI
505 RtlLargeIntegerGreaterThanZero(
506 IN LARGE_INTEGER Operand);
507
508 NTSYSAPI
509 BOOLEAN
510 NTAPI
511 RtlLargeIntegerLessOrEqualToZero(
512 IN LARGE_INTEGER Operand);
513
514 NTSYSAPI
515 BOOLEAN
516 NTAPI
517 RtlLargeIntegerLessThan(
518 IN LARGE_INTEGER Operand1,
519 IN LARGE_INTEGER Operand2);
520
521 NTSYSAPI
522 BOOLEAN
523 NTAPI
524 RtlLargeIntegerLessThanOrEqualTo(
525 IN LARGE_INTEGER Operand1,
526 IN LARGE_INTEGER Operand2);
527
528 NTSYSAPI
529 BOOLEAN
530 NTAPI
531 RtlLargeIntegerLessThanZero(
532 IN LARGE_INTEGER Operand);
533
534 NTSYSAPI
535 LARGE_INTEGER
536 NTAPI
537 RtlLargeIntegerNegate(
538 IN LARGE_INTEGER Subtrahend);
539
540 NTSYSAPI
541 BOOLEAN
542 NTAPI
543 RtlLargeIntegerNotEqualTo(
544 IN LARGE_INTEGER Operand1,
545 IN LARGE_INTEGER Operand2);
546
547 NTSYSAPI
548 BOOLEAN
549 NTAPI
550 RtlLargeIntegerNotEqualToZero(
551 IN LARGE_INTEGER Operand);
552
553 NTSYSAPI
554 LARGE_INTEGER
555 NTAPI
556 RtlLargeIntegerShiftLeft(
557 IN LARGE_INTEGER LargeInteger,
558 IN CCHAR ShiftCount);
559
560 NTSYSAPI
561 LARGE_INTEGER
562 NTAPI
563 RtlLargeIntegerShiftRight(
564 IN LARGE_INTEGER LargeInteger,
565 IN CCHAR ShiftCount);
566
567 NTSYSAPI
568 LARGE_INTEGER
569 NTAPI
570 RtlLargeIntegerSubtract(
571 IN LARGE_INTEGER Minuend,
572 IN LARGE_INTEGER Subtrahend);
573
574
575 /*
576 * ULONG
577 * COMPUTE_PAGES_SPANNED(
578 * IN PVOID Va,
579 * IN ULONG Size)
580 */
581 #define COMPUTE_PAGES_SPANNED(Va, \
582 Size) \
583 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
584
585
586 /*
587 ** Architecture specific structures
588 */
589
590 #ifdef _X86_
591
592 NTKERNELAPI
593 INTERLOCKED_RESULT
594 FASTCALL
595 Exfi386InterlockedIncrementLong(
596 IN PLONG Addend);
597
598 NTKERNELAPI
599 INTERLOCKED_RESULT
600 FASTCALL
601 Exfi386InterlockedDecrementLong(
602 IN PLONG Addend);
603
604 NTKERNELAPI
605 ULONG
606 FASTCALL
607 Exfi386InterlockedExchangeUlong(
608 IN PULONG Target,
609 IN ULONG Value);
610
611 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
612 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
613 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
614
615 #endif /* _X86_ */
616
617 #ifdef __cplusplus
618 }
619 #endif
620
621 #endif /* __WINNT4_H */