XENVIF_MAC_STATE_CHANGE
} XENVIF_VIF_CALLBACK_TYPE, *PXENVIF_VIF_CALLBACK_TYPE;
+/*! \typedef XENVIF_VIF_CALLBACK_PARAMETERS_V9
+ \brief VIF interface version 9 parameters for provider to subscriber callback function
+
+ \b XENVIF_TRANSMITTER_RETURN_PACKET:
+ \param Cookie Cookie supplied to XENVIF_TRANSMITTER_QUEUE_PACKET
+ \param Completion Packet completion information
+
+ \b XENVIF_RECEIVER_QUEUE_PACKET:
+ \param Index The index of the queue on which the packet was received
+ \param Mdl The initial MDL of the packet
+ \param Offset The offset of the packet data in the initial MDL
+ \param Length The total length of the packet
+ \param Flags Packet checksum flags
+ \param MaximumSegmentSize The TCP MSS (used only if OffloadOptions.OffloadIpVersion[4|6]LargePacket is set)
+ \param TagControlInformation The VLAN TCI (used only if OffloadOptions.OffloadTagManipulation is set)
+ \param Info Header information for the packet
+ \param Hash Hash information for the packet
+ \param More A flag to indicate whether more packets will be queued for the same CPU
+ \param Cookie Cookie that should be passed to XENVIF_RECEIVER_RETURN_PACKET method
+
+ \b XENVIF_MAC_STATE_CHANGE:
+ No additional arguments
+*/
+union _XENVIF_VIF_CALLBACK_PARAMETERS_V9 {
+ struct {
+ PVOID Cookie;
+ PXENVIF_TRANSMITTER_PACKET_COMPLETION_INFO Completion;
+ } TransmitterReturnPacket;
+ struct {
+ ULONG Index;
+ PMDL Mdl;
+ ULONG Offset;
+ ULONG Length;
+ XENVIF_PACKET_CHECKSUM_FLAGS Flags;
+ USHORT MaximumSegmentSize;
+ USHORT TagControlInformation;
+ PXENVIF_PACKET_INFO Info;
+ PXENVIF_PACKET_HASH Hash;
+ BOOLEAN More;
+ PVOID Cookie;
+ } ReceiverQueuePacket;
+};
+
/*! \typedef XENVIF_VIF_ACQUIRE
\brief Acquire a reference to the VIF interface
IN PINTERFACE Interface
);
+typedef VOID
+(*XENVIF_VIF_CALLBACK_V8)(
+ IN PVOID Argument OPTIONAL,
+ IN XENVIF_VIF_CALLBACK_TYPE Type,
+ ...
+ );
+
+typedef union _XENVIF_VIF_CALLBACK_PARAMETERS_V9 XENVIF_VIF_CALLBACK_PARAMETERS, *PXENVIF_VIF_CALLBACK_PARAMETERS;
+
/*! \typedef XENVIF_VIF_CALLBACK
\brief Provider to subscriber callback function
\param Argument An optional context argument passed to the callback
\param Type The callback type
- \param ... Additional paramaters required by \a Type
-
- \b XENVIF_TRANSMITTER_RETURN_PACKET:
- \param Cookie Cookie supplied to XENVIF_TRANSMITTER_QUEUE_PACKET
- \param Completion Packet completion information
-
- \b XENVIF_RECEIVER_QUEUE_PACKET:
- \param Index The index of the queue on which the packet was received
- \param Mdl The initial MDL of the packet
- \param Offset The offset of the packet data in the initial MDL
- \param Length The total length of the packet
- \param Flags Packet checksum flags
- \param MaximumSegmentSize The TCP MSS (used only if OffloadOptions.OffloadIpVersion[4|6]LargePacket is set)
- \param TagControlInformation The VLAN TCI (used only if OffloadOptions.OffloadTagManipulation is set)
- \param Info Header information for the packet
- \param Hash Hash information for the packet
- \param More A flag to indicate whether more packets will be queued for the same CPU
- \param Cookie Cookie that should be passed to XENVIF_RECEIVER_RETURN_PACKET method
-
- \b XENVIF_MAC_STATE_CHANGE:
- No additional arguments
+ \param Parameters The callback parameters
*/
typedef VOID
(*XENVIF_VIF_CALLBACK)(
- IN PVOID Argument OPTIONAL,
- IN XENVIF_VIF_CALLBACK_TYPE Type,
- ...
+ IN PVOID Argument OPTIONAL,
+ IN XENVIF_VIF_CALLBACK_TYPE Type,
+ IN PXENVIF_VIF_CALLBACK_PARAMETERS Parameters
+ );
+
+typedef NTSTATUS
+(*XENVIF_VIF_ENABLE_V8)(
+ IN PINTERFACE Interface,
+ IN XENVIF_VIF_CALLBACK_V8 Callback,
+ IN PVOID Argument OPTIONAL
);
/*! \typedef XENVIF_VIF_ENABLE
IN PVOID Cookie
);
-typedef NTSTATUS
-(*XENVIF_VIF_TRANSMITTER_QUEUE_PACKET_V6)(
- IN PINTERFACE Interface,
- IN PMDL Mdl,
- IN ULONG Offset,
- IN ULONG Length,
- IN XENVIF_VIF_OFFLOAD_OPTIONS OffloadOptions,
- IN USHORT MaximumSegmentSize,
- IN USHORT TagControlInformation,
- IN PXENVIF_PACKET_HASH Hash,
- IN PVOID Cookie
- );
-
/*! \typedef XENVIF_VIF_TRANSMITTER_QUEUE_PACKET
\brief Queue a packet at the provider's transmit side
DEFINE_GUID(GUID_XENVIF_VIF_INTERFACE,
0x76f279cd, 0xca11, 0x418b, 0x92, 0xe8, 0xc5, 0x7f, 0x77, 0xde, 0xe, 0x2e);
-/*! \struct _XENVIF_VIF_INTERFACE_V6
- \brief VIF interface version 6
- \ingroup interfaces
-*/
-struct _XENVIF_VIF_INTERFACE_V6 {
- 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 QueryRingCount;
- 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_V6 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_V7
- \brief VIF interface version 7
+/*! \struct _XENVIF_VIF_INTERFACE_V8
+ \brief VIF interface version 8
\ingroup interfaces
*/
-struct _XENVIF_VIF_INTERFACE_V7 {
+struct _XENVIF_VIF_INTERFACE_V8 {
INTERFACE Interface;
XENVIF_VIF_ACQUIRE Acquire;
XENVIF_VIF_RELEASE Release;
- XENVIF_VIF_ENABLE Enable;
+ XENVIF_VIF_ENABLE_V8 EnableVersion8;
XENVIF_VIF_DISABLE Disable;
XENVIF_VIF_QUERY_STATISTIC QueryStatistic;
XENVIF_VIF_QUERY_RING_COUNT QueryRingCount;
XENVIF_VIF_MAC_QUERY_FILTER_LEVEL MacQueryFilterLevel;
};
-/*! \struct _XENVIF_VIF_INTERFACE_V8
- \brief VIF interface version 8
+/*! \struct _XENVIF_VIF_INTERFACE_V9
+ \brief VIF interface version 9
\ingroup interfaces
*/
-struct _XENVIF_VIF_INTERFACE_V8 {
+struct _XENVIF_VIF_INTERFACE_V9 {
INTERFACE Interface;
XENVIF_VIF_ACQUIRE Acquire;
XENVIF_VIF_RELEASE Release;
XENVIF_VIF_MAC_QUERY_FILTER_LEVEL MacQueryFilterLevel;
};
-typedef struct _XENVIF_VIF_INTERFACE_V8 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTERFACE;
+typedef struct _XENVIF_VIF_INTERFACE_V9 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTERFACE;
/*! \def XENVIF_VIF
\brief Macro at assist in method invocation
#endif // _WINDLL
-#define XENVIF_VIF_INTERFACE_VERSION_MIN 6
-#define XENVIF_VIF_INTERFACE_VERSION_MAX 8
+#define XENVIF_VIF_INTERFACE_VERSION_MIN 8
+#define XENVIF_VIF_INTERFACE_VERSION_MAX 9
#endif // _XENVIF_INTERFACE_H
static VOID
AdapterVifCallback(
- IN PVOID Context,
- IN XENVIF_VIF_CALLBACK_TYPE Type,
- ...
+ IN PVOID Context,
+ IN XENVIF_VIF_CALLBACK_TYPE Type,
+ IN PXENVIF_VIF_CALLBACK_PARAMETERS Parameters
)
{
- PXENNET_ADAPTER Adapter = Context;
- va_list Arguments;
-
- va_start(Arguments, Type);
+ PXENNET_ADAPTER Adapter = Context;
switch (Type) {
- case XENVIF_TRANSMITTER_RETURN_PACKET: {
- PVOID Cookie;
- PXENVIF_TRANSMITTER_PACKET_COMPLETION_INFO Completion;
-
- Cookie = va_arg(Arguments, PVOID);
- Completion = va_arg(Arguments, PXENVIF_TRANSMITTER_PACKET_COMPLETION_INFO);
-
+ case XENVIF_TRANSMITTER_RETURN_PACKET:
TransmitterReturnPacket(Adapter->Transmitter,
- Cookie,
- Completion);
+ Parameters->TransmitterReturnPacket.Cookie,
+ Parameters->TransmitterReturnPacket.Completion);
break;
- }
- case XENVIF_RECEIVER_QUEUE_PACKET: {
- ULONG Index;
- PMDL Mdl;
- ULONG Offset;
- ULONG Length;
- XENVIF_PACKET_CHECKSUM_FLAGS Flags;
- USHORT MaximumSegmentSize;
- USHORT TagControlInformation;
- PXENVIF_PACKET_INFO Info;
- PXENVIF_PACKET_HASH Hash;
- BOOLEAN More;
- PVOID Cookie;
-
- Index = va_arg(Arguments, ULONG);
- Mdl = va_arg(Arguments, PMDL);
- Offset = va_arg(Arguments, ULONG);
- Length = va_arg(Arguments, ULONG);
- Flags = va_arg(Arguments, XENVIF_PACKET_CHECKSUM_FLAGS);
- MaximumSegmentSize = va_arg(Arguments, USHORT);
- TagControlInformation = va_arg(Arguments, USHORT);
- Info = va_arg(Arguments, PXENVIF_PACKET_INFO);
- Hash = va_arg(Arguments, PXENVIF_PACKET_HASH);
- More = va_arg(Arguments, BOOLEAN);
- Cookie = va_arg(Arguments, PVOID);
+ case XENVIF_RECEIVER_QUEUE_PACKET:
ReceiverQueuePacket(Adapter->Receiver,
- Index,
- Mdl,
- Offset,
- Length,
- Flags,
- MaximumSegmentSize,
- TagControlInformation,
- Info,
- Hash,
- More,
- Cookie);
+ Parameters->ReceiverQueuePacket.Index,
+ Parameters->ReceiverQueuePacket.Mdl,
+ Parameters->ReceiverQueuePacket.Offset,
+ Parameters->ReceiverQueuePacket.Length,
+ Parameters->ReceiverQueuePacket.Flags,
+ Parameters->ReceiverQueuePacket.MaximumSegmentSize,
+ Parameters->ReceiverQueuePacket.TagControlInformation,
+ Parameters->ReceiverQueuePacket.Info,
+ Parameters->ReceiverQueuePacket.Hash,
+ Parameters->ReceiverQueuePacket.More,
+ Parameters->ReceiverQueuePacket.Cookie);
break;
- }
- case XENVIF_MAC_STATE_CHANGE: {
+
+ case XENVIF_MAC_STATE_CHANGE:
AdapterMediaStateChange(Adapter);
break;
}
- }
-
- va_end(Arguments);
}
static VOID