114 #define MAX_MAP_REGISTERS 64 116 #define TAG_DMA ' AMD' 172 if (AdapterObject->MasterDevice)
174 if (AdapterObject->Dma64BitAddresses)
177 return HighestAddress;
179 else if (AdapterObject->Dma32BitAddresses)
181 HighestAddress.
QuadPart = 0xFFFFFFFF;
182 return HighestAddress;
187 return HighestAddress;
229 BoundryAddressMultiple.
QuadPart = 0;
265 CurrentEntry = AdapterObject->MapRegisterBase +
266 AdapterObject->NumberOfMapRegisters;
279 if (CurrentEntry != AdapterObject->MapRegisterBase)
281 PreviousEntry = CurrentEntry - 1;
291 AdapterObject->NumberOfMapRegisters++;
298 AdapterObject->NumberOfMapRegisters++;
303 CurrentEntry - AdapterObject->MapRegisterBase);
311 AdapterObject->NumberOfMapRegisters++;
340 Size += (SizeOfBitmap + 7) >> 3;
343 if (MasterAdapter ==
NULL)
351 MasterAdapter->MapRegisters = (
PVOID)(MasterAdapter + 1);
353 MasterAdapter->MapRegisters,
354 (
PULONG)(MasterAdapter->MapRegisters + 1),
357 MasterAdapter->NumberOfMapRegisters = 0;
358 MasterAdapter->CommittedMapRegisters = 0;
364 if (MasterAdapter->MapRegisterBase ==
NULL)
378 return MasterAdapter;
416 (
PVOID)&AdapterObject);
445 AdapterObject->MapRegistersPerChannel = 1;
447 AdapterObject->ChannelNumber = 0xFF;
451 return AdapterObject;
477 AdapterObject->AdapterNumber = Controller;
480 AdapterObject->Width16Bits =
FALSE;
481 AdapterObject->AdapterBaseVa = AdapterBaseVa;
524 AdapterObject->Width16Bits =
TRUE;
530 DmaMode.
Channel = AdapterObject->ChannelNumber;
569 AdapterObject->AdapterMode = DmaMode;
663 if (MapRegisters > 16)
685 if (AdapterObject !=
NULL)
687 if (AdapterObject->NeedsMapRegisters &&
688 MapRegisters > AdapterObject->MapRegistersPerChannel)
689 AdapterObject->MapRegistersPerChannel = MapRegisters;
693 if (AdapterObject ==
NULL)
697 if (AdapterObject ==
NULL)
708 if (MapRegisters > 0)
710 AdapterObject->NeedsMapRegisters =
TRUE;
712 AdapterObject->MapRegistersPerChannel = MapRegisters;
722 MasterAdapter->CommittedMapRegisters += MapRegisters;
723 if (MasterAdapter->CommittedMapRegisters > MasterAdapter->NumberOfMapRegisters)
728 AdapterObject->NeedsMapRegisters =
FALSE;
732 AdapterObject->MapRegistersPerChannel = 1;
754 AdapterObject->IgnoreCount = 0;
777 return AdapterObject;
811 if (AdapterObject->ChannelNumber == 0xFF)
863 BoundryAddressMultiple.
QuadPart = 0;
871 if (AdapterObject->MasterDevice)
872 BoundryAddressMultiple.
HighPart = 1;
874 BoundryAddressMultiple.
LowPart = 0x10000;
939 ASSERT(!AdapterObject->MasterDevice);
950 if (AdapterObject->AdapterNumber == 1)
966 while (0xffff00 & (OldCount ^
Count));
984 while (0xffff00 & (OldCount ^
Count));
991 if (AdapterObject->Width16Bits)
1089 MasterAdapter = AdapterObject->MasterAdapter;
1092 AdapterObject->CurrentWcb = WaitContextBlock;
1098 AdapterObject->NumberOfMapRegisters = 0;
1133 AdapterObject->MapRegisterBase =
1134 MasterAdapter->MapRegisterBase +
Index;
1135 if (!AdapterObject->ScatterGather)
1137 AdapterObject->MapRegisterBase =
1139 (
ULONG_PTR)AdapterObject->MapRegisterBase |
1152 AdapterObject->NumberOfMapRegisters = 0;
1157 InsertTailList(&MasterAdapter->AdapterQueue, &AdapterObject->AdapterQueue);
1161 WorkItem->AdapterObject = AdapterObject;
1175 AdapterObject->MapRegisterBase =
NULL;
1176 AdapterObject->NumberOfMapRegisters = 0;
1179 AdapterObject->CurrentWcb = WaitContextBlock;
1183 AdapterObject->MapRegisterBase, WaitContextBlock->
DeviceContext);
1211 AdapterObject->NumberOfMapRegisters = 0;
1248 MasterAdapter = AdapterObject->MasterAdapter;
1257 if (AdapterObject->NumberOfMapRegisters)
1261 AdapterObject->MapRegisterBase,
1262 AdapterObject->NumberOfMapRegisters);
1276 AdapterObject->CurrentWcb = WaitContextBlock;
1280 AdapterObject->MasterAdapter)
1287 MasterAdapter->MapRegisters,
1291 AdapterObject->MapRegisterBase =
1292 MasterAdapter->MapRegisterBase +
Index;
1293 if (!AdapterObject->ScatterGather)
1295 AdapterObject->MapRegisterBase =
1297 (
ULONG_PTR)AdapterObject->MapRegisterBase |
1305 InsertTailList(&MasterAdapter->AdapterQueue, &AdapterObject->AdapterQueue);
1314 AdapterObject->MapRegisterBase =
NULL;
1315 AdapterObject->NumberOfMapRegisters = 0;
1321 AdapterObject->MapRegisterBase, WaitContextBlock->
DeviceContext);
1337 AdapterObject->NumberOfMapRegisters = 0;
1384 RealMapRegisterBase =
1387 RealMapRegisterBase - MasterAdapter->MapRegisterBase,
1396 while (!
IsListEmpty(&MasterAdapter->AdapterQueue))
1403 MasterAdapter->MapRegisters,
1404 AdapterObject->NumberOfMapRegisters,
1405 MasterAdapter->NumberOfMapRegisters);
1414 AdapterObject->MapRegisterBase =
1415 MasterAdapter->MapRegisterBase +
Index;
1416 if (!AdapterObject->ScatterGather)
1418 AdapterObject->MapRegisterBase =
1420 (
ULONG_PTR)AdapterObject->MapRegisterBase |
1425 AdapterObject->CurrentWcb->DeviceObject,
1426 AdapterObject->CurrentWcb->CurrentIrp,
1427 AdapterObject->MapRegisterBase,
1428 AdapterObject->CurrentWcb->DeviceContext);
1433 AdapterObject->NumberOfMapRegisters = 0;
1437 if (AdapterObject->NumberOfMapRegisters)
1441 AdapterObject->MapRegisterBase -
1442 MasterAdapter->MapRegisterBase,
1443 AdapterObject->NumberOfMapRegisters);
1475 ULONG CurrentLength;
1498 if (CurrentLength >
Length)
1505 (
PVOID)CurrentAddress,
1511 (
PVOID)CurrentAddress,
1517 CurrentAddress += CurrentLength;
1571 if (AdapterObject !=
NULL && !AdapterObject->MasterDevice)
1574 if (AdapterObject->AdapterNumber == 1)
1593 RealMapRegisterBase =
1602 if (SlaveDma && !AdapterObject->IgnoreCount)
1624 RealMapRegisterBase->
Counter = 0;
1674 ULONG TransferLength;
1719 while (TransferLength < *
Length)
1721 MdlPage1 = *MdlPagesPtr;
1722 MdlPage2 = *(MdlPagesPtr + 1);
1723 if (MdlPage1 + 1 != MdlPage2)
1725 if ((MdlPage1 ^ MdlPage2) & ~0xFFFFF)
1731 if (TransferLength < *
Length)
1732 *
Length = TransferLength;
1742 RealMapRegisterBase =
1751 while (TransferLength < *
Length)
1753 MdlPage1 = *MdlPagesPtr;
1754 MdlPage2 = *(MdlPagesPtr + 1);
1755 if (MdlPage1 + 1 != MdlPage2)
1757 if (!
HalpEisaDma && ((MdlPage1 ^ MdlPage2) & ~0xF))
1763 if (TransferLength > *
Length)
1764 TransferLength = *
Length;
1773 TransferLength < *
Length)
1775 UseMapRegisters =
TRUE;
1778 TransferLength = *
Length;
1790 UseMapRegisters =
FALSE;
1804 UseMapRegisters =
TRUE;
1831 *
Length = TransferLength;
1838 if (AdapterObject !=
NULL && !AdapterObject->MasterDevice)
1840 AdapterMode = AdapterObject->AdapterMode;
1849 if (AdapterObject->IgnoreCount)
1857 if (AdapterObject->Width16Bits)
1859 TransferLength >>= 1;
1865 if (AdapterObject->AdapterNumber == 1)
1890 (
UCHAR)(TransferLength - 1));
1892 (
UCHAR)((TransferLength - 1) >> 8));
1922 (
UCHAR)(TransferLength - 1));
1924 (
UCHAR)((TransferLength - 1) >> 8));
1968 ULONG MapRegisterNumber;
1971 if (AdapterObject->NeedsMapRegisters)
1977 AdapterObject->NumberOfMapRegisters = 0;
1993 MapRegisterNumber = 0;
1997 AdapterObject->MapRegisterBase =
2002 if (!AdapterObject->ScatterGather)
2005 AdapterObject->MapRegisterBase =
2012 AdapterObject->MapRegisterBase =
NULL;
2013 AdapterObject->NumberOfMapRegisters = 0;
2017 return AdapterObject->MapRegisterBase;
#define KeGetCurrentIrql()
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
static LIST_ENTRY HalpDmaAdapterList
#define ASSERT_IRQL_LESS_OR_EQUAL(x)
PVOID(NTAPI * PALLOCATE_COMMON_BUFFER)(_In_ PDMA_ADAPTER DmaAdapter, _In_ ULONG Length, _Out_ PPHYSICAL_ADDRESS LogicalAddress, _In_ BOOLEAN CacheEnabled)
#define KeRaiseIrql(irql, oldIrql)
DMA1_ADDRESS_COUNT DmaAddressCount[4]
ULONG NTAPI HalReadDmaCounter(IN PADAPTER_OBJECT AdapterObject)
VOID NTAPI ExQueueWorkItem(IN PWORK_QUEUE_ITEM WorkItem, IN WORK_QUEUE_TYPE QueueType)
#define STATUS_INSUFFICIENT_RESOURCES
#define KeLowerIrql(oldIrql)
_In_ ULONG _In_ ULONG _In_ ULONG Length
struct _RTL_BITMAP RTL_BITMAP
_Out_ PULONG NumberOfMapRegisters
#define MmGetMdlPfnArray(_Mdl)
#define MmGetMdlVirtualAddress(_Mdl)
#define READ_PORT_UCHAR(p)
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
PHYSICAL_ADDRESS NTAPI IoMapTransfer(IN PADAPTER_OBJECT AdapterObject, IN PMDL Mdl, IN PVOID MapRegisterBase, IN PVOID CurrentVa, IN OUT PULONG Length, IN BOOLEAN WriteToDevice)
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_ WDFREQUEST _In_ PWDF_USB_CONTROL_SETUP_PACKET _In_opt_ WDFMEMORY _In_opt_ PWDFMEMORY_OFFSET TransferOffset
PFREE_MAP_REGISTERS FreeMapRegisters
ULONG NTAPI HalpDmaGetDmaAlignment(PADAPTER_OBJECT AdapterObject)
struct _ADAPTER_OBJECT ADAPTER_OBJECT
NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP, PULONG, ULONG)
DMA2_ADDRESS_COUNT DmaAddressCount[4]
static DMA_OPERATIONS HalpDmaOperations
BOOLEAN(NTAPI * PFLUSH_ADAPTER_BUFFERS)(_In_ PDMA_ADAPTER DmaAdapter, _In_ PMDL Mdl, _In_ PVOID MapRegisterBase, _In_ PVOID CurrentVa, _In_ ULONG Length, _In_ BOOLEAN WriteToDevice)
VOID NTAPI KeInitializeDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue)
IN PVOID IN PVOID IN USHORT IN USHORT Size
PDRIVER_CONTROL DeviceRoutine
#define InsertTailList(ListHead, Entry)
#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority)
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
_In_ WDFDMATRANSACTION _Out_opt_ ULONG * MapRegisterCount
#define OBJ_KERNEL_HANDLE
VOID NTAPI IoFreeMapRegisters(IN PADAPTER_OBJECT AdapterObject, IN PVOID MapRegisterBase, IN ULONG NumberOfMapRegisters)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
VOID NTAPI MmFreeContiguousMemory(IN PVOID BaseAddress)
VOID NTAPI HalpCopyBufferMap(PMDL Mdl, PROS_MAP_REGISTER_ENTRY MapRegisterBase, PVOID CurrentVa, ULONG Length, BOOLEAN WriteToDevice)
VOID(NTAPI * PFREE_ADAPTER_CHANNEL)(_In_ PDMA_ADAPTER DmaAdapter)
static PADAPTER_OBJECT HalpEisaAdapter[8]
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
ULONG(NTAPI * PGET_DMA_ALIGNMENT)(_In_ PDMA_ADAPTER DmaAdapter)
NTSTATUS(NTAPI * PALLOCATE_ADAPTER_CHANNEL)(_In_ PDMA_ADAPTER DmaAdapter, _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG NumberOfMapRegisters, _In_ PDRIVER_CONTROL ExecutionRoutine, _In_ PVOID Context)
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING DeviceDescription
PVOID NTAPI HalAllocateCrashDumpRegisters(IN PADAPTER_OBJECT AdapterObject, IN OUT PULONG NumberOfMapRegisters)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
struct _GROW_WORK_ITEM * PGROW_WORK_ITEM
NTSTATUS NTAPI HalAllocateAdapterChannel(IN PADAPTER_OBJECT AdapterObject, IN PWAIT_CONTEXT_BLOCK WaitContextBlock, IN ULONG NumberOfMapRegisters, IN PDRIVER_CONTROL ExecutionRoutine)
PMAP_TRANSFER MapTransfer
PHYSICAL_ADDRESS NTAPI HalpGetAdapterMaximumPhysicalAddress(IN PADAPTER_OBJECT AdapterObject)
BOOLEAN NTAPI HalpGrowMapBuffers(IN PADAPTER_OBJECT AdapterObject, IN ULONG SizeOfMapBuffers)
NTSYSAPI void WINAPI RtlSetAllBits(PRTL_BITMAP)
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
NTSYSAPI ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP, ULONG, ULONG)
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
struct _ROS_MAP_REGISTER_ENTRY * PROS_MAP_REGISTER_ENTRY
static BOOLEAN HalpEisaDma
NTSTATUS NTAPI ObReferenceObjectByPointer(IN PVOID Object, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode)
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
struct _LARGE_INTEGER::@2284 u
VOID NTAPI IoFreeAdapterChannel(IN PADAPTER_OBJECT AdapterObject)
NTSTATUS NTAPI ObCreateObject(IN KPROCESSOR_MODE ProbeMode OPTIONAL, IN POBJECT_TYPE Type, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext OPTIONAL, IN ULONG ObjectSize, IN ULONG PagedPoolCharge OPTIONAL, IN ULONG NonPagedPoolCharge OPTIONAL, OUT PVOID *Object)
VOID NTAPI HalpGrowMapBufferWorker(PVOID DeferredContext)
PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
PHYSICAL_ADDRESS(NTAPI * PMAP_TRANSFER)(_In_ PDMA_ADAPTER DmaAdapter, _In_ PMDL Mdl, _In_ PVOID MapRegisterBase, _In_ PVOID CurrentVa, _Inout_ PULONG Length, _In_ BOOLEAN WriteToDevice)
#define ExInitializeWorkItem(Item, Routine, Context)
NTSTATUS NTAPI IoAllocateAdapterChannel(IN PADAPTER_OBJECT AdapterObject, IN PDEVICE_OBJECT DeviceObject, IN ULONG NumberOfMapRegisters, IN PDRIVER_CONTROL ExecutionRoutine, IN PVOID Context)
_In_ WDFDMATRANSACTION _In_ size_t MaximumLength
PFREE_ADAPTER_CHANNEL FreeAdapterChannel
#define COMPATIBLE_TIMING
#define NT_SUCCESS(StatCode)
VOID FASTCALL KfReleaseSpinLock(PKSPIN_LOCK SpinLock, KIRQL OldIrql)
_In_ WDFCOLLECTION _In_ ULONG Index
#define KeAcquireSpinLock(sl, irql)
#define ObDereferenceObject
BOOLEAN NTAPI KeInsertDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue, IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry)
VOID NTAPI RtlClearBit(_In_ PRTL_BITMAP BitMapHeader, _In_ BITMAP_INDEX BitNumber)
BOOLEAN NTAPI IoFlushAdapterBuffers(IN PADAPTER_OBJECT AdapterObject, IN PMDL Mdl, IN PVOID MapRegisterBase, IN PVOID CurrentVa, IN ULONG Length, IN BOOLEAN WriteToDevice)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define BYTES_TO_PAGES(Size)
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS PhysicalAddress
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define WRITE_PORT_UCHAR(p, d)
POBJECT_TYPE IoAdapterObjectType
PHYSICAL_ADDRESS PhysicalAddress
_Out_ PNDIS_HANDLE _Out_ PUINT _In_ PNDIS_STRING _In_ NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress
KDEVICE_QUEUE_ENTRY WaitQueueEntry
VOID(NTAPI * PFREE_COMMON_BUFFER)(_In_ PDMA_ADAPTER DmaAdapter, _In_ ULONG Length, _In_ PHYSICAL_ADDRESS LogicalAddress, _In_ PVOID VirtualAddress, _In_ BOOLEAN CacheEnabled)
_Must_inspect_result_ _In_ PHYSICAL_ADDRESS LowestAcceptableAddress
#define MAX_MAP_REGISTERS
VOID(NTAPI * PPUT_DMA_ADAPTER)(PDMA_ADAPTER DmaAdapter)
BOOLEAN NTAPI HalpDmaInitializeEisaAdapter(PADAPTER_OBJECT AdapterObject, PDEVICE_DESCRIPTION DeviceDescription)
struct _DMA_OPERATIONS DMA_OPERATIONS
VOID NTAPI HalPutDmaAdapter(IN PADAPTER_OBJECT AdapterObject)
_In_ PSCSI_REQUEST_BLOCK _In_opt_ PVOID _In_ ULONG _In_ BOOLEAN WriteToDevice
NTSYSAPI void WINAPI RtlClearBits(PRTL_BITMAP, ULONG, ULONG)
_Inout_ struct _IRP _In_ PVOID MapRegisterBase
NTSTATUS NTAPI ObInsertObject(IN PVOID Object, IN PACCESS_STATE AccessState OPTIONAL, IN ACCESS_MASK DesiredAccess, IN ULONG ObjectPointerBias, OUT PVOID *NewObject OPTIONAL, OUT PHANDLE Handle)
#define KeInitializeEvent(pEvt, foo, foo2)
PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
PDMA_ADAPTER NTAPI HalpGetDmaAdapter(IN PVOID Context, IN PDEVICE_DESCRIPTION DeviceDescription, OUT PULONG NumberOfMapRegisters)
#define InitializeListHead(ListHead)
ULONG(NTAPI * PREAD_DMA_COUNTER)(_In_ PDMA_ADAPTER DmaAdapter)
PKDEVICE_QUEUE_ENTRY NTAPI KeRemoveDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue)
#define FIELD_OFFSET(t, f)
NTSYSAPI void WINAPI RtlSetBits(PRTL_BITMAP, ULONG, ULONG)
static KEVENT HalpDmaLock
VOID(NTAPI * PFREE_MAP_REGISTERS)(_In_ PDMA_ADAPTER DmaAdapter, PVOID MapRegisterBase, ULONG NumberOfMapRegisters)
#define KeReleaseSpinLock(sl, irql)
static const ULONG_PTR HalpEisaPortPage[8]
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
BOOLEAN NTAPI HalFlushCommonBuffer(IN PADAPTER_OBJECT AdapterObject, IN ULONG Length, IN PHYSICAL_ADDRESS LogicalAddress, IN PVOID VirtualAddress)
static LARGE_INTEGER Counter
#define DEVICE_DESCRIPTION_VERSION2
#define SINGLE_REQUEST_MODE
_In_ PDEVICE_OBJECT _In_ ULONG _In_ PDRIVER_CONTROL ExecutionRoutine
KIRQL FASTCALL KfAcquireSpinLock(PKSPIN_LOCK SpinLock)
#define DEMAND_REQUEST_MODE
#define RtlZeroMemory(Destination, Length)
static PADAPTER_OBJECT HalpMasterAdapter
#define InitializeObjectAttributes(p, n, a, r, s)
PHYSICAL_ADDRESS NTAPI MmGetPhysicalAddress(IN PVOID Address)
DRIVER_CONTROL * PDRIVER_CONTROL
#define RtlCopyMemory(Destination, Source, Length)
PADAPTER_OBJECT NTAPI HalpDmaAllocateChildAdapter(ULONG NumberOfMapRegisters, PDEVICE_DESCRIPTION DeviceDescription)
_Must_inspect_result_ _In_ PWDF_WORKITEM_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWORKITEM * WorkItem
_Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
#define DEVICE_DESCRIPTION_VERSION1
PVOID NTAPI HalAllocateCommonBuffer(IN PADAPTER_OBJECT AdapterObject, IN ULONG Length, IN PPHYSICAL_ADDRESS LogicalAddress, IN BOOLEAN CacheEnabled)
#define CASCADE_REQUEST_MODE
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
VOID NTAPI HalFreeCommonBuffer(IN PADAPTER_OBJECT AdapterObject, IN ULONG Length, IN PHYSICAL_ADDRESS LogicalAddress, IN PVOID VirtualAddress, IN BOOLEAN CacheEnabled)
PADAPTER_OBJECT NTAPI HalpDmaAllocateMasterAdapter(VOID)
IN PDCB IN PCCB IN VBO IN OUT PULONG OUT PDIRENT OUT PBCB OUT PVBO ByteOffset
ULONG NumberOfMapRegisters
PADAPTER_OBJECT NTAPI HalGetAdapter(IN PDEVICE_DESCRIPTION DeviceDescription, OUT PULONG NumberOfMapRegisters)
PVOID NTAPI MmAllocateContiguousMemorySpecifyCache(IN SIZE_T NumberOfBytes, IN PHYSICAL_ADDRESS LowestAcceptableAddress OPTIONAL, IN PHYSICAL_ADDRESS HighestAcceptableAddress, IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, IN MEMORY_CACHING_TYPE CacheType OPTIONAL)
_In_opt_ PVOID DeferredContext