SRIOV_SET_POWER_STATE コールバック関数 (pcivirt.h)
指定した PCI Express SR-IOV 仮想関数 (VF) の電源状態を設定します。
構文
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 の 0 から始まるインデックス。
[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 |