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)
312 #if !DO_MAP_REGISTERS 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";
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)
_In_ PPNDIS_PACKET _In_ UINT NumberOfPackets
#define PARANDIS_UNLIMITED_PACKETS_TO_INDICATE
struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO::@2092::@2095 Receive
VOID EXPORT NdisMSendComplete(IN NDIS_HANDLE MiniportAdapterHandle, IN PNDIS_PACKET Packet, IN NDIS_STATUS Status)
#define NdisInterruptLevelSensitive
tSendReceiveState ReceiveState
#define DEBUG_EXIT_STATUS(level, status)
VOID EXPORT NdisAllocatePacketPool(OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE PoolHandle, IN UINT NumberOfDescriptors, IN UINT ProtocolReservedLength)
NDIS_SPIN_LOCK ReceiveLock
static BOOLEAN FORCEINLINE IsTimeToReleaseTx(PARANDIS_ADAPTER *pContext)
VOID EXPORT NdisAllocatePacket(OUT PNDIS_STATUS Status, OUT PNDIS_PACKET *Packet, IN NDIS_HANDLE PoolHandle)
static FORCEINLINE ULONG CalculateTotalOffloadSize(ULONG packetSize, ULONG mss, ULONG ipheaderOffset, ULONG maxPossiblePacketSize, tTcpIpPacketParsingResult packetReview)
_In_ ULONG _In_ ULONG _In_ ULONG Length
VOID EXPORT NdisMAllocateSharedMemory(IN NDIS_HANDLE MiniportAdapterHandle, IN ULONG Length, IN BOOLEAN Cached, OUT PVOID *VirtualAddress, OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress)
static void virtqueue_kick_always(struct virtqueue *vq)
_In_ NDIS_HANDLE _In_ PNDIS_PACKET Packet
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
#define NDIS_STATUS_PENDING
BOOLEAN ParaNdis_ProcessTx(PARANDIS_ADAPTER *pContext, BOOLEAN IsDpc, BOOLEAN IsInterrupt)
NDIS_STATUS EXPORT NdisAllocateMemoryWithTag(OUT PVOID *VirtualAddress, IN UINT Length, IN ULONG Tag)
UINT ParaNdis_VirtIONetReleaseTransmitBuffers(PARANDIS_ADAPTER *pContext)
static FORCEINLINE ULONG MaxNdisBufferDataSize(PARANDIS_ADAPTER *pContext, pIONetDescriptor pBufferDesc)
NDIS_DEVICE_POWER_STATE powerState
tAdapterResources AdapterResources
#define UNREFERENCED_PARAMETER(P)
LONG EXPORT NdisInterlockedIncrement(IN PLONG Addend)
NDIS_TIMER DPCPostProcessTimer
NDIS_STATUS ParaNdis5_StopReceive(PARANDIS_ADAPTER *pContext, BOOLEAN bStop, ONPAUSECOMPLETEPROC Callback)
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
VOID EXPORT NdisOpenConfiguration(OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE ConfigurationHandle, IN NDIS_HANDLE WrapperConfigurationContext)
VOID EXPORT NdisReleaseSpinLock(IN PNDIS_SPIN_LOCK SpinLock)
ULONG ulPriorityVlanSetting
void ParaNdis_UnbindBufferFromPacket(PARANDIS_ADAPTER *pContext, pIONetDescriptor pBufferDesc)
LIST_ENTRY NetReceiveBuffersWaiting
#define DEBUG_ENTRY(level)
#define RtlOffsetToPointer(Base, Offset)
#define SEND_ENTRY_TCP_CS
tCopyPacketResult ParaNdis_PacketCopier(PNDIS_PACKET Packet, PVOID dest, ULONG maxSize, PVOID refValue, BOOLEAN bPreview)
tTcpIpPacketParsingResult ParaNdis_CheckSumVerify(PVOID buffer, ULONG size, ULONG flags, LPCSTR caller)
_In_ PVOID _In_ PVOID _In_ PVOID SystemSpecific3
VOID EXPORT NdisAdjustBufferLength(IN PNDIS_BUFFER Buffer, IN UINT Length)
tPacketHolderType pHolder
#define ETH_HAS_PRIO_HEADER(Address)
VOID EXPORT NdisSetTimer(IN PNDIS_TIMER Timer, IN UINT MillisecondsToDelay)
static VOID NTAPI OnDPCPostProcessTimer(IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3)
tChecksumCheckResult ParaNdis_CheckRxChecksum(PARANDIS_ADAPTER *pContext, ULONG virtioFlags, PVOID pRxPacket, ULONG len)
BOOLEAN ParaNdis_InitialAllocatePhysicalMemory(PARANDIS_ADAPTER *pContext, tCompletePhysicalAddress *pAddresses)
static FORCEINLINE void GET_NUMBER_OF_SG_ELEMENTS(PNDIS_PACKET Packet, UINT *pNum)
NDIS_STATUS EXPORT NdisMInitializeScatterGatherDma(IN NDIS_HANDLE MiniportAdapterHandle, IN BOOLEAN Dma64BitAddresses, IN ULONG MaximumPhysicalMapping)
#define ETH_PRIORITY_HEADER_SIZE
VOID EXPORT NdisFreeBuffer(IN PNDIS_BUFFER Buffer)
#define InsertTailList(ListHead, Entry)
VOID ParaNdis_ReportLinkStatus(PARANDIS_ADAPTER *pContext, BOOLEAN bForce)
static void DebugParseOffloadBits()
#define NdisChainBufferAtFront(Packet, Buffer)
static void InitializeTransferParameters(tTxOperationParameters *pParams, tSendEntry *pEntry)
#define NdisReinitializePacket(Packet)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
#define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet)
#define RtlMoveMemory(Destination, Source, Length)
#define TCP_CHECKSUM_OFFSET
#define NdisGetNextBuffer(CurrentBuffer, NextBuffer)
tOffloadSettingsFlags flags
#define ETH_PRIORITY_HEADER_OFFSET
NDIS_STATISTICS_INFO Statistics
UINT maxFreeHardwareBuffers
_In_ PVOID FunctionContext
VOID EXPORT NdisMFreeSharedMemory(IN NDIS_HANDLE MiniportAdapterHandle, IN ULONG Length, IN BOOLEAN Cached, IN PVOID VirtualAddress, IN NDIS_PHYSICAL_ADDRESS PhysicalAddress)
void ParaNdis_RestoreDeviceConfigurationAfterReset(PARANDIS_ADAPTER *pContext)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
_In_ PPNDIS_PACKET PacketArray
PVOID ParaNdis_AllocateMemory(PARANDIS_ADAPTER *pContext, ULONG ulRequiredSize)
static void FORCEINLINE SetPriorityData(UCHAR *pDest, ULONG priority, ULONG VlanID)
static BOOLEAN FORCEINLINE IsPrioritySupported(PARANDIS_ADAPTER *pContext)
VOID ParaNdis_IndicateReceivedBatch(PARANDIS_ADAPTER *pContext, tPacketIndicationType *pBatch, ULONG nofPackets)
VOID ParaNdis_SetPowerState(PARANDIS_ADAPTER *pContext, NDIS_DEVICE_POWER_STATE newState)
static struct _test_info info[]
LONG NetTxPacketsToReturn
GLenum GLuint GLenum GLsizei length
VOID ParaNdis_FinalizeCleanup(PARANDIS_ADAPTER *pContext)
struct _tagPARANDIS_ADAPTER::@973 extraStatistics
#define DPrintf(Level, Fmt)
FxContextHeader * pHeader
tCompletePhysicalAddress HeaderInfo
NDIS_STATUS NTAPI ParaNdis_FinishSpecificInitialization(PARANDIS_ADAPTER *pContext)
NDIS_STATUS ParaNdis5_StopSend(PARANDIS_ADAPTER *pContext, BOOLEAN bStop, ONPAUSECOMPLETEPROC Callback)
tCopyPacketResult ParaNdis_DoSubmitPacket(PARANDIS_ADAPTER *pContext, tTxOperationParameters *Params)
VOID EXPORT NdisMFreeMapRegisters(IN NDIS_HANDLE MiniportAdapterHandle)
static BOOLEAN FORCEINLINE IsVlanSupported(PARANDIS_ADAPTER *pContext)
struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO::@2092::@2094 Transmit
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
#define SEND_ENTRY_FLAG_READY
NDIS_STATUS EXPORT NdisMAllocateMapRegisters(IN NDIS_HANDLE MiniportAdapterHandle, IN UINT DmaChannel, IN NDIS_DMA_SIZE DmaSize, IN ULONG BaseMapRegistersNeeded, IN ULONG MaximumBufferSize)
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
#define VIRTIO_NET_HDR_GSO_TCPV4
VOID EXPORT NdisAllocateBuffer(OUT PNDIS_STATUS Status, OUT PNDIS_BUFFER *Buffer, IN NDIS_HANDLE PoolHandle, IN PVOID VirtualAddress, IN UINT Length)
VOID(* ONPAUSECOMPLETEPROC)(VOID *)
struct _tagChecksumCheckResult::@970::@972 flags
VOID EXPORT NdisMIndicateStatusComplete(IN NDIS_HANDLE MiniportAdapterHandle)
UINT nofFreeTxDescriptors
#define NDIS_STATUS_REQUEST_ABORTED
static VOID NTAPI OnConnectTimer(IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3)
BOOLEAN ParaNdis_BindBufferToPacket(PARANDIS_ADAPTER *pContext, pIONetDescriptor pBufferDesc)
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)
#define PROTOCOL_RESERVED_SIZE_IN_PACKET
#define NDIS_STATUS_MEDIA_CONNECT
#define VIRTIO_NET_HDR_F_NEEDS_CSUM
VOID NTAPI ParaNdis5_HandleDPC(IN NDIS_HANDLE MiniportAdapterContext)
#define REF_MINIPORT(Packet)
VOID EXPORT NdisFreePacket(IN PNDIS_PACKET Packet)
tSendReceiveState SendState
#define NDIS_GET_PACKET_STATUS(_Packet)
#define NDIS_STATUS_NOT_ACCEPTED
#define MAX_IPV4_HEADER_SIZE
struct _tagTCPHeader TCPHeader
#define NdisMIndicateReceivePacket(MiniportAdapterHandle, ReceivePackets, NumberOfPackets)
VOID ParaNdis_IndicateConnect(PARANDIS_ADAPTER *pContext, BOOLEAN bConnected, BOOLEAN bForce)
tReuseReceiveBufferProc ReuseBufferProc
VOID EXPORT NdisAcquireSpinLock(IN PNDIS_SPIN_LOCK SpinLock)
NDIS_HANDLE MiniportHandle
VOID ParaNdis_OnTransmitBufferReleased(PARANDIS_ADAPTER *pContext, IONetDescriptor *pDesc)
LONG EXPORT NdisInterlockedDecrement(IN PLONG Addend)
NDIS_HANDLE ParaNdis_OpenNICConfiguration(PARANDIS_ADAPTER *pContext)
#define NDIS_STATUS_SUCCESS
VOID NTAPI ParaNdis5_ReturnPacket(IN NDIS_HANDLE MiniportAdapterContext, IN PNDIS_PACKET Packet)
struct _NDIS_PACKET_8021Q_INFO::@2081::@2083 TagHeader
UINT nofFreeHardwareBuffers
VOID EXPORT NdisQueryBufferSafe(IN PNDIS_BUFFER Buffer, OUT PVOID *VirtualAddress OPTIONAL, OUT PUINT Length, IN UINT Priority)
static __inline tSendEntry * PrepareSendEntry(PARANDIS_ADAPTER *pContext, PNDIS_PACKET Packet, ULONG len)
#define NDIS_SET_PACKET_STATUS(_Packet, _Status)
#define SEND_ENTRY_TSO_USED
static void CompletePacket(PARANDIS_ADAPTER *pContext, PNDIS_PACKET Packet)
_In_ PVOID _In_ PVOID SystemSpecific2
VOID EXPORT NdisInitializeTimer(IN OUT PNDIS_TIMER Timer, IN PNDIS_TIMER_FUNCTION TimerFunction, IN PVOID FunctionContext)
void virtqueue_kick(struct virtqueue *vq)
static void FORCEINLINE ParaNdis_DebugHistory(PARANDIS_ADAPTER *pContext, eHistoryLogOperation op, PVOID pParam1, ULONG lParam2, ULONG lParam3, ULONG lParam4)
ULONG ParaNdis_DPCWorkBody(PARANDIS_ADAPTER *pContext, ULONG ulMaxPacketsToIndicate)
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
UINT NetMaxReceiveBuffers
ONPAUSECOMPLETEPROC ReceivePauseCompletionProc
BOOLEAN EXPORT NdisMSynchronizeWithInterrupt(IN PNDIS_MINIPORT_INTERRUPT Interrupt, IN PVOID SynchronizeFunction, IN PVOID SynchronizeContext)
tPacketIndicationType ParaNdis_IndicateReceivedPacket(PARANDIS_ADAPTER *pContext, PVOID dataBuffer, PULONG pLength, BOOLEAN bPrepareOnly, pIONetDescriptor pBuffersDesc)
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
#define NDIS_OOB_DATA_FROM_PACKET(_Packet)
#define InitializeListHead(ListHead)
NDIS_HANDLE WrapperConfigurationHandle
VOID ParaNdis_PacketMapper(PARANDIS_ADAPTER *pContext, PNDIS_PACKET packet, PVOID ReferenceValue, struct VirtIOBufferDescriptor *buffers, pIONetDescriptor pDesc, tMapperResult *pMapperResult)
#define NdisQueryPacketLength(_Packet, _TotalPacketLength)
VOID EXPORT NdisFreeBufferPool(IN NDIS_HANDLE PoolHandle)
PKINTERRUPT InterruptObject
VOID EXPORT NdisUnchainBufferAtFront(IN OUT PNDIS_PACKET Packet, OUT PNDIS_BUFFER *Buffer)
VOID NTAPI ParaNdis5_CancelSendPackets(IN NDIS_HANDLE MiniportAdapterContext, IN PVOID CancelId)
VOID ParaNdis_FreePhysicalMemory(PARANDIS_ADAPTER *pContext, tCompletePhysicalAddress *pAddresses)
NDIS_MINIPORT_INTERRUPT Interrupt
#define NDIS_PROTOCOL_ID_TCP_IP
struct _tagSendEntry tSendEntry
VOID EXPORT NdisFreePacketPool(IN NDIS_HANDLE PoolHandle)
PHYSICAL_ADDRESS Physical
BOOLEAN bUseMergedBuffers
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 NdisZeroMemory(Destination, Length)
#define NDIS_GET_PACKET_CANCEL_ID(Packet)
tMaxPacketSize MaxPacketSize
ONPAUSECOMPLETEPROC SendPauseCompletionProc
PARANDIS_ADAPTER * pContext
enum _NDIS_DEVICE_POWER_STATE NDIS_DEVICE_POWER_STATE
#define SEND_ENTRY_NO_INDIRECT
#define SEND_ENTRY_UDP_CS
static BOOLEAN FORCEINLINE IsValidVlanId(PARANDIS_ADAPTER *pContext, ULONG VlanID)
struct _SCATTER_GATHER_LIST * PSCATTER_GATHER_LIST
BOOLEAN ParaNdis_SynchronizeWithInterrupt(PARANDIS_ADAPTER *pContext, ULONG messageId, tSynchronizedProcedure procedure, PVOID parameter)
struct virtqueue * NetSendQueue
VOID EXPORT NdisInitializeEvent(IN PNDIS_EVENT Event)
#define PARANDIS_MEMORY_TAG
#define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize)
VOID EXPORT NdisCancelTimer(IN PNDIS_TIMER Timer, OUT PBOOLEAN TimerCancelled)
#define NdisMoveMemory(Destination, Source, Length)
static SERVICE_STATUS status
tCompletePhysicalAddress DataInfo
#define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType)
VOID EXPORT NdisAllocateBufferPool(OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE PoolHandle, IN UINT NumberOfDescriptors)
VOID EXPORT NdisMDeregisterInterrupt(IN PNDIS_MINIPORT_INTERRUPT Interrupt)
#define NDIS_STATUS_BUFFER_OVERFLOW
VOID EXPORT NdisMIndicateStatus(IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_STATUS GeneralStatus, IN PVOID StatusBuffer, IN UINT StatusBufferSize)
#define NDIS_STATUS_MEDIA_DISCONNECT
#define NDIS_STATUS_FAILURE
VOID EXPORT NdisFreeMemory(IN PVOID VirtualAddress, IN UINT Length, IN UINT MemoryFlags)
BOOLEAN(NTAPI * tSynchronizedProcedure)(tSynchronizedContext *context)
struct _tagIONetDescriptor * pIONetDescriptor
VOID NTAPI ParaNdis5_SendPackets(IN NDIS_HANDLE MiniportAdapterContext, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets)
void ParaNdis_PadPacketReceived(PVOID pDataBuffer, PULONG pLength)