Commit 04315f20 authored by Dave Jones's avatar Dave Jones Committed by Dave Jones

[WATCHDOG] ALIM7101 fixes from 2.4 + C99 structs

parent 6c583251
...@@ -79,6 +79,15 @@ static unsigned long wdt_is_open; ...@@ -79,6 +79,15 @@ static unsigned long wdt_is_open;
static int wdt_expect_close; static int wdt_expect_close;
static struct pci_dev *alim7101_pmu; static struct pci_dev *alim7101_pmu;
#ifdef CONFIG_WATCHDOG_NOWAYOUT
static int nowayout = 1;
#else
static int nowayout = 0;
#endif
MODULE_PARM(nowayout,"i");
MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=CONFIG_WATCHDOG_NOWAYOUT)");
/* /*
* Whack the dog * Whack the dog
*/ */
...@@ -155,8 +164,8 @@ static ssize_t fop_write(struct file * file, const char * buf, size_t count, lof ...@@ -155,8 +164,8 @@ static ssize_t fop_write(struct file * file, const char * buf, size_t count, lof
return -ESPIPE; return -ESPIPE;
/* See if we got the magic character */ /* See if we got the magic character */
if(count) if(count) {
{ if (!nowayout) {
size_t ofs; size_t ofs;
/* note: just in case someone wrote the magic character /* note: just in case someone wrote the magic character
...@@ -164,14 +173,14 @@ static ssize_t fop_write(struct file * file, const char * buf, size_t count, lof ...@@ -164,14 +173,14 @@ static ssize_t fop_write(struct file * file, const char * buf, size_t count, lof
wdt_expect_close = 0; wdt_expect_close = 0;
/* now scan */ /* now scan */
for(ofs = 0; ofs != count; ofs++) for (ofs = 0; ofs != count; ofs++) {
{
char c; char c;
if(get_user(c, buf+ofs)) if (get_user(c, buf+ofs))
return -EFAULT; return -EFAULT;
if(c == 'V') if (c == 'V')
wdt_expect_close = 1; wdt_expect_close = 1;
} }
}
/* someone wrote to us, we should restart timer */ /* someone wrote to us, we should restart timer */
next_heartbeat = jiffies + WDT_HEARTBEAT; next_heartbeat = jiffies + WDT_HEARTBEAT;
return 1; return 1;
...@@ -197,26 +206,22 @@ static int fop_open(struct inode * inode, struct file * file) ...@@ -197,26 +206,22 @@ static int fop_open(struct inode * inode, struct file * file)
static int fop_close(struct inode * inode, struct file * file) static int fop_close(struct inode * inode, struct file * file)
{ {
#ifdef CONFIG_WDT_NOWAYOUT
if(wdt_expect_close) if(wdt_expect_close)
wdt_turnoff(); wdt_turnoff();
else { else
printk(OUR_NAME ": device file closed unexpectedly. Will not stop the WDT!\n"); printk(OUR_NAME ": device file closed unexpectedly. Will not stop the WDT!\n");
}
#else
wdt_turnoff();
#endif
clear_bit(0, &wdt_is_open); clear_bit(0, &wdt_is_open);
return 0; return 0;
} }
static int fop_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) static int fop_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
{ {
static struct watchdog_info ident= static struct watchdog_info ident =
{ {
0, .options = WDIOF_MAGICCLOSE,
1, .firmware_version = 1,
"ALiM7101" .identity = "ALiM7101"
}; };
switch(cmd) switch(cmd)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment