From 83019ae0c63454b2835f8fc245c7505351cee677 Mon Sep 17 00:00:00 2001 From: "Yang You (UU)" Date: Tue, 2 Dec 2025 13:37:13 -0800 Subject: Have the NetVAdapter Lib buildable with EWDK for both UM and KM --- .../netadaptercx/netvadapterlibrary/code/queue.cpp | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 network/netadaptercx/netvadapterlibrary/code/queue.cpp (limited to 'network/netadaptercx/netvadapterlibrary/code/queue.cpp') diff --git a/network/netadaptercx/netvadapterlibrary/code/queue.cpp b/network/netadaptercx/netvadapterlibrary/code/queue.cpp new file mode 100644 index 00000000..f4a12c2a --- /dev/null +++ b/network/netadaptercx/netvadapterlibrary/code/queue.cpp @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved + +#include "pch.hpp" + +#include + +#include "queue.h" + +NetvQueue::NetvQueue( + NETPACKETQUEUE Handle, + NetvAdapter & Adapter, + NET_RING_COLLECTION const * Rings +) + : m_handle{Handle} + , m_adapter{Adapter} + , m_rings{Rings} +{ +} + +NET_RING * +NetvQueue::GetPacketRing( + void +) +{ + return NetRingCollectionGetPacketRing(m_rings); +} + +NET_RING * +NetvQueue::GetFragmentRing( + void +) +{ + return NetRingCollectionGetFragmentRing(m_rings); +} + +NET_RING * +NetvQueue::GetNetMemoryReturnRing( + void +) +{ + return NetRingCollectionGetFragmentReturnContextRing(m_rings); +} -- cgit v1.3.1 From e6d3536e4873fb928f2cc9683df05718fddc8923 Mon Sep 17 00:00:00 2001 From: "Yang You (UU)" Date: Sat, 6 Dec 2025 18:29:41 -0800 Subject: Fix build break for NETCX2.6 only APIs --- .../netadaptercx/netvadapterlibrary/code/queue.cpp | 2 ++ .../netadaptercx/netvadapterlibrary/code/queue.h | 2 ++ network/wlan/WIFICX/drivercode/device.cpp | 3 +++ network/wlan/WIFICX/drivercode/wifihal.cpp | 27 ++++++++++------------ 4 files changed, 19 insertions(+), 15 deletions(-) (limited to 'network/netadaptercx/netvadapterlibrary/code/queue.cpp') diff --git a/network/netadaptercx/netvadapterlibrary/code/queue.cpp b/network/netadaptercx/netvadapterlibrary/code/queue.cpp index f4a12c2a..cf2aa586 100644 --- a/network/netadaptercx/netvadapterlibrary/code/queue.cpp +++ b/network/netadaptercx/netvadapterlibrary/code/queue.cpp @@ -33,6 +33,7 @@ NetvQueue::GetFragmentRing( return NetRingCollectionGetFragmentRing(m_rings); } +#if ((NETADAPTER_VERSION_MAJOR == 2) && (NETADAPTER_VERSION_MINOR >= 6)) NET_RING * NetvQueue::GetNetMemoryReturnRing( void @@ -40,3 +41,4 @@ NetvQueue::GetNetMemoryReturnRing( { return NetRingCollectionGetFragmentReturnContextRing(m_rings); } +#endif // NETCX 2.6 only \ No newline at end of file diff --git a/network/netadaptercx/netvadapterlibrary/code/queue.h b/network/netadaptercx/netvadapterlibrary/code/queue.h index 64012298..da101fd3 100644 --- a/network/netadaptercx/netvadapterlibrary/code/queue.h +++ b/network/netadaptercx/netvadapterlibrary/code/queue.h @@ -26,10 +26,12 @@ public: void ); +#if ((NETADAPTER_VERSION_MAJOR == 2) && (NETADAPTER_VERSION_MINOR >= 6)) NET_RING * GetNetMemoryReturnRing( void ); +#endif // NETCX 2.6 only NETPACKETQUEUE const m_handle{WDF_NO_HANDLE}; diff --git a/network/wlan/WIFICX/drivercode/device.cpp b/network/wlan/WIFICX/drivercode/device.cpp index 9404b161..31639c9f 100644 --- a/network/wlan/WIFICX/drivercode/device.cpp +++ b/network/wlan/WIFICX/drivercode/device.cpp @@ -80,6 +80,9 @@ NTSTATUS EvtWifiDeviceCreateAdapter(WDFDEVICE Device, NETADAPTER_INIT* AdapterIn return ntStatus; } + auto wifiNetvDevice = WifiGetIhvDeviceContext(Device); + wifiNetvDevice->netAdapters[WifiAdapterGetPortId(netAdapter)] = netAdapter; + WFCInfo("%!FUNC!: Success!"); return ntStatus; } diff --git a/network/wlan/WIFICX/drivercode/wifihal.cpp b/network/wlan/WIFICX/drivercode/wifihal.cpp index 5283474c..29de321b 100644 --- a/network/wlan/WIFICX/drivercode/wifihal.cpp +++ b/network/wlan/WIFICX/drivercode/wifihal.cpp @@ -606,10 +606,9 @@ NTSTATUS WifiHAL::WifiIhvConnect(const WDI_TASK_CONNECT_PARAMETERS& ConnectParam NT_ASSERT(m_LastConnectEntryId == 0); if (m_LastConnectEntryId != 0) // Not Disconnected State { -#ifdef WIFI_IHV_NETV - DeleteDatapathPeer( - deviceContext->netAdapters[pWdiHeader->PortId], reinterpret_cast(&deviceContext->ConnectedPeer)); -#endif // WIFI_IHV_NETV + WifiAdapterRemovePeer( + WifiGetIhvDeviceContext(m_Device)->netAdapters[pWdiHeader->PortId], + reinterpret_cast(&m_ConnectedPeer)); } WX_RETURN_NTSTATUS_IF_NOT_NT_SUCCESS_MSG(WifiIhvPerformAssociation( @@ -704,11 +703,9 @@ NTSTATUS WifiHAL::WifiIhvPerformAssociation( UINT32 NewConnectEntryId = 0; // Disconnected State WDI_AUTH_ALGORITHM NewAuthAlgo = pAuthenticationAlgorithms->pElements[0]; UCHAR pucData[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF, 0x10 }; -#ifdef WIFI_IHV_NETV - WifiNetvDevice* pDeviceContext = WifiNetvDeviceGetContext(Device); -#else + PWIFI_IHV_DEVICE_CONTEXT pDeviceContext = WifiGetIhvDeviceContext(m_Device); -#endif // WIFI_IHV_NETV + ULONG assocStatus = WDI_ASSOC_STATUS_SUCCESS; do @@ -727,12 +724,10 @@ NTSTATUS WifiHAL::WifiIhvPerformAssociation( NewConnectEntryId = connectEntry; m_LastConnectTransactionId = pWdiHeader->TransactionId; -#ifdef WIFI_IHV_NETV + // add peer on datapath - AddDatapathPeer(pDeviceContext->netAdapters[pWdiHeader->PortId], + WifiAdapterAddPeer(pDeviceContext->netAdapters[pWdiHeader->PortId], reinterpret_cast(g_ConnectEntries[connectEntry].pMacAddress)); -#endif // WIFI_IHV_NETV - #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); @@ -976,9 +971,11 @@ NTSTATUS WifiHAL::WifiIhvDisconnect(const WDI_TASK_DISCONNECT_PARAMETERS&, const m_LastConnectEntryId = 0; // Disconnected State -#ifdef WIFI_IHV_NETV - DeleteDatapathPeer(0x33); -#endif + WifiAdapterRemovePeer( + WifiGetIhvDeviceContext(m_Device)->netAdapters[pWdiHeader->PortId], + reinterpret_cast(&m_ConnectedPeer)); + + RtlZeroMemory(&m_ConnectedPeer, sizeof(DOT11_MAC_ADDRESS)); return STATUS_SUCCESS; } -- cgit v1.3.1 From 5d296ca7451db754f37261df544a032bf23b12fb Mon Sep 17 00:00:00 2001 From: "Yang You (UU)" Date: Mon, 8 Dec 2025 11:38:51 -0800 Subject: Remove NETCX2.6 depend features --- .../netvadapterlibrary/Interface/netvadapter.h | 6 -- .../netvadapterlibrary/code/adapter.cpp | 45 +---------- .../netadaptercx/netvadapterlibrary/code/enl.cpp | 49 ++---------- .../netvadapterlibrary/code/memory.cpp | 87 ---------------------- .../netadaptercx/netvadapterlibrary/code/memory.h | 58 --------------- .../netadaptercx/netvadapterlibrary/code/queue.cpp | 10 --- .../netadaptercx/netvadapterlibrary/code/queue.h | 7 -- 7 files changed, 6 insertions(+), 256 deletions(-) (limited to 'network/netadaptercx/netvadapterlibrary/code/queue.cpp') diff --git a/network/netadaptercx/netvadapterlibrary/Interface/netvadapter.h b/network/netadaptercx/netvadapterlibrary/Interface/netvadapter.h index d8e4294f..f4160dfa 100644 --- a/network/netadaptercx/netvadapterlibrary/Interface/netvadapter.h +++ b/network/netadaptercx/netvadapterlibrary/Interface/netvadapter.h @@ -66,12 +66,6 @@ public: WDFDEVICE m_device = WDF_NO_HANDLE; -#if ((NETADAPTER_VERSION_MAJOR == 2) && (NETADAPTER_VERSION_MINOR >= 6)) - BOOLEAN PreallocatedRxBuffers; - NETMEMORYCOLLECTION - m_preallocatedRxBuffers = WDF_NO_HANDLE; -#endif //NETCX 2.6 only - // configuration NET_ADAPTER_LINK_LAYER_ADDRESS PermanentAddress; NET_ADAPTER_LINK_LAYER_ADDRESS CurrentAddress; diff --git a/network/netadaptercx/netvadapterlibrary/code/adapter.cpp b/network/netadaptercx/netvadapterlibrary/code/adapter.cpp index a047f163..5dc530ea 100644 --- a/network/netadaptercx/netvadapterlibrary/code/adapter.cpp +++ b/network/netadaptercx/netvadapterlibrary/code/adapter.cpp @@ -431,57 +431,14 @@ NetvAdapterSetUsoUroOffloadCapabilities( _Use_decl_annotations_ NTSTATUS NetvAdapter::ConfigureDataCapabilities() { -#if ((NETADAPTER_VERSION_MAJOR == 2) && (NETADAPTER_VERSION_MINOR >= 6)) - if (PreallocatedRxBuffers) - { - WDF_OBJECT_ATTRIBUTES attributes; - WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes, Memory); - attributes.EvtDestroyCallback = [](WDFOBJECT Object) - { - Memory* memory = GetMemoryFromHandle(Object); - memory->~Memory(); - }; - - attributes.EvtCleanupCallback = [](WDFOBJECT Object) - { - Memory* memory = GetMemoryFromHandle(Object); - memory->ReleaseAllMappings(); - }; - - NET_MEMORY_COLLECTION_CONFIG collectionConfig; - NET_MEMORY_COLLECTION_CONFIG_INIT( - &collectionConfig, - PREALLOCATED_BUFFERS_COUNT); - - RETURN_IF_NOT_STATUS_SUCCESS( - NetMemoryCollectionCreate( - m_device, - &attributes, - &collectionConfig, - &m_preallocatedRxBuffers)); - Memory* memory = new (GetMemoryFromHandle(m_preallocatedRxBuffers)) Memory(); - RETURN_IF_NOT_STATUS_SUCCESS( - memory->Initialize( - m_preallocatedRxBuffers, - MAX_RX_BUFFER_SIZE - )); - } -#endif //NETCX 2.6 only NET_ADAPTER_TX_CAPABILITIES txCapabilities; NET_ADAPTER_TX_CAPABILITIES_INIT(&txCapabilities, MAX_TX_QUEUES); NET_ADAPTER_RX_CAPABILITIES rxCapabilities; NET_ADAPTER_RX_CAPABILITIES_INIT_SYSTEM_MANAGED(&rxCapabilities, MAX_RX_BUFFER_SIZE, MAX_RX_QUEUES); -#if ((NETADAPTER_VERSION_MAJOR == 2) && (NETADAPTER_VERSION_MINOR >= 6)) - if (PreallocatedRxBuffers) - { - rxCapabilities.AllocationMode = NetRxFragmentBufferAllocationModeDriverV2; - rxCapabilities.AttachmentMode = NetRxFragmentBufferAttachmentModeDriver; - rxCapabilities.MemoryCollection = m_preallocatedRxBuffers; - } -#endif //NETCX 2.6 only + NET_ADAPTER_LINK_LAYER_CAPABILITIES linkLayerCapabilities; NET_ADAPTER_LINK_LAYER_CAPABILITIES_INIT(&linkLayerCapabilities, MAX_LINK_SPEED, MAX_LINK_SPEED); diff --git a/network/netadaptercx/netvadapterlibrary/code/enl.cpp b/network/netadaptercx/netvadapterlibrary/code/enl.cpp index 4d4120b8..0a7d53d3 100644 --- a/network/netadaptercx/netvadapterlibrary/code/enl.cpp +++ b/network/netadaptercx/netvadapterlibrary/code/enl.cpp @@ -348,52 +348,13 @@ EnlpIterationRoutine( auto fragment = NetFragmentIteratorGetFragment(&rxFi); BYTE* fragmentBuffer = nullptr; -#if ((NETADAPTER_VERSION_MAJOR == 2) && (NETADAPTER_VERSION_MINOR >= 6)) - if (rxq->RxQueue->m_adapter.PreallocatedRxBuffers) - { - MemoryBuffer* bufferToUse = GetMemoryFromHandle(rxq->RxQueue->m_adapter.m_preallocatedRxBuffers)->PopAvailableBuffer(); - if (bufferToUse == nullptr) - { - // No more buffers available, stop processing packets - rxq->QueueNext = NetFragmentIteratorGetIndex(&rxFi); - break; - } - - NET_FRAGMENT_NET_MEMORY* netMemoryId = - NetExtensionGetFragmentNetMemory( - &rxq->RxQueue->NetMemoryExtension, - NetFragmentIteratorGetIndex(&rxFi)); - - NET_FRAGMENT_RETURN_CONTEXT* fragmentReturnContext = - NetExtensionGetFragmentReturnContext( - &rxq->RxQueue->NetMemoryReturnContextExtensionIn, - NetFragmentIteratorGetIndex(&rxFi)); - - netMemoryId->NetMemoryId = bufferToUse->MemoryId; - fragmentReturnContext->Handle = reinterpret_cast(bufferToUse); - fragmentBuffer = bufferToUse->VirtualAddress; - auto const rxVirtualAddress = - NetExtensionGetFragmentVirtualAddress( - &rxq->RxQueue->VirtualAddressExtension, - NetFragmentIteratorGetIndex(&rxFi)); + auto const rxVirtualAddress = + NetExtensionGetFragmentVirtualAddress( + &rxq->RxQueue->VirtualAddressExtension, + NetFragmentIteratorGetIndex(&rxFi)); - rxVirtualAddress->VirtualAddress = bufferToUse->VirtualAddress; - - fragment->Capacity = MAX_RX_BUFFER_SIZE; - fragment->Offset = 0; - fragment->Scratch = 0; - } - else -#endif //NETCX 2.6 only - { - auto const rxVirtualAddress = - NetExtensionGetFragmentVirtualAddress( - &rxq->RxQueue->VirtualAddressExtension, - NetFragmentIteratorGetIndex(&rxFi)); - - fragmentBuffer = static_cast(rxVirtualAddress->VirtualAddress); - } + fragmentBuffer = static_cast(rxVirtualAddress->VirtualAddress); fragment->Offset = 0; fragment->ValidLength = diff --git a/network/netadaptercx/netvadapterlibrary/code/memory.cpp b/network/netadaptercx/netvadapterlibrary/code/memory.cpp index b7536531..35a3f2c5 100644 --- a/network/netadaptercx/netvadapterlibrary/code/memory.cpp +++ b/network/netadaptercx/netvadapterlibrary/code/memory.cpp @@ -1,95 +1,8 @@ // Copyright (C) Microsoft Corporation. All rights reserved. #include "pch.hpp" #include "memory.h" -#include -#include "trace.h" #include "memory.tmh" -#if ((NETADAPTER_VERSION_MAJOR == 2) && (NETADAPTER_VERSION_MINOR >= 6)) - -NTSTATUS -Memory::Initialize( - NETMEMORYCOLLECTION MemoryCollection, - size_t BufferSize -) -{ - m_memoryCollection = MemoryCollection; - - for (size_t i = 0; i < PREALLOCATED_BUFFERS_COUNT; i++) - { - NET_MEMORY_CONFIG memoryConfig{}; - NET_MEMORY_CONFIG_INIT( - &memoryConfig, - m_buffers[i].VirtualAddress, - BufferSize); - - RETURN_IF_NOT_STATUS_SUCCESS( - NetMemoryCreate( - MemoryCollection, - &memoryConfig, - &m_buffers[i].MemoryId - )); - - m_buffersReadyToUse[i] = &m_buffers[i]; - } - - m_lastBufferToUse = PREALLOCATED_BUFFERS_COUNT; - // Create WDF spinlock for the queue, parent to the queue's WDF handle - { - WDF_OBJECT_ATTRIBUTES attributes; - WDF_OBJECT_ATTRIBUTES_INIT(&attributes); - status = WdfSpinLockCreate(&attributes, &m_spinLock); - NT_ASSERT(NT_SUCCESS(status)); - } - return STATUS_SUCCESS; -} - -void -Memory::ReleaseAllMappings( - void -) -{ - for (size_t i = 0; i < PREALLOCATED_BUFFERS_COUNT; i++) - { - NetMemoryDestroy(m_memoryCollection, m_buffers[i].MemoryId); - } - - m_lastBufferToUse = 0; - RtlZeroMemory(m_buffersReadyToUse, sizeof(m_buffersReadyToUse)); -} - -MemoryBuffer* -Memory::PopAvailableBuffer( - void -) -{ - WdfSpinLockAcquire(m_spinLock); - - if (m_lastBufferToUse == 0) - { - WdfSpinLockRelease(m_spinLock); - return nullptr; - } - auto returnbuffer = m_buffersReadyToUse[--m_lastBufferToUse]; - WdfSpinLockRelease(m_spinLock); - - return returnbuffer; -} - -void -Memory::ReturnBuffer( - MemoryBuffer* Buffer -) -{ - WdfSpinLockAcquire(m_spinLock); - - NT_FRE_ASSERT(m_lastBufferToUse < PREALLOCATED_BUFFERS_COUNT); - - m_buffersReadyToUse[m_lastBufferToUse++] = Buffer; - WdfSpinLockRelease(m_spinLock); -} -#endif //NETCX 2.6 only - // for wil::make_unique_nothrow void* operator new(size_t s, std::nothrow_t const&) diff --git a/network/netadaptercx/netvadapterlibrary/code/memory.h b/network/netadaptercx/netvadapterlibrary/code/memory.h index 4c19fc39..1200c72c 100644 --- a/network/netadaptercx/netvadapterlibrary/code/memory.h +++ b/network/netadaptercx/netvadapterlibrary/code/memory.h @@ -2,61 +2,3 @@ #pragma once #define MAX_RX_BUFFER_SIZE 65535 - -#if ((NETADAPTER_VERSION_MAJOR == 2) && (NETADAPTER_VERSION_MINOR >= 6)) - -static const size_t PREALLOCATED_BUFFERS_COUNT = 128; - -struct MemoryBuffer -{ - NET_MEMORY_ID - MemoryId; - - BYTE - VirtualAddress[MAX_RX_BUFFER_SIZE]; -}; - -class Memory -{ -public: - - NTSTATUS - Initialize( - NETMEMORYCOLLECTION MemoryCollection, - size_t BufferSize - ); - - MemoryBuffer* - PopAvailableBuffer( - void - ); - - void - ReturnBuffer( - MemoryBuffer* Buffer - ); - - void - ReleaseAllMappings( - void - ); - -private: - NETMEMORYCOLLECTION - m_memoryCollection; - - MemoryBuffer - m_buffers[PREALLOCATED_BUFFERS_COUNT]; - - MemoryBuffer* - m_buffersReadyToUse[PREALLOCATED_BUFFERS_COUNT]; - - size_t - m_lastBufferToUse; - - WDFSPINLOCK - m_spinLock{}; -}; - -WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(Memory, GetMemoryFromHandle); -#endif //NETCX 2.6 only \ No newline at end of file diff --git a/network/netadaptercx/netvadapterlibrary/code/queue.cpp b/network/netadaptercx/netvadapterlibrary/code/queue.cpp index cf2aa586..667d59f7 100644 --- a/network/netadaptercx/netvadapterlibrary/code/queue.cpp +++ b/network/netadaptercx/netvadapterlibrary/code/queue.cpp @@ -32,13 +32,3 @@ NetvQueue::GetFragmentRing( { return NetRingCollectionGetFragmentRing(m_rings); } - -#if ((NETADAPTER_VERSION_MAJOR == 2) && (NETADAPTER_VERSION_MINOR >= 6)) -NET_RING * -NetvQueue::GetNetMemoryReturnRing( - void -) -{ - return NetRingCollectionGetFragmentReturnContextRing(m_rings); -} -#endif // NETCX 2.6 only \ No newline at end of file diff --git a/network/netadaptercx/netvadapterlibrary/code/queue.h b/network/netadaptercx/netvadapterlibrary/code/queue.h index da101fd3..becb72ce 100644 --- a/network/netadaptercx/netvadapterlibrary/code/queue.h +++ b/network/netadaptercx/netvadapterlibrary/code/queue.h @@ -26,13 +26,6 @@ public: void ); -#if ((NETADAPTER_VERSION_MAJOR == 2) && (NETADAPTER_VERSION_MINOR >= 6)) - NET_RING * - GetNetMemoryReturnRing( - void - ); -#endif // NETCX 2.6 only - NETPACKETQUEUE const m_handle{WDF_NO_HANDLE}; -- cgit v1.3.1