Пример #1
0
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
}
Пример #2
0
/*------------------------------------------------------------------------*
 *	usb_bus_reset_async_locked
 *------------------------------------------------------------------------*/
void
usb_bus_reset_async_locked(struct usb_bus *bus)
{
	USB_BUS_LOCK_ASSERT(bus, MA_OWNED);

	DPRINTF("\n");

	if (bus->reset_msg[0].hdr.pm_qentry.tqe_prev != NULL ||
	    bus->reset_msg[1].hdr.pm_qentry.tqe_prev != NULL) {
		DPRINTF("Reset already pending\n");
		return;
	}

	device_printf(bus->parent, "Resetting controller\n");

	usb_proc_msignal(USB_BUS_EXPLORE_PROC(bus),
	    &bus->reset_msg[0], &bus->reset_msg[1]);
}