*BSD News Article 79614


Return to BSD News archive

Path: euryale.cc.adfa.oz.au!newshost.carno.net.au!harbinger.cc.monash.edu.au!nntp.coast.net!news.sprintlink.net!news-peer.sprintlink.net!news.mathworks.com!uunet!news-in2.uu.net!van-bc!unixg.ubc.ca!umelba.Triumf.CA!felawka
From: felawka@umelba.Triumf.CA (L. Felawka)
Newsgroups: comp.unix.bsd.freebsd.misc
Subject: Re: hardware woes: SCSI tape, floppy, and controllers
Date: 30 Sep 1996 19:39:05 GMT
Organization: TRIUMF
Lines: 113
Distribution: world
Message-ID: <52p7kp$abm@nntp.ucs.ubc.ca>
References: <DyJFpt.5DL@midway.uchicago.edu>
NNTP-Posting-Host: umelba.triumf.ca

 In article <DyJFpt.5DL@midway.uchicago.edu> Tim Pierce <twpierce+usenet@mail.bsd.uchicago.edu> writes:
 >Hi.

[ ... stuff deleted ... ]

 >
 >SCSI problems
 >

[ ... stuff deleted ... ]

Sorry, can't help here ...

 >
 >Floppy problems
 >
 >  This is probably my more serious immediate problem.  I have not
 >  had occasion to use the floppy drive (3.5", high density) in a
 >  very long time.  When trying to write a boot floppy:
 >
 >	% /usr/sbin/fdwrite -f boot.flp
 >
 >  ... the following messages appear on the console:
 >
 >	fdc0: input ready timeout
 >	fd0c: hard error writing fsbn 0 (No status)
 >	fdc0: direction bit not set
 >	fdc0: cmd c5 failed at out byte 1 of 9
 >	fd0c: hard error writing fsbn 0 of 0-17 (ST0 40<abnrml> ST1
 >		4<sec_not_fnd> ST2 10<wrong_cyl> cyl 0 hd 0 sec 1)
 >
 >  According to an article of J\"org Wunsch's in Deja News, the `no
 >  status' bit means that the drive doesn't recognize the floppy,
 >  and either the drive has ceased to generate index pulses or
 >  something equally catastrophic has occurred.  Is this an
 >  accurate summary of the problem?  Will it suffice to say that if
 >  I take the machine into the shop?

I had a similar problem with FreeBSD 2.1.0-RELEASE on a Pentium 133
(FreeBSD 2.1.0-RELEASE on a 486 gave me no floppy-related problems).

Does the drive work under DOS/Windows?  If so, it is probably usable
under FreeBSD.  The following fix worked for me (although J\"org says
that it probably just masks an underlying hardware problem).

_____
Larry

---------------------------------- cut here ---------------------------------
*** /sys/i386/isa/fd.c.orig	Sun Jun 11 12:31:19 1995
--- /sys/i386/isa/fd.c	Sat Aug 31 10:45:31 1996
***************
*** 896,902 ****
  in_fdc(fdcu_t fdcu)
  {
  	int baseport = fdc_data[fdcu].baseport;
! 	int i, j = 100000;
  	while ((i = inb(baseport+FDSTS) & (NE7_DIO|NE7_RQM))
  		!= (NE7_DIO|NE7_RQM) && j-- > 0)
  		if (i == NE7_RQM)
--- 896,902 ----
  in_fdc(fdcu_t fdcu)
  {
  	int baseport = fdc_data[fdcu].baseport;
! 	int i, j = 500000;
  	while ((i = inb(baseport+FDSTS) & (NE7_DIO|NE7_RQM))
  		!= (NE7_DIO|NE7_RQM) && j-- > 0)
  		if (i == NE7_RQM)
***************
*** 919,925 ****
  fd_in(fdcu_t fdcu, int *ptr)
  {
  	int baseport = fdc_data[fdcu].baseport;
! 	int i, j = 100000;
  	while ((i = inb(baseport+FDSTS) & (NE7_DIO|NE7_RQM))
  		!= (NE7_DIO|NE7_RQM) && j-- > 0)
  		if (i == NE7_RQM)
--- 919,925 ----
  fd_in(fdcu_t fdcu, int *ptr)
  {
  	int baseport = fdc_data[fdcu].baseport;
! 	int i, j = 500000;
  	while ((i = inb(baseport+FDSTS) & (NE7_DIO|NE7_RQM))
  		!= (NE7_DIO|NE7_RQM) && j-- > 0)
  		if (i == NE7_RQM)
***************
*** 946,957 ****
  	int i;
  
  	/* Check that the direction bit is set */
! 	i = 100000;
  	while ((inb(baseport+FDSTS) & NE7_DIO) && i-- > 0);
  	if (i <= 0) return fdc_err(fdcu, "direction bit not set\n");
  
  	/* Check that the floppy controller is ready for a command */
! 	i = 100000;
  	while ((inb(baseport+FDSTS) & NE7_RQM) == 0 && i-- > 0);
  	if (i <= 0) return fdc_err(fdcu, "output ready timeout\n");
  
--- 946,957 ----
  	int i;
  
  	/* Check that the direction bit is set */
! 	i = 500000;
  	while ((inb(baseport+FDSTS) & NE7_DIO) && i-- > 0);
  	if (i <= 0) return fdc_err(fdcu, "direction bit not set\n");
  
  	/* Check that the floppy controller is ready for a command */
! 	i = 500000;
  	while ((inb(baseport+FDSTS) & NE7_RQM) == 0 && i-- > 0);
  	if (i <= 0) return fdc_err(fdcu, "output ready timeout\n");
  
---------------------------------- cut here ---------------------------------