156#define MAX_MAP_REGISTERS 64
158#define TAG_DMA ' AMD'
162#if defined(SARCH_PC98)
167#undef WRITE_PORT_UCHAR
168#undef READ_PORT_UCHAR
170#define WRITE_PORT_UCHAR(Port, Data) \
177#define READ_PORT_UCHAR(Port) 0x00
237 if (AdapterObject->MasterDevice)
239 if (AdapterObject->Dma64BitAddresses)
241 HighestAddress.
QuadPart = 0xFFFFFFFFFFFFFFFFULL;
242 return HighestAddress;
244 else if (AdapterObject->Dma32BitAddresses)
246 HighestAddress.
QuadPart = 0xFFFFFFFF;
247 return HighestAddress;
252 return HighestAddress;
284 DPRINT(
"No more map register slots available! (Current: %d | Requested: %d | Limit: %d)\n",
285 AdapterObject->NumberOfMapRegisters,
298 BoundryAddressMultiple.
QuadPart = 0;
303 BoundryAddressMultiple,
311 BoundryAddressMultiple,
334 CurrentEntry = AdapterObject->MapRegisterBase + AdapterObject->NumberOfMapRegisters;
346 if (CurrentEntry != AdapterObject->MapRegisterBase)
348 PreviousEntry = CurrentEntry - 1;
356 AdapterObject->NumberOfMapRegisters++;
363 AdapterObject->NumberOfMapRegisters++;
368 (
ULONG)(CurrentEntry - AdapterObject->MapRegisterBase));
376 AdapterObject->NumberOfMapRegisters++;
404 Size += (SizeOfBitmap + 7) >> 3;
407 if (!MasterAdapter)
return NULL;
414 MasterAdapter->MapRegisters = (
PVOID)(MasterAdapter + 1);
416 (
PULONG)(MasterAdapter->MapRegisters + 1),
419 MasterAdapter->NumberOfMapRegisters = 0;
420 MasterAdapter->CommittedMapRegisters = 0;
426 if (!MasterAdapter->MapRegisterBase)
440 return MasterAdapter;
475 (
PVOID)&AdapterObject);
495 AdapterObject->MapRegistersPerChannel = 1;
497 AdapterObject->ChannelNumber = 0xFF;
501 return AdapterObject;
531 AdapterObject->AdapterNumber = Controller;
534 AdapterObject->Width16Bits =
FALSE;
535 AdapterObject->AdapterBaseVa = AdapterBaseVa;
582 AdapterObject->Width16Bits =
TRUE;
591 DmaMode.
Channel = AdapterObject->ChannelNumber;
636 AdapterObject->AdapterMode = DmaMode;
730 if (MapRegisters > 16) MapRegisters = 16;
749 if ((AdapterObject->NeedsMapRegisters) &&
750 (MapRegisters > AdapterObject->MapRegistersPerChannel))
752 AdapterObject->MapRegistersPerChannel = MapRegisters;
757 if (AdapterObject ==
NULL)
760 if (AdapterObject ==
NULL)
771 if (MapRegisters > 0)
773 AdapterObject->NeedsMapRegisters =
TRUE;
774 AdapterObject->MapRegistersPerChannel = MapRegisters;
778 AdapterObject->NeedsMapRegisters =
FALSE;
785 AdapterObject->MapRegistersPerChannel = 1;
814 AdapterObject->IgnoreCount = 0;
837 return AdapterObject;
870 if (AdapterObject->ChannelNumber == 0xFF)
919 BoundryAddressMultiple.
QuadPart = 0;
926 if (AdapterObject->MasterDevice)
928 BoundryAddressMultiple.
HighPart = 1;
932 BoundryAddressMultiple.
LowPart = 0x10000;
938 BoundryAddressMultiple,
984#define MAX_SG_ELEMENTS 0x30
997 ULONG ElementCount = 0, RemainingLength = AdapterControlContext->
Length;
1010 sizeof(*TempElements) * Est_SG_Elements,
1014 DPRINT1(
"Scatter/gather list construction failed!\n");
1020 TempElements[ElementCount].
Length = RemainingLength;
1021 TempElements[ElementCount].
Reserved = 0;
1023 AdapterControlContext->
Mdl,
1025 CurrentVa + (AdapterControlContext->
Length - RemainingLength),
1026 &TempElements[ElementCount].
Length,
1028 if (TempElements[ElementCount].
Length == 0)
1031 DPRINT(
"Allocated one S/G element: 0x%I64u with length: 0x%x\n",
1032 TempElements[ElementCount].
Address.QuadPart,
1033 TempElements[ElementCount].
Length);
1035 ASSERT(TempElements[ElementCount].
Length <= RemainingLength);
1036 RemainingLength -= TempElements[ElementCount].
Length;
1040 DPRINT(
"Est_SG_Elements %d\n", Est_SG_Elements);
1041 DPRINT(
"ElementCount is %d\n", ElementCount);
1043 if (RemainingLength > 0)
1045 DPRINT1(
"Scatter/gather list construction failed!\n");
1053 ASSERT(ScatterGatherList);
1055 ScatterGatherList->NumberOfElements = ElementCount;
1056 ScatterGatherList->Reserved = (
ULONG_PTR)AdapterControlContext;
1063 DPRINT(
"Initiating S/G DMA with %d element(s)\n", ElementCount);
1154 AdapterControlContext->
Mdl,
1173 DPRINT(
"S/G DMA has finished!\n");
1194 *ScatterGatherListSize = SgSize;
1246 IN ULONG ScatterGatherBufferLength)
1261 if (ScatterGatherBuffer)
1264 if (ScatterGatherBufferLength < SgSize)
1268 UsingUserBuffer =
TRUE;
1273 if (!ScatterGatherBuffer)
1277 UsingUserBuffer =
FALSE;
1286 ScatterGatherContext->
Mdl =
Mdl;
1287 ScatterGatherContext->
CurrentVa = CurrentVa;
1299 &ScatterGatherContext->
Wcb,
1305 if (!UsingUserBuffer)
1356 ASSERT(!AdapterObject->MasterDevice);
1366 if (AdapterObject->AdapterNumber == 1)
1383 }
while (0xffff00 & (OldCount ^
Count));
1402 }
while (0xffff00 & (OldCount ^
Count));
1409 if (AdapterObject->Width16Bits)
Count *= 2;
1501 &WaitContextBlock->WaitQueueEntry))
1506 MasterAdapter = AdapterObject->MasterAdapter;
1509 AdapterObject->CurrentWcb = WaitContextBlock;
1515 AdapterObject->NumberOfMapRegisters = 0;
1549 AdapterObject->MapRegisterBase = MasterAdapter->MapRegisterBase +
Index;
1550 if (!AdapterObject->ScatterGather)
1559 InsertTailList(&MasterAdapter->AdapterQueue, &AdapterObject->AdapterQueue);
1567 WorkItem->AdapterObject = AdapterObject;
1582 AdapterObject->MapRegisterBase =
NULL;
1583 AdapterObject->NumberOfMapRegisters = 0;
1586 AdapterObject->CurrentWcb = WaitContextBlock;
1589 WaitContextBlock->CurrentIrp,
1590 AdapterObject->MapRegisterBase,
1591 WaitContextBlock->DeviceContext);
1618 AdapterObject->NumberOfMapRegisters = 0;
1654 MasterAdapter = AdapterObject->MasterAdapter;
1663 if (AdapterObject->NumberOfMapRegisters)
1666 AdapterObject->MapRegisterBase,
1667 AdapterObject->NumberOfMapRegisters);
1677 AdapterObject->CurrentWcb = WaitContextBlock;
1691 AdapterObject->MapRegisterBase = MasterAdapter->MapRegisterBase +
Index;
1692 if (!AdapterObject->ScatterGather)
1701 InsertTailList(&MasterAdapter->AdapterQueue, &AdapterObject->AdapterQueue);
1710 AdapterObject->MapRegisterBase =
NULL;
1711 AdapterObject->NumberOfMapRegisters = 0;
1717 AdapterObject->MapRegisterBase,
1733 AdapterObject->NumberOfMapRegisters = 0;
1780 (
ULONG)(RealMapRegisterBase - MasterAdapter->MapRegisterBase),
1788 while (!
IsListEmpty(&MasterAdapter->AdapterQueue))
1794 AdapterObject->NumberOfMapRegisters,
1804 AdapterObject->MapRegisterBase = MasterAdapter->MapRegisterBase +
Index;
1805 if (!AdapterObject->ScatterGather)
1807 AdapterObject->MapRegisterBase =
1811 Result = ((
PDRIVER_CONTROL)AdapterObject->CurrentWcb->DeviceRoutine)(AdapterObject->CurrentWcb->DeviceObject,
1812 AdapterObject->CurrentWcb->CurrentIrp,
1813 AdapterObject->MapRegisterBase,
1814 AdapterObject->CurrentWcb->DeviceContext);
1818 AdapterObject->NumberOfMapRegisters = 0;
1822 if (AdapterObject->NumberOfMapRegisters)
1826 (
ULONG)(AdapterObject->MapRegisterBase -
1827 MasterAdapter->MapRegisterBase),
1828 AdapterObject->NumberOfMapRegisters);
1860 ULONG CurrentLength;
1888 (
PVOID)CurrentAddress,
1899 CurrentAddress += CurrentLength;
1954 if (!AdapterObject->MasterDevice)
1957 if (AdapterObject->AdapterNumber == 1)
1983 if ((SlaveDma) && !(AdapterObject->IgnoreCount))
1989 RealMapRegisterBase,
2006 RealMapRegisterBase,
2014 RealMapRegisterBase->
Counter = 0;
2063 ULONG TransferLength;
2106 while (TransferLength < *
Length)
2108 MdlPage1 = *MdlPagesPtr;
2109 MdlPage2 = *(MdlPagesPtr + 1);
2110 if (MdlPage1 + 1 != MdlPage2)
break;
2111 if ((MdlPage1 ^ MdlPage2) & ~0xFFFFF)
break;
2116 if (TransferLength < *
Length) *
Length = TransferLength;
2132 while (TransferLength < *
Length)
2134 MdlPage1 = *MdlPagesPtr;
2135 MdlPage2 = *(MdlPagesPtr + 1);
2136 if (MdlPage1 + 1 != MdlPage2)
break;
2137 if (!
HalpEisaDma && ((MdlPage1 ^ MdlPage2) & ~0xF))
break;
2142 if (TransferLength > *
Length) TransferLength = *
Length;
2151 UseMapRegisters =
TRUE;
2154 TransferLength = *
Length;
2165 UseMapRegisters =
FALSE;
2177 UseMapRegisters =
TRUE;
2196 RealMapRegisterBase +
Counter,
2205 *
Length = TransferLength;
2211 if ((AdapterObject) && !(AdapterObject->MasterDevice))
2213 AdapterMode = AdapterObject->AdapterMode;
2222 if (AdapterObject->IgnoreCount)
2230 if (AdapterObject->Width16Bits)
2232 TransferLength >>= 1;
2238 if (AdapterObject->AdapterNumber == 1)
2265 (
UCHAR)(TransferLength - 1));
2267 (
UCHAR)((TransferLength - 1) >> 8));
2299 (
UCHAR)(TransferLength - 1));
2301 (
UCHAR)((TransferLength - 1) >> 8));
2346 ULONG MapRegisterNumber;
2349 if (AdapterObject->NeedsMapRegisters)
2355 AdapterObject->NumberOfMapRegisters = 0;
2371 MapRegisterNumber = 0;
2375 AdapterObject->MapRegisterBase =
2380 if (!AdapterObject->ScatterGather)
2383 AdapterObject->MapRegisterBase =
2390 AdapterObject->MapRegisterBase =
NULL;
2391 AdapterObject->NumberOfMapRegisters = 0;
2395 return AdapterObject->MapRegisterBase;
#define ExAllocatePoolUninitialized
DECLSPEC_NORETURN VOID NTAPI KeBugCheckEx(IN ULONG BugCheckCode, IN ULONG_PTR BugCheckParameter1, IN ULONG_PTR BugCheckParameter2, IN ULONG_PTR BugCheckParameter3, IN ULONG_PTR BugCheckParameter4)
_In_ PSCSI_REQUEST_BLOCK _In_opt_ PVOID _In_ ULONG _In_ BOOLEAN WriteToDevice
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
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)
VOID NTAPI MmFreeContiguousMemorySpecifyCache(IN PVOID BaseAddress, IN SIZE_T NumberOfBytes, IN MEMORY_CACHING_TYPE CacheType)
#define STATUS_NOT_IMPLEMENTED
#define RtlInitializeBitMap
#define RtlFindClearBitsAndSet
PKDEVICE_QUEUE_ENTRY NTAPI KeRemoveDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue)
BOOLEAN NTAPI KeInsertDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue, IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry)
VOID NTAPI KeInitializeDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue)
#define NT_SUCCESS(StatCode)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define InsertHeadList(ListHead, Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define IsListEmpty(ListHead)
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define KeInitializeEvent(pEvt, foo, foo2)
#define KeReleaseSpinLock(sl, irql)
#define KeSetEvent(pEvt, foo, foo2)
#define KeAcquireSpinLock(sl, irql)
#define KeGetCurrentIrql()
#define RemoveHeadList(ListHead)
#define InitializeListHead(ListHead)
#define KeInitializeSpinLock(sl)
IN PDCB IN PCCB IN VBO IN OUT PULONG OUT PDIRENT OUT PBCB OUT PVBO ByteOffset
for(i=0;i< ARRAY_SIZE(offsets);i++)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
BOOLEAN NTAPI IoFlushAdapterBuffers(IN PADAPTER_OBJECT AdapterObject, IN PMDL Mdl, IN PVOID MapRegisterBase, IN PVOID CurrentVa, IN ULONG Length, IN BOOLEAN WriteToDevice)
VOID NTAPI HalPutDmaAdapter(IN PADAPTER_OBJECT AdapterObject)
PVOID NTAPI HalAllocateCommonBuffer(IN PADAPTER_OBJECT AdapterObject, IN ULONG Length, IN PPHYSICAL_ADDRESS LogicalAddress, IN BOOLEAN CacheEnabled)
VOID NTAPI IoFreeMapRegisters(IN PADAPTER_OBJECT AdapterObject, IN PVOID MapRegisterBase, IN ULONG NumberOfMapRegisters)
PADAPTER_OBJECT NTAPI HalGetAdapter(IN PDEVICE_DESCRIPTION DeviceDescription, OUT PULONG NumberOfMapRegisters)
PHYSICAL_ADDRESS NTAPI IoMapTransfer(IN PADAPTER_OBJECT AdapterObject, IN PMDL Mdl, IN PVOID MapRegisterBase, IN PVOID CurrentVa, IN OUT PULONG Length, IN BOOLEAN WriteToDevice)
NTSTATUS NTAPI HalAllocateAdapterChannel(IN PADAPTER_OBJECT AdapterObject, IN PWAIT_CONTEXT_BLOCK WaitContextBlock, IN ULONG NumberOfMapRegisters, IN PDRIVER_CONTROL ExecutionRoutine)
VOID NTAPI IoFreeAdapterChannel(IN PADAPTER_OBJECT AdapterObject)
VOID NTAPI HalFreeCommonBuffer(IN PADAPTER_OBJECT AdapterObject, IN ULONG Length, IN PHYSICAL_ADDRESS LogicalAddress, IN PVOID VirtualAddress, IN BOOLEAN CacheEnabled)
BOOLEAN NTAPI HalFlushCommonBuffer(IN PADAPTER_OBJECT AdapterObject, IN ULONG Length, IN PHYSICAL_ADDRESS LogicalAddress, IN PVOID VirtualAddress)
ULONG NTAPI HalReadDmaCounter(IN PADAPTER_OBJECT AdapterObject)
PVOID NTAPI HalAllocateCrashDumpRegisters(IN PADAPTER_OBJECT AdapterObject, IN OUT PULONG NumberOfMapRegisters)
VOID FASTCALL KfLowerIrql(IN KIRQL NewIrql)
KIRQL FASTCALL KfRaiseIrql(IN KIRQL NewIrql)
PADAPTER_OBJECT NTAPI HalpDmaAllocateMasterAdapter(VOID)
static KEVENT HalpDmaLock
static PADAPTER_OBJECT HalpMasterAdapter
#define MAX_MAP_REGISTERS
VOID NTAPI HalpGrowMapBufferWorker(IN PVOID DeferredContext)
BOOLEAN NTAPI HalpGrowMapBuffers(IN PADAPTER_OBJECT AdapterObject, IN ULONG SizeOfMapBuffers)
static DMA_OPERATIONS HalpDmaOperations
NTSTATUS NTAPI HalBuildMdlFromScatterGatherList(IN PDMA_ADAPTER DmaAdapter, IN PSCATTER_GATHER_LIST ScatterGather, IN PMDL OriginalMdl, OUT PMDL *TargetMdl)
static BOOLEAN HalpEisaDma
VOID NTAPI HalpCopyBufferMap(IN PMDL Mdl, IN PROS_MAP_REGISTER_ENTRY MapRegisterBase, IN PVOID CurrentVa, IN ULONG Length, IN BOOLEAN WriteToDevice)
static KSPIN_LOCK HalpDmaAdapterListLock
IO_ALLOCATION_ACTION NTAPI HalpScatterGatherAdapterControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID MapRegisterBase, IN PVOID Context)
PHYSICAL_ADDRESS NTAPI HalpGetAdapterMaximumPhysicalAddress(IN PADAPTER_OBJECT AdapterObject)
struct _SCATTER_GATHER_CONTEXT * PSCATTER_GATHER_CONTEXT
PADAPTER_OBJECT NTAPI HalpDmaAllocateChildAdapter(IN ULONG NumberOfMapRegisters, IN PDEVICE_DESCRIPTION DeviceDescription)
ULONG NTAPI HalpDmaGetDmaAlignment(IN PADAPTER_OBJECT AdapterObject)
struct _SCATTER_GATHER_CONTEXT SCATTER_GATHER_CONTEXT
VOID NTAPI HalPutScatterGatherList(IN PADAPTER_OBJECT AdapterObject, IN PSCATTER_GATHER_LIST ScatterGather, IN BOOLEAN WriteToDevice)
static const ULONG_PTR HalpEisaPortPage[8]
static PADAPTER_OBJECT HalpEisaAdapter[8]
NTSTATUS NTAPI HalBuildScatterGatherList(IN PADAPTER_OBJECT AdapterObject, IN PDEVICE_OBJECT DeviceObject, IN PMDL Mdl, IN PVOID CurrentVa, IN ULONG Length, IN PDRIVER_LIST_CONTROL ExecutionRoutine, IN PVOID Context, IN BOOLEAN WriteToDevice, IN PVOID ScatterGatherBuffer, IN ULONG ScatterGatherLength)
PDMA_ADAPTER NTAPI HalpGetDmaAdapter(IN PVOID Context, IN PDEVICE_DESCRIPTION DeviceDescription, OUT PULONG NumberOfMapRegisters)
static LIST_ENTRY HalpDmaAdapterList
NTSTATUS NTAPI HalGetScatterGatherList(IN PADAPTER_OBJECT AdapterObject, IN PDEVICE_OBJECT DeviceObject, IN PMDL Mdl, IN PVOID CurrentVa, IN ULONG Length, IN PDRIVER_LIST_CONTROL ExecutionRoutine, IN PVOID Context, IN BOOLEAN WriteToDevice)
NTSTATUS NTAPI HalCalculateScatterGatherListSize(IN PADAPTER_OBJECT AdapterObject, IN PMDL Mdl OPTIONAL, IN PVOID CurrentVa, IN ULONG Length, OUT PULONG ScatterGatherListSize, OUT PULONG pNumberOfMapRegisters)
BOOLEAN NTAPI HalpDmaInitializeEisaAdapter(IN PADAPTER_OBJECT AdapterObject, IN PDEVICE_DESCRIPTION DeviceDescription)
#define COMPATIBLE_TIMING
struct _ROS_MAP_REGISTER_ENTRY * PROS_MAP_REGISTER_ENTRY
#define DEMAND_REQUEST_MODE
#define SINGLE_REQUEST_MODE
struct _GROW_WORK_ITEM * PGROW_WORK_ITEM
struct _ADAPTER_OBJECT ADAPTER_OBJECT
#define CASCADE_REQUEST_MODE
#define ExFreePoolWithTag(_P, _T)
#define InitializeObjectAttributes(p, n, a, r, s)
_Out_ PNDIS_HANDLE _Out_ PUINT _In_ PNDIS_STRING _In_ NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress
#define MACHINE_TYPE_EISA
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
_In_ ULONG _In_ ULONG _In_ ULONG Length
POBJECT_TYPE IoAdapterObjectType
NTSTATUS NTAPI IoAllocateAdapterChannel(IN PADAPTER_OBJECT AdapterObject, IN PDEVICE_OBJECT DeviceObject, IN ULONG NumberOfMapRegisters, IN PDRIVER_CONTROL ExecutionRoutine, IN PVOID Context)
PHYSICAL_ADDRESS NTAPI MmGetPhysicalAddress(IN PVOID Address)
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)
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)
#define READ_PORT_UCHAR(p)
#define WRITE_PORT_UCHAR(p, d)
#define OBJ_KERNEL_HANDLE
#define ASSERT_IRQL_LESS_OR_EQUAL(x)
#define STATUS_BUFFER_TOO_SMALL
PULONG MinorVersion OPTIONAL
DMA1_ADDRESS_COUNT DmaAddressCount[4]
DMA2_ADDRESS_COUNT DmaAddressCount[4]
struct _DMA_OPERATIONS * DmaOperations
PFREE_ADAPTER_CHANNEL FreeAdapterChannel
PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
PFREE_MAP_REGISTERS FreeMapRegisters
PMAP_TRANSFER MapTransfer
PHYSICAL_ADDRESS PhysicalAddress
PVOID AdapterListControlContext
PADAPTER_OBJECT AdapterObject
PDRIVER_LIST_CONTROL AdapterListControlRoutine
ULONG NumberOfMapRegisters
PDRIVER_CONTROL DeviceRoutine
static LARGE_INTEGER Counter
#define __WARNING_DEREF_NULL_PTR
#define _PRAGMA_WARNING_SUPPRESS(x)
#define UNIMPLEMENTED_ONCE
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INSUFFICIENT_RESOURCES
struct _LARGE_INTEGER::@2500 u
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
_In_ WDFDMATRANSACTION _In_ size_t MaximumLength
_In_ WDFDMATRANSACTION _Out_opt_ ULONG * MapRegisterCount
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING DeviceDescription
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_ WDFREQUEST _In_ PWDF_USB_CONTROL_SETUP_PACKET _In_opt_ WDFMEMORY _In_opt_ PWDFMEMORY_OFFSET TransferOffset
_Must_inspect_result_ _In_ PWDF_WORKITEM_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWORKITEM * WorkItem
VOID NTAPI ExQueueWorkItem(IN PWORK_QUEUE_ITEM WorkItem, IN WORK_QUEUE_TYPE QueueType)
_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
#define ExInitializeWorkItem(Item, Routine, Context)
_Out_ PULONG NumberOfMapRegisters
_In_ PDEVICE_OBJECT _In_ ULONG _In_ PDRIVER_CONTROL ExecutionRoutine
VOID(NTAPI * PFREE_ADAPTER_CHANNEL)(_In_ PDMA_ADAPTER DmaAdapter)
NTSTATUS(NTAPI * PBUILD_SCATTER_GATHER_LIST)(_In_ PDMA_ADAPTER DmaAdapter, _In_ PDEVICE_OBJECT DeviceObject, _In_ PMDL Mdl, _In_ PVOID CurrentVa, _In_ ULONG Length, _In_ PDRIVER_LIST_CONTROL ExecutionRoutine, _In_ PVOID Context, _In_ BOOLEAN WriteToDevice, _In_ PVOID ScatterGatherBuffer, _In_ ULONG ScatterGatherLength)
VOID(NTAPI * PFREE_MAP_REGISTERS)(_In_ PDMA_ADAPTER DmaAdapter, PVOID MapRegisterBase, ULONG NumberOfMapRegisters)
struct _DMA_OPERATIONS DMA_OPERATIONS
struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS PhysicalAddress
ULONG(NTAPI * PREAD_DMA_COUNTER)(_In_ PDMA_ADAPTER DmaAdapter)
struct _SCATTER_GATHER_LIST * PSCATTER_GATHER_LIST
_Inout_ struct _IRP _In_ PVOID MapRegisterBase
enum _IO_ALLOCATION_ACTION IO_ALLOCATION_ACTION
@ DeallocateObjectKeepRegisters
DRIVER_LIST_CONTROL * PDRIVER_LIST_CONTROL
#define DEVICE_DESCRIPTION_VERSION1
PHYSICAL_ADDRESS(NTAPI * PMAP_TRANSFER)(_In_ PDMA_ADAPTER DmaAdapter, _In_ PMDL Mdl, _In_ PVOID MapRegisterBase, _In_ PVOID CurrentVa, _Inout_ PULONG Length, _In_ BOOLEAN WriteToDevice)
NTSTATUS(NTAPI * PBUILD_MDL_FROM_SCATTER_GATHER_LIST)(_In_ PDMA_ADAPTER DmaAdapter, _In_ PSCATTER_GATHER_LIST ScatterGather, _In_ PMDL OriginalMdl, _Out_ PMDL *TargetMdl)
BOOLEAN(NTAPI * PFLUSH_ADAPTER_BUFFERS)(_In_ PDMA_ADAPTER DmaAdapter, _In_ PMDL Mdl, _In_ PVOID MapRegisterBase, _In_ PVOID CurrentVa, _In_ ULONG Length, _In_ BOOLEAN WriteToDevice)
#define DEVICE_DESCRIPTION_VERSION2
_In_ struct _IRP _In_ struct _SCATTER_GATHER_LIST * ScatterGather
DRIVER_CONTROL * PDRIVER_CONTROL
PVOID(NTAPI * PALLOCATE_COMMON_BUFFER)(_In_ PDMA_ADAPTER DmaAdapter, _In_ ULONG Length, _Out_ PPHYSICAL_ADDRESS LogicalAddress, _In_ BOOLEAN CacheEnabled)
NTSTATUS(NTAPI * PGET_SCATTER_GATHER_LIST)(_In_ PDMA_ADAPTER DmaAdapter, _In_ PDEVICE_OBJECT DeviceObject, _In_ PMDL Mdl, _In_ PVOID CurrentVa, _In_ ULONG Length, _In_ PDRIVER_LIST_CONTROL ExecutionRoutine, _In_ PVOID Context, _In_ BOOLEAN WriteToDevice)
NTSTATUS(NTAPI * PCALCULATE_SCATTER_GATHER_LIST_SIZE)(_In_ PDMA_ADAPTER DmaAdapter, _In_ PMDL Mdl OPTIONAL, _In_ PVOID CurrentVa, _In_ ULONG Length, _Out_ PULONG ScatterGatherListSize, _Out_ OPTIONAL PULONG pNumberOfMapRegisters)
VOID(NTAPI * PPUT_SCATTER_GATHER_LIST)(_In_ PDMA_ADAPTER DmaAdapter, _In_ PSCATTER_GATHER_LIST ScatterGather, _In_ BOOLEAN WriteToDevice)
VOID(NTAPI * PPUT_DMA_ADAPTER)(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)
VOID(NTAPI * PFREE_COMMON_BUFFER)(_In_ PDMA_ADAPTER DmaAdapter, _In_ ULONG Length, _In_ PHYSICAL_ADDRESS LogicalAddress, _In_ PVOID VirtualAddress, _In_ BOOLEAN CacheEnabled)
ULONG(NTAPI * PGET_DMA_ALIGNMENT)(_In_ PDMA_ADAPTER DmaAdapter)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
_Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
_In_opt_ PVOID DeferredContext
#define MmGetMdlVirtualAddress(_Mdl)
#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority)
#define BYTES_TO_PAGES(Size)
#define MmGetMdlPfnArray(_Mdl)
_Must_inspect_result_ _In_ PHYSICAL_ADDRESS LowestAcceptableAddress
#define ObDereferenceObject
#define ObReferenceObject