diff options
Diffstat (limited to 'Documentation/watchdog/pcwd-watchdog.txt')
-rw-r--r-- | Documentation/watchdog/pcwd-watchdog.txt | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/Documentation/watchdog/pcwd-watchdog.txt b/Documentation/watchdog/pcwd-watchdog.txt new file mode 100644 index 000000000000..12187a33e310 --- /dev/null +++ b/Documentation/watchdog/pcwd-watchdog.txt | |||
@@ -0,0 +1,135 @@ | |||
1 | Berkshire Products PC Watchdog Card | ||
2 | Support for ISA Cards Revision A and C | ||
3 | Documentation and Driver by Ken Hollis <kenji@bitgate.com> | ||
4 | |||
5 | The PC Watchdog is a card that offers the same type of functionality that | ||
6 | the WDT card does, only it doesn't require an IRQ to run. Furthermore, | ||
7 | the Revision C card allows you to monitor any IO Port to automatically | ||
8 | trigger the card into being reset. This way you can make the card | ||
9 | monitor hard drive status, or anything else you need. | ||
10 | |||
11 | The Watchdog Driver has one basic role: to talk to the card and send | ||
12 | signals to it so it doesn't reset your computer ... at least during | ||
13 | normal operation. | ||
14 | |||
15 | The Watchdog Driver will automatically find your watchdog card, and will | ||
16 | attach a running driver for use with that card. After the watchdog | ||
17 | drivers have initialized, you can then talk to the card using the PC | ||
18 | Watchdog program, available from http://ftp.bitgate.com/pcwd/. | ||
19 | |||
20 | I suggest putting a "watchdog -d" before the beginning of an fsck, and | ||
21 | a "watchdog -e -t 1" immediately after the end of an fsck. (Remember | ||
22 | to run the program with an "&" to run it in the background!) | ||
23 | |||
24 | If you want to write a program to be compatible with the PC Watchdog | ||
25 | driver, simply do the following: | ||
26 | |||
27 | -- Snippet of code -- | ||
28 | /* | ||
29 | * Watchdog Driver Test Program | ||
30 | */ | ||
31 | |||
32 | #include <stdio.h> | ||
33 | #include <stdlib.h> | ||
34 | #include <string.h> | ||
35 | #include <unistd.h> | ||
36 | #include <fcntl.h> | ||
37 | #include <sys/ioctl.h> | ||
38 | #include <linux/types.h> | ||
39 | #include <linux/watchdog.h> | ||
40 | |||
41 | int fd; | ||
42 | |||
43 | /* | ||
44 | * This function simply sends an IOCTL to the driver, which in turn ticks | ||
45 | * the PC Watchdog card to reset its internal timer so it doesn't trigger | ||
46 | * a computer reset. | ||
47 | */ | ||
48 | void keep_alive(void) | ||
49 | { | ||
50 | int dummy; | ||
51 | |||
52 | ioctl(fd, WDIOC_KEEPALIVE, &dummy); | ||
53 | } | ||
54 | |||
55 | /* | ||
56 | * The main program. Run the program with "-d" to disable the card, | ||
57 | * or "-e" to enable the card. | ||
58 | */ | ||
59 | int main(int argc, char *argv[]) | ||
60 | { | ||
61 | fd = open("/dev/watchdog", O_WRONLY); | ||
62 | |||
63 | if (fd == -1) { | ||
64 | fprintf(stderr, "Watchdog device not enabled.\n"); | ||
65 | fflush(stderr); | ||
66 | exit(-1); | ||
67 | } | ||
68 | |||
69 | if (argc > 1) { | ||
70 | if (!strncasecmp(argv[1], "-d", 2)) { | ||
71 | ioctl(fd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD); | ||
72 | fprintf(stderr, "Watchdog card disabled.\n"); | ||
73 | fflush(stderr); | ||
74 | exit(0); | ||
75 | } else if (!strncasecmp(argv[1], "-e", 2)) { | ||
76 | ioctl(fd, WDIOC_SETOPTIONS, WDIOS_ENABLECARD); | ||
77 | fprintf(stderr, "Watchdog card enabled.\n"); | ||
78 | fflush(stderr); | ||
79 | exit(0); | ||
80 | } else { | ||
81 | fprintf(stderr, "-d to disable, -e to enable.\n"); | ||
82 | fprintf(stderr, "run by itself to tick the card.\n"); | ||
83 | fflush(stderr); | ||
84 | exit(0); | ||
85 | } | ||
86 | } else { | ||
87 | fprintf(stderr, "Watchdog Ticking Away!\n"); | ||
88 | fflush(stderr); | ||
89 | } | ||
90 | |||
91 | while(1) { | ||
92 | keep_alive(); | ||
93 | sleep(1); | ||
94 | } | ||
95 | } | ||
96 | -- End snippet -- | ||
97 | |||
98 | Other IOCTL functions include: | ||
99 | |||
100 | WDIOC_GETSUPPORT | ||
101 | This returns the support of the card itself. This | ||
102 | returns in structure "PCWDS" which returns: | ||
103 | options = WDIOS_TEMPPANIC | ||
104 | (This card supports temperature) | ||
105 | firmware_version = xxxx | ||
106 | (Firmware version of the card) | ||
107 | |||
108 | WDIOC_GETSTATUS | ||
109 | This returns the status of the card, with the bits of | ||
110 | WDIOF_* bitwise-anded into the value. (The comments | ||
111 | are in linux/pcwd.h) | ||
112 | |||
113 | WDIOC_GETBOOTSTATUS | ||
114 | This returns the status of the card that was reported | ||
115 | at bootup. | ||
116 | |||
117 | WDIOC_GETTEMP | ||
118 | This returns the temperature of the card. (You can also | ||
119 | read /dev/watchdog, which gives a temperature update | ||
120 | every second.) | ||
121 | |||
122 | WDIOC_SETOPTIONS | ||
123 | This lets you set the options of the card. You can either | ||
124 | enable or disable the card this way. | ||
125 | |||
126 | WDIOC_KEEPALIVE | ||
127 | This pings the card to tell it not to reset your computer. | ||
128 | |||
129 | And that's all she wrote! | ||
130 | |||
131 | -- Ken Hollis | ||
132 | (kenji@bitgate.com) | ||
133 | |||
134 | (This documentation may be out of date. Check | ||
135 | http://ftp.bitgate.com/pcwd/ for the absolute latest additions.) | ||