mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 21:44:31 +00:00
[NTOSKRNL] IopGetDeviceProperty: Send an IRP_MN_QUERY_CAPABILITIES request to the device in order to query the power capabilities.
This commit is contained in:
parent
dd11f4c34b
commit
12fdc129cf
|
@ -359,40 +359,61 @@ IopGetDeviceProperty(PPLUGPLAY_CONTROL_PROPERTY_DATA PropertyData)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// DEVICE_CAPABILITIES DeviceCapabilities;
|
DEVICE_CAPABILITIES DeviceCapabilities;
|
||||||
PCM_POWER_DATA PowerData;
|
PCM_POWER_DATA PowerData;
|
||||||
|
IO_STACK_LOCATION Stack;
|
||||||
// Status = IopQueryDeviceCapabilities(DeviceNode, &DeviceCapabilities);
|
IO_STATUS_BLOCK IoStatusBlock;
|
||||||
|
|
||||||
PowerData = (PCM_POWER_DATA)Buffer;
|
PowerData = (PCM_POWER_DATA)Buffer;
|
||||||
|
|
||||||
RtlZeroMemory(PowerData, sizeof(CM_POWER_DATA));
|
RtlZeroMemory(PowerData, sizeof(CM_POWER_DATA));
|
||||||
PowerData->PD_Size = sizeof(CM_POWER_DATA);
|
PowerData->PD_Size = sizeof(CM_POWER_DATA);
|
||||||
// PowerData->PD_MostRecentPowerState;
|
|
||||||
PowerData->PD_Capabilities = PDCAP_D0_SUPPORTED | PDCAP_D3_SUPPORTED;
|
RtlZeroMemory(&DeviceCapabilities, sizeof(DEVICE_CAPABILITIES));
|
||||||
/*
|
DeviceCapabilities.Size = sizeof(DEVICE_CAPABILITIES);
|
||||||
if (DeviceCapabilities.DeviceD1)
|
DeviceCapabilities.Version = 1;
|
||||||
PowerData->PD_Capabilities |= PDCAP_D1_SUPPORTED;
|
DeviceCapabilities.Address = -1;
|
||||||
if (DeviceCapabilities.DeviceD2)
|
DeviceCapabilities.UINumber = -1;
|
||||||
PowerData->PD_Capabilities |= PDCAP_D2_SUPPORTED;
|
|
||||||
if (DeviceCapabilities.WakeFromD0)
|
Stack.Parameters.DeviceCapabilities.Capabilities = &DeviceCapabilities;
|
||||||
PowerData->PD_Capabilities |= PDCAP_WAKE_FROM_D0_SUPPORTED;
|
|
||||||
if (DeviceCapabilities.WakeFromD1)
|
Status = IopInitiatePnpIrp(DeviceObject,
|
||||||
PowerData->PD_Capabilities |= PDCAP_WAKE_FROM_D1_SUPPORTED;
|
&IoStatusBlock,
|
||||||
if (DeviceCapabilities.WakeFromD2)
|
IRP_MN_QUERY_CAPABILITIES,
|
||||||
PowerData->PD_Capabilities |= PDCAP_WAKE_FROM_D2_SUPPORTED;
|
&Stack);
|
||||||
if (DeviceCapabilities.WakeFromD3)
|
if (NT_SUCCESS(Status))
|
||||||
PowerData->PD_Capabilities |= PDCAP_WAKE_FROM_D3_SUPPORTED;
|
{
|
||||||
if (DeviceCapabilities.WarmEjectSupported)
|
DPRINT("Got device capabiliities\n");
|
||||||
PowerData->PD_Capabilities |= PDCAP_WARM_EJECT_SUPPORTED;
|
|
||||||
PowerData->PD_D1Latency = DeviceCapabilities.D1Latency;
|
PowerData->PD_MostRecentPowerState = PowerDeviceD0; // FIXME
|
||||||
PowerData->PD_D2Latency = DeviceCapabilities.D2Latency;
|
if (DeviceCapabilities.DeviceD1)
|
||||||
PowerData->PD_D3Latency = DeviceCapabilities.D3Latency;
|
PowerData->PD_Capabilities |= PDCAP_D1_SUPPORTED;
|
||||||
RtlCopyMemory(&PowerData->PD_PowerStateMapping,
|
if (DeviceCapabilities.DeviceD2)
|
||||||
&DeviceCapabilities.DeviceState,
|
PowerData->PD_Capabilities |= PDCAP_D2_SUPPORTED;
|
||||||
sizeof(DeviceCapabilities.DeviceState));
|
if (DeviceCapabilities.WakeFromD0)
|
||||||
PowerData->PD_DeepestSystemWake = DeviceCapabilities.SystemWake;
|
PowerData->PD_Capabilities |= PDCAP_WAKE_FROM_D0_SUPPORTED;
|
||||||
*/
|
if (DeviceCapabilities.WakeFromD1)
|
||||||
|
PowerData->PD_Capabilities |= PDCAP_WAKE_FROM_D1_SUPPORTED;
|
||||||
|
if (DeviceCapabilities.WakeFromD2)
|
||||||
|
PowerData->PD_Capabilities |= PDCAP_WAKE_FROM_D2_SUPPORTED;
|
||||||
|
if (DeviceCapabilities.WakeFromD3)
|
||||||
|
PowerData->PD_Capabilities |= PDCAP_WAKE_FROM_D3_SUPPORTED;
|
||||||
|
if (DeviceCapabilities.WarmEjectSupported)
|
||||||
|
PowerData->PD_Capabilities |= PDCAP_WARM_EJECT_SUPPORTED;
|
||||||
|
PowerData->PD_D1Latency = DeviceCapabilities.D1Latency;
|
||||||
|
PowerData->PD_D2Latency = DeviceCapabilities.D2Latency;
|
||||||
|
PowerData->PD_D3Latency = DeviceCapabilities.D3Latency;
|
||||||
|
RtlCopyMemory(&PowerData->PD_PowerStateMapping,
|
||||||
|
&DeviceCapabilities.DeviceState,
|
||||||
|
sizeof(DeviceCapabilities.DeviceState));
|
||||||
|
PowerData->PD_DeepestSystemWake = DeviceCapabilities.SystemWake;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DPRINT("IRP_MN_QUERY_CAPABILITIES failed (Status 0x%08lx)\n", Status);
|
||||||
|
|
||||||
|
PowerData->PD_Capabilities = PDCAP_D0_SUPPORTED | PDCAP_D3_SUPPORTED;
|
||||||
|
PowerData->PD_MostRecentPowerState = PowerDeviceD0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (Property == PNP_PROPERTY_REMOVAL_POLICY_OVERRIDE)
|
else if (Property == PNP_PROPERTY_REMOVAL_POLICY_OVERRIDE)
|
||||||
|
|
Loading…
Reference in a new issue