Commit | Line | Data |
---|---|---|
1da177e4 LT |
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.) |