[5732] in Athena Bugs
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) */
/*