summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang You (UU) <[email protected]>2025-12-08 15:23:39 -0800
committerYang You (UU) <[email protected]>2025-12-08 15:23:39 -0800
commiteb4a87e545f33af410b15c6c86100c165c0eda2a (patch)
tree021b39e2c5cf2386ec83532e7955997467520c4b
parent4372ea08facd248da112eec0aed34d4e512b6236 (diff)
Remove the TX demx support as ENL limiation.
-rw-r--r--network/netadaptercx/netvadapterlibrary/Interface/netvadapter.h3
-rw-r--r--network/netadaptercx/netvadapterlibrary/code/enl.cpp7
-rw-r--r--network/netadaptercx/netvadapterlibrary/code/rxqueue.cpp35
-rw-r--r--network/wlan/WIFICX/drivercode/device.cpp3
-rw-r--r--network/wlan/WIFICX/drivercode/wifihal.cpp9
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;