[5732] in Athena Bugs

home help back first fref pref prev next nref lref last post

Changes required for M38 floppies to work

daemon@ATHENA.MIT.EDU (epeisach@ATHENA.MIT.EDU)
Tue Aug 14 18:14:37 1990

From: epeisach@ATHENA.MIT.EDU
Date: Tue, 14 Aug 90 18:14:13 -0400
To: bugs@ATHENA.MIT.EDU
Cc: mar@ATHENA.MIT.EDU


I'm sending these in to ensure they are not lost by accident. The
changes appears to work in reading and writing to floppy. Double density
disk tests (readonly) still need to be performed, but I believe the code
should work.

MAKEDEV changes will follow tomorrow.

Hint: The select_timer2 is disabled for the floppy as in the CD-ROM -
this prevented recovery if the floppy was removed while in use or if
there was an I/O error.

	Ezra

RCS file: RCS/scsi.c,v
retrieving revision 1.1
diff -c -r1.1 scsi.c
*** /tmp/,RCSt1027282	Tue Aug 14 18:10:11 1990
--- scsi.c	Fri Aug 10 12:44:01 1990
***************
*** 376,381 ****
--- 376,382 ----
  	 * RZ22  1.0 / (60 * 33 * 256) (max data per one revolution)
  	 * RZ23  1.0 / (60 * 33 * 256) (max data per one revolution)
  	 * RZ55  1.0 / (60 * 36 * 256) (max data per one revolution)
+ 	 * RX23  1.0 / (5 * 18 * 256) (changed by drived for low density)
  	 * RRD40 176.4 Kilobytes/second from spec
  	 * NOTE: RZxx (non-DEC disk) has no iostat support.
  	 */
***************
*** 389,394 ****
--- 390,397 ----
  		dk_mspw[ui->ui_dk] = 0.0000018;
  	    else if (sc->sc_devtyp[ui->ui_slave] == RRD40)
  		dk_mspw[ui->ui_dk] = 0.0000113;
+ 	    else if (sc->sc_devtyp[ui->ui_slave] == RX23)
+ 		dk_mspw[ui->ui_dk] = 0.0000434;
  	    else {		/* includes RZxx (non-DEC disk) */
  		sc->sc_dkn[ui->ui_slave] = -1;
  		dk_mspw[ui->ui_dk] = 0.0;
***************
*** 605,610 ****
--- 608,615 ----
  			else {		/* DISK or CDROM */
  			    /* CDROM works with setting pf bit */
  			    sc->sz_modsel.pf = sz_bp_pf;
+ 			    if(sc->sc_devtyp[targid] == RX23) 
+ 				sc->sz_modsel.pf = 1;
  			    sc->sz_modsel.pll = 12;
  			    sc->sz_modsel.rdeclen = 8;
  			    i = 512;	/* reclen really means LBN size */
===================================================================
RCS file: RCS/scsi_5380.c,v
retrieving revision 1.1
diff -c -r1.1 scsi_5380.c
*** /tmp/,RCSt1027282	Tue Aug 14 18:10:18 1990
--- scsi_5380.c	Sat Aug 11 15:10:41 1990
***************
*** 543,548 ****
--- 543,562 ----
  				break;
  			}
  
+ 			/* NOTE: original DEC way */
+ 			p1 = "RX23 DEC TM             ";
+ 			/* NOTE: current DEC way */
+ 			p2 = "DEC     RX23     (C) DEC";
+ 			/* NOTE: vendor's way */
+ 			if (!sz_strncmp(p2, sc->sc_devnam[targid], SZ_DNSIZE)) {
+ 				bcopy(DEV_RX23, sc->sc_device[targid],
+ 				    strlen(DEV_RX23));
+ 				sc->sc_devtyp[targid] = RX23;
+ 				sc->sc_dstp[targid] = sz_rx23_sizes;
+ 				break;
+ 			}
+ 
+ 
  			/* non-DEC disk (do the best we can) */
  			bcopy("RZxx", sc->sc_device[targid], 4);
  			sc->sc_devtyp[targid] = RZxx;
***************
*** 1222,1228 ****
  	     * Which disks? RZ22/23 do. Don't know about RZ55.
  	     * Do this at all? Use command timeout instead?
  	     */
! 	    if (sc->sc_devtyp[targid] & SZ_DISK) {
  		timeout(sz_timer2, (caddr_t)unit, hz*4);
  		sc->sc_szflags[targid] |= SZ_TIMERON;
  	    }
--- 1236,1242 ----
  	     * Which disks? RZ22/23 do. Don't know about RZ55.
  	     * Do this at all? Use command timeout instead?
  	     */
! 	    if (sc->sc_devtyp[targid] & SZ_DISK && sc->sc_devtyp[targid] != RX23) {
  		timeout(sz_timer2, (caddr_t)unit, hz*4);
  		sc->sc_szflags[targid] |= SZ_TIMERON;
  	    }
===================================================================
RCS file: RCS/scsi_data.c,v
retrieving revision 1.1
diff -c -r1.1 scsi_data.c
*** /tmp/,RCSt1027282	Tue Aug 14 18:10:25 1990
--- scsi_data.c	Fri Aug 10 10:24:57 1990
***************
*** 210,215 ****
--- 210,224 ----
  	0,	0,
  	0,	0,
  	0,	0,
+ }, sz_rx23_sizes[8] = {
+ 	-1,	0,		/* A=blk 0 thru end (2879 for hi density) */
+ 	0,	0,
+ 	-1,	0,		/* C=blk 0 thru end (2879 for hi density) */
+ 	0,	0,
+ 	0,	0,
+ 	0,	0,
+ 	0,	0,
+ 	0,	0,
  };
  /* END OF STUFF WHICH SHOULD BE READ IN PER DISK */
  int	nNSCSI = NSCSI;
***************
*** 222,227 ****
--- 231,237 ----
  extern	int	sz_wait_for_devices;
  extern 	int	sz_reset_width;
  extern 	struct	sizes	sz_rz22_sizes[8];
+ extern 	struct	sizes	sz_rx23_sizes[8];
  extern 	struct	sizes	sz_rz23_sizes[8];
  extern 	struct	sizes	sz_rz55_sizes[8];
  extern 	struct	sizes	sz_rzxx_sizes[8];
===================================================================
RCS file: RCS/scsi_disk.c,v
retrieving revision 1.1
diff -c -r1.1 scsi_disk.c
*** /tmp/,RCSt1027282	Tue Aug 14 18:10:26 1990
--- scsi_disk.c	Fri Aug 10 12:47:58 1990
***************
*** 307,313 ****
--- 307,328 ----
  		    return(EIO);
  		}
  	    }
+ 	    /*
+ 	     * Set the milliseconds per word transfer rate for the
+ 	     * RX23/33 SCSI floppy depending on the media size.
+ 	     * RX23: If size = 2880 (1.44MB) then the floppy is 18 sector
+ 	     * otherwise assume the floppy is 9 sector.
+ 	     * RX33: If size = 2400 (1.2MB) then the floppy is 15 sector
+ 	     * otherwise assume the floppy is 10 sector.
+ 	     */
+ 	    if (sc->sc_devtyp[targid] == RX23) {
+ 		if (sc->sc_disksize[targid] == 2880)
+ 		    dk_mspw[ui->ui_dk] = 0.0000434;
+ 		else
+ 		    dk_mspw[ui->ui_dk] = 0.0000868;
+ 	    }
  	}
+ 	    
  	/* NOTE: set for debug, but not used */
  	sc->sc_openf[targid] = 1;
  #ifdef notdef
===================================================================
RCS file: RCS/scsi_sii.c,v
retrieving revision 1.1
diff -c -r1.1 scsi_sii.c
*** /tmp/,RCSt1027282	Tue Aug 14 18:10:30 1990
--- scsi_sii.c	Fri Aug 10 11:45:15 1990
***************
*** 386,391 ****
--- 386,403 ----
  				sc->sc_dstp[targid] = sz_rz23_sizes;
  				break;
  			}
+ 			/* TODO: original DEC way */
+ 			p1 = "RX23 DEC TM             ";
+ 			/* TODO: current DEC way */
+ 			p2 = "DEC     RX23     (C) DEC";
+ 			if (!sz_strncmp(p1, sc->sc_devnam[targid], SZ_DNSIZE) ||
+ 			    !sz_strncmp(p2, sc->sc_devnam[targid], SZ_DNSIZE)){
+ 				bcopy(DEV_RX23, sc->sc_device[targid],
+ 				    strlen(DEV_RX23));
+ 				sc->sc_devtyp[targid] = RX23;
+ 				sc->sc_dstp[targid] = sz_rx23_sizes;
+ 				break;
+ 			}
  			/* TODO: WAG for MAXtor XT-4380S drive */
  			/* TODO: original DEC way */
  			p1 = "RZ55 DEC TM             ";
===================================================================
RCS file: RCS/scsireg.h,v
retrieving revision 1.1
diff -c -r1.1 scsireg.h
*** /tmp/,RCSt1027282	Tue Aug 14 18:10:34 1990
--- scsireg.h	Fri Aug 10 11:33:49 1990
***************
*** 141,146 ****
--- 141,147 ----
  #define	RZ23		0x40000008	/* RZ23 100 MB winchester disk */
  #define	RZ55		0x40000010	/* RZ55 300+ MB winchester disk */
  #define	RZxx		0x40000020	/* RZxx non-DEC disk (may[not] work) */
+ #define	RX23		0x40000080	/* RX23 3.5" 1.4MB SCSI floppy disk */
  #define	RRD40		0x20000040	/* RRD40 CDROM (optical disk) */
  
  /*

home help back first fref pref prev next nref lref last post