[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 1/3] Add definitions and usage of VIF interface V11


  • To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
  • Date: Wed, 14 Oct 2026 12:28:22 +0200
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
  • Cc: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
  • Delivery-date: Wed, 14 Oct 2026 10:28:47 +0000
  • Feedback-id: default:8631fc262581453bbf619ec5b2062170:Sweego
  • List-id: Developer list for the Windows PV Drivers subproject <win-pv-devel.lists.xenproject.org>

Requires a non-functional change in AdapterSetGeneralAttributes to
account for the new MaxCount parameter.

Testing shows that an old driver with FeatureScore=0xFE will still
outrank a new driver with FeatureScore=0xFF even if its device ID no
longer matches. So delete the TODO line in the INF.

Signed-off-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
---
 include/vif_interface.h | 65 ++++++++++++++++++++++++++++++++++++-----
 src/xennet.inf          | 14 ++++-----
 src/xennet/adapter.c    |  4 ++-
 3 files changed, 66 insertions(+), 17 deletions(-)

diff --git a/include/vif_interface.h b/include/vif_interface.h
index 05d472e..66053a1 100644
--- a/include/vif_interface.h
+++ b/include/vif_interface.h
@@ -499,9 +499,9 @@ typedef union _XENVIF_VIF_CALLBACK_PARAMETERS_V10 
XENVIF_VIF_CALLBACK_PARAMETERS
 */
 typedef VOID
 (*XENVIF_VIF_CALLBACK)(
-    _In_opt_ PVOID                          Argument,
-    _In_ XENVIF_VIF_CALLBACK_TYPE           Type,
-    _In_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
+    _In_opt_ PVOID                              Argument,
+    _In_ XENVIF_VIF_CALLBACK_TYPE               Type,
+    _In_opt_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
     );
 
 typedef NTSTATUS
@@ -567,17 +567,32 @@ typedef NTSTATUS
     _Out_ PULONGLONG            Value
     );
 
+/*! \typedef XENVIF_VIF_QUERY_RING_COUNT_V8
+    \brief Query the number of shared rings between frontend
+    and backend
+
+    \param Interface The interface header
+    \param Count Buffer to receive the count
+*/
+typedef VOID
+(*XENVIF_VIF_QUERY_RING_COUNT_V8)(
+    _In_ PINTERFACE Interface,
+    _Out_ PULONG    Count
+    );
+
 /*! \typedef XENVIF_VIF_QUERY_RING_COUNT
     \brief Query the number of shared rings between frontend
     and backend
 
     \param Interface The interface header
     \param Count Buffer to receive the count
+    \param MaxCount Buffer to receive the maximum possible ring count
 */
 typedef VOID
 (*XENVIF_VIF_QUERY_RING_COUNT)(
     _In_ PINTERFACE Interface,
-    _Out_ PULONG    Count
+    _Out_ PULONG    Count,
+    _Out_ PULONG    MaxCount
     );
 
 /*! \typedef XENVIF_VIF_UPDATE_HASH_MAPPING
@@ -900,7 +915,7 @@ struct _XENVIF_VIF_INTERFACE_V8 {
     XENVIF_VIF_ENABLE_V8                            EnableVersion8;
     XENVIF_VIF_DISABLE                              Disable;
     XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
-    XENVIF_VIF_QUERY_RING_COUNT                     QueryRingCount;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion8;
     XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
     XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOptions;
@@ -934,7 +949,7 @@ struct _XENVIF_VIF_INTERFACE_V9 {
     XENVIF_VIF_ENABLE_V9                            EnableVersion9;
     XENVIF_VIF_DISABLE                              Disable;
     XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
-    XENVIF_VIF_QUERY_RING_COUNT                     QueryRingCount;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion8;
     XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
     XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOptions;
@@ -962,6 +977,40 @@ struct _XENVIF_VIF_INTERFACE_V9 {
     \ingroup interfaces
 */
 struct _XENVIF_VIF_INTERFACE_V10 {
+    INTERFACE                                       Interface;
+    XENVIF_VIF_ACQUIRE                              Acquire;
+    XENVIF_VIF_RELEASE                              Release;
+    XENVIF_VIF_ENABLE                               Enable;
+    XENVIF_VIF_DISABLE                              Disable;
+    XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion8;
+    XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
+    XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
+    XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOptions;
+    XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE           ReceiverSetBackfillSize;
+    XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize;
+    XENVIF_VIF_RECEIVER_SET_HASH_ALGORITHM          ReceiverSetHashAlgorithm;
+    XENVIF_VIF_RECEIVER_QUERY_HASH_CAPABILITIES     
ReceiverQueryHashCapabilities;
+    XENVIF_VIF_RECEIVER_UPDATE_HASH_PARAMETERS      
ReceiverUpdateHashParameters;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKET             TransmitterQueuePacket;
+    XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    
TransmitterQueryOffloadOptions;
+    XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  
TransmitterQueryLargePacketSize;
+    XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingSize;
+    XENVIF_VIF_MAC_QUERY_STATE                      MacQueryState;
+    XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE         MacQueryMaximumFrameSize;
+    XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS          MacQueryPermanentAddress;
+    XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS            MacQueryCurrentAddress;
+    XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES        MacQueryMulticastAddresses;
+    XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES          MacSetMulticastAddresses;
+    XENVIF_VIF_MAC_SET_FILTER_LEVEL                 MacSetFilterLevel;
+    XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
+};
+
+/*! \struct _XENVIF_VIF_INTERFACE_V11
+    \brief VIF interface version 11
+    \ingroup interfaces
+*/
+struct _XENVIF_VIF_INTERFACE_V11 {
     INTERFACE                                       Interface;
     XENVIF_VIF_ACQUIRE                              Acquire;
     XENVIF_VIF_RELEASE                              Release;
@@ -991,7 +1040,7 @@ struct _XENVIF_VIF_INTERFACE_V10 {
     XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
 };
 
-typedef struct _XENVIF_VIF_INTERFACE_V10 XENVIF_VIF_INTERFACE, 
*PXENVIF_VIF_INTERFACE;
+typedef struct _XENVIF_VIF_INTERFACE_V11 XENVIF_VIF_INTERFACE, 
*PXENVIF_VIF_INTERFACE;
 
 /*! \def XENVIF_VIF
     \brief Macro at assist in method invocation
@@ -1002,6 +1051,6 @@ typedef struct _XENVIF_VIF_INTERFACE_V10 
XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTE
 #endif  // _WINDLL
 
 #define XENVIF_VIF_INTERFACE_VERSION_MIN    8
-#define XENVIF_VIF_INTERFACE_VERSION_MAX    10
+#define XENVIF_VIF_INTERFACE_VERSION_MAX    11
 
 #endif  // _XENVIF_INTERFACE_H
diff --git a/src/xennet.inf b/src/xennet.inf
index 79730e8..49a1733 100644
--- a/src/xennet.inf
+++ b/src/xennet.inf
@@ -56,15 +56,15 @@ xennet.sys
 
 [Inst.NT@INF_ARCH@]
 %XenNetName%=XenNet_Inst,\
-XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000005
+XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000006
 
 [Inst.NT@INF_ARCH@.10.0...25398]
 %XenNetName%=XenNet_Inst_25H2,\
-XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000005
+XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000006
 
 [XenNet_Inst] 
 Characteristics=0x84
@@ -74,7 +74,6 @@ BusType=1
 *PhysicalMediaType=14  ; NdisPhysicalMedium802_3
 CopyFiles=XenNet_Copyfiles
 AddReg=Xennet_Inst_AddReg
-; TODO: Remove during next PDO version bump
 FeatureScore=0xFE
 
 [XenNet_Inst_25H2]
@@ -85,7 +84,6 @@ BusType=1
 *PhysicalMediaType=14  ; NdisPhysicalMedium802_3
 CopyFiles=XenNet_Copyfiles
 AddReg=Xennet_Inst_AddReg
-; TODO: Remove during next PDO version bump
 FeatureScore=0xFE
 
 [XenNet_Inst_AddReg] 
diff --git a/src/xennet/adapter.c b/src/xennet/adapter.c
index 965315d..c7fbe44 100644
--- a/src/xennet/adapter.c
+++ b/src/xennet/adapter.c
@@ -3001,6 +3001,7 @@ AdapterSetGeneralAttributes(
     ULONG                                       Types;
     NDIS_RECEIVE_SCALE_CAPABILITIES             Rss;
     NDIS_STATUS                                 ndisStatus;
+    ULONG                                       MaxRingCount;
     NTSTATUS                                    status;
 
     RtlZeroMemory(&Adapter->Capabilities, sizeof(Adapter->Capabilities));
@@ -3110,7 +3111,8 @@ AdapterSetGeneralAttributes(
 
     XENVIF_VIF(QueryRingCount,
                &Adapter->VifInterface,
-               &Rss.NumberOfReceiveQueues);
+               &Rss.NumberOfReceiveQueues,
+               &MaxRingCount);
     Rss.NumberOfInterruptMessages = Rss.NumberOfReceiveQueues;
 
     if ((ULONG)Adapter->Properties.numrssqueues < Rss.NumberOfReceiveQueues)
-- 
2.55.0.windows.3



--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.