home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.unix.bsd
- Path: sparky!uunet!mcsun!sun4nl!fwi.uva.nl!vdlinden
- From: vdlinden@fwi.uva.nl (Frank van der Linden)
- Subject: patches for fd.c
- Message-ID: <1992Dec12.192754.5327@fwi.uva.nl>
- Summary: this works for me
- Keywords: additional fix for fd.c
- Sender: news@fwi.uva.nl
- Nntp-Posting-Host: carol.fwi.uva.nl
- Organization: FWI, University of Amsterdam
- Date: Sat, 12 Dec 1992 19:27:54 GMT
- Lines: 225
-
-
- Hi,
-
- There was a message recently in comp.unix.bsd about the floppy driver
- not being able to read 720K disks (Message by Jordan Hubbard I think).
- A reply by terry@icarus.weber.edu said that a patch for this already existed
- and would be part of the 386BSD interim release. (Patch by Per Ander Olausson).
- This patch fixes all problems except reading 360K floppies in 1.2M drives.
- This can be fixed by reading the value for 'double stepping' from the right
- place.Look around line 245:the old statement is between /* */.
- I fixed this problem and append the diffs for fd.c and mtools at the end of
- this message.
-
- Onno van der Linden c/o vdlinden@fwi.uva.nl
-
- # This is a shell archive. Save it in a file, remove anything before
- # this line, and then unpack it by entering "sh file". Note, it may
- # create directories; files and directories will be owned by you and
- # have default permissions.
- #
- # This archive contains:
- #
- # fd.dif
- # mtools.dif
- #
- echo x - fd.dif
- sed 's/^X//' >fd.dif << 'END-of-fd.dif'
- X*** fd.c.orig Mon Jun 29 06:25:24 1992
- X--- fd.c Sat Dec 12 16:07:17 1992
- X***************
- X*** 60,66 ****
- X #define b_cylin b_resid
- X #define b_step b_resid
- X #define FDBLK 512
- X! #define NUMTYPES 4
- X
- X struct fd_type {
- X int sectrac; /* sectors per track */
- X--- 60,66 ----
- X #define b_cylin b_resid
- X #define b_step b_resid
- X #define FDBLK 512
- X! #define NUMTYPES 5
- X
- X struct fd_type {
- X int sectrac; /* sectors per track */
- X***************
- X*** 76,81 ****
- X--- 76,82 ----
- X struct fd_type fd_types[NUMTYPES] = {
- X { 18,2,0xFF,0x1B,80,2880,1,0 }, /* 1.44 meg HD 3.5in floppy */
- X { 15,2,0xFF,0x1B,80,2400,1,0 }, /* 1.2 meg HD floppy */
- X+ { 9,2,0xFF,0x20,80,1440,1,2 }, /* 720k floppy in HD drive */
- X { 9,2,0xFF,0x23,40,720,2,1 }, /* 360k floppy in 1.2meg drive */
- X { 9,2,0xFF,0x2A,40,720,1,1 }, /* 360k floppy in DD drive */
- X };
- X***************
- X*** 211,218 ****
- X int unit, type, s;
- X
- X unit = FDUNIT(minor(bp->b_dev));
- X! /*type = FDTYPE(minor(bp->b_dev));*/
- X! type = fd_unit[unit].type;
- X
- X #ifdef FDTEST
- X printf("fdstrat%d, blk = %d, bcount = %d, addr = %x|",
- X--- 212,219 ----
- X int unit, type, s;
- X
- X unit = FDUNIT(minor(bp->b_dev));
- X! type = FDTYPE(minor(bp->b_dev));
- X! /*type = fd_unit[unit].type;*/
- X
- X #ifdef FDTEST
- X printf("fdstrat%d, blk = %d, bcount = %d, addr = %x|",
- X***************
- X*** 242,248 ****
- X }
- X bp->b_cylin = blknum / (fd_types[type].sectrac * 2);
- X dp = &fd_unit[unit].head;
- X! dp->b_step = (fd_types[fd_unit[unit].type].steptrac);
- X s = splbio();
- X disksort(dp, bp);
- X if (dp->b_active == 0) {
- X--- 243,250 ----
- X }
- X bp->b_cylin = blknum / (fd_types[type].sectrac * 2);
- X dp = &fd_unit[unit].head;
- X! /* dp->b_step = (fd_types[fd_unit[unit].type].steptrac); */
- X! dp->b_step = (fd_types[type].steptrac);
- X s = splbio();
- X disksort(dp, bp);
- X if (dp->b_active == 0) {
- X***************
- X*** 281,288 ****
- X int unit;
- X {
- X fd_unit[unit].motor = 0;
- X! if (unit) set_motor(0,0);
- X! else set_motor(1,0);
- X }
- X
- X fd_turnon(unit)
- X--- 283,289 ----
- X int unit;
- X {
- X fd_unit[unit].motor = 0;
- X! set_motor(unit,0);
- X }
- X
- X fd_turnon(unit)
- X***************
- X*** 327,339 ****
- X int flags;
- X {
- X int unit = FDUNIT(minor(dev));
- X! /*int type = FDTYPE(minor(dev));*/
- X int s;
- X
- X fdopenf = 1;
- X /* check bounds */
- X if (unit >= NFD) return(ENXIO);
- X! /*if (type >= NUMTYPES) return(ENXIO);*/
- X
- X /* Set proper disk type, only allow one type */
- X return 0;
- X--- 328,340 ----
- X int flags;
- X {
- X int unit = FDUNIT(minor(dev));
- X! int type = FDTYPE(minor(dev));
- X int s;
- X
- X fdopenf = 1;
- X /* check bounds */
- X if (unit >= NFD) return(ENXIO);
- X! if (type >= NUMTYPES) return(ENXIO);
- X
- X /* Set proper disk type, only allow one type */
- X return 0;
- X***************
- X*** 442,449 ****
- X dp = &fd_unit[fd_drive].head;
- X bp = dp->b_actf;
- X read = bp->b_flags & B_READ;
- X! /*ft = &fd_types[FDTYPE(bp->b_dev)];*/
- X! ft = &fd_types[fd_unit[fd_drive].type];
- X
- X switch (fd_state) {
- X case 1 : /* SEEK DONE, START DMA */
- X--- 443,450 ----
- X dp = &fd_unit[fd_drive].head;
- X bp = dp->b_actf;
- X read = bp->b_flags & B_READ;
- X! ft = &fd_types[FDTYPE(bp->b_dev)];
- X! /*ft = &fd_types[fd_unit[fd_drive].type];*/
- X
- X switch (fd_state) {
- X case 1 : /* SEEK DONE, START DMA */
- X***************
- X*** 470,476 ****
- X sec = blknum % (sectrac * 2);
- X head = sec / sectrac;
- X sec = sec % sectrac + 1;
- X! fd_hddrv = ((head&1)<<2)+fd_drive;
- X
- X if (read) out_fdc(NE7CMD_READ); /* READ */
- X else out_fdc(NE7CMD_WRITE); /* WRITE */
- X--- 471,478 ----
- X sec = blknum % (sectrac * 2);
- X head = sec / sectrac;
- X sec = sec % sectrac + 1;
- X!
- X! fd_hddrv = ((head&1)<<2)+fd_drive;
- X
- X if (read) out_fdc(NE7CMD_READ); /* READ */
- X else out_fdc(NE7CMD_WRITE); /* WRITE */
- END-of-fd.dif
- echo x - mtools.dif
- sed 's/^X//' >mtools.dif << 'END-of-mtools.dif'
- X*** devices.c.0_1 Sat Jun 27 23:05:01 1992
- X--- devices.c Sat Aug 29 18:59:22 1992
- X***************
- X*** 20,34 ****
- X #ifdef __386BSD__
- X struct device devices[] = {
- X {'A', "/dev/rfd0a", 0L, 12, 0, (int (*) ()) 0, 80, 2, 18}, /* 1.44m */
- X! {'A', "/dev/rfd0a", 0L, 12, 0, (int (*) ()) 0, 80, 2, 15}, /* 1.2m */
- X! {'A', "/dev/rfd0a", 0L, 12, 0, (int (*) ()) 0, 80, 2, 9}, /* 720k */
- X! {'A', "/dev/rfd0a", 0L, 12, 0, (int (*) ()) 0, 40, 2, 9}, /* 360k */
- X! {'A', "/dev/rfd0a", 0L, 12, 0, (int (*) ()) 0, 40, 2, 8}, /* 320k */
- X {'B', "/dev/rfd1a", 0L, 12, 0, (int (*) ()) 0, 80, 2, 18}, /* 1.44m */
- X! {'B', "/dev/rfd1a", 0L, 12, 0, (int (*) ()) 0, 80, 2, 15}, /* 1.2m */
- X! {'B', "/dev/rfd1a", 0L, 12, 0, (int (*) ()) 0, 80, 2, 9}, /* 720k */
- X! {'B', "/dev/rfd1a", 0L, 12, 0, (int (*) ()) 0, 40, 2, 9}, /* 360k */
- X! {'B', "/dev/rfd1a", 0L, 12, 0, (int (*) ()) 0, 40, 2, 8}, /* 320k */
- X {'\0', (char *) NULL, 0L, 0, 0, (int (*) ()) 0, 0, 0, 0}
- X };
- X #endif /* __386BSD__ */
- X--- 20,36 ----
- X #ifdef __386BSD__
- X struct device devices[] = {
- X {'A', "/dev/rfd0a", 0L, 12, 0, (int (*) ()) 0, 80, 2, 18}, /* 1.44m */
- X! {'A', "/dev/rfd0b", 0L, 12, 0, (int (*) ()) 0, 80, 2, 15}, /* 1.2m */
- X! {'A', "/dev/rfd0c", 0L, 12, 0, (int (*) ()) 0, 80, 2, 9}, /* 720k */
- X! {'A', "/dev/rfd0d", 0L, 12, 0, (int (*) ()) 0, 40, 2, 9}, /* 360k */
- X! {'A', "/dev/rfd0e", 0L, 12, 0, (int (*) ()) 0, 40, 2, 9}, /* 360k */
- X! {'A', "/dev/rfd0f", 0L, 12, 0, (int (*) ()) 0, 40, 2, 8}, /* 320k */
- X {'B', "/dev/rfd1a", 0L, 12, 0, (int (*) ()) 0, 80, 2, 18}, /* 1.44m */
- X! {'B', "/dev/rfd1b", 0L, 12, 0, (int (*) ()) 0, 80, 2, 15}, /* 1.2m */
- X! {'B', "/dev/rfd1c", 0L, 12, 0, (int (*) ()) 0, 80, 2, 9}, /* 720k */
- X! {'B', "/dev/rfd1d", 0L, 12, 0, (int (*) ()) 0, 40, 2, 9}, /* 360k */
- X! {'B', "/dev/rfd1e", 0L, 12, 0, (int (*) ()) 0, 40, 2, 9}, /* 360k */
- X! {'B', "/dev/rfd1f", 0L, 12, 0, (int (*) ()) 0, 40, 2, 8}, /* 320k */
- X {'\0', (char *) NULL, 0L, 0, 0, (int (*) ()) 0, 0, 0, 0}
- X };
- X #endif /* __386BSD__ */
- END-of-mtools.dif
- exit
-
- --
- Frank van der Linden. Internet : vdlinden@fwi.uva.nl
- * WARNING ---- The author of this message has once seen some AT&T Unix source *
- * code, so now this message is probably copyrighted by them! You have been *
- * reading this entirely at your own risk.. *
-