home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / unix / sysv386 / 13239 < prev    next >
Encoding:
Internet Message Format  |  1992-08-17  |  60.4 KB

  1. Xref: sparky comp.unix.sysv386:13239 comp.unix.xenix.sco:2696 alt.sources:1885
  2. Newsgroups: comp.unix.sysv386,comp.unix.xenix.sco,alt.sources
  3. Path: sparky!uunet!mcsun!Germany.EU.net!news.netmbx.de!zrz.tu-berlin.de!math.fu-berlin.de!fub!geminix.in-berlin.de!gemini
  4. From: gemini@geminix.in-berlin.de (Uwe Doering)
  5. Subject: FAS 2.10 async driver, part 2/5
  6. Organization: Private UNIX Site
  7. Date: Mon, 17 Aug 1992 11:37:58 GMT
  8. Message-ID: <F555DPC@geminix.in-berlin.de>
  9. Lines: 1345
  10.  
  11. Submitted-by: gemini@geminix.in-berlin.de
  12. Archive-name: fas210/part02
  13.  
  14. #!/bin/sh
  15. # this is fas210.02 (part 2 of fas210)
  16. # do not concatenate these parts, unpack them in order with /bin/sh
  17. # file README continued
  18. #
  19. if test ! -r _shar_seq_.tmp; then
  20.     echo 'Please unpack part 1 first!'
  21.     exit 1
  22. fi
  23. (read Scheck
  24.  if test "$Scheck" != 2; then
  25.     echo Please unpack part "$Scheck" next!
  26.     exit 1
  27.  else
  28.     exit 0
  29.  fi
  30. ) < _shar_seq_.tmp || exit 1
  31. if test ! -f _shar_wnt_.tmp; then
  32.     echo 'x - still skipping README'
  33. else
  34. echo 'x - continuing file README'
  35. sed 's/^X//' << 'SHAR_EOF' >> 'README' &&
  36. X     that. The real reason for this problem lies in the ancient port
  37. X     devices used in most 286/386 systems: The 8250 (not supported by
  38. X     FAS) and the NS16450.
  39. X
  40. X     They have only one receiver character buffer. This implies that
  41. X     the operating system must read a character from this buffer before
  42. X     the next one arrives from the port's shift register. For the old
  43. X     IBM PC with DOS this was sufficient. But for UNIX and with baud
  44. X     rates up to 38400 this is simply a joke.
  45. X
  46. X     UNIX is not a real-time operating system. That means that it's
  47. X     kernel isn't optimized for fast interrupt responses. With the
  48. X     proper hardware this is no problem. But because the vendors have
  49. X     to adapt UNIX to the standard hardware found in 286/386 systems they
  50. X     also have to cope with the NS16450 ports which are in there simply
  51. X     to be compatible with IBM PCs, XTs and ATs.
  52. X
  53. X     It is impossible to make it work at high baud rates without a
  54. X     major redesign of the AT&T supplied UNIX kernel. But then it
  55. X     wouldn't be UNIX SYSV any more.
  56. X
  57. X     Luckily, there is a pin-to-pin replacement available from
  58. X     National Semiconductors: The NS16550A.
  59. X
  60. X     This device has separate 16 character FIFOs for the receiver and
  61. X     the transmitter. With these FIFOs the interrupt latency of the
  62. X     kernel can be quite high without losing any characters.
  63. X     Additionally, because with most interrupts many characters are
  64. X     processed at once the system is loaded much less.
  65. X
  66. X     As you see, the necessary hardware is available. Therefore, if you
  67. X     have to blame the UNIX vendor then blame him for not telling you
  68. X     that you should buy some NS16550A and/or for not supplying you
  69. X     with a serial driver that supports these port devices.
  70. X
  71. X     But as you have the FAS driver now and if you use the NS16550A
  72. X     devices you shouldn't have this kind of trouble any more. This is
  73. X     the philosophy behind the driver's name `Final Async Solution'.
  74. X
  75. X     Enjoy!
  76. X
  77. X     PS: If for some reason you can't get the NS16550A chips you
  78. X         could use the i82510 chips from Intel. Although they are
  79. X         much less efficient they are still better than the NS16450.
  80. X
  81. X     PPS: Some kernel functions may disable interrupts long enough
  82. X          that even the input FIFO can't prevent character loss.
  83. X          One culprit is the disk cache flush function. If you
  84. X          configure your kernel with too many cache buffers (NBUF
  85. X          parameter for AT&T derived UNIX) you may still lose
  86. X          characters (at least at 38400 bps).
  87. X
  88. X          Another candidate is VP/ix, or rather the kernel functions
  89. X          to support VP/ix. This may also lead to lost characters
  90. X          at very high input speed.
  91. X
  92. X          And there are some bus mastering disk controllers (like the
  93. X          Adaptec 1540/1542 SCSI controller) on the market that slow
  94. X          down the CPU so much during data transfer that it isn't fast
  95. X          enough to process characters coming in at high baud rates.
  96. X          Therefore, if you can configure your disk controller, don't
  97. X          use values that will bring the CPU down to its knees.
  98. X          Otherwise, FAS will lose input characters during disk I/O.
  99. X
  100. X          If your operating system has a low interrupt latency you can
  101. X          define `LOW_INT_LAT' in the makefile. This sets the receiver
  102. X          FIFO trigger level from 4 (default) to 8 characters. This
  103. X          cuts the receiver interrupt frequency in half and therefore
  104. X          saves a lot CPU time. That pays off especially at very high
  105. X          baud rates. If you set this flag you should do some rigid
  106. X          tests (receiving characters at the highest baud rate while
  107. X          the system is heavily loaded with disk and network i/o) to
  108. X          make sure that there are really no lost characters due to
  109. X          interrupt latency. ISC UNIX 3.0 is known to have a low tty
  110. X          interrupt latency, therefore `LOW_INT_LAT' is defined in
  111. X          `Makefile.ISC3'. However, ISC UNIX 2.x has a rather high
  112. X          interrupt latency and shouldn't have this flag set. For
  113. X          other UNIX flavours you have to find out yourself whether
  114. X          this flag is applicable.
  115. X
  116. X
  117. X     DEVICE LOCKUPS
  118. X     --------------
  119. X
  120. X     There are certain conditions under which a device can lock up,
  121. X     that is, at least one process that uses this device waits for
  122. X     a tty I/O related event that obviously doesn't occure.
  123. X
  124. X     The most common case is that there are still characters in the
  125. X     output buffer, but the output is disabled for some reason. Then
  126. X     the last process that closes the tty device hangs in the close()
  127. X     function until the output buffer has drained.
  128. X
  129. X     Tty output may be stopped by the software (XON/XOFF) or hardware
  130. X     (RTS/CTS, by default) flow control. In this case something
  131. X     seems to be wrong with the cabling or the connected device.
  132. X     Please check this first out before you blame FAS. Sometimes
  133. X     it helps to switch the device off and on a few times to unblock
  134. X     the tty output.
  135. X
  136. X     Another reason could be a lost transmitter interrupt. If this isn't
  137. X     caused by a configuration error this usually indicates a hardware
  138. X     problem in your computer which should be fixed as soon as possible.
  139. X     Otherwise, you can't run this system unattended because it is too
  140. X     unreliable.
  141. X
  142. X     In the cases described above the last resort is killing the process,
  143. X     and if it still hangs, opening the FAS device with the O_APPEND
  144. X     flag. This flushes the output buffers and therefore releases the
  145. X     hanging process. To do that, you simply type
  146. X
  147. X     echo '\c' >> /dev/ttyF00
  148. X
  149. X     if, for instance, the process is hanging on `/dev/ttyF00'. There
  150. X     is, however, no guaranty that this works in all cases.
  151. X
  152. X     If interrupts are lost on IRQ2 this might have to do with an EGA or
  153. X     VGA card using this IRQ line for the vertical retrace interrupt.
  154. X     This interrupt isn't used at all these days, neither under DOS nor
  155. X     UNIX. It's simply there for compatibility.
  156. X
  157. X     On some video cards (the more expensive ones) there is a jumper or
  158. X     dip switch to disable the vertical retrace interrupt. On the rest
  159. X     you have to cut the trace to the bus contact B4 with a sharp knife.
  160. X     This contact is on the solder side of the video card, the fourth bus
  161. X     contact counted from the side where the 9 or 15 pin D-SUB connector
  162. X     to the monitor is located. Cutting this trace has the same effect as
  163. X     pulling the IRQ2 jumper on other cards. Note that cutting the trace
  164. X     will void your video card's warranty.
  165. X
  166. X     Now IRQ2 should be available for use with FAS. Look at the INSTALLATION
  167. X     file for details on how to configure FAS for IRQ2. This is operating
  168. X     system dependent.
  169. X
  170. X     And there is a rare case which has to do with the number of available
  171. X     CLISTs in the UNIX kernel. The UNIX output and input buffers are
  172. X     256 bytes each (by default). If for some reason the output of a
  173. X     tty device is stopped but a process continues to send data one
  174. X     character at a time this uses up one CLIST for every charcacter.
  175. X     If the number of CLISTs in the kernel is less than 256 all CLISTs
  176. X     will be busy eventually.
  177. X
  178. X     The dangerous part here is that the pool of CLISTs is used by all
  179. X     tty devices. Therefore, if one single tty device manages to eat up
  180. X     all available CLISTs all tty in- and output comes to a halt. If this
  181. X     happens you can't access your machine any more, not even from the
  182. X     operator console. Although, the system is still alive internally.
  183. X
  184. X     Unfortunately, many UNIX vendors have put a dangerously low number-of-
  185. X     CLISTs parameter into their kernel tune files. You should increase
  186. X     it to a value that makes it impossible that one device alone can
  187. X     occupy all CLISTs (it's the NCLIST parameter under AT&T derived
  188. X     UNIX SysVr[34].x). A value of 400 should be sufficient.
  189. X
  190. X
  191. X     COPYRIGHT
  192. X     ---------
  193. X
  194. X     Although FAS is frequently refered to as a public domain driver,
  195. X     FAS was never released to the public domain (this is true for
  196. X     all releases of FAS). FAS is freeware, and the author has the
  197. X     full copyright.
  198. X
  199. X     Here are the conditions under which you may copy and distribute
  200. X     FAS. The goal of these terms is to spread FAS as wide as possible
  201. X     and, on the other hand, to prevent anyone from making money out
  202. X     of it, and to prevent any restrictions of the availability of
  203. X     FAS.
  204. X
  205. X     1. You can freely copy FAS, and you may give copies of FAS to
  206. X        everyone.
  207. X     2. FAS has to be distributed as the complete package posted
  208. X        to Usenet by its author.
  209. X     3. Vendors may bundle FAS with their products as long as they
  210. X        a) tell their customers (somewhere in the written documentation)
  211. X           that FAS is freeware, wasn't developed by the vendor, and the
  212. X           vendor doesn't have the copyright for FAS. 
  213. X        b) provide the complete original package in addition to their
  214. X           customized version. Customization means modification of
  215. X           the configuration files. No changes to the actual source
  216. X           file (fas.c) are allowed.
  217. X        c) tell their customers (somewhere in the written documentation)
  218. X           where the original package is located on the distribution
  219. X           media.
  220. X     4. Changes to the sources are allowed
  221. X        a) for private use.
  222. X        b) to develop another freeware package with similar restrictions.
  223. X           This new package has to have a different name.
  224. X     5. The author isn't liable for any damage or loss of data caused
  225. X        by FAS.
  226. X
  227. X------------------------------------------------------------------------
  228. X
  229. XWhat's in this package:
  230. X
  231. X     README         This file.
  232. X
  233. X     INSTALLATION   A description about how to install the driver
  234. X                    on your system.
  235. X
  236. X     PATCHLEVEL     Just a reference file for future updates.
  237. X
  238. X     RELEASENOTES   Notes about the various FAS releases.
  239. X                    
  240. X     fas.h          The header file for the driver.
  241. X
  242. X     fas.c          The driver itself.
  243. X
  244. X     space-xxxxx    These are samples of what `space.c' must look
  245. X                    like.  You can either copy one of these to
  246. X                    `space.c' or use it as a template to create your
  247. X                    own `space.c'.
  248. X
  249. X          space-c12      For com1 and com2.
  250. X
  251. X          space-c123     For com1, com2 and com3.
  252. X
  253. X          space-ast4     For the AST 4-port card.
  254. X
  255. X          space-ast4c12  For the AST 4-port card plus com1 and com2.
  256. X
  257. X          space-hub6     For the Bell Tech HUB-6 card.
  258. X
  259. X          space-digi8c1  For the DigiChannel PC/8 card plus com1.
  260. X
  261. X     config-xxxxx   This is for uPort SYS V/386 only.
  262. X                    Kernel configuaration file.  You should pick the one
  263. X                    that matches your configuration and copy it to `config'.
  264. X
  265. X          config-c12     For com1 and com2.
  266. X
  267. X          config-c123    For com1, com2 and com3.
  268. X
  269. X          config-ast4    For the AST 4-port card.
  270. X
  271. X          config-ast4c12 For the AST 4-port card plus com1 and com2.
  272. X
  273. X          config-hub6    For the Bell Tech HUB-6 card.
  274. X
  275. X          config-digi8c1 For the DigiChannel PC/8 card plus com1.
  276. X
  277. X     s_fas-xxxxx    This is for ISC UNIX, ESIX, Bell Tech/Intel UNIX 3.2,
  278. X                    SCO UNIX, AT&T UNIX 386 and SysVr4 UNIX 386.
  279. X                    Kernel configuration file.  You should pick the one
  280. X                    that matches your configuration and copy it to `s_fas'.
  281. X
  282. X          s_fas-c12      For com1 and com2.
  283. X
  284. X          s_fas-c123     For com1, com2 and com3.
  285. X
  286. X          s_fas-ast4     For the AST 4-port card.
  287. X
  288. X          s_fas-ast4c12  For the AST 4-port card plus com1 and com2.
  289. X
  290. X          s_fas-hub6     For the Bell Tech HUB-6 card.
  291. X
  292. X          s_fas-digi8c1  For the DigiChannel PC/8 card plus com1.
  293. X
  294. X     n_fas-xxxxx    This is for ISC UNIX, ESIX, Bell Tech/Intel UNIX 3.2,
  295. X                    SCO UNIX, AT&T UNIX 386 and SysVr4 UNIX 386.
  296. X                    Tty device nodes file.  You should pick the one
  297. X                    that matches your configuration and copy it to `n_fas'.
  298. X
  299. X          n_fas-c12      For com1 and com2.
  300. X
  301. X          n_fas-c123     For com1, com2 and com3.
  302. X
  303. X          n_fas-ast4     For the AST 4-port card.
  304. X
  305. X          n_fas-ast4c12  For the AST 4-port card plus com1 and com2.
  306. X
  307. X          n_fas-hub6     For the Bell Tech HUB-6 card.
  308. X
  309. X          n_fas-digi8c1  For the DigiChannel PC/8 card plus com1.
  310. X
  311. X     i_fas-xxxxx    This is for ISC UNIX, ESIX, Bell Tech/Intel UNIX 3.2,
  312. X                    SCO UNIX, AT&T UNIX 386 and SysVr4 UNIX 386.
  313. X                    Inittab getty lines file.  You should pick the one
  314. X                    that matches your configuration and copy it to `i_fas'.
  315. X
  316. X          i_fas-c12      For com1 and com2.
  317. X
  318. X          i_fas-c123     For com1, com2 and com3.
  319. X
  320. X          i_fas-ast4     For the AST 4-port card.
  321. X
  322. X          i_fas-ast4c12  For the AST 4-port card plus com1 and com2.
  323. X
  324. X          i_fas-hub6     For the Bell Tech HUB-6 card.
  325. X
  326. X          i_fas-digi8c1  For the DigiChannel PC/8 card plus com1.
  327. X
  328. X     Makefile.uPort A makefile for uPort SYS V/386 systems. This is generic
  329. X                    and should work for all configurations of lines
  330. X                    and interrupts.
  331. X
  332. X     Makefile.ISC2  A makefile for ISC UNIX 2.x systems.  This is generic
  333. X                    and should work for all configurations of lines
  334. X                    and interrupts.
  335. X
  336. X     Makefile.ISC3  A makefile for ISC UNIX 3.x systems.  This is generic
  337. X                    and should work for all configurations of lines
  338. X                    and interrupts.
  339. X
  340. X     Makefile.ESIX  A makefile for ESIX systems.  This is generic
  341. X                    and should work for all configurations of lines
  342. X                    and interrupts.
  343. X
  344. X     Makefile.BELL  A makefile for Bell Tech/Intel UNIX 3.2 systems.  This
  345. X                    is generic and should work for all configurations of
  346. X                    lines and interrupts.
  347. X
  348. X     Makefile.SCO   A makefile for SCO UNIX systems.  This is generic
  349. X                    and should work for all configurations of lines
  350. X                    and interrupts.
  351. X
  352. X     Makefile.X386  A makefile for SCO Xenix 386 systems.  This is generic
  353. X                    and should work for all configurations of lines
  354. X                    and interrupts.
  355. X
  356. X     Makefile.X286  A makefile for SCO Xenix 286 systems.  This is generic
  357. X                    and should work for all configurations of lines
  358. X                    and interrupts.
  359. X
  360. X     Makefile.ATT   A makefile for AT&T UNIX 386 systems.  This is generic
  361. X                    and should work for all configurations of lines
  362. X                    and interrupts.
  363. X
  364. X     Makefile.SVR4  A makefile for SysVr4 UNIX 386 systems.  This is generic
  365. X                    and should work for all configurations of lines
  366. X                    and interrupts.
  367. X
  368. X------------------------------------------------------------------------
  369. X
  370. XWhat you will need to use this package:
  371. X
  372. X     You will need one of the above mentioned UNIX systems with the
  373. X     kernel link kit and the software development package.
  374. X
  375. X     Of course, you will also need one or more dumb port serial cards.
  376. X
  377. X     Note that FAS can be adapted to almost any kind of dumb port serial
  378. X     card by just putting the right informations into the config
  379. X     files. Changes to the actual source file shouldn't be necessary.
  380. X
  381. X     This means that the sample config files that are part of the FAS
  382. X     distribution are there for convenience in case you have one of the
  383. X     more common serial cards. If there are no sample files for your
  384. X     card you can make your own config files. In this case the sample
  385. X     files at still useful for you as you can look at them to learn
  386. X     how things are done for other cards.
  387. X
  388. X     If you know how your serial card works and the manual for it is
  389. X     detailed enough it won't be that difficult to make your own config
  390. X     files. Just try it!
  391. X
  392. X------------------------------------------------------------------------
  393. X
  394. XThe original asy replacement driver for Microport UNIX/386 (FAS' predecessor)
  395. Xwas developed by
  396. X
  397. XJim Murray              INET            jjm%jjmhome@m2c.m2c.org
  398. X2 Mohawk Circle         UUCP            harvard!m2c!jjmhome!jjm
  399. XWestboro Mass 01581     
  400. XUSA                                     voice (508) 366-2813
  401. X
  402. XCredits to him for releasing this great driver to the Usenet community.
  403. XBut if you have problems with FAS please don't contact him because he
  404. Xwasn't involved in the developement of FAS.
  405. X
  406. XFAS was developed by
  407. X
  408. XUwe Doering             INET : gemini@geminix.in-berlin.de
  409. XBillstedter Pfad 17 b   UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
  410. X1000 Berlin 20
  411. XGermany
  412. X
  413. X    ^    ^    ^    ^    ^    ^    ^    ^    ^    ^
  414. XSend your questions and bug reports to this address.
  415. SHAR_EOF
  416. echo 'File README is complete' &&
  417. true || echo 'restore of README failed'
  418. rm -f _shar_wnt_.tmp
  419. fi
  420. # ============= RELEASENOTES ==============
  421. if test -f 'RELEASENOTES' -a X"$1" != X"-c"; then
  422.     echo 'x - skipping RELEASENOTES (File already exists)'
  423.     rm -f _shar_wnt_.tmp
  424. else
  425. > _shar_wnt_.tmp
  426. echo 'x - extracting RELEASENOTES (Text)'
  427. sed 's/^X//' << 'SHAR_EOF' > 'RELEASENOTES' &&
  428. X     release 1.1a Sat Nov 11, 1989
  429. X
  430. X     This is an unofficial release as I'm not the original author
  431. X     of this async driver.
  432. X
  433. X     Uwe Doering             INET : gemini@geminix.in-berlin.de
  434. X     Billstedter Pfad 17 b   UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
  435. X     1000 Berlin 20
  436. X     Germany
  437. X
  438. X     New Features:
  439. X
  440. X          Added a third minor tty device number for every physical
  441. X          port. See description preceding the asyopen function in
  442. X          asy.c. Changed the behavior of ttyxx, too.
  443. X
  444. X          Added output hardware handshake support for DSR. Now you
  445. X          can do handshake with CTS, DSR or both. Input hardware
  446. X          handshake is on if you use at least one of the output
  447. X          handshake signals.
  448. X
  449. X          More flexible support of additional interrupt registers
  450. X          on mux boards. This is fully configurable now.
  451. X
  452. X          Added support for the CREAD flag. If not set, receiver
  453. X          interrupts are still serviced, but the received characters
  454. X          are simply thrown away. This is not as elegant as disabeling
  455. X          the interrupts themselves, but with the already existing
  456. X          driver it was the easiest way, and the most new-bugs-preventing,
  457. X          too.
  458. X
  459. X          Added a lot of comments to the source so that the curious
  460. X          user can understand why and how things are done.
  461. X
  462. X
  463. X     Bug Fixes:
  464. X
  465. X          The hang-up-on-last-close flag (HUPCL) was ignored. DTR
  466. X          was asserted regardless of this flag.
  467. X
  468. X          Made the detection of CTS and DCD more bullet-proof.
  469. X          Especially because between a close and the next open of
  470. X          a line, where interrupts are ignored, the software copys of
  471. X          CTS and DCD must be set up propperly in the asyopen function
  472. X          or the tty line would be blocked under certain circum-
  473. X          stances. For similar reasons, there is also a setup in the
  474. X          asyparam function.
  475. X
  476. X          Rewrote the input character processing function to work
  477. X          according to the TERMIO(7) man page.
  478. X
  479. X          Changed the behavior of BREAK generation to let the
  480. X          transmitter drain before TX is set to low.
  481. X
  482. X          Changed line hangup procedure so that the closing
  483. X          process returns immediately and doesn't sleep during
  484. X          the hangup delay/time. Instead, if an other process tries
  485. X          to open the line while hangup is still in progress, this
  486. X          process will sleep until hangup is competed.
  487. X
  488. X          With DOS Merge, on MicroPort V/386 3.0e the linker was
  489. X          missing the function `init8250'. Reengineered this from
  490. X          a disassembler listing of MicroPort's original driver and
  491. X          modified it to work with the NS16550A 16-byte FIFO. This
  492. X          funktion was added simply to be able to link the kernel.
  493. X          DOS Merge's virtual COM ports are still unusable with this
  494. X          release, though. To include this function, add a `-DMERGE'
  495. X          to the CFLAGS line in your makefile.
  496. X
  497. X          Made a lot of other corrections and enhancements in both
  498. X          speed and functionallity. As a result of all my effords
  499. X          I think this driver is slightly faster, more versatile
  500. X          and much more stable than the original release.
  501. X
  502. X     ------------------------------------------------------------
  503. X          
  504. X     release 1.1b Sat Nov 25, 1989
  505. X
  506. X     New Features:
  507. X
  508. X          Changed the minor device number scheme again.
  509. X          There are now two main groups: The unblocked open
  510. X          and the blocked open. Every group has four sub-modes
  511. X          and an additional hardware handshake flag. All this
  512. X          is coded in the higher four bits of the minor device
  513. X          number. Because of this, the maximum of 32 ports was
  514. X          reduced to 16 ports so that the port number fits into
  515. X          the remaining lower four bits of the minor device number.
  516. X          32 dumb ports in a single machine would have been overkill
  517. X          anyway. For more details refer to the description in the
  518. X          README file.
  519. X
  520. X     ------------------------------------------------------------
  521. X          
  522. X     release 2.00 Mon Nov 27, 1989
  523. X
  524. X     As this release differs so much from the original version I got,
  525. X     I now declare this as independant from the original author
  526. X     Jim Murray. This allows me to introduce new release levels
  527. X     without wondering whether they will collide with Jim's releases.
  528. X     Of course many credits to Jim for writing this software in the
  529. X     first place. Without his driver as a base I never would have
  530. X     been able to do such kernel driver development.
  531. X
  532. X     Bug Fixes:
  533. X
  534. X          If there were glitches on the hardware handshake lines
  535. X          and the DCD line a getty on this port would sometimes
  536. X          hang and become an immortal process. I think this was
  537. X          because the output buffer wasn't flushed properly
  538. X          on carrier loss. I hope I fixed this now. We'll see.
  539. X
  540. X     ------------------------------------------------------------
  541. X          
  542. X     release 2.01 Tue Nov 28, 1989
  543. X
  544. X     Did some cleanup in the source code.
  545. X
  546. X     I splitted the driver into two parts: The driver itself and
  547. X     the file `space.c'.
  548. X     `space.c' contains all data structures necessary to configure
  549. X     the driver and is compiled at kernel link time. Therefore, if you
  550. X     change your serial card configuration you simply change `space.c'
  551. X     directly in the link kit directory and relink the kernel. No
  552. X     driver recompilation or installation is necessary for this.
  553. X     But note that whenever you use `make install' your setup in
  554. X     the link kit directory is overwritten by the original `space.c'
  555. X     file. Therefore, you should copy your new `space.c' back to
  556. X     the source directory when you are finished with the configuration.
  557. X
  558. X     Renamed the package to `FAS Final Async Solution'. The following
  559. X     files have been renamed:
  560. X          asy.c          -> fas.c
  561. X          asy.h          -> fas.h
  562. X          asy_conf-xxxxx -> space-xxxxx
  563. X
  564. X     ISC 386/ix is supported now. There are separate makefiles
  565. X     for uPort and ISC to cope with the differences in link kit
  566. X     installation.
  567. X
  568. X     Bug Fixes:
  569. X
  570. X          `getty' still hung sometimes on a line with hardware
  571. X          handshake. Tried to fix it this time.
  572. X
  573. X     ------------------------------------------------------------
  574. X          
  575. X     release 2.02 Thu Nov 30, 1989
  576. X
  577. X     Abandoned the distinction between space-xxxxx files with
  578. X     and without hardware flow control because this is selected
  579. X     by the minor device number now.
  580. X
  581. X     Bug Fixes:
  582. X
  583. X          Set the high and low water marks for hardware input flow
  584. X          control to higher values than software flow control. This
  585. X          gives precedence to software flow control if both methods
  586. X          are used. These marks are self-adjusting and don't need to
  587. X          be changed if some flavor of UNIX has a different buffer
  588. X          size than the standard 256 characters. Before this change
  589. X          concurrent use of both flow controls could cause trouble
  590. X          with some high-speed modems. This is fixed now.
  591. X
  592. X          A flush read or write buffer request now also clears the
  593. X          receiver or transmitter FIFO, respectively. An ioctl
  594. X          call with a TCSETA* command clears the FIFOs, too.
  595. X
  596. X     ------------------------------------------------------------
  597. X          
  598. X     release 2.03 Fri Dec 01, 1989
  599. X
  600. X     Wrote an installation guide. The driver should be quite
  601. X     easy to install now.
  602. X
  603. X     Added tty node configuration files for ISC.
  604. X
  605. X     Hardware input flow control is bound now to the level of the
  606. X     receiver ring buffer instead of the UNIX input buffer. This
  607. X     has the advantage that buffer size and trigger levels are
  608. X     defined in the driver and therefore can be varied as needed.
  609. X
  610. X     New Features:
  611. X
  612. X          Added a boot time status message that shows the init
  613. X          state of each port. This tells you immediately what
  614. X          ports are found and initted by the driver. Useful to
  615. X          determine hardware configuration problems. Look at
  616. X          the description in the README file. Thanks to
  617. X          Kritt Gierlewsen (kritt@einoed.UUCP) for this proposal.
  618. X
  619. X     ------------------------------------------------------------
  620. X          
  621. X     release 2.04 Thu Dec 07, 1989
  622. X
  623. X     Did some cleanup in the source.
  624. X
  625. X     Removed the FIFO clear from the ioctl function. We don't want
  626. X     to do things there that aren't in the book.
  627. X
  628. X     An ioctl call that switches off the CLOCAL flag will create
  629. X     a SIGHUP signal if the carrier is actually missing at this
  630. X     time.
  631. X
  632. X     Every device is tested now quite thoroughly during initialization.
  633. X     If the test fails the corresponding device keeps unconfigured.
  634. X
  635. X     ------------------------------------------------------------
  636. X          
  637. X     release 2.05 Sat Jan 13, 1990
  638. X
  639. X     This is the first public release of the FAS driver.
  640. X
  641. X     Special thanks to the sysops of my test sites, Axel Fischer
  642. X     (fischer@utower.UUCP) and Kritt Gierlewsen (kritt@einoed.UUCP).
  643. X
  644. X     FAS is now an independant driver with its own driver name (`fas'),
  645. X     major device number, link kit directory and other things necessary
  646. X     for a driver. The original asy driver may or may not be linked
  647. X     with the kernel. You only need it if you want to access some
  648. X     serial devices via the virtual COM ports of the DOS emulator
  649. X     (DosMerge or VP/ix) because the FAS driver doesn't have this
  650. X     (really vendor dependant) feature.
  651. X
  652. X     The default prefix for tty device node names is `ttyF' now.
  653. X     This prevents mix-ups with the device names of the original
  654. X     asy driver.
  655. X
  656. X     Dropped the SYSV/AT support. I couldn't test the driver
  657. X     for several release generations on uPort SYSV/AT, and because
  658. X     there are not very much systems left with that flavor of UNIX
  659. X     it doesn't make sense to try to maintain compatibility with it.
  660. X     If someone really wants to use this driver on a 286 he has
  661. X     to port it himself.
  662. X
  663. X     Improved the transmitter FIFO fill procedure. Now it will try
  664. X     harder to fill the FIFO as much as possible to cut down on
  665. X     transmitter interrupts.
  666. X
  667. X     Software input flow control (XON/XOFF) is controlled by the driver now.
  668. X     It is bound to the level of the receiver ring buffer (as is hardware
  669. X     flow control). As usual, it can be switched on and off by the
  670. X     IXOFF flag in the termio(7) structure.
  671. X
  672. X     Changed and speeded up the ring buffer -> unix buffer processing.
  673. X
  674. X     For ISC, the getty lines for the inittab file are installed
  675. X     by the makefile now.
  676. X
  677. X     The conditional compilation of the function `init8250' (for
  678. X     DosMerge) is now controlled by a define in `fas.h'. The compiler
  679. X     switch `-DMERGE' is not used any more.
  680. X
  681. X     Improved the documentation.
  682. X
  683. X     The signals used for modem control and hardware flow control are
  684. X     fully configurable in the `space.c' file now. Look at `fas.h' for
  685. X     possible macros and combinations.
  686. X
  687. X     There are some new modes for hardware flow control, for instance
  688. X     HO_CTS_ON_DSR. This means that CTS is only looked at if DSR is on.
  689. X     If DSR is off output is possible regardless of CTS. The underlying
  690. X     assumption here is that we can expect proper handshake handling
  691. X     only from devices that are in the ready state (indicated by DSR).
  692. X     As a spin-off the problem with the hanging getty on lines with
  693. X     turned-off terminals (mentioned in earlier releases) should be
  694. X     gone if you use this new mode.
  695. X
  696. X     If the XCLUDE-Flag is availabe (SYSV 3.2 because of Xenix
  697. X     compatibility) exclusive open of a device is possible.
  698. X
  699. X     The default size of the input ring buffer is now 5000 bytes.
  700. X     This makes streaming input more likely even on loaded systems.
  701. X
  702. X     Bug Fixes:
  703. X
  704. X          The task state busy flag wasn't reset in some rare cases.
  705. X          This could cause processes to become immortal while waiting
  706. X          for the busy flag.
  707. X
  708. X          Under some special conditions an ioctl call with a TCSETA?
  709. X          command could corrupt the last character in the transmitter
  710. X          shift register. This is fixed now.
  711. X
  712. X          More fixing of the busy flag handling was necessary.
  713. X          Co-ordinating several delayed tasks controlling this flag
  714. X          is kind of tricky.
  715. X
  716. X          After a TCSETA* ioctl command we disable the transmitter
  717. X          for 2 sec (measured from the last transmitted character)
  718. X          if the character format and/or speed has changed. This
  719. X          gives the receiving side some time to do the same changes.
  720. X          This is kind of experimental. There may be applications that
  721. X          suffer from this delay. You may change the #define ADAPT_TIME
  722. X          in `fas.h' to a smaller value.
  723. X
  724. X     ------------------------------------------------------------
  725. X          
  726. X     release 2.06 Fri Mar 16, 1990
  727. X
  728. X     This should have been patch #3 for release 2.05, but there are
  729. X     so many changes now that I decided to make it a new release.
  730. X     Therefore, some of the changes are described in the 2.05 release
  731. X     notes above but were never released to the public.
  732. X
  733. X     New Features:
  734. X
  735. X          There is a transmitter ring buffer now to make the output
  736. X          less system load dependent. This really speeds things up
  737. X          because the transmitter FIFO gets filled with more characters
  738. X          at once. The buffer size depends on the actual baud rate to
  739. X          prevent long output buffer drains at low speeds.
  740. X
  741. X          There are also bigger input buffers to make FAS more competitive
  742. X          against "intelligent" cards.
  743. X
  744. X          Lots of speed improvements and many small changes.
  745. X
  746. X     Bug Fixes:
  747. X
  748. X          Fixed input/output buffer flush on carrier loss while close
  749. X          is waiting for the output to drain.
  750. X
  751. X     ------------------------------------------------------------
  752. X          
  753. X     release 2.07 Tue Sep 18, 1990
  754. X
  755. X     This is a major redesign of the previous release. I put most of the
  756. X     time consuming tasks in one function that is invoked asynchronously
  757. X     by timeout calls. Inside this function most of the code runs at
  758. X     a lower system priority level (spl5) than the interrupts. That
  759. X     means that during character processing tty interrupts are allowed.
  760. X     This is the main key to operation at 38400 bps on multiple ports
  761. X     at the same time which is possible now with this release.
  762. X
  763. X     New Features:
  764. X
  765. X          FAS supports the VP/ix DOS emulator!
  766. X          Now you can throw out the vendor's original driver even
  767. X          if you like to have a serial mouse or modem access in DOS.
  768. X          Read the paragraph about VP/ix in the README file.
  769. X
  770. X          The Intel i82510 port chip is supported. It has separate
  771. X          4-character FIFOs for input and output. Although the
  772. X          NS16550A is much better this chip is your second choice
  773. X          if you can't get your hands on the National chips.
  774. X          Thanks to Christian Seyb (cs@gold.UUCP) for sending me
  775. X          patches and the necessary documentation for the Intel
  776. X          chips.
  777. X
  778. X          There is an init sequence in `space.c'. You can put any
  779. X          number of address-data pairs in a null terminated array
  780. X          to program your serial card or other hardware before
  781. X          FAS makes the first access to the ports. AST 4-port cards,
  782. X          for instance, have an additional port that needs to be
  783. X          written to with a certain bit pattern to allow shared
  784. X          interrupts. If you need to read a port to achieve the
  785. X          setting or resetting of flags as a side effect, this
  786. X          is possible, too.
  787. X
  788. X          ESIX is officially supported now.
  789. X
  790. X          SCO UNIX is officially supported, too. FAS needs to be
  791. X          compiled with the command line flag `-DSCO'. The makefile
  792. X          for SCO takes care of that. Thanks to Walter Mecky
  793. X          (walter@mecky.systemware.de) and Frank Simon
  794. X          (terra@sol.north.de) for helping me in making the necessary
  795. X          changes for SCO UNIX.
  796. X
  797. X          SCO Xenix 386 is also officially supported. FAS needs to be
  798. X          compiled with the command line flag `-DXENIX'. The makefile
  799. X          for SCO Xenix takes care of that. Thanks to Andreas
  800. X          Steinmetzler (andreas@oil.UUCP) for doing the port.
  801. X
  802. X          If you have the RTSFLOW and CTSFLOW termio(7) flags,
  803. X          hardware handshake can be controlled by them.
  804. X          Note that enabling handware flow control via the
  805. X          minor device number overrides these flags. If you
  806. X          like to use them you need to create tty device nodes
  807. X          with minor device numbers in which the bit for hardware
  808. X          handshake is set to 0. Look at the description in the
  809. X          README file for more details.
  810. X          Note also that if you choose to use RTSFLOW and CTSFLOW
  811. X          all your programs that do initial access to tty devices
  812. X          (getty, uucico, cu, SLIP dialup program etc.) need to know
  813. X          about these flags or hardware handshake will not be used.
  814. X
  815. X          The `O_EXCL' flag for the open(2) call is honored now.
  816. X          This allowes exclusive access to an FAS device without
  817. X          suffering from race conditions which could occure with
  818. X          the termio(7) XCLUDE flag method.
  819. X
  820. X          The `fas_test_device' function returns a digit now that
  821. X          indicates at which phase the test exited due to an error.
  822. X          This error digit is displayed in the boot message. Thanks
  823. X          to Brian Beattie (beattie@visenix.UUCP) for sending me
  824. X          the necessary patches.
  825. X
  826. X     Bug Fixes:
  827. X
  828. X          Automatic input FIFO flush after unblocking the getty
  829. X          open by the carrier or the unblock signal. This makes sure
  830. X          that there is no chance that there are characters in the
  831. X          FIFO that were received before the open got unblocked.
  832. X
  833. X          The sdevice entry for the AST 4-port card had a wrong
  834. X          I/O address range (`s_fas-mux4'). This didn't affect FAS
  835. X          but is checked by the kernel config program.
  836. X
  837. X          The gcc (GNU cc) support was removed because gcc's object
  838. X          file wants to link in some "helpful" functions that aren't
  839. X          contained in the kernel. But anyway, FAS is tuned so carefully
  840. X          and depends on the optimization behaviour of the AT&T
  841. X          standard C compiler that gcc won't have any advantages.
  842. X
  843. X          I changed the method with which the `fas_test_device' function
  844. X          waits for certain events. The `delay' function was used
  845. X          for that purpose but it turned out that with some flavors
  846. X          of UNIX it is prohibited to use this function during the
  847. X          xxinit phase of the boot process. Now a simple timeout loop
  848. X          is used instead.
  849. X
  850. X          Removed the ADAPT_TIME mechanismn introduced in release 2.05.
  851. X
  852. X          The open() call now returns an `EBUSY' error number if the
  853. X          device is already open and can't be opened in the desired
  854. X          mode at this time.
  855. X
  856. X          The handling of the RING signal needed fixing. Unlike the other
  857. X          three modem status lines RING generates an interrupt only at
  858. X          the trailing edge.
  859. X
  860. X          No SIGHUP signal is sent any more if an ioctl call clears
  861. X          the CLOCAL termio(7) flag while there is no carrier present.
  862. X          SIGHUP is only sent if the actual DCD modem line drops.
  863. X
  864. X          The files *-mux4 were renamed to *-ast4 because this type of
  865. X          card was originally developed by AST (AST 4-port card).
  866. X
  867. X     ------------------------------------------------------------
  868. X          
  869. X     release 2.08 Sun Feb 03, 1991
  870. X
  871. X     New Features:
  872. X
  873. X          Bell Tech/Intel UNIX 3.2 is supported.
  874. X
  875. X          SCO Xenix 286 is also supported now. Thanks to Nickolay Saukh
  876. X          (nms@saukh.rd.jvd.su) for providing the patches.
  877. X
  878. X          The Bell Tech HUB-6 card can be used with FAS. Thanks to
  879. X          Keith Walker (kew@cims2.UUCP) for the patches.
  880. X
  881. X          For AT&T derived flavors of UNIX there is a line automatically
  882. X          added to the kernel description file that makes the adding
  883. X          and removing of FAS possible via the `kconfig' program. Thanks
  884. X          to John Adams (johna@grumpy.boston.ma.us) for this idea.
  885. X
  886. X          There is a mechanismn now that prevents excessive modem status
  887. X          interrupts caused by crosstalking between wires or by a loose
  888. X          cable.
  889. X
  890. X          You can disable the FIFOs in a UART by "oring" the macro
  891. X          `NO_FIFO' to the base port address of this device. This is
  892. X          useful for mouse devices where you need immediate response
  893. X          to the mouse movement.
  894. X
  895. X          The meaning of the bit mapped part of the minor device
  896. X          numbers has changed. Some rather useless functions were
  897. X          removed in favor of more control over the hardware handshake
  898. X          modes. Even systems where the SCO RTSFLOW/CTSFLOW termio(7)
  899. X          flags are not available can now use half duplex hardware
  900. X          flow control (selected via the minor device number).
  901. X
  902. X          The assignment of RS232C lines to certain FAS functions
  903. X          is even more flexible now. This allows to connect two
  904. X          UNIX systems (with FAS) via a null modem cable, running
  905. X          a getty at both ends. For more details, read the paragraph
  906. X          about CABLING in the README file.
  907. X
  908. X          A special handling of the NS16550A input FIFO was introduced.
  909. X          This causes multiple receiver interrupts (on the same IRQ
  910. X          line) to be synchronized so that only one interrupt is
  911. X          necessary to process all receiving ports. This reduces the
  912. X          interrupt handling overhead and therefore results in lower
  913. X          CPU load for concurrent serial input at high speeds.
  914. X
  915. X          The `fas_event' function processes all scheduled events
  916. X          for all units with one single call. Previously, every unit
  917. X          launched its own timeout() call if there was work to
  918. X          do. This could lead to up to 16 timeouts at the same time,
  919. X          resulting in some timeout handling overhead. This overhead
  920. X          is minimized now.
  921. X
  922. X     Bug Fixes:
  923. X
  924. X          There were two bugs that could cause a port to lock up,
  925. X          resulting in an immortal process.
  926. X
  927. X          Almost any kernel sleep is killable now (at least with one or
  928. X          two `kill -9'). Therefore, there should be no more immortal
  929. X          processes. Even killing a process that is hanging in a
  930. X          close-on-exit call is possible.
  931. X
  932. X          The meaning of the RTSFLOW/CTSFLOW termio(7) flags was converted
  933. X          to what SCO had in mind (half duplex flow control). This is for
  934. X          compatibility reasons. Full duplex RTS/CTS hardware flow control
  935. X          is still possible via the minor device number method. Thanks to
  936. X          Dmitry V. Volodin (dvv@hq.demos.su) for providing me with the
  937. X          necessary knowledge.
  938. X
  939. X          If a process is already sleeping in a getty open it will only
  940. X          unblock on DCD low->high. In particular, if in the meantime
  941. X          the device was open for dialout and DCD is still present if
  942. X          the getty open takes over again this won't unblock the getty
  943. X          open any more.
  944. X
  945. X          And there were, as usual, a number of other small bug fixes.
  946. X
  947. X     ------------------------------------------------------------
  948. X          
  949. X     release 2.09 Sun Jun 23, 1991
  950. X
  951. X     New Features:
  952. X
  953. X          AT&T UNIX 3.2 Version 2.1 is supported.
  954. X
  955. X          Support was added for SysVr4 UNIX 386 (with the tty compatibility
  956. X          drivers). This was mostly a problem of ANSI-fying certain parts
  957. X          of the FAS sources. For this operating system, there is no VP/ix
  958. X          support in FAS. This will change when FAS is converted into a
  959. X          STREAMS driver.
  960. X
  961. X          Killing a process hanging on an FAS port that had output
  962. X          flow stopped was usually done by issuing one or two `kill -9'
  963. X          commands. However, this method could hang the whole UNIX kernel.
  964. X          Therefore, another method to release hung processes is
  965. X          introduced in this release.
  966. X          If you open an FAS device with the O_TRUNC flag, the input
  967. X          and output buffers of that device get flushed. As a side
  968. X          effect, if you had previously tried to kill a hung process,
  969. X          and it continued to hang on an FAS device, you simply have
  970. X          to open that device with the O_TRUNC flag, and the hung
  971. X          process is released. All you have to do is to type
  972. X          echo '\c' > /dev/ttyname
  973. X          and the device buffers are flushed.
  974. X
  975. X          There is a new array called fas_overrun[], which is of
  976. X          type `uint', that contains three receiver overrun counters
  977. X          for NS16450, i82510 and NS16550A UART chips, in that order.
  978. X          If you have a tool that permits you to look at kernel
  979. X          variables during runtime, you can determine yourself
  980. X          whether the problems you may have might be caused by
  981. X          lost input characters. With every receiver overrun, the
  982. X          respective counter is incremented by one.
  983. X
  984. X     Bug Fixes:
  985. X
  986. X          The problem with the excessive modem status interrupts
  987. X          is fixed. Well, kind of. It is suppressed, at least.
  988. X          Crosstalk between the lines in a serial cable wastes
  989. X          only a minor amount of CPU time now. Therefore, it isn't
  990. X          necessary any more to shut down a port when this happens.
  991. X          However, if you use an operating mode (selected by the
  992. X          minor device number) that assigns certain functions to
  993. X          the input pins at the RS232C connector (DCD, DSR, CTS and
  994. X          RI), and these pins toggle because of crosstalk in the cable,
  995. X          problems may still occure. But at least it won't panic the
  996. X          kernel any more, nor will it consume lots of CPU time.
  997. X
  998. X          Additionally, in operating modes where FAS doesn't need to
  999. X          know anything about modem status lines, the modem status
  1000. X          interrupt is actually disabled. For instance, when a minor
  1001. X          device number of 0 + port# is used. On the other hand,
  1002. X          switching the device to DOS mode always _enables_ the
  1003. X          modem status interrupts.
  1004. X
  1005. X          A problem was fixed when a port was in the canonical (cooked)
  1006. X          mode and FAS still tried to protect the CLIST input buffer
  1007. X          from overflowing. This blocked the connected terminal until
  1008. X          a break signal or a hangup. The input buffer protection
  1009. X          should, of course, only happen in raw mode.
  1010. X
  1011. X          The TIMEOUT tty state flag isn't used any more by FAS.
  1012. X          Because this flag is used by the line discipline as well,
  1013. X          its usage in FAS could cause problems.
  1014. X
  1015. X          There was a bug in the handling of one pointer in the
  1016. X          fas_test_device() function.
  1017. X
  1018. X          In fas_event(), looping for the same port several times until
  1019. X          all events are serviced could cause temporary deadlocks. We
  1020. X          now don't loop any more. If an event occures while in fas_event(),
  1021. X          but the branch responsible for processing was already passed,
  1022. X          this event has to wait until the next call of fas_event()
  1023. X          (usually one or two kernel ticks later).
  1024. X
  1025. X          The AIOCINFO ioctl() command returned the minor device number.
  1026. X          Now it returns the unit number.
  1027. X
  1028. X          SIGHUP will be sent only if the port is the controlling terminal
  1029. X          of a process group.
  1030. X
  1031. X          There was a problem with the initialization macros for the
  1032. X          fas_modem[] and fas_flow[] arrays. Under Xenix 286, some
  1033. X          of these macros expanded to a value of zero because the
  1034. X          size of type int is 16 bits, while it is 32 bits for all
  1035. X          the 386 UNIX flavors. This resulted in dropped bits with
  1036. X          some macros that use the `<<' operator.
  1037. X
  1038. X          An fasopen() call is checked immediately for permissions now,
  1039. X          even if another process is currently hanging in fasclose().
  1040. X          The fasopen() call, of course, can be completed only after
  1041. X          the other process has returned from fasclose().
  1042. X
  1043. X     ------------------------------------------------------------
  1044. X          
  1045. X     release 2.09 PL1 Sun Sep 22, 1991
  1046. X
  1047. X     New Features:
  1048. X
  1049. X          There is a new variable called fas_msi_noise. This
  1050. X          is a counter that is incremented each time the modem
  1051. X          status interrupt of a UART had to be disabled due to
  1052. X          excessive logic level transitions on one or more
  1053. X          modem status lines (DCD, DSR, CTS and RING).
  1054. X          This can be used to check whether there is any
  1055. X          crosstalking at high speeds in your serial cables
  1056. X          and should be taken as a hint that you should improve
  1057. X          your cables (shorter and/or shielded ones). Note
  1058. X          that there are also some modems or other devices
  1059. X          that cause this counter to be incremented (slowly,
  1060. X          though). In this case fixing the cabling won't
  1061. X          help.
  1062. X
  1063. X          FAS now supports a port speed of 57600 bps. By
  1064. X          default, in the array fas_port[] (`space.c') you can
  1065. X          set a flag (`HIGH_SPEED') independently for each port
  1066. X          to have 57600 bps instead of 38400 bps on the respective
  1067. X          port. Due to interrupt latency in the UNIX kernel you
  1068. X          will need a 486 mainboard even with NS16550A chips if
  1069. X          you don't want to risk losing incoming characters. For
  1070. X          terminals connected at this speed, a slower mainboard
  1071. X          will suffice, however. To make this speed work well,
  1072. X          the transmitter buffer size has been increased to 5000
  1073. X          bytes.
  1074. X
  1075. X          Another flag (`NO_TEST') can be set in fas_port[]
  1076. X          (`space.c') to disable the testing procedure for
  1077. X          the respective port. This can be used to allow
  1078. X          UART chips (i.e. internal modems) that don't pass
  1079. X          the test but seem to work anyway. Note that if you
  1080. X          do that you're completely on your own if you have
  1081. X          problems with FAS. I won't support you if you use
  1082. X          this flag because using UARTs that need this flag
  1083. X          means calling for trouble. I simply can't diagnose
  1084. X          this kind of hardware problem from the remote.
  1085. X
  1086. X          The SVR4 `CTSXON' and `RTSXOFF' hardware flow
  1087. X          control flags are supported, although I still
  1088. X          believe that FAS' minor device number based
  1089. X          method for controlling hardware handshake modes
  1090. X          is superiour to any method that is using ioctl()
  1091. X          calls for that purpose.
  1092. X
  1093. X          Made the UART testing in fas_test_device() even
  1094. X          harder. Now it should detect brain dead chips
  1095. X          more reliable.
  1096. X
  1097. X     Bug Fixes:
  1098. X
  1099. X          Modified fasopen() to handle mixed (with and w/o
  1100. X          O_NDELAY flag) invocations while there is no
  1101. X          carrier.
  1102. X
  1103. X          On dialout devices with modem control it was
  1104. X          intended that after carrier drop the first
  1105. X          TCSETA* ioctl() command would switch FAS to
  1106. X          ignore DCD for that port again (as is the
  1107. X          case after the initial fasopen() call). This
  1108. X          breaks certain shells that do a TCSETA*
  1109. X          command before they read from stdin, and therefore
  1110. X          never notice that DCD dropped. They don't get
  1111. X          the SIGHUP either because they are in another
  1112. X          process group at this time (job control !).
  1113. X          Now it is only possible to reset FAS in
  1114. X          the above manner if the CLOCAL flag is set
  1115. X          with the TCSETA* command. Once FAS is
  1116. X          switched to ignore DCD, CLOCAL can be cleared
  1117. X          again.
  1118. X
  1119. X          If the carrier drops and modem control is
  1120. X          enabled (CLOCAL is off), SIGCONT is sent
  1121. X          before SIGHUP (only where available) to
  1122. X          wake up stopped processes so that they will
  1123. X          notice the hangup signal.
  1124. X
  1125. X          Several other bug fixes, cleanups and improvements.
  1126. X
  1127. X     ------------------------------------------------------------
  1128. X          
  1129. X     release 2.10 PL0 Mon Aug 17, 1992
  1130. X
  1131. X     New Features:
  1132. X
  1133. X          There are no interrupt vectors to be entered in `space.c'.
  1134. X          The only place where int vectors are contained in this
  1135. X          release is the `s_fas' file. The reason for this is that
  1136. X          the interrupt function in FAS now scans all _active_ ports
  1137. X          no matter what int vector they are assigned to. This is
  1138. X          necessary in order to sort the ports by their speed. Scanning
  1139. X          the fastest port(s) first makes receiver character loss less
  1140. X          likely, especially at speeds > 19200 bps. Although this method
  1141. X          has a slight CPU time overhead for only one running port the
  1142. X          real advantage is that when more than one port is running,
  1143. X          and especially when these ports are receiving NS16550A UARTs
  1144. X          where the interrupt frequency optimization is used, the
  1145. X          CPU time requirements for each additional running port are
  1146. X          substantially lower than with previous FAS releases.
  1147. X
  1148. X          Where available, the Makefile puts the kernel defines from
  1149. X          `/etc/conf/cf.d/defines' into the compiler command line.
  1150. X
  1151. X          There are now different Makefiles for ISC UNIX 2.x and 3.x.
  1152. X          This has to do with a change in the ISC kernel config kit.
  1153. X
  1154. X          Under SVR4 the copy of `fas.h' that goes to `/usr/include/sys'
  1155. X          now gets the time stamp of the copy operation so that the
  1156. X          dependency in the Makefile works.
  1157. X
  1158. X          Either 57600 or 115200 bps can be used instead of 38400 bps.
  1159. X          For 115200 a very fast mother board and a UNIX with a low
  1160. X          interrupt latency is necessary to prevent input character loss.
  1161. X
  1162. X          There is a flag `LOW_INT_LAT' that can be defined in the
  1163. X          makefile if the UNIX kernel has a low tty interrupt latency.
  1164. X          This saves a lot of CPU time at high speeds because the
  1165. X          receiver FIFO trigger level is set to 8 instead of 4 (default),
  1166. X          and therefore the receiver interrupt frequency is cut in half.
  1167. X
  1168. X          The flags that can be "or"ed into the base port address of
  1169. X          a UART to change its default behaviour are now documented
  1170. X          in the README file.
  1171. X
  1172. X          Template files for the DigiChannel PC/8 card were added.
  1173. X
  1174. X          Support for gcc has been added. If NO_ASM is _not_ defined
  1175. X          inline code for the inb() and outb() functions is generated
  1176. X          with the help of the __asm__ feature. However, when __asm__
  1177. X          is used together with the `volatile' storage class gcc
  1178. X          produces rather poor code. I assume that in this case gcc
  1179. X          can't do some optimizations because they would break the
  1180. X          inline assembler code. And the code gets even worse if
  1181. X          -fstrength-reduce is used (with or without inline assembler
  1182. X          code). Apparently gcc is over-optimizing the code so that
  1183. X          it is in fact slower than without -fstrength-reduce. So
  1184. X          don't use this flag. All tests where done with gcc 1.40.
  1185. X
  1186. X          There is an interrupt acknowledge sequence in `space.c' now
  1187. X          that is similar to the init sequence but is executed by the
  1188. X          fasintr() function after all pending interrupts on all serial
  1189. X          cards have been processed. This is a replacement for the
  1190. X          fas_int_ack_port and fas_int_ack arrays that are gone because
  1191. X          we don't use interrupt vectors any more inside FAS.
  1192. X
  1193. X          The receiver and modem status interrupts are disabled now
  1194. X          whenever they aren't needed. If they are disabled this
  1195. X          saves some CPU time in the interrupt function.
  1196. X
  1197. X          A new termio(7) flag CRTSFL under SCO UNIX 3.2.4 enables full
  1198. X          duplex hardware flow control, but only if neither CTSFLOW nor
  1199. X          RTSFLOW are set. See the termio(7) man page. However, remember
  1200. X          that when you use a minor device number controlled hardware
  1201. X          handshake mode (the prefered method with FAS, even under SCO
  1202. X          UNIX and Xenix) the flags CTSFLOW, RTSFLOW and CRTSFL are
  1203. X          ignored!
  1204. X
  1205. X          For each port, it can be selected whether the SCO UNIX/Xenix
  1206. X          CTSFLOW/RTSFLOW termio(7) flags enable half duplex hardware
  1207. X          flow control (default, compatible with the sio driver), or if
  1208. X          they enable full duplex hardware flow control (compatible with
  1209. X          many "intelligent" serial cards from third party vendors).
  1210. X
  1211. X          The RTS_TOG ioctl() command is supported (if available).
  1212. X
  1213. X          The sources for this release, and also the object file, are
  1214. X          somewhat bigger than the previous release. Besides other
  1215. X          things this is caused by the inlining of some functions.
  1216. X          These functions were called rather frequently and were
  1217. X          small enough for inlining. This saves some function call
  1218. X          overhead.
  1219. X
  1220. X          There are lots of changes that yield a better use of
  1221. X          register variables, especially in loops.
  1222. X
  1223. X     Bug Fixes:
  1224. X
  1225. X          The method to flush the output buffers of a port while a
  1226. X          process is hanging in fasclose() has been changed. In
  1227. X          FAS 2.09 the buffers were flushed when the port was opened
  1228. X          with the O_TRUNC flag. This caused some problems with shell
  1229. X          scripts that wanted to write text with
  1230. X
  1231. X               echo 'foo bar' > /dev/tty
  1232. X
  1233. X          I changed FAS to use O_APPEND instead. So in order to flush
  1234. X          the output buffers in this release one has to use
  1235. X
  1236. X               echo '\c' >> /dev/ttyF00
  1237. X
  1238. X          if the port `ttyF00' is hanging.
  1239. X
  1240. X          The kernel `ttyhog' variable is used instead of the default
  1241. X          TTYHOG value from `tty.h'. So FAS notices if this variable is
  1242. X          tuned by the SysAdmin.
  1243. X
  1244. X          The array `fas_info' has been renamed to `fas_internals'
  1245. X          to prevent a name space collision under SVR4.
  1246. X
  1247. X          `fas_overrun' and `fas_msi_noise' where declared `static'.
  1248. X          Under some UNIX flavours a static kernel variable isn't
  1249. X          found by programs that are used to look at variables in
  1250. X          the running kernel. This is fixed now.
  1251. X
  1252. X          The method how to handle concurrent fasopen() calls with
  1253. X          and without O_NDELAY on a device that waits for a carrier
  1254. X          has been changed back to what FAS 2.09.0 did. If there
  1255. X          already is a process waiting for carrier and another process
  1256. X          opens the device with O_NDELAY the waiting process is waked
  1257. X          up and completes its fasopen() call regardless of the state
  1258. X          of the carrier. This is because due to the AT&T kernel design
  1259. X          we can't have both a sleeping and a working process on the
  1260. X          same device. Patch #1 for FAS 2.09 introduced a bug which
  1261. X          caused hung gettys. This error is fixed by going back to
  1262. X          the method used in FAS 2.09.0.
  1263. X
  1264. X          The problem that caused occasional crashes under SCO UNIX
  1265. X          appears to be fixed. I don't know for sure why this is so.
  1266. X          We'll see.
  1267. X
  1268. X          When a process is waiting inside fasclose() for the
  1269. X          output buffers to drain and the process receives a
  1270. X          signal that is not ignored the output buffer is
  1271. X          automatically flushed in order to allow fasclose()
  1272. X          to complete before the signal handler is entered.
  1273. X          This has to happen because the open file counter is
  1274. X          decremented _before_ fasclose() is called. So after
  1275. X          the signal handler has done its work fasclose() wouldn't
  1276. X          be entered again because the open file counter is already
  1277. X          zero at this time. That means that whatever happens fasclose()
  1278. X          must have done its cleanup for the port before it returns.
  1279. X
  1280. X          Under SVR4 longjmp() wants a pointer as its parameter.
  1281. X
  1282. X          The half and full duplex hardware handshake has been
  1283. X          redesigned to be more bullet proof when it comes to
  1284. X          switching from one mode to the other.
  1285. X
  1286. X          The Logitech mouse problem has been solved. There is
  1287. X          a bug in the generic ttiocom() support function that
  1288. X          FAS needs to circumvent with some additional code.
  1289. X
  1290. X          The incrementation of the counters in the sysinfo
  1291. X          structure is fixed in that it happens only once for
  1292. X          each interrupt and not once for every port that has
  1293. X          work to do. This better reflects the actual interrupt
  1294. X          load.
  1295. X
  1296. X          Because a carrier drop is processed asynchronously in
  1297. X          fas_event() it is necessary to at least stop the
  1298. X          character output as soon as the modem status interrupt
  1299. X          is detected. Now only up to 16 characters (one FIFO
  1300. X          load with NS16550A) will be transmitted after carrier
  1301. X          drop. This is in line with the latency of the hardware
  1302. X          output handshake.
  1303. X
  1304. X          And of course lots of other optimizations and small
  1305. X          fixes.
  1306. SHAR_EOF
  1307. true || echo 'restore of RELEASENOTES failed'
  1308. rm -f _shar_wnt_.tmp
  1309. fi
  1310. # ============= config-ast4 ==============
  1311. if test -f 'config-ast4' -a X"$1" != X"-c"; then
  1312.     echo 'x - skipping config-ast4 (File already exists)'
  1313.     rm -f _shar_wnt_.tmp
  1314. else
  1315. > _shar_wnt_.tmp
  1316. echo 'x - extracting config-ast4 (Text)'
  1317. sed 's/^X//' << 'SHAR_EOF' > 'config-ast4' &&
  1318. X* its character device number 4
  1319. Xcharacter(4)
  1320. X
  1321. X* its name
  1322. Xprefix = fas
  1323. X
  1324. X* The interrupt vectors handled by this controller
  1325. Xintvec = 4
  1326. X
  1327. X* its mask level
  1328. Xintpri = SPLTTY
  1329. X
  1330. X* the functions it supports
  1331. Xfunctions = init, open, close, read, write, ioctl, tty
  1332. SHAR_EOF
  1333. true || echo 'restore of config-ast4 failed'
  1334. rm -f _shar_wnt_.tmp
  1335. fi
  1336. # ============= config-ast4c12 ==============
  1337. if test -f 'config-ast4c12' -a X"$1" != X"-c"; then
  1338.     echo 'x - skipping config-ast4c12 (File already exists)'
  1339.     rm -f _shar_wnt_.tmp
  1340. else
  1341. > _shar_wnt_.tmp
  1342. echo 'x - extracting config-ast4c12 (Text)'
  1343. sed 's/^X//' << 'SHAR_EOF' > 'config-ast4c12' &&
  1344. X* its character device number 4
  1345. SHAR_EOF
  1346. true || echo 'restore of config-ast4c12 failed'
  1347. fi
  1348. echo 'End of fas210 part 2'
  1349. echo 'File config-ast4c12 is continued in part 3'
  1350. echo 3 > _shar_seq_.tmp
  1351. exit 0
  1352. -- 
  1353. Uwe Doering  |  INET : gemini@geminix.in-berlin.de
  1354. Berlin       |----------------------------------------------------------------
  1355. Germany      |  UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
  1356.