Lines Matching refs:watchdog
152 static struct watchdog_data watchdog = { variable
153 .lock = __MUTEX_INITIALIZER(watchdog.lock),
226 mutex_lock(&watchdog.lock); in watchdog_set_timeout()
228 watchdog.timeout = timeout; in watchdog_set_timeout()
230 watchdog.timer_val = DIV_ROUND_UP(timeout, 60); in watchdog_set_timeout()
231 watchdog.minutes_mode = true; in watchdog_set_timeout()
233 watchdog.timer_val = timeout; in watchdog_set_timeout()
234 watchdog.minutes_mode = false; in watchdog_set_timeout()
237 mutex_unlock(&watchdog.lock); in watchdog_set_timeout()
246 mutex_lock(&watchdog.lock); in watchdog_set_pulse_width()
249 watchdog.pulse_val = 0; in watchdog_set_pulse_width()
251 watchdog.pulse_val = 1; in watchdog_set_pulse_width()
253 watchdog.pulse_val = 2; in watchdog_set_pulse_width()
255 watchdog.pulse_val = 3; in watchdog_set_pulse_width()
262 watchdog.pulse_mode = pw; in watchdog_set_pulse_width()
265 mutex_unlock(&watchdog.lock); in watchdog_set_pulse_width()
273 mutex_lock(&watchdog.lock); in watchdog_keepalive()
274 err = superio_enter(watchdog.sioaddr); in watchdog_keepalive()
277 superio_select(watchdog.sioaddr, SIO_F71808FG_LD_WDT); in watchdog_keepalive()
279 if (watchdog.minutes_mode) in watchdog_keepalive()
281 superio_set_bit(watchdog.sioaddr, F71808FG_REG_WDT_CONF, in watchdog_keepalive()
285 superio_clear_bit(watchdog.sioaddr, F71808FG_REG_WDT_CONF, in watchdog_keepalive()
289 superio_outb(watchdog.sioaddr, F71808FG_REG_WD_TIME, in watchdog_keepalive()
290 watchdog.timer_val); in watchdog_keepalive()
292 superio_exit(watchdog.sioaddr); in watchdog_keepalive()
295 mutex_unlock(&watchdog.lock); in watchdog_keepalive()
327 mutex_lock(&watchdog.lock); in watchdog_start()
328 err = superio_enter(watchdog.sioaddr); in watchdog_start()
331 superio_select(watchdog.sioaddr, SIO_F71808FG_LD_WDT); in watchdog_start()
334 switch (watchdog.type) { in watchdog_start()
337 superio_clear_bit(watchdog.sioaddr, SIO_REG_MFUNCT2, 3); in watchdog_start()
338 superio_clear_bit(watchdog.sioaddr, SIO_REG_MFUNCT3, 3); in watchdog_start()
342 err = f71862fg_pin_configure(watchdog.sioaddr); in watchdog_start()
349 superio_clear_bit(watchdog.sioaddr, SIO_REG_MFUNCT1, 4); in watchdog_start()
354 superio_set_bit(watchdog.sioaddr, SIO_REG_MFUNCT1, 1); in watchdog_start()
359 superio_outb(watchdog.sioaddr, SIO_REG_MFUNCT3, in watchdog_start()
360 superio_inb(watchdog.sioaddr, SIO_REG_MFUNCT3) & 0xcf); in watchdog_start()
372 superio_select(watchdog.sioaddr, SIO_F71808FG_LD_WDT); in watchdog_start()
373 superio_set_bit(watchdog.sioaddr, SIO_REG_ENABLE, 0); in watchdog_start()
374 superio_set_bit(watchdog.sioaddr, F71808FG_REG_WDO_CONF, in watchdog_start()
377 superio_set_bit(watchdog.sioaddr, F71808FG_REG_WDT_CONF, in watchdog_start()
380 if (watchdog.pulse_mode) { in watchdog_start()
382 u8 wdt_conf = superio_inb(watchdog.sioaddr, in watchdog_start()
386 wdt_conf = (wdt_conf & 0xfc) | (watchdog.pulse_val & 0x03); in watchdog_start()
390 superio_outb(watchdog.sioaddr, F71808FG_REG_WDT_CONF, in watchdog_start()
394 superio_clear_bit(watchdog.sioaddr, F71808FG_REG_WDT_CONF, in watchdog_start()
399 superio_exit(watchdog.sioaddr); in watchdog_start()
401 mutex_unlock(&watchdog.lock); in watchdog_start()
410 mutex_lock(&watchdog.lock); in watchdog_stop()
411 err = superio_enter(watchdog.sioaddr); in watchdog_stop()
414 superio_select(watchdog.sioaddr, SIO_F71808FG_LD_WDT); in watchdog_stop()
416 superio_clear_bit(watchdog.sioaddr, F71808FG_REG_WDT_CONF, in watchdog_stop()
419 superio_exit(watchdog.sioaddr); in watchdog_stop()
422 mutex_unlock(&watchdog.lock); in watchdog_stop()
431 mutex_lock(&watchdog.lock); in watchdog_get_status()
432 status = (watchdog.caused_reboot) ? WDIOF_CARDRESET : 0; in watchdog_get_status()
433 mutex_unlock(&watchdog.lock); in watchdog_get_status()
446 mutex_lock(&watchdog.lock); in watchdog_is_running()
447 if (superio_enter(watchdog.sioaddr)) in watchdog_is_running()
449 superio_select(watchdog.sioaddr, SIO_F71808FG_LD_WDT); in watchdog_is_running()
451 is_running = (superio_inb(watchdog.sioaddr, SIO_REG_ENABLE) & BIT(0)) in watchdog_is_running()
452 && (superio_inb(watchdog.sioaddr, F71808FG_REG_WDT_CONF) in watchdog_is_running()
455 superio_exit(watchdog.sioaddr); in watchdog_is_running()
458 mutex_unlock(&watchdog.lock); in watchdog_is_running()
469 if (test_and_set_bit(0, &watchdog.opened)) in watchdog_open()
474 clear_bit(0, &watchdog.opened); in watchdog_open()
481 watchdog.expect_close = 0; in watchdog_open()
487 clear_bit(0, &watchdog.opened); in watchdog_release()
489 if (!watchdog.expect_close) { in watchdog_release()
527 mutex_lock(&watchdog.lock); in watchdog_write()
528 watchdog.expect_close = expect_close; in watchdog_write()
529 mutex_unlock(&watchdog.lock); in watchdog_write()
563 return copy_to_user(uarg.ident, &watchdog.ident, in watchdog_ioctl()
564 sizeof(watchdog.ident)) ? -EFAULT : 0; in watchdog_ioctl()
601 return put_user(watchdog.timeout, uarg.i); in watchdog_ioctl()
643 watchdog.sioaddr = sioaddr; in watchdog_init()
644 watchdog.ident.options = WDIOC_SETTIMEOUT in watchdog_init()
648 snprintf(watchdog.ident.identity, in watchdog_init()
649 sizeof(watchdog.ident.identity), "%s watchdog", in watchdog_init()
650 f71808e_names[watchdog.type]); in watchdog_init()
655 superio_select(watchdog.sioaddr, SIO_F71808FG_LD_WDT); in watchdog_init()
658 watchdog.caused_reboot = wdt_conf & F71808FG_FLAG_WDTMOUT_STS; in watchdog_init()
694 mutex_lock(&watchdog.lock); in watchdog_init()
698 superio_select(watchdog.sioaddr, SIO_F71808FG_LD_WDT); in watchdog_init()
715 mutex_unlock(&watchdog.lock); in watchdog_init()
727 mutex_unlock(&watchdog.lock); in watchdog_init()
753 watchdog.type = f71808fg; in f71808e_find()
756 watchdog.type = f71862fg; in f71808e_find()
761 watchdog.type = f71869; in f71808e_find()
764 watchdog.type = f71882fg; in f71808e_find()
767 watchdog.type = f71889fg; in f71808e_find()
781 f71808e_names[watchdog.type], in f71808e_find()