tech-net archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]


On Tue, Mar 09, 2010 at 09:41:16PM +0900, SAITOH Masanobu wrote:
> From: David Young <>
> > How will this interact with pmf(9)?
> static bool
> wm_suspend(device_t self, const pmf_qual_t *qual)
> {
>         struct wm_softc *sc = device_private(self);
>         wm_release_manageability(sc); /*
>                                      * Tell the firmware to take over
>                                      * the manageability from the OS.
>                                      */

Is that the host firmware or the NIC firmware?

>         wm_enable_wakeup(sc);       /*
>                                      * 1) Tell the wakeup capability to the
>                                      * system, 2) set the APM wakeup, 3) set
>                                      * the power management function in the
>                                      * Ethernet controller, it will keep
>                                      * the power of the PHY on, 4) set PME
>                                      * function in PCI spec.
>                                      */

In this step, I think that wm(4) needs to cooperate with PMF:

1 When wm_suspend() is called, PMF has already suspended all of the wm's
  children (PHYs).  PMF needs information that it should not suspend the
  wm's children.  Resetting the PHYs 

2 A driver should probably not enable PME# itself.  Instead, it should
  let pci_child_suspend() enable PME#.

3 PMF needs to enable a PME# input to wake the system.  In a system with
  ACPI BIOS, you call some method on some ACPI node to do that.  (See
  the hw.wake.* sysctl nodes.)  BTW, I have a Dell desktop with two
  nodes for PCI, hw.wake.PCI0 and hw.wake.PCI1.  I think that PME# on my
  wm(4) add-on card is wired to one or the other, but not both.


David Young             OJC Technologies      Urbana, IL * (217) 278-3933

Home | Main Index | Thread Index | Old Index