On Wed, 24 Nov 2004, David Brownell wrote: > On Wednesday 24 November 2004 13:25, Alan Stern wrote: > > On Wed, 24 Nov 2004, David Brownell wrote: > > > > > On Tuesday 23 November 2004 14:15, Alan Stern wrote: > > > > It's not a question of using timers or anything else. If wakeup_enabled > > > > isn't set then the HCD _must not_ allow wakeup/resume signalling in any > > > > form. Regardless of whether it is able to. That's the whole point of > > > > the > > > > wakeup_enabled flag, right? > > > > > > I'd describe "wakeup_enabled" as "allow wakeup", rather than > > > "!wakeup_enabled" as "... also treat wakeup as error". > > > > Isn't that the same as what I just said? If wakeup_enabled set means > > "allow wakeup", then what can wakeup_enabled clear mean but "don't allow > > wakeup"? What else could it mean? > > "should" is weaker than "must". There are devices that ignore > the setting of the device's remote wakeup feature flag (or > maybe the default is just set wrong: "on", not "off"). > Likewise "enable" is different from "allow".
Okay, fine. My original point still stands: If wakeup_enabled isn't set then the generic hub autosuspend code won't suspend a hub. A root hub can do whatever the HCD likes under such circumstances, but I still think it should do its best to mimic the behavior of a real hub when the REMOTE_WAKEUP feature is clear. > > Furthermore, things might not be under khubd's control. Suppose the HC > > device's wakeup_enabled is on but the root hub's is off. If the driver > > allowed the root hub to generate wakeup requests anyhow, it could wake > > the entire system up from a global suspend state before khubd has a > > chance to do anything. > > I don't understand how a hub that's "off" could generate any > kind of event at all! Minor point. You misread what I wrote; the hub isn't off, rather its wakeup_enabled flag is off. > > But hubs won't autosuspend, so HCDs will have to do > > something else to reduce power. > > I didn't say "no autosuspend", where did that come from? You didn't say it; I did. I said that when wakeup_enabled is clear, HCDs shouldn't use resume signalling and so should not autosuspend. > > > I've called what OHCI does now "autosuspend", which expects IRQs > > > to work (and tolerates root hub timer polling) ... usbcore has > > > no need to care about that state. > > > > Maybe you should call it something else, > > That's a generic term though; I'd call lots of things > "autosuspend". Calling it something else wouldn't > change the fact that OHCI calls that state "suspended", > without reference to the Linux PM framework, and that > the driver automatically puts the hardware into that > state whenever it makes sense. > > > > if the root hub isn't totally > > suspended. Think of it this way: If root_hub->state == > > USB_STATE_SUSPENDED and the hub driver's hub_suspend routine has been > > called, then it really is suspended. Otherwise it isn't, it's only > > "half-suspended" or something similar. > > It's what the OHCI spec describes as "suspended"; > no "half" about it. > > Would you be happier to talk about different > mechanisms like "controller autosuspend" (what > OHCI does) versus "hub autosuspend" (does those > other things too)? The HCD hub_suspend() method > doesn't change anything except HC registers, so > it's for "controller suspend". Well, if you can dislike the USB spec's use of "global suspend" then I can dislike the OHCI spec's usage. :-) I also dislike using "controller autosuspend" for this; it sounds too much like the HC has been put into a PCI reduced-power state (which if I understand you correctly is _not_ what happens). I don't have good suggestions for better terminology. There are too many distinct but similar concepts: (a) USB device is physically suspended (upstream ports receives no packets, power usage is very low). This notion does not apply to root hubs because they don't receive packets on a regular basis from upstream. (b) Usbcore thinks a device is supended (udev->state == USB_STATE_SUSPENDED and udev->driver->suspend() has been called). Applies to root hubs as well as real devices, and for real devices this implies (a) -- unless usbcore is broken! (c) Root hub is not transmitting packets. It may or may not allow polling of registers and it may or may not have reduced power use; these could be considered sub-divisions of (c). (d) Host controller is in a PCI low-power mode. Only config-space registers are accessible. Analogous notions apply to non-PCI controllers. This implies some form of (c). If you can come up with good names for the (a) - (c) we can refer to (d) as "HC is suspended". Maybe (a) could be a "physical suspend". Obviously these definitions overlap and a device may satisfy more than one of them at a time. Also, I don't know exactly how the OHCI autosuspend state fits into this classification. Alan Stern ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://productguide.itmanagersjournal.com/ _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel