const struct watchdog_ops *ops;
unsigned int bootstatus;
unsigned int timeout;
+ unsigned int min_timeout;
+ unsigned int max_timeout;
void *driver_data;
unsigned long status;
};
additional information about the watchdog timer itself. (Like it's unique name)
* ops: a pointer to the list of watchdog operations that the watchdog supports.
* timeout: the watchdog timer's timeout value (in seconds).
+* min_timeout: the watchdog timer's minimum timeout value (in seconds).
+* max_timeout: the watchdog timer's maximum timeout value (in seconds).
* bootstatus: status of the device after booting (reported with watchdog
WDIOF_* status bits).
* driver_data: a pointer to the drivers private data of a watchdog device.
if (wdd->ops->start == NULL || wdd->ops->stop == NULL)
return -EINVAL;
+ /*
+ * Check that we have valid min and max timeout values, if
+ * not reset them both to 0 (=not used or unknown)
+ */
+ if (wdd->min_timeout > wdd->max_timeout) {
+ pr_info("Invalid min and max timeout values, resetting to 0!\n");
+ wdd->min_timeout = 0;
+ wdd->max_timeout = 0;
+ }
+
/*
* Note: now that all watchdog_device data has been verified, we
* will not check this anymore in other functions. If data gets
return -EOPNOTSUPP;
if (get_user(val, p))
return -EFAULT;
+ if ((wdd->max_timeout != 0) &&
+ (val < wdd->min_timeout || val > wdd->max_timeout))
+ return -EINVAL;
err = wdd->ops->set_timeout(wdd, val);
if (err < 0)
return err;
* @ops: Pointer to the list of watchdog operations.
* @bootstatus: Status of the watchdog device at boot.
* @timeout: The watchdog devices timeout value.
+ * @min_timeout:The watchdog devices minimum timeout value.
+ * @max_timeout:The watchdog devices maximum timeout value.
* @driver-data:Pointer to the drivers private data.
* @status: Field that contains the devices internal status bits.
*
const struct watchdog_ops *ops;
unsigned int bootstatus;
unsigned int timeout;
+ unsigned int min_timeout;
+ unsigned int max_timeout;
void *driver_data;
unsigned long status;
/* Bit numbers for status flags */