Example #1
0
static void
amdsbwd_event(void *arg, unsigned int cmd, int *error)
{
	struct amdsbwd_softc *sc = arg;
	unsigned int timeout;

	/* convert from power-of-two-ns to WDT ticks */
	cmd &= WD_INTERVAL;
	if (cmd < WD_TO_1SEC)
		cmd = 0;
	if (cmd) {
		timeout = ((uint64_t)1 << (cmd - WD_TO_1MS)) / sc->ms_per_tick;
		if (timeout > sc->max_ticks)
			timeout = sc->max_ticks;
		if (timeout != sc->timeout) {
			amdsbwd_tmr_set(sc, timeout);
			if (!sc->active)
				amdsbwd_tmr_enable(sc);
		}
		amdsbwd_tmr_reload(sc);
		*error = 0;
	} else {
		if (sc->active)
			amdsbwd_tmr_disable(sc);
	}
}
Example #2
0
static int
amdsb_watchdog(void *unused, int period)
{
	unsigned int timeout;
	struct amdsbwd_softc *sc;

	sc = &amdsbwd_sc;
	timeout = (period * 1000) / sc->ms_per_tick;
	if (timeout > sc->max_ticks)
		timeout = sc->max_ticks;
	if (timeout != sc->timeout) {
		amdsbwd_tmr_set(sc, timeout);
		if (!sc->active)
			amdsbwd_tmr_enable(sc);
	}
	amdsbwd_tmr_reload(sc);

	return period;
}