30 #ifndef PARANDIS_56_COMMON_H 31 #define PARANDIS_56_COMMON_H 35 #if defined(OFFLOAD_UNIT_TEST) 39 #define ETH_LENGTH_OF_ADDRESS 6 40 #define DoPrint(fmt, ...) printf(fmt##"\n", __VA_ARGS__) 41 #define DPrintf(a,b) DoPrint b 42 #define RtlOffsetToPointer(B,O) ((PCHAR)( ((PCHAR)(B)) + ((ULONG_PTR)(O)) )) 45 #endif //+OFFLOAD_UNIT_TEST 47 #if !defined(OFFLOAD_UNIT_TEST) 49 #if !defined(RtlOffsetToPointer) 50 #define RtlOffsetToPointer(Base,Offset) ((PCHAR)(((PCHAR)(Base))+((ULONG_PTR)(Offset)))) 53 #if !defined(RtlPointerToOffset) 54 #define RtlPointerToOffset(Base,Pointer) ((ULONG)(((PCHAR)(Pointer))-((PCHAR)(Base)))) 75 #if !defined(NDIS_MINIPORT_MAJOR_VERSION) || !defined(NDIS_MINIPORT_MINOR_VERSION) 76 #error "Something is wrong with NDIS environment" 90 #define MAX_RX_LOOPS 1000 93 #define MAX_NUM_OF_QUEUES 3 96 #define VIRTIO_NET_F_CSUM 0 97 #define VIRTIO_NET_F_GUEST_CSUM 1 98 #define VIRTIO_NET_F_MAC 5 99 #define VIRTIO_NET_F_GSO 6 100 #define VIRTIO_NET_F_GUEST_TSO4 7 101 #define VIRTIO_NET_F_GUEST_TSO6 8 102 #define VIRTIO_NET_F_GUEST_ECN 9 103 #define VIRTIO_NET_F_GUEST_UFO 10 104 #define VIRTIO_NET_F_HOST_TSO4 11 105 #define VIRTIO_NET_F_HOST_TSO6 12 106 #define VIRTIO_NET_F_HOST_ECN 13 107 #define VIRTIO_NET_F_HOST_UFO 14 108 #define VIRTIO_NET_F_MRG_RXBUF 15 109 #define VIRTIO_NET_F_STATUS 16 110 #define VIRTIO_NET_F_CTRL_VQ 17 111 #define VIRTIO_NET_F_CTRL_RX 18 112 #define VIRTIO_NET_F_CTRL_VLAN 19 113 #define VIRTIO_NET_F_CTRL_RX_EXTRA 20 115 #define VIRTIO_NET_S_LINK_UP 1 117 #define VIRTIO_NET_INVALID_INTERRUPT_STATUS 0xFF 119 #define PARANDIS_MULTICAST_LIST_SIZE 32 120 #define PARANDIS_MEMORY_TAG '5muQ' 121 #define PARANDIS_FORMAL_LINK_SPEED (pContext->ulFormalLinkSpeed) 122 #define PARANDIS_MAXIMUM_TRANSMIT_SPEED PARANDIS_FORMAL_LINK_SPEED 123 #define PARANDIS_MAXIMUM_RECEIVE_SPEED PARANDIS_FORMAL_LINK_SPEED 124 #define PARANDIS_MIN_LSO_SEGMENTS 2 126 #define PARANDIS_MAX_LSO_SIZE 0xF800 128 #define PARANDIS_UNLIMITED_PACKETS_TO_INDICATE (~0ul) 360 #ifdef PARANDIS_DEBUG_INTERRUPTS 410 #if !defined(UNIFY_LOCKS) 530 #ifndef LAZY_TX_RELEASE 539 return pContext->
VlanId == 0 || pContext->
VlanId == VlanID;
572 ULONG ulMaxPacketsToIndicate);
583 ULONG interruptSource);
587 ULONG interruptSource);
619 ULONG knownInterruptSources);
645 #if !defined(ENABLE_HISTORY_LOG) 707 ULONG ulRequiredSize);
820 #endif //-OFFLOAD_UNIT_TEST
VirtIOSystemOps ParaNdisSystemOps
VOID ParaNdis_PowerOff(PARANDIS_ADAPTER *pContext)
enum _tagInterruptSource tInterruptSource
struct _tagIONetDescriptor IONetDescriptor
NDIS_STATUS ParaNdis_InitializeContext(PARANDIS_ADAPTER *pContext, PNDIS_RESOURCE_LIST ResourceList)
NDIS_OFFLOAD_PARAMETERS InitialOffloadParameters
tSendReceiveState ReceiveState
tCompletePhysicalAddress address
#define PCI_TYPE0_ADDRESSES
VOID ParaNdis_PacketMapper(PARANDIS_ADAPTER *pContext, tPacketType packet, PVOID Reference, struct VirtIOBufferDescriptor *buffers, pIONetDescriptor pDesc, tMapperResult *pMapperResult)
NDIS_SPIN_LOCK ReceiveLock
static BOOLEAN FORCEINLINE IsTimeToReleaseTx(PARANDIS_ADAPTER *pContext)
VOID ParaNdis_UpdateDeviceFilters(PARANDIS_ADAPTER *pContext)
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
void ParaNdis_UnbindBufferFromPacket(PARANDIS_ADAPTER *pContext, pIONetDescriptor pBufferDesc)
#define VIRTIO_PCI_ISR_CONFIG
NDIS_STATUS ParaNdis_FinishInitialization(PARANDIS_ADAPTER *pContext)
void ParaNdis_CallOnBugCheck(PARANDIS_ADAPTER *pContext)
BOOLEAN ParaNdis_CheckForHang(PARANDIS_ADAPTER *pContext)
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
UINT ParaNdis_VirtIONetReleaseTransmitBuffers(PARANDIS_ADAPTER *pContext)
NDIS_DEVICE_POWER_STATE powerState
tAdapterResources AdapterResources
VOID ParaNdis_Suspend(PARANDIS_ADAPTER *pContext)
NDIS_TIMER DPCPostProcessTimer
ULONG ulPriorityVlanSetting
static void VirtIODeviceEnableGuestFeature(PARANDIS_ADAPTER *pContext, unsigned uFeature)
LIST_ENTRY NetReceiveBuffersWaiting
ULONG64 ifHCOutMulticastPkts
NDIS_STATUS ParaNdis_SetMulticastList(PARANDIS_ADAPTER *pContext, PVOID Buffer, ULONG BufferSize, PUINT pBytesRead, PUINT pBytesNeeded)
VOID ParaNdis_IndicateReceivedBatch(PARANDIS_ADAPTER *pContext, tPacketIndicationType *pBatch, ULONG nofPackets)
struct VirtIOBufferDescriptor * sgTxGatherTable
ULONG64 ifHCInBroadcastPkts
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
UINT NetNofReceiveBuffers
ULONG nDetectedInactivity
BOOLEAN ParaNdis_ProcessTx(PARANDIS_ADAPTER *pContext, BOOLEAN IsDpc, BOOLEAN IsInterrupt)
BOOLEAN bEnableInterruptChecking
tTcpIpPacketParsingResult ParaNdis_CheckSumVerify(PVOID buffer, ULONG size, ULONG flags, LPCSTR caller)
tPacketHolderType pHolder
tCompletePhysicalAddress ControlData
ULONGLONG ullGuestFeatures
struct _tagOffloadSettingsFlags tOffloadSettingsFlags
enum _NDIS_DEVICE_PNP_EVENT NDIS_DEVICE_PNP_EVENT
VOID ParaNdis_CleanupContext(PARANDIS_ADAPTER *pContext)
tChecksumCheckResult ParaNdis_CheckRxChecksum(PARANDIS_ADAPTER *pContext, ULONG virtioFlags, PVOID pRxPacket, ULONG len)
struct _tagNdisStatistics NDIS_STATISTICS_INFO
struct _tagCompletePhysicalAddress tCompletePhysicalAddress
ULONG framesRxCSHwMissedBad
tBusResource SharedMemoryRanges[MAX_NUM_OF_QUEUES]
LIST_ENTRY NetReceiveBuffers
VOID ParaNdis_ReportLinkStatus(PARANDIS_ADAPTER *pContext, BOOLEAN bForce)
struct _tagMapperResult tMapperResult
enum _tagPacketOffloadRequest tPacketOffloadRequest
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
VOID ParaNdis_FreePhysicalMemory(PARANDIS_ADAPTER *pContext, tCompletePhysicalAddress *pAddresses)
enum _tagOffloadSettingsBit tOffloadSettingsBit
BOOLEAN bIODeviceInitialized
VOID ParaNdis_VirtIOEnableIrqSynchronized(PARANDIS_ADAPTER *pContext, ULONG interruptSource)
NDIS_PHYSICAL_ADDRESS BasePA
BOOLEAN bEnableInterruptHandlingDPC
BOOLEAN(* tSynchronizedProcedure)(tSynchronizedContext *context)
tOffloadSettingsFlags flags
NDIS_STATISTICS_INFO Statistics
UINT maxFreeHardwareBuffers
VOID ParaNdis_DeviceFiltersUpdateVlanId(PARANDIS_ADAPTER *pContext)
BOOLEAN ParaNdis_BindBufferToPacket(PARANDIS_ADAPTER *pContext, pIONetDescriptor pBufferDesc)
VOID(* tOnAdditionalPhysicalMemoryAllocated)(PARANDIS_ADAPTER *pContext, tCompletePhysicalAddress *pAddresses)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
void ParaNdis_ResetOffloadSettings(PARANDIS_ADAPTER *pContext, tOffloadSettingsFlags *pDest, PULONG from)
struct _tagChecksumCheckResult::@982::@984 flags
static BOOLEAN FORCEINLINE IsPrioritySupported(PARANDIS_ADAPTER *pContext)
struct _tagPARANDIS_ADAPTER::@985 extraStatistics
VOID ParaNdis_OnTransmitBufferReleased(PARANDIS_ADAPTER *pContext, IONetDescriptor *pDesc)
BOOLEAN bDoSupportPriority
struct _tagOurCounters tOurCounters
static BOOLEAN virtqueue_is_interrupt_enabled(struct virtqueue *vq)
LONG NetTxPacketsToReturn
ULONG64 ifHCInMulticastOctets
#define virtio_is_feature_enabled(FeaturesList, Feature)
PVOID ParaNdis_AllocateMemory(PARANDIS_ADAPTER *pContext, ULONG ulRequiredSize)
#define DPrintf(Level, Fmt)
ULONG64 ifHCOutBroadcastOctets
tCompletePhysicalAddress HeaderInfo
tCopyPacketResult ParaNdis_DoSubmitPacket(PARANDIS_ADAPTER *pContext, tTxOperationParameters *Params)
NDIS_DEVICE_PNP_EVENT PnpEvents[16]
PARANDIS_ADAPTER * pContext
VOID ParaNdis_FinalizeCleanup(PARANDIS_ADAPTER *pContext)
static BOOLEAN FORCEINLINE IsVlanSupported(PARANDIS_ADAPTER *pContext)
static __inline BOOLEAN ParaNDIS_IsQueueInterruptEnabled(struct virtqueue *_vq)
ULONG64 ifHCInMulticastPkts
UCHAR CurrentMacAddress[ETH_LENGTH_OF_ADDRESS]
BOOLEAN bNoPauseOnSuspend
struct _tagNdisOffloadParams NDIS_OFFLOAD_PARAMETERS
#define NDIS_PACKET_TYPE_ALL_MULTICAST
enum _etagHistoryLogOperation eHistoryLogOperation
VOID(* ONPAUSECOMPLETEPROC)(VOID *)
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
UINT nofFreeTxDescriptors
#define virtio_feature_enable(FeaturesList, Feature)
BOOLEAN bDoHardwareChecksum
struct _tagMulticastData tMulticastData
BOOLEAN ParaNdis_OnQueuedInterrupt(PARANDIS_ADAPTER *pContext, BOOLEAN *pRunDpc, ULONG knownInterruptSources)
tSendReceiveState SendState
tReuseReceiveBufferProc ReuseBufferProc
BOOLEAN bDoInterruptRecovery
VOID ParaNdis_Resume(PARANDIS_ADAPTER *pContext)
ULONGLONG ulFormalLinkSpeed
void(* tReuseReceiveBufferProc)(void *pContext, pIONetDescriptor pDescriptor)
NDIS_HANDLE MiniportHandle
BOOLEAN bFastSuspendInProcess
static const ULONG PARANDIS_PACKET_FILTERS
void ParaNdis_IndicateConnect(PARANDIS_ADAPTER *pContext, BOOLEAN bConnected, BOOLEAN bForce)
struct _tagTxOperationParameters tTxOperationParameters
#define NDIS_PACKET_TYPE_MULTICAST
NDIS_HANDLE ParaNdis_OpenNICConfiguration(PARANDIS_ADAPTER *pContext)
tOnAdditionalPhysicalMemoryAllocated Callback
_In_opt_ PVOID _In_ ULONG _In_ PVOID context
tCopyPacketResult ParaNdis_DoCopyPacketData(PARANDIS_ADAPTER *pContext, tTxOperationParameters *pParams)
BOOLEAN ParaNdis_OnLegacyInterrupt(PARANDIS_ADAPTER *pContext, BOOLEAN *pRunDpc)
NDIS_STATUS NTAPI ParaNdis_FinishSpecificInitialization(PARANDIS_ADAPTER *pContext)
LARGE_INTEGER LastInterruptTimeStamp
UINT nofFreeHardwareBuffers
struct virtqueue * NetControlQueue
enum _tagppResult ppResult
LIST_ENTRY NetFreeSendBuffers
ULONG64 ifHCInBroadcastOctets
BOOLEAN bHasHardwareFilters
UCHAR MulticastList[ETH_LENGTH_OF_ADDRESS *PARANDIS_MULTICAST_LIST_SIZE]
LARGE_INTEGER LastTxCompletionTimeStamp
static bool VirtIODeviceGetHostFeature(PARANDIS_ADAPTER *pContext, unsigned uFeature)
void ParaNdis_DebugCleanup(PDRIVER_OBJECT pDriverObject)
ULONG64 ifHCInUcastOctets
NDIS_STATUS ParaNdis_PowerOn(PARANDIS_ADAPTER *pContext)
VOID ParaNdis_VirtIODisableIrqSynchronized(PARANDIS_ADAPTER *pContext, ULONG interruptSource)
UINT uNumberOfHandledRXPacketsInDPC
static void FORCEINLINE ParaNdis_DebugHistory(PARANDIS_ADAPTER *pContext, eHistoryLogOperation op, PVOID pParam1, ULONG lParam2, ULONG lParam3, ULONG lParam4)
BOOLEAN ParaNdis_ValidateMacAddress(PUCHAR pcMacAddress, BOOLEAN bLocal)
ULONG ParaNdis_DPCWorkBody(PARANDIS_ADAPTER *pContext, ULONG ulMaxPacketsToIndicate)
BOOLEAN bLinkDetectSupported
struct virtqueue * NetReceiveQueue
BOOLEAN ParaNdis_InitialAllocatePhysicalMemory(PARANDIS_ADAPTER *pContext, tCompletePhysicalAddress *pAddresses)
#define MAX_NUM_OF_QUEUES
struct _tagAdapterResources tAdapterResources
struct _tagChecksumCheckResult tChecksumCheckResult
struct _tagMaxPacketSize tMaxPacketSize
LIST_ENTRY NetSendBuffersInUse
enum _tagSendReceiveState tSendReceiveState
BOOLEAN bDoKickOnNoBuffer
UINT NetMaxReceiveBuffers
ONPAUSECOMPLETEPROC ReceivePauseCompletionProc
ULONG64 ifHCOutBroadcastPkts
struct _tagBusResource tBusResource
void ParaNdis_RestoreDeviceConfigurationAfterReset(PARANDIS_ADAPTER *pContext)
void ParaNdis_DebugRegisterMiniport(PARANDIS_ADAPTER *pContext, BOOLEAN bRegister)
BOOLEAN bDoGuestChecksumOnReceive
VOID ParaNdis_OnPnPEvent(PARANDIS_ADAPTER *pContext, NDIS_DEVICE_PNP_EVENT pEvent, PVOID pInfo, ULONG ulSize)
NDIS_HANDLE WrapperConfigurationHandle
UINT minFreeHardwareBuffers
#define ETH_LENGTH_OF_ADDRESS
ULONGLONG ullHostFeatures
#define NDIS_PACKET_TYPE_PROMISCUOUS
NDIS_MINIPORT_INTERRUPT Interrupt
PNDIS_PACKET tPacketHolderType
static __inline struct virtqueue * ParaNdis_GetQueueForInterrupt(PARANDIS_ADAPTER *pContext, ULONG interruptSource)
UINT maxFreeTxDescriptors
PHYSICAL_ADDRESS Physical
BOOLEAN bUseMergedBuffers
void ParaNdis_DebugInitialize(PVOID DriverObject, PVOID RegistryPath)
tMaxPacketSize MaxPacketSize
ONPAUSECOMPLETEPROC SendPauseCompletionProc
struct _tagPARANDIS_ADAPTER PARANDIS_ADAPTER
ULONG nofMulticastEntries
struct _tagOffloadSettings tOffloadSettings
tCopyPacketResult ParaNdis_PacketCopier(tPacketType packet, PVOID dest, ULONG maxSize, PVOID refValue, BOOLEAN bPreview)
PARANDIS_ADAPTER * pContext
enum _NDIS_DEVICE_POWER_STATE NDIS_DEVICE_POWER_STATE
static BOOLEAN FORCEINLINE IsValidVlanId(PARANDIS_ADAPTER *pContext, ULONG VlanID)
ULONG ulCurrentVlansFilterSet
BOOLEAN ParaNdis_SynchronizeWithInterrupt(PARANDIS_ADAPTER *pContext, ULONG messageId, tSynchronizedProcedure procedure, PVOID parameter)
struct _tagCopyPacketResult tCopyPacketResult
union _tagTcpIpPacketParsingResult tTcpIpPacketParsingResult
struct _tagPARANDIS_ADAPTER * PPARANDIS_ADAPTER
struct virtqueue * NetSendQueue
BOOLEAN bDoHwPacketFiltering
tMulticastData MulticastData
VOID ParaNdis_OnShutdown(PARANDIS_ADAPTER *pContext)
UCHAR PermanentMacAddress[ETH_LENGTH_OF_ADDRESS]
struct _tagPhysicalAddressAllocationContext tPhysicalAddressAllocationContext
VOID ParaNdis_SetPowerState(PARANDIS_ADAPTER *pContext, NDIS_DEVICE_POWER_STATE newState)
PNDIS_PACKET tPacketIndicationType
tPacketIndicationType ParaNdis_IndicateReceivedPacket(PARANDIS_ADAPTER *pContext, PVOID dataBuffer, PULONG pLength, BOOLEAN bPrepareOnly, pIONetDescriptor pBufferDesc)
ULONG64 ifHCOutUcastOctets
tCompletePhysicalAddress DataInfo
tTcpIpPacketParsingResult ParaNdis_ReviewIPPacket(PVOID buffer, ULONG size, LPCSTR caller)
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
struct _tagIONetDescriptor * pIONetDescriptor
BOOLEAN bUseScatterGather
#define NDIS_PACKET_TYPE_DIRECTED
ULONG framesRxCSHwMissedGood
void ParaNdis_PadPacketReceived(PVOID pDataBuffer, PULONG pLength)
#define NDIS_PACKET_TYPE_BROADCAST
BOOLEAN ParaNdis_SetTimer(NDIS_HANDLE timer, LONG millies)
tBusResource PciBars[PCI_TYPE0_ADDRESSES]
struct _tagSynchronizedContext tSynchronizedContext
ULONG64 ifHCOutMulticastOctets
#define PARANDIS_MULTICAST_LIST_SIZE