NDIS_STATUS_TIMESTAMP_CAPABILITY
微型端口驱动程序使用 NDIS_STATUS_TIMESTAMP_CAPABILITY 状态指示将 NIC 的硬件时间戳功能和微型端口驱动程序的软件时间戳功能报告给 NDIS 和过度覆盖驱动程序。
此状态指示表示硬件和微型端口驱动程序的时间戳功能,而不是当前启用或禁用的功能。 有关报告当前时间戳配置的详细信息,请参阅 NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG。
注解
在初始化期间,微型端口驱动程序应从其 MiniportInitializeEx 函数中指示其硬件和软件时间戳功能。 驱动程序应:
使用 NIC 的硬件和软件时间戳功能初始化 NDIS_TIMESTAMP_CAPABILITIES 结构。 驱动程序按如下所示设置 NDIS_TIMESTAMP_CAPABILITIES 结构的成员:
- 驱动程序使用 TimestampFlags 字段来指示硬件和软件时间戳功能。
注意
实现必须支持硬件时间戳和跨时间戳。 支持软件时间戳是可选的。
驱动程序必须将 CrossTimestamp 字段设置为 TRUE。
HardwareClockFrequencyHz 字段应包含 NIC 用于时间戳的硬件时钟的标称工作频率。 此数据可用于向最终用户显示名义时钟频率,以供参考。
“标头”字段中的“类型”字段应设置为“NDIS_OBJECT_TYPE_DEFAULT”,“修订”设置为NDIS_TIMESTAMP_CAPABILITIES_REVISION_1。
通过调用 NdisMIndicateStatusEx 来报告时间戳功能,生成NDIS_STATUS_TIMESTAMP_CAPABILITY状态指示。 NDIS_STATUS_INDICATION 结构的 StatusBuffer 字段应指向已初始化NDIS_TIMESTAMP_CAPABILITIES结构。
微型端口驱动程序还必须在检测到基础硬件功能发生更改时生成 NDIS_STATUS_TIMESTAMP_CAPABILITY 状态指示。
下面是微型端口驱动程序如何指示其支持的时间戳功能:
// From within its initialization routine, the miniport in this
// example indicates that it supports the following capabilities:
// - PtpV2OverUdpIPv4EventMsgReceiveHw
// - PtpV2OverUdpIPv6EventMsgReceiveHw
// - TaggedTransmitHw
// - CrossTimestamp
NDIS_STATUS MiniportInitializeEx(
_In_ NDIS_HANDLE MiniportAdapterHandle,
_In_ NDIS_HANDLE MiniportDriverContext,
_In_ PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters
)
{
. . .
NDIS_TIMESTAMP_CAPABILITIES timeStampCapabilities;
NDIS_STATUS_INDICATION timeStampStatus;
. . .
// Initialize an NDIS_TIMESTAMP_CAPABILITIES structure
RtlZeroMemory(&timeStampCapabilities, sizeof(timeStampCapabilities));
RtlZeroMemory(&timeStampStatus, sizeof(timeStampStatus));
timeStampCapabilities.Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
timeStampCapabilities.Header.Size = sizeof(timeStampCapabilities);
timeStampCapabilities.Header.Revision = NDIS_TIMESTAMP_CAPABILITIES_REVISION_1;
timeStampCapabilities.CrossTimestamp = TRUE;
timeStampCapabilities.TimestampFlags.PtpV2OverUdpIPv4EventMsgReceiveHw = TRUE;
timeStampCapabilities.TimestampFlags.PtpV2OverUdpIPv6EventMsgReceiveHw = TRUE;
timeStampCapabilities.TimestampFlags.TaggedTransmitHw = TRUE;
timeStampCapabilities.HardwareClockFrequencyHz = 150000;
timeStampStatus.Header.Type = NDIS_OBJECT_TYPE_STATUS_INDICATION;
timeStampStatus.Header.Revision = NDIS_STATUS_INDICATION_REVISION_1;
timeStampStatus.Header.Size = NDIS_SIZEOF_STATUS_INDICATION_REVISION_1;
timeStampStatus.SourceHandle = MiniportAdapterHandle;
timeStampStatus.StatusBuffer = &timeStampCapabilities;
timeStampStatus.StatusBufferSize = sizeof(timeStampCapabilities);
timeStampStatus.StatusCode = NDIS_STATUS_TIMESTAMP_CAPABILITY;
// Generate an NDIS_STATUS_TIMESTAMP_CAPABILITY status indication
NdisMIndicateStatusEx(MiniportAdapterHandle, &timeStampStatus);
. . .
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 11 |
最低受支持的服务器 | Windows Server 2022 |
NDIS 版本 | NDIS 6.82 及更高版本 |
标头 | Ntddndis.h (包括 Ndis.h) |