32#ifdef WPP_EVENT_TRACING
33#include "ParaNdis5-Impl.tmh"
40#define SEND_ENTRY_FLAG_READY 0x0001
41#define SEND_ENTRY_TSO_USED 0x0002
42#define SEND_ENTRY_NO_INDIRECT 0x0004
43#define SEND_ENTRY_TCP_CS 0x0008
44#define SEND_ENTRY_UDP_CS 0x0010
45#define SEND_ENTRY_IP_CS 0x0020
67#define REF_MINIPORT(Packet) ((PVOID *)(Packet->MiniportReservedEx + IDXTOUSE * sizeof(PVOID)))
201 ULONG requiresProcessing;
203 if (requiresProcessing)
490 qInfo.
TagHeader.UserPriority = (pPriority[2] & 0xE0) >> 5;
493 qInfo.
TagHeader.VlanId = (((
USHORT)(pPriority[2] & 0x0F)) << 8) | pPriority[3];
533 qCSInfo.
Receive.NdisPacketIpChecksumFailed = csRes.
flags.IpFailed;
534 qCSInfo.
Receive.NdisPacketIpChecksumSucceeded = csRes.
flags.IpOK;
535 qCSInfo.
Receive.NdisPacketTcpChecksumFailed = csRes.
flags.TcpFailed;
536 qCSInfo.
Receive.NdisPacketTcpChecksumSucceeded = csRes.
flags.TcpOK;
537 qCSInfo.
Receive.NdisPacketUdpChecksumFailed = csRes.
flags.UdpFailed;
538 qCSInfo.
Receive.NdisPacketUdpChecksumSucceeded = csRes.
flags.UdpOK;
585 *pNum = pSGList->NumberOfElements;
627 if (bPreview) PriorityDataLong = 0;
634 if (ulToCopy > maxSize) ulToCopy = bPreview ? maxSize : 0;
651 if (uLength > ulToCopy) uLength = ulToCopy;
653 if ((PriorityDataLong & 0xFFFF) &&
664 ulCopyNow = uLength - ulCopyNow;
709 ULONG ipheaderOffset,
710 ULONG maxPossiblePacketSize,
715 ULONG allHeaders = tcpipHeaders + ipheaderOffset;
716 if (tcpipHeaders && (mss + allHeaders) <= maxPossiblePacketSize)
718 ULONG nFragments = (packetSize - allHeaders)/mss;
719 ULONG last = (packetSize - allHeaders)%mss;
720 ul = nFragments * (mss + allHeaders) +
last + (
last ? allHeaders : 0);
722 DPrintf(1, (
"[%s]%s %d/%d, headers %d)",
723 __FUNCTION__, !ul ?
"ERROR:" :
"", ul, mss, allHeaders));
746 PVOID ReferenceValue,
757 if (pSGList && pSGList->NumberOfElements)
759 UINT i, lengthGet = 0, lengthPut = 0, nCompleteBuffersToSkip = 0, nBytesSkipInFirstBuffer = 0;
762 if (PriorityDataLong && !lengthGet)
767 for (
i = 0;
i < pSGList->NumberOfElements; ++
i)
772 nBytesSkipInFirstBuffer = pSGList->Elements[
i].Length - (
len - lengthGet);
776 nCompleteBuffersToSkip++;
779 if (lengthGet >
len) lengthGet =
len;
785 DPrintf(0, (
"[%s] ERROR: can not substitute %d bytes, sending as is",
__FUNCTION__, lengthPut));
786 nCompleteBuffersToSkip = 0;
787 nBytesSkipInFirstBuffer = 0;
788 lengthGet = lengthPut = 0;
799 pSGElements += nCompleteBuffersToSkip;
801 DPrintf(1, (
"[%s](%d bufs) skip %d buffers + %d bytes",
802 __FUNCTION__, pSGList->NumberOfElements, nCompleteBuffersToSkip, nBytesSkipInFirstBuffer));
809 for (
i = nCompleteBuffersToSkip;
i < pSGList->NumberOfElements; ++
i)
811 if (nBytesSkipInFirstBuffer)
814 buffers->length = pSGElements->
Length - nBytesSkipInFirstBuffer;
816 nBytesSkipInFirstBuffer = 0;
837 ULONG dummyTransferSize = 0;
869 if (dummyTransferSize)
948 UINT nBuffersSent = 0, nBytesSent = 0;
971 bDataAvailable =
TRUE;
1005 nBytesSent +=
result.size;
1021#ifdef PARANDIS_TEST_TX_KICK_ALWAYS
1029 else if (bDataAvailable)
1064 if (CallbackToCall) CallbackToCall(pContext);
1094 LPCSTR offloadName =
"NO offload";
1110 errorFmt =
"invalid priority tag";
1112 else if (qInfo.
Value)
1126 DPrintf(0, (
"[%s] Request for offload with NO MSS, lso %d, ipheader %d",
1133 errorFmt =
"illegal LSO request";
1141 errorFmt =
"mss is too big";
1142 else if (
len > 0xFFFF)
1143 errorFmt =
"packet is bigger than we able to send";
1146 offloadName =
"LSO";
1152 errorFmt =
"packet too big to fragment";
1153 else if (len < pContext->Offload.ipHeaderOffset)
1154 errorFmt =
"ip offset is bigger than packet";
1156 errorFmt =
"attempt to offload non-IP packet";
1157 else if (mss < pContext->Offload.ipHeaderOffset)
1158 errorFmt =
"mss is too small";
1165 if (csInfo.
Transmit.NdisPacketChecksumV4)
1167 if (csInfo.
Transmit.NdisPacketTcpChecksum)
1169 offloadName =
"TCP CS";
1173 errorFmt =
"TCP CS requested but not enabled";
1175 if (csInfo.
Transmit.NdisPacketUdpChecksum)
1177 offloadName =
"UDP CS";
1181 errorFmt =
"UDP CS requested but not enabled";
1183 if (csInfo.
Transmit.NdisPacketIpChecksum)
1188 errorFmt =
"IP CS requested but not enabled";
1259 UINT uPacketLength = 0;
1273 UINT nFragments = 0;
1448 ULONG requiresProcessing;
1456 if (requiresProcessing)
@ hopInternalReceiveResume
@ hopInternalReceivePause
#define VIRTIO_NET_HDR_GSO_TCPV4
#define VIRTIO_NET_HDR_F_NEEDS_CSUM
NDIS_STATUS ParaNdis5_StopReceive(PARANDIS_ADAPTER *pContext, BOOLEAN bStop, ONPAUSECOMPLETEPROC Callback)
VOID NTAPI ParaNdis5_SendPackets(IN NDIS_HANDLE MiniportAdapterContext, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets)
VOID ParaNdis_FreePhysicalMemory(PARANDIS_ADAPTER *pContext, tCompletePhysicalAddress *pAddresses)
static VOID NTAPI OnDPCPostProcessTimer(IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3)
NDIS_HANDLE ParaNdis_OpenNICConfiguration(PARANDIS_ADAPTER *pContext)
VOID ParaNdis_OnTransmitBufferReleased(PARANDIS_ADAPTER *pContext, IONetDescriptor *pDesc)
#define SEND_ENTRY_NO_INDIRECT
PVOID ParaNdis_AllocateMemory(PARANDIS_ADAPTER *pContext, ULONG ulRequiredSize)
static void InitializeTransferParameters(tTxOperationParameters *pParams, tSendEntry *pEntry)
static FORCEINLINE void GET_NUMBER_OF_SG_ELEMENTS(PNDIS_PACKET Packet, UINT *pNum)
static FORCEINLINE ULONG CalculateTotalOffloadSize(ULONG packetSize, ULONG mss, ULONG ipheaderOffset, ULONG maxPossiblePacketSize, tTcpIpPacketParsingResult packetReview)
VOID ParaNdis_IndicateReceivedBatch(PARANDIS_ADAPTER *pContext, tPacketIndicationType *pBatch, ULONG nofPackets)
VOID NTAPI ParaNdis5_ReturnPacket(IN NDIS_HANDLE MiniportAdapterContext, IN PNDIS_PACKET Packet)
VOID NTAPI ParaNdis5_CancelSendPackets(IN NDIS_HANDLE MiniportAdapterContext, IN PVOID CancelId)
BOOLEAN ParaNdis_InitialAllocatePhysicalMemory(PARANDIS_ADAPTER *pContext, tCompletePhysicalAddress *pAddresses)
VOID ParaNdis_SetPowerState(PARANDIS_ADAPTER *pContext, NDIS_DEVICE_POWER_STATE newState)
#define SEND_ENTRY_TSO_USED
tPacketIndicationType ParaNdis_IndicateReceivedPacket(PARANDIS_ADAPTER *pContext, PVOID dataBuffer, PULONG pLength, BOOLEAN bPrepareOnly, pIONetDescriptor pBuffersDesc)
#define SEND_ENTRY_TCP_CS
static void DebugParseOffloadBits()
VOID ParaNdis_PacketMapper(PARANDIS_ADAPTER *pContext, PNDIS_PACKET packet, PVOID ReferenceValue, struct VirtIOBufferDescriptor *buffers, pIONetDescriptor pDesc, tMapperResult *pMapperResult)
BOOLEAN ParaNdis_SynchronizeWithInterrupt(PARANDIS_ADAPTER *pContext, ULONG messageId, tSynchronizedProcedure procedure, PVOID parameter)
VOID ParaNdis_IndicateConnect(PARANDIS_ADAPTER *pContext, BOOLEAN bConnected, BOOLEAN bForce)
static FORCEINLINE ULONG MaxNdisBufferDataSize(PARANDIS_ADAPTER *pContext, pIONetDescriptor pBufferDesc)
#define SEND_ENTRY_UDP_CS
VOID ParaNdis_FinalizeCleanup(PARANDIS_ADAPTER *pContext)
NDIS_STATUS NTAPI ParaNdis_FinishSpecificInitialization(PARANDIS_ADAPTER *pContext)
VOID NTAPI ParaNdis5_HandleDPC(IN NDIS_HANDLE MiniportAdapterContext)
void ParaNdis_RestoreDeviceConfigurationAfterReset(PARANDIS_ADAPTER *pContext)
struct _tagSendEntry tSendEntry
tCopyPacketResult ParaNdis_PacketCopier(PNDIS_PACKET Packet, PVOID dest, ULONG maxSize, PVOID refValue, BOOLEAN bPreview)
static VOID NTAPI OnConnectTimer(IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3)
void ParaNdis_UnbindBufferFromPacket(PARANDIS_ADAPTER *pContext, pIONetDescriptor pBufferDesc)
#define SEND_ENTRY_FLAG_READY
BOOLEAN ParaNdis_BindBufferToPacket(PARANDIS_ADAPTER *pContext, pIONetDescriptor pBufferDesc)
#define REF_MINIPORT(Packet)
static __inline tSendEntry * PrepareSendEntry(PARANDIS_ADAPTER *pContext, PNDIS_PACKET Packet, ULONG len)
static void CompletePacket(PARANDIS_ADAPTER *pContext, PNDIS_PACKET Packet)
NDIS_STATUS ParaNdis5_StopSend(PARANDIS_ADAPTER *pContext, BOOLEAN bStop, ONPAUSECOMPLETEPROC Callback)
BOOLEAN ParaNdis_ProcessTx(PARANDIS_ADAPTER *pContext, BOOLEAN IsDpc, BOOLEAN IsInterrupt)
void virtqueue_kick(struct virtqueue *vq)
static void virtqueue_kick_always(struct virtqueue *vq)
#define DEBUG_ENTRY(level)
#define DPrintf(Level, Fmt)
#define DEBUG_EXIT_STATUS(level, status)
VOID EXPORT NdisAllocateBuffer(OUT PNDIS_STATUS Status, OUT PNDIS_BUFFER *Buffer, IN NDIS_HANDLE PoolHandle, IN PVOID VirtualAddress, IN UINT Length)
VOID EXPORT NdisFreePacket(IN PNDIS_PACKET Packet)
VOID EXPORT NdisAllocateBufferPool(OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE PoolHandle, IN UINT NumberOfDescriptors)
VOID EXPORT NdisFreeBufferPool(IN NDIS_HANDLE PoolHandle)
VOID EXPORT NdisAllocatePacket(OUT PNDIS_STATUS Status, OUT PNDIS_PACKET *Packet, IN NDIS_HANDLE PoolHandle)
VOID EXPORT NdisUnchainBufferAtFront(IN OUT PNDIS_PACKET Packet, OUT PNDIS_BUFFER *Buffer)
VOID EXPORT NdisFreePacketPool(IN NDIS_HANDLE PoolHandle)
VOID EXPORT NdisAllocatePacketPool(OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE PoolHandle, IN UINT NumberOfDescriptors, IN UINT ProtocolReservedLength)
VOID EXPORT NdisOpenConfiguration(OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE ConfigurationHandle, IN NDIS_HANDLE WrapperConfigurationContext)
VOID EXPORT NdisInitializeEvent(IN PNDIS_EVENT Event)
NDIS_STATUS EXPORT NdisMAllocateMapRegisters(IN NDIS_HANDLE MiniportAdapterHandle, IN UINT DmaChannel, IN NDIS_DMA_SIZE DmaSize, IN ULONG BaseMapRegistersNeeded, IN ULONG MaximumBufferSize)
VOID EXPORT NdisMDeregisterInterrupt(IN PNDIS_MINIPORT_INTERRUPT Interrupt)
VOID EXPORT NdisMFreeMapRegisters(IN NDIS_HANDLE MiniportAdapterHandle)
NDIS_STATUS EXPORT NdisMInitializeScatterGatherDma(IN NDIS_HANDLE MiniportAdapterHandle, IN BOOLEAN Dma64BitAddresses, IN ULONG MaximumPhysicalMapping)
NDIS_STATUS EXPORT NdisMRegisterInterrupt(OUT PNDIS_MINIPORT_INTERRUPT Interrupt, IN NDIS_HANDLE MiniportAdapterHandle, IN UINT InterruptVector, IN UINT InterruptLevel, IN BOOLEAN RequestIsr, IN BOOLEAN SharedInterrupt, IN NDIS_INTERRUPT_MODE InterruptMode)
VOID EXPORT NdisFreeMemory(IN PVOID VirtualAddress, IN UINT Length, IN UINT MemoryFlags)
NDIS_STATUS EXPORT NdisAllocateMemoryWithTag(OUT PVOID *VirtualAddress, IN UINT Length, IN ULONG Tag)
VOID EXPORT NdisMAllocateSharedMemory(IN NDIS_HANDLE MiniportAdapterHandle, IN ULONG Length, IN BOOLEAN Cached, OUT PVOID *VirtualAddress, OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress)
VOID EXPORT NdisMFreeSharedMemory(IN NDIS_HANDLE MiniportAdapterHandle, IN ULONG Length, IN BOOLEAN Cached, IN PVOID VirtualAddress, IN NDIS_PHYSICAL_ADDRESS PhysicalAddress)
VOID EXPORT NdisCancelTimer(IN PNDIS_TIMER Timer, OUT PBOOLEAN TimerCancelled)
VOID EXPORT NdisInitializeTimer(IN OUT PNDIS_TIMER Timer, IN PNDIS_TIMER_FUNCTION TimerFunction, IN PVOID FunctionContext)
VOID EXPORT NdisSetTimer(IN PNDIS_TIMER Timer, IN UINT MillisecondsToDelay)
#define InsertTailList(ListHead, Entry)
#define InsertHeadList(ListHead, Entry)
#define IsListEmpty(ListHead)
#define RemoveHeadList(ListHead)
#define InitializeListHead(ListHead)
#define ETH_PRIORITY_HEADER_OFFSET
struct _tagTCPHeader TCPHeader
#define MAX_IPV4_HEADER_SIZE
#define TCP_CHECKSUM_OFFSET
#define ETH_PRIORITY_HEADER_SIZE
#define ETH_HAS_PRIO_HEADER(Address)
static void FORCEINLINE SetPriorityData(UCHAR *pDest, ULONG priority, ULONG VlanID)
GLuint GLsizei GLsizei * length
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
FxContextHeader * pHeader
void ParaNdis_PadPacketReceived(PVOID pDataBuffer, PULONG pLength)
tTcpIpPacketParsingResult ParaNdis_CheckSumVerify(PVOID buffer, ULONG size, ULONG flags, LPCSTR caller)
UINT ParaNdis_VirtIONetReleaseTransmitBuffers(PARANDIS_ADAPTER *pContext)
#define RtlOffsetToPointer(Base, Offset)
tChecksumCheckResult ParaNdis_CheckRxChecksum(PARANDIS_ADAPTER *pContext, ULONG virtioFlags, PVOID pRxPacket, ULONG len)
#define PARANDIS_UNLIMITED_PACKETS_TO_INDICATE
static BOOLEAN FORCEINLINE IsPrioritySupported(PARANDIS_ADAPTER *pContext)
static BOOLEAN FORCEINLINE IsVlanSupported(PARANDIS_ADAPTER *pContext)
static BOOLEAN FORCEINLINE IsTimeToReleaseTx(PARANDIS_ADAPTER *pContext)
#define PARANDIS_MEMORY_TAG
VOID ParaNdis_ReportLinkStatus(PARANDIS_ADAPTER *pContext, BOOLEAN bForce)
struct _tagIONetDescriptor * pIONetDescriptor
ULONG ParaNdis_DPCWorkBody(PARANDIS_ADAPTER *pContext, ULONG ulMaxPacketsToIndicate)
VOID(* ONPAUSECOMPLETEPROC)(VOID *)
static void FORCEINLINE ParaNdis_DebugHistory(PARANDIS_ADAPTER *pContext, eHistoryLogOperation op, PVOID pParam1, ULONG lParam2, ULONG lParam3, ULONG lParam4)
tCopyPacketResult ParaNdis_DoSubmitPacket(PARANDIS_ADAPTER *pContext, tTxOperationParameters *Params)
static BOOLEAN FORCEINLINE IsValidVlanId(PARANDIS_ADAPTER *pContext, ULONG VlanID)
BOOLEAN(NTAPI * tSynchronizedProcedure)(tSynchronizedContext *context)
#define NdisMIndicateReceivePacket(MiniportAdapterHandle, ReceivePackets, NumberOfPackets)
#define NDIS_OOB_DATA_FROM_PACKET(_Packet)
#define NdisReleaseSpinLock(_SpinLock)
#define NdisGetNextBuffer(CurrentBuffer, NextBuffer)
#define NDIS_STATUS_PENDING
_In_ NDIS_HANDLE _In_ PNDIS_PACKET Packet
#define NdisInterlockedIncrement(Addend)
#define NDIS_STATUS_MEDIA_CONNECT
#define NdisQueryPacketLength(_Packet, _TotalPacketLength)
#define NdisMIndicateStatusComplete(MiniportAdapterHandle)
_In_ PVOID _In_ PVOID SystemSpecific2
#define NdisZeroMemory(Destination, Length)
#define NdisReinitializePacket(Packet)
#define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize)
static __inline VOID NdisQueryPacket(IN PNDIS_PACKET Packet, OUT PUINT PhysicalBufferCount OPTIONAL, OUT PUINT BufferCount OPTIONAL, OUT PNDIS_BUFFER *FirstBuffer OPTIONAL, OUT PUINT TotalPacketLength OPTIONAL)
#define NDIS_STATUS_MEDIA_DISCONNECT
#define NDIS_PROTOCOL_ID_TCP_IP
#define NdisInterruptLevelSensitive
_In_ PVOID FunctionContext
#define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType)
#define NDIS_STATUS_FAILURE
#define NDIS_STATUS_REQUEST_ABORTED
_In_ PPNDIS_PACKET _In_ UINT NumberOfPackets
#define NdisQueryBufferSafe(_Buffer, _VirtualAddress, _Length, _Priority)
#define NdisAdjustBufferLength(Buffer, Length)
_In_ PPNDIS_PACKET PacketArray
#define NDIS_STATUS_SUCCESS
#define PROTOCOL_RESERVED_SIZE_IN_PACKET
@ TcpIpChecksumPacketInfo
@ ScatterGatherListPacketInfo
#define NDIS_GET_PACKET_STATUS(_Packet)
#define NDIS_STATUS_BUFFER_OVERFLOW
#define NdisInterlockedDecrement(Addend)
#define NDIS_STATUS_NOT_ACCEPTED
#define NDIS_GET_PACKET_CANCEL_ID(Packet)
#define NDIS_SET_PACKET_STATUS(_Packet, _Status)
#define NdisChainBufferAtFront(Packet, Buffer)
#define NdisMSendComplete(MiniportAdapterHandle, Packet, Status)
#define NdisAcquireSpinLock(_SpinLock)
#define NdisMIndicateStatus(MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize)
#define NdisMoveMemory(Destination, Source, Length)
#define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet)
_In_ PVOID _In_ PVOID _In_ PVOID SystemSpecific3
BOOLEAN EXPORT NdisMSynchronizeWithInterrupt(IN PNDIS_MINIPORT_INTERRUPT Interrupt, IN PVOID SynchronizeFunction, IN PVOID SynchronizeContext)
#define UNREFERENCED_PARAMETER(P)
enum _NDIS_DEVICE_POWER_STATE NDIS_DEVICE_POWER_STATE
_In_ ULONG _In_ ULONG _In_ ULONG Length
PKINTERRUPT InterruptObject
struct _NDIS_PACKET_8021Q_INFO::@2111::@2113 TagHeader
struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO::@2122::@2125 Receive
struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO::@2122::@2124 Transmit
struct _tagChecksumCheckResult::@1002::@1004 flags
PHYSICAL_ADDRESS Physical
tCompletePhysicalAddress HeaderInfo
tPacketHolderType pHolder
tCompletePhysicalAddress DataInfo
tOffloadSettingsFlags flags
NDIS_DEVICE_POWER_STATE powerState
tAdapterResources AdapterResources
NDIS_MINIPORT_INTERRUPT Interrupt
UINT maxFreeHardwareBuffers
LONG NetTxPacketsToReturn
NDIS_HANDLE MiniportHandle
UINT nofFreeHardwareBuffers
NDIS_SPIN_LOCK ReceiveLock
ONPAUSECOMPLETEPROC ReceivePauseCompletionProc
NDIS_STATISTICS_INFO Statistics
tSendReceiveState SendState
BOOLEAN bUseMergedBuffers
struct virtqueue * NetSendQueue
NDIS_HANDLE WrapperConfigurationHandle
UINT nofFreeTxDescriptors
ONPAUSECOMPLETEPROC SendPauseCompletionProc
tReuseReceiveBufferProc ReuseBufferProc
NDIS_TIMER DPCPostProcessTimer
tSendReceiveState ReceiveState
UINT NetMaxReceiveBuffers
ULONG ulPriorityVlanSetting
tMaxPacketSize MaxPacketSize
struct _tagPARANDIS_ADAPTER::@1005 extraStatistics
LIST_ENTRY NetReceiveBuffersWaiting
PARANDIS_ADAPTER * pContext
#define RtlMoveMemory(Destination, Source, Length)
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
struct _SCATTER_GATHER_LIST * PSCATTER_GATHER_LIST