home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #20 / NN_1992_20.iso / spool / comp / sources / misc / 3958 < prev    next >
Encoding:
Text File  |  1992-09-14  |  57.2 KB  |  1,361 lines

  1. Newsgroups: comp.sources.misc
  2. Path: sparky!kent
  3. From: wht@n4hgf.Mt-Park.GA.US (Warren Tucker)
  4. Subject:  v32i066:  ecu - ECU Asynchronous Communications v3.20, Part31/40
  5. Message-ID: <1992Sep14.145112.22535@sparky.imd.sterling.com>
  6. Followup-To: comp.sources.d
  7. X-Md4-Signature: 599cd78cb690e2022337adb7557a5a71
  8. Sender: kent@sparky.imd.sterling.com (Kent Landfield)
  9. Organization: Sterling Software
  10. References: <csm-v32i036=ecu.141245@sparky.IMD.Sterling.COM>
  11. Date: Mon, 14 Sep 1992 14:51:12 GMT
  12. Approved: kent@sparky.imd.sterling.com
  13. Lines: 1346
  14.  
  15. Submitted-by: wht@n4hgf.Mt-Park.GA.US (Warren Tucker)
  16. Posting-number: Volume 32, Issue 66
  17. Archive-name: ecu/part31
  18. Environment: SCO,XENIX,ISC,SUNOS,SYSVR4,HDB,Curses
  19. Supersedes: ecu: Volume 21, Issue 53-89
  20.  
  21. ---- Cut Here and feed the following to sh ----
  22. #!/bin/sh
  23. # this is ecu320.31 (part 31 of ecu320)
  24. # do not concatenate these parts, unpack them in order with /bin/sh
  25. # file fasi/Makefile continued
  26. #
  27. if test ! -r _shar_seq_.tmp; then
  28.     echo 'Please unpack part 1 first!'
  29.     exit 1
  30. fi
  31. (read Scheck
  32.  if test "$Scheck" != 31; then
  33.     echo Please unpack part "$Scheck" next!
  34.     exit 1
  35.  else
  36.     exit 0
  37.  fi
  38. ) < _shar_seq_.tmp || exit 1
  39. if test ! -f _shar_wnt_.tmp; then
  40.     echo 'x - still skipping fasi/Makefile'
  41. else
  42. echo 'x - continuing file fasi/Makefile'
  43. sed 's/^X//' << 'SHAR_EOF' >> 'fasi/Makefile' &&
  44. X    -mkdir $(INCLLOC) >/dev/null 2>&1
  45. X    cp digi-pc8.h $(INCLLOC)/digi-pc8.h
  46. X
  47. Xclean:
  48. X    rm -f fas.o Driver.o
  49. X
  50. Xclobber: clean
  51. X
  52. SHAR_EOF
  53. echo 'File fasi/Makefile is complete' &&
  54. chmod 0644 fasi/Makefile ||
  55. echo 'restore of fasi/Makefile failed'
  56. Wc_c="`wc -c < 'fasi/Makefile'`"
  57. test 1378 -eq "$Wc_c" ||
  58.     echo 'fasi/Makefile: original size 1378, current size' "$Wc_c"
  59. rm -f _shar_wnt_.tmp
  60. fi
  61. # ============= fasi/Master ==============
  62. if test -f 'fasi/Master' -a X"$1" != X"-c"; then
  63.     echo 'x - skipping fasi/Master (File already exists)'
  64.     rm -f _shar_wnt_.tmp
  65. else
  66. > _shar_wnt_.tmp
  67. echo 'x - extracting fasi/Master (Text)'
  68. sed 's/^X//' << 'SHAR_EOF' > 'fasi/Master' &&
  69. Xfas    Iocrwi    iHct    fas    0    0    1    16    -1
  70. SHAR_EOF
  71. chmod 0644 fasi/Master ||
  72. echo 'restore of fasi/Master failed'
  73. Wc_c="`wc -c < 'fasi/Master'`"
  74. test 32 -eq "$Wc_c" ||
  75.     echo 'fasi/Master: original size 32, current size' "$Wc_c"
  76. rm -f _shar_wnt_.tmp
  77. fi
  78. # ============= fasi/Node ==============
  79. if test -f 'fasi/Node' -a X"$1" != X"-c"; then
  80.     echo 'x - skipping fasi/Node (File already exists)'
  81.     rm -f _shar_wnt_.tmp
  82. else
  83. > _shar_wnt_.tmp
  84. echo 'x - extracting fasi/Node (Text)'
  85. sed 's/^X//' << 'SHAR_EOF' > 'fasi/Node' &&
  86. Xfas    tty1a    c    80
  87. Xfas    tty1A    c    208
  88. Xfas    tty2a    c    81
  89. Xfas    tty2b    c    82
  90. Xfas    tty2c    c    83
  91. Xfas    tty2d    c    84
  92. Xfas    tty2e    c    85
  93. Xfas    tty2f    c    86
  94. Xfas    tty2g    c    87
  95. Xfas    tty2h    c    88
  96. Xfas    tty2A    c    209
  97. Xfas    tty2B    c    210
  98. Xfas    tty2C    c    211
  99. Xfas    tty2D    c    212
  100. Xfas    tty2E    c    213
  101. Xfas    tty2F    c    214
  102. Xfas    tty2G    c    215
  103. Xfas    tty2H    c    216
  104. SHAR_EOF
  105. chmod 0644 fasi/Node ||
  106. echo 'restore of fasi/Node failed'
  107. Wc_c="`wc -c < 'fasi/Node'`"
  108. test 279 -eq "$Wc_c" ||
  109.     echo 'fasi/Node: original size 279, current size' "$Wc_c"
  110. rm -f _shar_wnt_.tmp
  111. fi
  112. # ============= fasi/PATCHLEVEL ==============
  113. if test -f 'fasi/PATCHLEVEL' -a X"$1" != X"-c"; then
  114.     echo 'x - skipping fasi/PATCHLEVEL (File already exists)'
  115.     rm -f _shar_wnt_.tmp
  116. else
  117. > _shar_wnt_.tmp
  118. echo 'x - extracting fasi/PATCHLEVEL (Text)'
  119. sed 's/^X//' << 'SHAR_EOF' > 'fasi/PATCHLEVEL' &&
  120. Xrelease 2.08 patchlevel b2 fasi x1.03
  121. SHAR_EOF
  122. chmod 0644 fasi/PATCHLEVEL ||
  123. echo 'restore of fasi/PATCHLEVEL failed'
  124. Wc_c="`wc -c < 'fasi/PATCHLEVEL'`"
  125. test 38 -eq "$Wc_c" ||
  126.     echo 'fasi/PATCHLEVEL: original size 38, current size' "$Wc_c"
  127. rm -f _shar_wnt_.tmp
  128. fi
  129. # ============= fasi/README ==============
  130. if test -f 'fasi/README' -a X"$1" != X"-c"; then
  131.     echo 'x - skipping fasi/README (File already exists)'
  132.     rm -f _shar_wnt_.tmp
  133. else
  134. > _shar_wnt_.tmp
  135. echo 'x - extracting fasi/README (Text)'
  136. sed 's/^X//' << 'SHAR_EOF' > 'fasi/README' &&
  137. XThis is the original README from FAS 2.08 for reference only.
  138. XRead README.FASI. DO NOT CONTACT UWE DOERING REGARDING THIS HACKED VERSION
  139. X                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  140. X
  141. XREADME file for the FAS Final Async Solution driver
  142. X---------------------------------------------------
  143. X
  144. XWhat is this package:
  145. X
  146. X     This is an async driver for 286/386 based unix systems that adds
  147. X     several features that are not supported by vendors drivers.
  148. X     It supports
  149. X
  150. X        1.  the NS16550A and i82510 UART chips in full FIFO mode.
  151. X        2.  modem sharing for input and output.
  152. X        3.  shared interrupts.
  153. X        4.  multiplexed UART registers (HUB-6 card etc.).
  154. X        5.  full and half duplex hardware flow control.
  155. X        6.  VP/ix, the ISC DOS emulator.
  156. X
  157. X
  158. X     FAS was successfully tested under the following operating systems:
  159. X
  160. X     Microport UNIX SYSV 3.0
  161. X     ISC 386/ix 2.0.2 & 2.2
  162. X     ESIX Rev. C & D
  163. X     Bell Tech/Intel UNIX 3.2
  164. X     SCO UNIX 386
  165. X     SCO XENIX 386 2.3.2
  166. X     SCO XENIX 286 2.3.2
  167. X
  168. X     This driver should work with most of the UNIX SYS V/386 3.X ports
  169. X     currently available. You can have both this and the original
  170. X     vendor driver in the same kernel (if you really like to, but I
  171. X     wouldn't know why). Each driver controls its own separate set of
  172. X     serial ports. The only restriction here is that any int vector must
  173. X     not be used by more than one of the drivers. The kernel config
  174. X     program will complain otherwise.
  175. X
  176. X------------------------------------------------------------------------
  177. X     
  178. XHow it works:
  179. X
  180. X     DIALIN/DIALOUT ON THE SAME PORT
  181. X     -------------------------------
  182. X
  183. X     This driver supports shared line usage by having two logical
  184. X     devices sharing one physical line. Each logical device has its
  185. X     own name. For example for the first line the names are ttyF00
  186. X     (minor device 0) and ttyFM00 (minor device 192). The ttyF00
  187. X     is used for cu, kermit, and other programs that want to dial
  188. X     out. It ignores the modem signals and just goes to it. The
  189. X     ttyFM00 line is strictly for getty. When getty calls open on
  190. X     ttyFM00 the driver hangs the open until the modem asserts the
  191. X     carrier detect signal and then lets the open complete. If cu
  192. X     opens ttyF00 while getty is waiting for the open to complete
  193. X     the device is given to cu and the getty open must wait for cu
  194. X     to finish and then will again wait for the carrier. If cu
  195. X     tries to open the ttyF00 line while getty has ttyFM00 open cu
  196. X     will get an error. If getty tries to open ttyFM00 while cu has
  197. X     ttyF00 open the getty open will just hang and wait for cu to
  198. X     close the line and then wait for the carrier. To put it simply
  199. X     you should put up a getty on ttyFM00 with a -t 60 and use ttyF00
  200. X     for cu and uucico.
  201. X
  202. X     In the example above ttyF00 had a minor device number of 0 and
  203. X     ttyFM00 one of 192. But there are several other possible minor
  204. X     device numbers for each port.
  205. X
  206. X     The higher bits of the minor device number control the operating
  207. X     mode of the device. The port can't be opened by two or more
  208. X     different minor devices at the same time.
  209. X
  210. X     Minor device numbers are built according to the following
  211. X     description:
  212. X
  213. X        Bitmap:   m m f f x x x x
  214. X
  215. X           `m m' are the mode bits as follows:
  216. X
  217. X            0 0   The carrier signal is totally ignored. With carrier high->low
  218. X                  *no* SIGHUP signal is generated. The device does *not* block
  219. X                  on open if there is no carrier.
  220. X            0 1   After an initial open, the carrier signal is ignored.
  221. X                  Although, carrier high->low generates a SIGHUP signal. From
  222. X                  thereon the device is carrier controlled until the last
  223. X                  process has closed the device. An ioctl call with a TCSETA*
  224. X                  command resets the device to ignore carrier again until the
  225. X                  next carrier high->low. The device does *not* block on open
  226. X                  if there is no carrier.
  227. X            1 0   The device is carrier controlled. It blocks on open if
  228. X                  there is no carrier.
  229. X            1 1   Same as mode `1 0', but a parallel non-blocking open
  230. X                  is possible while waiting for carrier.
  231. X
  232. X           `f f' are the hardware flow control bits as follows:
  233. X
  234. X            0 0   The RTSFLOW/CTSFLOW termio(7) flags (if available) enable
  235. X                  half duplex hardware flow control (for output direction,
  236. X                  only) according to SCO's specifications. If these flags
  237. X                  are not available no hardware flow control is used by
  238. X                  this device.
  239. X            0 1   The device uses full duplex hardware flow control (for
  240. X                  input and output direction).
  241. X            1 0   The device uses half duplex hardware flow control (for
  242. X                  output direction, only).
  243. X            1 1   Same as mode `1 0', but additionally the output buffer
  244. X                  state is signaled to the connected device.
  245. X
  246. X                  Refer to the `space.c' file to determine which port
  247. X                  signals are actually used for that purpose.
  248. X
  249. X           `x x x x'
  250. X                  This is the physical port number. This driver supports
  251. X                  up to 16 ports. If you need more, you should use an
  252. X                  intelligent serial card because more than 16 devices
  253. X                  will eat up to much CPU time with this dumb-port approach.
  254. X
  255. X     - Note: If a device is carrier controlled, this implies the generation
  256. X             of a SIGHUP signal with every carrier high->low. This is of
  257. X             course only true if the CLOCAL flag is *not* set.
  258. X
  259. X             On my own system I prefer a minor device number of `0101xxxx'
  260. X             (80 + device #) for the non-blocking tty node and `1101xxxx'
  261. X             (208 + device #) for the blocking tty node. This gives me
  262. X             the SIGHUP signal on carrier loss and full duplex hardware
  263. X             flow control with both logical devices. Dialout while a dialin
  264. X             open is waiting for the carrier is also possible with this
  265. X             setup.
  266. X
  267. X
  268. X     WHICH SERIAL CARDS ARE SUPPORTED ?
  269. X     ----------------------------------
  270. X
  271. X     The driver supports and has been tested on many serial async
  272. X     dumb port cards. It supports most combinations of shared
  273. X     interrupts. The current driver supports NS16450, NS16550A,
  274. X     um82450 and i82510. 8250 chips are not supported due to various
  275. X     bugs and speed problems in these parts. They have no place in any
  276. X     286/386 or other high performance system. Replace them with one of
  277. X     the supported chips. They are pin-to-pin compatible.
  278. X     
  279. X     Take a look at the various samples of space-xxxx for details
  280. X     of how to set up for various devices.
  281. X
  282. X     At boot time you will see a status message on the screen with
  283. X     symbols that show the init state of each port. The symbols
  284. X     are as follows:
  285. X
  286. X        -     not defined in the fas_port array
  287. X        >     int vector greater than limit
  288. X        ?     can't initialize port
  289. X        1-6   error during test phase indicated by number
  290. X        *     port is initialized (NS16450)
  291. X        +     port is initialized and has FIFOs forced off
  292. X        f     port is initialized and has FIFOs (i82510)
  293. X        F     port is initialized and has FIFOs (NS16550)
  294. X
  295. X     This is convenient to check whether you have entered the proper port
  296. X     base addresses in `space.c'.
  297. X
  298. X
  299. X     WHICH CARD WILL SUPPORT SHARED INTERRUPTS ?
  300. X     -------------------------------------------
  301. X
  302. X     Many multi-port cards have jumpers or dip switches that let you
  303. X     assign more than one port to the same interrupt (IRQ) line. This alone
  304. X     is _no_ guaranty that they really support shared interrupts! These
  305. X     cards may be designed for the DOS world where you may want two or more
  306. X     serial ports but don't need to run them concurrently, that is, no more
  307. X     than one of those ports assigned to the same IRQ line is allowed to be
  308. X     in use at a time. For DOS this is sufficient as DOS is no multitasking
  309. X     operating system. For UNIX this won't work because in the worst case
  310. X     all serial ports may be in use at the same time.
  311. X
  312. X     The basic problem is that the PC (and AT) I/O bus can't handle shared
  313. X     interrupts itself. This is due to a brain-dead hardware design. Therefor,
  314. X     there must be some special logic on the serial card to provide shared
  315. X     interrupts. And those cards are quite rare (and usually more expensive).
  316. X
  317. X     Therefor, you have the choice to give every port on the card its own
  318. X     IRQ line or to buy a multi-port card that really has shared interrupts.
  319. X     But in the latter case you better ask your vendor twice to make shure
  320. X     that it has this functionality because from the card's manuals it often
  321. X     isn't obvious which type of card it is. One well-known shared interrupts
  322. X     card is the AST 4-port card. There are many compatible clones available
  323. X     that are usually much cheaper than the original. You can even buy
  324. X     AST compatible 8-port cards where two AST 4-port blocks are on the
  325. X     same board.
  326. X
  327. X
  328. X     A WORD ABOUT CHARACTER LOSSES
  329. X     -----------------------------
  330. X
  331. X     If you've experienced character losses with your vendor async
  332. X     driver at high baud rates you shouldn't blame the vendor for
  333. X     that. The real reason for this problem lies in the ancient port
  334. X     devices used in most 286/386 systems: The 8250 (not supported by
  335. X     FAS) and the NS16450.
  336. X
  337. X     They have only one receiver character buffer. This implies that
  338. X     the operating system must read a character from this buffer before
  339. X     the next one arrives from the port's shift register. For the old
  340. X     IBM PC with DOS this was sufficient. But for UNIX and with baud
  341. X     rates up to 38400 this is simply a joke.
  342. X
  343. X     UNIX is not a real-time operating system. That means that it's
  344. X     kernel isn't optimized for fast interrupt responses. With the
  345. X     proper hardware this is no problem. But because the vendors have
  346. X     to adapt UNIX to the standard hardware found in 286/386 systems they
  347. X     also have to cope with the NS16450 ports which are in there simply
  348. X     to be compatible with IBM PCs, XTs and ATs.
  349. X
  350. X     It is impossible to make it work at high baud rates without a
  351. X     major redesign of the AT&T supplied UNIX kernel. But then it
  352. X     wouldn't be UNIX SYSV any more.
  353. X
  354. X     Luckily, there is a pin-to-pin replacement available from
  355. X     National Semiconductors: The NS16550A.
  356. X
  357. X     This device has separate 16 character FIFOs for the receiver and
  358. X     the transmitter. With these FIFOs the interrupt latency of the
  359. X     kernel can be quiet high without losing any characters.
  360. X     Additionally, because with most interrupts many characters are
  361. X     processed at once the system is loaded much less.
  362. X
  363. X     As you see, the necessary hardware is available. Therefor, if you
  364. X     have to blame the UNIX vendor then blame him for not telling you
  365. X     that you should buy some NS16550A and/or for not supplying you
  366. X     with a serial driver that supports these port devices.
  367. X
  368. X     But as you have the FAS driver now and if you use the NS16550A
  369. X     devices you shouldn't have this kind of trouble any more. This is
  370. X     the philosophy behind the driver's name `Final Async Solution'.
  371. X
  372. X     Enjoy!
  373. X
  374. X     PS: If for some reason you can't get the NS16550A chips you
  375. X         could use the i82510 chips from Intel. Although they are
  376. X         much less efficient they are still better than the NS16450.
  377. X
  378. X     PPS: Some kernel functions may disable interrupts long enough
  379. X          that even the input FIFO can't prevent character loss.
  380. X          One culprit is the disk cache flush function. If you
  381. X          configure your kernel with too many cache buffers (NBUF
  382. X          parameter for AT&T derived UNIX) you may still lose
  383. X          characters (at least at 38400 bps).
  384. X
  385. X          An other candidate is VP/ix, or rather the kernel functions
  386. X          to support VP/ix. This may also lead to lost characters
  387. X          at very high input speed.
  388. X
  389. X
  390. X     HARDWARE FLOW CONTROL
  391. X     ---------------------
  392. X
  393. X     FAS supports both full and half duplex hardware flow control, using
  394. X     the RS232C RTS/CTS control lines (by default).
  395. X
  396. X     Full duplex flow control is a method to control character flow in
  397. X     both input and output directions while in half duplex flow control
  398. X     mode only the output direction is controlled.
  399. X
  400. X     You can select between full and half duplex flow control via the
  401. X     minor device number of the device. In full duplex mode the RTS line
  402. X     controls the input direction and the CTS line is responsible for the
  403. X     output direction. In half duplex mode RTS tells the connected device
  404. X     whether there is data in the output buffer (optional), and the CTS
  405. X     line has the same function as in full duplex mode.
  406. X
  407. X     Full duplex mode:
  408. X
  409. X          As long as the FAS input buffer hasn't reached a certain
  410. X          threshold the RTS line is set high to signal the connected
  411. X          device that it may send characters. If the input buffer level
  412. X          rises beyond this threshold RTS will go low and the device
  413. X          is supposed to stop sending characters. As soon as there is
  414. X          sufficient space in the input buffer RTS will go high again
  415. X          and the character flow may continue.
  416. X
  417. X          The CTS line works the other way round. If the connected device
  418. X          sets CTS to high the FAS character output is enabled. If CTS is
  419. X          low, the output is stopped. There is a special feature for the
  420. X          CTS part of the handshake. CTS is only looked at if the DSR
  421. X          line is high. If DSR is low or not connected hardware output
  422. X          handshake is disabled, that is, FAS sends characters
  423. X          regardless of the state of CTS.
  424. X
  425. X          This has two advantages. At first, if you switch off a serial
  426. X          device connected to an FAS port with hardware flow control
  427. X          CTS will go low and therefor the output gets blocked. If at
  428. X          this time there are still characters in the output buffer the
  429. X          last process closing this port can't terminate until the
  430. X          buffer has drained.
  431. X
  432. X          But as DSR will also go low if you switch off the device
  433. X          this blocking of the output will be prevented. In short:
  434. X          Hardware output handshake is only used if the connected
  435. X          device sets DSR high, that is, the device is switched on
  436. X          and is ready. So make sure that you keep this in mind when
  437. X          you make serial cables and when you configure your serial
  438. X          devices. DSR must be on if you want CTS handshake.
  439. X
  440. X          The other advantage of this CTS/DSR mechanismn is that you
  441. X          can still connect dumb serial devices to an FAS hardware
  442. X          handshake port using a minimal 3-wire cable. As an unconnected
  443. X          DSR line is automatically low hardware output handshake is
  444. X          disabled, which is just what you wanted in this case.
  445. X
  446. X     Half duplex mode:
  447. X
  448. X          There are actually three half duplex modes selected by
  449. X          the minor device number:
  450. X
  451. X          First mode:
  452. X             If the RTSFLOW termio(7) flag is set _and_ the CLOCAL
  453. X             flag is _not_ set the RTS line is used to signal the
  454. X             connected device that there is data in the output buffer.
  455. X             As long as there is output data to come the RTS line stays
  456. X             high. If the output buffer has drained RTS drops to low
  457. X             until there is more data to be sent to the connected device.
  458. X
  459. X             If the CTSFLOW termio(7) flag is set _and_ the CLOCAL
  460. X             flag is _not_ set the CTS line used to control the output
  461. X             character flow. This works as in full duplex mode.
  462. X
  463. X          Second mode:
  464. X             This mode overrides the RTSFLOW/CTSFLOW flags and works
  465. X             as if the CTSFLOW flag is set permanently. The CLOCAL flag
  466. X             doesn't affect this mode.
  467. X
  468. X          Third mode:
  469. X             This mode overrides the RTSFLOW/CTSFLOW flags and works
  470. X             as if both the RTSFLOW and CTSFLOW flags are set permanently.
  471. X             The CLOCAL flag doesn't affect this mode.
  472. X
  473. X
  474. X     CABLING
  475. X     -------
  476. X
  477. X     Don't leave unused input lines (CTS, DCD, DSR, RING) open! Due
  478. X     to crosstalking from other lines these input lines might change
  479. X     their logic level rapidly, resulting in excessive modem status
  480. X     interrupts that could bring your machine down to its knees.
  481. X     Therefor you should connect any unused input line to GND (pin 7
  482. X     on the D-Sub 25 RS232C connector).
  483. X
  484. X     To prevent the machine from locking up in a case like described
  485. X     above the port causing the modem status interrupts will be shut
  486. X     down for 30 seconds after the last close on that port. Any attempt
  487. X     to use an open(), read(), write() or ioctl() call to this port
  488. X     during the time until the last close and then 30 seconds from
  489. X     there will result in an ENXIO error.
  490. X
  491. X     The port shutdown will be indicated on the system console by a
  492. X     warning message containing the unit number of the offending port.
  493. X
  494. X     But even if this protection mechanismn isn't triggered on your
  495. X     computer you might have this problem. This is usually indicated
  496. X     by a bad system performance during high speed serial data transfers.
  497. X     Use your system's performance measurement tools to check the
  498. X     number of modem interrupts. If it is unusual high, or even
  499. X     higher than the number of transmit/receive interrupts, you
  500. X     certainly have a problem with your cabling. Of course, another
  501. X     reason could be a bad port chip.
  502. X
  503. X     ATTENTION: If you want to connect two UNIX systems (both using
  504. X     FAS) via a null modem cable, and if you want to run a getty
  505. X     on both ends you need to modify the `space.c' file to prevent
  506. X     both gettys talking to each other, wasting valuable CPU time.
  507. X     Remove the `EI_DTR' (or `EI_RTS', depending on your setup) macro
  508. X     for the desired port from the initializer part of the `fas_modem'
  509. X     array. This will cause DTR (or RTS) to be asserted only on
  510. X     dialout. Therefor, the getty at the other end will become alive
  511. X     only if a dialout is in progress.
  512. X
  513. X
  514. X     VP/ix SUPPORT
  515. X     -------------
  516. X
  517. X     FAS allows DOS programs running under VP/ix to access serial
  518. X     ports. You simply need to modify your personal VP/ix configuration
  519. X     file (`vpix.cnf') to tell the DOS emulator which FAS devices to
  520. X     use for COM1 (or COM1MOUSE) and COM2. Note that VP/ix opens
  521. X     these devices at startup time, so you better make sure that
  522. X     the desired devices aren't used by other processes when you
  523. X     start VP/ix as VP/ix wants to use them exclusively.
  524. X
  525. X     There are some special features with the handling of the RTS and
  526. X     DTR lines you should know about. If your DOS program asserts
  527. X     the DTR line this will actually cause action on the modem
  528. X     enable line you configured in `space.c'. Likewise, RTS asserts
  529. X     the half duplex hardware handshake line configured in `space.c'.
  530. X
  531. X     If the used FAS device has full duplex hardware handshake enabled,
  532. X     asserting RTS from DOS actually stops the character flow from FAS
  533. X     to VP/ix. This prevents input buffers of interrupt driven DOS
  534. X     programs from overflowing. FAS, on the other hand, uses its hardware
  535. X     handshake to prevent an overflow of its own input buffer. Therefor
  536. X     you can use DOS telecommunication programs even at high baud rates
  537. X     without losing characters, provided your DOS programs are
  538. X     configured to use full duplex RTS/CTS flow control.
  539. X
  540. X     All this virtual handling has the advantage that the DOS program
  541. X     doesn't need to know certain details about your actual port setup.
  542. X     Reading the modem status register, on the other hand, doesn't cause
  543. X     any translation of the register value.
  544. X
  545. X     To enable VP/ix support, you have to uncomment the `HAVE_VPIX'
  546. X     define in `fas.h'.
  547. X
  548. X
  549. X     DEVICE LOCKUPS
  550. X     --------------
  551. X
  552. X     There are certain conditions under which a device can lock up,
  553. X     that is, at least one process that uses this device waits for
  554. X     a tty I/O related event that obviously doesn't occure.
  555. X
  556. X     The most common case is that there are still characters in the
  557. X     output buffer, but the output is disabled for some reason. Then
  558. X     the last process that closes the tty device hangs in the close()
  559. X     function until the output buffer has drained.
  560. X
  561. X     Tty output may be stopped by the software (XON/XOFF) or hardware
  562. X     (RTS/CTS, by default) flow control. In this case something
  563. X     seems to be wrong with the cabling or the connected device.
  564. X     Please check this first out before you blame FAS. Sometimes
  565. X     it helps to switch the device off and on a few times to unblock
  566. X     the tty output.
  567. X
  568. X     Another reason could be a lost transmitter interrupt. This usually
  569. X     indicates a hardware problem in your computer which should be fixed
  570. X     as soon as possible. Otherwise, you can't run this system unattended
  571. X     because it is too unreliable.
  572. X
  573. X     In the cases described above the last resort is entering `kill -9 <pid>'
  574. X     once or twice. This should unblock and terminate the hanging process.
  575. X
  576. X     And there is a rare case which has to do with the number of available
  577. X     CLISTs in the UNIX kernel. The CLIST output and input buffers are
  578. X     256 bytes each (by default). If for some reason the output of a
  579. X     tty device is stopped but a process continues to send data one
  580. X     character at a time this uses up one CLIST for every charcacter.
  581. X     If the number of CLISTs in the kernel is less than 256 all CLISTs
  582. X     will be busy eventually.
  583. X
  584. X     The dangerous part here is that the pool of CLISTs is used by all
  585. X     tty devices. Therefor, if one single tty device manages to eat up
  586. X     all available CLISTs all tty in- and output comes to a halt. If this
  587. X     happens you can't access your machine any more, not even from the
  588. X     operator console. Although, the system is still alive internally.
  589. X
  590. X     Unfortunately, many UNIX vendors have put a dangerously low number-of-
  591. X     CLISTs parameter into their kernel tune files. You should increase
  592. X     it to a value that makes it impossible that one device alone can
  593. X     occupy all CLISTs (it's the NCLIST parameter under AT&T derived
  594. X     UNIX SysVr3.x). A value of 400 should be sufficient.
  595. X
  596. X------------------------------------------------------------------------
  597. X
  598. XWhat's in this package:
  599. X
  600. X     README         This file.
  601. X
  602. X     INSTALLATION   A description about how to install the driver
  603. X                    on your system.
  604. X
  605. X     PATCHLEVEL     Just a reference file for future updates.
  606. X
  607. X     RELEASENOTES   Notes about the present FAS releases.
  608. X                    
  609. X     fas.h          The header file for the driver.
  610. X
  611. X     fas.c          The driver itself.
  612. X
  613. X     space-xxxxx    These are samples of what `space.c' must look
  614. X                    like.  You can either copy one of these to
  615. X                    `space.c' or use it as a template to create your
  616. X                    own `space.c'.
  617. X
  618. X          space-c1-2     For com1 and com2.
  619. X
  620. X          space-c1-3     For com1, com2 and com3.
  621. X
  622. X          space-ast4     For the AST 4-port card.
  623. X
  624. X          space-hub6     For the Bell Tech HUB-6 card.
  625. X
  626. X     config-xxxxx   This is for uPort SYS V/386 only.
  627. X                    Kernel configuaration file.  You should pick the one
  628. X                    that matches your configuration and copy it to `config'.
  629. X
  630. X          config-c1-2    For com1 and com2.
  631. X
  632. X          config-c1-3    For com1, com2 and com3.
  633. X
  634. X          config-ast4    For the AST 4-port card.
  635. X
  636. X          config-hub6    For the Bell Tech HUB-6 card.
  637. X
  638. X     s_fas-xxxxx    This is for ISC 386/ix, ESIX, Bell Tech/Intel UNIX 3.2
  639. X                    and SCO UNIX 386.
  640. X                    Kernel configuration file.  You should pick the one
  641. X                    that matches your configuration and copy it to `s_fas'.
  642. X
  643. X          s_fas-c1-2     For com1 and com2.
  644. X
  645. X          s_fas-c1-3     For com1, com2 and com3.
  646. X
  647. X          s_fas-ast4     For the AST 4-port card.
  648. X
  649. X          s_fas-hub6     For the Bell Tech HUB-6 card.
  650. X
  651. X     n_fas-xxxxx    This is for ISC 386/ix, ESIX, Bell Tech/Intel UNIX 3.2
  652. X                    and SCO UNIX 386.
  653. X                    Tty device nodes file.  You should pick the one
  654. X                    that matches your configuration and copy it to `n_fas'.
  655. X
  656. X          n_fas-c1-2     For com1 and com2.
  657. X
  658. X          n_fas-c1-3     For com1, com2 and com3.
  659. X
  660. X          n_fas-ast4     For the AST 4-port card.
  661. X
  662. X          n_fas-hub6     For the Bell Tech HUB-6 card.
  663. X
  664. X     i_fas-xxxxx    This is for ISC 386/ix, ESIX, Bell Tech/Intel UNIX 3.2
  665. X                    and SCO UNIX 386.
  666. X                    Inittab getty lines file.  You should pick the one
  667. X                    that matches your configuration and copy it to `i_fas'.
  668. X
  669. X          i_fas-c1-2     For com1 and com2.
  670. X
  671. X          i_fas-c1-3     For com1, com2 and com3.
  672. X
  673. X          i_fas-ast4     For the AST 4-port card.
  674. X
  675. X          i_fas-hub6     For the Bell Tech HUB-6 card.
  676. X
  677. X     Makefile.uPort A makefile for uPort SYS V/386 systems. This is generic
  678. X                    and should work for all configurations of lines
  679. X                    and interrupts.
  680. X
  681. X     Makefile.ISC   A makefile for ISC 386/ix systems.  This is generic
  682. X                    and should work for all configurations of lines
  683. X                    and interrupts.
  684. X
  685. X     Makefile.ESIX  A makefile for ESIX systems.  This is generic
  686. X                    and should work for all configurations of lines
  687. X                    and interrupts.
  688. X
  689. X     Makefile.BELL  A makefile for Bell Tech/Intel UNIX 3.2 systems.  This
  690. X                    is generic and should work for all configurations of
  691. X                    lines and interrupts.
  692. X
  693. X     Makefile.SCO   A makefile for SCO UNIX 386 systems.  This is generic
  694. X                    and should work for all configurations of lines
  695. X                    and interrupts.
  696. X
  697. X     Makefile.X386  A makefile for SCO Xenix 386 systems.  This is generic
  698. X                    and should work for all configurations of lines
  699. X                    and interrupts.
  700. X
  701. X     Makefile.X286  A makefile for SCO Xenix 286 systems.  This is generic
  702. X                    and should work for all configurations of lines
  703. X                    and interrupts.
  704. X
  705. X------------------------------------------------------------------------
  706. X
  707. XWhat you will need to use this package:
  708. X
  709. X     You will need one of the above mentioned UNIX systems with the
  710. X     kernel link kit and the software development package.
  711. X
  712. X------------------------------------------------------------------------
  713. X
  714. XThe original asy replacement driver for Microport UNIX/386 (FAS' predecessor)
  715. Xwas developed by
  716. X
  717. XJim Murray              INET            jjm%jjmhome@m2c.m2c.org
  718. X2 Mohawk Circle         UUCP            harvard!m2c!jjmhome!jjm
  719. XWestboro Mass 01581     
  720. XUSA                                     voice (508) 366-2813
  721. X
  722. XCredits to him for releasing this great driver to the Usenet community.
  723. XBut if you have problems with FAS please don't contact him because he
  724. Xwasn't involved in the developement of FAS.
  725. X
  726. XFAS was developed by [BUT DON'T BOTHER HIM ABOUT FAS/i]
  727. X
  728. XUwe Doering             INET : gemini@geminix.in-berlin.de
  729. XBillstedter Pfad 17 b   UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
  730. X1000 Berlin 20
  731. XGermany
  732. X
  733. X------------------------------------------------------------------------------
  734. XFor FAS/i inquiries:
  735. X   Warren Tucker wht@n4hgf.GA.US, emory!n4hgf!wht
  736. X
  737. X    ^    ^    ^    ^    ^    ^    ^    ^    ^    ^
  738. XSend your questions and bug reports to this address.
  739. SHAR_EOF
  740. chmod 0644 fasi/README ||
  741. echo 'restore of fasi/README failed'
  742. Wc_c="`wc -c < 'fasi/README'`"
  743. test 27697 -eq "$Wc_c" ||
  744.     echo 'fasi/README: original size 27697, current size' "$Wc_c"
  745. rm -f _shar_wnt_.tmp
  746. fi
  747. # ============= fasi/README.FASI ==============
  748. if test -f 'fasi/README.FASI' -a X"$1" != X"-c"; then
  749.     echo 'x - skipping fasi/README.FASI (File already exists)'
  750.     rm -f _shar_wnt_.tmp
  751. else
  752. > _shar_wnt_.tmp
  753. echo 'x - extracting fasi/README.FASI (Text)'
  754. sed 's/^X//' << 'SHAR_EOF' > 'fasi/README.FASI' &&
  755. XFAS/i is a special-purpose, unsupported version of FAS 2.08 for
  756. Xthose who need to have non-portable, but extended access to their tty driver.
  757. X
  758. XReasons to use:
  759. X
  760. X1. You get cumulative statistics on such things as receievd and
  761. Xtransmitted characters, modem signals and device errors.  As an
  762. Xexample of the information available, the ecu interactive 'fasi'
  763. Xcommand produces:
  764. X
  765. Xbase address: 0218 irq=3 device is 16550
  766. XMSR=*CTS*DSR*   MCR=*DTR*RTS*OUT2*
  767. XLCR=*8db*1sb*NOPAR*   IER=*RDAV*TBMT*LS*MS*
  768. Xrecv ring cnt=0  xmit ring cnt=0  xmit fifo size=16
  769. Xcharacters received    =        3097
  770. Xcharacters transmitted =       22407
  771. Xmodem status events    =         137
  772. Xoverrun errors=0  framing errors=0  parity errors=0
  773. Xrings detected=0  breaks detected=0
  774. Xxmtr flow off XON/XOFF=0  RTS/CTS=31
  775. Xrcvr flow off XON/XOFF=0  RTS/CTS=0
  776. Xdriver:  'FAS/i 2.08.0'
  777. Xspace.c: 'FAS/i 2.08:{1,4,03f8-03ff,COM1},{8,3,0210-024f,DIGI-PC8}'
  778. X
  779. X2. There are no other reasons to use.
  780. X
  781. XReasons NOT to use:
  782. X
  783. X1.  It is not supported. It is released configured for one COM1 (irq 4)
  784. Xand one 8-port Digiboard PC-8.  I will help with any issue that I can,
  785. Xbut I will be very uninterested in answering questions like "How do I
  786. Xget FAS/i to work with my PacificRim ModemBlaster 4800?"
  787. X
  788. X2. It is less efficient than FAS.  Statistics take CPU cycles to accumulate.
  789. XAlso, Uwe has done an indescribably superb job of optimizing the driver
  790. Xfor efficiency.  I have not analyzed the effect my changes have made to
  791. Xthe micromanagment of emitted code Uwe did, but it cannot have but harmed.
  792. X
  793. X3. The driver is non-standard.  It barks in the face of most of
  794. Xwhat I look for in well-produced software.
  795. X
  796. X4. Uwe will continue to work magic and this driver is unlikely to
  797. Xinherit it.
  798. X
  799. X5. FAS nor FAS/i appear to support DOS access to communications
  800. Xdevices through MERGE.
  801. X
  802. XNow, you say, why does that Tucker kid want to turn my tty driver
  803. Xinto a newt ("Well, [it] got better.")?  Because it can be very useful
  804. Xif you are developing asychronous communications systems.  I find
  805. Xit very useful to know how many times CTS fluctuated during a test
  806. Xsession.  Like the 'ecufriend,' it isn't for everyone, but if you
  807. Xneed it, there it is.
  808. X
  809. X>Message-Id: <m0jXaOF-0000ElC@geminix.in-berlin.de>
  810. X>From: emory!geminix.in-berlin.de!gemini (Uwe Doering)
  811. X>Subject: Re: [Request permission to distribute FAS 2.08 instrumented version]
  812. X>To: wht@n4hgf.Mt-Park.GA.US (Warren Tucker)
  813. X>Date: Mon, 29 Apr 91 17:43:51 MES
  814. X>
  815. X>Hello Warren,
  816. X>
  817. X>>...I am writing is to ask your permission ...
  818. X>>to include with ecu a modified FAS 2.08 I am calling FAS/i (for
  819. X>>instrumentation) so you can have access to statistics 
  820. X>> [some stuff deleted]
  821. X>
  822. X>You sent me the necessary patches some time ago. Since then I tried to
  823. X>make up my mind about this issue. I decided now that I won't have the
  824. X>patches in the official FAS release. There is a reason for that. I want
  825. X>to keep FAS as clean as possible from the application program standpoint.
  826. X>
  827. X[some stuff deleted]
  828. X>
  829. X>You have my permission to release your special FAS version, but please
  830. X>make it clear in the docs that _you_ do the support for it, and
  831. X>that it is no official FAS release.
  832. X>
  833. X>      Uwe
  834. X>-- 
  835. X>Uwe Doering  |  INET : gemini@geminix.in-berlin.de
  836. X>Berlin       |----------------------------------------------------------------
  837. X>Germany      |  UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
  838. X
  839. XThe strength of my earlier comments is driven in part by Uwe's comments.
  840. XI will be very disasppointed and red-faced if Uwe gets ONE query or
  841. Xrequest in regard to this hack.  I will be similarly dismayed if he
  842. Xgets one comment pro or con about folding these features into the
  843. Xofficial FAS.
  844. X
  845. XThis is a dead-end, special-purpose junkbox addition that just happens
  846. Xto be potentially useful.
  847. X
  848. XNow, with all that out of the way, here are a few useful tidbits:
  849. X
  850. X1. Configuration and installation are for the most part similar to
  851. Xthe standard FAS as of this writing.
  852. X
  853. X2. You will need to manually create a /usr/include/local directory
  854. Xbefore you begin any makes.
  855. X
  856. X3. The original FAS 2.08 functionality may be restored by turning
  857. Xoff #define FASI in several places.
  858. X
  859. X4. It has been used only on SCO.
  860. X
  861. X5. To use with ECU, you'll need to hack -DFASI_IN_USE into the
  862. Xecu Makefile.  The other programs in ecu don't need to know about it.
  863. X(Hint: ecufriends can make good use of the features.)
  864. X
  865. X6. If you turn on FAS/i support in ecu, you get the undocumented
  866. Xfasi interactive and procedure commands and these %functions:
  867. X
  868. XInteger functions:
  869. X%fasi       defined for all ecu versions; returns 1 if FAS/i
  870. X            support included, else 0 if not. The other functions
  871. X            will cause procedure termination with undefined function
  872. X            errors "ifi %fasi==0".
  873. X%msr        MSR current value
  874. X%lnerr      accumulated FE+OE+PE count
  875. X%ridet      accumulated RI count
  876. X%brdet      accumulated BREAK count
  877. X
  878. XString functions:
  879. X%msrtext    MSR current value in string form for easier (less efficient)
  880. X            MSR inspecition.  You can do something like
  881. X
  882. X     $s20 = %msrtext
  883. X     ifi %instr($s20,'CTS')
  884. X         echo 'CTS present'
  885. X     ifi %instr($s0,'RING')
  886. X         echo 'We are receiving a RING this very instant')
  887. XThe returned string is one or more substrings separated by asterisks.
  888. XSo, you might get 'CTS*DSR*RING*'.  The list of substrings, one for each
  889. Xbit in the canonized 8250 MSR:
  890. X
  891. XdCTS        delta CTS   <---+
  892. XdDSR        delta DSR       | you are unlikely to see these
  893. XdRI         delta RI        | since the driver catches interrupts
  894. XdDCD        delta DCD   <----
  895. XCTS     
  896. XDSR     
  897. XRING        
  898. XDCD     
  899. X
  900. X7. The fasiintf.c modules contains examples of each FAS/i-specific
  901. Xioctl.  These are also the only 'documentation' ever likely to be
  902. Xproduced for them other than this list:
  903. X
  904. XFASIC_SIP                  get entire fas_info struct
  905. XFASIC_MSR                  get various registers
  906. XFASIC_LCR     
  907. XFASIC_IER    
  908. XFASIC_MCR   
  909. XFASIC_DVR_IDENT            get driver revision
  910. XFASIC_SPACE_IDENT          get space.c revision
  911. XFASIC_RESET_STAT           reset statistics
  912. X
  913. X8. This hacked 'release' is in the style of a purpose-specific
  914. Xdriver.  If you have an SCO UNIX 3.2.x system with a standard COM1
  915. Xport and a Digiboard PC-8 on COM2, man are you in luck.  Otherwise,
  916. X
  917. X   while(!bored && !fed_up && !success)
  918. X   {
  919. X     adopt();
  920. X     adapt();
  921. X     improve();
  922. X   } /* "... I always say." -- thanks to John Cleese */
  923. X   exit(!success);
  924. X
  925. SHAR_EOF
  926. chmod 0644 fasi/README.FASI ||
  927. echo 'restore of fasi/README.FASI failed'
  928. Wc_c="`wc -c < 'fasi/README.FASI'`"
  929. test 6394 -eq "$Wc_c" ||
  930.     echo 'fasi/README.FASI: original size 6394, current size' "$Wc_c"
  931. rm -f _shar_wnt_.tmp
  932. fi
  933. # ============= fasi/RELEASENOTES ==============
  934. if test -f 'fasi/RELEASENOTES' -a X"$1" != X"-c"; then
  935.     echo 'x - skipping fasi/RELEASENOTES (File already exists)'
  936.     rm -f _shar_wnt_.tmp
  937. else
  938. > _shar_wnt_.tmp
  939. echo 'x - extracting fasi/RELEASENOTES (Text)'
  940. sed 's/^X//' << 'SHAR_EOF' > 'fasi/RELEASENOTES' &&
  941. XThis is the original RELEASENOTES from FAS 2.08 for reference only.
  942. XRead README.FASI. DO NOT CONTACT UWE DOERING REGARDING THIS HACKED VERSION
  943. X                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  944. X
  945. X     release 1.1a Sat Nov 11, 1989
  946. X
  947. X     This is an unofficial release as I'm not the original author
  948. X     of this async driver.
  949. X
  950. X     Uwe Doering             INET : gemini@geminix.in-berlin.de
  951. X     Billstedter Pfad 17 b   UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
  952. X     1000 Berlin 20
  953. X     Germany
  954. X
  955. X     New Features:
  956. X
  957. X          Added a third minor tty device number for every physical
  958. X          port. See description preceding the asyopen function in
  959. X          asy.c. Changed the behavior of ttyxx, too.
  960. X
  961. X          Added output hardware handshake support for DSR. Now you
  962. X          can do handshake with CTS, DSR or both. Input hardware
  963. X          handshake is on if you use at least one of the output
  964. X          handshake signals.
  965. X
  966. X          More flexible support of additional interrupt registers
  967. X          on mux boards. This is fully configurable now.
  968. X
  969. X          Added support for the CREAD flag. If not set, receiver
  970. X          interrupts are still serviced, but the received characters
  971. X          are simply thrown away. This is not as elegant as disabeling
  972. X          the interrupts themselves, but with the already existing
  973. X          driver it was the easiest way, and the most new-bugs-preventing,
  974. X          too.
  975. X
  976. X          Added a lot of comments to the source so that the curious
  977. X          user can understand why and how things are done.
  978. X
  979. X
  980. X     Bug Fixes:
  981. X
  982. X          The hang-up-on-last-close flag (HUPCL) was ignored. DTR
  983. X          was asserted regardless of this flag.
  984. X
  985. X          Made the detection of CTS and DCD more bullet-proof.
  986. X          Especially because between a close and the next open of
  987. X          a line, where interrupts are ignored, the software copys of
  988. X          CTS and DCD must be set up propperly in the asyopen function
  989. X          or the tty line would be blocked under certain circum-
  990. X          stances. For similar reasons, there is also a setup in the
  991. X          asyparam function.
  992. X
  993. X          Rewrote the input character processing function to work
  994. X          according to the TERMIO(7) man page.
  995. X
  996. X          Changed the behavior of BREAK generation to let the
  997. X          transmitter drain before TX is set to low.
  998. X
  999. X          Changed line hangup procedure so that the closing
  1000. X          process returns immediately and doesn't sleep during
  1001. X          the hangup delay/time. Instead, if an other process tries
  1002. X          to open the line while hangup is still in progress, this
  1003. X          process will sleep until hangup is competed.
  1004. X
  1005. X          With DOS Merge, on MicroPort V/386 3.0e the linker was
  1006. X          missing the function `init8250'. Reengineered this from
  1007. X          a disassembler listing of MicroPort's original driver and
  1008. X          modified it to work with the NS16550A 16-byte FIFO. This
  1009. X          funktion was added simply to be able to link the kernel.
  1010. X          DOS Merge's virtual COM ports are still unusable with this
  1011. X          release, though. To include this function, add a `-DMERGE'
  1012. X          to the CFLAGS line in your makefile.
  1013. X
  1014. X          Made a lot of other corrections and enhancements in both
  1015. X          speed and functionallity. As a result of all my effords
  1016. X          I think this driver is slightly faster, more versatile
  1017. X          and much more stable than the original release.
  1018. X
  1019. X     ------------------------------------------------------------
  1020. X          
  1021. X     release 1.1b Sat Nov 25, 1989
  1022. X
  1023. X     New Features:
  1024. X
  1025. X          Changed the minor device number scheme again.
  1026. X          There are now two main groups: The unblocked open
  1027. X          and the blocked open. Every group has four sub-modes
  1028. X          and an additional hardware handshake flag. All this
  1029. X          is coded in the higher four bits of the minor device
  1030. X          number. Because of this, the maximum of 32 ports was
  1031. X          reduced to 16 ports so that the port number fits into
  1032. X          the remaining lower four bits of the minor device number.
  1033. X          32 dumb ports in a single machine would have been overkill
  1034. X          anyway. For more details refer to the description in the
  1035. X          README file.
  1036. X
  1037. X     ------------------------------------------------------------
  1038. X          
  1039. X     release 2.00 Mon Nov 27, 1989
  1040. X
  1041. X     As this release differs so much from the original version I got,
  1042. X     I now declare this as independant from the original author
  1043. X     Jim Murray. This allows me to introduce new release levels
  1044. X     without wondering whether they will collide with Jim's releases.
  1045. X     Of course many credits to Jim for writing this software in the
  1046. X     first place. Without his driver as a base I never would have
  1047. X     been able to do such kernel driver development.
  1048. X
  1049. X     Bug Fixes:
  1050. X
  1051. X          If there were glitches on the hardware handshake lines
  1052. X          and the DCD line a getty on this port would sometimes
  1053. X          hang and become an immortal process. I think this was
  1054. X          because the output buffer wasn't flushed properly
  1055. X          on carrier loss. I hope I fixed this now. We'll see.
  1056. X
  1057. X     ------------------------------------------------------------
  1058. X          
  1059. X     release 2.01 Tue Nov 28, 1989
  1060. X
  1061. X     Did some cleanup in the source code.
  1062. X
  1063. X     I splitted the driver into two parts: The driver itself and
  1064. X     the file `space.c'.
  1065. X     `space.c' contains all data structures necessary to configure
  1066. X     the driver and is compiled at kernel link time. Therefore if you
  1067. X     change your serial card configuration you simply change `space.c'
  1068. X     directly in the link kit directory and relink the kernel. No
  1069. X     driver recompilation or installation is necessary for this.
  1070. X     But note that whenever you use `make install' your setup in
  1071. X     the link kit directory is overwritten by the original `space.c'
  1072. X     file. Therefore you should copy your new `space.c' back to
  1073. X     the source directory when you are finished with the configuration.
  1074. X
  1075. X     Renamed the package to `FAS Final Async Solution'. The following
  1076. X     files have been renamed:
  1077. X          asy.c          -> fas.c
  1078. X          asy.h          -> fas.h
  1079. X          asy_conf-xxxxx -> space-xxxxx
  1080. X
  1081. X     ISC 386/ix is supported now. There are separate makefiles
  1082. X     for uPort and ISC to cope with the differences in link kit
  1083. X     installation.
  1084. X
  1085. X     Bug Fixes:
  1086. X
  1087. X          `getty' still hung sometimes on a line with hardware
  1088. X          handshake. Tried to fix it this time.
  1089. X
  1090. X     ------------------------------------------------------------
  1091. X          
  1092. X     release 2.02 Thu Nov 30, 1989
  1093. X
  1094. X     Abandoned the distinction between space-xxxxx files with
  1095. X     and without hardware flow control because this is selected
  1096. X     by the minor device number now.
  1097. X
  1098. X     Bug Fixes:
  1099. X
  1100. X          Set the high and low water marks for hardware input flow
  1101. X          control to higher values than software flow control. This
  1102. X          gives precedence to software flow control if both methods
  1103. X          are used. These marks are self-adjusting and don't need to
  1104. X          be changed if some flavor of UNIX has a different buffer
  1105. X          size than the standard 256 characters. Before this change
  1106. X          concurrent use of both flow controls could cause trouble
  1107. X          with some high-speed modems. This is fixed now.
  1108. X
  1109. X          A flush read or write buffer request now also clears the
  1110. X          receiver or transmitter FIFO, respectively. An ioctl
  1111. X          call with a TCSETA* command clears the FIFOs, too.
  1112. X
  1113. X     ------------------------------------------------------------
  1114. X          
  1115. X     release 2.03 Fri Dec 01, 1989
  1116. X
  1117. X     Wrote an installation guide. The driver should be quite
  1118. X     easy to install now.
  1119. X
  1120. X     Added tty node configuration files for ISC.
  1121. X
  1122. X     Hardware input flow control is bound now to the level of the
  1123. X     receiver ring buffer instead of the UNIX input buffer. This
  1124. X     has the advantage that buffer size and trigger levels are
  1125. X     defined in the driver and therefore can be varied as needed.
  1126. X
  1127. X     New Features:
  1128. X
  1129. X          Added a boot time status message that shows the init
  1130. X          state of each port. This tells you immediately what
  1131. X          ports are found and initted by the driver. Useful to
  1132. X          determine hardware configuration problems. Look at
  1133. X          the description in the README file. Thanks to
  1134. X          Kritt Gierlewsen (kritt@einoed.UUCP) for this proposal.
  1135. X
  1136. X     ------------------------------------------------------------
  1137. X          
  1138. X     release 2.04 Thu Dec 07, 1989
  1139. X
  1140. X     Did some cleanup in the source.
  1141. X
  1142. X     Removed the FIFO clear from the ioctl function. We don't want
  1143. X     to do things there that aren't in the book.
  1144. X
  1145. X     An ioctl call that switches off the CLOCAL flag will create
  1146. X     a SIGHUP signal if the carrier is actually missing at this
  1147. X     time.
  1148. X
  1149. X     Every device is tested now quite thoroughly during initialization.
  1150. X     If the test fails the corresponding device keeps unconfigured.
  1151. X
  1152. X     ------------------------------------------------------------
  1153. X          
  1154. X     release 2.05 Sat Jan 13, 1990
  1155. X
  1156. X     This is the first public release of the FAS driver.
  1157. X
  1158. X     Special thanks to the sysops of my test sites, Axel Fischer
  1159. X     (fischer@utower.UUCP) and Kritt Gierlewsen (kritt@einoed.UUCP).
  1160. X
  1161. X     FAS is now an independant driver with its own driver name (`fas'),
  1162. X     major device number, link kit directory and other things necessary
  1163. X     for a driver. The original asy driver may or may not be linked
  1164. X     with the kernel. You only need it if you want to access some
  1165. X     serial devices via the virtual COM ports of the DOS emulator
  1166. X     (DosMerge or VP/ix) because the FAS driver doesn't have this
  1167. X     (really vendor dependant) feature.
  1168. X
  1169. X     The default prefix for tty device node names is `ttyF' now.
  1170. X     This prevents mix-ups with the device names of the original
  1171. X     asy driver.
  1172. X
  1173. X     Dropped the SYSV/AT support. I couldn't test the driver
  1174. X     for several release generations on uPort SYSV/AT, and because
  1175. X     there are not very much systems left with that flavor of UNIX
  1176. X     it doesn't make sense to try to maintain compatibility with it.
  1177. X     If someone really wants to use this driver on a 286 he has
  1178. X     to port it himself.
  1179. X
  1180. X     Improved the transmitter FIFO fill procedure. Now it will try
  1181. X     harder to fill the FIFO as much as possible to cut down on
  1182. X     transmitter interrupts.
  1183. X
  1184. X     Software input flow control (XON/XOFF) is controlled by the driver now.
  1185. X     It is bound to the level of the receiver ring buffer (as is hardware
  1186. X     flow control). As usual, it can be switched on and off by the
  1187. X     IXOFF flag in the termio(7) structure.
  1188. X
  1189. X     Changed and speeded up the ring buffer -> unix buffer processing.
  1190. X
  1191. X     For ISC, the getty lines for the inittab file are installed
  1192. X     by the makefile now.
  1193. X
  1194. X     The conditional compilation of the function `init8250' (for
  1195. X     DosMerge) is now controlled by a define in `fas.h'. The compiler
  1196. X     switch `-DMERGE' is not used any more.
  1197. X
  1198. X     Improved the documentation.
  1199. X
  1200. X     The signals used for modem control and hardware flow control are
  1201. X     fully configurable in the `space.c' file now. Look at `fas.h' for
  1202. X     possible macros and combinations.
  1203. X
  1204. X     There are some new modes for hardware flow control, for instance
  1205. X     HO_CTS_ON_DSR. This means that CTS is only looked at if DSR is on.
  1206. X     If DSR is off output is possible regardless of CTS. The underlying
  1207. X     assumption here is that we can expect proper handshake handling
  1208. X     only from devices that are in the ready state (indicated by DSR).
  1209. X     As a spin-off the problem with the hanging getty on lines with
  1210. X     turned-off terminals (mentioned in earlier releases) should be
  1211. X     gone if you use this new mode.
  1212. X
  1213. X     If the XCLUDE-Flag is availabe (SYSV 3.2 because of Xenix
  1214. X     compatibility) exclusive open of a device is possible.
  1215. X
  1216. X     The default size of the input ring buffer is now 5000 bytes.
  1217. X     This makes streaming input more likely even on loaded systems.
  1218. X
  1219. X     Bug Fixes:
  1220. X
  1221. X          The task state busy flag wasn't reset in some rare cases.
  1222. X          This could cause processes to become immortal while waiting
  1223. X          for the busy flag.
  1224. X
  1225. X          Under some special conditions an ioctl call with a TCSETA?
  1226. X          command could corrupt the last character in the transmitter
  1227. X          shift register. This is fixed now.
  1228. X
  1229. X          More fixing of the busy flag handling was necessary.
  1230. X          Co-ordinating several delayed tasks controlling this flag
  1231. X          is kind of tricky.
  1232. X
  1233. X          After a TCSETA* ioctl command we disable the transmitter
  1234. X          for 2 sec (measured from the last transmitted character)
  1235. X          if the character format and/or speed has changed. This
  1236. X          gives the receiving side some time to do the same changes.
  1237. X          This is kind of experimental. There may be applications that
  1238. X          suffer from this delay. You may change the #define ADAPT_TIME
  1239. X          in `fas.h' to a smaller value.
  1240. X
  1241. X     ------------------------------------------------------------
  1242. X          
  1243. X     release 2.06 Fri Mar 16, 1990
  1244. X
  1245. X     This should have been patch #3 for release 2.05, but there are
  1246. X     so many changes now that I decided to make it a new release.
  1247. X     Therefor some of the changes are described in the 2.05 release
  1248. X     notes above but were never released to the public.
  1249. X
  1250. X     New Features:
  1251. X
  1252. X          There is a transmitter ring buffer now to make the output
  1253. X          less system load dependent. This really speeds things up
  1254. X          because the transmitter FIFO gets filled with more characters
  1255. X          at once. The buffer size depends on the actual baud rate to
  1256. X          prevent long output buffer drains at low speeds.
  1257. X
  1258. X          There are also bigger input buffers to make FAS more competitive
  1259. X          against "intelligent" cards.
  1260. X
  1261. X          Lots of speed improvements and many small changes.
  1262. X
  1263. X     Bug Fixes:
  1264. X
  1265. X          Fixed input/output buffer flush on carrier loss while close
  1266. X          is waiting for the output to drain.
  1267. X
  1268. X     ------------------------------------------------------------
  1269. X          
  1270. X     release 2.07 Tue Sep 18, 1990
  1271. X
  1272. X     This is a major redesign of the previous release. I put most of the
  1273. X     time consuming tasks in one function that is invoked asynchronously
  1274. X     by timeout calls. Inside this function most of the code runs at
  1275. X     a lower system priority level (spl5) than the interrupts. That
  1276. X     means that during character processing tty interrupts are allowed.
  1277. X     This is the main key to operation at 38400 bps on multiple ports
  1278. X     at the same time which is possible now with this release.
  1279. X
  1280. X     New Features:
  1281. X
  1282. X          FAS supports the VP/ix DOS emulator!
  1283. X          Now you can throw out the vendor's original driver even
  1284. X          if you like to have a serial mouse or modem access in DOS.
  1285. X          Read the paragraph about VP/ix in the README file.
  1286. X
  1287. X          The Intel i82510 port chip is supported. It has separate
  1288. X          4-character FIFOs for input and output. Although the
  1289. X          NS16550A is much better this chip is your second choice
  1290. X          if you can't get your hands on the National chips.
  1291. X          Thanks to Christian Seyb (cs@gold.UUCP) for sending me
  1292. X          patches and the necessary documentation for the Intel
  1293. X          chips.
  1294. X
  1295. X          There is an init sequence in `space.c'. You can put any
  1296. X          number of address-data pairs in a null terminated array
  1297. X          to program your serial card or other hardware before
  1298. X          FAS makes the first access to the ports. AST 4-port cards,
  1299. X          for instance, have an additional port that needs to be
  1300. X          written to with a certain bit pattern to allow shared
  1301. X          interrupts. If you need to read a port to achieve the
  1302. X          setting or resetting of flags as a side effect, this
  1303. X          is possible, too.
  1304. X
  1305. X          ESIX is officially supported now.
  1306. X
  1307. X          SCO UNIX is officially supported, too. FAS needs to be
  1308. X          compiled with the command line flag `-DSCO'. The makefile
  1309. X          for SCO takes care of that. Thanks to Walter Mecky
  1310. X          (walter@mecky.systemware.de) and Frank Simon
  1311. X          (terra@sol.north.de) for helping me in making the necessary
  1312. X          changes for SCO UNIX.
  1313. X
  1314. X          SCO Xenix 386 is also officially supported. FAS needs to be
  1315. X          compiled with the command line flag `-DXENIX'. The makefile
  1316. X          for SCO Xenix takes care of that. Thanks to Andreas
  1317. X          Steinmetzler (andreas@oil.UUCP) for doing the port.
  1318. X
  1319. X          If you have the RTSFLOW and CTSFLOW termio(7) flags,
  1320. X          hardware handshake can be controlled by them.
  1321. X          Note that enabling handware flow control via the
  1322. X          minor device number overrides these flags. If you
  1323. X          like to use them you need to create tty device nodes
  1324. X          with minor device numbers in which the bit for hardware
  1325. X          handshake is set to 0. Look at the description in the
  1326. X          README file for more details.
  1327. X          Note also that if you choose to use RTSFLOW and CTSFLOW
  1328. X          all your programs that do initial access to tty devices
  1329. X          (getty, uucico, cu, SLIP dialup program etc.) need to know
  1330. X          about these flags or hardware handshake will not be used.
  1331. X
  1332. X          The `O_EXCL' flag for the open(2) call is honored now.
  1333. X          This allowes exclusive access to an FAS device without
  1334. X          suffering from race conditions which could occure with
  1335. X          the termio(7) XCLUDE flag method.
  1336. X
  1337. X          The `fas_test_device' function returns a digit now that
  1338. X          indicates at which phase the test exited due to an error.
  1339. X          This error digit is displayed in the boot message. Thanks
  1340. X          to Brian Beattie (beattie@visenix.UUCP) for sending me
  1341. X          the necessary patches.
  1342. X
  1343. X     Bug Fixes:
  1344. X
  1345. X          Automatic input FIFO flush after unblocking the getty
  1346. X          open by the carrier or the unblock signal. This makes sure
  1347. X          that there is no chance that there are characters in the
  1348. X          FIFO that were received before the open got unblocked.
  1349. X
  1350. X          The sdevice entry for the AST 4-port card had a wrong
  1351. X          I/O address range (`s_fas-mux4'). This didn't affect FAS
  1352. SHAR_EOF
  1353. true || echo 'restore of fasi/RELEASENOTES failed'
  1354. fi
  1355. echo 'End of ecu320 part 31'
  1356. echo 'File fasi/RELEASENOTES is continued in part 32'
  1357. echo 32 > _shar_seq_.tmp
  1358. exit 0
  1359.  
  1360. exit 0 # Just in case...
  1361.