123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- Berkshire Products PC Watchdog Card
- Support for ISA Cards Revision A and C
- Documentation and Driver by Ken Hollis <kenji@bitgate.com>
- The PC Watchdog is a card that offers the same type of functionality that
- the WDT card does, only it doesn't require an IRQ to run. Furthermore,
- the Revision C card allows you to monitor any IO Port to automatically
- trigger the card into being reset. This way you can make the card
- monitor hard drive status, or anything else you need.
- The Watchdog Driver has one basic role: to talk to the card and send
- signals to it so it doesn't reset your computer ... at least during
- normal operation.
- The Watchdog Driver will automatically find your watchdog card, and will
- attach a running driver for use with that card. After the watchdog
- drivers have initialized, you can then talk to the card using the PC
- Watchdog program, available from http://ftp.bitgate.com/pcwd/.
- I suggest putting a "watchdog -d" before the beginning of an fsck, and
- a "watchdog -e -t 1" immediately after the end of an fsck. (Remember
- to run the program with an "&" to run it in the background!)
- If you want to write a program to be compatible with the PC Watchdog
- driver, simply do the following:
- -- Snippet of code --
- /*
- * Watchdog Driver Test Program
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <sys/ioctl.h>
- #include <linux/types.h>
- #include <linux/watchdog.h>
- int fd;
- /*
- * This function simply sends an IOCTL to the driver, which in turn ticks
- * the PC Watchdog card to reset its internal timer so it doesn't trigger
- * a computer reset.
- */
- void keep_alive(void)
- {
- int dummy;
- ioctl(fd, WDIOC_KEEPALIVE, &dummy);
- }
- /*
- * The main program. Run the program with "-d" to disable the card,
- * or "-e" to enable the card.
- */
- int main(int argc, char *argv[])
- {
- fd = open("/dev/watchdog", O_WRONLY);
- if (fd == -1) {
- fprintf(stderr, "Watchdog device not enabled.\n");
- fflush(stderr);
- exit(-1);
- }
- if (argc > 1) {
- if (!strncasecmp(argv[1], "-d", 2)) {
- ioctl(fd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD);
- fprintf(stderr, "Watchdog card disabled.\n");
- fflush(stderr);
- exit(0);
- } else if (!strncasecmp(argv[1], "-e", 2)) {
- ioctl(fd, WDIOC_SETOPTIONS, WDIOS_ENABLECARD);
- fprintf(stderr, "Watchdog card enabled.\n");
- fflush(stderr);
- exit(0);
- } else {
- fprintf(stderr, "-d to disable, -e to enable.\n");
- fprintf(stderr, "run by itself to tick the card.\n");
- fflush(stderr);
- exit(0);
- }
- } else {
- fprintf(stderr, "Watchdog Ticking Away!\n");
- fflush(stderr);
- }
- while(1) {
- keep_alive();
- sleep(1);
- }
- }
- -- End snippet --
- Other IOCTL functions include:
- WDIOC_GETSUPPORT
- This returns the support of the card itself. This
- returns in structure "PCWDS" which returns:
- options = WDIOS_TEMPPANIC
- (This card supports temperature)
- firmware_version = xxxx
- (Firmware version of the card)
- WDIOC_GETSTATUS
- This returns the status of the card, with the bits of
- WDIOF_* bitwise-anded into the value. (The comments
- are in linux/pcwd.h)
- WDIOC_GETBOOTSTATUS
- This returns the status of the card that was reported
- at bootup.
- WDIOC_GETTEMP
- This returns the temperature of the card. (You can also
- read /dev/watchdog, which gives a temperature update
- every second.)
- WDIOC_SETOPTIONS
- This lets you set the options of the card. You can either
- enable or disable the card this way.
- WDIOC_KEEPALIVE
- This pings the card to tell it not to reset your computer.
- And that's all she wrote!
- -- Ken Hollis
- (kenji@bitgate.com)
- (This documentation may be out of date. Check
- http://ftp.bitgate.com/pcwd/ for the absolute latest additions.)
|