Move MS DDK files to DDK
[reactos.git] / reactos / w32api / 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 NTOSAPI
56 NTSTATUS
57 DDKAPI
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 NTOSAPI
74 NTSTATUS
75 DDKAPI
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 NTOSAPI
93 NTSTATUS
94 DDKAPI
95 ExInterlockedExtendZone(
96 IN PZONE_HEADER Zone,
97 IN PVOID Segment,
98 IN ULONG SegmentSize,
99 IN PKSPIN_LOCK Lock);
100
101 NTOSAPI
102 PVOID
103 DDKAPI
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 NTOSAPI
134 VOID
135 DDKAPI
136 ExQueueWorkItem(
137 IN PWORK_QUEUE_ITEM WorkItem,
138 IN WORK_QUEUE_TYPE QueueType);
139
140 NTOSAPI
141 BOOLEAN
142 DDKAPI
143 ExIsObjectInFirstZoneSegment(
144 IN PZONE_HEADER Zone,
145 IN PVOID Object);
146
147 NTOSAPI
148 VOID
149 DDKAPI
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 NTOSAPI
164 INTERLOCKED_RESULT
165 DDKAPI
166 ExInterlockedDecrementLong(
167 IN PLONG Addend,
168 IN PKSPIN_LOCK Lock);
169
170 NTOSAPI
171 ULONG
172 DDKAPI
173 ExInterlockedExchangeUlong(
174 IN PULONG Target,
175 IN ULONG Value,
176 IN PKSPIN_LOCK Lock);
177
178 NTOSAPI
179 INTERLOCKED_RESULT
180 DDKAPI
181 ExInterlockedIncrementLong(
182 IN PLONG Addend,
183 IN PKSPIN_LOCK Lock);
184
185 NTHALAPI
186 VOID
187 DDKAPI
188 HalAcquireDisplayOwnership(
189 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters);
190
191 NTHALAPI
192 NTSTATUS
193 DDKAPI
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 DDKAPI
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 DDKAPI
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 DDKAPI
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 DDKAPI
235 HalGetAdapter(
236 IN PDEVICE_DESCRIPTION DeviceDescription,
237 IN OUT PULONG NumberOfMapRegisters);
238
239 NTHALAPI
240 ULONG
241 DDKAPI
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 DDKAPI
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 DDKAPI
263 HalGetDmaAlignmentRequirement(
264 VOID);
265
266 NTHALAPI
267 ULONG
268 DDKAPI
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 DDKAPI
280 HalReadDmaCounter(
281 IN PADAPTER_OBJECT AdapterObject);
282
283 NTHALAPI
284 ULONG
285 DDKAPI
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 DDKAPI
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 DDKAPI
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 NTOSAPI
315 NTSTATUS
316 DDKAPI
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 NTOSAPI
325 NTSTATUS
326 DDKAPI
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 NTOSAPI
336 NTSTATUS
337 DDKAPI
338 IoAttachDeviceByPointer(
339 IN PDEVICE_OBJECT SourceDevice,
340 IN PDEVICE_OBJECT TargetDevice);
341
342 NTHALAPI
343 BOOLEAN
344 DDKAPI
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 DDKAPI
356 IoFreeAdapterChannel(
357 IN PADAPTER_OBJECT AdapterObject);
358
359 NTHALAPI
360 VOID
361 DDKAPI
362 IoFreeMapRegisters(
363 IN PADAPTER_OBJECT AdapterObject,
364 IN PVOID MapRegisterBase,
365 IN ULONG NumberOfMapRegisters);
366
367 NTHALAPI
368 PHYSICAL_ADDRESS
369 DDKAPI
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 NTOSAPI
379 PMDL
380 DDKAPI
381 MmCreateMdl(
382 IN PMDL MemoryDescriptorList OPTIONAL,
383 IN PVOID Base,
384 IN SIZE_T Length);
385
386 NTOSAPI
387 BOOLEAN
388 DDKAPI
389 MmIsNonPagedSystemAddressValid(
390 IN PVOID VirtualAddress);
391
392 NTOSAPI
393 LARGE_INTEGER
394 DDKAPI
395 RtlEnlargedIntegerMultiply(
396 IN LONG Multiplicand,
397 IN LONG Multiplier);
398
399 NTOSAPI
400 ULONG
401 DDKAPI
402 RtlEnlargedUnsignedDivide(
403 IN ULARGE_INTEGER Dividend,
404 IN ULONG Divisor,
405 IN OUT PULONG Remainder);
406
407 NTOSAPI
408 LARGE_INTEGER
409 DDKAPI
410 RtlEnlargedUnsignedMultiply(
411 IN ULONG Multiplicand,
412 IN ULONG Multiplier);
413
414 NTOSAPI
415 LARGE_INTEGER
416 DDKAPI
417 RtlExtendedIntegerMultiply(
418 IN LARGE_INTEGER Multiplicand,
419 IN LONG Multiplier);
420
421 NTOSAPI
422 LARGE_INTEGER
423 DDKAPI
424 RtlExtendedLargeIntegerDivide(
425 IN LARGE_INTEGER Dividend,
426 IN ULONG Divisor,
427 IN OUT PULONG Remainder);
428
429 NTOSAPI
430 LARGE_INTEGER
431 DDKAPI
432 RtlExtendedMagicDivide(
433 IN LARGE_INTEGER Dividend,
434 IN LARGE_INTEGER MagicDivisor,
435 IN CCHAR ShiftCount);
436
437 NTOSAPI
438 LARGE_INTEGER
439 DDKAPI
440 RtlLargeIntegerAdd(
441 IN LARGE_INTEGER Addend1,
442 IN LARGE_INTEGER Addend2);
443
444 NTOSAPI
445 VOID
446 DDKAPI
447 RtlLargeIntegerAnd(
448 IN OUT LARGE_INTEGER Result,
449 IN LARGE_INTEGER Source,
450 IN LARGE_INTEGER Mask);
451
452 NTOSAPI
453 LARGE_INTEGER
454 DDKAPI
455 RtlLargeIntegerArithmeticShift(
456 IN LARGE_INTEGER LargeInteger,
457 IN CCHAR ShiftCount);
458
459 NTOSAPI
460 LARGE_INTEGER
461 DDKAPI
462 RtlLargeIntegerDivide(
463 IN LARGE_INTEGER Dividend,
464 IN LARGE_INTEGER Divisor,
465 IN OUT PLARGE_INTEGER Remainder);
466
467 NTOSAPI
468 BOOLEAN
469 DDKAPI
470 RtlLargeIntegerEqualTo(
471 IN LARGE_INTEGER Operand1,
472 IN LARGE_INTEGER Operand2);
473
474 NTOSAPI
475 BOOLEAN
476 DDKAPI
477 RtlLargeIntegerEqualToZero(
478 IN LARGE_INTEGER Operand);
479
480 NTOSAPI
481 BOOLEAN
482 DDKAPI
483 RtlLargeIntegerGreaterOrEqualToZero(
484 IN LARGE_INTEGER Operand);
485
486 NTOSAPI
487 BOOLEAN
488 DDKAPI
489 RtlLargeIntegerGreaterThan(
490 IN LARGE_INTEGER Operand1,
491 IN LARGE_INTEGER Operand2);
492
493 NTOSAPI
494 BOOLEAN
495 DDKAPI
496 RtlLargeIntegerGreaterThanOrEqualTo(
497 IN LARGE_INTEGER Operand1,
498 IN LARGE_INTEGER Operand2);
499
500 NTOSAPI
501 BOOLEAN
502 DDKAPI
503 RtlLargeIntegerGreaterThanZero(
504 IN LARGE_INTEGER Operand);
505
506 NTOSAPI
507 BOOLEAN
508 DDKAPI
509 RtlLargeIntegerLessOrEqualToZero(
510 IN LARGE_INTEGER Operand);
511
512 NTOSAPI
513 BOOLEAN
514 DDKAPI
515 RtlLargeIntegerLessThan(
516 IN LARGE_INTEGER Operand1,
517 IN LARGE_INTEGER Operand2);
518
519 NTOSAPI
520 BOOLEAN
521 DDKAPI
522 RtlLargeIntegerLessThanOrEqualTo(
523 IN LARGE_INTEGER Operand1,
524 IN LARGE_INTEGER Operand2);
525
526 NTOSAPI
527 BOOLEAN
528 DDKAPI
529 RtlLargeIntegerLessThanZero(
530 IN LARGE_INTEGER Operand);
531
532 NTOSAPI
533 LARGE_INTEGER
534 DDKAPI
535 RtlLargeIntegerNegate(
536 IN LARGE_INTEGER Subtrahend);
537
538 NTOSAPI
539 BOOLEAN
540 DDKAPI
541 RtlLargeIntegerNotEqualTo(
542 IN LARGE_INTEGER Operand1,
543 IN LARGE_INTEGER Operand2);
544
545 NTOSAPI
546 BOOLEAN
547 DDKAPI
548 RtlLargeIntegerNotEqualToZero(
549 IN LARGE_INTEGER Operand);
550
551 NTOSAPI
552 LARGE_INTEGER
553 DDKAPI
554 RtlLargeIntegerShiftLeft(
555 IN LARGE_INTEGER LargeInteger,
556 IN CCHAR ShiftCount);
557
558 NTOSAPI
559 LARGE_INTEGER
560 DDKAPI
561 RtlLargeIntegerShiftRight(
562 IN LARGE_INTEGER LargeInteger,
563 IN CCHAR ShiftCount);
564
565 NTOSAPI
566 LARGE_INTEGER
567 DDKAPI
568 RtlLargeIntegerSubtract(
569 IN LARGE_INTEGER Minuend,
570 IN LARGE_INTEGER Subtrahend);
571
572
573 /*
574 * ULONG
575 * COMPUTE_PAGES_SPANNED(
576 * IN PVOID Va,
577 * IN ULONG Size)
578 */
579 #define COMPUTE_PAGES_SPANNED(Va, \
580 Size) \
581 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
582
583
584 /*
585 ** Architecture specific structures
586 */
587
588 #ifdef _X86_
589
590 NTOSAPI
591 INTERLOCKED_RESULT
592 DDKFASTAPI
593 Exfi386InterlockedIncrementLong(
594 IN PLONG Addend);
595
596 NTOSAPI
597 INTERLOCKED_RESULT
598 DDKFASTAPI
599 Exfi386InterlockedDecrementLong(
600 IN PLONG Addend);
601
602 NTOSAPI
603 ULONG
604 DDKFASTAPI
605 Exfi386InterlockedExchangeUlong(
606 IN PULONG Target,
607 IN ULONG Value);
608
609 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
610 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
611 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
612
613 #endif /* _X86_ */
614
615 #ifdef __cplusplus
616 }
617 #endif
618
619 #endif /* __WINNT4_H */