home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 2 / 2656 < prev    next >
Encoding:
Internet Message Format  |  1991-02-04  |  60.9 KB

  1. From: gemini@geminix.in-berlin.de (Uwe Doering)
  2. Newsgroups: comp.unix.sysv386,comp.unix.xenix.sco,alt.sources
  3. Subject: FAS 2.08 async driver, part 1/4
  4. Message-ID: <60TNCCE@geminix.in-berlin.de>
  5. Date: 3 Feb 91 22:16:01 GMT
  6.  
  7. Submitted-by: gemini@geminix.in-berlin.de
  8. Archive-name: fas208/part01
  9.  
  10. Hello netlanders,
  11.  
  12. here is the long awaited FAS 2.08 async driver for UNIX systems.
  13.  
  14. ATTENTION: This release fixes two nasty bugs in FAS 2.07 that could
  15.            lock up ports. Please pass a copy of this new release to
  16.            everyone who uses FAS 2.07 and doesn't have access to
  17.            the Netnews.
  18.  
  19. Here is an excerpt from the README file:
  20.  
  21.      This is an async driver for 286/386 based unix systems that adds
  22.      several features that are not supported by vendors drivers.
  23.      It supports
  24.  
  25.         1.  the NS16550A and i82510 UART chips in full FIFO mode.
  26.         2.  modem sharing for input and output.
  27.         3.  shared interrupts.
  28.         4.  multiplexed UART registers (HUB-6 card etc.).
  29.         5.  full and half duplex hardware flow control.
  30.         6.  VP/ix, the ISC DOS emulator.
  31.  
  32.  
  33.      FAS was successfully tested under the following operating systems:
  34.  
  35.      Microport UNIX SYSV 3.0
  36.      ISC 386/ix 2.0.2 & 2.2
  37.      ESIX Rev. C & D
  38.      Bell Tech/Intel UNIX 3.2
  39.      SCO UNIX 386
  40.      SCO XENIX 386 2.3.2
  41.      SCO XENIX 286 2.3.2
  42.  
  43. Enjoy!
  44.  
  45.       Uwe
  46.  
  47.  
  48. #!/bin/sh
  49. # This is fas208, a shell archive (produced by shar 3.49)
  50. # To extract the files from this archive, save it to a file, remove
  51. # everything above the "!/bin/sh" line above, and type "sh file_name".
  52. #
  53. # made 02/03/1991 20:57 UTC by gemini@geminix.in-berlin.de
  54. # Source directory /tmp/fas
  55. #
  56. # existing files will NOT be overwritten unless -c is specified
  57. # This format requires very little intelligence at unshar time.
  58. # "if test", "cat", "rm", "echo", "true", and "sed" may be needed.
  59. #
  60. # This is part 1 of a multipart archive                                    
  61. # do not concatenate these parts, unpack them in order with /bin/sh        
  62. #
  63. # This shar contains:
  64. # length  mode       name
  65. # ------ ---------- ------------------------------------------
  66. #  13596 -rw-r--r-- INSTALLATION
  67. #   1411 -rw-r--r-- Makefile.BELL
  68. #   1385 -rw-r--r-- Makefile.ESIX
  69. #   1394 -rw-r--r-- Makefile.ISC
  70. #   1406 -rw-r--r-- Makefile.SCO
  71. #    673 -rw-r--r-- Makefile.X286
  72. #    581 -rw-r--r-- Makefile.X386
  73. #    857 -rw-r--r-- Makefile.uPort
  74. #     26 -rw-r--r-- PATCHLEVEL
  75. #  31589 -rw-r--r-- README
  76. #  23278 -rw-r--r-- RELEASENOTES
  77. #    251 -rw-r--r-- config-ast4
  78. #    255 -rw-r--r-- config-ast4c12
  79. #    253 -rw-r--r-- config-c1-2
  80. #    255 -rw-r--r-- config-c1-3
  81. #    251 -rw-r--r-- config-hub6
  82. #  76725 -rw-r--r-- fas.c
  83. #  20742 -rw-r--r-- fas.h
  84. #    136 -rw-r--r-- i_fas-ast4
  85. #    204 -rw-r--r-- i_fas-ast4c12
  86. #     68 -rw-r--r-- i_fas-c1-2
  87. #    102 -rw-r--r-- i_fas-c1-3
  88. #    204 -rw-r--r-- i_fas-hub6
  89. #    136 -rw-r--r-- n_fas-ast4
  90. #    204 -rw-r--r-- n_fas-ast4c12
  91. #     68 -rw-r--r-- n_fas-c1-2
  92. #    102 -rw-r--r-- n_fas-c1-3
  93. #    204 -rw-r--r-- n_fas-hub6
  94. #     26 -rw-r--r-- s_fas-ast4
  95. #     78 -rw-r--r-- s_fas-ast4c12
  96. #     52 -rw-r--r-- s_fas-c1-2
  97. #     78 -rw-r--r-- s_fas-c1-3
  98. #     26 -rw-r--r-- s_fas-hub6
  99. #   6467 -rw-r--r-- space-ast4
  100. #   6697 -rw-r--r-- space-ast4c12
  101. #   6305 -rw-r--r-- space-c1-2
  102. #   6420 -rw-r--r-- space-c1-3
  103. #   6611 -rw-r--r-- space-hub6
  104. #    174 -rwxr-xr-x update_desc
  105. #
  106. if test -r _shar_seq_.tmp; then
  107.     echo 'Must unpack archives in sequence!'
  108.     echo Please unpack part `cat _shar_seq_.tmp` next
  109.     exit 1
  110. fi
  111. # ============= INSTALLATION ==============
  112. if test -f 'INSTALLATION' -a X"$1" != X"-c"; then
  113.     echo 'x - skipping INSTALLATION (File already exists)'
  114.     rm -f _shar_wnt_.tmp
  115. else
  116. > _shar_wnt_.tmp
  117. echo 'x - extracting INSTALLATION (Text)'
  118. sed 's/^X//' << 'SHAR_EOF' > 'INSTALLATION' &&
  119. XInstallation guide for the FAS Final Async Solution driver
  120. X----------------------------------------------------------
  121. X
  122. XTo install this driver you need the manual of your serial card,
  123. Xyour system manuals and a certain knowledge about what actually
  124. Xa serial driver is.
  125. X
  126. XYou have to be user root to compile and install the driver!
  127. X
  128. X
  129. XCompilation phase
  130. X=================
  131. X
  132. XFirst of all you should copy the makefile that matches your system
  133. Xto the file `Makefile'. Make sure that the makefile contains the
  134. Xproper compiler switches, paths and file names for your system.
  135. XYou may also look at `fas.c' and `fas.h' to find out what defines
  136. Xare possible for conditional compilation. In particular, if you
  137. Xdon't link in the original serial driver you might have to uncomment
  138. Xthe `NEED_PUT_GETCHAR' define in `fas.h'. You also may want to
  139. Xuncomment `HAVE_VPIX' in `fas.h' if you have VP/ix support in
  140. Xthe kernel.
  141. X
  142. XAfter that you choose one of the space-xxxxx configuration files
  143. Xthat matches your serial card and copy this to `space.c'. If you
  144. Xdon't find a matching space file you should copy the one that
  145. Xcomes closest to your card to `space.c'.
  146. X
  147. XIn any case you should check the entries in that file against your
  148. Xcard's manual and jumper settings. The space files contain explanations
  149. Xabout what data you have to enter.
  150. X
  151. XIf your `space.c' is filled in properly you simply type `make' to
  152. Xcompile the driver. If you don't get error messages you may begin
  153. Xwith the actual installation. Otherwise you have to find the cause of
  154. Xthe trouble. Some error reasons may be missing include files, macros
  155. Xthat are defined in different include files or missing at all, or you
  156. Xdon't use the standard UNIX 3.X/386 AT&T C compiler. Don't use any
  157. Xother compiler because this may break things. In particular, don't use
  158. Xthe GNU C compiler as it wants to link in some "helpful" routines that
  159. Xaren't in the kernel.
  160. X
  161. XFor SCO Xenix you have to use the Microsoft C compiler because Xenix
  162. Xdoesn't have the AT&T compiler. You will need the ANSI C version of
  163. Xthe Microsoft compiler because the preprocessor of the original
  164. XXenix distribution doesn't understand `#if defined(...)' statements
  165. Xin 386 mode.
  166. X
  167. X
  168. XInstallation phase
  169. X==================
  170. X
  171. XIf you want to have both the original asy (or sio) and the new FAS
  172. Xdriver in the kernel the only restriction is that ports and interrupt
  173. Xvectors can't be shared between the two drivers. Each driver controls
  174. Xits own separate set of ports and IRQs.
  175. X
  176. XuPort: Copy one of the config-xxxxx files to `config'. Check out
  177. X       whether the interrupt vectors in this file reflect the
  178. X       jumper settings on your serial card. Note that an IRQ2 on
  179. X       your card is an interrupt vector of 9. All other IRQ numbers
  180. X       correspond to the vector number, though.
  181. X
  182. X       Next you have to tell the config program to include the new
  183. X       driver at kernel link time. This is done by a line in the file
  184. X       /etc/atconf/systems/system.std. Look for the line containing
  185. X       `asy' followed by an asterisk (`*') and a comment. Create a
  186. X       similar line where `asy' is substituted with `fas'. Add a
  187. X       proper comment. If you don't want to use any ports under the
  188. X       DOS emulator you should insert an asterisk at the beginning
  189. X       of the line that contains the word `asy'. This excludes the
  190. X       asy driver from the kernel. But if you want to have it in the
  191. X       kernel you have to configure it to only use the ports you
  192. X       need under DOS. The remaining ports should be controlled by
  193. X       the FAS driver.
  194. X
  195. X       Now type `make install' and after that you are ready to link
  196. X       a new kernel. Refer to your system manuals on how to do that.
  197. X
  198. X       Before you reboot the new kernel make sure that you create
  199. X       the proper tty device nodes in /dev. But first you should
  200. X       remove all device nodes belonging to the original asy driver
  201. X       that you don't need any more.
  202. X
  203. X       Now create your own tty device nodes that fit your needs.
  204. X       The default device name prefix for the FAS driver is `ttyF'.
  205. X       That is, ttyF00, ttyF01 ... and ttyFM00, ttyFM01 ...
  206. X       You may choose another prefix, but note that some utilities
  207. X       like uustat depend on tty-devices beginning with `tty'!
  208. X
  209. X       The default value for the major device number is 4, and
  210. X       sane values for the minor device numbers are 80 + device #
  211. X       for the dialout node and 208 + device # for the dialin (getty)
  212. X       node. Device # counts from 0 and reflects the actual port number.
  213. X       Refer to the `README' file for a description of the possible minor
  214. X       device numbers.
  215. X
  216. X       Remember to change the inittab file to the new device names.
  217. X       Other files that contain tty-names for some reason should be
  218. X       updated, too (ttytype, Devices etc.).
  219. X
  220. X       After you have booted the new kernel, provided your configuration
  221. X       was correct, you should be able to use the serial devices.
  222. X
  223. X
  224. XISC:   Copy one of the s_fas-xxxxx files to `s_fas'. Make sure
  225. X       that you have a separate line in it for each block of contiguous
  226. X       port addresses assigned to the same interrupt vector (check
  227. X       the jumper settings on your serial card). Each line contains
  228. X       the number of ports bound to that interrupt, the start and
  229. X       end address of the first (lowest or only) port on this interrupt
  230. X       line and other data. Refer to your ISC manuals if you need to
  231. X       change this file. Note that an IRQ2 on your card is an interrupt
  232. X       vector of 9. All other IRQ numbers correspond to the vector
  233. X       number, though.
  234. X
  235. X       Then you copy one of the n_fas-xxxxx files to `n_fas'. This
  236. X       file contains data needed to automatically create tty device
  237. X       nodes at installation time. Things you may want to change are
  238. X       the tty node names and the minor device numbers (last field) for
  239. X       these nodes. Make sure you have a node for every port on your
  240. X       serial card in this file.
  241. X
  242. X       Sane values for the minor device numbers are 80 + device #
  243. X       for the dialout node and 208 + device # for the dialin (getty)
  244. X       node. Device # counts from 0 and reflects the actual port number.
  245. X       Refer to the `README' file for a description of the possible
  246. X       minor device numbers.
  247. X
  248. X       Now copy one of the i_fas-xxxxx files to `i_fas'. This file
  249. X       contains the getty lines for the inittab file which is rebuild
  250. X       every time a new kernel is installed. Make sure that you use the
  251. X       same device names here as in the file `n_fas'.
  252. X
  253. X       Next you have to modify the file /etc/conf/sdevice.d/asy in a way
  254. X       that only those devices are enabled that you want to be controlled
  255. X       by the original `asy' driver. This is done with an `N' in the second
  256. X       column of the corresponding line to disable the port and a `Y' to
  257. X       enable it. But usually you don't need the original driver any more.
  258. X       Therefor, all lines in /etc/conf/sdevice.d/asy should be set to `N'.
  259. X
  260. X       To tell the kernel config program how to link in the FAS driver
  261. X       you have to add the following line to the file /etc/conf/cf.d/mdevice:
  262. X
  263. X       fas    Iocrwi    iHct    fas    0    4    1    16    -1
  264. X
  265. X       The 6th field contains the major device number of the driver. You
  266. X       may change this if it collides with another driver.
  267. X
  268. X       All this is in the ISC manuals. Read them carefully.
  269. X
  270. X       Now type `make install' and after that you are ready to link
  271. X       a new kernel. Refer to your system manuals on how to do that.
  272. X
  273. X       You may have to change files that contain tty names to the new
  274. X       device names (ttytype, Devices etc.). Take the names from `n_fas'.
  275. X
  276. X       After you have booted the new kernel, provided your configuration
  277. X       was correct, you should be able to use the serial devices.
  278. X
  279. X
  280. XESIX:  Follow the description for ISC UNIX.
  281. X
  282. X
  283. XBELL:  Follow the description for ISC UNIX.
  284. X
  285. X
  286. XSCO:   Do the same steps as for ISC UNIX. Here are some additional
  287. X       hints:
  288. X
  289. X       The original SCO serial driver is called `sio' instead of
  290. X       `asy'. You need to remove it because it won't coexist peacefully
  291. X       with FAS.
  292. X
  293. X       According to reports from some beta test sites it isn't enough
  294. X       to disable the `sio' driver by setting all lines in
  295. X       /etc/conf/sdevice.d/sio to `N'. Additionally, you have to
  296. X       delete the `sio' entry in /etc/conf/cf.d/mdevice.
  297. X
  298. X       In file `fas.h' you need to uncomment the `NEED_PUT_GETCHAR'
  299. X       define before you compile the sources.
  300. X
  301. X       For the device nodes you should use SCO's naming conventions because
  302. X       there are some utilities that expect this tty name format. You need
  303. X       to change the names in `i_fas' and `n_fas'. To prevent a collision
  304. X       with the `sio' device node names you need to remove the file
  305. X       `/etc/conf/node.d/sio'.
  306. X
  307. X       You have to compile FAS with the AT&T standard C compiler (rcc,
  308. X       don't use the Microsoft compiler !) and with the `-DSCO'
  309. X       compiler command line flag. The makefile for SCO takes
  310. X       care of this, though.
  311. X
  312. X       After you made all the changes you need to run the
  313. X       `configure' utility to get all the dependencies right. To convince
  314. X       the configure program that it has work to do you should change some
  315. X       parameter and put in the original value afterwards. Be prepared
  316. X       that there may be more tinkering needed to remove `sio' completely
  317. X       because there seem to be SCO UNIX releases where the kernel config
  318. X       and build programs are broken (doesn't surprise me at all :-( ).
  319. X
  320. X
  321. XXENIX: The installation procedure for Xenix is completely different
  322. X       from the other UNIX flavors.
  323. X
  324. X       In file `fas.h' you need to uncomment the `NEED_PUT_GETCHAR'
  325. X       define before you compile the sources. After compilation
  326. X       the files `fas.o' and `space.o' have to be copied to the
  327. X       directory `/usr/sys/io/fas'.
  328. X
  329. X       As the `sio' driver won't coexist peacefully with FAS you have
  330. X       to remove the `sio' line from the file `/usr/sys/conf/xenixconf'.
  331. X       Create a new line for `fas' in this file.
  332. X
  333. X       After this you have to modify the file `/usr/sys/conf/master'.
  334. X       There is a line in it that looks like this:
  335. X
  336. X     sio      4  0577 104    sio  0   0   5    1   7    3     4     33  34  
  337. X
  338. X       You have to comment this out with an asterisk (`*') at the beginning
  339. X       of the line. Directly after this line you need to insert a new line
  340. X       with the following contents (for two ports, one on IRQ3 and one on
  341. X       IRQ4):
  342. X
  343. X    fas      2  0537 104    fas  0   0   5    1   7    3     4     0   0  
  344. X
  345. X       The second column indicates how many interrupt vectors are used by
  346. X       this driver (two vectors in this example). The last four columns
  347. X       contain the corresponding IRQ numbers (in octal !). Unused vectors
  348. X       are set to zero.
  349. X
  350. X       Here is an example for three ports (on IRQ3, IRQ4 and IRQ5):
  351. X
  352. X    fas      3  0537 104    fas  0   0   5    1   7    3     4     5   0  
  353. X
  354. X       And this is for four ports (IRQ3, IRQ4, IRQ5 and IRQ2/9):
  355. X
  356. X    fas      4  0537 104    fas  0   0   5    1   7    3     4     5   31 
  357. X
  358. X       Note that the AT bus interrupts IRQ8 to IRQ15 are mapped to vector
  359. X       30 (octal) to 37 (octal). Therefor, IRQ9 (IRQ2 on the serial card) is
  360. X       vector 31 (octal) in this example.
  361. X
  362. X       Make sure that they match the interrupt vectors defined in `space.c'.
  363. X       And take care that you don't use interrupt vectors that are already
  364. X       assigned to other drivers.
  365. X
  366. X       For further details refer to the master(F) man page.
  367. X
  368. X       Now you have to insert the following line in `/usr/sys/conf/link_xenix'
  369. X       (before the lines with the system libs):
  370. X
  371. X        ../io/fas/fas.o ../io/fas/space.o \
  372. X
  373. X       After you made all the changes you might need to run the
  374. X       `/usr/sys/conf/configure' utility to get all the dependencies right.
  375. X       To convince the configure program that it has work to do you should
  376. X       change some parameter and put in the original value afterwards.
  377. X
  378. X       Go to the directory `/usr/sys/conf' and link the new kernel with
  379. X       the `make' command. If all went well, copy the kernel to the
  380. X       root directory.
  381. X
  382. X       You need to create the FAS device nodes manually in the directory
  383. X       `/dev' (with the command `mknod'). You should use SCO's naming
  384. X       conventions because there are some utilities that expect this
  385. X       tty name format. Here is an example how to make the device nodes:
  386. X
  387. X       mknod tty1a c 5 80; mknod tty1A c 5 208
  388. X       mknod tty1b c 5 81; mknod tty1B c 5 209
  389. X
  390. X       Major device number is always `5' (that of the suspended `sio'
  391. X       driver), the minor device numbers are calculated from the README file.
  392. X       For full duplex hardware flow control tty1[a-z] gets the minor
  393. X       device number 80 + device# (device# counted from 0) and tty1[A-Z] gets
  394. X       208 + device#.
  395. X
  396. X       The last thing you have to do before you reboot your system is
  397. X       to check whether you need to make changes to the files that contain
  398. X       the device names for your original `sio' driver (for programs like
  399. X       `getty', `cu' and `uucico').
  400. X
  401. X       After reboot you should remove all device nodes that belong
  402. X       to the now suspended `sio' driver.
  403. X
  404. X
  405. XOther flavors of UNIX
  406. X=====================
  407. X
  408. XCheck out if one of the above installation schemes is similar to the
  409. Xone you need for your system. Make the appropriate changes and try
  410. Xout if it works. If your system is entirely different you have to
  411. Xfind out from your manuals how to install device drivers. But if
  412. Xyou use a UNIX SYSV/386 3.X you should get it to work eventually.
  413. X
  414. XGood luck.
  415. SHAR_EOF
  416. true || echo 'restore of INSTALLATION failed'
  417. rm -f _shar_wnt_.tmp
  418. fi
  419. # ============= Makefile.BELL ==============
  420. if test -f 'Makefile.BELL' -a X"$1" != X"-c"; then
  421.     echo 'x - skipping Makefile.BELL (File already exists)'
  422.     rm -f _shar_wnt_.tmp
  423. else
  424. > _shar_wnt_.tmp
  425. echo 'x - extracting Makefile.BELL (Text)'
  426. sed 's/^X//' << 'SHAR_EOF' > 'Makefile.BELL' &&
  427. X# Makefile for Bell Tech/Intel UNIX SYS V/386
  428. X
  429. XSHELL = /bin/sh
  430. XINCLSYS = /usr/include/sys
  431. XLKDRVRDIR = /etc/conf/pack.d/fas
  432. XLKSCONFDIR = /etc/conf/sdevice.d
  433. XLKNCONFDIR = /etc/conf/node.d
  434. XLKICONFDIR = /etc/conf/init.d
  435. XLKKCONFDIR = /etc/conf/kconfig.d
  436. XDRVRNAME = Driver.o
  437. XCONFNAME = fas
  438. X
  439. XCC = cc
  440. XCFLAGS = -O -DINKERNEL
  441. X
  442. XOBJS = fas.o
  443. X
  444. Xfas.o:        fas.c $(INCLSYS)/fas.h Makefile
  445. X
  446. Xinstall:    fas.o space.c s_$(CONFNAME) n_$(CONFNAME) i_$(CONFNAME)
  447. X    -mkdir $(LKDRVRDIR) 2> /dev/null
  448. X    chmod 755 $(LKDRVRDIR)
  449. X    cp fas.o $(LKDRVRDIR)/$(DRVRNAME)
  450. X    chmod 644 $(LKDRVRDIR)/$(DRVRNAME)
  451. X    cp space.c $(LKDRVRDIR)/space.c
  452. X    chmod 644 $(LKDRVRDIR)/space.c
  453. X    cp s_$(CONFNAME) $(LKSCONFDIR)/$(CONFNAME)
  454. X    chmod 644 $(LKSCONFDIR)/$(CONFNAME)
  455. X    cp n_$(CONFNAME) $(LKNCONFDIR)/$(CONFNAME)
  456. X    chmod 644 $(LKNCONFDIR)/$(CONFNAME)
  457. X    cp i_$(CONFNAME) $(LKICONFDIR)/$(CONFNAME)
  458. X    chmod 644 $(LKICONFDIR)/$(CONFNAME)
  459. X    $(SHELL) update_desc $(LKKCONFDIR)/description
  460. X
  461. Xspace.c:
  462. X    @echo "You must copy the proper space-xxxxx file to \`space.c'"
  463. X    @false
  464. X    
  465. Xs_$(CONFNAME):
  466. X    @echo "You must copy the proper s_$(CONFNAME)-xxxxx file to \`s_$(CONFNAME)'"
  467. X    @false
  468. X        
  469. Xn_$(CONFNAME):
  470. X    @echo "You must copy the proper n_$(CONFNAME)-xxxxx file to \`n_$(CONFNAME)'"
  471. X    @false
  472. X        
  473. Xi_$(CONFNAME):
  474. X    @echo "You must copy the proper i_$(CONFNAME)-xxxxx file to \`i_$(CONFNAME)'"
  475. X    @false
  476. X        
  477. X$(INCLSYS)/fas.h:    fas.h
  478. X    cp fas.h $(INCLSYS)/fas.h
  479. X
  480. Xclean:
  481. X    rm -f fas.o
  482. X
  483. Xclobber:    clean
  484. X
  485. SHAR_EOF
  486. true || echo 'restore of Makefile.BELL failed'
  487. rm -f _shar_wnt_.tmp
  488. fi
  489. # ============= Makefile.ESIX ==============
  490. if test -f 'Makefile.ESIX' -a X"$1" != X"-c"; then
  491.     echo 'x - skipping Makefile.ESIX (File already exists)'
  492.     rm -f _shar_wnt_.tmp
  493. else
  494. > _shar_wnt_.tmp
  495. echo 'x - extracting Makefile.ESIX (Text)'
  496. sed 's/^X//' << 'SHAR_EOF' > 'Makefile.ESIX' &&
  497. X# Makefile for ESIX
  498. X
  499. XSHELL = /bin/sh
  500. XINCLSYS = /usr/include/sys
  501. XLKDRVRDIR = /etc/conf/pack.d/fas
  502. XLKSCONFDIR = /etc/conf/sdevice.d
  503. XLKNCONFDIR = /etc/conf/node.d
  504. XLKICONFDIR = /etc/conf/init.d
  505. XLKKCONFDIR = /etc/conf/kconfig.d
  506. XDRVRNAME = Driver.o
  507. XCONFNAME = fas
  508. X
  509. XCC = cc
  510. XCFLAGS = -O -DINKERNEL
  511. X
  512. XOBJS = fas.o
  513. X
  514. Xfas.o:        fas.c $(INCLSYS)/fas.h Makefile
  515. X
  516. Xinstall:    fas.o space.c s_$(CONFNAME) n_$(CONFNAME) i_$(CONFNAME)
  517. X    -mkdir $(LKDRVRDIR) 2> /dev/null
  518. X    chmod 755 $(LKDRVRDIR)
  519. X    cp fas.o $(LKDRVRDIR)/$(DRVRNAME)
  520. X    chmod 644 $(LKDRVRDIR)/$(DRVRNAME)
  521. X    cp space.c $(LKDRVRDIR)/space.c
  522. X    chmod 644 $(LKDRVRDIR)/space.c
  523. X    cp s_$(CONFNAME) $(LKSCONFDIR)/$(CONFNAME)
  524. X    chmod 644 $(LKSCONFDIR)/$(CONFNAME)
  525. X    cp n_$(CONFNAME) $(LKNCONFDIR)/$(CONFNAME)
  526. X    chmod 644 $(LKNCONFDIR)/$(CONFNAME)
  527. X    cp i_$(CONFNAME) $(LKICONFDIR)/$(CONFNAME)
  528. X    chmod 644 $(LKICONFDIR)/$(CONFNAME)
  529. X    $(SHELL) update_desc $(LKKCONFDIR)/description
  530. X
  531. Xspace.c:
  532. X    @echo "You must copy the proper space-xxxxx file to \`space.c'"
  533. X    @false
  534. X    
  535. Xs_$(CONFNAME):
  536. X    @echo "You must copy the proper s_$(CONFNAME)-xxxxx file to \`s_$(CONFNAME)'"
  537. X    @false
  538. X        
  539. Xn_$(CONFNAME):
  540. X    @echo "You must copy the proper n_$(CONFNAME)-xxxxx file to \`n_$(CONFNAME)'"
  541. X    @false
  542. X        
  543. Xi_$(CONFNAME):
  544. X    @echo "You must copy the proper i_$(CONFNAME)-xxxxx file to \`i_$(CONFNAME)'"
  545. X    @false
  546. X        
  547. X$(INCLSYS)/fas.h:    fas.h
  548. X    cp fas.h $(INCLSYS)/fas.h
  549. X
  550. Xclean:
  551. X    rm -f fas.o
  552. X
  553. Xclobber:    clean
  554. X
  555. SHAR_EOF
  556. true || echo 'restore of Makefile.ESIX failed'
  557. rm -f _shar_wnt_.tmp
  558. fi
  559. # ============= Makefile.ISC ==============
  560. if test -f 'Makefile.ISC' -a X"$1" != X"-c"; then
  561.     echo 'x - skipping Makefile.ISC (File already exists)'
  562.     rm -f _shar_wnt_.tmp
  563. else
  564. > _shar_wnt_.tmp
  565. echo 'x - extracting Makefile.ISC (Text)'
  566. sed 's/^X//' << 'SHAR_EOF' > 'Makefile.ISC' &&
  567. X# Makefile for ISC SYS V/386
  568. X
  569. XSHELL = /bin/sh
  570. XINCLSYS = /usr/include/sys
  571. XLKDRVRDIR = /etc/conf/pack.d/fas
  572. XLKSCONFDIR = /etc/conf/sdevice.d
  573. XLKNCONFDIR = /etc/conf/node.d
  574. XLKICONFDIR = /etc/conf/init.d
  575. XLKKCONFDIR = /etc/conf/kconfig.d
  576. XDRVRNAME = Driver.o
  577. XCONFNAME = fas
  578. X
  579. XCC = cc
  580. XCFLAGS = -O -DINKERNEL
  581. X
  582. XOBJS = fas.o
  583. X
  584. Xfas.o:        fas.c $(INCLSYS)/fas.h Makefile
  585. X
  586. Xinstall:    fas.o space.c s_$(CONFNAME) n_$(CONFNAME) i_$(CONFNAME)
  587. X    -mkdir $(LKDRVRDIR) 2> /dev/null
  588. X    chmod 755 $(LKDRVRDIR)
  589. X    cp fas.o $(LKDRVRDIR)/$(DRVRNAME)
  590. X    chmod 644 $(LKDRVRDIR)/$(DRVRNAME)
  591. X    cp space.c $(LKDRVRDIR)/space.c
  592. X    chmod 644 $(LKDRVRDIR)/space.c
  593. X    cp s_$(CONFNAME) $(LKSCONFDIR)/$(CONFNAME)
  594. X    chmod 644 $(LKSCONFDIR)/$(CONFNAME)
  595. X    cp n_$(CONFNAME) $(LKNCONFDIR)/$(CONFNAME)
  596. X    chmod 644 $(LKNCONFDIR)/$(CONFNAME)
  597. X    cp i_$(CONFNAME) $(LKICONFDIR)/$(CONFNAME)
  598. X    chmod 644 $(LKICONFDIR)/$(CONFNAME)
  599. X    $(SHELL) update_desc $(LKKCONFDIR)/description
  600. X
  601. Xspace.c:
  602. X    @echo "You must copy the proper space-xxxxx file to \`space.c'"
  603. X    @false
  604. X    
  605. Xs_$(CONFNAME):
  606. X    @echo "You must copy the proper s_$(CONFNAME)-xxxxx file to \`s_$(CONFNAME)'"
  607. X    @false
  608. X        
  609. Xn_$(CONFNAME):
  610. X    @echo "You must copy the proper n_$(CONFNAME)-xxxxx file to \`n_$(CONFNAME)'"
  611. X    @false
  612. X        
  613. Xi_$(CONFNAME):
  614. X    @echo "You must copy the proper i_$(CONFNAME)-xxxxx file to \`i_$(CONFNAME)'"
  615. X    @false
  616. X        
  617. X$(INCLSYS)/fas.h:    fas.h
  618. X    cp fas.h $(INCLSYS)/fas.h
  619. X
  620. Xclean:
  621. X    rm -f fas.o
  622. X
  623. Xclobber:    clean
  624. X
  625. SHAR_EOF
  626. true || echo 'restore of Makefile.ISC failed'
  627. rm -f _shar_wnt_.tmp
  628. fi
  629. # ============= Makefile.SCO ==============
  630. if test -f 'Makefile.SCO' -a X"$1" != X"-c"; then
  631.     echo 'x - skipping Makefile.SCO (File already exists)'
  632.     rm -f _shar_wnt_.tmp
  633. else
  634. > _shar_wnt_.tmp
  635. echo 'x - extracting Makefile.SCO (Text)'
  636. sed 's/^X//' << 'SHAR_EOF' > 'Makefile.SCO' &&
  637. X# Makefile for SCO UNIX SYS V/386
  638. X
  639. XSHELL = /bin/sh
  640. XINCLSYS = /usr/include/sys
  641. XLKDRVRDIR = /etc/conf/pack.d/fas
  642. XLKSCONFDIR = /etc/conf/sdevice.d
  643. XLKNCONFDIR = /etc/conf/node.d
  644. XLKICONFDIR = /etc/conf/init.d
  645. XLKKCONFDIR = /etc/conf/kconfig.d
  646. XDRVRNAME = Driver.o
  647. XCONFNAME = fas
  648. X
  649. XCC = rcc
  650. XCFLAGS = -O -DINKERNEL -DSCO
  651. X
  652. XOBJS = fas.o
  653. X
  654. Xfas.o:        fas.c $(INCLSYS)/fas.h Makefile
  655. X
  656. Xinstall:    fas.o space.c s_$(CONFNAME) n_$(CONFNAME) i_$(CONFNAME)
  657. X    -mkdir $(LKDRVRDIR) 2> /dev/null
  658. X    chmod 755 $(LKDRVRDIR)
  659. X    cp fas.o $(LKDRVRDIR)/$(DRVRNAME)
  660. X    chmod 644 $(LKDRVRDIR)/$(DRVRNAME)
  661. X    cp space.c $(LKDRVRDIR)/space.c
  662. X    chmod 644 $(LKDRVRDIR)/space.c
  663. X    cp s_$(CONFNAME) $(LKSCONFDIR)/$(CONFNAME)
  664. X    chmod 644 $(LKSCONFDIR)/$(CONFNAME)
  665. X    cp n_$(CONFNAME) $(LKNCONFDIR)/$(CONFNAME)
  666. X    chmod 644 $(LKNCONFDIR)/$(CONFNAME)
  667. X    cp i_$(CONFNAME) $(LKICONFDIR)/$(CONFNAME)
  668. X    chmod 644 $(LKICONFDIR)/$(CONFNAME)
  669. X    $(SHELL) update_desc $(LKKCONFDIR)/description
  670. X
  671. Xspace.c:
  672. X    @echo "You must copy the proper space-xxxxx file to \`space.c'"
  673. X    @false
  674. X    
  675. Xs_$(CONFNAME):
  676. X    @echo "You must copy the proper s_$(CONFNAME)-xxxxx file to \`s_$(CONFNAME)'"
  677. X    @false
  678. X        
  679. Xn_$(CONFNAME):
  680. X    @echo "You must copy the proper n_$(CONFNAME)-xxxxx file to \`n_$(CONFNAME)'"
  681. X    @false
  682. X        
  683. Xi_$(CONFNAME):
  684. X    @echo "You must copy the proper i_$(CONFNAME)-xxxxx file to \`i_$(CONFNAME)'"
  685. X    @false
  686. X        
  687. X$(INCLSYS)/fas.h:    fas.h
  688. X    cp fas.h $(INCLSYS)/fas.h
  689. X
  690. Xclean:
  691. X    rm -f fas.o
  692. X
  693. Xclobber:    clean
  694. X
  695. SHAR_EOF
  696. true || echo 'restore of Makefile.SCO failed'
  697. rm -f _shar_wnt_.tmp
  698. fi
  699. # ============= Makefile.X286 ==============
  700. if test -f 'Makefile.X286' -a X"$1" != X"-c"; then
  701.     echo 'x - skipping Makefile.X286 (File already exists)'
  702.     rm -f _shar_wnt_.tmp
  703. else
  704. > _shar_wnt_.tmp
  705. echo 'x - extracting Makefile.X286 (Text)'
  706. sed 's/^X//' << 'SHAR_EOF' > 'Makefile.X286' &&
  707. X# Makefile for SCO Xenix 286
  708. X
  709. XSHELL = /bin/sh
  710. XLKDRVRDIR = /usr/sys/io/fas
  711. X
  712. XCC = cc
  713. XCFLAGS = -LARGE -O -K -M2em -DM_KERNEL -UM_I8086 -DSYSINFO -DXENIX
  714. XIOCFLAGS = -O -K -M2em -NT io_text -DM_KERNEL -UM_I8086 -DXENIX
  715. X
  716. XOBJS = fas.o space.o
  717. X
  718. Xall:    $(OBJS)
  719. X
  720. Xfas.o:    fas.c fas.h Makefile
  721. X    $(CC) $(IOCFLAGS) -c fas.c
  722. X
  723. Xspace.o:    space.c fas.h Makefile
  724. X    $(CC) $(CFLAGS) -c space.c
  725. X
  726. Xinstall:    all
  727. X    -mkdir $(LKDRVRDIR) 2> /dev/null
  728. X    chmod 755 $(LKDRVRDIR)
  729. X    cp fas.o $(LKDRVRDIR)
  730. X    chmod 644 $(LKDRVRDIR)/fas.o
  731. X    cp space.o $(LKDRVRDIR)
  732. X    chmod 644 $(LKDRVRDIR)/space.o
  733. X
  734. Xspace.c:
  735. X    @echo "You must copy the proper space-xxxxx file to \`space.c'"
  736. X    @false
  737. X
  738. Xclean:
  739. X    rm -f $(OBJS)
  740. X
  741. Xclobber:    clean
  742. X
  743. SHAR_EOF
  744. true || echo 'restore of Makefile.X286 failed'
  745. rm -f _shar_wnt_.tmp
  746. fi
  747. # ============= Makefile.X386 ==============
  748. if test -f 'Makefile.X386' -a X"$1" != X"-c"; then
  749.     echo 'x - skipping Makefile.X386 (File already exists)'
  750.     rm -f _shar_wnt_.tmp
  751. else
  752. > _shar_wnt_.tmp
  753. echo 'x - extracting Makefile.X386 (Text)'
  754. sed 's/^X//' << 'SHAR_EOF' > 'Makefile.X386' &&
  755. X# Makefile for SCO Xenix 386
  756. X
  757. XSHELL = /bin/sh
  758. XLKDRVRDIR = /usr/sys/io/fas
  759. X
  760. XCC = cc
  761. XCFLAGS = -O -DXENIX -DM_KERNEL -M3e -Zp4
  762. X
  763. XOBJS = fas.o space.o
  764. X
  765. Xall:    $(OBJS)
  766. X
  767. Xfas.o:    fas.c fas.h Makefile
  768. X    $(CC) $(CFLAGS) -c fas.c
  769. X
  770. Xspace.o:    space.c fas.h Makefile
  771. X    $(CC) $(CFLAGS) -c space.c
  772. X
  773. Xinstall:    all
  774. X    -mkdir $(LKDRVRDIR) 2> /dev/null
  775. X    chmod 755 $(LKDRVRDIR)
  776. X    cp fas.o $(LKDRVRDIR)
  777. X    chmod 644 $(LKDRVRDIR)/fas.o
  778. X    cp space.o $(LKDRVRDIR)
  779. X    chmod 644 $(LKDRVRDIR)/space.o
  780. X
  781. Xspace.c:
  782. X    @echo "You must copy the proper space-xxxxx file to \`space.c'"
  783. X    @false
  784. X
  785. Xclean:
  786. X    rm -f $(OBJS)
  787. X
  788. Xclobber:    clean
  789. X
  790. SHAR_EOF
  791. true || echo 'restore of Makefile.X386 failed'
  792. rm -f _shar_wnt_.tmp
  793. fi
  794. # ============= Makefile.uPort ==============
  795. if test -f 'Makefile.uPort' -a X"$1" != X"-c"; then
  796.     echo 'x - skipping Makefile.uPort (File already exists)'
  797.     rm -f _shar_wnt_.tmp
  798. else
  799. > _shar_wnt_.tmp
  800. echo 'x - extracting Makefile.uPort (Text)'
  801. sed 's/^X//' << 'SHAR_EOF' > 'Makefile.uPort' &&
  802. X# Makefile for uPort SYS V/386
  803. X
  804. XSHELL = /bin/sh
  805. XINCLSYS = /usr/include/sys
  806. XLKDRVRDIR = /etc/atconf/modules/fas
  807. XLKCONFDIR = /etc/atconf/modules/fas
  808. XDRVRNAME = fas.o
  809. XCONFNAME = config
  810. X
  811. XCC = cc
  812. XCFLAGS = -O -DINKERNEL -DOPTIM
  813. X
  814. XOBJS = fas.o
  815. X
  816. Xfas.o:        fas.c $(INCLSYS)/fas.h Makefile
  817. X
  818. Xinstall:    fas.o space.c $(CONFNAME)
  819. X    -mkdir $(LKDRVRDIR) 2> /dev/null
  820. X    chmod 755 $(LKDRVRDIR)
  821. X    cp fas.o $(LKDRVRDIR)/$(DRVRNAME)
  822. X    chmod 644 $(LKDRVRDIR)/$(DRVRNAME)
  823. X    cp space.c $(LKDRVRDIR)/space.c
  824. X    chmod 644 $(LKDRVRDIR)/space.c
  825. X    cp $(CONFNAME) $(LKCONFDIR)/$(CONFNAME)
  826. X    chmod 644 $(LKCONFDIR)/$(CONFNAME)
  827. X
  828. Xspace.c:
  829. X    @echo "You must copy the proper space-xxxxx file to \`space.c'"
  830. X    @false
  831. X    
  832. X$(CONFNAME):
  833. X    @echo "You must copy the proper $(CONFNAME)-xxxxx file to \`$(CONFNAME)'"
  834. X    @false
  835. X        
  836. X$(INCLSYS)/fas.h:    fas.h
  837. X    cp fas.h $(INCLSYS)/fas.h
  838. X
  839. Xclean:
  840. X    rm -f fas.o
  841. X
  842. Xclobber:    clean
  843. X
  844. SHAR_EOF
  845. true || echo 'restore of Makefile.uPort failed'
  846. rm -f _shar_wnt_.tmp
  847. fi
  848. # ============= PATCHLEVEL ==============
  849. if test -f 'PATCHLEVEL' -a X"$1" != X"-c"; then
  850.     echo 'x - skipping PATCHLEVEL (File already exists)'
  851.     rm -f _shar_wnt_.tmp
  852. else
  853. > _shar_wnt_.tmp
  854. echo 'x - extracting PATCHLEVEL (Text)'
  855. sed 's/^X//' << 'SHAR_EOF' > 'PATCHLEVEL' &&
  856. Xrelease 2.08 patchlevel 0
  857. SHAR_EOF
  858. true || echo 'restore of PATCHLEVEL failed'
  859. rm -f _shar_wnt_.tmp
  860. fi
  861. # ============= README ==============
  862. if test -f 'README' -a X"$1" != X"-c"; then
  863.     echo 'x - skipping README (File already exists)'
  864.     rm -f _shar_wnt_.tmp
  865. else
  866. > _shar_wnt_.tmp
  867. echo 'x - extracting README (Text)'
  868. sed 's/^X//' << 'SHAR_EOF' > 'README' &&
  869. XREADME file for the FAS Final Async Solution driver
  870. X---------------------------------------------------
  871. X
  872. XWhat is this package:
  873. X
  874. X     This is an async driver for 286/386 based unix systems that adds
  875. X     several features that are not supported by vendors drivers.
  876. X     It supports
  877. X
  878. X        1.  the NS16550A and i82510 UART chips in full FIFO mode.
  879. X        2.  modem sharing for input and output.
  880. X        3.  shared interrupts.
  881. X        4.  multiplexed UART registers (HUB-6 card etc.).
  882. X        5.  full and half duplex hardware flow control.
  883. X        6.  VP/ix, the ISC DOS emulator.
  884. X
  885. X
  886. X     FAS was successfully tested under the following operating systems:
  887. X
  888. X     Microport UNIX SYSV 3.0
  889. X     ISC 386/ix 2.0.2 & 2.2
  890. X     ESIX Rev. C & D
  891. X     Bell Tech/Intel UNIX 3.2
  892. X     SCO UNIX 386
  893. X     SCO XENIX 386 2.3.2
  894. X     SCO XENIX 286 2.3.2
  895. X
  896. X     This driver should work with most of the UNIX SYS V/386 3.X ports
  897. X     currently available. You can have both this and the original
  898. X     vendor driver in the same kernel (if you really like to, but I
  899. X     wouldn't know why). Each driver controls its own separate set of
  900. X     serial ports. The only restriction here is that any int vector must
  901. X     not be used by more than one of the drivers. The kernel config
  902. X     program will complain otherwise.
  903. X
  904. X------------------------------------------------------------------------
  905. X     
  906. XHow it works:
  907. X
  908. X     DIALIN/DIALOUT ON THE SAME PORT
  909. X     -------------------------------
  910. X
  911. X     This driver supports shared line usage by having two logical
  912. X     devices sharing one physical line. Each logical device has its
  913. X     own name. For example for the first line the names are ttyF00
  914. X     (minor device 0) and ttyFM00 (minor device 192). The ttyF00
  915. X     is used for cu, kermit, and other programs that want to dial
  916. X     out. It ignores the modem signals and just goes to it. The
  917. X     ttyFM00 line is strictly for getty. When getty calls open on
  918. X     ttyFM00 the driver hangs the open until the modem asserts the
  919. X     carrier detect signal and then lets the open complete. If cu
  920. X     opens ttyF00 while getty is waiting for the open to complete
  921. X     the device is given to cu and the getty open must wait for cu
  922. X     to finish and then will again wait for the carrier. If cu
  923. X     tries to open the ttyF00 line while getty has ttyFM00 open cu
  924. X     will get an error. If getty tries to open ttyFM00 while cu has
  925. X     ttyF00 open the getty open will just hang and wait for cu to
  926. X     close the line and then wait for the carrier. To put it simply
  927. X     you should put up a getty on ttyFM00 with a -t 60 and use ttyF00
  928. X     for cu and uucico.
  929. X
  930. X     In the example above ttyF00 had a minor device number of 0 and
  931. X     ttyFM00 one of 192. But there are several other possible minor
  932. X     device numbers for each port.
  933. X
  934. X     The higher bits of the minor device number control the operating
  935. X     mode of the device. The port can't be opened by two or more
  936. X     different minor devices at the same time.
  937. X
  938. X     Minor device numbers are built according to the following
  939. X     description:
  940. X
  941. X        Bitmap:   m m f f x x x x
  942. X
  943. X           `m m' are the mode bits as follows:
  944. X
  945. X            0 0   The carrier signal is totally ignored. With carrier high->low
  946. X                  *no* SIGHUP signal is generated. The device does *not* block
  947. X                  on open if there is no carrier.
  948. X            0 1   After an initial open, the carrier signal is ignored.
  949. X                  Although, carrier high->low generates a SIGHUP signal. From
  950. X                  thereon the device is carrier controlled until the last
  951. X                  process has closed the device. An ioctl call with a TCSETA*
  952. X                  command resets the device to ignore carrier again until the
  953. X                  next carrier high->low. The device does *not* block on open
  954. X                  if there is no carrier.
  955. X            1 0   The device is carrier controlled. It blocks on open if
  956. X                  there is no carrier.
  957. X            1 1   Same as mode `1 0', but a parallel non-blocking open
  958. X                  is possible while waiting for carrier.
  959. X
  960. X           `f f' are the hardware flow control bits as follows:
  961. X
  962. X            0 0   The RTSFLOW/CTSFLOW termio(7) flags (if available) enable
  963. X                  half duplex hardware flow control (for output direction,
  964. X                  only) according to SCO's specifications. If these flags
  965. X                  are not available no hardware flow control is used by
  966. X                  this device.
  967. X            0 1   The device uses full duplex hardware flow control (for
  968. X                  input and output direction).
  969. X            1 0   The device uses half duplex hardware flow control (for
  970. X                  output direction, only).
  971. X            1 1   Same as mode `1 0', but additionally the output buffer
  972. X                  state is signaled to the connected device.
  973. X
  974. X                  Refer to the `space.c' file to determine which port
  975. X                  signals are actually used for that purpose.
  976. X
  977. X           `x x x x'
  978. X                  This is the physical port number. This driver supports
  979. X                  up to 16 ports. If you need more, you should use an
  980. X                  intelligent serial card because more than 16 devices
  981. X                  will eat up to much CPU time with this dumb-port approach.
  982. X
  983. X     - Note: If a device is carrier controlled, this implies the generation
  984. X             of a SIGHUP signal with every carrier high->low. This is of
  985. X             course only true if the CLOCAL flag is *not* set.
  986. X
  987. X             On my own system I prefer a minor device number of `0101xxxx'
  988. X             (80 + device #) for the non-blocking tty node and `1101xxxx'
  989. X             (208 + device #) for the blocking tty node. This gives me
  990. X             the SIGHUP signal on carrier loss and full duplex hardware
  991. X             flow control with both logical devices. Dialout while a dialin
  992. X             open is waiting for the carrier is also possible with this
  993. X             setup.
  994. X
  995. X
  996. X     HARDWARE FLOW CONTROL
  997. X     ---------------------
  998. X
  999. X     FAS supports both full and half duplex hardware flow control, using
  1000. X     the RS232C RTS/CTS control lines (by default).
  1001. X
  1002. X     Full duplex flow control is a method to control character flow in
  1003. X     both input and output directions while in half duplex flow control
  1004. X     mode only the output direction is controlled.
  1005. X
  1006. X     You can select between full and half duplex flow control via the
  1007. X     minor device number of the device. In full duplex mode the RTS line
  1008. X     controls the input direction and the CTS line is responsible for the
  1009. X     output direction. In half duplex mode RTS tells the connected device
  1010. X     whether there is data in the output buffer (optional), and the CTS
  1011. X     line has the same function as in full duplex mode.
  1012. X
  1013. X     Full duplex mode:
  1014. X
  1015. X          As long as the FAS input buffer hasn't reached a certain
  1016. X          threshold the RTS line is set high to signal the connected
  1017. X          device that it may send characters. If the input buffer level
  1018. X          rises beyond this threshold RTS will go low and the device
  1019. X          is supposed to stop sending characters. As soon as there is
  1020. X          sufficient space in the input buffer RTS will go high again
  1021. X          and the character flow may continue.
  1022. X
  1023. X          The CTS line works the other way round. If the connected device
  1024. X          sets CTS to high the FAS character output is enabled. If CTS is
  1025. X          low, the output is stopped. There is a special feature for the
  1026. X          CTS part of the handshake. CTS is only looked at if the DSR
  1027. X          line is high. If DSR is low or not connected hardware output
  1028. X          handshake is disabled, that is, FAS sends characters
  1029. X          regardless of the state of CTS.
  1030. X
  1031. X          This has two advantages. At first, if you switch off a serial
  1032. X          device connected to an FAS port with hardware flow control
  1033. X          CTS will go low and therefor the output gets blocked. If at
  1034. X          this time there are still characters in the output buffer the
  1035. X          last process closing this port can't terminate until the
  1036. X          buffer has drained.
  1037. X
  1038. X          But as DSR will also go low if you switch off the device
  1039. X          this blocking of the output will be prevented. In short:
  1040. X          Hardware output handshake is only used if the connected
  1041. X          device sets DSR high, that is, the device is switched on
  1042. X          and is ready. So make sure that you keep this in mind when
  1043. X          you make serial cables and when you configure your serial
  1044. X          devices. DSR must be on if you want CTS handshake.
  1045. X
  1046. X          The other advantage of this CTS/DSR mechanismn is that you
  1047. X          can still connect dumb serial devices to an FAS hardware
  1048. X          handshake port using a minimal 3-wire cable. As an unconnected
  1049. X          DSR line is automatically low hardware output handshake is
  1050. X          disabled, which is just what you wanted in this case.
  1051. X
  1052. X     Half duplex mode:
  1053. X
  1054. X          There are actually three half duplex modes selected by
  1055. X          the minor device number:
  1056. X
  1057. X          First mode:
  1058. X             If the RTSFLOW termio(7) flag is set _and_ the CLOCAL
  1059. X             flag is _not_ set the RTS line is used to signal the
  1060. X             connected device that there is data in the output buffer.
  1061. X             As long as there is output data to come the RTS line stays
  1062. X             high. If the output buffer has drained RTS drops to low
  1063. X             until there is more data to be sent to the connected device.
  1064. X
  1065. X             If the CTSFLOW termio(7) flag is set _and_ the CLOCAL
  1066. X             flag is _not_ set the CTS line used to control the output
  1067. X             character flow. This works as in full duplex mode.
  1068. X
  1069. X          Second mode:
  1070. X             This mode overrides the RTSFLOW/CTSFLOW flags and works
  1071. X             as if the CTSFLOW flag is set permanently. The CLOCAL flag
  1072. X             doesn't affect this mode.
  1073. X
  1074. X          Third mode:
  1075. X             This mode overrides the RTSFLOW/CTSFLOW flags and works
  1076. X             as if both the RTSFLOW and CTSFLOW flags are set permanently.
  1077. X             The CLOCAL flag doesn't affect this mode.
  1078. X
  1079. X
  1080. X     VP/ix SUPPORT
  1081. X     -------------
  1082. X
  1083. X     FAS allows DOS programs running under VP/ix to access serial
  1084. X     ports. You simply need to modify your personal VP/ix configuration
  1085. X     file (`vpix.cnf') to tell the DOS emulator which FAS devices to
  1086. X     use for COM1 (or COM1MOUSE) and COM2. Note that VP/ix opens
  1087. X     these devices at startup time, so you better make sure that
  1088. X     the desired devices aren't used by other processes when you
  1089. X     start VP/ix as VP/ix wants to use them exclusively.
  1090. X
  1091. X     There are some special features with the handling of the RTS and
  1092. X     DTR lines you should know about. If your DOS program asserts
  1093. X     the DTR line this will actually cause action on the modem
  1094. X     enable line you configured in `space.c'. Likewise, RTS asserts
  1095. X     the half duplex hardware handshake line configured in `space.c'.
  1096. X
  1097. X     If the used FAS device has full duplex hardware handshake enabled,
  1098. X     asserting RTS from DOS actually stops the character flow from FAS
  1099. X     to VP/ix. This prevents input buffers of interrupt driven DOS
  1100. X     programs from overflowing. FAS, on the other hand, uses its hardware
  1101. X     handshake to prevent an overflow of its own input buffer. Therefor,
  1102. X     you can use DOS telecommunication programs even at high baud rates
  1103. X     without losing characters, provided your DOS programs are
  1104. X     configured to use full duplex RTS/CTS flow control.
  1105. X
  1106. X     All this virtual handling has the advantage that the DOS program
  1107. X     doesn't need to know certain details about your actual port setup.
  1108. X     Reading the modem status register, on the other hand, doesn't cause
  1109. X     any translation of the register value.
  1110. X
  1111. X     To enable VP/ix support, you have to uncomment the `HAVE_VPIX'
  1112. X     define in `fas.h'.
  1113. X
  1114. X
  1115. X     WHICH SERIAL CARDS ARE SUPPORTED ?
  1116. X     ----------------------------------
  1117. X
  1118. X     The driver supports and has been tested on many serial async
  1119. X     dumb port cards. It supports most combinations of shared
  1120. X     interrupts. The current driver supports NS16450, NS16550A,
  1121. X     um82450 and i82510. 8250 chips are not supported due to various
  1122. X     bugs and speed problems in these parts. They have no place in any
  1123. X     286/386 or other high performance system. Replace them with one of
  1124. X     the supported chips. They are pin-to-pin compatible.
  1125. X     
  1126. X     ATTENTION: Don't use NS16550 (without the trailing `A') or
  1127. X                WD16550 chips! They are buggy and won't work with
  1128. X                FAS. Some aren't even recognized by the FIFO auto-
  1129. X                detect code in FAS. Therefor, even if they are
  1130. X                cheaper, don't buy them.
  1131. X                
  1132. X     Take a look at the various samples of space-xxxx for details
  1133. X     of how to set up for various devices.
  1134. X
  1135. X     At boot time you will see a status message on the screen with
  1136. X     symbols that show the init state of each port. The symbols
  1137. X     are as follows:
  1138. X
  1139. X        -     not defined in the fas_port array
  1140. X        >     int vector greater than limit
  1141. X        ?     can't initialize port
  1142. X        1-6   error during test phase indicated by number
  1143. X        *     port is initialized (NS16450)
  1144. X        +     port is initialized and has FIFOs forced off
  1145. X        f     port is initialized and has FIFOs (i82510)
  1146. X        F     port is initialized and has FIFOs (NS16550A)
  1147. X
  1148. X     This is convenient to check whether you have entered the proper port
  1149. X     base addresses in `space.c'.
  1150. X
  1151. X
  1152. X     WHICH CARD WILL SUPPORT SHARED INTERRUPTS ?
  1153. X     -------------------------------------------
  1154. X
  1155. X     Many multi-port cards have jumpers or dip switches that let you
  1156. X     assign more than one port to the same interrupt (IRQ) line. This alone
  1157. X     is _no_ guaranty that they really support shared interrupts! These
  1158. X     cards may be designed for the DOS world where you may want two or more
  1159. X     serial ports but don't need to run them concurrently, that is, no more
  1160. X     than one of those ports assigned to the same IRQ line is allowed to be
  1161. X     in use at a time. For DOS this is sufficient as DOS is no multitasking
  1162. X     operating system. For UNIX this won't work because in the worst case
  1163. X     all serial ports may be in use at the same time.
  1164. X
  1165. X     The basic problem is that the PC (and AT) I/O bus can't handle shared
  1166. X     interrupts itself. This is due to a brain-dead hardware design. Therefor,
  1167. X     there must be some special logic on the serial card to provide shared
  1168. X     interrupts. And those cards are quite rare (and usually more expensive).
  1169. X
  1170. X     Therefor, you have the choice to give every port on the card its own
  1171. X     IRQ line or to buy a multi-port card that really has shared interrupts.
  1172. X     But in the latter case you better ask your vendor twice to make shure
  1173. X     that it has this functionality because from the card's manuals it often
  1174. X     isn't obvious which type of card it is. One well-known shared interrupts
  1175. X     card is the AST 4-port card. There are many compatible clones available
  1176. X     that are usually much cheaper than the original. You can even buy
  1177. X     AST compatible 8-port cards where two AST 4-port blocks are on the
  1178. X     same board.
  1179. X
  1180. X
  1181. X     CABLING
  1182. X     -------
  1183. X
  1184. X     Don't leave unused input lines (CTS, DCD, DSR, RING) open! Due
  1185. X     to crosstalking from other lines these input lines might change
  1186. X     their logic level rapidly, resulting in excessive modem status
  1187. X     interrupts that could bring your machine down to its knees.
  1188. X     Therefor, you should connect any unused input line to GND (pin 7
  1189. X     on the D-Sub 25 RS232C connector).
  1190. X
  1191. X     To prevent the machine from locking up in a case like described
  1192. X     above the port causing the modem status interrupts will be shut
  1193. X     down for 30 seconds after the last close on that port. Any attempt
  1194. X     to use an open(), read(), write() or ioctl() call to this port
  1195. X     during the time until the last close and then 30 seconds from
  1196. X     there will result in an ENXIO error.
  1197. X
  1198. X     The port shutdown will be indicated on the system console by a
  1199. X     warning message containing the unit number of the offending port.
  1200. X
  1201. X     But even if this protection mechanismn isn't triggered on your
  1202. X     computer you might have this problem. This is usually indicated
  1203. X     by a bad system performance during high speed serial data transfers.
  1204. X     Use your system's performance measurement tools to check the
  1205. X     number of modem interrupts. If it is unusual high, or even
  1206. X     higher than the number of transmit/receive interrupts, you
  1207. X     certainly have a problem with your cabling. Of course, another
  1208. X     reason could be a bad UART chip.
  1209. X
  1210. X     ATTENTION: If you want to connect two UNIX systems (both using
  1211. X     FAS) via a null modem cable, and if you want to run a getty
  1212. X     on both ends you need to modify the `space.c' file to prevent
  1213. X     both gettys talking to each other, wasting valuable CPU time.
  1214. X     Remove the `EI_DTR' (or `EI_RTS', depending on your setup) macro
  1215. X     for the desired port from the initializer part of the `fas_modem'
  1216. X     array. This will cause DTR (or RTS) to be asserted only on
  1217. X     dialout. Therefor, the getty at the other end will become alive
  1218. X     only if a dialout is in progress.
  1219. X
  1220. X     Another caveat is connecting a mouse or other pointer device to an
  1221. X     FAS port. There are many mice on the market that don't handle the
  1222. X     modem and flow control lines in a proper way. Therefor, they should
  1223. X     be connected to a port with a minor device number of 0 + device #.
  1224. X     This disables any modem or flow control and prevents the device from
  1225. X     locking up under certain circumstances.
  1226. X
  1227. X
  1228. X     A WORD ABOUT CHARACTER LOSSES
  1229. X     -----------------------------
  1230. X
  1231. X     If you've experienced character losses with your vendor async
  1232. X     driver at high baud rates you shouldn't blame the vendor for
  1233. X     that. The real reason for this problem lies in the ancient port
  1234. X     devices used in most 286/386 systems: The 8250 (not supported by
  1235. X     FAS) and the NS16450.
  1236. X
  1237. X     They have only one receiver character buffer. This implies that
  1238. X     the operating system must read a character from this buffer before
  1239. X     the next one arrives from the port's shift register. For the old
  1240. X     IBM PC with DOS this was sufficient. But for UNIX and with baud
  1241. X     rates up to 38400 this is simply a joke.
  1242. X
  1243. X     UNIX is not a real-time operating system. That means that it's
  1244. X     kernel isn't optimized for fast interrupt responses. With the
  1245. X     proper hardware this is no problem. But because the vendors have
  1246. X     to adapt UNIX to the standard hardware found in 286/386 systems they
  1247. X     also have to cope with the NS16450 ports which are in there simply
  1248. X     to be compatible with IBM PCs, XTs and ATs.
  1249. X
  1250. X     It is impossible to make it work at high baud rates without a
  1251. X     major redesign of the AT&T supplied UNIX kernel. But then it
  1252. X     wouldn't be UNIX SYSV any more.
  1253. X
  1254. X     Luckily, there is a pin-to-pin replacement available from
  1255. X     National Semiconductors: The NS16550A.
  1256. X
  1257. X     This device has separate 16 character FIFOs for the receiver and
  1258. X     the transmitter. With these FIFOs the interrupt latency of the
  1259. X     kernel can be quiet high without losing any characters.
  1260. X     Additionally, because with most interrupts many characters are
  1261. X     processed at once the system is loaded much less.
  1262. X
  1263. X     As you see, the necessary hardware is available. Therefor, if you
  1264. X     have to blame the UNIX vendor then blame him for not telling you
  1265. X     that you should buy some NS16550A and/or for not supplying you
  1266. X     with a serial driver that supports these port devices.
  1267. X
  1268. X     But as you have the FAS driver now and if you use the NS16550A
  1269. X     devices you shouldn't have this kind of trouble any more. This is
  1270. X     the philosophy behind the driver's name `Final Async Solution'.
  1271. X
  1272. X     Enjoy!
  1273. X
  1274. X     PS: If for some reason you can't get the NS16550A chips you
  1275. X         could use the i82510 chips from Intel. Although they are
  1276. X         much less efficient they are still better than the NS16450.
  1277. X
  1278. X     PPS: Some kernel functions may disable interrupts long enough
  1279. X          that even the input FIFO can't prevent character loss.
  1280. X          One culprit is the disk cache flush function. If you
  1281. X          configure your kernel with too many cache buffers (NBUF
  1282. X          parameter for AT&T derived UNIX) you may still lose
  1283. X          characters (at least at 38400 bps).
  1284. X
  1285. X          Another candidate is VP/ix, or rather the kernel functions
  1286. X          to support VP/ix. This may also lead to lost characters
  1287. X          at very high input speed.
  1288. X
  1289. X          And there are some bus mastering disk controllers (like the
  1290. X          Adaptec 1540/1542 SCSI controller) on the market that slow
  1291. X          down the CPU so much during data transfer that it isn't fast
  1292. X          enough to process characters coming in at high baud rates.
  1293. X          Therefor, if you can configure your disk controller, don't
  1294. X          use values that will bring the CPU down to its knees.
  1295. X          Otherwise, FAS will lose input characters during disk I/O.
  1296. X
  1297. X
  1298. X     DEVICE LOCKUPS
  1299. X     --------------
  1300. X
  1301. X     There are certain conditions under which a device can lock up,
  1302. X     that is, at least one process that uses this device waits for
  1303. X     a tty I/O related event that obviously doesn't occure.
  1304. X
  1305. X     The most common case is that there are still characters in the
  1306. X     output buffer, but the output is disabled for some reason. Then
  1307. X     the last process that closes the tty device hangs in the close()
  1308. X     function until the output buffer has drained.
  1309. X
  1310. X     Tty output may be stopped by the software (XON/XOFF) or hardware
  1311. X     (RTS/CTS, by default) flow control. In this case something
  1312. X     seems to be wrong with the cabling or the connected device.
  1313. X     Please check this first out before you blame FAS. Sometimes
  1314. X     it helps to switch the device off and on a few times to unblock
  1315. X     the tty output.
  1316. X
  1317. X     Another reason could be a lost transmitter interrupt. If this isn't
  1318. X     caused by a configuration error this usually indicates a hardware
  1319. X     problem in your computer which should be fixed as soon as possible.
  1320. X     Otherwise, you can't run this system unattended because it is too
  1321. X     unreliable.
  1322. X
  1323. X     In the cases described above the last resort is entering `kill -9 <pid>'
  1324. X     once or twice. This should unblock and terminate the hanging process.
  1325. X
  1326. X     If interrupts are lost on IRQ2 this might have to do with an EGA or
  1327. X     VGA card using this IRQ line for the vertical retrace interrupt.
  1328. X     This interrupt isn't used at all these days, neither under DOS nor
  1329. X     UNIX. It's simply there for compatibility.
  1330. X
  1331. X     On some video cards (the more expensive ones) there is a jumper or
  1332. X     dip switch to disable the vertical retrace interrupt. On the rest
  1333. X     you have to cut the trace to the bus contact B4 with a sharp knife.
  1334. X     This contact is on the solder side of the video card, the fourth bus
  1335. X     contact counted from the side where the 9 or 15 pin D-SUB connector
  1336. X     to the monitor is located. Cutting this trace has the same effect as
  1337. X     pulling the IRQ2 jumper on other cards. Note that cutting the trace
  1338. X     will void your video card's warranty.
  1339. X
  1340. X     Now IRQ2 should be available for use with FAS. Look at the INSTALLATION
  1341. X     file for details on how to configure FAS for IRQ2. This is operating
  1342. X     system dependent.
  1343. X
  1344. X     And there is a rare case which has to do with the number of available
  1345. X     CLISTs in the UNIX kernel. The UNIX output and input buffers are
  1346. X     256 bytes each (by default). If for some reason the output of a
  1347. X     tty device is stopped but a process continues to send data one
  1348. X     character at a time this uses up one CLIST for every charcacter.
  1349. X     If the number of CLISTs in the kernel is less than 256 all CLISTs
  1350. X     will be busy eventually.
  1351. X
  1352. X     The dangerous part here is that the pool of CLISTs is used by all
  1353. X     tty devices. Therefor, if one single tty device manages to eat up
  1354. X     all available CLISTs all tty in- and output comes to a halt. If this
  1355. X     happens you can't access your machine any more, not even from the
  1356. X     operator console. Although, the system is still alive internally.
  1357. X
  1358. X     Unfortunately, many UNIX vendors have put a dangerously low number-of-
  1359. X     CLISTs parameter into their kernel tune files. You should increase
  1360. X     it to a value that makes it impossible that one device alone can
  1361. X     occupy all CLISTs (it's the NCLIST parameter under AT&T derived
  1362. X     UNIX SysVr3.x). A value of 400 should be sufficient.
  1363. X
  1364. X
  1365. X     COPYRIGHT
  1366. X     ---------
  1367. X
  1368. X     Although FAS is frequently refered to as a public domain driver,
  1369. X     FAS was never released to the public domain (this is true for
  1370. X     all releases of FAS). FAS is freeware, and the author has the
  1371. X     full copyright.
  1372. X
  1373. X     Here are the conditions under which you may copy and distribute
  1374. X     FAS. The goal of these terms is to spread FAS as wide as possible
  1375. X     and, on the other hand, to prevent anyone from making money out
  1376. X     of it, and to prevent any restrictions of the availability of
  1377. X     FAS.
  1378. X
  1379. X     1. You can freely copy FAS, and you may give copies of FAS to
  1380. X        everyone.
  1381. X     2. FAS has to be distributed as the complete package posted
  1382. X        to Usenet by its author.
  1383. X     3. Vendors may bundle FAS with their products as long as they
  1384. X        a) tell their customers (somewhere in the written documentation)
  1385. X           that FAS is freeware, wasn't developed by the vendor, and the
  1386. X           vendor doesn't have the copyright for FAS. 
  1387. X        b) provide the complete original package in addition to their
  1388. X           customized version. Customization means modification of
  1389. X           the configuration files. No changes to the actual source
  1390. X           file (fas.c) are allowed.
  1391. X        c) tell their customers (somewhere in the written documentation)
  1392. X           where the original package is located on the distribution
  1393. X           media.
  1394. X     4. Changes to the sources are allowed
  1395. X        a) for private use.
  1396. X        b) to develop another freeware package with similar restrictions.
  1397. X           This new package has to have a different name.
  1398. X     5. The author isn't liable for any damage or loss of data caused
  1399. X        by FAS.
  1400. X
  1401. X------------------------------------------------------------------------
  1402. X
  1403. XWhat's in this package:
  1404. X
  1405. X     README         This file.
  1406. X
  1407. X     INSTALLATION   A description about how to install the driver
  1408. X                    on your system.
  1409. X
  1410. X     PATCHLEVEL     Just a reference file for future updates.
  1411. X
  1412. X     RELEASENOTES   Notes about the present FAS releases.
  1413. X                    
  1414. X     fas.h          The header file for the driver.
  1415. X
  1416. X     fas.c          The driver itself.
  1417. X
  1418. X     space-xxxxx    These are samples of what `space.c' must look
  1419. X                    like.  You can either copy one of these to
  1420. X                    `space.c' or use it as a template to create your
  1421. X                    own `space.c'.
  1422. X
  1423. X          space-c1-2     For com1 and com2.
  1424. X
  1425. X          space-c1-3     For com1, com2 and com3.
  1426. X
  1427. X          space-ast4     For the AST 4-port card.
  1428. X
  1429. X          space-ast4c12  For the AST 4-port card plus com1 and com2.
  1430. X
  1431. X          space-hub6     For the Bell Tech HUB-6 card.
  1432. X
  1433. X     config-xxxxx   This is for uPort SYS V/386 only.
  1434. X                    Kernel configuaration file.  You should pick the one
  1435. X                    that matches your configuration and copy it to `config'.
  1436. X
  1437. X          config-c1-2    For com1 and com2.
  1438. X
  1439. X          config-c1-3    For com1, com2 and com3.
  1440. X
  1441. X          config-ast4    For the AST 4-port card.
  1442. X
  1443. X          config-ast4c12 For the AST 4-port card plus com1 and com2.
  1444. X
  1445. X          config-hub6    For the Bell Tech HUB-6 card.
  1446. X
  1447. X     s_fas-xxxxx    This is for ISC 386/ix, ESIX, Bell Tech/Intel UNIX 3.2
  1448. X                    and SCO UNIX 386.
  1449. X                    Kernel configuration file.  You should pick the one
  1450. X                    that matches your configuration and copy it to `s_fas'.
  1451. X
  1452. X          s_fas-c1-2     For com1 and com2.
  1453. X
  1454. X          s_fas-c1-3     For com1, com2 and com3.
  1455. X
  1456. X          s_fas-ast4     For the AST 4-port card.
  1457. X
  1458. X          s_fas-ast4c12  For the AST 4-port card plus com1 and com2.
  1459. X
  1460. X          s_fas-hub6     For the Bell Tech HUB-6 card.
  1461. X
  1462. X     n_fas-xxxxx    This is for ISC 386/ix, ESIX, Bell Tech/Intel UNIX 3.2
  1463. X                    and SCO UNIX 386.
  1464. X                    Tty device nodes file.  You should pick the one
  1465. X                    that matches your configuration and copy it to `n_fas'.
  1466. X
  1467. X          n_fas-c1-2     For com1 and com2.
  1468. X
  1469. X          n_fas-c1-3     For com1, com2 and com3.
  1470. X
  1471. X          n_fas-ast4     For the AST 4-port card.
  1472. X
  1473. X          n_fas-ast4c12  For the AST 4-port card plus com1 and com2.
  1474. X
  1475. X          n_fas-hub6     For the Bell Tech HUB-6 card.
  1476. X
  1477. X     i_fas-xxxxx    This is for ISC 386/ix, ESIX, Bell Tech/Intel UNIX 3.2
  1478. X                    and SCO UNIX 386.
  1479. X                    Inittab getty lines file.  You should pick the one
  1480. X                    that matches your configuration and copy it to `i_fas'.
  1481. X
  1482. X          i_fas-c1-2     For com1 and com2.
  1483. X
  1484. X          i_fas-c1-3     For com1, com2 and com3.
  1485. X
  1486. X          i_fas-ast4     For the AST 4-port card.
  1487. X
  1488. X          i_fas-ast4c12  For the AST 4-port card plus com1 and com2.
  1489. X
  1490. X          i_fas-hub6     For the Bell Tech HUB-6 card.
  1491. X
  1492. X     Makefile.uPort A makefile for uPort SYS V/386 systems. This is generic
  1493. X                    and should work for all configurations of lines
  1494. X                    and interrupts.
  1495. X
  1496. X     Makefile.ISC   A makefile for ISC 386/ix systems.  This is generic
  1497. X                    and should work for all configurations of lines
  1498. X                    and interrupts.
  1499. X
  1500. X     Makefile.ESIX  A makefile for ESIX systems.  This is generic
  1501. X                    and should work for all configurations of lines
  1502. X                    and interrupts.
  1503. X
  1504. X     Makefile.BELL  A makefile for Bell Tech/Intel UNIX 3.2 systems.  This
  1505. X                    is generic and should work for all configurations of
  1506. X                    lines and interrupts.
  1507. X
  1508. X     Makefile.SCO   A makefile for SCO UNIX 386 systems.  This is generic
  1509. X                    and should work for all configurations of lines
  1510. X                    and interrupts.
  1511. X
  1512. X     Makefile.X386  A makefile for SCO Xenix 386 systems.  This is generic
  1513. X                    and should work for all configurations of lines
  1514. X                    and interrupts.
  1515. X
  1516. X     Makefile.X286  A makefile for SCO Xenix 286 systems.  This is generic
  1517. X                    and should work for all configurations of lines
  1518. X                    and interrupts.
  1519. X
  1520. X------------------------------------------------------------------------
  1521. X
  1522. XWhat you will need to use this package:
  1523. X
  1524. X     You will need one of the above mentioned UNIX systems with the
  1525. X     kernel link kit and the software development package.
  1526. X
  1527. X------------------------------------------------------------------------
  1528. X
  1529. XThe original asy replacement driver for Microport UNIX/386 (FAS' predecessor)
  1530. Xwas developed by
  1531. X
  1532. XJim Murray              INET            jjm%jjmhome@m2c.m2c.org
  1533. X2 Mohawk Circle         UUCP            harvard!m2c!jjmhome!jjm
  1534. XWestboro Mass 01581     
  1535. XUSA                                     voice (508) 366-2813
  1536. X
  1537. XCredits to him for releasing this great driver to the Usenet community.
  1538. XBut if you have problems with FAS please don't contact him because he
  1539. Xwasn't involved in the developement of FAS.
  1540. X
  1541. XFAS was developed by
  1542. X
  1543. XUwe Doering             INET : gemini@geminix.in-berlin.de
  1544. XBillstedter Pfad 17 b   UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
  1545. X1000 Berlin 20
  1546. XGermany
  1547. X
  1548. X    ^    ^    ^    ^    ^    ^    ^    ^    ^    ^
  1549. XSend your questions and bug reports to this address.
  1550. SHAR_EOF
  1551. true || echo 'restore of README failed'
  1552. rm -f _shar_wnt_.tmp
  1553. fi
  1554. # ============= RELEASENOTES ==============
  1555. if test -f 'RELEASENOTES' -a X"$1" != X"-c"; then
  1556.     echo 'x - skipping RELEASENOTES (File already exists)'
  1557.     rm -f _shar_wnt_.tmp
  1558. else
  1559. > _shar_wnt_.tmp
  1560. echo 'x - extracting RELEASENOTES (Text)'
  1561. sed 's/^X//' << 'SHAR_EOF' > 'RELEASENOTES' &&
  1562. X     release 1.1a Sat Nov 11, 1989
  1563. X
  1564. X     This is an unofficial release as I'm not the original author
  1565. X     of this async driver.
  1566. X
  1567. X     Uwe Doering             INET : gemini@geminix.in-berlin.de
  1568. X     Billstedter Pfad 17 b   UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
  1569. X     1000 Berlin 20
  1570. X     Germany
  1571. X
  1572. X     New Features:
  1573. X
  1574. X          Added a third minor tty device number for every physical
  1575. SHAR_EOF
  1576. true || echo 'restore of RELEASENOTES failed'
  1577. fi
  1578. echo 'End of fas208 part 1'
  1579. echo 'File RELEASENOTES is continued in part 2'
  1580. echo 2 > _shar_seq_.tmp
  1581. exit 0
  1582. -- 
  1583. Uwe Doering  |  INET : gemini@geminix.in-berlin.de
  1584. Berlin       |----------------------------------------------------------------
  1585. Germany      |  UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
  1586.