home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3532 < prev    next >
Internet Message Format  |  1991-06-23  |  64KB

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