From: Zhou on
Dear all,

I'm developing a set of WDF-based drivers for a specific bus like USB.
This bus has several levels. Each level node works as "hub", except
the terminal leaf device.

In order to save power, all devices, hubs and terminal leaf devices,
can enter D2 while system is still S0. Only the terminal leaf device
has remote wakeup capability.

When a terminal leaf device sends remote wakeup signal to root, we
need to wake up all hubs between root and the terminal leaf device?

From WDK document, we learned WdfDeviceIndicateWakeStatus is useful.
My question is:
If we call this function directly for the terminal leaf device, does
WDF framework wake up all hubs on the path automatically?
Alternately, does each hub need to call this function to wake up its
child device only, and level by level, until the terminal leaf device.

Thanks.

Zhou
From: Doron Holan [MSFT] on
> If we call this function directly for the terminal leaf device, does
> WDF framework wake up all hubs on the path automatically?

yes and no. by indicating wake, the leaf device's FDO (Assuming it is KMDF)
will then ask for a D0 irp. that D0 irp will go to the PDO. The PDO will
see that the parent is in D2 and the parent will ask for its own D0 irp.
this will continue up the levels in the tree until a PDO is in D0 and then
the D0 irps will complete back up the tree to the leaf node.

> Alternately, does each hub need to call this function to wake up its
> child device only, and level by level, until the terminal leaf device.
you need to indicate wake status at the deepest part of the tree where you
want the subtree to be aware of the wake condition. if only the leaf node
cares, indicate wake there. if you need the root hub to care, indicate
there.

d

--

This posting is provided "AS IS" with no warranties, and confers no rights.


"Zhou" <czzhou(a)gmail.com> wrote in message
news:2ef5438d-aa7c-41a6-83bd-a1f508459c43(a)e19g2000prn.googlegroups.com...
> Dear all,
>
> I'm developing a set of WDF-based drivers for a specific bus like USB.
> This bus has several levels. Each level node works as "hub", except
> the terminal leaf device.
>
> In order to save power, all devices, hubs and terminal leaf devices,
> can enter D2 while system is still S0. Only the terminal leaf device
> has remote wakeup capability.
>
> When a terminal leaf device sends remote wakeup signal to root, we
> need to wake up all hubs between root and the terminal leaf device?
>
> From WDK document, we learned WdfDeviceIndicateWakeStatus is useful.
> My question is:
> If we call this function directly for the terminal leaf device, does
> WDF framework wake up all hubs on the path automatically?
> Alternately, does each hub need to call this function to wake up its
> child device only, and level by level, until the terminal leaf device.
>
> Thanks.
>
> Zhou

From: Zhou on
Dear Doron Holan,

Thank you very much!

Zhou