return ioctl(wdt_fd, WDIOC_SETTIMEOUT, &wdt_drv_timeout);
}
+static void watchdog_print_status(void)
+{
+ struct watchdog_info wdt_info;
+ int bootstatus;
+
+ if (wdt_fd < 0)
+ return;
+
+ if (ioctl(wdt_fd, WDIOC_GETSUPPORT, &wdt_info)) {
+ DEBUG(2, "Watchdog GETSUPPORT failed\n");
+ return;
+ }
+
+ if (!(wdt_info.options & WDIOF_CARDRESET)) {
+ DEBUG(2, "Watchdog does not have CARDRESET support\n");
+ return;
+ }
+
+ if (ioctl(wdt_fd, WDIOC_GETBOOTSTATUS, &bootstatus)) {
+ DEBUG(2, "Watchdog GETBOOTSTATUS failed\n");
+ return;
+ }
+
+ if (bootstatus & WDIOF_CARDRESET)
+ LOG("Watchdog has previously reset the system\n");
+ else
+ DEBUG(2, "Watchdog did not previously reset the system\n");
+}
+
void watchdog_set_magicclose(bool val)
{
wdt_magicclose = val;
watchdog_timeout_cb(&wdt_timeout);
DEBUG(4, "Opened watchdog with timeout %ds\n", watchdog_timeout(0));
+
+ watchdog_print_status();
}