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
);
418 RtlExtendedIntegerMultiply(
419 IN LARGE_INTEGER Multiplicand
,
425 RtlExtendedLargeIntegerDivide(
426 IN LARGE_INTEGER Dividend
,
428 IN OUT PULONG Remainder
);
434 RtlExtendedMagicDivide(
435 IN LARGE_INTEGER Dividend
,
436 IN LARGE_INTEGER MagicDivisor
,
437 IN CCHAR ShiftCount
);
443 IN LARGE_INTEGER Addend1
,
444 IN LARGE_INTEGER Addend2
);
450 IN OUT LARGE_INTEGER Result
,
451 IN LARGE_INTEGER Source
,
452 IN LARGE_INTEGER Mask
);
457 RtlLargeIntegerArithmeticShift(
458 IN LARGE_INTEGER LargeInteger
,
459 IN CCHAR ShiftCount
);
464 RtlLargeIntegerDivide(
465 IN LARGE_INTEGER Dividend
,
466 IN LARGE_INTEGER Divisor
,
467 IN OUT PLARGE_INTEGER Remainder
);
472 RtlLargeIntegerEqualTo(
473 IN LARGE_INTEGER Operand1
,
474 IN LARGE_INTEGER Operand2
);
479 RtlLargeIntegerEqualToZero(
480 IN LARGE_INTEGER Operand
);
485 RtlLargeIntegerGreaterOrEqualToZero(
486 IN LARGE_INTEGER Operand
);
491 RtlLargeIntegerGreaterThan(
492 IN LARGE_INTEGER Operand1
,
493 IN LARGE_INTEGER Operand2
);
498 RtlLargeIntegerGreaterThanOrEqualTo(
499 IN LARGE_INTEGER Operand1
,
500 IN LARGE_INTEGER Operand2
);
505 RtlLargeIntegerGreaterThanZero(
506 IN LARGE_INTEGER Operand
);
511 RtlLargeIntegerLessOrEqualToZero(
512 IN LARGE_INTEGER Operand
);
517 RtlLargeIntegerLessThan(
518 IN LARGE_INTEGER Operand1
,
519 IN LARGE_INTEGER Operand2
);
524 RtlLargeIntegerLessThanOrEqualTo(
525 IN LARGE_INTEGER Operand1
,
526 IN LARGE_INTEGER Operand2
);
531 RtlLargeIntegerLessThanZero(
532 IN LARGE_INTEGER Operand
);
537 RtlLargeIntegerNegate(
538 IN LARGE_INTEGER Subtrahend
);
543 RtlLargeIntegerNotEqualTo(
544 IN LARGE_INTEGER Operand1
,
545 IN LARGE_INTEGER Operand2
);
550 RtlLargeIntegerNotEqualToZero(
551 IN LARGE_INTEGER Operand
);
556 RtlLargeIntegerShiftLeft(
557 IN LARGE_INTEGER LargeInteger
,
558 IN CCHAR ShiftCount
);
563 RtlLargeIntegerShiftRight(
564 IN LARGE_INTEGER LargeInteger
,
565 IN CCHAR ShiftCount
);
570 RtlLargeIntegerSubtract(
571 IN LARGE_INTEGER Minuend
,
572 IN LARGE_INTEGER Subtrahend
);
577 * COMPUTE_PAGES_SPANNED(
581 #define COMPUTE_PAGES_SPANNED(Va, \
583 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
587 ** Architecture specific structures
595 Exfi386InterlockedIncrementLong(
601 Exfi386InterlockedDecrementLong(
607 Exfi386InterlockedExchangeUlong(
611 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
612 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
613 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
621 #endif /* __WINNT4_H */