static void usb_power_wdog(void *arg) { struct usb_bus *bus = arg; USB_BUS_LOCK_ASSERT(bus, MA_OWNED); usb_callout_reset(&bus->power_wdog, 4 * hz, usb_power_wdog, arg); #ifdef DDB /* * The following line of code is only here to recover from * DDB: */ usb_proc_rewakeup(&bus->explore_proc); /* recover from DDB */ #endif #if USB_HAVE_POWERD USB_BUS_UNLOCK(bus); usb_bus_power_update(bus); USB_BUS_LOCK(bus); #endif }
/*------------------------------------------------------------------------* * usb_handle_remote_wakeup * * Returns: * 0: Success * Else: Failure *------------------------------------------------------------------------*/ static usb_error_t usb_handle_remote_wakeup(struct usb_xfer *xfer, uint8_t is_on) { struct usb_device *udev; struct usb_bus *bus; udev = xfer->xroot->udev; bus = udev->bus; USB_BUS_LOCK(bus); if (is_on) { udev->flags.remote_wakeup = 1; } else { udev->flags.remote_wakeup = 0; } USB_BUS_UNLOCK(bus); #if USB_HAVE_POWERD /* In case we are out of sync, update the power state. */ usb_bus_power_update(udev->bus); #endif return (0); /* success */ }