pcivirt.h) (SRIOV_SET_POWER_STATE回调函数
(VF) 设置指定的 PCI Express SR-IOV 虚拟函数的电源状态。
语法
SRIOV_SET_POWER_STATE SriovSetPowerState;
NTSTATUS SriovSetPowerState(
[in] PVOID Context,
[in] USHORT VfIndex,
[in] DEVICE_POWER_STATE PowerState,
[in] BOOLEAN Wake
)
{...}
参数
[in] Context
指向驱动程序定义的上下文的指针。
[in] VfIndex
此电源状态集操作应用到的 VF 的从零开始的索引。
[in] PowerState
指示要设置的 Dx 电源状态的DEVICE_POWER_STATE类型值。
[in] Wake
一个布尔值,指示在进入低功耗状态时,是否为唤醒信号 (适用于 PCI Express 设备的 PME 配置设备) 。 TRUE 表示设备已武装;否则为 FALSE。 如果 PowerState 为 PowerDeviceD0,则此值必须为 FALSE。
返回值
如果请求成功,则设置为 STATUS_SUCCESS。 否则,返回相应的 NTSTATUS 代码以指示错误条件。
注解
此回调函数由 PF) 驱动程序 (物理函数实现。 当系统想要更改虚拟函数的电源状态时,将调用回调。
PF 驱动程序通过设置SRIOV_DEVICE_INTERFACE_STANDARD的 SetVfPowerState 成员、配置 WDF_QUERY_INTERFACE_CONFIG 结构以及调用 WdfDeviceAddQueryInterface 来注册其实现。
下面是此回调函数的示例实现。
NTSTATUS
Virtualization_SetPowerState (
__inout PVOID Context,
USHORT VfIndex,
DEVICE_POWER_STATE PowerState,
BOOLEAN Wake
)
{
PDEVICE_CONTEXT deviceContext;
WDF_POWER_DEVICE_STATE wdfPowerState;
NTSTATUS status;
PAGED_CODE();
status = STATUS_SUCCESS;
TraceEvents(TRACE_LEVEL_VERBOSE, DBG_INTERFACE,
"Virtualization_SetPowerState received with \
VFIndex = %d, PowerState = %d, Wake = %d\n",
VfIndex, PowerState, Wake);
deviceContext = (PDEVICE_CONTEXT) Context;
if (VfIndex >= deviceContext->NumVFs)
{
TraceEvents(TRACE_LEVEL_ERROR, DBG_INTERFACE,
"VfIndex specified: %d was out of bounds. NumVFs: %d\n",
VfIndex, deviceContext->NumVFs);
return STATUS_INVALID_PARAMETER;
}
switch (PowerState)
{
case PowerDeviceD0:
wdfPowerState = WdfPowerDeviceD0;
break;
case PowerDeviceD1:
wdfPowerState = WdfPowerDeviceD1;
break;
case PowerDeviceD2:
wdfPowerState = WdfPowerDeviceD2;
break;
case PowerDeviceD3:
wdfPowerState = WdfPowerDeviceD3;
break;
default:
return STATUS_INVALID_PARAMETER;
}
WdfWaitLockAcquire(deviceContext->PowerStateLock, NULL);
deviceContext->VfContext[VfIndex].VfPowerDeviceState = wdfPowerState;
deviceContext->VfContext[VfIndex].VfWake = Wake;
WdfWaitLockRelease(deviceContext->PowerStateLock);
return status;
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 10 |
最低受支持的服务器 | Windows Server 2016 |
目标平台 | Windows |
标头 | pcivirt.h |
IRQL | PASSIVE_LEVEL |