Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 9 May 2013 02:00:01 GMT
From:      Eitan Adler <lists@eitanadler.com>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: bin/174711: [fdc] Floppy drive 5.25" 360Kb bug.
Message-ID:  <201305090200.r49201hq013761@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/174711; it has been noted by GNATS.

From: Eitan Adler <lists@eitanadler.com>
To: bug-followup <bug-followup@freebsd.org>
Cc:  
Subject: Re: bin/174711: [fdc] Floppy drive 5.25" 360Kb bug.
Date: Wed, 8 May 2013 21:54:47 -0400

 ---------- Forwarded message ----------
 From: Emil Mamedov <emil80386@yahoo.com>
 Date: 7 May 2013 11:30
 Subject: Re: bin/174711: [fdc] Floppy drive 5.25" 360Kb bug.
 To: freebsd-bugs@freebsd.org
 
 
 The following reply was made to PR bin/174711; it has been noted by GNATS.
 
 From: Emil Mamedov <emil80386@yahoo.com>
 To: FreeBSD-gnats-submit@FreeBSD.org, freebsd-i386@FreeBSD.org
 Cc:
 Subject: Re: bin/174711: [fdc] Floppy drive 5.25" 360Kb bug.
 Date: Tue, 7 May 2013 08:26:57 -0700 (PDT)
 
  My previous tarball has been corrupted and I've attached
  floppy-diff files to message body:
 
  --- fdc.c.org  2012-03-03 06:15:13.000000000 +0000
  +++ fdc.c      2013-01-21 23:18:14.000000000 +0000
  @@ -136,33 +136,35 @@
    */
 
   static struct fd_type fd_searchlist_360k[] = {
  -      { FDF_5_360 },
  +      { FDD_5_360 | FL_AUTO},
  +      { FDD_5_180 | FL_AUTO},
         { 0 }
   };
 
   static struct fd_type fd_searchlist_12m[] = {
  -      { FDF_5_1200 | FL_AUTO },
  -      { FDF_5_360 | FL_2STEP | FL_AUTO},
  +      { FHD_5_1200 | FL_AUTO },
  +      { FHD_5_360  | FL_2STEP | FL_AUTO},
  +      { FHD_5_180  | FL_2STEP | FL_AUTO},
         { 0 }
   };
 
   static struct fd_type fd_searchlist_720k[] = {
  -      { FDF_3_720 },
  +      { FHD_3_720 },
         { 0 }
   };
 
   static struct fd_type fd_searchlist_144m[] = {
  -      { FDF_3_1440 | FL_AUTO},
  -      { FDF_3_720 | FL_AUTO},
  +      { FHD_3_1440 | FL_AUTO},
  +      { FHD_3_720  | FL_AUTO},
         { 0 }
   };
 
   static struct fd_type fd_searchlist_288m[] = {
  -      { FDF_3_1440 | FL_AUTO },
  +      { FHD_3_1440 | FL_AUTO },
   #if 0
  -      { FDF_3_2880 | FL_AUTO }, /* XXX: probably doesn't work */
  +      { FHD_3_2880 | FL_AUTO }, /* XXX: probably doesn't work */
   #endif
  -      { FDF_3_720 | FL_AUTO},
  +      { FHD_3_720 | FL_AUTO},
         { 0 }
   };
 
  @@ -297,7 +299,7 @@
   fdprinttype(struct fd_type *ft)
   {
 
  -      printf("(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,0x%x)",
  +      printf("(%d,%d,0x%x,0x%x,%d,%d,%d,%d,0x%x,%d,%d,0x%x)\n",
             ft->sectrac, ft->secsize, ft->datalen, ft->gap, ft->tracks,
             ft->size, ft->trans, ft->heads, ft->f_gap, ft->f_inter,
             ft->offset_side2, ft->flags);
  @@ -856,7 +858,8 @@
                 return (fdc_biodone(fdc, ENXIO));
 
         /* Check if we lost our media */
  -      if (fdin_rd(fdc) & FDI_DCHG) {
  +      if ((fdin_rd(fdc) & FDI_DCHG) &&
  +          !(device_get_flags(fd->dev) & FD_NO_CHLINE)) {
                 if (debugflags & 0x40)
                         printf("Lost disk\n");
                 mtx_lock(&fdc->fdc_mtx);
  @@ -884,7 +887,7 @@
 
         mfm = (fd->ft->flags & FL_MFM)? NE7CMD_MFM: 0;
         steptrac = (fd->ft->flags & FL_2STEP)? 2: 1;
  -      i = fd->ft->sectrac * fd->ft->heads;
  +      i = fd->ft->sectrac * fd->ft->heads; //sectors per cyl
         cylinder = bp->bio_pblkno / i;
         descyl = cylinder * steptrac;
         sec = bp->bio_pblkno % i;
  @@ -928,6 +931,22 @@
          * Enhanced controllers do implied seeks for read&write as long as
          * we do not need multiple steps per track.
          */
  +       /* But if DD diskette in HD FDD then disable do implied seek */
  +      if (fdc->fdct == FDC_ENHANCED) {
  +      int imp_seek;
  +          if (fd->ft->flags & FL_2STEP) imp_seek = 0x00;
  +          else  imp_seek = 0x40;
  +          if (fdc_cmd(fdc, 4,
  +                  I8207X_CONFIG,
  +                  0,
  +                  imp_seek |          /* Disable/Enable  Implied Seek */
  +                  0x10 |                      /* Polling disabled */
  +                  (fifo_threshold - 1),       /* Fifo threshold */
  +                  0x00,                       /* Precomp track */
  +                  0))
  +                      device_printf(fdc->fdc_dev,
  +                          " CONFIGURE failed\n");
  +              }
         if (cylinder != fd->track && (
             fdc->fdct != FDC_ENHANCED ||
             descyl != cylinder ||
  @@ -1229,7 +1248,9 @@
         if (fdc_sense_int(fdc, &st0, &cyl) == FD_NOT_VALID)
                 goto done;      /* XXX */
         *recal |= (1 << fd->fdsu);
  -      if (fdin_rd(fdc) & FDI_DCHG) {
  +
  +      if ((fdin_rd(fdc) & FDI_DCHG) &&
  +          !(device_get_flags(fd->dev) & FD_NO_CHLINE)) {
                 if (debugflags & 0x40)
                         printf("Empty in probe\n");
                 mtx_lock(&fdc->fdc_mtx);
  @@ -1238,8 +1259,8 @@
         } else {
                 if (fdc_sense_drive(fdc, &st3) != 0)
                         goto done;
  -              if (debugflags & 0x40)
  -                      printf("Got disk in probe\n");
  +//            if (debugflags & 0x40)
  +//                    printf("Got disk in probe\n");
                 mtx_lock(&fdc->fdc_mtx);
                 fd->flags &= ~FD_EMPTY;
                 if (st3 & NE7_ST3_WP)
  @@ -1341,37 +1362,61 @@
          * Stepping to cylinder 2 has the side-effect of clearing the
          * unit attention bit.
          */
  -      oopts = fd->options;
  +      oopts = fd->options;    //Saving drive options
         fd->options |= FDOPT_NOERRLOG | FDOPT_NORETRY;
  -      for (; fdtp->heads; fdtp++) {
  -              fdsettype(fd, fdtp);
  +      for (; fdtp->heads; fdtp++) { //increment drive type from search list
  +              fdsettype(fd, fdtp);  //set drive type
 
                 id.cyl = id.head = 0;
  -              rv = fdmisccmd(fd, BIO_RDID, &id);
  -              if (rv != 0)
  -                      continue;
  -              if (id.cyl != 0 || id.head != 0 || id.secshift != fdtp->secsize)
  +              rv = fdmisccmd(fd, BIO_RDID, &id);  //reading cyl0, head0
  +              if (rv != 0)  //if error -> next iteration
                         continue;
  +              if (id.cyl != 0 || id.head != 0 ||
  +                  id.secshift != fdtp->secsize)
  +                      continue; //if unexpected type  -> next iteration
                 id.cyl = 2;
  -              id.head = fd->ft->heads - 1;
  +              id.head = fd->ft->heads - 1; //get max head number for
  +                                          // expected media type(0 or 1)
                 rv = fdmisccmd(fd, BIO_RDID, &id);
  -              if (id.cyl != 2 || id.head != fdtp->heads - 1 ||
  +                  if (id.cyl != 2 || id.head != fdtp->heads - 1 ||
                     id.secshift != fdtp->secsize)
  -                      continue;
  -              if (rv == 0)
  +                      continue; //if unexpected type  -> next iteration
  +              if (rv == 0) //if no errors -> exit from cycle
                         break;
         }
 
  -      fd->options = oopts;
  +    /* trying get sectors per track
  +      searching max sector number */
  +      int i ;
  +      int spt = 0;
  +      for (i=1; i <= fd->ft->sectrac; i++) {
  +      id.cyl = id.head = 0;
  +      rv = fdmisccmd(fd, BIO_RDID, &id);  //reading cyl0, head0
  +      if (rv != 0)  //if error -> next iteration
  +                      continue;
  +      if (id.sec > spt)
  +              spt=id.sec;
  +          }
  +          if (debugflags & 0x40) {
  +              if (spt == 0)
  +                  device_printf(fd->dev, "No media in drive or media
 without format\n");
  +              else
  +                  device_printf(fd->dev, "Sectors per track = %d\n", spt);
  +                  }
  +
  +      fd->options = oopts;    //Restoring drive options
         if (fdtp->heads == 0) {
                 if (debugflags & 0x40)
                         device_printf(fd->dev, "autoselection failed\n");
                 fdsettype(fd, fd_native_types[fd->type]);
                 return (-1);
         } else {
  +              fd->ft->sectrac = spt;
  +              fd->ft->size = spt * fd->ft->heads * fd->ft->tracks ;
                 if (debugflags & 0x40) {
                         device_printf(fd->dev,
  -                          "autoselected %d KB medium\n", fd->ft->size / 2);
  +          "autoselected %d KB medium\n",
  +              (128 << fd->ft->secsize) * fd->ft->size / 1024 );
                         fdprinttype(fd->ft);
                 }
                 return (0);
  @@ -1710,8 +1755,7 @@
                 break;
         case 0x81:
         case 0x90:
  -              device_set_desc(dev,
  -                  "Enhanced floppy controller");
  +              device_set_desc(dev, "Enhanced floppy controller");
                 fdc->fdct = FDC_ENHANCED;
                 break;
         default:
 
 
  --- fdcio.h.org        2012-03-03 06:15:13.000000000 +0000
  +++ fdcio.h    2012-01-17 21:23:37.000000000 +0000
  @@ -181,46 +181,53 @@
    * XXX: should have been done 20 years ago to make sense.
    */
   #ifdef PC98
  -#define FDF_3_1722 21,2,0xFF,0x04,82,0,2,2,0x0C,2,0,FL_MFM
  -#define FDF_3_1476 18,2,0xFF,0x1B,82,0,2,2,0x54,1,0,FL_MFM
  -#define FDF_3_1440 18,2,0xFF,0x1B,80,0,2,2,0x54,1,0,FL_MFM
  -#define FDF_3_1200 15,2,0xFF,0x1B,80,0,0,2,0x54,1,0,FL_MFM
  -#define FDF_3_820  10,2,0xFF,0x10,82,0,1,2,0x30,1,0,FL_MFM
  -#define FDF_3_800  10,2,0xFF,0x10,80,0,1,2,0x30,1,0,FL_MFM
  -#define FDF_3_720   9,2,0xFF,0x20,80,0,1,2,0x50,1,0,FL_MFM
  -#define FDF_3_360   9,2,0xFF,0x20,40,0,1,2,0x50,1,0,FL_MFM|FL_2STEP
  -#define FDF_3_640   8,2,0xFF,0x2A,80,0,1,2,0x50,1,0,FL_MFM
  -#define FDF_3_1230  8,3,0xFF,0x35,77,0,0,2,0x74,1,0,FL_MFM
  -#define FDF_3_1280  8,3,0xFF,0x35,80,0,0,2,0x74,1,0,FL_MFM
  -#define FDF_3_1480  9,3,0xFF,0x35,82,0,0,2,0x47,1,0,FL_MFM
  -#define FDF_3_1640 10,3,0xFF,0x1B,82,0,2,2,0x54,1,0,FL_MFM
  -#define FDF_5_1200 15,2,0xFF,0x1B,80,0,0,2,0x54,1,0,FL_MFM
  -#define FDF_5_820  10,2,0xFF,0x10,82,0,1,2,0x30,1,0,FL_MFM
  -#define FDF_5_800  10,2,0xFF,0x10,80,0,1,2,0x30,1,0,FL_MFM
  -#define FDF_5_720   9,2,0xFF,0x20,80,0,1,2,0x50,1,0,FL_MFM
  -#define FDF_5_360   9,2,0xFF,0x20,40,0,1,2,0x50,1,0,FL_MFM|FL_2STEP
  -#define FDF_5_640   8,2,0xFF,0x2A,80,0,1,2,0x50,1,0,FL_MFM
  -#define FDF_5_1230  8,3,0xFF,0x35,77,0,0,2,0x74,1,0,FL_MFM
  -#define FDF_5_1280  8,3,0xFF,0x35,80,0,0,2,0x74,1,0,FL_MFM
  +#define FHD_3_1722 21,2,0xFF,0x04,82,0,2,2,0x0C,2,0,FL_MFM
  +#define FHD_3_1476 18,2,0xFF,0x1B,82,0,2,2,0x54,1,0,FL_MFM
  +#define FHD_3_1440 18,2,0xFF,0x1B,80,0,2,2,0x54,1,0,FL_MFM
  +#define FHD_3_1200 15,2,0xFF,0x1B,80,0,0,2,0x54,1,0,FL_MFM
  +#define FHD_3_820  10,2,0xFF,0x10,82,0,1,2,0x30,1,0,FL_MFM
  +#define FHD_3_800  10,2,0xFF,0x10,80,0,1,2,0x30,1,0,FL_MFM
  +#define FHD_3_720   9,2,0xFF,0x20,80,0,1,2,0x50,1,0,FL_MFM
  +#define FHD_3_360   9,2,0xFF,0x20,40,0,1,2,0x50,1,0,FL_MFM|FL_2STEP
  +#define FHD_3_640   8,2,0xFF,0x2A,80,0,1,2,0x50,1,0,FL_MFM
  +#define FHD_3_1230  8,3,0xFF,0x35,77,0,0,2,0x74,1,0,FL_MFM
  +#define FHD_3_1280  8,3,0xFF,0x35,80,0,0,2,0x74,1,0,FL_MFM
  +#define FHD_3_1480  9,3,0xFF,0x35,82,0,0,2,0x47,1,0,FL_MFM
  +#define FHD_3_1640 10,3,0xFF,0x1B,82,0,2,2,0x54,1,0,FL_MFM
  +#define FHD_5_1200 15,2,0xFF,0x1B,80,0,0,2,0x54,1,0,FL_MFM
  +#define FHD_5_820  10,2,0xFF,0x10,82,0,1,2,0x30,1,0,FL_MFM
  +#define FHD_5_800  10,2,0xFF,0x10,80,0,1,2,0x30,1,0,FL_MFM
  +#define FHD_5_720   9,2,0xFF,0x20,80,0,1,2,0x50,1,0,FL_MFM
  +#define FHD_5_360   9,2,0xFF,0x20,40,0,1,2,0x50,1,0,FL_MFM|FL_2STEP
  +#define FHD_5_640   8,2,0xFF,0x2A,80,0,1,2,0x50,1,0,FL_MFM
  +#define FHD_5_1230  8,3,0xFF,0x35,77,0,0,2,0x74,1,0,FL_MFM
  +#define FHD_5_1280  8,3,0xFF,0x35,80,0,0,2,0x74,1,0,FL_MFM
   #else /* PC98 */
  -#define FDF_3_2880 36,2,0xFF,0x1B,80,0,FDC_1MBPS,002,0x4C,1,1,FL_MFM|FL_PERPND
  -#define FDF_3_1722 21,2,0xFF,0x04,82,0,FDC_500KBPS,2,0x0C,2,0,FL_MFM
  -#define FDF_3_1476 18,2,0xFF,0x1B,82,0,FDC_500KBPS,2,0x6C,1,0,FL_MFM
  -#define FDF_3_1440 18,2,0xFF,0x1B,80,0,FDC_500KBPS,2,0x6C,1,0,FL_MFM
  -#define FDF_3_1200 15,2,0xFF,0x1B,80,0,FDC_500KBPS,2,0x54,1,0,FL_MFM
  -#define FDF_3_820  10,2,0xFF,0x10,82,0,FDC_250KBPS,2,0x2e,1,0,FL_MFM
  -#define FDF_3_800  10,2,0xFF,0x10,80,0,FDC_250KBPS,2,0x2e,1,0,FL_MFM
  -#define FDF_3_720   9,2,0xFF,0x20,80,0,FDC_250KBPS,2,0x50,1,0,FL_MFM
  -#define FDF_5_1480 18,2,0xFF,0x02,82,0,FDC_500KBPS,2,0x02,2,0,FL_MFM
  -#define FDF_5_1440 18,2,0xFF,0x02,80,0,FDC_500KBPS,2,0x02,2,0,FL_MFM
  -#define FDF_5_1230  8,3,0xFF,0x35,77,0,FDC_500KBPS,2,0x74,1,0,FL_MFM
  -#define FDF_5_1200 15,2,0xFF,0x1B,80,0,FDC_500KBPS,2,0x54,1,0,FL_MFM
  -#define FDF_5_820  10,2,0xFF,0x10,82,0,FDC_300KBPS,2,0x2e,1,0,FL_MFM
  -#define FDF_5_800  10,2,0xFF,0x10,80,0,FDC_300KBPS,2,0x2e,1,0,FL_MFM
  -#define FDF_5_720   9,2,0xFF,0x20,80,0,FDC_300KBPS,2,0x50,1,0,FL_MFM
  -#define FDF_5_640   8,2,0xFF,0x2A,80,0,FDC_300KBPS,2,0x50,1,0,FL_MFM
  -#define FDF_5_360   9,2,0xFF,0x23,40,0,FDC_300KBPS,2,0x50,1,0,FL_MFM
  -/* XXX:                      0x2a ? */
  +
  +          /* HD floppy drive */
  +#define FHD_3_2880 36,2,0xFF,0x1B,80,0,FDC_1MBPS,002,0x4C,1,1,FL_MFM|FL_PERPND
  +#define FHD_3_1722 21,2,0xFF,0x04,82,0,FDC_500KBPS,2,0x0C,2,0,FL_MFM
  +#define FHD_3_1476 18,2,0xFF,0x1B,82,0,FDC_500KBPS,2,0x6C,1,0,FL_MFM
  +#define FHD_3_1440 18,2,0xFF,0x1B,80,0,FDC_500KBPS,2,0x6C,1,0,FL_MFM
  +#define FHD_3_1200 15,2,0xFF,0x1B,80,0,FDC_500KBPS,2,0x54,1,0,FL_MFM
  +#define FHD_3_820  10,2,0xFF,0x10,82,0,FDC_250KBPS,2,0x2e,1,0,FL_MFM
  +#define FHD_3_800  10,2,0xFF,0x10,80,0,FDC_250KBPS,2,0x2e,1,0,FL_MFM
  +#define FHD_3_720   9,2,0xFF,0x20,80,0,FDC_250KBPS,2,0x50,1,0,FL_MFM
  +#define FHD_5_1480 18,2,0xFF,0x02,82,0,FDC_500KBPS,2,0x02,2,0,FL_MFM
  +#define FHD_5_1440 18,2,0xFF,0x02,80,0,FDC_500KBPS,2,0x02,2,0,FL_MFM
  +#define FHD_5_1230  8,3,0xFF,0x35,77,0,FDC_500KBPS,2,0x74,1,0,FL_MFM
  +#define FHD_5_1200 15,2,0xFF,0x1B,80,0,FDC_500KBPS,2,0x54,1,0,FL_MFM
  +#define FHD_5_820  10,2,0xFF,0x10,82,0,FDC_300KBPS,2,0x2e,1,0,FL_MFM
  +#define FHD_5_800  10,2,0xFF,0x10,80,0,FDC_300KBPS,2,0x2e,1,0,FL_MFM
  +#define FHD_5_720   9,2,0xFF,0x20,80,0,FDC_300KBPS,2,0x50,1,0,FL_MFM
  +#define FHD_5_640   8,2,0xFF,0x2A,80,0,FDC_300KBPS,2,0x50,1,0,FL_MFM
  +#define FHD_5_360   9,2,0xFF,0x23,40,0,FDC_300KBPS,2,0x50,1,0,FL_MFM|FL_2STEP
  +#define FHD_5_180   9,2,0xFF,0x23,40,0,FDC_300KBPS,1,0x50,1,0,FL_MFM|FL_2STEP
  +          /* DD floppy drive */
  +#define FDD_5_360   9,2,0xFF,0x2A,40,0,FDC_250KBPS,2,0x50,1,0,FL_MFM
  +#define FDD_5_180   9,2,0xFF,0x2A,40,0,FDC_250KBPS,1,0x50,1,0,FL_MFM
  +#define FDD_5_320   8,2,0xFF,0x2A,40,0,FDC_250KBPS,2,0x50,1,0,FL_MFM
  +#define FDD_5_160   8,2,0xFF,0x2A,40,0,FDC_250KBPS,1,0x50,1,0,FL_MFM
   #endif
 
   #endif /* !_MACHINE_IOCTL_FD_H_ */
 
 
  --- fdcontrol.c.org    2012-03-03 06:15:13.000000000 +0000
  +++ fdcontrol.c        2013-01-23 22:41:34.000000000 +0000
  @@ -41,7 +41,7 @@
   #include "fdutil.h"
 
 
  -static        int format, verbose, show = 1, showfmt;
  +static        int format = 0, verbose =0 , show = 1, showfmt = 0;
   static        char *fmtstring;
 
   static void showdev(enum fd_drivetype, const char *);
  @@ -51,7 +51,7 @@
   usage(void)
   {
         errx(EX_USAGE,
  -           "usage: fdcontrol [-F] [-d dbg] [-f fmt] [-s fmtstr] [-v] device");
  +           "usage: fdcontrol [-F] [-f fmt] [-s fmtstr] [-v] device");
   }
 
   void
  @@ -72,14 +72,11 @@
         enum fd_drivetype type;
         struct fd_type ft, newft, *fdtp;
         const char *name, *descr;
  -      int fd, i, autofmt;
  +      int fd, i;
 
  -      autofmt = 0;
  -      while((i = getopt(argc, argv, "aFf:s:v")) != -1)
  +      while((i = getopt(argc, argv, "Ff:s:v")) != -1)
                 switch(i) {
 
  -              case 'a':
  -                      autofmt = 1;
                 case 'F':
                         showfmt = 1;
                         show = 0;
  @@ -121,19 +118,12 @@
 
         if (ioctl(fd, FD_GDTYPE, &type) == -1)
                 err(EX_OSERR, "ioctl(FD_GDTYPE)");
  -      if (ioctl(fd, FD_GTYPE, &ft) == -1)
  -              err(EX_OSERR, "ioctl(FD_GTYPE)");
  -
  +
         if (show) {
                 showdev(type, argv[0]);
                 return (0);
         }
 
  -      if (autofmt) {
  -              memset(&newft, 0, sizeof newft);
  -              ft = newft;
  -      }
  -
         if (format) {
                 getname(type, &name, &descr);
                 fdtp = get_fmt(format, type);
  @@ -149,6 +139,14 @@
                 ft = newft;
         }
 
  +      if (format || fmtstring) {
  +              if (ioctl(fd, FD_STYPE, &ft) == -1)
  +                      err(EX_OSERR, "ioctl(FD_STYPE)");
  +      }
  +
  +      if (ioctl(fd, FD_GTYPE, &ft) == -1)
  +              err(EX_OSERR, "ioctl(FD_GTYPE)");
  +
         if (showfmt) {
                 if (verbose) {
                         const char *s;
  @@ -159,7 +157,7 @@
                         print_fmt(ft);
                         if (ft.datalen != 0xff &&
                             ft.datalen != (128 << ft.secsize))
  -                              printf("\tData length:\t%d\n", ft.datalen);
  +                              printf("\tData length:\t0x%x\n", ft.datalen);
                         printf("\tSector size:\t%d\n", 128 << ft.secsize);
                         printf("\tSectors/track:\t%d\n", ft.sectrac);
                         printf("\tHeads/cylinder:\t%d\n", ft.heads);
  @@ -170,8 +168,8 @@
                         case 2: printf("\tTransfer rate:\t250 kbps\n"); break;
                         case 3: printf("\tTransfer rate:\t1 Mbps\n"); break;
                         }
  -                      printf("\tSector gap:\t%d\n", ft.gap);
  -                      printf("\tFormat gap:\t%d\n", ft.f_gap);
  +                      printf("\tSector gap:\t0x%x\n", ft.gap);
  +                      printf("\tFormat gap:\t0x%x\n", ft.f_gap);
                         printf("\tInterleave:\t%d\n", ft.f_inter);
                         printf("\tSide offset:\t%d\n", ft.offset_side2);
                         printf("\tFlags\t\t<");
  @@ -196,14 +194,7 @@
                 } else {
                         print_fmt(ft);
                 }
  -              return (0);
  -      }
  -
  -      if (format || fmtstring) {
  -              if (ioctl(fd, FD_STYPE, &ft) == -1)
  -                      err(EX_OSERR, "ioctl(FD_STYPE)");
  -              return (0);
         }
 
  -      return 0;
  +      return (close(fd));
   }
 
 
  --- fdcontrol.8.org    2012-03-03 06:15:13.000000000 +0000
  +++ fdcontrol.8        2013-01-20 20:33:45.000000000 +0000
  @@ -34,7 +34,6 @@
   .Sh SYNOPSIS
   .Nm
   .Op Fl F
  -.Op Fl d Ar dbg
   .Op Fl f Ar fmt
   .Op Fl s Ar fmtstr
   .Op Fl v
  @@ -93,30 +92,6 @@
   .Fl v ,
   some more text will be returned, including the total capacity of the
   density settings in kilobytes.
  -.Ss Debug Control
  -If the
  -.Xr fdc 4
  -driver was configured with the
  -.Dv FDC_DEBUG
  -option, by default, device debugging information is still disabled
  -since it could produce huge amounts of kernel messages.
  -It needs to
  -be turned on using
  -.Nm
  -together with
  -.Dq Fl d Li 1 ,
  -usually immediately before starting an operation on the respective
  -device the debug information is wanted for, and later turned off again
  -using
  -.Dq Fl d Li 0 .
  -Note that debugging levels are a driver's global option that will
  -affect any drives and controllers using the
  -.Xr fdc 4
  -driver, regardless which
  -.Ar device
  -was specified on the
  -.Nm
  -command line.
   .Ss Density Control
   The
   .Xr fdc 4
  @@ -206,8 +181,9 @@
   .It Ar sectrac
   The number of sectors per track.
   .It Ar secsize
  -The sector size code, 0 = 128 bytes (or less), 1 = 256 bytes, 2 = 512
  -bytes, 3 = 1024 bytes.
  +The sector size in bytes. Previously was sector size code:
  + 0 = 128 bytes (or less), 1 = 256 bytes, 2 = 512 bytes,
  + 3 = 1024 bytes.
   .It Ar datalen
   The actual sector size if the size code is 0, or the (ignored) value
   0xFF for larger size codes.
 
 
  --- fdformat.c.org     2012-03-03 06:15:13.000000000 +0000
  +++ fdformat.c 2013-01-20 10:21:27.000000000 +0000
  @@ -112,27 +112,7 @@
   usage (void)
   {
         errx(EX_USAGE,
  -           "usage: fdformat [-F fill] [-f fmt] [-s fmtstr] [-nqvy] device");
  -}
  -
  -static int
  -yes (void)
  -{
  -      char reply[256], *p;
  -
  -      reply[sizeof(reply) - 1] = 0;
  -      for (;;) {
  -              fflush(stdout);
  -              if (!fgets (reply, sizeof(reply) - 1, stdin))
  -                      return (0);
  -              for (p=reply; *p==' ' || *p=='\t'; ++p)
  -                      continue;
  -              if (*p=='y' || *p=='Y')
  -                      return (1);
  -              if (*p=='n' || *p=='N' || *p=='\n' || *p=='\r')
  -                      return (0);
  -              printf("Answer `yes' or `no': ");
  -      }
  +           "usage: fdformat [-F fill] [-f fmt] [-s fmtstr] [-nqv] device");
   }
 
   int
  @@ -191,10 +171,6 @@
                         verify_only = 1;
                         break;
 
  -              case 'y':       /* confirm */
  -                      confirm = 1;
  -                      break;
  -
                 default:
                         usage();
                 }
  @@ -281,16 +257,7 @@
                                 fdt.tracks * fdt.heads * bytes_per_track / 1024,
                                 device);
         }
  -      else if(!quiet && !confirm) {
  -              printf("Format %dK floppy `%s'? (y/n): ",
  -                      fdt.tracks * fdt.heads * bytes_per_track / 1024,
  -                      device);
  -              if(!yes()) {
  -                      printf("Not confirmed.\n");
  -                      return (EX_UNAVAILABLE);
  -              }
  -      }
  -
  +
         /*
          * Formatting.
          */
 
 
  --- fdformat.1.org     2012-03-03 06:15:13.000000000 +0000
  +++ fdformat.1 2013-01-20 10:32:30.000000000 +0000
  @@ -35,7 +35,7 @@
   .Op Fl F Ar fill
   .Op Fl f Ar fmt
   .Op Fl s Ar fmtstr
  -.Op Fl nqvy
  +.Op Fl nqv
   .Ar device
   .Sh DESCRIPTION
   The
  @@ -84,9 +84,6 @@
   .Ar device .
   .It Fl v
   Do not format, verify only.
  -.It Fl y
  -Do not ask for confirmation whether to format the floppy disk but
  -still report formatting status.
   .El
   .Pp
   For non-autoselecting subdevices, neither
 
 
  --- fdutil.c.org       2012-03-03 06:15:13.000000000 +0000
  +++ fdutil.c   2013-01-22 22:42:21.000000000 +0000
  @@ -90,93 +90,97 @@
   static struct fd_type fd_types_auto[1] =
       { { 0,0,0,0,0,0,0,0,0,0,0,FL_AUTO } };
 
  -
   static struct fd_type fd_types_288m[] = {
   #if 0
  -      { FDF_3_2880 },
  +      { FHD_3_2880 },
   #endif
  -      { FDF_3_1722 },
  -      { FDF_3_1476 },
  -      { FDF_3_1440 },
  -      { FDF_3_1200 },
  -      { FDF_3_820 },
  -      { FDF_3_800 },
  -      { FDF_3_720 },
  +      { FHD_3_1722 },
  +      { FHD_3_1476 },
  +      { FHD_3_1440 },
  +      { FHD_3_1200 },
  +      { FHD_3_820 },
  +      { FHD_3_800 },
  +      { FHD_3_720 },
         { 0,0,0,0,0,0,0,0,0,0,0,0 }
   };
 
   static struct fd_type fd_types_144m[] = {
   #ifdef PC98
   #if 0
  -      { FDF_3_1722 },
  -      { FDF_3_1476 },
  +      { FHD_3_1722 },
  +      { FHD_3_1476 },
   #endif
  -      { FDF_3_1440 },
  -      { FDF_3_1200 },
  +      { FHD_3_1440 },
  +      { FHD_3_1200 },
   #if 0
  -      { FDF_3_820 },
  -      { FDF_3_800 },
  +      { FHD_3_820 },
  +      { FHD_3_800 },
   #endif
  -      { FDF_3_720 },
  -      { FDF_3_360 },
  -      { FDF_3_640 },
  -      { FDF_3_1230 },
  +      { FHD_3_720 },
  +      { FHD_3_360 },
  +      { FHD_3_640 },
  +      { FHD_3_1230 },
   #if 0
  -      { FDF_3_1280 },
  -      { FDF_3_1480 },
  -      { FDF_3_1640 },
  +      { FHD_3_1280 },
  +      { FHD_3_1480 },
  +      { FHD_3_1640 },
   #endif
         { 0,0,0,0,0,0,0,0,0,0,0,0 }
  +//end of PC98
   #else
  -      { FDF_3_1722 },
  -      { FDF_3_1476 },
  -      { FDF_3_1440 },
  -      { FDF_3_1200 },
  -      { FDF_3_820 },
  -      { FDF_3_800 },
  -      { FDF_3_720 },
  +      { FHD_3_1722 },
  +      { FHD_3_1476 },
  +      { FHD_3_1440 },
  +      { FHD_3_1200 },
  +      { FHD_3_820 },
  +      { FHD_3_800 },
  +      { FHD_3_720 },
         { 0,0,0,0,0,0,0,0,0,0,0,0 }
   #endif
   };
 
   static struct fd_type fd_types_12m[] = {
   #ifdef PC98
  -      { FDF_5_1200 },
  +      { FHD_5_1200 },
   #if 0
  -      { FDF_5_820 },
  -      { FDF_5_800 },
  +      { FHD_5_820 },
  +      { FHD_5_800 },
   #endif
  -      { FDF_5_720 },
  -      { FDF_5_360 },
  -      { FDF_5_640 },
  -      { FDF_5_1230 },
  +      { FHD_5_720 },
  +      { FHD_5_360 },
  +      { FHD_5_640 },
  +      { FHD_5_1230 },
   #if 0
  -      { FDF_5_1280 },
  +      { FHD_5_1280 },
   #endif
         { 0,0,0,0,0,0,0,0,0,0,0,0 }
  +//end of PC98
   #else
  -      { FDF_5_1200 },
  -      { FDF_5_1230 },
  -      { FDF_5_1480 },
  -      { FDF_5_1440 },
  -      { FDF_5_820 },
  -      { FDF_5_800 },
  -      { FDF_5_720 },
  -      { FDF_5_360 | FL_2STEP },
  -      { FDF_5_640 },
  +      { FHD_5_1200 },
  +      { FHD_5_1230 },
  +      { FHD_5_1480 },
  +      { FHD_5_1440 },
  +      { FHD_5_820 },
  +      { FHD_5_800 },
  +      { FHD_5_720 },
  +      { FHD_5_360 | FL_2STEP },
  +      { FHD_5_640 },
         { 0,0,0,0,0,0,0,0,0,0,0,0 }
   #endif
   };
 
   static struct fd_type fd_types_720k[] =
   {
  -      { FDF_3_720 },
  +      { FHD_3_720 },
         { 0,0,0,0,0,0,0,0,0,0,0,0 }
   };
 
   static struct fd_type fd_types_360k[] =
   {
  -      { FDF_5_360 },
  +      { FDD_5_360 },
  +      { FDD_5_180 },
  +      { FDD_5_320 },
  +      { FDD_5_160 },
         { 0,0,0,0,0,0,0,0,0,0,0,0 }
   };
 
 
 _______________________________________________
 freebsd-bugs@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
 To unsubscribe, send any mail to "freebsd-bugs-unsubscribe@freebsd.org"
 
 
 -- 
 Eitan Adler



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