介质断开连接时降低功耗

断开媒体时 (D3 断开连接时) 功能通过断开媒体时将网络适配器置于低功耗状态 (D3) 来节省电源。 重新连接媒体后,网络适配器将恢复为全功率状态 (D0) 。

NDIS 在以下情况下使用 D3 断开连接时功能:

  • 网络适配器硬件必须能够在媒体连接上生成唤醒事件。

  • 微型端口驱动程序必须在 NDIS_PM_CAPABILITIES 结构的 MinLinkChangeWakeUp 成员中报告网络适配器的唤醒事件功能。

  • MinLinkChangeWakeUp 的值必须与IRP_MN_QUERY_CAPABILITIES IRP 报告的 DEVICE_CAPABILITIES 结构的 DeviceWake 成员的值相对应。

  • 微型端口驱动程序必须注册为 NDIS 6.20 驱动程序或更高版本。

  • 网络适配器必须是以太网 PCI 适配器。

  • 唤醒事件功能必须由 *DeviceSleepOnDisconnect 标准 INF 文件关键字 (keyword) 启用。

  • 计算机芯片集必须能够在计算机完全供电时正确传播唤醒事件。 NDIS 通过查询DEVPKEY_PciDevice_S0WakeupSupported PCI 属性来验证这一点。

请注意,断开连接时 D3 仅在计算机完全处于工作状态 (S0) 时可用。 当计算机进入睡眠状态时,将取消此功能,以防止在外部链接状态处于循环状态时唤醒计算机;也就是说,当开关处于关闭和打开状态时。 有关在计算机进入睡眠状态时设置低功耗状态的详细信息,请参阅 LAN 唤醒的低功率

微型端口驱动程序在初始化期间报告 D3 断开连接功能。 有关报告断开连接功能 D3 的详细信息,请参阅 报告电源管理功能

*DeviceSleepOnDisconnect 标准 INF 文件关键字 (keyword) 指定设备在断开连接时是启用或禁用对 D3 的支持。 有关此 INF 关键字 (keyword) 的详细信息,请参阅用于电源管理的标准化 INF 关键字

在初始化期间,在断开连接时支持 D3 的微型端口驱动程序必须报告最低功率级别,其中它可以支持向操作系统通知媒体连接事件的功能。 微型端口驱动程序报告NDIS_PM_CAPABILITIES结构的 MinLinkChangeWakeUp 成员中的功率级别。 例如,微型端口驱动程序可以报告 NdisDeviceStateD3

下图演示了在发生媒体断开连接事件后将网络适配器设置为低功耗状态的事件序列。

说明在媒体断开连接事件后将网络适配器设置为低功耗状态的事件序列的示意图。

当适配器检测到媒体断开连接时,将发生以下顺序:

  1. 网络适配器硬件检测到媒体断开连接事件,并将信息传递给微型端口驱动程序。

  2. 微型端口驱动程序使用 NDIS_STATUS_LINK_STATE 状态指示通知 NDIS 媒体断开连接事件。 NDIS_STATUS_INDICATION 结构的 StatusBuffer 成员包含NDIS_LINK_STATE结构。 MediaConnectStateDisconnected 值在 NDIS_LINK_STATE 结构的 MediaConnectState 成员中设置。

  3. NDIS 使用 OID_PM_PARAMETERS 禁用 LAN 唤醒,并在 WakeUpFlags 成员) 中设置 (NDIS_PM_WAKE_ON_LINK_CHANGE_ENABLED 启用媒体唤醒连接。

  4. NDIS 使用 OID_PNP_SET_POWER OID 通知微型端口驱动程序新的电源状态 (D3) 。

  5. NDIS 向 PCIe 总线发送 IRP_MN_WAIT_WAKE IRP 以等待重新连接事件。

  6. NDIS 使用 IRP_MN_SET_POWER IRP 将 PCIe 总线设置为 D3 状态。

下图演示了在媒体连接事件后为网络适配器恢复全电的事件序列。

图示说明了在媒体连接事件后将全部电源还原到 nic 的事件序列。

重新连接媒体时,将发生以下顺序:

  1. 网络适配器通过在 PCIe 总线上断言 WAKE# 或 PCI 总线上的 PME# 来唤醒系统。

  2. 总线完成挂起 IRP_MN_WAIT_WAKE IRP。 IRP 正在等待断开连接序列中最后一个步骤的完成。

  3. NDIS 使用 IRP_MN_SET_POWER IRP 将总线设置为全功率 (D0 )

  4. NDIS 通知微型端口驱动程序,网络适配器处于全功率 (D0) 状态,OID 集请求 为 OID_PNP_SET_POWER

  5. 网络适配器使用 NDIS_STATUS_LINK_STATE 状态指示通知 NDIS 媒体连接事件。 MediaConnectStateConnected 值在 NDIS_LINK_STATE 结构的 MediaConnectState 成员中设置。

从 NDIS 6.30 开始,如果微型端口驱动程序支持 NDIS_STATUS_PM_WAKE_REASON 状态指示,则必须在网络适配器唤醒系统时发出此状态通知。 驱动程序在处理 OID_PNP_SET_POWER 的 OID 集请求时发出此状态通知,以便转换为全功率 (D0) 状态。

有关详细信息,请参阅 NDIS 唤醒原因状态指示

注意 如果微型端口驱动程序发出 NDIS_STATUS_PM_WAKE_REASON 状态指示,则必须在发出 NDIS_STATUS_LINK_STATE 状态指示之前执行此操作。