29 Tbd = Adapter->Send.CurrentTbd;
31 for (
i = 0;
i <
SgList->NumberOfElements; ++
i)
56 while (ImplicitEntries);
97 Adapter->Send.CurrentTbd.x32->FlagsLength |=
Flags;
98 Adapter->Send.CurrentTbd = Tbd;
115 Tbd = Adapter->Send.CurrentTbd;
117 for (
i = 0;
i <
SgList->NumberOfElements; ++
i)
144 while (ImplicitEntries);
168 Tcb->DeferredTbd = Adapter->Send.CurrentTbd;
170 if (!Adapter->Send.DeferredTcb)
172 Adapter->Send.DeferredTcb = Tcb;
179 ++Adapter->Send.PacketsCount;
200 Adapter->Send.CurrentTbd.x64->FlagsLength |=
Flags;
201 Adapter->Send.CurrentTbd = Tbd;
314 if (!Adapter->Send.TcbSlots)
327 if (
SgList->NumberOfElements +
342 --Adapter->Send.TcbSlots;
346 Tcb = Adapter->Send.CurrentTcb;
351 Adapter->TransmitPacket(Adapter, Tcb,
SgList);
354 Adapter->Send.TbdSlots -= Tcb->
Slots;
356 Adapter->Send.CurrentTcb =
NV_NEXT_TCB(Adapter, Tcb);
377 if (ChecksumInfo.
Transmit.NdisPacketChecksumV4)
379 if (ChecksumInfo.
Transmit.NdisPacketTcpChecksum && Adapter->Offload.SendTcpChecksum)
383 if (ChecksumInfo.
Transmit.NdisPacketUdpChecksum && Adapter->Offload.SendUdpChecksum)
387 if (ChecksumInfo.
Transmit.NdisPacketIpChecksum && Adapter->Offload.SendIpChecksum)
408 ASSERT(TotalLength <= Adapter->MaximumFrameSize);
410 if (!Adapter->Send.TcbSlots)
421 if (!Adapter->Send.TbdSlots || !Adapter->Send.BufferList.Next)
430 --Adapter->Send.TcbSlots;
444 ++Adapter->Send.TcbSlots;
451 LocalSgList.NumberOfElements = 1;
456 Tcb = Adapter->Send.CurrentTcb;
457 Tcb->
Buffer = CoalesceBuffer;
462 if (
SgList->NumberOfElements +
468 --Adapter->Send.TcbSlots;
470 Tcb = Adapter->Send.CurrentTcb;
476 Adapter->TransmitPacket(Adapter, Tcb,
SgList);
479 Adapter->Send.TbdSlots -= Tcb->
Slots;
481 Adapter->Send.CurrentTcb =
NV_NEXT_TCB(Adapter, Tcb);
#define NV_TCB_LARGE_SEND
static ACPI_BUFFER CurrentBuffer
#define NV_TX2_LASTPACKET
struct _NVNET_ADAPTER * PNVNET_ADAPTER
#define NV_SEND_LARGE_SEND
#define NV_TCB_CHECKSUM_TCP
_In_ ULONG _In_ ULONG _In_ ULONG Length
_In_ NDIS_HANDLE _In_ PNDIS_PACKET Packet
#define NDIS_STATUS_PENDING
VOID EXPORT NdisDprReleaseSpinLock(IN PNDIS_SPIN_LOCK SpinLock)
NDIS_PHYSICAL_ADDRESS PhysicalAddress
#define NV_MAXIMUM_SG_SIZE
static DECLSPEC_NOINLINE ULONG NvNetQueryTcpIpHeaders(_In_ PNVNET_ADAPTER Adapter, _In_ PNDIS_PACKET Packet)
#define NV_TCB_CHECKSUM_UDP
static NDIS_STATUS NvNetSendPacket(_In_ PNVNET_ADAPTER Adapter, _In_ PNDIS_PACKET Packet, _In_ ULONG TotalLength)
struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO::@2065::@2067 Transmit
#define NV_TX2_CHECKSUM_L3
#define NVNET_FRAGMENTATION_THRESHOLD
#define NVNET_MAXIMUM_LSO_FRAME_SIZE
#define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet)
#define NV_IMPLICIT_ENTRIES(Length)
#define NdisGetNextBuffer(CurrentBuffer, NextBuffer)
FORCEINLINE VOID PushEntryList(_Inout_ PSINGLE_LIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY Entry)
VOID EXPORT NdisDprAcquireSpinLock(IN PNDIS_SPIN_LOCK SpinLock)
#define TCP_HEADER_LENGTH(pHeader)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
_In_ UINT _In_ UINT _In_ PNDIS_PACKET _In_ UINT _Out_ PUINT BytesCopied
FORCEINLINE VOID NV_WRITE(_In_ PNVNET_ADAPTER Adapter, _In_ NVNET_REGISTER Register, _In_ ULONG Value)
FORCEINLINE NVNET_TBD NV_NEXT_TBD_32(_In_ PNVNET_ADAPTER Adapter, _In_ NVNET_TBD Tbd)
struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
struct IPv4_HEADER * PIPv4_HEADER
FORCEINLINE PSINGLE_LIST_ENTRY PopEntryList(_Inout_ PSINGLE_LIST_ENTRY ListHead)
VOID EXPORT NdisGetFirstBufferFromPacketSafe(IN PNDIS_PACKET _Packet, OUT PNDIS_BUFFER *_FirstBuffer, OUT PVOID *_FirstBufferVA, OUT PUINT _FirstBufferLength, OUT PUINT _TotalBufferLength, IN MM_PAGE_PRIORITY Priority)
#define NVNET_TRANSMIT_DESCRIPTORS
_Must_inspect_result_ _In_ ULONG Flags
FORCEINLINE PNVNET_TCB NV_NEXT_TCB(_In_ PNVNET_ADAPTER Adapter, _In_ PNVNET_TCB Tcb)
struct _NVNET_TX_BUFFER * PNVNET_TX_BUFFER
static BOOLEAN NvNetCopyPacket(_In_ PNVNET_ADAPTER Adapter, _In_ PNDIS_PACKET Packet, _In_ PNVNET_TX_BUFFER Buffer)
VOID NvNetTransmitPacket32(_In_ PNVNET_ADAPTER Adapter, _In_ PNVNET_TCB Tcb, _In_ PSCATTER_GATHER_LIST SgList)
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
static NDIS_STATUS NvNetSendPacketLargeSend(_In_ PNVNET_ADAPTER Adapter, _In_ PNDIS_PACKET Packet, _In_ ULONG TotalLength)
#define NV_TCB_CHECKSUM_IP
#define NDIS_STATUS_SUCCESS
VOID EXPORT NdisQueryBufferSafe(IN PNDIS_BUFFER Buffer, OUT PVOID *VirtualAddress OPTIONAL, OUT PUINT Length, IN UINT Priority)
WDF_EXTERN_C_START typedef _In_ WDFDEVICE _In_ WDFCONTEXT _In_ WDF_DMA_DIRECTION _In_ PSCATTER_GATHER_LIST SgList
#define NVNET_MAXIMUM_FRAME_SIZE_JUMBO
#define IP_HEADER_LENGTH(pHeader)
#define NVREG_TXRXCTL_KICK
#define NV_TX_LIMIT_COUNT
#define NV_SEND_ERRATA_PRESENT
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
FORCEINLINE NVNET_TBD NV_NEXT_TBD_64(_In_ PNVNET_ADAPTER Adapter, _In_ NVNET_TBD Tbd)
#define NdisQueryPacketLength(_Packet, _TotalPacketLength)
#define NV_TX2_CHECKSUM_L4
#define NDIS_PROTOCOL_ID_TCP_IP
#define NDIS_DbgPrint(_t_, _x_)
NDIS_STATUS NTAPI MiniportSend(_In_ NDIS_HANDLE MiniportAdapterContext, _In_ PNDIS_PACKET Packet, _In_ UINT Flags)
struct _SCATTER_GATHER_LIST * PSCATTER_GATHER_LIST
#define NDIS_STATUS_RESOURCES
#define DEV_HAS_LARGEDESC
VOID NvNetTransmitPacket64(_In_ PNVNET_ADAPTER Adapter, _In_ PNVNET_TCB Tcb, _In_ PSCATTER_GATHER_LIST SgList)
#define NdisGetPhysicalAddressLow(PhysicalAddress)
#define NdisMoveMemory(Destination, Source, Length)
#define DECLSPEC_NOINLINE
#define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType)
static ULONG NvNetGetChecksumInfo(_In_ PNVNET_ADAPTER Adapter, _In_ PNDIS_PACKET Packet)
#define NDIS_STATUS_FAILURE