diff options
54 files changed, 428 insertions, 428 deletions
diff --git a/drivers/watchdog/acquirewdt.c b/drivers/watchdog/acquirewdt.c index 340d1eeec16b..7a5c69421f12 100644 --- a/drivers/watchdog/acquirewdt.c +++ b/drivers/watchdog/acquirewdt.c | |||
| @@ -164,13 +164,6 @@ static long acq_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 164 | case WDIOC_GETBOOTSTATUS: | 164 | case WDIOC_GETBOOTSTATUS: |
| 165 | return put_user(0, p); | 165 | return put_user(0, p); |
| 166 | 166 | ||
| 167 | case WDIOC_KEEPALIVE: | ||
| 168 | acq_keepalive(); | ||
| 169 | return 0; | ||
| 170 | |||
| 171 | case WDIOC_GETTIMEOUT: | ||
| 172 | return put_user(WATCHDOG_HEARTBEAT, p); | ||
| 173 | |||
| 174 | case WDIOC_SETOPTIONS: | 167 | case WDIOC_SETOPTIONS: |
| 175 | { | 168 | { |
| 176 | if (get_user(options, p)) | 169 | if (get_user(options, p)) |
| @@ -185,6 +178,13 @@ static long acq_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 185 | } | 178 | } |
| 186 | return retval; | 179 | return retval; |
| 187 | } | 180 | } |
| 181 | case WDIOC_KEEPALIVE: | ||
| 182 | acq_keepalive(); | ||
| 183 | return 0; | ||
| 184 | |||
| 185 | case WDIOC_GETTIMEOUT: | ||
| 186 | return put_user(WATCHDOG_HEARTBEAT, p); | ||
| 187 | |||
| 188 | default: | 188 | default: |
| 189 | return -ENOTTY; | 189 | return -ENOTTY; |
| 190 | } | 190 | } |
diff --git a/drivers/watchdog/advantechwdt.c b/drivers/watchdog/advantechwdt.c index e6bf8d2d3d30..bfec16600475 100644 --- a/drivers/watchdog/advantechwdt.c +++ b/drivers/watchdog/advantechwdt.c | |||
| @@ -152,19 +152,6 @@ static long advwdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 152 | case WDIOC_GETBOOTSTATUS: | 152 | case WDIOC_GETBOOTSTATUS: |
| 153 | return put_user(0, p); | 153 | return put_user(0, p); |
| 154 | 154 | ||
| 155 | case WDIOC_KEEPALIVE: | ||
| 156 | advwdt_ping(); | ||
| 157 | break; | ||
| 158 | |||
| 159 | case WDIOC_SETTIMEOUT: | ||
| 160 | if (get_user(new_timeout, p)) | ||
| 161 | return -EFAULT; | ||
| 162 | if (advwdt_set_heartbeat(new_timeout)) | ||
| 163 | return -EINVAL; | ||
| 164 | advwdt_ping(); | ||
| 165 | /* Fall */ | ||
| 166 | case WDIOC_GETTIMEOUT: | ||
| 167 | return put_user(timeout, p); | ||
| 168 | case WDIOC_SETOPTIONS: | 155 | case WDIOC_SETOPTIONS: |
| 169 | { | 156 | { |
| 170 | int options, retval = -EINVAL; | 157 | int options, retval = -EINVAL; |
| @@ -181,6 +168,19 @@ static long advwdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 181 | } | 168 | } |
| 182 | return retval; | 169 | return retval; |
| 183 | } | 170 | } |
| 171 | case WDIOC_KEEPALIVE: | ||
| 172 | advwdt_ping(); | ||
| 173 | break; | ||
| 174 | |||
| 175 | case WDIOC_SETTIMEOUT: | ||
| 176 | if (get_user(new_timeout, p)) | ||
| 177 | return -EFAULT; | ||
| 178 | if (advwdt_set_heartbeat(new_timeout)) | ||
| 179 | return -EINVAL; | ||
| 180 | advwdt_ping(); | ||
| 181 | /* Fall */ | ||
| 182 | case WDIOC_GETTIMEOUT: | ||
| 183 | return put_user(timeout, p); | ||
| 184 | default: | 184 | default: |
| 185 | return -ENOTTY; | 185 | return -ENOTTY; |
| 186 | } | 186 | } |
diff --git a/drivers/watchdog/alim1535_wdt.c b/drivers/watchdog/alim1535_wdt.c index 80e323ddc4ba..dfa11d19043a 100644 --- a/drivers/watchdog/alim1535_wdt.c +++ b/drivers/watchdog/alim1535_wdt.c | |||
| @@ -195,9 +195,6 @@ static long ali_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 195 | case WDIOC_GETSTATUS: | 195 | case WDIOC_GETSTATUS: |
| 196 | case WDIOC_GETBOOTSTATUS: | 196 | case WDIOC_GETBOOTSTATUS: |
| 197 | return put_user(0, p); | 197 | return put_user(0, p); |
| 198 | case WDIOC_KEEPALIVE: | ||
| 199 | ali_keepalive(); | ||
| 200 | return 0; | ||
| 201 | case WDIOC_SETOPTIONS: | 198 | case WDIOC_SETOPTIONS: |
| 202 | { | 199 | { |
| 203 | int new_options, retval = -EINVAL; | 200 | int new_options, retval = -EINVAL; |
| @@ -214,6 +211,9 @@ static long ali_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 214 | } | 211 | } |
| 215 | return retval; | 212 | return retval; |
| 216 | } | 213 | } |
| 214 | case WDIOC_KEEPALIVE: | ||
| 215 | ali_keepalive(); | ||
| 216 | return 0; | ||
| 217 | case WDIOC_SETTIMEOUT: | 217 | case WDIOC_SETTIMEOUT: |
| 218 | { | 218 | { |
| 219 | int new_timeout; | 219 | int new_timeout; |
diff --git a/drivers/watchdog/alim7101_wdt.c b/drivers/watchdog/alim7101_wdt.c index 726e75d9db7a..049c9122e40d 100644 --- a/drivers/watchdog/alim7101_wdt.c +++ b/drivers/watchdog/alim7101_wdt.c | |||
| @@ -251,9 +251,6 @@ static long fop_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 251 | case WDIOC_GETSTATUS: | 251 | case WDIOC_GETSTATUS: |
| 252 | case WDIOC_GETBOOTSTATUS: | 252 | case WDIOC_GETBOOTSTATUS: |
| 253 | return put_user(0, p); | 253 | return put_user(0, p); |
| 254 | case WDIOC_KEEPALIVE: | ||
| 255 | wdt_keepalive(); | ||
| 256 | return 0; | ||
| 257 | case WDIOC_SETOPTIONS: | 254 | case WDIOC_SETOPTIONS: |
| 258 | { | 255 | { |
| 259 | int new_options, retval = -EINVAL; | 256 | int new_options, retval = -EINVAL; |
| @@ -270,6 +267,9 @@ static long fop_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 270 | } | 267 | } |
| 271 | return retval; | 268 | return retval; |
| 272 | } | 269 | } |
| 270 | case WDIOC_KEEPALIVE: | ||
| 271 | wdt_keepalive(); | ||
| 272 | return 0; | ||
| 273 | case WDIOC_SETTIMEOUT: | 273 | case WDIOC_SETTIMEOUT: |
| 274 | { | 274 | { |
| 275 | int new_timeout; | 275 | int new_timeout; |
diff --git a/drivers/watchdog/ar7_wdt.c b/drivers/watchdog/ar7_wdt.c index ef7b0d67095e..9a81a205ef74 100644 --- a/drivers/watchdog/ar7_wdt.c +++ b/drivers/watchdog/ar7_wdt.c | |||
| @@ -251,8 +251,6 @@ static long ar7_wdt_ioctl(struct file *file, | |||
| 251 | int new_margin; | 251 | int new_margin; |
| 252 | 252 | ||
| 253 | switch (cmd) { | 253 | switch (cmd) { |
| 254 | default: | ||
| 255 | return -ENOTTY; | ||
| 256 | case WDIOC_GETSUPPORT: | 254 | case WDIOC_GETSUPPORT: |
| 257 | if (copy_to_user((struct watchdog_info *)arg, &ident, | 255 | if (copy_to_user((struct watchdog_info *)arg, &ident, |
| 258 | sizeof(ident))) | 256 | sizeof(ident))) |
| @@ -281,6 +279,8 @@ static long ar7_wdt_ioctl(struct file *file, | |||
| 281 | if (put_user(margin, (int *)arg)) | 279 | if (put_user(margin, (int *)arg)) |
| 282 | return -EFAULT; | 280 | return -EFAULT; |
| 283 | return 0; | 281 | return 0; |
| 282 | default: | ||
| 283 | return -ENOTTY; | ||
| 284 | } | 284 | } |
| 285 | } | 285 | } |
| 286 | 286 | ||
diff --git a/drivers/watchdog/at32ap700x_wdt.c b/drivers/watchdog/at32ap700x_wdt.c index c5dc5e912fb2..4538b57f451a 100644 --- a/drivers/watchdog/at32ap700x_wdt.c +++ b/drivers/watchdog/at32ap700x_wdt.c | |||
| @@ -221,27 +221,10 @@ static long at32_wdt_ioctl(struct file *file, | |||
| 221 | int __user *p = argp; | 221 | int __user *p = argp; |
| 222 | 222 | ||
| 223 | switch (cmd) { | 223 | switch (cmd) { |
| 224 | case WDIOC_KEEPALIVE: | ||
| 225 | at32_wdt_pat(); | ||
| 226 | ret = 0; | ||
| 227 | break; | ||
| 228 | case WDIOC_GETSUPPORT: | 224 | case WDIOC_GETSUPPORT: |
| 229 | ret = copy_to_user(argp, &at32_wdt_info, | 225 | ret = copy_to_user(argp, &at32_wdt_info, |
| 230 | sizeof(at32_wdt_info)) ? -EFAULT : 0; | 226 | sizeof(at32_wdt_info)) ? -EFAULT : 0; |
| 231 | break; | 227 | break; |
| 232 | case WDIOC_SETTIMEOUT: | ||
| 233 | ret = get_user(time, p); | ||
| 234 | if (ret) | ||
| 235 | break; | ||
| 236 | ret = at32_wdt_settimeout(time); | ||
| 237 | if (ret) | ||
| 238 | break; | ||
| 239 | /* Enable new time value */ | ||
| 240 | at32_wdt_start(); | ||
| 241 | /* fall through */ | ||
| 242 | case WDIOC_GETTIMEOUT: | ||
| 243 | ret = put_user(wdt->timeout, p); | ||
| 244 | break; | ||
| 245 | case WDIOC_GETSTATUS: | 228 | case WDIOC_GETSTATUS: |
| 246 | ret = put_user(0, p); | 229 | ret = put_user(0, p); |
| 247 | break; | 230 | break; |
| @@ -258,6 +241,23 @@ static long at32_wdt_ioctl(struct file *file, | |||
| 258 | at32_wdt_start(); | 241 | at32_wdt_start(); |
| 259 | ret = 0; | 242 | ret = 0; |
| 260 | break; | 243 | break; |
| 244 | case WDIOC_KEEPALIVE: | ||
| 245 | at32_wdt_pat(); | ||
| 246 | ret = 0; | ||
| 247 | break; | ||
| 248 | case WDIOC_SETTIMEOUT: | ||
| 249 | ret = get_user(time, p); | ||
| 250 | if (ret) | ||
| 251 | break; | ||
| 252 | ret = at32_wdt_settimeout(time); | ||
| 253 | if (ret) | ||
| 254 | break; | ||
| 255 | /* Enable new time value */ | ||
| 256 | at32_wdt_start(); | ||
| 257 | /* fall through */ | ||
| 258 | case WDIOC_GETTIMEOUT: | ||
| 259 | ret = put_user(wdt->timeout, p); | ||
| 260 | break; | ||
| 261 | } | 261 | } |
| 262 | 262 | ||
| 263 | return ret; | 263 | return ret; |
diff --git a/drivers/watchdog/at91rm9200_wdt.c b/drivers/watchdog/at91rm9200_wdt.c index bb79f649dc7e..2313f44144f8 100644 --- a/drivers/watchdog/at91rm9200_wdt.c +++ b/drivers/watchdog/at91rm9200_wdt.c | |||
| @@ -137,23 +137,9 @@ static long at91_wdt_ioct(struct file *file, | |||
| 137 | int new_value; | 137 | int new_value; |
| 138 | 138 | ||
| 139 | switch (cmd) { | 139 | switch (cmd) { |
| 140 | case WDIOC_KEEPALIVE: | ||
| 141 | at91_wdt_reload(); /* pat the watchdog */ | ||
| 142 | return 0; | ||
| 143 | case WDIOC_GETSUPPORT: | 140 | case WDIOC_GETSUPPORT: |
| 144 | return copy_to_user(argp, &at91_wdt_info, | 141 | return copy_to_user(argp, &at91_wdt_info, |
| 145 | sizeof(at91_wdt_info)) ? -EFAULT : 0; | 142 | sizeof(at91_wdt_info)) ? -EFAULT : 0; |
| 146 | case WDIOC_SETTIMEOUT: | ||
| 147 | if (get_user(new_value, p)) | ||
| 148 | return -EFAULT; | ||
| 149 | if (at91_wdt_settimeout(new_value)) | ||
| 150 | return -EINVAL; | ||
| 151 | /* Enable new time value */ | ||
| 152 | at91_wdt_start(); | ||
| 153 | /* Return current value */ | ||
| 154 | return put_user(wdt_time, p); | ||
| 155 | case WDIOC_GETTIMEOUT: | ||
| 156 | return put_user(wdt_time, p); | ||
| 157 | case WDIOC_GETSTATUS: | 143 | case WDIOC_GETSTATUS: |
| 158 | case WDIOC_GETBOOTSTATUS: | 144 | case WDIOC_GETBOOTSTATUS: |
| 159 | return put_user(0, p); | 145 | return put_user(0, p); |
| @@ -165,6 +151,20 @@ static long at91_wdt_ioct(struct file *file, | |||
| 165 | if (new_value & WDIOS_ENABLECARD) | 151 | if (new_value & WDIOS_ENABLECARD) |
| 166 | at91_wdt_start(); | 152 | at91_wdt_start(); |
| 167 | return 0; | 153 | return 0; |
| 154 | case WDIOC_KEEPALIVE: | ||
| 155 | at91_wdt_reload(); /* pat the watchdog */ | ||
| 156 | return 0; | ||
| 157 | case WDIOC_SETTIMEOUT: | ||
| 158 | if (get_user(new_value, p)) | ||
| 159 | return -EFAULT; | ||
| 160 | if (at91_wdt_settimeout(new_value)) | ||
| 161 | return -EINVAL; | ||
| 162 | /* Enable new time value */ | ||
| 163 | at91_wdt_start(); | ||
| 164 | /* Return current value */ | ||
| 165 | return put_user(wdt_time, p); | ||
| 166 | case WDIOC_GETTIMEOUT: | ||
| 167 | return put_user(wdt_time, p); | ||
| 168 | default: | 168 | default: |
| 169 | return -ENOTTY; | 169 | return -ENOTTY; |
| 170 | } | 170 | } |
diff --git a/drivers/watchdog/bfin_wdt.c b/drivers/watchdog/bfin_wdt.c index 8f6e871b3fe3..31b42253054e 100644 --- a/drivers/watchdog/bfin_wdt.c +++ b/drivers/watchdog/bfin_wdt.c | |||
| @@ -265,20 +265,6 @@ static long bfin_wdt_ioctl(struct file *file, | |||
| 265 | case WDIOC_GETSTATUS: | 265 | case WDIOC_GETSTATUS: |
| 266 | case WDIOC_GETBOOTSTATUS: | 266 | case WDIOC_GETBOOTSTATUS: |
| 267 | return put_user(!!(_bfin_swrst & SWRST_RESET_WDOG), p); | 267 | return put_user(!!(_bfin_swrst & SWRST_RESET_WDOG), p); |
| 268 | case WDIOC_KEEPALIVE: | ||
| 269 | bfin_wdt_keepalive(); | ||
| 270 | return 0; | ||
| 271 | case WDIOC_SETTIMEOUT: { | ||
| 272 | int new_timeout; | ||
| 273 | |||
| 274 | if (get_user(new_timeout, p)) | ||
| 275 | return -EFAULT; | ||
| 276 | if (bfin_wdt_set_timeout(new_timeout)) | ||
| 277 | return -EINVAL; | ||
| 278 | } | ||
| 279 | /* Fall */ | ||
| 280 | case WDIOC_GETTIMEOUT: | ||
| 281 | return put_user(timeout, p); | ||
| 282 | case WDIOC_SETOPTIONS: { | 268 | case WDIOC_SETOPTIONS: { |
| 283 | unsigned long flags; | 269 | unsigned long flags; |
| 284 | int options, ret = -EINVAL; | 270 | int options, ret = -EINVAL; |
| @@ -298,6 +284,20 @@ static long bfin_wdt_ioctl(struct file *file, | |||
| 298 | spin_unlock_irqrestore(&bfin_wdt_spinlock, flags); | 284 | spin_unlock_irqrestore(&bfin_wdt_spinlock, flags); |
| 299 | return ret; | 285 | return ret; |
| 300 | } | 286 | } |
| 287 | case WDIOC_KEEPALIVE: | ||
| 288 | bfin_wdt_keepalive(); | ||
| 289 | return 0; | ||
| 290 | case WDIOC_SETTIMEOUT: { | ||
| 291 | int new_timeout; | ||
| 292 | |||
| 293 | if (get_user(new_timeout, p)) | ||
| 294 | return -EFAULT; | ||
| 295 | if (bfin_wdt_set_timeout(new_timeout)) | ||
| 296 | return -EINVAL; | ||
| 297 | } | ||
| 298 | /* Fall */ | ||
| 299 | case WDIOC_GETTIMEOUT: | ||
| 300 | return put_user(timeout, p); | ||
| 301 | default: | 301 | default: |
| 302 | return -ENOTTY; | 302 | return -ENOTTY; |
| 303 | } | 303 | } |
diff --git a/drivers/watchdog/booke_wdt.c b/drivers/watchdog/booke_wdt.c index 06b7a17a60e7..c3b78a76f173 100644 --- a/drivers/watchdog/booke_wdt.c +++ b/drivers/watchdog/booke_wdt.c | |||
| @@ -99,6 +99,15 @@ static long booke_wdt_ioctl(struct file *file, | |||
| 99 | tmp = mfspr(SPRN_TSR) & TSR_WRS(3); | 99 | tmp = mfspr(SPRN_TSR) & TSR_WRS(3); |
| 100 | /* returns 1 if last reset was caused by the WDT */ | 100 | /* returns 1 if last reset was caused by the WDT */ |
| 101 | return (tmp ? 1 : 0); | 101 | return (tmp ? 1 : 0); |
| 102 | case WDIOC_SETOPTIONS: | ||
| 103 | if (get_user(tmp, p)) | ||
| 104 | return -EINVAL; | ||
| 105 | if (tmp == WDIOS_ENABLECARD) { | ||
| 106 | booke_wdt_ping(); | ||
| 107 | break; | ||
| 108 | } else | ||
| 109 | return -EINVAL; | ||
| 110 | return 0; | ||
| 102 | case WDIOC_KEEPALIVE: | 111 | case WDIOC_KEEPALIVE: |
| 103 | booke_wdt_ping(); | 112 | booke_wdt_ping(); |
| 104 | return 0; | 113 | return 0; |
| @@ -110,15 +119,6 @@ static long booke_wdt_ioctl(struct file *file, | |||
| 110 | return 0; | 119 | return 0; |
| 111 | case WDIOC_GETTIMEOUT: | 120 | case WDIOC_GETTIMEOUT: |
| 112 | return put_user(booke_wdt_period, p); | 121 | return put_user(booke_wdt_period, p); |
| 113 | case WDIOC_SETOPTIONS: | ||
| 114 | if (get_user(tmp, p)) | ||
| 115 | return -EINVAL; | ||
| 116 | if (tmp == WDIOS_ENABLECARD) { | ||
| 117 | booke_wdt_ping(); | ||
| 118 | break; | ||
| 119 | } else | ||
| 120 | return -EINVAL; | ||
| 121 | return 0; | ||
| 122 | default: | 122 | default: |
| 123 | return -ENOTTY; | 123 | return -ENOTTY; |
| 124 | } | 124 | } |
diff --git a/drivers/watchdog/cpu5wdt.c b/drivers/watchdog/cpu5wdt.c index ec324e5e1c99..71f6d7eec9a8 100644 --- a/drivers/watchdog/cpu5wdt.c +++ b/drivers/watchdog/cpu5wdt.c | |||
| @@ -160,8 +160,9 @@ static long cpu5wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 160 | }; | 160 | }; |
| 161 | 161 | ||
| 162 | switch (cmd) { | 162 | switch (cmd) { |
| 163 | case WDIOC_KEEPALIVE: | 163 | case WDIOC_GETSUPPORT: |
| 164 | cpu5wdt_reset(); | 164 | if (copy_to_user(argp, &ident, sizeof(ident))) |
| 165 | return -EFAULT; | ||
| 165 | break; | 166 | break; |
| 166 | case WDIOC_GETSTATUS: | 167 | case WDIOC_GETSTATUS: |
| 167 | value = inb(port + CPU5WDT_STATUS_REG); | 168 | value = inb(port + CPU5WDT_STATUS_REG); |
| @@ -169,10 +170,6 @@ static long cpu5wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 169 | return put_user(value, p); | 170 | return put_user(value, p); |
| 170 | case WDIOC_GETBOOTSTATUS: | 171 | case WDIOC_GETBOOTSTATUS: |
| 171 | return put_user(0, p); | 172 | return put_user(0, p); |
| 172 | case WDIOC_GETSUPPORT: | ||
| 173 | if (copy_to_user(argp, &ident, sizeof(ident))) | ||
| 174 | return -EFAULT; | ||
| 175 | break; | ||
| 176 | case WDIOC_SETOPTIONS: | 173 | case WDIOC_SETOPTIONS: |
| 177 | if (get_user(value, p)) | 174 | if (get_user(value, p)) |
| 178 | return -EFAULT; | 175 | return -EFAULT; |
| @@ -181,6 +178,9 @@ static long cpu5wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 181 | if (value & WDIOS_DISABLECARD) | 178 | if (value & WDIOS_DISABLECARD) |
| 182 | cpu5wdt_stop(); | 179 | cpu5wdt_stop(); |
| 183 | break; | 180 | break; |
| 181 | case WDIOC_KEEPALIVE: | ||
| 182 | cpu5wdt_reset(); | ||
| 183 | break; | ||
| 184 | default: | 184 | default: |
| 185 | return -ENOTTY; | 185 | return -ENOTTY; |
| 186 | } | 186 | } |
diff --git a/drivers/watchdog/davinci_wdt.c b/drivers/watchdog/davinci_wdt.c index 926b59c41186..802aeba347a0 100644 --- a/drivers/watchdog/davinci_wdt.c +++ b/drivers/watchdog/davinci_wdt.c | |||
| @@ -159,14 +159,14 @@ static long davinci_wdt_ioctl(struct file *file, | |||
| 159 | ret = put_user(0, (int *)arg); | 159 | ret = put_user(0, (int *)arg); |
| 160 | break; | 160 | break; |
| 161 | 161 | ||
| 162 | case WDIOC_GETTIMEOUT: | ||
| 163 | ret = put_user(heartbeat, (int *)arg); | ||
| 164 | break; | ||
| 165 | |||
| 166 | case WDIOC_KEEPALIVE: | 162 | case WDIOC_KEEPALIVE: |
| 167 | wdt_service(); | 163 | wdt_service(); |
| 168 | ret = 0; | 164 | ret = 0; |
| 169 | break; | 165 | break; |
| 166 | |||
| 167 | case WDIOC_GETTIMEOUT: | ||
| 168 | ret = put_user(heartbeat, (int *)arg); | ||
| 169 | break; | ||
| 170 | } | 170 | } |
| 171 | return ret; | 171 | return ret; |
| 172 | } | 172 | } |
diff --git a/drivers/watchdog/ep93xx_wdt.c b/drivers/watchdog/ep93xx_wdt.c index cdcdd11173a7..07b74a768922 100644 --- a/drivers/watchdog/ep93xx_wdt.c +++ b/drivers/watchdog/ep93xx_wdt.c | |||
| @@ -155,15 +155,15 @@ static long ep93xx_wdt_ioctl(struct file *file, | |||
| 155 | ret = put_user(boot_status, (int __user *)arg); | 155 | ret = put_user(boot_status, (int __user *)arg); |
| 156 | break; | 156 | break; |
| 157 | 157 | ||
| 158 | case WDIOC_GETTIMEOUT: | ||
| 159 | /* actually, it is 0.250 seconds.... */ | ||
| 160 | ret = put_user(1, (int __user *)arg); | ||
| 161 | break; | ||
| 162 | |||
| 163 | case WDIOC_KEEPALIVE: | 158 | case WDIOC_KEEPALIVE: |
| 164 | wdt_keepalive(); | 159 | wdt_keepalive(); |
| 165 | ret = 0; | 160 | ret = 0; |
| 166 | break; | 161 | break; |
| 162 | |||
| 163 | case WDIOC_GETTIMEOUT: | ||
| 164 | /* actually, it is 0.250 seconds.... */ | ||
| 165 | ret = put_user(1, (int __user *)arg); | ||
| 166 | break; | ||
| 167 | } | 167 | } |
| 168 | return ret; | 168 | return ret; |
| 169 | } | 169 | } |
diff --git a/drivers/watchdog/eurotechwdt.c b/drivers/watchdog/eurotechwdt.c index b94e6ef4c7a7..96250118fd7c 100644 --- a/drivers/watchdog/eurotechwdt.c +++ b/drivers/watchdog/eurotechwdt.c | |||
| @@ -249,9 +249,6 @@ static long eurwdt_ioctl(struct file *file, | |||
| 249 | int options, retval = -EINVAL; | 249 | int options, retval = -EINVAL; |
| 250 | 250 | ||
| 251 | switch (cmd) { | 251 | switch (cmd) { |
| 252 | default: | ||
| 253 | return -ENOTTY; | ||
| 254 | |||
| 255 | case WDIOC_GETSUPPORT: | 252 | case WDIOC_GETSUPPORT: |
| 256 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; | 253 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; |
| 257 | 254 | ||
| @@ -259,6 +256,22 @@ static long eurwdt_ioctl(struct file *file, | |||
| 259 | case WDIOC_GETBOOTSTATUS: | 256 | case WDIOC_GETBOOTSTATUS: |
| 260 | return put_user(0, p); | 257 | return put_user(0, p); |
| 261 | 258 | ||
| 259 | case WDIOC_SETOPTIONS: | ||
| 260 | if (get_user(options, p)) | ||
| 261 | return -EFAULT; | ||
| 262 | spin_lock(&eurwdt_lock); | ||
| 263 | if (options & WDIOS_DISABLECARD) { | ||
| 264 | eurwdt_disable_timer(); | ||
| 265 | retval = 0; | ||
| 266 | } | ||
| 267 | if (options & WDIOS_ENABLECARD) { | ||
| 268 | eurwdt_activate_timer(); | ||
| 269 | eurwdt_ping(); | ||
| 270 | retval = 0; | ||
| 271 | } | ||
| 272 | spin_unlock(&eurwdt_lock); | ||
| 273 | return retval; | ||
| 274 | |||
| 262 | case WDIOC_KEEPALIVE: | 275 | case WDIOC_KEEPALIVE: |
| 263 | spin_lock(&eurwdt_lock); | 276 | spin_lock(&eurwdt_lock); |
| 264 | eurwdt_ping(); | 277 | eurwdt_ping(); |
| @@ -282,21 +295,8 @@ static long eurwdt_ioctl(struct file *file, | |||
| 282 | case WDIOC_GETTIMEOUT: | 295 | case WDIOC_GETTIMEOUT: |
| 283 | return put_user(eurwdt_timeout, p); | 296 | return put_user(eurwdt_timeout, p); |
| 284 | 297 | ||
| 285 | case WDIOC_SETOPTIONS: | 298 | default: |
| 286 | if (get_user(options, p)) | 299 | return -ENOTTY; |
| 287 | return -EFAULT; | ||
| 288 | spin_lock(&eurwdt_lock); | ||
| 289 | if (options & WDIOS_DISABLECARD) { | ||
| 290 | eurwdt_disable_timer(); | ||
| 291 | retval = 0; | ||
| 292 | } | ||
| 293 | if (options & WDIOS_ENABLECARD) { | ||
| 294 | eurwdt_activate_timer(); | ||
| 295 | eurwdt_ping(); | ||
| 296 | retval = 0; | ||
| 297 | } | ||
| 298 | spin_unlock(&eurwdt_lock); | ||
| 299 | return retval; | ||
| 300 | } | 300 | } |
| 301 | } | 301 | } |
| 302 | 302 | ||
diff --git a/drivers/watchdog/geodewdt.c b/drivers/watchdog/geodewdt.c index 74c00698801d..04b861cfdf0c 100644 --- a/drivers/watchdog/geodewdt.c +++ b/drivers/watchdog/geodewdt.c | |||
| @@ -159,22 +159,6 @@ geodewdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | |||
| 159 | case WDIOC_GETBOOTSTATUS: | 159 | case WDIOC_GETBOOTSTATUS: |
| 160 | return put_user(0, p); | 160 | return put_user(0, p); |
| 161 | 161 | ||
| 162 | case WDIOC_KEEPALIVE: | ||
| 163 | geodewdt_ping(); | ||
| 164 | return 0; | ||
| 165 | |||
| 166 | case WDIOC_SETTIMEOUT: | ||
| 167 | if (get_user(interval, p)) | ||
| 168 | return -EFAULT; | ||
| 169 | |||
| 170 | if (geodewdt_set_heartbeat(interval)) | ||
| 171 | return -EINVAL; | ||
| 172 | |||
| 173 | /* Fall through */ | ||
| 174 | |||
| 175 | case WDIOC_GETTIMEOUT: | ||
| 176 | return put_user(timeout, p); | ||
| 177 | |||
| 178 | case WDIOC_SETOPTIONS: | 162 | case WDIOC_SETOPTIONS: |
| 179 | { | 163 | { |
| 180 | int options, ret = -EINVAL; | 164 | int options, ret = -EINVAL; |
| @@ -194,6 +178,20 @@ geodewdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | |||
| 194 | 178 | ||
| 195 | return ret; | 179 | return ret; |
| 196 | } | 180 | } |
| 181 | case WDIOC_KEEPALIVE: | ||
| 182 | geodewdt_ping(); | ||
| 183 | return 0; | ||
| 184 | |||
| 185 | case WDIOC_SETTIMEOUT: | ||
| 186 | if (get_user(interval, p)) | ||
| 187 | return -EFAULT; | ||
| 188 | |||
| 189 | if (geodewdt_set_heartbeat(interval)) | ||
| 190 | return -EINVAL; | ||
| 191 | /* Fall through */ | ||
| 192 | case WDIOC_GETTIMEOUT: | ||
| 193 | return put_user(timeout, p); | ||
| 194 | |||
| 197 | default: | 195 | default: |
| 198 | return -ENOTTY; | 196 | return -ENOTTY; |
| 199 | } | 197 | } |
diff --git a/drivers/watchdog/i6300esb.c b/drivers/watchdog/i6300esb.c index 01a283f7a271..c768cb718904 100644 --- a/drivers/watchdog/i6300esb.c +++ b/drivers/watchdog/i6300esb.c | |||
| @@ -280,10 +280,6 @@ static long esb_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 280 | case WDIOC_GETBOOTSTATUS: | 280 | case WDIOC_GETBOOTSTATUS: |
| 281 | return put_user(triggered, p); | 281 | return put_user(triggered, p); |
| 282 | 282 | ||
| 283 | case WDIOC_KEEPALIVE: | ||
| 284 | esb_timer_keepalive(); | ||
| 285 | return 0; | ||
| 286 | |||
| 287 | case WDIOC_SETOPTIONS: | 283 | case WDIOC_SETOPTIONS: |
| 288 | { | 284 | { |
| 289 | if (get_user(new_options, p)) | 285 | if (get_user(new_options, p)) |
| @@ -301,6 +297,10 @@ static long esb_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 301 | } | 297 | } |
| 302 | return retval; | 298 | return retval; |
| 303 | } | 299 | } |
| 300 | case WDIOC_KEEPALIVE: | ||
| 301 | esb_timer_keepalive(); | ||
| 302 | return 0; | ||
| 303 | |||
| 304 | case WDIOC_SETTIMEOUT: | 304 | case WDIOC_SETTIMEOUT: |
| 305 | { | 305 | { |
| 306 | if (get_user(new_heartbeat, p)) | 306 | if (get_user(new_heartbeat, p)) |
diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c index c9ca8f691d81..b18766436638 100644 --- a/drivers/watchdog/iTCO_wdt.c +++ b/drivers/watchdog/iTCO_wdt.c | |||
| @@ -532,10 +532,6 @@ static long iTCO_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 532 | case WDIOC_GETBOOTSTATUS: | 532 | case WDIOC_GETBOOTSTATUS: |
| 533 | return put_user(0, p); | 533 | return put_user(0, p); |
| 534 | 534 | ||
| 535 | case WDIOC_KEEPALIVE: | ||
| 536 | iTCO_wdt_keepalive(); | ||
| 537 | return 0; | ||
| 538 | |||
| 539 | case WDIOC_SETOPTIONS: | 535 | case WDIOC_SETOPTIONS: |
| 540 | { | 536 | { |
| 541 | if (get_user(new_options, p)) | 537 | if (get_user(new_options, p)) |
| @@ -552,6 +548,10 @@ static long iTCO_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 552 | } | 548 | } |
| 553 | return retval; | 549 | return retval; |
| 554 | } | 550 | } |
| 551 | case WDIOC_KEEPALIVE: | ||
| 552 | iTCO_wdt_keepalive(); | ||
| 553 | return 0; | ||
| 554 | |||
| 555 | case WDIOC_SETTIMEOUT: | 555 | case WDIOC_SETTIMEOUT: |
| 556 | { | 556 | { |
| 557 | if (get_user(new_heartbeat, p)) | 557 | if (get_user(new_heartbeat, p)) |
diff --git a/drivers/watchdog/ib700wdt.c b/drivers/watchdog/ib700wdt.c index 9eb9537c370e..6aa914e5caf5 100644 --- a/drivers/watchdog/ib700wdt.c +++ b/drivers/watchdog/ib700wdt.c | |||
| @@ -213,21 +213,6 @@ static long ibwdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 213 | case WDIOC_GETBOOTSTATUS: | 213 | case WDIOC_GETBOOTSTATUS: |
| 214 | return put_user(0, p); | 214 | return put_user(0, p); |
| 215 | 215 | ||
| 216 | case WDIOC_KEEPALIVE: | ||
| 217 | ibwdt_ping(); | ||
| 218 | break; | ||
| 219 | |||
| 220 | case WDIOC_SETTIMEOUT: | ||
| 221 | if (get_user(new_margin, p)) | ||
| 222 | return -EFAULT; | ||
| 223 | if (ibwdt_set_heartbeat(new_margin)) | ||
| 224 | return -EINVAL; | ||
| 225 | ibwdt_ping(); | ||
| 226 | /* Fall */ | ||
| 227 | |||
| 228 | case WDIOC_GETTIMEOUT: | ||
| 229 | return put_user(wd_times[wd_margin], p); | ||
| 230 | |||
| 231 | case WDIOC_SETOPTIONS: | 216 | case WDIOC_SETOPTIONS: |
| 232 | { | 217 | { |
| 233 | int options, retval = -EINVAL; | 218 | int options, retval = -EINVAL; |
| @@ -245,6 +230,21 @@ static long ibwdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 245 | } | 230 | } |
| 246 | return retval; | 231 | return retval; |
| 247 | } | 232 | } |
| 233 | case WDIOC_KEEPALIVE: | ||
| 234 | ibwdt_ping(); | ||
| 235 | break; | ||
| 236 | |||
| 237 | case WDIOC_SETTIMEOUT: | ||
| 238 | if (get_user(new_margin, p)) | ||
| 239 | return -EFAULT; | ||
| 240 | if (ibwdt_set_heartbeat(new_margin)) | ||
| 241 | return -EINVAL; | ||
| 242 | ibwdt_ping(); | ||
| 243 | /* Fall */ | ||
| 244 | |||
| 245 | case WDIOC_GETTIMEOUT: | ||
| 246 | return put_user(wd_times[wd_margin], p); | ||
| 247 | |||
| 248 | default: | 248 | default: |
| 249 | return -ENOTTY; | 249 | return -ENOTTY; |
| 250 | } | 250 | } |
diff --git a/drivers/watchdog/ibmasr.c b/drivers/watchdog/ibmasr.c index 6824bf80b37e..0b549f3ff915 100644 --- a/drivers/watchdog/ibmasr.c +++ b/drivers/watchdog/ibmasr.c | |||
| @@ -287,16 +287,6 @@ static long asr_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 287 | case WDIOC_GETSTATUS: | 287 | case WDIOC_GETSTATUS: |
| 288 | case WDIOC_GETBOOTSTATUS: | 288 | case WDIOC_GETBOOTSTATUS: |
| 289 | return put_user(0, p); | 289 | return put_user(0, p); |
| 290 | case WDIOC_KEEPALIVE: | ||
| 291 | asr_toggle(); | ||
| 292 | return 0; | ||
| 293 | /* | ||
| 294 | * The hardware has a fixed timeout value, so no WDIOC_SETTIMEOUT | ||
| 295 | * and WDIOC_GETTIMEOUT always returns 256. | ||
| 296 | */ | ||
| 297 | case WDIOC_GETTIMEOUT: | ||
| 298 | heartbeat = 256; | ||
| 299 | return put_user(heartbeat, p); | ||
| 300 | case WDIOC_SETOPTIONS: | 290 | case WDIOC_SETOPTIONS: |
| 301 | { | 291 | { |
| 302 | int new_options, retval = -EINVAL; | 292 | int new_options, retval = -EINVAL; |
| @@ -313,6 +303,16 @@ static long asr_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 313 | } | 303 | } |
| 314 | return retval; | 304 | return retval; |
| 315 | } | 305 | } |
| 306 | case WDIOC_KEEPALIVE: | ||
| 307 | asr_toggle(); | ||
| 308 | return 0; | ||
| 309 | /* | ||
| 310 | * The hardware has a fixed timeout value, so no WDIOC_SETTIMEOUT | ||
| 311 | * and WDIOC_GETTIMEOUT always returns 256. | ||
| 312 | */ | ||
| 313 | case WDIOC_GETTIMEOUT: | ||
| 314 | heartbeat = 256; | ||
| 315 | return put_user(heartbeat, p); | ||
| 316 | default: | 316 | default: |
| 317 | return -ENOTTY; | 317 | return -ENOTTY; |
| 318 | } | 318 | } |
diff --git a/drivers/watchdog/indydog.c b/drivers/watchdog/indydog.c index 0bffea37404e..73c9e7992feb 100644 --- a/drivers/watchdog/indydog.c +++ b/drivers/watchdog/indydog.c | |||
| @@ -128,11 +128,6 @@ static long indydog_ioctl(struct file *file, unsigned int cmd, | |||
| 128 | case WDIOC_GETSTATUS: | 128 | case WDIOC_GETSTATUS: |
| 129 | case WDIOC_GETBOOTSTATUS: | 129 | case WDIOC_GETBOOTSTATUS: |
| 130 | return put_user(0, (int *)arg); | 130 | return put_user(0, (int *)arg); |
| 131 | case WDIOC_KEEPALIVE: | ||
| 132 | indydog_ping(); | ||
| 133 | return 0; | ||
| 134 | case WDIOC_GETTIMEOUT: | ||
| 135 | return put_user(WATCHDOG_TIMEOUT, (int *)arg); | ||
| 136 | case WDIOC_SETOPTIONS: | 131 | case WDIOC_SETOPTIONS: |
| 137 | { | 132 | { |
| 138 | if (get_user(options, (int *)arg)) | 133 | if (get_user(options, (int *)arg)) |
| @@ -147,6 +142,11 @@ static long indydog_ioctl(struct file *file, unsigned int cmd, | |||
| 147 | } | 142 | } |
| 148 | return retval; | 143 | return retval; |
| 149 | } | 144 | } |
| 145 | case WDIOC_KEEPALIVE: | ||
| 146 | indydog_ping(); | ||
| 147 | return 0; | ||
| 148 | case WDIOC_GETTIMEOUT: | ||
| 149 | return put_user(WATCHDOG_TIMEOUT, (int *)arg); | ||
| 150 | default: | 150 | default: |
| 151 | return -ENOTTY; | 151 | return -ENOTTY; |
| 152 | } | 152 | } |
diff --git a/drivers/watchdog/iop_wdt.c b/drivers/watchdog/iop_wdt.c index e54c888d2afe..e0d0a90ea10c 100644 --- a/drivers/watchdog/iop_wdt.c +++ b/drivers/watchdog/iop_wdt.c | |||
| @@ -153,15 +153,6 @@ static long iop_wdt_ioctl(struct file *file, | |||
| 153 | ret = put_user(boot_status, argp); | 153 | ret = put_user(boot_status, argp); |
| 154 | break; | 154 | break; |
| 155 | 155 | ||
| 156 | case WDIOC_GETTIMEOUT: | ||
| 157 | ret = put_user(iop_watchdog_timeout(), argp); | ||
| 158 | break; | ||
| 159 | |||
| 160 | case WDIOC_KEEPALIVE: | ||
| 161 | wdt_enable(); | ||
| 162 | ret = 0; | ||
| 163 | break; | ||
| 164 | |||
| 165 | case WDIOC_SETOPTIONS: | 156 | case WDIOC_SETOPTIONS: |
| 166 | if (get_user(options, (int *)arg)) | 157 | if (get_user(options, (int *)arg)) |
| 167 | return -EFAULT; | 158 | return -EFAULT; |
| @@ -181,6 +172,15 @@ static long iop_wdt_ioctl(struct file *file, | |||
| 181 | ret = 0; | 172 | ret = 0; |
| 182 | } | 173 | } |
| 183 | break; | 174 | break; |
| 175 | |||
| 176 | case WDIOC_KEEPALIVE: | ||
| 177 | wdt_enable(); | ||
| 178 | ret = 0; | ||
| 179 | break; | ||
| 180 | |||
| 181 | case WDIOC_GETTIMEOUT: | ||
| 182 | ret = put_user(iop_watchdog_timeout(), argp); | ||
| 183 | break; | ||
| 184 | } | 184 | } |
| 185 | return ret; | 185 | return ret; |
| 186 | } | 186 | } |
diff --git a/drivers/watchdog/it8712f_wdt.c b/drivers/watchdog/it8712f_wdt.c index 51bfd5721833..c1db74f6e310 100644 --- a/drivers/watchdog/it8712f_wdt.c +++ b/drivers/watchdog/it8712f_wdt.c | |||
| @@ -244,8 +244,6 @@ static long it8712f_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 244 | int value; | 244 | int value; |
| 245 | 245 | ||
| 246 | switch (cmd) { | 246 | switch (cmd) { |
| 247 | default: | ||
| 248 | return -ENOTTY; | ||
| 249 | case WDIOC_GETSUPPORT: | 247 | case WDIOC_GETSUPPORT: |
| 250 | if (copy_to_user(argp, &ident, sizeof(ident))) | 248 | if (copy_to_user(argp, &ident, sizeof(ident))) |
| 251 | return -EFAULT; | 249 | return -EFAULT; |
| @@ -284,6 +282,8 @@ static long it8712f_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 284 | if (put_user(margin, p)) | 282 | if (put_user(margin, p)) |
| 285 | return -EFAULT; | 283 | return -EFAULT; |
| 286 | return 0; | 284 | return 0; |
| 285 | default: | ||
| 286 | return -ENOTTY; | ||
| 287 | } | 287 | } |
| 288 | } | 288 | } |
| 289 | 289 | ||
diff --git a/drivers/watchdog/ixp2000_wdt.c b/drivers/watchdog/ixp2000_wdt.c index 943ceffbd683..a77f69d52877 100644 --- a/drivers/watchdog/ixp2000_wdt.c +++ b/drivers/watchdog/ixp2000_wdt.c | |||
| @@ -126,6 +126,11 @@ static long ixp2000_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 126 | ret = put_user(0, (int *)arg); | 126 | ret = put_user(0, (int *)arg); |
| 127 | break; | 127 | break; |
| 128 | 128 | ||
| 129 | case WDIOC_KEEPALIVE: | ||
| 130 | wdt_enable(); | ||
| 131 | ret = 0; | ||
| 132 | break; | ||
| 133 | |||
| 129 | case WDIOC_SETTIMEOUT: | 134 | case WDIOC_SETTIMEOUT: |
| 130 | ret = get_user(time, (int *)arg); | 135 | ret = get_user(time, (int *)arg); |
| 131 | if (ret) | 136 | if (ret) |
| @@ -143,11 +148,6 @@ static long ixp2000_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 143 | case WDIOC_GETTIMEOUT: | 148 | case WDIOC_GETTIMEOUT: |
| 144 | ret = put_user(heartbeat, (int *)arg); | 149 | ret = put_user(heartbeat, (int *)arg); |
| 145 | break; | 150 | break; |
| 146 | |||
| 147 | case WDIOC_KEEPALIVE: | ||
| 148 | wdt_enable(); | ||
| 149 | ret = 0; | ||
| 150 | break; | ||
| 151 | } | 151 | } |
| 152 | 152 | ||
| 153 | return ret; | 153 | return ret; |
diff --git a/drivers/watchdog/ixp4xx_wdt.c b/drivers/watchdog/ixp4xx_wdt.c index 1bafd7b58ca5..b94713e4773d 100644 --- a/drivers/watchdog/ixp4xx_wdt.c +++ b/drivers/watchdog/ixp4xx_wdt.c | |||
| @@ -117,6 +117,11 @@ static long ixp4xx_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 117 | ret = put_user(boot_status, (int *)arg); | 117 | ret = put_user(boot_status, (int *)arg); |
| 118 | break; | 118 | break; |
| 119 | 119 | ||
| 120 | case WDIOC_KEEPALIVE: | ||
| 121 | wdt_enable(); | ||
| 122 | ret = 0; | ||
| 123 | break; | ||
| 124 | |||
| 120 | case WDIOC_SETTIMEOUT: | 125 | case WDIOC_SETTIMEOUT: |
| 121 | ret = get_user(time, (int *)arg); | 126 | ret = get_user(time, (int *)arg); |
| 122 | if (ret) | 127 | if (ret) |
| @@ -134,11 +139,6 @@ static long ixp4xx_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 134 | case WDIOC_GETTIMEOUT: | 139 | case WDIOC_GETTIMEOUT: |
| 135 | ret = put_user(heartbeat, (int *)arg); | 140 | ret = put_user(heartbeat, (int *)arg); |
| 136 | break; | 141 | break; |
| 137 | |||
| 138 | case WDIOC_KEEPALIVE: | ||
| 139 | wdt_enable(); | ||
| 140 | ret = 0; | ||
| 141 | break; | ||
| 142 | } | 142 | } |
| 143 | return ret; | 143 | return ret; |
| 144 | } | 144 | } |
diff --git a/drivers/watchdog/ks8695_wdt.c b/drivers/watchdog/ks8695_wdt.c index 6d052b80aa20..f8566d5c62fe 100644 --- a/drivers/watchdog/ks8695_wdt.c +++ b/drivers/watchdog/ks8695_wdt.c | |||
| @@ -161,23 +161,9 @@ static long ks8695_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 161 | int new_value; | 161 | int new_value; |
| 162 | 162 | ||
| 163 | switch (cmd) { | 163 | switch (cmd) { |
| 164 | case WDIOC_KEEPALIVE: | ||
| 165 | ks8695_wdt_reload(); /* pat the watchdog */ | ||
| 166 | return 0; | ||
| 167 | case WDIOC_GETSUPPORT: | 164 | case WDIOC_GETSUPPORT: |
| 168 | return copy_to_user(argp, &ks8695_wdt_info, | 165 | return copy_to_user(argp, &ks8695_wdt_info, |
| 169 | sizeof(ks8695_wdt_info)) ? -EFAULT : 0; | 166 | sizeof(ks8695_wdt_info)) ? -EFAULT : 0; |
| 170 | case WDIOC_SETTIMEOUT: | ||
| 171 | if (get_user(new_value, p)) | ||
| 172 | return -EFAULT; | ||
| 173 | if (ks8695_wdt_settimeout(new_value)) | ||
| 174 | return -EINVAL; | ||
| 175 | /* Enable new time value */ | ||
| 176 | ks8695_wdt_start(); | ||
| 177 | /* Return current value */ | ||
| 178 | return put_user(wdt_time, p); | ||
| 179 | case WDIOC_GETTIMEOUT: | ||
| 180 | return put_user(wdt_time, p); | ||
| 181 | case WDIOC_GETSTATUS: | 167 | case WDIOC_GETSTATUS: |
| 182 | case WDIOC_GETBOOTSTATUS: | 168 | case WDIOC_GETBOOTSTATUS: |
| 183 | return put_user(0, p); | 169 | return put_user(0, p); |
| @@ -189,6 +175,20 @@ static long ks8695_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 189 | if (new_value & WDIOS_ENABLECARD) | 175 | if (new_value & WDIOS_ENABLECARD) |
| 190 | ks8695_wdt_start(); | 176 | ks8695_wdt_start(); |
| 191 | return 0; | 177 | return 0; |
| 178 | case WDIOC_KEEPALIVE: | ||
| 179 | ks8695_wdt_reload(); /* pat the watchdog */ | ||
| 180 | return 0; | ||
| 181 | case WDIOC_SETTIMEOUT: | ||
| 182 | if (get_user(new_value, p)) | ||
| 183 | return -EFAULT; | ||
| 184 | if (ks8695_wdt_settimeout(new_value)) | ||
| 185 | return -EINVAL; | ||
| 186 | /* Enable new time value */ | ||
| 187 | ks8695_wdt_start(); | ||
| 188 | /* Return current value */ | ||
| 189 | return put_user(wdt_time, p); | ||
| 190 | case WDIOC_GETTIMEOUT: | ||
| 191 | return put_user(wdt_time, p); | ||
| 192 | default: | 192 | default: |
| 193 | return -ENOTTY; | 193 | return -ENOTTY; |
| 194 | } | 194 | } |
diff --git a/drivers/watchdog/mixcomwd.c b/drivers/watchdog/mixcomwd.c index 2248a8187590..407b025cb104 100644 --- a/drivers/watchdog/mixcomwd.c +++ b/drivers/watchdog/mixcomwd.c | |||
| @@ -208,6 +208,10 @@ static long mixcomwd_ioctl(struct file *file, | |||
| 208 | }; | 208 | }; |
| 209 | 209 | ||
| 210 | switch (cmd) { | 210 | switch (cmd) { |
| 211 | case WDIOC_GETSUPPORT: | ||
| 212 | if (copy_to_user(argp, &ident, sizeof(ident))) | ||
| 213 | return -EFAULT; | ||
| 214 | break; | ||
| 211 | case WDIOC_GETSTATUS: | 215 | case WDIOC_GETSTATUS: |
| 212 | status = mixcomwd_opened; | 216 | status = mixcomwd_opened; |
| 213 | if (!nowayout) | 217 | if (!nowayout) |
| @@ -215,10 +219,6 @@ static long mixcomwd_ioctl(struct file *file, | |||
| 215 | return put_user(status, p); | 219 | return put_user(status, p); |
| 216 | case WDIOC_GETBOOTSTATUS: | 220 | case WDIOC_GETBOOTSTATUS: |
| 217 | return put_user(0, p); | 221 | return put_user(0, p); |
| 218 | case WDIOC_GETSUPPORT: | ||
| 219 | if (copy_to_user(argp, &ident, sizeof(ident))) | ||
| 220 | return -EFAULT; | ||
| 221 | break; | ||
| 222 | case WDIOC_KEEPALIVE: | 222 | case WDIOC_KEEPALIVE: |
| 223 | mixcomwd_ping(); | 223 | mixcomwd_ping(); |
| 224 | break; | 224 | break; |
diff --git a/drivers/watchdog/mpcore_wdt.c b/drivers/watchdog/mpcore_wdt.c index 5e58f8b73d00..3c4f95599c65 100644 --- a/drivers/watchdog/mpcore_wdt.c +++ b/drivers/watchdog/mpcore_wdt.c | |||
| @@ -243,6 +243,12 @@ static long mpcore_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 243 | ret = 0; | 243 | ret = 0; |
| 244 | break; | 244 | break; |
| 245 | 245 | ||
| 246 | case WDIOC_GETSTATUS: | ||
| 247 | case WDIOC_GETBOOTSTATUS: | ||
| 248 | uarg.i = 0; | ||
| 249 | ret = 0; | ||
| 250 | break; | ||
| 251 | |||
| 246 | case WDIOC_SETOPTIONS: | 252 | case WDIOC_SETOPTIONS: |
| 247 | ret = -EINVAL; | 253 | ret = -EINVAL; |
| 248 | if (uarg.i & WDIOS_DISABLECARD) { | 254 | if (uarg.i & WDIOS_DISABLECARD) { |
| @@ -255,12 +261,6 @@ static long mpcore_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 255 | } | 261 | } |
| 256 | break; | 262 | break; |
| 257 | 263 | ||
| 258 | case WDIOC_GETSTATUS: | ||
| 259 | case WDIOC_GETBOOTSTATUS: | ||
| 260 | uarg.i = 0; | ||
| 261 | ret = 0; | ||
| 262 | break; | ||
| 263 | |||
| 264 | case WDIOC_KEEPALIVE: | 264 | case WDIOC_KEEPALIVE: |
| 265 | mpcore_wdt_keepalive(wdt); | 265 | mpcore_wdt_keepalive(wdt); |
| 266 | ret = 0; | 266 | ret = 0; |
diff --git a/drivers/watchdog/mtx-1_wdt.c b/drivers/watchdog/mtx-1_wdt.c index e0b8cdfa5e70..f820b82da7c3 100644 --- a/drivers/watchdog/mtx-1_wdt.c +++ b/drivers/watchdog/mtx-1_wdt.c | |||
| @@ -148,17 +148,14 @@ static long mtx1_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 148 | }; | 148 | }; |
| 149 | 149 | ||
| 150 | switch (cmd) { | 150 | switch (cmd) { |
| 151 | case WDIOC_KEEPALIVE: | 151 | case WDIOC_GETSUPPORT: |
| 152 | mtx1_wdt_reset(); | 152 | if (copy_to_user(argp, &ident, sizeof(ident))) |
| 153 | return -EFAULT; | ||
| 153 | break; | 154 | break; |
| 154 | case WDIOC_GETSTATUS: | 155 | case WDIOC_GETSTATUS: |
| 155 | case WDIOC_GETBOOTSTATUS: | 156 | case WDIOC_GETBOOTSTATUS: |
| 156 | put_user(0, p); | 157 | put_user(0, p); |
| 157 | break; | 158 | break; |
| 158 | case WDIOC_GETSUPPORT: | ||
| 159 | if (copy_to_user(argp, &ident, sizeof(ident))) | ||
| 160 | return -EFAULT; | ||
| 161 | break; | ||
| 162 | case WDIOC_SETOPTIONS: | 159 | case WDIOC_SETOPTIONS: |
| 163 | if (get_user(value, p)) | 160 | if (get_user(value, p)) |
| 164 | return -EFAULT; | 161 | return -EFAULT; |
| @@ -169,6 +166,9 @@ static long mtx1_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 169 | else | 166 | else |
| 170 | return -EINVAL; | 167 | return -EINVAL; |
| 171 | return 0; | 168 | return 0; |
| 169 | case WDIOC_KEEPALIVE: | ||
| 170 | mtx1_wdt_reset(); | ||
| 171 | break; | ||
| 172 | default: | 172 | default: |
| 173 | return -ENOTTY; | 173 | return -ENOTTY; |
| 174 | } | 174 | } |
diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c index 5aae071cc045..7beb21ce1de9 100644 --- a/drivers/watchdog/omap_wdt.c +++ b/drivers/watchdog/omap_wdt.c | |||
| @@ -197,8 +197,6 @@ static long omap_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 197 | }; | 197 | }; |
| 198 | 198 | ||
| 199 | switch (cmd) { | 199 | switch (cmd) { |
| 200 | default: | ||
| 201 | return -ENOTTY; | ||
| 202 | case WDIOC_GETSUPPORT: | 200 | case WDIOC_GETSUPPORT: |
| 203 | return copy_to_user((struct watchdog_info __user *)arg, &ident, | 201 | return copy_to_user((struct watchdog_info __user *)arg, &ident, |
| 204 | sizeof(ident)); | 202 | sizeof(ident)); |
| @@ -231,6 +229,8 @@ static long omap_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 231 | /* Fall */ | 229 | /* Fall */ |
| 232 | case WDIOC_GETTIMEOUT: | 230 | case WDIOC_GETTIMEOUT: |
| 233 | return put_user(timer_margin, (int __user *)arg); | 231 | return put_user(timer_margin, (int __user *)arg); |
| 232 | default: | ||
| 233 | return -ENOTTY; | ||
| 234 | } | 234 | } |
| 235 | } | 235 | } |
| 236 | 236 | ||
diff --git a/drivers/watchdog/pc87413_wdt.c b/drivers/watchdog/pc87413_wdt.c index 326f2d2ded3b..5fc7f1349950 100644 --- a/drivers/watchdog/pc87413_wdt.c +++ b/drivers/watchdog/pc87413_wdt.c | |||
| @@ -426,6 +426,21 @@ static long pc87413_ioctl(struct file *file, unsigned int cmd, | |||
| 426 | return put_user(pc87413_status(), uarg.i); | 426 | return put_user(pc87413_status(), uarg.i); |
| 427 | case WDIOC_GETBOOTSTATUS: | 427 | case WDIOC_GETBOOTSTATUS: |
| 428 | return put_user(0, uarg.i); | 428 | return put_user(0, uarg.i); |
| 429 | case WDIOC_SETOPTIONS: | ||
| 430 | { | ||
| 431 | int options, retval = -EINVAL; | ||
| 432 | if (get_user(options, uarg.i)) | ||
| 433 | return -EFAULT; | ||
| 434 | if (options & WDIOS_DISABLECARD) { | ||
| 435 | pc87413_disable(); | ||
| 436 | retval = 0; | ||
| 437 | } | ||
| 438 | if (options & WDIOS_ENABLECARD) { | ||
| 439 | pc87413_enable(); | ||
| 440 | retval = 0; | ||
| 441 | } | ||
| 442 | return retval; | ||
| 443 | } | ||
| 429 | case WDIOC_KEEPALIVE: | 444 | case WDIOC_KEEPALIVE: |
| 430 | pc87413_refresh(); | 445 | pc87413_refresh(); |
| 431 | #ifdef DEBUG | 446 | #ifdef DEBUG |
| @@ -445,21 +460,6 @@ static long pc87413_ioctl(struct file *file, unsigned int cmd, | |||
| 445 | case WDIOC_GETTIMEOUT: | 460 | case WDIOC_GETTIMEOUT: |
| 446 | new_timeout = timeout * 60; | 461 | new_timeout = timeout * 60; |
| 447 | return put_user(new_timeout, uarg.i); | 462 | return put_user(new_timeout, uarg.i); |
| 448 | case WDIOC_SETOPTIONS: | ||
| 449 | { | ||
| 450 | int options, retval = -EINVAL; | ||
| 451 | if (get_user(options, uarg.i)) | ||
| 452 | return -EFAULT; | ||
| 453 | if (options & WDIOS_DISABLECARD) { | ||
| 454 | pc87413_disable(); | ||
| 455 | retval = 0; | ||
| 456 | } | ||
| 457 | if (options & WDIOS_ENABLECARD) { | ||
| 458 | pc87413_enable(); | ||
| 459 | retval = 0; | ||
| 460 | } | ||
| 461 | return retval; | ||
| 462 | } | ||
| 463 | default: | 463 | default: |
| 464 | return -ENOTTY; | 464 | return -ENOTTY; |
| 465 | } | 465 | } |
diff --git a/drivers/watchdog/pcwd.c b/drivers/watchdog/pcwd.c index e1259adf09f9..134386a88852 100644 --- a/drivers/watchdog/pcwd.c +++ b/drivers/watchdog/pcwd.c | |||
| @@ -612,9 +612,6 @@ static long pcwd_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 612 | }; | 612 | }; |
| 613 | 613 | ||
| 614 | switch (cmd) { | 614 | switch (cmd) { |
| 615 | default: | ||
| 616 | return -ENOTTY; | ||
| 617 | |||
| 618 | case WDIOC_GETSUPPORT: | 615 | case WDIOC_GETSUPPORT: |
| 619 | if (copy_to_user(argp, &ident, sizeof(ident))) | 616 | if (copy_to_user(argp, &ident, sizeof(ident))) |
| 620 | return -EFAULT; | 617 | return -EFAULT; |
| @@ -669,6 +666,9 @@ static long pcwd_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 669 | 666 | ||
| 670 | case WDIOC_GETTIMEOUT: | 667 | case WDIOC_GETTIMEOUT: |
| 671 | return put_user(heartbeat, argp); | 668 | return put_user(heartbeat, argp); |
| 669 | |||
| 670 | default: | ||
| 671 | return -ENOTTY; | ||
| 672 | } | 672 | } |
| 673 | 673 | ||
| 674 | return 0; | 674 | return 0; |
diff --git a/drivers/watchdog/pcwd_pci.c b/drivers/watchdog/pcwd_pci.c index 7f500ee4ee8a..2617129a7ccc 100644 --- a/drivers/watchdog/pcwd_pci.c +++ b/drivers/watchdog/pcwd_pci.c | |||
| @@ -494,10 +494,6 @@ static long pcipcwd_ioctl(struct file *file, unsigned int cmd, | |||
| 494 | return put_user(temperature, p); | 494 | return put_user(temperature, p); |
| 495 | } | 495 | } |
| 496 | 496 | ||
| 497 | case WDIOC_KEEPALIVE: | ||
| 498 | pcipcwd_keepalive(); | ||
| 499 | return 0; | ||
| 500 | |||
| 501 | case WDIOC_SETOPTIONS: | 497 | case WDIOC_SETOPTIONS: |
| 502 | { | 498 | { |
| 503 | int new_options, retval = -EINVAL; | 499 | int new_options, retval = -EINVAL; |
| @@ -525,6 +521,10 @@ static long pcipcwd_ioctl(struct file *file, unsigned int cmd, | |||
| 525 | return retval; | 521 | return retval; |
| 526 | } | 522 | } |
| 527 | 523 | ||
| 524 | case WDIOC_KEEPALIVE: | ||
| 525 | pcipcwd_keepalive(); | ||
| 526 | return 0; | ||
| 527 | |||
| 528 | case WDIOC_SETTIMEOUT: | 528 | case WDIOC_SETTIMEOUT: |
| 529 | { | 529 | { |
| 530 | int new_heartbeat; | 530 | int new_heartbeat; |
diff --git a/drivers/watchdog/pcwd_usb.c b/drivers/watchdog/pcwd_usb.c index 8194435052c8..8c582bc0588e 100644 --- a/drivers/watchdog/pcwd_usb.c +++ b/drivers/watchdog/pcwd_usb.c | |||
| @@ -400,10 +400,6 @@ static long usb_pcwd_ioctl(struct file *file, unsigned int cmd, | |||
| 400 | return put_user(temperature, p); | 400 | return put_user(temperature, p); |
| 401 | } | 401 | } |
| 402 | 402 | ||
| 403 | case WDIOC_KEEPALIVE: | ||
| 404 | usb_pcwd_keepalive(usb_pcwd_device); | ||
| 405 | return 0; | ||
| 406 | |||
| 407 | case WDIOC_SETOPTIONS: | 403 | case WDIOC_SETOPTIONS: |
| 408 | { | 404 | { |
| 409 | int new_options, retval = -EINVAL; | 405 | int new_options, retval = -EINVAL; |
| @@ -424,6 +420,10 @@ static long usb_pcwd_ioctl(struct file *file, unsigned int cmd, | |||
| 424 | return retval; | 420 | return retval; |
| 425 | } | 421 | } |
| 426 | 422 | ||
| 423 | case WDIOC_KEEPALIVE: | ||
| 424 | usb_pcwd_keepalive(usb_pcwd_device); | ||
| 425 | return 0; | ||
| 426 | |||
| 427 | case WDIOC_SETTIMEOUT: | 427 | case WDIOC_SETTIMEOUT: |
| 428 | { | 428 | { |
| 429 | int new_heartbeat; | 429 | int new_heartbeat; |
diff --git a/drivers/watchdog/pnx4008_wdt.c b/drivers/watchdog/pnx4008_wdt.c index 56dee3bfd4aa..6eadf5ebb9b3 100644 --- a/drivers/watchdog/pnx4008_wdt.c +++ b/drivers/watchdog/pnx4008_wdt.c | |||
| @@ -194,6 +194,11 @@ static long pnx4008_wdt_ioctl(struct inode *inode, struct file *file, | |||
| 194 | ret = put_user(boot_status, (int *)arg); | 194 | ret = put_user(boot_status, (int *)arg); |
| 195 | break; | 195 | break; |
| 196 | 196 | ||
| 197 | case WDIOC_KEEPALIVE: | ||
| 198 | wdt_enable(); | ||
| 199 | ret = 0; | ||
| 200 | break; | ||
| 201 | |||
| 197 | case WDIOC_SETTIMEOUT: | 202 | case WDIOC_SETTIMEOUT: |
| 198 | ret = get_user(time, (int *)arg); | 203 | ret = get_user(time, (int *)arg); |
| 199 | if (ret) | 204 | if (ret) |
| @@ -211,11 +216,6 @@ static long pnx4008_wdt_ioctl(struct inode *inode, struct file *file, | |||
| 211 | case WDIOC_GETTIMEOUT: | 216 | case WDIOC_GETTIMEOUT: |
| 212 | ret = put_user(heartbeat, (int *)arg); | 217 | ret = put_user(heartbeat, (int *)arg); |
| 213 | break; | 218 | break; |
| 214 | |||
| 215 | case WDIOC_KEEPALIVE: | ||
| 216 | wdt_enable(); | ||
| 217 | ret = 0; | ||
| 218 | break; | ||
| 219 | } | 219 | } |
| 220 | return ret; | 220 | return ret; |
| 221 | } | 221 | } |
diff --git a/drivers/watchdog/s3c2410_wdt.c b/drivers/watchdog/s3c2410_wdt.c index 97b4a2e8eb09..44bf5e4282e1 100644 --- a/drivers/watchdog/s3c2410_wdt.c +++ b/drivers/watchdog/s3c2410_wdt.c | |||
| @@ -305,8 +305,6 @@ static long s3c2410wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 305 | int new_margin; | 305 | int new_margin; |
| 306 | 306 | ||
| 307 | switch (cmd) { | 307 | switch (cmd) { |
| 308 | default: | ||
| 309 | return -ENOTTY; | ||
| 310 | case WDIOC_GETSUPPORT: | 308 | case WDIOC_GETSUPPORT: |
| 311 | return copy_to_user(argp, &s3c2410_wdt_ident, | 309 | return copy_to_user(argp, &s3c2410_wdt_ident, |
| 312 | sizeof(s3c2410_wdt_ident)) ? -EFAULT : 0; | 310 | sizeof(s3c2410_wdt_ident)) ? -EFAULT : 0; |
| @@ -325,6 +323,8 @@ static long s3c2410wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 325 | return put_user(tmr_margin, p); | 323 | return put_user(tmr_margin, p); |
| 326 | case WDIOC_GETTIMEOUT: | 324 | case WDIOC_GETTIMEOUT: |
| 327 | return put_user(tmr_margin, p); | 325 | return put_user(tmr_margin, p); |
| 326 | default: | ||
| 327 | return -ENOTTY; | ||
| 328 | } | 328 | } |
| 329 | } | 329 | } |
| 330 | 330 | ||
diff --git a/drivers/watchdog/sa1100_wdt.c b/drivers/watchdog/sa1100_wdt.c index 869d538c02f9..27d6898a7c98 100644 --- a/drivers/watchdog/sa1100_wdt.c +++ b/drivers/watchdog/sa1100_wdt.c | |||
| @@ -107,6 +107,11 @@ static long sa1100dog_ioctl(struct file *file, unsigned int cmd, | |||
| 107 | ret = put_user(boot_status, p); | 107 | ret = put_user(boot_status, p); |
| 108 | break; | 108 | break; |
| 109 | 109 | ||
| 110 | case WDIOC_KEEPALIVE: | ||
| 111 | OSMR3 = OSCR + pre_margin; | ||
| 112 | ret = 0; | ||
| 113 | break; | ||
| 114 | |||
| 110 | case WDIOC_SETTIMEOUT: | 115 | case WDIOC_SETTIMEOUT: |
| 111 | ret = get_user(time, p); | 116 | ret = get_user(time, p); |
| 112 | if (ret) | 117 | if (ret) |
| @@ -124,11 +129,6 @@ static long sa1100dog_ioctl(struct file *file, unsigned int cmd, | |||
| 124 | case WDIOC_GETTIMEOUT: | 129 | case WDIOC_GETTIMEOUT: |
| 125 | ret = put_user(pre_margin / OSCR_FREQ, p); | 130 | ret = put_user(pre_margin / OSCR_FREQ, p); |
| 126 | break; | 131 | break; |
| 127 | |||
| 128 | case WDIOC_KEEPALIVE: | ||
| 129 | OSMR3 = OSCR + pre_margin; | ||
| 130 | ret = 0; | ||
| 131 | break; | ||
| 132 | } | 132 | } |
| 133 | return ret; | 133 | return ret; |
| 134 | } | 134 | } |
diff --git a/drivers/watchdog/sb_wdog.c b/drivers/watchdog/sb_wdog.c index c8b544ce77fb..528097651f7f 100644 --- a/drivers/watchdog/sb_wdog.c +++ b/drivers/watchdog/sb_wdog.c | |||
| @@ -182,6 +182,11 @@ static long sbwdog_ioctl(struct file *file, unsigned int cmd, | |||
| 182 | ret = put_user(0, p); | 182 | ret = put_user(0, p); |
| 183 | break; | 183 | break; |
| 184 | 184 | ||
| 185 | case WDIOC_KEEPALIVE: | ||
| 186 | sbwdog_pet(user_dog); | ||
| 187 | ret = 0; | ||
| 188 | break; | ||
| 189 | |||
| 185 | case WDIOC_SETTIMEOUT: | 190 | case WDIOC_SETTIMEOUT: |
| 186 | ret = get_user(time, p); | 191 | ret = get_user(time, p); |
| 187 | if (ret) | 192 | if (ret) |
| @@ -203,11 +208,6 @@ static long sbwdog_ioctl(struct file *file, unsigned int cmd, | |||
| 203 | */ | 208 | */ |
| 204 | ret = put_user(__raw_readq(user_dog - 8) / 1000000, p); | 209 | ret = put_user(__raw_readq(user_dog - 8) / 1000000, p); |
| 205 | break; | 210 | break; |
| 206 | |||
| 207 | case WDIOC_KEEPALIVE: | ||
| 208 | sbwdog_pet(user_dog); | ||
| 209 | ret = 0; | ||
| 210 | break; | ||
| 211 | } | 211 | } |
| 212 | return ret; | 212 | return ret; |
| 213 | } | 213 | } |
diff --git a/drivers/watchdog/sbc60xxwdt.c b/drivers/watchdog/sbc60xxwdt.c index e284a5d4fb1b..e801cd46c647 100644 --- a/drivers/watchdog/sbc60xxwdt.c +++ b/drivers/watchdog/sbc60xxwdt.c | |||
| @@ -237,16 +237,11 @@ static long fop_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 237 | }; | 237 | }; |
| 238 | 238 | ||
| 239 | switch (cmd) { | 239 | switch (cmd) { |
| 240 | default: | ||
| 241 | return -ENOTTY; | ||
| 242 | case WDIOC_GETSUPPORT: | 240 | case WDIOC_GETSUPPORT: |
| 243 | return copy_to_user(argp, &ident, sizeof(ident))? -EFAULT : 0; | 241 | return copy_to_user(argp, &ident, sizeof(ident))? -EFAULT : 0; |
| 244 | case WDIOC_GETSTATUS: | 242 | case WDIOC_GETSTATUS: |
| 245 | case WDIOC_GETBOOTSTATUS: | 243 | case WDIOC_GETBOOTSTATUS: |
| 246 | return put_user(0, p); | 244 | return put_user(0, p); |
| 247 | case WDIOC_KEEPALIVE: | ||
| 248 | wdt_keepalive(); | ||
| 249 | return 0; | ||
| 250 | case WDIOC_SETOPTIONS: | 245 | case WDIOC_SETOPTIONS: |
| 251 | { | 246 | { |
| 252 | int new_options, retval = -EINVAL; | 247 | int new_options, retval = -EINVAL; |
| @@ -262,6 +257,9 @@ static long fop_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 262 | } | 257 | } |
| 263 | return retval; | 258 | return retval; |
| 264 | } | 259 | } |
| 260 | case WDIOC_KEEPALIVE: | ||
| 261 | wdt_keepalive(); | ||
| 262 | return 0; | ||
| 265 | case WDIOC_SETTIMEOUT: | 263 | case WDIOC_SETTIMEOUT: |
| 266 | { | 264 | { |
| 267 | int new_timeout; | 265 | int new_timeout; |
| @@ -277,6 +275,8 @@ static long fop_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 277 | } | 275 | } |
| 278 | case WDIOC_GETTIMEOUT: | 276 | case WDIOC_GETTIMEOUT: |
| 279 | return put_user(timeout, p); | 277 | return put_user(timeout, p); |
| 278 | default: | ||
| 279 | return -ENOTTY; | ||
| 280 | } | 280 | } |
| 281 | } | 281 | } |
| 282 | 282 | ||
diff --git a/drivers/watchdog/sbc7240_wdt.c b/drivers/watchdog/sbc7240_wdt.c index abccbe265249..67ddeb1c830a 100644 --- a/drivers/watchdog/sbc7240_wdt.c +++ b/drivers/watchdog/sbc7240_wdt.c | |||
| @@ -177,39 +177,41 @@ static long fop_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 177 | case WDIOC_GETSTATUS: | 177 | case WDIOC_GETSTATUS: |
| 178 | case WDIOC_GETBOOTSTATUS: | 178 | case WDIOC_GETBOOTSTATUS: |
| 179 | return put_user(0, (int __user *)arg); | 179 | return put_user(0, (int __user *)arg); |
| 180 | case WDIOC_KEEPALIVE: | 180 | case WDIOC_SETOPTIONS: |
| 181 | wdt_keepalive(); | 181 | { |
| 182 | return 0; | 182 | int options; |
| 183 | case WDIOC_SETOPTIONS:{ | 183 | int retval = -EINVAL; |
| 184 | int options; | ||
| 185 | int retval = -EINVAL; | ||
| 186 | 184 | ||
| 187 | if (get_user(options, (int __user *)arg)) | 185 | if (get_user(options, (int __user *)arg)) |
| 188 | return -EFAULT; | 186 | return -EFAULT; |
| 189 | 187 | ||
| 190 | if (options & WDIOS_DISABLECARD) { | 188 | if (options & WDIOS_DISABLECARD) { |
| 191 | wdt_disable(); | 189 | wdt_disable(); |
| 192 | retval = 0; | 190 | retval = 0; |
| 193 | } | 191 | } |
| 194 | |||
| 195 | if (options & WDIOS_ENABLECARD) { | ||
| 196 | wdt_enable(); | ||
| 197 | retval = 0; | ||
| 198 | } | ||
| 199 | 192 | ||
| 200 | return retval; | 193 | if (options & WDIOS_ENABLECARD) { |
| 194 | wdt_enable(); | ||
| 195 | retval = 0; | ||
| 201 | } | 196 | } |
| 202 | case WDIOC_SETTIMEOUT:{ | ||
| 203 | int new_timeout; | ||
| 204 | 197 | ||
| 205 | if (get_user(new_timeout, (int __user *)arg)) | 198 | return retval; |
| 206 | return -EFAULT; | 199 | } |
| 200 | case WDIOC_KEEPALIVE: | ||
| 201 | wdt_keepalive(); | ||
| 202 | return 0; | ||
| 203 | case WDIOC_SETTIMEOUT: | ||
| 204 | { | ||
| 205 | int new_timeout; | ||
| 207 | 206 | ||
| 208 | if (wdt_set_timeout(new_timeout)) | 207 | if (get_user(new_timeout, (int __user *)arg)) |
| 209 | return -EINVAL; | 208 | return -EFAULT; |
| 210 | 209 | ||
| 211 | /* Fall through */ | 210 | if (wdt_set_timeout(new_timeout)) |
| 212 | } | 211 | return -EINVAL; |
| 212 | |||
| 213 | /* Fall through */ | ||
| 214 | } | ||
| 213 | case WDIOC_GETTIMEOUT: | 215 | case WDIOC_GETTIMEOUT: |
| 214 | return put_user(timeout, (int __user *)arg); | 216 | return put_user(timeout, (int __user *)arg); |
| 215 | default: | 217 | default: |
diff --git a/drivers/watchdog/sbc_epx_c3.c b/drivers/watchdog/sbc_epx_c3.c index 70ff9cbc8e9b..e5e470ca7759 100644 --- a/drivers/watchdog/sbc_epx_c3.c +++ b/drivers/watchdog/sbc_epx_c3.c | |||
| @@ -120,11 +120,6 @@ static long epx_c3_ioctl(struct file *file, unsigned int cmd, | |||
| 120 | case WDIOC_GETSTATUS: | 120 | case WDIOC_GETSTATUS: |
| 121 | case WDIOC_GETBOOTSTATUS: | 121 | case WDIOC_GETBOOTSTATUS: |
| 122 | return put_user(0, argp); | 122 | return put_user(0, argp); |
| 123 | case WDIOC_KEEPALIVE: | ||
| 124 | epx_c3_pet(); | ||
| 125 | return 0; | ||
| 126 | case WDIOC_GETTIMEOUT: | ||
| 127 | return put_user(WATCHDOG_TIMEOUT, argp); | ||
| 128 | case WDIOC_SETOPTIONS: | 123 | case WDIOC_SETOPTIONS: |
| 129 | if (get_user(options, argp)) | 124 | if (get_user(options, argp)) |
| 130 | return -EFAULT; | 125 | return -EFAULT; |
| @@ -140,6 +135,11 @@ static long epx_c3_ioctl(struct file *file, unsigned int cmd, | |||
| 140 | } | 135 | } |
| 141 | 136 | ||
| 142 | return retval; | 137 | return retval; |
| 138 | case WDIOC_KEEPALIVE: | ||
| 139 | epx_c3_pet(); | ||
| 140 | return 0; | ||
| 141 | case WDIOC_GETTIMEOUT: | ||
| 142 | return put_user(WATCHDOG_TIMEOUT, argp); | ||
| 143 | default: | 143 | default: |
| 144 | return -ENOTTY; | 144 | return -ENOTTY; |
| 145 | } | 145 | } |
diff --git a/drivers/watchdog/sc1200wdt.c b/drivers/watchdog/sc1200wdt.c index 03e67fa4d689..f3bdc8227cc4 100644 --- a/drivers/watchdog/sc1200wdt.c +++ b/drivers/watchdog/sc1200wdt.c | |||
| @@ -207,24 +207,6 @@ static long sc1200wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 207 | case WDIOC_GETBOOTSTATUS: | 207 | case WDIOC_GETBOOTSTATUS: |
| 208 | return put_user(0, p); | 208 | return put_user(0, p); |
| 209 | 209 | ||
| 210 | case WDIOC_KEEPALIVE: | ||
| 211 | sc1200wdt_write_data(WDTO, timeout); | ||
| 212 | return 0; | ||
| 213 | |||
| 214 | case WDIOC_SETTIMEOUT: | ||
| 215 | if (get_user(new_timeout, p)) | ||
| 216 | return -EFAULT; | ||
| 217 | /* the API states this is given in secs */ | ||
| 218 | new_timeout /= 60; | ||
| 219 | if (new_timeout < 0 || new_timeout > MAX_TIMEOUT) | ||
| 220 | return -EINVAL; | ||
| 221 | timeout = new_timeout; | ||
| 222 | sc1200wdt_write_data(WDTO, timeout); | ||
| 223 | /* fall through and return the new timeout */ | ||
| 224 | |||
| 225 | case WDIOC_GETTIMEOUT: | ||
| 226 | return put_user(timeout * 60, p); | ||
| 227 | |||
| 228 | case WDIOC_SETOPTIONS: | 210 | case WDIOC_SETOPTIONS: |
| 229 | { | 211 | { |
| 230 | int options, retval = -EINVAL; | 212 | int options, retval = -EINVAL; |
| @@ -244,6 +226,24 @@ static long sc1200wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 244 | 226 | ||
| 245 | return retval; | 227 | return retval; |
| 246 | } | 228 | } |
| 229 | case WDIOC_KEEPALIVE: | ||
| 230 | sc1200wdt_write_data(WDTO, timeout); | ||
| 231 | return 0; | ||
| 232 | |||
| 233 | case WDIOC_SETTIMEOUT: | ||
| 234 | if (get_user(new_timeout, p)) | ||
| 235 | return -EFAULT; | ||
| 236 | /* the API states this is given in secs */ | ||
| 237 | new_timeout /= 60; | ||
| 238 | if (new_timeout < 0 || new_timeout > MAX_TIMEOUT) | ||
| 239 | return -EINVAL; | ||
| 240 | timeout = new_timeout; | ||
| 241 | sc1200wdt_write_data(WDTO, timeout); | ||
| 242 | /* fall through and return the new timeout */ | ||
| 243 | |||
| 244 | case WDIOC_GETTIMEOUT: | ||
| 245 | return put_user(timeout * 60, p); | ||
| 246 | |||
| 247 | default: | 247 | default: |
| 248 | return -ENOTTY; | 248 | return -ENOTTY; |
| 249 | } | 249 | } |
diff --git a/drivers/watchdog/sc520_wdt.c b/drivers/watchdog/sc520_wdt.c index 1d5ba15dec63..a2b6c1067ec5 100644 --- a/drivers/watchdog/sc520_wdt.c +++ b/drivers/watchdog/sc520_wdt.c | |||
| @@ -291,16 +291,11 @@ static long fop_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 291 | }; | 291 | }; |
| 292 | 292 | ||
| 293 | switch (cmd) { | 293 | switch (cmd) { |
| 294 | default: | ||
| 295 | return -ENOTTY; | ||
| 296 | case WDIOC_GETSUPPORT: | 294 | case WDIOC_GETSUPPORT: |
| 297 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; | 295 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; |
| 298 | case WDIOC_GETSTATUS: | 296 | case WDIOC_GETSTATUS: |
| 299 | case WDIOC_GETBOOTSTATUS: | 297 | case WDIOC_GETBOOTSTATUS: |
| 300 | return put_user(0, p); | 298 | return put_user(0, p); |
| 301 | case WDIOC_KEEPALIVE: | ||
| 302 | wdt_keepalive(); | ||
| 303 | return 0; | ||
| 304 | case WDIOC_SETOPTIONS: | 299 | case WDIOC_SETOPTIONS: |
| 305 | { | 300 | { |
| 306 | int new_options, retval = -EINVAL; | 301 | int new_options, retval = -EINVAL; |
| @@ -320,6 +315,9 @@ static long fop_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 320 | 315 | ||
| 321 | return retval; | 316 | return retval; |
| 322 | } | 317 | } |
| 318 | case WDIOC_KEEPALIVE: | ||
| 319 | wdt_keepalive(); | ||
| 320 | return 0; | ||
| 323 | case WDIOC_SETTIMEOUT: | 321 | case WDIOC_SETTIMEOUT: |
| 324 | { | 322 | { |
| 325 | int new_timeout; | 323 | int new_timeout; |
| @@ -335,6 +333,8 @@ static long fop_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 335 | } | 333 | } |
| 336 | case WDIOC_GETTIMEOUT: | 334 | case WDIOC_GETTIMEOUT: |
| 337 | return put_user(timeout, p); | 335 | return put_user(timeout, p); |
| 336 | default: | ||
| 337 | return -ENOTTY; | ||
| 338 | } | 338 | } |
| 339 | } | 339 | } |
| 340 | 340 | ||
diff --git a/drivers/watchdog/scx200_wdt.c b/drivers/watchdog/scx200_wdt.c index 7c1de94704f3..fd5c09446bce 100644 --- a/drivers/watchdog/scx200_wdt.c +++ b/drivers/watchdog/scx200_wdt.c | |||
| @@ -168,8 +168,6 @@ static long scx200_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 168 | int new_margin; | 168 | int new_margin; |
| 169 | 169 | ||
| 170 | switch (cmd) { | 170 | switch (cmd) { |
| 171 | default: | ||
| 172 | return -ENOTTY; | ||
| 173 | case WDIOC_GETSUPPORT: | 171 | case WDIOC_GETSUPPORT: |
| 174 | if (copy_to_user(argp, &ident, sizeof(ident))) | 172 | if (copy_to_user(argp, &ident, sizeof(ident))) |
| 175 | return -EFAULT; | 173 | return -EFAULT; |
| @@ -194,6 +192,8 @@ static long scx200_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 194 | if (put_user(margin, p)) | 192 | if (put_user(margin, p)) |
| 195 | return -EFAULT; | 193 | return -EFAULT; |
| 196 | return 0; | 194 | return 0; |
| 195 | default: | ||
| 196 | return -ENOTTY; | ||
| 197 | } | 197 | } |
| 198 | } | 198 | } |
| 199 | 199 | ||
diff --git a/drivers/watchdog/shwdt.c b/drivers/watchdog/shwdt.c index 60f0036aaca6..824125adf90a 100644 --- a/drivers/watchdog/shwdt.c +++ b/drivers/watchdog/shwdt.c | |||
| @@ -351,20 +351,6 @@ static long sh_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 351 | case WDIOC_GETSTATUS: | 351 | case WDIOC_GETSTATUS: |
| 352 | case WDIOC_GETBOOTSTATUS: | 352 | case WDIOC_GETBOOTSTATUS: |
| 353 | return put_user(0, (int *)arg); | 353 | return put_user(0, (int *)arg); |
| 354 | case WDIOC_KEEPALIVE: | ||
| 355 | sh_wdt_keepalive(); | ||
| 356 | return 0; | ||
| 357 | case WDIOC_SETTIMEOUT: | ||
| 358 | if (get_user(new_heartbeat, (int *)arg)) | ||
| 359 | return -EFAULT; | ||
| 360 | |||
| 361 | if (sh_wdt_set_heartbeat(new_heartbeat)) | ||
| 362 | return -EINVAL; | ||
| 363 | |||
| 364 | sh_wdt_keepalive(); | ||
| 365 | /* Fall */ | ||
| 366 | case WDIOC_GETTIMEOUT: | ||
| 367 | return put_user(heartbeat, (int *)arg); | ||
| 368 | case WDIOC_SETOPTIONS: | 354 | case WDIOC_SETOPTIONS: |
| 369 | if (get_user(options, (int *)arg)) | 355 | if (get_user(options, (int *)arg)) |
| 370 | return -EFAULT; | 356 | return -EFAULT; |
| @@ -380,6 +366,20 @@ static long sh_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 380 | } | 366 | } |
| 381 | 367 | ||
| 382 | return retval; | 368 | return retval; |
| 369 | case WDIOC_KEEPALIVE: | ||
| 370 | sh_wdt_keepalive(); | ||
| 371 | return 0; | ||
| 372 | case WDIOC_SETTIMEOUT: | ||
| 373 | if (get_user(new_heartbeat, (int *)arg)) | ||
| 374 | return -EFAULT; | ||
| 375 | |||
| 376 | if (sh_wdt_set_heartbeat(new_heartbeat)) | ||
| 377 | return -EINVAL; | ||
| 378 | |||
| 379 | sh_wdt_keepalive(); | ||
| 380 | /* Fall */ | ||
| 381 | case WDIOC_GETTIMEOUT: | ||
| 382 | return put_user(heartbeat, (int *)arg); | ||
| 383 | default: | 383 | default: |
| 384 | return -ENOTTY; | 384 | return -ENOTTY; |
| 385 | } | 385 | } |
diff --git a/drivers/watchdog/smsc37b787_wdt.c b/drivers/watchdog/smsc37b787_wdt.c index b7c6394b7d70..239383da6d87 100644 --- a/drivers/watchdog/smsc37b787_wdt.c +++ b/drivers/watchdog/smsc37b787_wdt.c | |||
| @@ -451,6 +451,23 @@ static long wb_smsc_wdt_ioctl(struct file *file, | |||
| 451 | return put_user(wb_smsc_wdt_status(), uarg.i); | 451 | return put_user(wb_smsc_wdt_status(), uarg.i); |
| 452 | case WDIOC_GETBOOTSTATUS: | 452 | case WDIOC_GETBOOTSTATUS: |
| 453 | return put_user(0, uarg.i); | 453 | return put_user(0, uarg.i); |
| 454 | case WDIOC_SETOPTIONS: | ||
| 455 | { | ||
| 456 | int options, retval = -EINVAL; | ||
| 457 | |||
| 458 | if (get_user(options, uarg.i)) | ||
| 459 | return -EFAULT; | ||
| 460 | |||
| 461 | if (options & WDIOS_DISABLECARD) { | ||
| 462 | wb_smsc_wdt_disable(); | ||
| 463 | retval = 0; | ||
| 464 | } | ||
| 465 | if (options & WDIOS_ENABLECARD) { | ||
| 466 | wb_smsc_wdt_enable(); | ||
| 467 | retval = 0; | ||
| 468 | } | ||
| 469 | return retval; | ||
| 470 | } | ||
| 454 | case WDIOC_KEEPALIVE: | 471 | case WDIOC_KEEPALIVE: |
| 455 | wb_smsc_wdt_reset_timer(); | 472 | wb_smsc_wdt_reset_timer(); |
| 456 | return 0; | 473 | return 0; |
| @@ -470,23 +487,6 @@ static long wb_smsc_wdt_ioctl(struct file *file, | |||
| 470 | if (unit == UNIT_MINUTE) | 487 | if (unit == UNIT_MINUTE) |
| 471 | new_timeout *= 60; | 488 | new_timeout *= 60; |
| 472 | return put_user(new_timeout, uarg.i); | 489 | return put_user(new_timeout, uarg.i); |
| 473 | case WDIOC_SETOPTIONS: | ||
| 474 | { | ||
| 475 | int options, retval = -EINVAL; | ||
| 476 | |||
| 477 | if (get_user(options, uarg.i)) | ||
| 478 | return -EFAULT; | ||
| 479 | |||
| 480 | if (options & WDIOS_DISABLECARD) { | ||
| 481 | wb_smsc_wdt_disable(); | ||
| 482 | retval = 0; | ||
| 483 | } | ||
| 484 | if (options & WDIOS_ENABLECARD) { | ||
| 485 | wb_smsc_wdt_enable(); | ||
| 486 | retval = 0; | ||
| 487 | } | ||
| 488 | return retval; | ||
| 489 | } | ||
| 490 | default: | 490 | default: |
| 491 | return -ENOTTY; | 491 | return -ENOTTY; |
| 492 | } | 492 | } |
diff --git a/drivers/watchdog/softdog.c b/drivers/watchdog/softdog.c index bb3c75eed9df..c650464c5c63 100644 --- a/drivers/watchdog/softdog.c +++ b/drivers/watchdog/softdog.c | |||
| @@ -206,8 +206,6 @@ static long softdog_ioctl(struct file *file, unsigned int cmd, | |||
| 206 | .identity = "Software Watchdog", | 206 | .identity = "Software Watchdog", |
| 207 | }; | 207 | }; |
| 208 | switch (cmd) { | 208 | switch (cmd) { |
| 209 | default: | ||
| 210 | return -ENOTTY; | ||
| 211 | case WDIOC_GETSUPPORT: | 209 | case WDIOC_GETSUPPORT: |
| 212 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; | 210 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; |
| 213 | case WDIOC_GETSTATUS: | 211 | case WDIOC_GETSTATUS: |
| @@ -225,6 +223,8 @@ static long softdog_ioctl(struct file *file, unsigned int cmd, | |||
| 225 | /* Fall */ | 223 | /* Fall */ |
| 226 | case WDIOC_GETTIMEOUT: | 224 | case WDIOC_GETTIMEOUT: |
| 227 | return put_user(soft_margin, p); | 225 | return put_user(soft_margin, p); |
| 226 | default: | ||
| 227 | return -ENOTTY; | ||
| 228 | } | 228 | } |
| 229 | } | 229 | } |
| 230 | 230 | ||
diff --git a/drivers/watchdog/txx9wdt.c b/drivers/watchdog/txx9wdt.c index b729cc447df3..8382f9a9534b 100644 --- a/drivers/watchdog/txx9wdt.c +++ b/drivers/watchdog/txx9wdt.c | |||
| @@ -142,8 +142,6 @@ static long txx9wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 142 | }; | 142 | }; |
| 143 | 143 | ||
| 144 | switch (cmd) { | 144 | switch (cmd) { |
| 145 | default: | ||
| 146 | return -ENOTTY; | ||
| 147 | case WDIOC_GETSUPPORT: | 145 | case WDIOC_GETSUPPORT: |
| 148 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; | 146 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; |
| 149 | case WDIOC_GETSTATUS: | 147 | case WDIOC_GETSTATUS: |
| @@ -163,6 +161,8 @@ static long txx9wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 163 | /* Fall */ | 161 | /* Fall */ |
| 164 | case WDIOC_GETTIMEOUT: | 162 | case WDIOC_GETTIMEOUT: |
| 165 | return put_user(timeout, p); | 163 | return put_user(timeout, p); |
| 164 | default: | ||
| 165 | return -ENOTTY; | ||
| 166 | } | 166 | } |
| 167 | } | 167 | } |
| 168 | 168 | ||
diff --git a/drivers/watchdog/w83627hf_wdt.c b/drivers/watchdog/w83627hf_wdt.c index 70c843f4201a..59507f609996 100644 --- a/drivers/watchdog/w83627hf_wdt.c +++ b/drivers/watchdog/w83627hf_wdt.c | |||
| @@ -211,18 +211,6 @@ static long wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 211 | case WDIOC_GETSTATUS: | 211 | case WDIOC_GETSTATUS: |
| 212 | case WDIOC_GETBOOTSTATUS: | 212 | case WDIOC_GETBOOTSTATUS: |
| 213 | return put_user(0, p); | 213 | return put_user(0, p); |
| 214 | case WDIOC_KEEPALIVE: | ||
| 215 | wdt_ping(); | ||
| 216 | break; | ||
| 217 | case WDIOC_SETTIMEOUT: | ||
| 218 | if (get_user(new_timeout, p)) | ||
| 219 | return -EFAULT; | ||
| 220 | if (wdt_set_heartbeat(new_timeout)) | ||
| 221 | return -EINVAL; | ||
| 222 | wdt_ping(); | ||
| 223 | /* Fall */ | ||
| 224 | case WDIOC_GETTIMEOUT: | ||
| 225 | return put_user(timeout, p); | ||
| 226 | case WDIOC_SETOPTIONS: | 214 | case WDIOC_SETOPTIONS: |
| 227 | { | 215 | { |
| 228 | int options, retval = -EINVAL; | 216 | int options, retval = -EINVAL; |
| @@ -239,6 +227,18 @@ static long wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 239 | } | 227 | } |
| 240 | return retval; | 228 | return retval; |
| 241 | } | 229 | } |
| 230 | case WDIOC_KEEPALIVE: | ||
| 231 | wdt_ping(); | ||
| 232 | break; | ||
| 233 | case WDIOC_SETTIMEOUT: | ||
| 234 | if (get_user(new_timeout, p)) | ||
| 235 | return -EFAULT; | ||
| 236 | if (wdt_set_heartbeat(new_timeout)) | ||
| 237 | return -EINVAL; | ||
| 238 | wdt_ping(); | ||
| 239 | /* Fall */ | ||
| 240 | case WDIOC_GETTIMEOUT: | ||
| 241 | return put_user(timeout, p); | ||
| 242 | default: | 242 | default: |
| 243 | return -ENOTTY; | 243 | return -ENOTTY; |
| 244 | } | 244 | } |
diff --git a/drivers/watchdog/w83697hf_wdt.c b/drivers/watchdog/w83697hf_wdt.c index 06ddd38675bd..12bd6618ed5e 100644 --- a/drivers/watchdog/w83697hf_wdt.c +++ b/drivers/watchdog/w83697hf_wdt.c | |||
| @@ -251,21 +251,6 @@ static long wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 251 | case WDIOC_GETBOOTSTATUS: | 251 | case WDIOC_GETBOOTSTATUS: |
| 252 | return put_user(0, p); | 252 | return put_user(0, p); |
| 253 | 253 | ||
| 254 | case WDIOC_KEEPALIVE: | ||
| 255 | wdt_ping(); | ||
| 256 | break; | ||
| 257 | |||
| 258 | case WDIOC_SETTIMEOUT: | ||
| 259 | if (get_user(new_timeout, p)) | ||
| 260 | return -EFAULT; | ||
| 261 | if (wdt_set_heartbeat(new_timeout)) | ||
| 262 | return -EINVAL; | ||
| 263 | wdt_ping(); | ||
| 264 | /* Fall */ | ||
| 265 | |||
| 266 | case WDIOC_GETTIMEOUT: | ||
| 267 | return put_user(timeout, p); | ||
| 268 | |||
| 269 | case WDIOC_SETOPTIONS: | 254 | case WDIOC_SETOPTIONS: |
| 270 | { | 255 | { |
| 271 | int options, retval = -EINVAL; | 256 | int options, retval = -EINVAL; |
| @@ -286,6 +271,21 @@ static long wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 286 | return retval; | 271 | return retval; |
| 287 | } | 272 | } |
| 288 | 273 | ||
| 274 | case WDIOC_KEEPALIVE: | ||
| 275 | wdt_ping(); | ||
| 276 | break; | ||
| 277 | |||
| 278 | case WDIOC_SETTIMEOUT: | ||
| 279 | if (get_user(new_timeout, p)) | ||
| 280 | return -EFAULT; | ||
| 281 | if (wdt_set_heartbeat(new_timeout)) | ||
| 282 | return -EINVAL; | ||
| 283 | wdt_ping(); | ||
| 284 | /* Fall */ | ||
| 285 | |||
| 286 | case WDIOC_GETTIMEOUT: | ||
| 287 | return put_user(timeout, p); | ||
| 288 | |||
| 289 | default: | 289 | default: |
| 290 | return -ENOTTY; | 290 | return -ENOTTY; |
| 291 | } | 291 | } |
diff --git a/drivers/watchdog/w83877f_wdt.c b/drivers/watchdog/w83877f_wdt.c index 75b546d7d8c2..24587d2060c4 100644 --- a/drivers/watchdog/w83877f_wdt.c +++ b/drivers/watchdog/w83877f_wdt.c | |||
| @@ -254,16 +254,11 @@ static long fop_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 254 | }; | 254 | }; |
| 255 | 255 | ||
| 256 | switch (cmd) { | 256 | switch (cmd) { |
| 257 | default: | ||
| 258 | return -ENOTTY; | ||
| 259 | case WDIOC_GETSUPPORT: | 257 | case WDIOC_GETSUPPORT: |
| 260 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; | 258 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; |
| 261 | case WDIOC_GETSTATUS: | 259 | case WDIOC_GETSTATUS: |
| 262 | case WDIOC_GETBOOTSTATUS: | 260 | case WDIOC_GETBOOTSTATUS: |
| 263 | return put_user(0, p); | 261 | return put_user(0, p); |
| 264 | case WDIOC_KEEPALIVE: | ||
| 265 | wdt_keepalive(); | ||
| 266 | return 0; | ||
| 267 | case WDIOC_SETOPTIONS: | 262 | case WDIOC_SETOPTIONS: |
| 268 | { | 263 | { |
| 269 | int new_options, retval = -EINVAL; | 264 | int new_options, retval = -EINVAL; |
| @@ -283,6 +278,9 @@ static long fop_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 283 | 278 | ||
| 284 | return retval; | 279 | return retval; |
| 285 | } | 280 | } |
| 281 | case WDIOC_KEEPALIVE: | ||
| 282 | wdt_keepalive(); | ||
| 283 | return 0; | ||
| 286 | case WDIOC_SETTIMEOUT: | 284 | case WDIOC_SETTIMEOUT: |
| 287 | { | 285 | { |
| 288 | int new_timeout; | 286 | int new_timeout; |
| @@ -300,6 +298,8 @@ static long fop_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 300 | } | 298 | } |
| 301 | case WDIOC_GETTIMEOUT: | 299 | case WDIOC_GETTIMEOUT: |
| 302 | return put_user(timeout, p); | 300 | return put_user(timeout, p); |
| 301 | default: | ||
| 302 | return -ENOTTY; | ||
| 303 | } | 303 | } |
| 304 | } | 304 | } |
| 305 | 305 | ||
diff --git a/drivers/watchdog/w83977f_wdt.c b/drivers/watchdog/w83977f_wdt.c index 6860a13f5bb9..2525da5080ca 100644 --- a/drivers/watchdog/w83977f_wdt.c +++ b/drivers/watchdog/w83977f_wdt.c | |||
| @@ -390,9 +390,6 @@ static long wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 390 | uarg.i = (int __user *)arg; | 390 | uarg.i = (int __user *)arg; |
| 391 | 391 | ||
| 392 | switch (cmd) { | 392 | switch (cmd) { |
| 393 | default: | ||
| 394 | return -ENOTTY; | ||
| 395 | |||
| 396 | case WDIOC_GETSUPPORT: | 393 | case WDIOC_GETSUPPORT: |
| 397 | return copy_to_user(uarg.ident, &ident, | 394 | return copy_to_user(uarg.ident, &ident, |
| 398 | sizeof(ident)) ? -EFAULT : 0; | 395 | sizeof(ident)) ? -EFAULT : 0; |
| @@ -404,10 +401,6 @@ static long wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 404 | case WDIOC_GETBOOTSTATUS: | 401 | case WDIOC_GETBOOTSTATUS: |
| 405 | return put_user(0, uarg.i); | 402 | return put_user(0, uarg.i); |
| 406 | 403 | ||
| 407 | case WDIOC_KEEPALIVE: | ||
| 408 | wdt_keepalive(); | ||
| 409 | return 0; | ||
| 410 | |||
| 411 | case WDIOC_SETOPTIONS: | 404 | case WDIOC_SETOPTIONS: |
| 412 | if (get_user(new_options, uarg.i)) | 405 | if (get_user(new_options, uarg.i)) |
| 413 | return -EFAULT; | 406 | return -EFAULT; |
| @@ -424,6 +417,10 @@ static long wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 424 | 417 | ||
| 425 | return retval; | 418 | return retval; |
| 426 | 419 | ||
| 420 | case WDIOC_KEEPALIVE: | ||
| 421 | wdt_keepalive(); | ||
| 422 | return 0; | ||
| 423 | |||
| 427 | case WDIOC_SETTIMEOUT: | 424 | case WDIOC_SETTIMEOUT: |
| 428 | if (get_user(new_timeout, uarg.i)) | 425 | if (get_user(new_timeout, uarg.i)) |
| 429 | return -EFAULT; | 426 | return -EFAULT; |
| @@ -437,6 +434,9 @@ static long wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 437 | case WDIOC_GETTIMEOUT: | 434 | case WDIOC_GETTIMEOUT: |
| 438 | return put_user(timeout, uarg.i); | 435 | return put_user(timeout, uarg.i); |
| 439 | 436 | ||
| 437 | default: | ||
| 438 | return -ENOTTY; | ||
| 439 | |||
| 440 | } | 440 | } |
| 441 | } | 441 | } |
| 442 | 442 | ||
diff --git a/drivers/watchdog/wafer5823wdt.c b/drivers/watchdog/wafer5823wdt.c index 886cbbcf3eed..44e81f7d4322 100644 --- a/drivers/watchdog/wafer5823wdt.c +++ b/drivers/watchdog/wafer5823wdt.c | |||
| @@ -145,22 +145,6 @@ static long wafwdt_ioctl(struct file *file, unsigned int cmd, | |||
| 145 | case WDIOC_GETBOOTSTATUS: | 145 | case WDIOC_GETBOOTSTATUS: |
| 146 | return put_user(0, p); | 146 | return put_user(0, p); |
| 147 | 147 | ||
| 148 | case WDIOC_KEEPALIVE: | ||
| 149 | wafwdt_ping(); | ||
| 150 | break; | ||
| 151 | |||
| 152 | case WDIOC_SETTIMEOUT: | ||
| 153 | if (get_user(new_timeout, p)) | ||
| 154 | return -EFAULT; | ||
| 155 | if ((new_timeout < 1) || (new_timeout > 255)) | ||
| 156 | return -EINVAL; | ||
| 157 | timeout = new_timeout; | ||
| 158 | wafwdt_stop(); | ||
| 159 | wafwdt_start(); | ||
| 160 | /* Fall */ | ||
| 161 | case WDIOC_GETTIMEOUT: | ||
| 162 | return put_user(timeout, p); | ||
| 163 | |||
| 164 | case WDIOC_SETOPTIONS: | 148 | case WDIOC_SETOPTIONS: |
| 165 | { | 149 | { |
| 166 | int options, retval = -EINVAL; | 150 | int options, retval = -EINVAL; |
| @@ -181,6 +165,22 @@ static long wafwdt_ioctl(struct file *file, unsigned int cmd, | |||
| 181 | return retval; | 165 | return retval; |
| 182 | } | 166 | } |
| 183 | 167 | ||
| 168 | case WDIOC_KEEPALIVE: | ||
| 169 | wafwdt_ping(); | ||
| 170 | break; | ||
| 171 | |||
| 172 | case WDIOC_SETTIMEOUT: | ||
| 173 | if (get_user(new_timeout, p)) | ||
| 174 | return -EFAULT; | ||
| 175 | if ((new_timeout < 1) || (new_timeout > 255)) | ||
| 176 | return -EINVAL; | ||
| 177 | timeout = new_timeout; | ||
| 178 | wafwdt_stop(); | ||
| 179 | wafwdt_start(); | ||
| 180 | /* Fall */ | ||
| 181 | case WDIOC_GETTIMEOUT: | ||
| 182 | return put_user(timeout, p); | ||
| 183 | |||
| 184 | default: | 184 | default: |
| 185 | return -ENOTTY; | 185 | return -ENOTTY; |
| 186 | } | 186 | } |
diff --git a/drivers/watchdog/wdt.c b/drivers/watchdog/wdt.c index 53a6b18bcb9a..deeebb2b13ea 100644 --- a/drivers/watchdog/wdt.c +++ b/drivers/watchdog/wdt.c | |||
| @@ -373,8 +373,6 @@ static long wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 373 | #endif /* CONFIG_WDT_501 */ | 373 | #endif /* CONFIG_WDT_501 */ |
| 374 | 374 | ||
| 375 | switch (cmd) { | 375 | switch (cmd) { |
| 376 | default: | ||
| 377 | return -ENOTTY; | ||
| 378 | case WDIOC_GETSUPPORT: | 376 | case WDIOC_GETSUPPORT: |
| 379 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; | 377 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; |
| 380 | case WDIOC_GETSTATUS: | 378 | case WDIOC_GETSTATUS: |
| @@ -394,6 +392,8 @@ static long wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 394 | /* Fall */ | 392 | /* Fall */ |
| 395 | case WDIOC_GETTIMEOUT: | 393 | case WDIOC_GETTIMEOUT: |
| 396 | return put_user(heartbeat, p); | 394 | return put_user(heartbeat, p); |
| 395 | default: | ||
| 396 | return -ENOTTY; | ||
| 397 | } | 397 | } |
| 398 | } | 398 | } |
| 399 | 399 | ||
diff --git a/drivers/watchdog/wdt977.c b/drivers/watchdog/wdt977.c index bdc28e522f03..60e28d49ff52 100644 --- a/drivers/watchdog/wdt977.c +++ b/drivers/watchdog/wdt977.c | |||
| @@ -365,9 +365,6 @@ static long wdt977_ioctl(struct file *file, unsigned int cmd, | |||
| 365 | uarg.i = (int __user *)arg; | 365 | uarg.i = (int __user *)arg; |
| 366 | 366 | ||
| 367 | switch (cmd) { | 367 | switch (cmd) { |
| 368 | default: | ||
| 369 | return -ENOTTY; | ||
| 370 | |||
| 371 | case WDIOC_GETSUPPORT: | 368 | case WDIOC_GETSUPPORT: |
| 372 | return copy_to_user(uarg.ident, &ident, | 369 | return copy_to_user(uarg.ident, &ident, |
| 373 | sizeof(ident)) ? -EFAULT : 0; | 370 | sizeof(ident)) ? -EFAULT : 0; |
| @@ -379,10 +376,6 @@ static long wdt977_ioctl(struct file *file, unsigned int cmd, | |||
| 379 | case WDIOC_GETBOOTSTATUS: | 376 | case WDIOC_GETBOOTSTATUS: |
| 380 | return put_user(0, uarg.i); | 377 | return put_user(0, uarg.i); |
| 381 | 378 | ||
| 382 | case WDIOC_KEEPALIVE: | ||
| 383 | wdt977_keepalive(); | ||
| 384 | return 0; | ||
| 385 | |||
| 386 | case WDIOC_SETOPTIONS: | 379 | case WDIOC_SETOPTIONS: |
| 387 | if (get_user(new_options, uarg.i)) | 380 | if (get_user(new_options, uarg.i)) |
| 388 | return -EFAULT; | 381 | return -EFAULT; |
| @@ -399,6 +392,10 @@ static long wdt977_ioctl(struct file *file, unsigned int cmd, | |||
| 399 | 392 | ||
| 400 | return retval; | 393 | return retval; |
| 401 | 394 | ||
| 395 | case WDIOC_KEEPALIVE: | ||
| 396 | wdt977_keepalive(); | ||
| 397 | return 0; | ||
| 398 | |||
| 402 | case WDIOC_SETTIMEOUT: | 399 | case WDIOC_SETTIMEOUT: |
| 403 | if (get_user(new_timeout, uarg.i)) | 400 | if (get_user(new_timeout, uarg.i)) |
| 404 | return -EFAULT; | 401 | return -EFAULT; |
| @@ -412,6 +409,9 @@ static long wdt977_ioctl(struct file *file, unsigned int cmd, | |||
| 412 | case WDIOC_GETTIMEOUT: | 409 | case WDIOC_GETTIMEOUT: |
| 413 | return put_user(timeout, uarg.i); | 410 | return put_user(timeout, uarg.i); |
| 414 | 411 | ||
| 412 | default: | ||
| 413 | return -ENOTTY; | ||
| 414 | |||
| 415 | } | 415 | } |
| 416 | } | 416 | } |
| 417 | 417 | ||
diff --git a/drivers/watchdog/wdt_pci.c b/drivers/watchdog/wdt_pci.c index 5d922fd6eafc..fb8fc0144852 100644 --- a/drivers/watchdog/wdt_pci.c +++ b/drivers/watchdog/wdt_pci.c | |||
| @@ -428,8 +428,6 @@ static long wdtpci_ioctl(struct file *file, unsigned int cmd, | |||
| 428 | #endif /* CONFIG_WDT_501_PCI */ | 428 | #endif /* CONFIG_WDT_501_PCI */ |
| 429 | 429 | ||
| 430 | switch (cmd) { | 430 | switch (cmd) { |
| 431 | default: | ||
| 432 | return -ENOTTY; | ||
| 433 | case WDIOC_GETSUPPORT: | 431 | case WDIOC_GETSUPPORT: |
| 434 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; | 432 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; |
| 435 | case WDIOC_GETSTATUS: | 433 | case WDIOC_GETSTATUS: |
| @@ -449,7 +447,9 @@ static long wdtpci_ioctl(struct file *file, unsigned int cmd, | |||
| 449 | /* Fall */ | 447 | /* Fall */ |
| 450 | case WDIOC_GETTIMEOUT: | 448 | case WDIOC_GETTIMEOUT: |
| 451 | return put_user(heartbeat, p); | 449 | return put_user(heartbeat, p); |
| 452 | } | 450 | default: |
| 451 | return -ENOTTY; | ||
| 452 | } | ||
| 453 | } | 453 | } |
| 454 | 454 | ||
| 455 | /** | 455 | /** |
