|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 1/3] Add definitions and usage of VIF interface V11
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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |