|
@@ -249,9 +249,6 @@ static long eurwdt_ioctl(struct file *file,
|
|
int options, retval = -EINVAL;
|
|
int options, retval = -EINVAL;
|
|
|
|
|
|
switch (cmd) {
|
|
switch (cmd) {
|
|
- default:
|
|
|
|
- return -ENOTTY;
|
|
|
|
-
|
|
|
|
case WDIOC_GETSUPPORT:
|
|
case WDIOC_GETSUPPORT:
|
|
return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0;
|
|
return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0;
|
|
|
|
|
|
@@ -259,6 +256,22 @@ static long eurwdt_ioctl(struct file *file,
|
|
case WDIOC_GETBOOTSTATUS:
|
|
case WDIOC_GETBOOTSTATUS:
|
|
return put_user(0, p);
|
|
return put_user(0, p);
|
|
|
|
|
|
|
|
+ case WDIOC_SETOPTIONS:
|
|
|
|
+ if (get_user(options, p))
|
|
|
|
+ return -EFAULT;
|
|
|
|
+ spin_lock(&eurwdt_lock);
|
|
|
|
+ if (options & WDIOS_DISABLECARD) {
|
|
|
|
+ eurwdt_disable_timer();
|
|
|
|
+ retval = 0;
|
|
|
|
+ }
|
|
|
|
+ if (options & WDIOS_ENABLECARD) {
|
|
|
|
+ eurwdt_activate_timer();
|
|
|
|
+ eurwdt_ping();
|
|
|
|
+ retval = 0;
|
|
|
|
+ }
|
|
|
|
+ spin_unlock(&eurwdt_lock);
|
|
|
|
+ return retval;
|
|
|
|
+
|
|
case WDIOC_KEEPALIVE:
|
|
case WDIOC_KEEPALIVE:
|
|
spin_lock(&eurwdt_lock);
|
|
spin_lock(&eurwdt_lock);
|
|
eurwdt_ping();
|
|
eurwdt_ping();
|
|
@@ -282,21 +295,8 @@ static long eurwdt_ioctl(struct file *file,
|
|
case WDIOC_GETTIMEOUT:
|
|
case WDIOC_GETTIMEOUT:
|
|
return put_user(eurwdt_timeout, p);
|
|
return put_user(eurwdt_timeout, p);
|
|
|
|
|
|
- case WDIOC_SETOPTIONS:
|
|
|
|
- if (get_user(options, p))
|
|
|
|
- return -EFAULT;
|
|
|
|
- spin_lock(&eurwdt_lock);
|
|
|
|
- if (options & WDIOS_DISABLECARD) {
|
|
|
|
- eurwdt_disable_timer();
|
|
|
|
- retval = 0;
|
|
|
|
- }
|
|
|
|
- if (options & WDIOS_ENABLECARD) {
|
|
|
|
- eurwdt_activate_timer();
|
|
|
|
- eurwdt_ping();
|
|
|
|
- retval = 0;
|
|
|
|
- }
|
|
|
|
- spin_unlock(&eurwdt_lock);
|
|
|
|
- return retval;
|
|
|
|
|
|
+ default:
|
|
|
|
+ return -ENOTTY;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|