NDIS_STATUS_TIMESTAMP_CAPABILITY

微型端口驱动程序使用 NDIS_STATUS_TIMESTAMP_CAPABILITY 状态指示将 NIC 的硬件时间戳功能和微型端口驱动程序的软件时间戳功能报告给 NDIS 和过度覆盖驱动程序。

此状态指示表示硬件和微型端口驱动程序的时间戳功能,而不是当前启用或禁用的功能。 有关报告当前时间戳配置的详细信息,请参阅 NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG

注解

在初始化期间,微型端口驱动程序应从其 MiniportInitializeEx 函数中指示其硬件和软件时间戳功能。 驱动程序应:

  1. 使用 NIC 的硬件和软件时间戳功能初始化 NDIS_TIMESTAMP_CAPABILITIES 结构。 驱动程序按如下所示设置 NDIS_TIMESTAMP_CAPABILITIES 结构的成员:

    • 驱动程序使用 TimestampFlags 字段来指示硬件和软件时间戳功能。

    注意

    实现必须支持硬件时间戳和跨时间戳。 支持软件时间戳是可选的。

    • 驱动程序必须将 CrossTimestamp 字段设置为 TRUE

    • HardwareClockFrequencyHz 字段应包含 NIC 用于时间戳的硬件时钟的标称工作频率。 此数据可用于向最终用户显示名义时钟频率,以供参考。

    • 标头”字段中的“类型”字段应设置为“NDIS_OBJECT_TYPE_DEFAULT”,“修订”设置为NDIS_TIMESTAMP_CAPABILITIES_REVISION_1

  2. 通过调用 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)

另请参阅

报告时间戳功能和当前配置

NDIS_TIMESTAMP_CAPABILITIES

NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG

MiniportInitializeEx

NdisMIndicateStatusEx

NDIS_STATUS_INDICATION