Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 25 Nov 1996 18:01:49 +0000
From:      "Slavik Terletsky" <ts@polynet.lviv.ua>
To:        FreeBSD-hardware@FreeBSD.org
Subject:   Help: Watchdog Problem
Message-ID:  <199611251600.SAA08086@NetSurfer.lp.lviv.ua>

next in thread | raw e-mail | index | archive | help
Hi
I have PC (PCA-6157) with WatchDog Feature.
PC uses Pentium P54C type 75/90/100/120/133/150 MHz CPU and
82437FX "Triton" chipset,works with standard ISA and/or ISA/PCI bus.

WatchDog works this way:
The first time the watchdog-soft reads the ENABLE(0x443) port, it enables the
watchdog timer. After that the soft must read the ENABLE port at time interval
less then 1.6 sec, otherwise the watchdog timer will acvtivate and reset CPU.
To disable watchdog timer the soft shoud read DISABLE(0x043) port.

I'v written such soft (attached below) and seems it shoud work, but it don't.
Question: can anyone say how can i find out why FreeBSD and WatchDog
	conflicts? Maybe FreeBSD has some codes which read DISABLE port?
I'v checked kernel conf and there is no dev listed to read this port.

P.S. WatchDog works under DOS.

%%%%%%%%%%%%%%%%% CUT HERE %%%%%%%%%%%%%%%%%%%
#include <stdio.h>
#include <fcntl.h>
#include <signal.h>
#include <unistd.h>
#include <machine/cpufunc.h>

#define TIME	1
#define ENABLE 0x443
#define DISABLE 0x043

void disable();
extern int errno;

int pd;
FILE *fd;
unsigned char c;

int main(int argc, char *argv[]) {
 fd = fopen("/var/run/watchdog.pid","r");
 if(fd) {
 fprintf(stderr,"watchdog: /var/run/watchdog.pid: File exists\n");
 exit(1);
 }
 pd = open("/dev/io",O_RDONLY); /* allow i/o operations */
 if(pd < 0) {
 perror("watchdog: can't open /dev/io");
 exit(1);
 }
 fd = fopen("/var/run/watchdog.pid","w");
 if(!fd) {
 perror("watchdog: /var/run/watchdog.pid");
 exit(1);
 }
 switch(fork()) {
 case -1: /* fork() error */
  perror("watchdog");
  exit(1);
 case 0: /* child */
  fprintf(fd,"%d\n",(int)getpid());
  fclose(fd);
  (void)signal(SIGTERM,disable);
  while(1) {
   c = inbv(ENABLE);
   sleep(TIME);
  }
 default: /* parent */
  fprintf(stdout,"WatchDog Enabled\n");
  close(pd);
  fclose(fd);
  exit(0);
 }
}

void disable() { /* disable watchdog while exit */
c = inbv(DISABLE);
fprintf(stdout,"WatchDog Disabled\n");
if(unlink("/var/run/watchdog.pid") < 0) {
 perror("watchdog: /var/run/watchdog.pid");
 exit(1);
}
close(pd);
exit(0);
}
%%%%%%%%%%%%%%%%% CUT HERE %%%%%%%%%%%%%%%%%%%
# Slavik Terletsky      # University "Lvivska Poytechnika" #
# Network Administrator # mailto:ts@polynet.lviv.ua        #



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199611251600.SAA08086>