summaryrefslogtreecommitdiff
path: root/network/netadaptercx/netvadapter/drivercode/power.cpp
diff options
context:
space:
mode:
author5an7y-Microsoft <[email protected]>2026-06-19 13:23:44 -0700
committerGitHub <[email protected]>2026-06-19 13:23:44 -0700
commit26741c75857c7df2fd95efe632f8f5f70b71fdbb (patch)
tree58d74336b33f09a11d9427f8eba76f7fa84d9d47 /network/netadaptercx/netvadapter/drivercode/power.cpp
parente99ae832b48b245404f9bd750af4864247b061e8 (diff)
parent8315a48cc6aac0c02d2218b0147457a01de4f885 (diff)
Merge pull request #1394 from youyanggit/WifiihvsampleDataPath
Add End-to-End NetAdapterCx/WiFiCx Sample Drivers and OEM Communication Examples
Diffstat (limited to 'network/netadaptercx/netvadapter/drivercode/power.cpp')
-rw-r--r--network/netadaptercx/netvadapter/drivercode/power.cpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/network/netadaptercx/netvadapter/drivercode/power.cpp b/network/netadaptercx/netvadapter/drivercode/power.cpp
new file mode 100644
index 00000000..68b057ff
--- /dev/null
+++ b/network/netadaptercx/netvadapter/drivercode/power.cpp
@@ -0,0 +1,73 @@
+// Copyright (c) Microsoft Corporation. All rights reserved
+
+#include "pch.hpp"
+#include "netvadapter.h"
+#include "device.h"
+#include "trace.h"
+#include "power.h"
+#include "power.tmh"
+
+void
+NetvDeviceInitializePowerManagement(
+ _In_ NetvDevice * Device
+)
+{
+#ifdef _KERNEL_MODE
+ WDFDEVICE wdfDevice = Device->m_handle;
+ NetvAdapter * adapter = Device->m_adapter;
+
+ if (!adapter->S0Idle)
+ {
+ return;
+ }
+
+ WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS idleSettings;
+ WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(
+ &idleSettings,
+ IdleCanWakeFromS0);
+
+ idleSettings.IdleTimeout = 3000;
+ idleSettings.IdleTimeoutType = SystemManagedIdleTimeoutWithHint;
+
+ NTSTATUS ntStatus = WdfDeviceAssignS0IdleSettings(
+ wdfDevice,
+ &idleSettings);
+
+ if (ntStatus != STATUS_SUCCESS)
+ {
+ // MSDN says we should ignore error codes from assign S0 idle settings, do that
+ return;
+ }
+
+ // Now tell NetAdapterCx we support wake on packet filter match
+ NET_ADAPTER_WAKE_PACKET_FILTER_CAPABILITIES wakeOnPacketFilterMatch;
+ NET_ADAPTER_WAKE_PACKET_FILTER_CAPABILITIES_INIT(&wakeOnPacketFilterMatch);
+ wakeOnPacketFilterMatch.PacketFilterMatch = TRUE;
+
+ NetAdapterWakeSetPacketFilterCapabilities(adapter->m_handle, &wakeOnPacketFilterMatch);
+#else
+ UNREFERENCED_PARAMETER(Device);
+#endif
+}
+
+_Use_decl_annotations_
+NTSTATUS
+EvtDeviceArmWakeFromS0(
+ WDFDEVICE Device
+)
+{
+ auto adapter = NetvDeviceGetContext(Device)->m_adapter;
+ adapter->ArmWakeFromS0();
+
+ return STATUS_SUCCESS;
+}
+
+_Use_decl_annotations_
+void
+EvtDeviceDisarmWakeFromS0(
+ WDFDEVICE Device
+)
+{
+ auto adapter = NetvDeviceGetContext(Device)->m_adapter;
+ adapter->DisarmWakeFromS0();
+}