diff options
| author | Yang You (UU) <[email protected]> | 2025-12-08 15:23:39 -0800 |
|---|---|---|
| committer | Yang You (UU) <[email protected]> | 2025-12-08 15:23:39 -0800 |
| commit | eb4a87e545f33af410b15c6c86100c165c0eda2a (patch) | |
| tree | 021b39e2c5cf2386ec83532e7955997467520c4b | |
| parent | 4372ea08facd248da112eec0aed34d4e512b6236 (diff) | |
Remove the TX demx support as ENL limiation.
5 files changed, 15 insertions, 42 deletions
diff --git a/network/netadaptercx/netvadapterlibrary/Interface/netvadapter.h b/network/netadaptercx/netvadapterlibrary/Interface/netvadapter.h index 88976291..b8474a9b 100644 --- a/network/netadaptercx/netvadapterlibrary/Interface/netvadapter.h +++ b/network/netadaptercx/netvadapterlibrary/Interface/netvadapter.h @@ -9,6 +9,9 @@ #define NETV_NUMBER_OF_QUEUES 1 +#define NETV_SUPPORT_RSS FALSE // RSS not supported due to ENL limitations +#define NETV_SUPPORT_TX_DEMUXING FALSE // TX Demuxing not supported due to ENL limitations + // supported filters #define NETV_SUPPORTED_FILTERS ( \ NetPacketFilterFlagDirected | \ diff --git a/network/netadaptercx/netvadapterlibrary/code/enl.cpp b/network/netadaptercx/netvadapterlibrary/code/enl.cpp index 0a7d53d3..fb763330 100644 --- a/network/netadaptercx/netvadapterlibrary/code/enl.cpp +++ b/network/netadaptercx/netvadapterlibrary/code/enl.cpp @@ -668,10 +668,10 @@ EnlIsPortActive( { ENLP_PORT* port = &EnlLink->Ports[PortIndex]; ENLP_QUEUE* txq = &port->TxQueue[0]; - + ENLP_QUEUE* rxq = &port->RxQueue[0]; NT_FRE_ASSERT(PortIndex < ENLP_PORT_COUNT); - return (txq->Queue == nullptr) ? FALSE : TRUE; + return (txq->Queue == nullptr && rxq->Queue == nullptr) ? FALSE : TRUE; } _IRQL_requires_max_(PASSIVE_LEVEL) @@ -718,7 +718,6 @@ EnlDeactivateLinkPort( ENLP_PORT* port = &EnlLink->Ports[PortIndex]; LogInformation(FLAG_DRIVER, L"PortIndex=%u Queue=%p", PortIndex, port->TxQueue[0].Queue); - ULONG i; NT_FRE_ASSERT(EnlIsPortActive(EnlLink, PortIndex)); KLockThisExclusive(EnlLink->Lock); @@ -737,7 +736,7 @@ EnlDeactivateLinkPort( // As long as there's one port with active queues, the EnlThread will run. - for (i = 0; i < ENLP_PORT_COUNT; i++) + for (ULONG i = 0; i < ENLP_PORT_COUNT; i++) { if (EnlIsPortActive(EnlLink, i)) { diff --git a/network/netadaptercx/netvadapterlibrary/code/rxqueue.cpp b/network/netadaptercx/netvadapterlibrary/code/rxqueue.cpp index d0b87f9e..6eed638c 100644 --- a/network/netadaptercx/netvadapterlibrary/code/rxqueue.cpp +++ b/network/netadaptercx/netvadapterlibrary/code/rxqueue.cpp @@ -68,26 +68,7 @@ NetvRxQueue::NetvRxQueue( NetExtensionTypePacket); NetRxQueueGetExtension(m_handle, &extension, &RxXSumExtension); -#if ((NETADAPTER_VERSION_MAJOR == 2) && (NETADAPTER_VERSION_MINOR >= 6)) - if (Adapter.PreallocatedRxBuffers) - { - NET_EXTENSION_QUERY_INIT( - &extension, - NET_FRAGMENT_EXTENSION_NET_MEMORY_NAME, - NET_FRAGMENT_EXTENSION_NET_MEMORY_VERSION_1, - NetExtensionTypeFragment); - - NetRxQueueGetExtension(m_handle, &extension, &NetMemoryExtension); - NET_EXTENSION_QUERY_INIT( - &extension, - NET_FRAGMENT_EXTENSION_RETURN_CONTEXT_NAME, - NET_FRAGMENT_EXTENSION_RETURN_CONTEXT_VERSION_1, - NetExtensionTypeFragment); - - NetRxQueueGetExtension(m_handle, &extension, &NetMemoryReturnContextExtensionIn); - } -#endif //NETCX 2.6 only EnlQueueHandle = EnlCreateQueue(Handle, RX); } @@ -150,23 +131,7 @@ NetvRxQueue::Advance( break; } } -#if ((NETADAPTER_VERSION_MAJOR == 2) && (NETADAPTER_VERSION_MINOR >= 6)) - if (m_adapter.PreallocatedRxBuffers) - { - NET_RING* dataBufferRing = GetNetMemoryReturnRing(); - while (dataBufferRing->BeginIndex != dataBufferRing->EndIndex) - { - NET_FRAGMENT_RETURN_CONTEXT* netMemoryReturnContextOut = - NetRingGetFragmentReturnContextAtIndex( - dataBufferRing, - dataBufferRing->BeginIndex); - MemoryBuffer* memoryBuffer = reinterpret_cast<MemoryBuffer*>(netMemoryReturnContextOut->Handle); - GetMemoryFromHandle(m_adapter.m_preallocatedRxBuffers)->ReturnBuffer(memoryBuffer); - dataBufferRing->BeginIndex = NetRingIncrementIndex(dataBufferRing, dataBufferRing->BeginIndex); - } - } -#endif //NETCX 2.6 only NetFragmentIteratorSet(&fi); NetPacketIteratorSet(&pi); EnlRingDoorBell(EnlQueueHandle, fr->EndIndex); diff --git a/network/wlan/WIFICX/drivercode/device.cpp b/network/wlan/WIFICX/drivercode/device.cpp index d251121d..0e04d562 100644 --- a/network/wlan/WIFICX/drivercode/device.cpp +++ b/network/wlan/WIFICX/drivercode/device.cpp @@ -49,10 +49,13 @@ NTSTATUS EvtWifiDeviceCreateAdapter(WDFDEVICE Device, NETADAPTER_INIT* AdapterIn WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&adapterAttributes, WifiNetvAdapter); adapterAttributes.EvtCleanupCallback = EvtAdapterCleanup; +#ifdef NETV_SUPPORT_TX_DEMUXING WIFI_ADAPTER_TX_DEMUX peerInfoDemux; WIFI_ADAPTER_TX_PEER_ADDRESS_DEMUX_INIT(&peerInfoDemux, MaxNumOfPeers); WifiAdapterInitAddTxDemux(AdapterInit, &peerInfoDemux); +#endif // NETV_SUPPORT_TX_DEMUXING + NETADAPTER netAdapter; NTSTATUS ntStatus = NetAdapterCreate(AdapterInit, &adapterAttributes, &netAdapter); if (!NT_SUCCESS(ntStatus)) diff --git a/network/wlan/WIFICX/drivercode/wifihal.cpp b/network/wlan/WIFICX/drivercode/wifihal.cpp index 29de321b..fead61b3 100644 --- a/network/wlan/WIFICX/drivercode/wifihal.cpp +++ b/network/wlan/WIFICX/drivercode/wifihal.cpp @@ -604,13 +604,14 @@ _Use_decl_annotations_ NTSTATUS WifiHAL::WifiIhvConnect(const WDI_TASK_CONNECT_PARAMETERS& ConnectParameters, const PWDI_MESSAGE_HEADER pWdiHeader, UINT) { NT_ASSERT(m_LastConnectEntryId == 0); +#ifdef NETV_SUPPORT_TX_DEMUXING if (m_LastConnectEntryId != 0) // Not Disconnected State { WifiAdapterRemovePeer( WifiGetIhvDeviceContext(m_Device)->netAdapters[pWdiHeader->PortId], reinterpret_cast<NET_EUI48_ADDRESS*>(&m_ConnectedPeer)); } - +#endif //NETV_SUPPORT_TX_DEMUXING WX_RETURN_NTSTATUS_IF_NOT_NT_SUCCESS_MSG(WifiIhvPerformAssociation( &ConnectParameters.PreferredBSSEntryList, &ConnectParameters.ConnectParameters.AuthenticationAlgorithms, pWdiHeader), "Failed to perform association"); @@ -724,10 +725,11 @@ NTSTATUS WifiHAL::WifiIhvPerformAssociation( NewConnectEntryId = connectEntry; m_LastConnectTransactionId = pWdiHeader->TransactionId; - +#ifdef NETV_SUPPORT_TX_DEMUXING // add peer on datapath WifiAdapterAddPeer(pDeviceContext->netAdapters[pWdiHeader->PortId], reinterpret_cast<NET_EUI48_ADDRESS*>(g_ConnectEntries[connectEntry].pMacAddress)); +#endif // NETV_SUPPORT_TX_DEMUXING #ifdef WIFI_IHV_HANDSHAKE // Pretend to recieve M1 on datapath before, the association complete has made it up the control path. RecieveDatapathFrame(0x33, sizeof(pucData), pucData); @@ -971,10 +973,11 @@ NTSTATUS WifiHAL::WifiIhvDisconnect(const WDI_TASK_DISCONNECT_PARAMETERS&, const m_LastConnectEntryId = 0; // Disconnected State +#ifdef NETV_SUPPORT_TX_DEMUXING WifiAdapterRemovePeer( WifiGetIhvDeviceContext(m_Device)->netAdapters[pWdiHeader->PortId], reinterpret_cast<NET_EUI48_ADDRESS*>(&m_ConnectedPeer)); - +#endif RtlZeroMemory(&m_ConnectedPeer, sizeof(DOT11_MAC_ADDRESS)); return STATUS_SUCCESS; |
