4 * Definitions only used in Windows NT 4.0 and earlier versions
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
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.
27 #pragma GCC system_header
34 typedef struct _ZONE_SEGMENT_HEADER
{
35 SINGLE_LIST_ENTRY SegmentList
;
37 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
39 typedef struct _ZONE_HEADER
{
40 SINGLE_LIST_ENTRY FreeList
;
41 SINGLE_LIST_ENTRY SegmentList
;
43 ULONG TotalSegmentSize
;
44 } ZONE_HEADER
, *PZONE_HEADER
;
50 if (Zone
->FreeList
.Next
)
51 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
52 return (PVOID
) Zone
->FreeList
.Next
;
61 IN ULONG SegmentSize
);
68 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
69 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
70 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
79 IN PVOID InitialSegment
,
80 IN ULONG InitialSegmentSize
);
84 * ExInterlockedAllocateFromZone(
85 * IN PZONE_HEADER Zone,
86 * IN PKSPIN_LOCK Lock)
88 #define ExInterlockedAllocateFromZone(Zone, \
90 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
95 ExInterlockedExtendZone(
104 ExInterlockedFreeToZone(
105 IN PZONE_HEADER Zone
,
107 IN PKSPIN_LOCK Lock
);
111 * ExInitializeWorkItem(
112 * IN PWORK_QUEUE_ITEM Item,
113 * IN PWORKER_THREAD_ROUTINE Routine,
116 #define ExInitializeWorkItem(Item, \
120 (Item)->WorkerRoutine = Routine; \
121 (Item)->Parameter = Context; \
122 (Item)->List.Flink = NULL; \
128 * IN PZONE_HEADER Zone)
130 #define ExIsFullZone(Zone) \
131 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
137 IN PWORK_QUEUE_ITEM WorkItem
,
138 IN WORK_QUEUE_TYPE QueueType
);
143 ExIsObjectInFirstZoneSegment(
144 IN PZONE_HEADER Zone
,
151 IN PERESOURCE Resource
);
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
166 ExInterlockedDecrementLong(
168 IN PKSPIN_LOCK Lock
);
173 ExInterlockedExchangeUlong(
176 IN PKSPIN_LOCK Lock
);
181 ExInterlockedIncrementLong(
183 IN PKSPIN_LOCK Lock
);
188 HalAcquireDisplayOwnership(
189 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
194 HalAllocateAdapterChannel(
195 IN PADAPTER_OBJECT AdapterObject
,
196 IN PWAIT_CONTEXT_BLOCK Wcb
,
197 IN ULONG NumberOfMapRegisters
,
198 IN PDRIVER_CONTROL ExecutionRoutine
);
203 HalAllocateCommonBuffer(
204 IN PADAPTER_OBJECT AdapterObject
,
206 OUT PPHYSICAL_ADDRESS LogicalAddress
,
207 IN BOOLEAN CacheEnabled
);
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
,
220 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
226 IN PADAPTER_OBJECT AdapterObject
,
228 IN PHYSICAL_ADDRESS LogicalAddress
,
229 IN PVOID VirtualAddress
,
230 IN BOOLEAN CacheEnabled
);
236 IN PDEVICE_DESCRIPTION DeviceDescription
,
237 IN OUT PULONG NumberOfMapRegisters
);
243 IN BUS_DATA_TYPE BusDataType
,
252 HalGetBusDataByOffset(
253 IN BUS_DATA_TYPE BusDataType
,
263 HalGetDmaAlignmentRequirement(
269 HalGetInterruptVector(
270 IN INTERFACE_TYPE InterfaceType
,
272 IN ULONG BusInterruptLevel
,
273 IN ULONG BusInterruptVector
,
275 OUT PKAFFINITY Affinity
);
281 IN PADAPTER_OBJECT AdapterObject
);
287 IN BUS_DATA_TYPE BusDataType
,
296 HalSetBusDataByOffset(
297 IN BUS_DATA_TYPE BusDataType
,
307 HalTranslateBusAddress(
308 IN INTERFACE_TYPE InterfaceType
,
310 IN PHYSICAL_ADDRESS BusAddress
,
311 IN OUT PULONG AddressSpace
,
312 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
317 IoAllocateAdapterChannel(
318 IN PADAPTER_OBJECT AdapterObject
,
319 IN PDEVICE_OBJECT DeviceObject
,
320 IN ULONG NumberOfMapRegisters
,
321 IN PDRIVER_CONTROL ExecutionRoutine
,
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
);
338 IoAttachDeviceByPointer(
339 IN PDEVICE_OBJECT SourceDevice
,
340 IN PDEVICE_OBJECT TargetDevice
);
345 IoFlushAdapterBuffers(
346 IN PADAPTER_OBJECT AdapterObject
,
348 IN PVOID MapRegisterBase
,
351 IN BOOLEAN WriteToDevice
);
356 IoFreeAdapterChannel(
357 IN PADAPTER_OBJECT AdapterObject
);
363 IN PADAPTER_OBJECT AdapterObject
,
364 IN PVOID MapRegisterBase
,
365 IN ULONG NumberOfMapRegisters
);
371 IN PADAPTER_OBJECT AdapterObject
,
373 IN PVOID MapRegisterBase
,
375 IN OUT PULONG Length
,
376 IN BOOLEAN WriteToDevice
);
382 IN PMDL MemoryDescriptorList OPTIONAL
,
389 MmIsNonPagedSystemAddressValid(
390 IN PVOID VirtualAddress
);
395 RtlEnlargedIntegerMultiply(
396 IN LONG Multiplicand
,
402 RtlEnlargedUnsignedDivide(
403 IN ULARGE_INTEGER Dividend
,
405 IN OUT PULONG Remainder
);
410 RtlEnlargedUnsignedMultiply(
411 IN ULONG Multiplicand
,
412 IN ULONG Multiplier
);
417 RtlExtendedIntegerMultiply(
418 IN LARGE_INTEGER Multiplicand
,
424 RtlExtendedLargeIntegerDivide(
425 IN LARGE_INTEGER Dividend
,
427 IN OUT PULONG Remainder
);
432 RtlExtendedMagicDivide(
433 IN LARGE_INTEGER Dividend
,
434 IN LARGE_INTEGER MagicDivisor
,
435 IN CCHAR ShiftCount
);
441 IN LARGE_INTEGER Addend1
,
442 IN LARGE_INTEGER Addend2
);
448 IN OUT LARGE_INTEGER Result
,
449 IN LARGE_INTEGER Source
,
450 IN LARGE_INTEGER Mask
);
455 RtlLargeIntegerArithmeticShift(
456 IN LARGE_INTEGER LargeInteger
,
457 IN CCHAR ShiftCount
);
462 RtlLargeIntegerDivide(
463 IN LARGE_INTEGER Dividend
,
464 IN LARGE_INTEGER Divisor
,
465 IN OUT PLARGE_INTEGER Remainder
);
470 RtlLargeIntegerEqualTo(
471 IN LARGE_INTEGER Operand1
,
472 IN LARGE_INTEGER Operand2
);
477 RtlLargeIntegerEqualToZero(
478 IN LARGE_INTEGER Operand
);
483 RtlLargeIntegerGreaterOrEqualToZero(
484 IN LARGE_INTEGER Operand
);
489 RtlLargeIntegerGreaterThan(
490 IN LARGE_INTEGER Operand1
,
491 IN LARGE_INTEGER Operand2
);
496 RtlLargeIntegerGreaterThanOrEqualTo(
497 IN LARGE_INTEGER Operand1
,
498 IN LARGE_INTEGER Operand2
);
503 RtlLargeIntegerGreaterThanZero(
504 IN LARGE_INTEGER Operand
);
509 RtlLargeIntegerLessOrEqualToZero(
510 IN LARGE_INTEGER Operand
);
515 RtlLargeIntegerLessThan(
516 IN LARGE_INTEGER Operand1
,
517 IN LARGE_INTEGER Operand2
);
522 RtlLargeIntegerLessThanOrEqualTo(
523 IN LARGE_INTEGER Operand1
,
524 IN LARGE_INTEGER Operand2
);
529 RtlLargeIntegerLessThanZero(
530 IN LARGE_INTEGER Operand
);
535 RtlLargeIntegerNegate(
536 IN LARGE_INTEGER Subtrahend
);
541 RtlLargeIntegerNotEqualTo(
542 IN LARGE_INTEGER Operand1
,
543 IN LARGE_INTEGER Operand2
);
548 RtlLargeIntegerNotEqualToZero(
549 IN LARGE_INTEGER Operand
);
554 RtlLargeIntegerShiftLeft(
555 IN LARGE_INTEGER LargeInteger
,
556 IN CCHAR ShiftCount
);
561 RtlLargeIntegerShiftRight(
562 IN LARGE_INTEGER LargeInteger
,
563 IN CCHAR ShiftCount
);
568 RtlLargeIntegerSubtract(
569 IN LARGE_INTEGER Minuend
,
570 IN LARGE_INTEGER Subtrahend
);
575 * COMPUTE_PAGES_SPANNED(
579 #define COMPUTE_PAGES_SPANNED(Va, \
581 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
585 ** Architecture specific structures
593 Exfi386InterlockedIncrementLong(
599 Exfi386InterlockedDecrementLong(
605 Exfi386InterlockedExchangeUlong(
609 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
610 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
611 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
619 #endif /* __WINNT4_H */