home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #30 / NN_1992_30.iso / spool / comp / unix / bsd / 10138 < prev    next >
Encoding:
Text File  |  1992-12-12  |  7.7 KB  |  239 lines

  1. Newsgroups: comp.unix.bsd
  2. Path: sparky!uunet!mcsun!sun4nl!fwi.uva.nl!vdlinden
  3. From: vdlinden@fwi.uva.nl (Frank van der Linden)
  4. Subject: patches for fd.c
  5. Message-ID: <1992Dec12.192754.5327@fwi.uva.nl>
  6. Summary: this works for me
  7. Keywords: additional fix for fd.c
  8. Sender: news@fwi.uva.nl
  9. Nntp-Posting-Host: carol.fwi.uva.nl
  10. Organization: FWI, University of Amsterdam
  11. Date: Sat, 12 Dec 1992 19:27:54 GMT
  12. Lines: 225
  13.  
  14.  
  15.  Hi,
  16.  
  17.  There was a message recently in comp.unix.bsd about the floppy driver
  18. not being able to read 720K disks (Message by Jordan Hubbard I think).
  19. A reply by terry@icarus.weber.edu said that a patch for this already existed
  20. and would be part of the 386BSD interim release. (Patch by Per Ander Olausson).
  21.  This patch fixes all problems except reading 360K floppies in 1.2M drives.
  22. This can be fixed by reading the value for 'double stepping' from the right
  23. place.Look around line 245:the old statement is between /* */.
  24. I fixed this problem and append the diffs for fd.c and mtools at the end of
  25. this message.
  26.  
  27. Onno van der Linden          c/o           vdlinden@fwi.uva.nl
  28.  
  29. # This is a shell archive.  Save it in a file, remove anything before
  30. # this line, and then unpack it by entering "sh file".  Note, it may
  31. # create directories; files and directories will be owned by you and
  32. # have default permissions.
  33. #
  34. # This archive contains:
  35. #
  36. #    fd.dif
  37. #    mtools.dif
  38. #
  39. echo x - fd.dif
  40. sed 's/^X//' >fd.dif << 'END-of-fd.dif'
  41. X*** fd.c.orig    Mon Jun 29 06:25:24 1992
  42. X--- fd.c    Sat Dec 12 16:07:17 1992
  43. X***************
  44. X*** 60,66 ****
  45. X  #define b_cylin b_resid
  46. X  #define b_step b_resid
  47. X  #define FDBLK 512
  48. X! #define NUMTYPES 4
  49. X  
  50. X  struct fd_type {
  51. X      int    sectrac;        /* sectors per track         */
  52. X--- 60,66 ----
  53. X  #define b_cylin b_resid
  54. X  #define b_step b_resid
  55. X  #define FDBLK 512
  56. X! #define NUMTYPES 5
  57. X  
  58. X  struct fd_type {
  59. X      int    sectrac;        /* sectors per track         */
  60. X***************
  61. X*** 76,81 ****
  62. X--- 76,82 ----
  63. X  struct fd_type fd_types[NUMTYPES] = {
  64. X       { 18,2,0xFF,0x1B,80,2880,1,0 },    /* 1.44 meg HD 3.5in floppy    */
  65. X      { 15,2,0xFF,0x1B,80,2400,1,0 },    /* 1.2 meg HD floppy           */
  66. X+     { 9,2,0xFF,0x20,80,1440,1,2  }, /* 720k floppy in HD drive     */
  67. X      { 9,2,0xFF,0x23,40,720,2,1 },    /* 360k floppy in 1.2meg drive */
  68. X      { 9,2,0xFF,0x2A,40,720,1,1 },    /* 360k floppy in DD drive     */
  69. X  };
  70. X***************
  71. X*** 211,218 ****
  72. X       int    unit, type, s;
  73. X  
  74. X       unit = FDUNIT(minor(bp->b_dev));
  75. X!      /*type = FDTYPE(minor(bp->b_dev));*/
  76. X!     type = fd_unit[unit].type;
  77. X  
  78. X  #ifdef FDTEST
  79. X  printf("fdstrat%d, blk = %d, bcount = %d, addr = %x|",
  80. X--- 212,219 ----
  81. X       int    unit, type, s;
  82. X  
  83. X       unit = FDUNIT(minor(bp->b_dev));
  84. X!      type = FDTYPE(minor(bp->b_dev));
  85. X!     /*type = fd_unit[unit].type;*/
  86. X  
  87. X  #ifdef FDTEST
  88. X  printf("fdstrat%d, blk = %d, bcount = %d, addr = %x|",
  89. X***************
  90. X*** 242,248 ****
  91. X      }
  92. X       bp->b_cylin = blknum / (fd_types[type].sectrac * 2);
  93. X      dp = &fd_unit[unit].head;
  94. X!     dp->b_step = (fd_types[fd_unit[unit].type].steptrac);
  95. X      s = splbio();
  96. X      disksort(dp, bp);
  97. X      if (dp->b_active == 0) {
  98. X--- 243,250 ----
  99. X      }
  100. X       bp->b_cylin = blknum / (fd_types[type].sectrac * 2);
  101. X      dp = &fd_unit[unit].head;
  102. X! /*    dp->b_step = (fd_types[fd_unit[unit].type].steptrac); */
  103. X!     dp->b_step = (fd_types[type].steptrac);
  104. X      s = splbio();
  105. X      disksort(dp, bp);
  106. X      if (dp->b_active == 0) {
  107. X***************
  108. X*** 281,288 ****
  109. X  int unit;
  110. X  {
  111. X      fd_unit[unit].motor = 0;
  112. X!     if (unit) set_motor(0,0);
  113. X!     else set_motor(1,0);
  114. X  }
  115. X  
  116. X  fd_turnon(unit)
  117. X--- 283,289 ----
  118. X  int unit;
  119. X  {
  120. X      fd_unit[unit].motor = 0;
  121. X!     set_motor(unit,0);
  122. X  }
  123. X  
  124. X  fd_turnon(unit)
  125. X***************
  126. X*** 327,339 ****
  127. X      int    flags;
  128. X  {
  129. X       int unit = FDUNIT(minor(dev));
  130. X!      /*int type = FDTYPE(minor(dev));*/
  131. X      int s;
  132. X  
  133. X      fdopenf = 1;
  134. X      /* check bounds */
  135. X      if (unit >= NFD) return(ENXIO);
  136. X!     /*if (type >= NUMTYPES) return(ENXIO);*/
  137. X  
  138. X      /* Set proper disk type, only allow one type */
  139. X      return 0;
  140. X--- 328,340 ----
  141. X      int    flags;
  142. X  {
  143. X       int unit = FDUNIT(minor(dev));
  144. X!      int type = FDTYPE(minor(dev));
  145. X      int s;
  146. X  
  147. X      fdopenf = 1;
  148. X      /* check bounds */
  149. X      if (unit >= NFD) return(ENXIO);
  150. X!     if (type >= NUMTYPES) return(ENXIO);
  151. X  
  152. X      /* Set proper disk type, only allow one type */
  153. X      return 0;
  154. X***************
  155. X*** 442,449 ****
  156. X      dp = &fd_unit[fd_drive].head;
  157. X      bp = dp->b_actf;
  158. X      read = bp->b_flags & B_READ;
  159. X!      /*ft = &fd_types[FDTYPE(bp->b_dev)];*/
  160. X!      ft = &fd_types[fd_unit[fd_drive].type];
  161. X  
  162. X      switch (fd_state) {
  163. X      case 1 : /* SEEK DONE, START DMA */
  164. X--- 443,450 ----
  165. X      dp = &fd_unit[fd_drive].head;
  166. X      bp = dp->b_actf;
  167. X      read = bp->b_flags & B_READ;
  168. X!      ft = &fd_types[FDTYPE(bp->b_dev)];
  169. X!      /*ft = &fd_types[fd_unit[fd_drive].type];*/
  170. X  
  171. X      switch (fd_state) {
  172. X      case 1 : /* SEEK DONE, START DMA */
  173. X***************
  174. X*** 470,476 ****
  175. X          sec = blknum %  (sectrac * 2);
  176. X          head = sec / sectrac;
  177. X          sec = sec % sectrac + 1;
  178. X! fd_hddrv = ((head&1)<<2)+fd_drive;
  179. X  
  180. X          if (read)  out_fdc(NE7CMD_READ);    /* READ */
  181. X          else out_fdc(NE7CMD_WRITE);        /* WRITE */
  182. X--- 471,478 ----
  183. X          sec = blknum %  (sectrac * 2);
  184. X          head = sec / sectrac;
  185. X          sec = sec % sectrac + 1;
  186. X! 
  187. X!         fd_hddrv = ((head&1)<<2)+fd_drive;
  188. X  
  189. X          if (read)  out_fdc(NE7CMD_READ);    /* READ */
  190. X          else out_fdc(NE7CMD_WRITE);        /* WRITE */
  191. END-of-fd.dif
  192. echo x - mtools.dif
  193. sed 's/^X//' >mtools.dif << 'END-of-mtools.dif'
  194. X*** devices.c.0_1    Sat Jun 27 23:05:01 1992
  195. X--- devices.c    Sat Aug 29 18:59:22 1992
  196. X***************
  197. X*** 20,34 ****
  198. X  #ifdef __386BSD__
  199. X  struct device devices[] = {
  200. X      {'A', "/dev/rfd0a", 0L, 12, 0, (int (*) ()) 0, 80, 2, 18}, /* 1.44m */
  201. X!     {'A', "/dev/rfd0a", 0L, 12, 0, (int (*) ()) 0, 80, 2, 15}, /* 1.2m */
  202. X!     {'A', "/dev/rfd0a", 0L, 12, 0, (int (*) ()) 0, 80, 2, 9},  /* 720k */
  203. X!     {'A', "/dev/rfd0a", 0L, 12, 0, (int (*) ()) 0, 40, 2, 9},  /* 360k */
  204. X!     {'A', "/dev/rfd0a", 0L, 12, 0, (int (*) ()) 0, 40, 2, 8},  /* 320k */
  205. X      {'B', "/dev/rfd1a", 0L, 12, 0, (int (*) ()) 0, 80, 2, 18}, /* 1.44m */
  206. X!     {'B', "/dev/rfd1a", 0L, 12, 0, (int (*) ()) 0, 80, 2, 15}, /* 1.2m */
  207. X!     {'B', "/dev/rfd1a", 0L, 12, 0, (int (*) ()) 0, 80, 2, 9},  /* 720k */
  208. X!     {'B', "/dev/rfd1a", 0L, 12, 0, (int (*) ()) 0, 40, 2, 9},  /* 360k */
  209. X!     {'B', "/dev/rfd1a", 0L, 12, 0, (int (*) ()) 0, 40, 2, 8},  /* 320k */
  210. X      {'\0', (char *) NULL, 0L, 0, 0, (int (*) ()) 0, 0, 0, 0}
  211. X  };
  212. X  #endif /* __386BSD__ */
  213. X--- 20,36 ----
  214. X  #ifdef __386BSD__
  215. X  struct device devices[] = {
  216. X      {'A', "/dev/rfd0a", 0L, 12, 0, (int (*) ()) 0, 80, 2, 18}, /* 1.44m */
  217. X!     {'A', "/dev/rfd0b", 0L, 12, 0, (int (*) ()) 0, 80, 2, 15}, /* 1.2m */
  218. X!     {'A', "/dev/rfd0c", 0L, 12, 0, (int (*) ()) 0, 80, 2, 9},  /* 720k */
  219. X!     {'A', "/dev/rfd0d", 0L, 12, 0, (int (*) ()) 0, 40, 2, 9},  /* 360k */
  220. X!     {'A', "/dev/rfd0e", 0L, 12, 0, (int (*) ()) 0, 40, 2, 9},  /* 360k */
  221. X!     {'A', "/dev/rfd0f", 0L, 12, 0, (int (*) ()) 0, 40, 2, 8},  /* 320k */
  222. X      {'B', "/dev/rfd1a", 0L, 12, 0, (int (*) ()) 0, 80, 2, 18}, /* 1.44m */
  223. X!     {'B', "/dev/rfd1b", 0L, 12, 0, (int (*) ()) 0, 80, 2, 15}, /* 1.2m */
  224. X!     {'B', "/dev/rfd1c", 0L, 12, 0, (int (*) ()) 0, 80, 2, 9},  /* 720k */
  225. X!     {'B', "/dev/rfd1d", 0L, 12, 0, (int (*) ()) 0, 40, 2, 9},  /* 360k */
  226. X!     {'B', "/dev/rfd1e", 0L, 12, 0, (int (*) ()) 0, 40, 2, 9},  /* 360k */
  227. X!     {'B', "/dev/rfd1f", 0L, 12, 0, (int (*) ()) 0, 40, 2, 8},  /* 320k */
  228. X      {'\0', (char *) NULL, 0L, 0, 0, (int (*) ()) 0, 0, 0, 0}
  229. X  };
  230. X  #endif /* __386BSD__ */
  231. END-of-mtools.dif
  232. exit
  233.  
  234. -- 
  235.   Frank van der Linden.                        Internet : vdlinden@fwi.uva.nl
  236. * WARNING ---- The author of this message has once seen some AT&T Unix source *
  237. * code, so now this message is probably copyrighted by them! You have been    *
  238. * reading this entirely at your own risk..                                    *
  239.