// ntddndis.h
typedef struct _NDIS_PD_CAPABILITIES {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
ULONG MaximumTxPartialBufferCount;
ULONG MaximumRxPartialBufferCount;
UCHAR RxFilterContextWidth;
ULONG CapabilityFlags;
ULONG MaxNumberOfRxQueues;
ULONG MaxNumberOfTxQueues;
ULONG MaxNumberOfRxQueuesForDefaultVport;
ULONG MaxNumberOfTxQueuesForDefaultVport;
ULONG MaxNumberOfRxQueuesPerNonDefaultVport;
ULONG MaxNumberOfTxQueuesPerNonDefaultVport;
ULONG ExactMatchProfileArrayOffset;
ULONG ExactMatchProfileArrayNumElements;
ULONG ExactMatchProfileArrayElementSize;
ULONG WildcardMatchProfileArrayOffset;
ULONG WildcardMatchProfileArrayNumElements;
ULONG WildcardMatchProfileArrayElementSize;
ULONG MinimumModerationInterval;
ULONG MaximumModerationInterval;
ULONG ModerationIntervalGranularity;
ULONG MaxRxQueueSize;
ULONG MaxTxQueueSize;
} NDIS_PD_CAPABILITIES;
View the official Windows Driver Kit DDI referenceNo description available.
This structure indicates the PD capabilities for a provider.
HeaderThe NDIS_OBJECT_HEADER structure for the NDIS_PD_CAPABILITIES structure. Set the members of this structure as follows:
FlagsThis member is reserved and must be set to 0.
MaximumTxPartialBufferCountThe maximum partial transmit PD_BUFFER chain lengths supported by the provider.
MaximumRxPartialBufferCountThe maximum partial receive PD_BUFFER chain lengths supported by the provider.
RxFilterContextWidthThe filter context width that the provider supports. A provider can support up to 64-bits in width.
CapabilityFlagsFlags that contain additional capabilities that the provider supports.
| Flag | Description |
|---|---|
| NDIS_PD_CAPS_RECEIVE_FILTER_COUNTERS_SUPPORTED | This flag indicates that the provider supports creation of counters with the PDCounterTypeReceiveFilter type that is part of the NDIS_PD_COUNTER enumeration |
MaxNumberOfRxQueuesThe maximum number of receive queues the provider supports. This is only relevant to queues created by the NdisPDAllocateQueue routine, therefore this number is not accurate for the client because additional pre-existing RSS queues (that the client can request PD-mode access to using the NdisPDOnRssReceiveQueues) are not accounted for in the NdisPDAllocateQueue routine.
It is possible for providers to set this value to 0, if it only supports clients to put pre-existing RSS queues into PD-mode using the NdisPDOnRssReceiveQueues routine.
MaxNumberOfTxQueuesThe maximum number of transmit queues the provider can create using the NdisPDAllocateQueue routine. The provider must not set this value to 0.
MaxNumberOfRxQueuesForDefaultVportThe maximum number of receive queues that the provider supports for the default virtual port.
MaxNumberOfTxQueuesForDefaultVportThe maximum number of transmit queues that the provider supports for the default virtual port.
MaxNumberOfRxQueuesPerNonDefaultVportThe maximum number of receive queues that the provider supports for non-default virtual ports.
MaxNumberOfTxQueuesPerNonDefaultVportThe maximum number of transmit queues that the provider supports for non-default virtual ports.
ExactMatchProfileArrayOffsetThe array offset for an array of NDIS_GFP_EXACT_MATCH_PROFILE structures.
ExactMatchProfileArrayNumElementsThe number of elements for an array of NDIS_GFP_EXACT_MATCH_PROFILE structures.
ExactMatchProfileArrayElementSizeThe number of elements for an array of NDIS_GFP_EXACT_MATCH_PROFILE structures.
WildcardMatchProfileArrayOffsetThe array offset for an array of NDIS_GFP_WILDCARD_MATCH_PROFILE structures.
WildcardMatchProfileArrayNumElementsThe number of elements for an array of NDIS_GFP_WILDCARD_MATCH_PROFILE structures.
WildcardMatchProfileArrayElementSizeThe number of elements for an array of NDIS_GFP_WILDCARD_MATCH_PROFILE structures.
MinimumModerationIntervalMaximumModerationIntervalModerationIntervalGranularityMaxRxQueueSizeMaxTxQueueSizeDmaAddressWidthThe DMA address width that the provider supports. Ideally, providers would support a 64-bit wide DMA address width, and setting this value to 0 indicates that a 64-bit wide DMA address. Providers must support a minimum of 32-bits in width, this means that valid values are either 0 or between 32-64 inclusive.
This structure must be aligned on an 8-byte boundary.
If the provider has a flexible implementation where it supports a maximum number of N queues, where any queue can be purposed flexibly as either an Rx or Tx queue, the provider should advertise ~N/2 for the MaxNumberOfRxQueues and MaxNumberOfTxQueues values because clients typically create a matching number of Rx and Tx queues.
If a provider can partition Rx or Tx queues flexibly between virtual ports then is can use NDIS_PD_QUEUE_COUNT_DYNAMIC for the virtual port specific max counts.