diff -u --recursive --new-file v1.3.36/linux/Documentation/Configure.help linux/Documentation/Configure.help
--- v1.3.36/linux/Documentation/Configure.help	Thu Jan  1 02:00:00 1970
+++ linux/Documentation/Configure.help	Sat Oct 28 16:00:49 1995
@@ -0,0 +1,2203 @@
+# LAST EDIT: Fri Oct 27 23:03:01 1995 by Axel Boldt (boldt@math.ucsb.edu) 
+#
+# This version of the Linux kernel configuration help texts
+# corresponds to the kernel versions 1.3.x. Be aware that these
+# are development kernels.
+#
+# The latest version of these help texts is always available from
+#    http://math-www.uni-paderborn.de/~axel/config_help.html
+#
+# Information about what a kernel is, what it does, how to patch and
+# compile it and much more is contained in the Kernel-HOWTO, available
+# via anonymous ftp from sunsite.unc.edu in the directory
+# /pub/Linux/docs/HOWTO. 
+#
+# Format: description<nl>variable<nl>helptext<nl><nl>. The help texts
+# must not contain empty lines. No variable should occur twice; if it
+# does, only the first occurance will be used by Configure. The lines
+# in a help text should be indented two positions. Lines starting with
+# `#' are ignored. Use emacs' kfill.el to edit this file or you lose.
+#
+# All this was shamelessly stolen from several different sources. Many
+# thanks to all the contributors.  Feel free to use these help texts
+# in your own kernel configuration tools. The texts are copyrighted
+# (c) 1995 by Axel Boldt and governed by our beloved little Copyleft
+# virus, the GNU Public License. This essentially means that you can
+# do with them whatever you want unless you try to restrict someone
+# else's right to do whatever they want.
+#
+# Send comments to Axel Boldt <boldt@math.ucsb.edu>.
+
+Kernel math emulation
+CONFIG_MATH_EMULATION
+  Linux can emulate a math coprocessor (used for floating point
+  operations) if you don't have one. 486DX and Pentium processors have
+  a math coprocessor built in, 486SX and 386 do not, unless you added
+  a 487DX or 387, respectively.  (The messages during boot time can
+  give you some hints here.) Everyone needs either a coprocessor or
+  this emulation. If you enable this emulation even though you have a
+  coprocessor, the coprocessor will be used nevertheless. (This
+  behavior can be changed with the kernel command line option
+  "no387", which comes handy if your coprocessor is broken. See the
+  documentation of your boot loader (lilo or loadlin) about how to
+  pass options to the kernel. The lilo procedure is also explained in
+  the SCSI-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.) This means that it is a good
+  idea to say Y here if you intend to use this kernel on different
+  machines. More information about the internals of Linux math
+  coprocessor emulation can be found in arch/i386/math-emu/README. If
+  you are not sure, say Y; apart from resulting in a 45kB bigger
+  kernel, it won't hurt.
+
+Normal floppy disk support
+CONFIG_BLK_DEV_FD
+  If you want to use your floppy disk drive(s) under Linux, say
+  Y. Information about this driver, especially important for IBM
+  Thinkpad users, is contained in drivers/block/README.fd.  This
+  driver is also available as a module ( = code which can be inserted
+  in and removed from the running kernel whenever you want). If you
+  want to compile it as a module, say M here and read
+  Documentation/modules.txt.
+  
+Normal (MFM/RLL) disk and IDE disk/cdrom support
+CONFIG_ST506   		           
+  This is the regular, non-SCSI harddisk support. Pretty much everyone
+  will want to say Y here, except if they configure a diskless machine
+  which mounts all files over the network using NFS (rare; if you are
+  planning to do this, have a look at the package
+  /pub/Linux/system/Linux-boot/netboot-nfs.tar.gz, available via ftp
+  (user: anonymous) from sunsite.unc.edu, extract with "tar xzvf
+  filename") or if they exclusively use SCSI drives and no IDE/ATAPI
+  CDROMs (ATAPI = AT Attachment Packet Interface is a new protocol
+  currently used for controlling CDROM and tape drives, similar to the
+  SCSI protocol. Some newer CDROM drives such as NEC 260 and MITSUMI
+  triple/quad speed drives use it, but most MITSUMI CDROM drives
+  don't).  Useful information about how to use large (>504MB) IDE
+  harddrives and how to work around a hardware bug in the CMD640 IDE
+  interface is contained in drivers/block/README.ide. To fine-tune
+  the parameters of your IDE drive for improved performance, you might
+  want to have a look at the hdparm package in
+  sunsite.unc.edu:/pub/Linux/kernel/patches/diskdrives/
+	
+Use old (reliable) disk-only driver for primary i/f
+CONFIG_BLK_DEV_HD
+  As you might have guessed, there are now two drivers for IDE
+  harddrives around: the old reliable one and the new improved
+  one. The new driver can also handle IDE/ATAPI CDROM drives (ATAPI =
+  AT Attachment Packet Interface is a new protocol currently used for
+  controlling CDROM and tape drives, similar to the SCSI
+  protocol. Some newer CDROM drives such as NEC 260 and MITSUMI
+  triple/quad speed drives use it, but most MITSUMI CDROM drives
+  don't). The old driver supports up to two hard drives, while the new
+  one can deal with any mix of up to eight hard drives and IDE/ATAPI
+  CDROMs, two per IDE interface. Using the old driver makes sense if
+  you have older MFM/RLL/ESDI drives, since it is smaller and these
+  drives don't benefit from the additional features of the new
+  driver. If you have more than one IDE interface (=controller), you
+  can use the old driver on the first and the new one on the others,
+  if you like.  In that case (or if you have just one interface and
+  don't want to use the new driver at all) you would say Y here,
+  thereby enlarging your kernel by about 4 kB. If you want to use the
+  new driver exclusively, say N and answer Y to the following
+  question(s). Useful information about how to use large (>504MB) IDE
+  harddrives is contained in drivers/block/README.ide. If unsure, say
+  N.
+
+Use new IDE driver for primary/secondary i/f 
+CONFIG_BLK_DEV_IDE 
+  This will use the new and improved IDE driver for the specified IDE
+  interface (=controller).  You can use up to 8 IDE harddisks and
+  IDE/ATAPI CDROMs, 2 per interface. (ATAPI = AT Attachment Packet
+  Interface is a new protocol currently used for controlling CDROM and
+  tape drives, similar to the SCSI protocol. Some newer CDROM drives
+  such as NEC 260 and MITSUMI triple/quad speed drives use it, but
+  most MITSUMI CDROM drives don't.) If you have just one IDE harddisk
+  and no IDE/ATAPI CDROM drive and you intend to use the old IDE
+  driver on the primary interface, say N here. Everybody else says
+  Y. This driver enlarges your kernel by about 8kB. Useful information
+  about how to use large (>504MB) IDE harddrives and how to use more
+  than 2 IDE interfaces is contained in drivers/block/README.ide.
+
+Include support for IDE/ATAPI CDROMs
+CONFIG_BLK_DEV_IDECD
+  If you have a CDROM drive using the ATAPI protocol, say Y. (ATAPI =
+  AT Attachment Packet Interface is a new protocol currently used for
+  controlling CDROM and tape drives, similar to the SCSI protocol and
+  derived from IDE=ATA. Some newer CDROM drives such as NEC 260 and
+  MITSUMI triple/quad speed drives use it, but most MITSUMI CDROM
+  drives don't.) If this is your only CDROM drive, you can say N to
+  all other CDROM options appearing later, but make sure to say Y to
+  the ISO9660 filesystem and read the CDROM-HOWTO, available via ftp
+  (user: anonymous) in sunsite.unc.edu:/pub/Linux/docs/HOWTO. Note
+  that older version of the linux boot loader lilo cannot properly
+  deal with IDE/ATAPI CDROMs; install lilo 16 or higher, available
+  from sunsite.unc.edu:/pub/Linux/system/Linux-boot/lilo.
+
+XT harddisk support
+CONFIG_BLK_DEV_XD
+  Very old 8 bit hard disk controllers used in the IBM XT
+  computer. Pretty unlikely that you have this: say N.
+
+Support for Deskstation Tyne
+CONFIG_DESKSTATION_TYNE
+#####
+##### Anyone have details? It's for the MIPS architecture.
+#####
+
+Support for Acer PICA 1 chipset
+CONFIG_ACER_PICA_61
+#####
+##### Anyone have details? It's for the MIPS architecture.
+#####
+
+Support for DECstation
+CONFIG_DECSTATION
+#####
+##### Anyone have details? It's for the MIPS architecture.
+#####
+
+Generate code for R4x00
+CONFIG_R4X00
+#####
+##### Anyone have details? It's for the MIPS architecture.
+#####
+
+Networking support
+CONFIG_NET
+  Unless you really know what you are doing, you should say Y
+  here. The reason is that some programs need it even if you configure
+  a stand-alone machine that won't be connected to any other computer.
+  If you have recently upgraded from an older kernel, you should
+  consider updating your networking tools too; read net/README for
+  details. 
+
+Sun floppy controller support
+CONFIG_BLK_DEV_SUNFD
+  This is support for floppy drives on Sun workstations. But this
+  support does not exist at this time, so you might as well say N.
+
+Alpha system type
+CONFIG_ALPHA_JENSEN
+  Find out what type of Alpha system you are running. If you can't
+  find one of the given names, then try "Noname". For this question,
+  it suffices to give a unique prefix of the option you want to
+  choose. 
+
+Limit memory to low 16MB
+CONFIG_MAX_16M
+  This is for some buggy motherboards which cannot properly deal with
+  the memory above 16MB. If you have more than 16MB of RAM and
+  experience weird problems, you might want to try Y, everyone else
+  says N. Note for machines with more that 64MB: in order for the
+  kernel to be able to use the memory above 64MB, pass the command
+  line option "mem=XXXM" (where XXX is the memory size in
+  megabytes) to your kernel. See the documentation of your boot loader
+  (lilo or loadlin) about how to pass options to the kernel. The lilo
+  procedure is also explained in the SCSI-HOWTO, available via ftp
+  (user: anonymous) in sunsite.unc.edu:/pub/Linux/docs/HOWTO.
+  You also need at least 512kB of RAM cache if you have more than 64MB
+  of RAM.
+
+Using SRM as bootloader
+CONFIG_ALPHA_SRM
+#####
+##### Don't know what this is about.
+#####
+
+PCI bios support
+CONFIG_PCI
+  Find out whether you have a PCI motherboard. PCI is the name of a
+  bus system, i.e. the way the CPU talks to the other stuff inside
+  your box. Other bus systems are ISA, EISA, Microchannel or VESA. If
+  you have PCI, say Y, otherwise N. Note: some old PCI motherboards
+  have BIOS bugs and may crash if this is enabled (but they run fine
+  without this option). The PCI-HOWTO, available via ftp (user:
+  anonymous) in sunsite.unc.edu:/pub/Linux/docs/HOWTO, contains
+  valuable information about which PCI hardware works under Linux and
+  which doesn't.  If some of PCI devices don't work and you get a
+  warning during boot time, please follow the instructions at the top of
+  include/linux/pci.h. Information regarding the buggy PCTech RZ 1000 IDE
+  harddrive controller which is used in some PCI systems is on the WWW
+  at http://www.powerquest.com/hardware.html. (To browse the WWW, you
+  need to have access to a machine on the Internet that has one of the
+  programs lynx, netscape or Mosaic). The new IDE driver detects this
+  controller and works around this bug, though.
+
+PCI bridge optimization (experimental)
+CONFIG_PCI_OPTIMIZE
+  This can improve access times for some hardware devices under
+  certain BIOSes if your computer uses a PCI bussystem. This is
+  recommended; say Y.
+
+PCI Triton IDE Bus Master DMA support
+CONFIG_BLK_DEV_TRITON
+  If your PCI system uses an IDE harddrive (as opposed to SCSI, say)
+  and includes the Intel PCI Triton chipset (82371FB), you will want
+  to enable this option to improve performance. Read the comments at
+  the beginning of drivers/block/triton.c. The hdparm utility can be
+  gotten via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/kernel/patches/diskdrives/. It's safe to
+  say Y.
+
+System V IPC
+CONFIG_SYSVIPC
+  InterProcessCommunication is a suite of library functions and system
+  calls which let processes (= running programs) synchronize and
+  exchange information. It is generally considered to be a good thing,
+  and some programs won't run unless you enable this. You can find
+  documentation about IPC in ipc.info, which is contained in
+  sunsite.unc.edu:/pub/Linux/docs/man/info.tar.gz (available via ftp,
+  user: anonymous; extract with "tar xzvf filename"). These docs
+  are in the info format which is used to document GNU software and
+  can be read from within emacs ("Ctrl-h i") or with the program info
+  ("man info"). Enabling this option enlarges your kernel by about
+  7kB. Just say Y.
+
+Kernel support for ELF binaries
+CONFIG_BINFMT_ELF
+  ELF (Executable and Linkable Format) is a format for libraries and
+  executables used across different architectures and operating
+  systems. This option will enable your kernel to run ELF binaries and
+  enlarge it by about 2kB. ELF support under Linux is quickly
+  replacing the traditional Linux a.out format because it is portable
+  (this does *not* mean that you will be able to run executables from
+  different architectures or operating systems!) and makes building
+  run-time libraries very easy. Many new executables are distributed
+  solely in ELF format. You definitely want to say Y here. Information
+  about ELF is on the WWW at http://sable.ox.ac.uk/~jo95004/elf.html
+  (To browse the WWW, you need to have access to a machine on the
+  Internet that has one of the programs lynx, netscape or Mosaic).  If
+  you find that after upgrading to Linux kernel 1.3 and saying Y here,
+  you still can't run any ELF binaries (they just crash), then you'll
+  have to install the newest ELF runtime libraries, including ld.so
+  (available via ftp (user: anonymous) from
+  tsx-11.mit.edu:/pub/linux/packages/GCC). Also note that ELF binary
+  support was broken in kernel versions 1.3.0 - 1.3.2. Either use a
+  newer 1.3 kernel or one of the stable 1.2 versions. If you want to
+  compile this as a module ( = code which can be inserted in and
+  removed from the running kernel whenever you want), say M here and
+  read Documentation/modules.txt.
+
+Compile kernel as ELF - if your GCC is ELF-GCC
+CONFIG_KERNEL_ELF
+  The gcc version 2.7.0 and newer produces the new ELF binary format
+  as default. If you have such a compiler (try "gcc -v"), say Y
+  here, otherwise N.
+  It is possible, albeit almost pointless, to compile the kernel in
+  a.out format even if your compiler produces ELF as default. For
+  that, you would have to say N here and change the variables LD and
+  CC in the toplevel Makefile. Similarly, if your compiler produces
+  a.out by default but is able to produce ELF, you can compile the
+  kernel in ELF by saying Y here and editing the variables CC
+  and LD in the toplevel Makefile.
+
+Use -m486 flag for 486-specific optimizations
+CONFIG_M486
+  If you have a 486 as opposed to a 386 or Pentium CPU, say Y here:
+  things will be slightly faster. However, it is not required: the
+  kernel will run on all CPUs with and without this option. If you are
+  not sure, say Y; apart from enlarging your kernel by about 6 kB, it
+  won't hurt.
+
+SMP Kernel (experimental - gcc2.5.8 only: see Documentation/SMP.txt)
+CONFIG_SMP
+  This is experimental support for multiprocessor Pentium machines
+  that agree with the Intel MP v1.1 specification. It can deal with up
+  to 32 processors. You can only compile it with gcc version 2.5.8
+  ("gcc -v"). For details, see Documentation/SMP.ez in the kernel
+  source (this document has been formatted using the ez andrew word
+  processor, available via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/X11/andrew/auis63L3-wp.tgz) and
+  http://www.linux.org.uk/SMP/title.html on the WWW (to browse the
+  WWW, you need to have access to a machine on the Internet that has
+  one of the programs lynx, netscape or Mosaic). Please back up all
+  your harddrives before using kernels compiled with this option.
+
+Set version information on all symbols for modules
+CONFIG_MODVERSIONS
+  Kernel modules are pieces of code which can be inserted in or
+  removed from the running kernel, using the programs insmod and
+  rmmod. This is described in the file
+  Documentation/modules.txt. Usually, modules have to be recompiled
+  whenever you switch to a new kernel. Enabling this option allows you
+  to keep using the same modules even after compiling a new kernel;
+  this requires the program modprobe. All the software needed for
+  module support is in the modules package in
+  sunsite.unc.edu:/pub/Linux/kernel, available via ftp (user:
+  anonymous). NOTE1: if you say Y here but don't have the program
+  genksyms (which is also contained in the above mentioned modules
+  package), then the building of your kernel will fail. NOTE2: if you
+  say Y here, then you cannot say Y to the PPP driver, below; the only
+  option is to compile it as a module (PPP is a protocol for sending
+  internet traffic over telephone lines). Therefore, N is a safe bet.
+
+TCP/IP networking
+CONFIG_INET
+  These are the protocols used on the Internet and on most local
+  Ethernets. The safest is to say Y here (which will enlarge your
+  kernel by about 35 kB), since some programs (e.g. the X window
+  system) use TCP/IP even if your machine is not connected to any
+  other computer. You will get the so-called loopback device which
+  allows you to ping yourself (great fun, that!). This option is also
+  necessary if you want to use the full power of term (term is a
+  program which gives you almost full Internet connectivity if you
+  have a regular dial up shell account on some Internet connected Unix
+  computer. Read the Term-HOWTO, available via ftp (user: anonymous)
+  on sunsite.unc.edu:/pub/Linux/docs/HOWTO).  Short answer:
+  say Y.
+
+IP: forwarding/gatewaying
+CONFIG_IP_FORWARD
+  People who want to use their Linux box as the router for a local
+  network (i.e. the computer responsible for distributing Internet
+  traffic to and from the machines in the local network and the
+  subnetworks) should say Y here (thereby enlarging their kernel by
+  about 5 kB). Note that in this case, you possibly have two ethernet
+  devices in your computer: one for the "outside world" and one for
+  your local net. The kernel is not able to recognize both at boot
+  time without help; for details read the
+  Multiple-Ethernet-mini-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.  If your box is
+  connected to two networks, it may still make sense to say N here,
+  namely if you want to turn your box into a firewall protecting a
+  local network from the internet. The Firewall-HOWTO tells you how to
+  do this. If your setup is more complex, say you are connected to
+  three networks and you want to act as a firewall between two of them
+  and route traffic for the others, you need to say Y here and enable
+  IP firewalling below. If you intend to use IP masquerading (i.e. IP
+  traffic from one of the local computers and destined for an outside
+  host is changed by your box so that it appears to come from you),
+  you'll have to say Y here and also to IP firewalling and IP
+  masquerading below. You should say Y here also if you want to
+  configure your box as a SLIP (the protocol for sending internet
+  traffic over telephone lines) or PPP (a better SLIP) server for
+  other people to dial into and your box is connected to a local
+  network at the same time. You would then most likely use proxy-ARP
+  (Address Resolution Protocol), explained in the Proxy-Arp mini howto
+  on sunsite in /pub/Linux/docs/HOWTO/mini. If unsure, say N.
+
+IP: multicasting
+CONFIG_IP_MULTICAST
+  This is code for addressing several networked computers at once,
+  enlarging your kernel by about 2 kB. Some versions of gated, the
+  program which constantly updates a networked computer's routing
+  tables, require that this option be compiled in. You also need
+  multicasting if you intend to participate in the MBONE, a high
+  bandwidth network on top of the internet which carries audio and
+  video broadcasts. Information about the multicast capabilities of
+  the various network cards is contained in
+  drivers/net/README.multicast. For most people, it's safe to say N.
+
+IP: firewalling
+CONFIG_IP_FIREWALL
+  A firewall is a computer which protects a local network from the
+  rest of the internet: all traffic to and from computers on the local
+  net is inspected by the firewall first. If you want to enlarge your
+  kernel by about 2kB and configure your Linux box as a firewall for a
+  local network, say Y here. You will need to read the FIREWALL-HOWTO,
+  available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. Also, you will have to use
+  the ipfw tool from the net-tools package, available via ftp (user:
+  anonymous) from
+  ftp.linux.org.uk:/pub/linux/Networking/PROGRAMS/NetTools. It allows
+  selective blocking of internet traffic based on type, origin and
+  destination.  You need to enable IP firewalling in order to be able
+  to use IP masquerading (i.e. IP traffic from one of the local
+  computers and destined for an outside host is changed by your box so
+  that it appears to come from you). Chances are that you don't want
+  this, so say N.
+
+IP: accounting
+CONFIG_IP_ACCT
+  This keeps track of your IP network traffic and produces some
+  statistics. Usually, you only want to say Y here if your box will be
+  a router or a firewall for some local network, in which case you
+  naturally should have said Y to IP forwarding/gatewaying resp. IP
+  firewalling. The data is accessible with "cat /proc/net/ip_acct", so
+  you want to say Y to the /proc filesystem below, if you say Y
+  here. To specify what exactly should be recorded, you need the tool
+  ipfw from the net-tools package, available via ftp (user:
+  anonymous) from
+  ftp.linux.org.uk:/pub/Linux/Networking/PROGRAMS/NetTools.  Also, you
+  might want to have a look at the net-acct package, available via ftp
+  (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/system/Network/management. Most people
+  say N, however.
+
+IP: tunneling
+CONFIG_NET_IPIP
+  Tunneling means to encapsulating data of one protocol type within
+  another protocol and sending it over a channel that understands the
+  encapsulating protocol. This particular tunneling driver implements
+  encapsulation of IP within IP, which sounds kind of pointless, but
+  can be useful if you want to make your (or some other) machine
+  appear on a different network than it physically is. Enabling this
+  option will produce two modules ( = code which can be inserted in
+  and removed from the running kernel whenever you want), one
+  encapsulator and one decapsulator.  This is still alpha code, which
+  means that it need not be completely stable. You can read details in
+  drivers/net/README.tunnel. Most people can say N.
+  
+IP: firewall packet logging
+CONFIG_IP_FIREWALL_VERBOSE
+  This gives you information about what your firewall did with
+  packets it received. The information is handled by the klogd demon
+  which is responsible for kernel messages ("man klogd").
+
+IP: masquerading (ALPHA)
+CONFIG_IP_MASQUERADE
+  If one of the computers on your local network for which your Linux
+  box acts as a firewall wants to send something to the outside, your
+  box can "masquerade" as that host, i.e. it forwards the traffic to
+  the intended destination, but makes it look like it came from the
+  firewall host itself. It works both ways: if the outside host
+  answers, the firewall will silently forward the traffic to the
+  corresponding local computer. This way, the computers on your local
+  net are completely invisible to the outside world, even though they
+  can reach the outside and can be reached. This makes it possible to
+  have the computers on the local network participate on the internet
+  even if they don't have officially registered IP addresses.  (This
+  last problem can also be solved by connecting the Linux box to the
+  Internet using SLiRP [SLiRP is a SLIP/PPP emulator that works if you
+  have a regular dial up shell account on some UNIX computer; get if
+  via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/system/Network/serial/]).  Details on how
+  to set things up are contained in the IP Masquerading FAQ, available
+  via ftp (user: anonymous) from ftp.eves.com:/pub/masq/.  This is
+  ALPHA code, which means that it need not be completely stable; it
+  has nothing to do with the computer architecture of the same
+  name. If you want this, say Y.
+
+IP: multicast routing(in progress)
+CONFIG_IP_MROUTE
+  This is used if you want your machine to act as a router for IP
+  packets that have several destination addresses. Information about
+  the multicast capabilities of the various network cards is contained
+  in drivers/net/README.multicast. If you haven't heard about it, you
+  don't need it.
+
+PC/TCP compatibility mode
+CONFIG_INET_PCTCP
+  If you have been having difficulties telneting to your Linux machine
+  from a DOS system that uses (broken) PC/TCP networking software, try
+  enabling this option.  Everyone else says N.
+
+Reverse ARP
+CONFIG_INET_RARP
+  Since you asked: if there are diskless machines on your network that
+  know their hardware ethernet address but don't know their IP
+  addresses upon startup, they send out a Reverse
+  AddressResolutionProtocol request to find out their own IP
+  addresses. If you want your Linux box to be able to *answer* such
+  requests, say Y here; you'd use the program rarp ("man rarp"). If
+  you want to compile this as a module ( = code which can be inserted
+  in and removed from the running kernel whenever you want), say M
+  here and read Documentation/modules.txt.  If you don't understand a
+  word, say N and rest in peace.
+
+Assume subnets are local
+CONFIG_INET_SNARL
+  Say Y if you are on a subnetted network with all machines connected
+  by Ethernet segments only, as this option optimizes network access
+  for this special case. If there are other connections, e.g. SLIP
+  links, between machines of your IP network, say N.  If in doubt, say
+  Y.
+
+Disable NAGLE algorithm (normally enabled)
+CONFIG_TCP_NAGLE_OFF
+  The NAGLE algorithm works by requiring an acknowledgment before
+  sending small IP frames (= packets).  This keeps tiny packets from
+  telnet and rlogin from congesting Wide Area Networks.  You may wish
+  to disable it if you run your X-server from across the network, or
+  if multiple byte key sequences are delayed. Most people strongly
+  recommend to say N here, though, thereby leaving NAGLE enabled.
+
+IP: Drop source routed frames
+CONFIG_IP_NOSR
+  Usually, the originator of an IP frame (= packet) specifies only the
+  destination, and the hosts along the way do the routing, i.e. they
+  decide how to forward the frame. However, there is a feature of the
+  IP protocol that allows to specify the full route for a given frame
+  already at its origin. A frame with such a fully specified route is
+  called "source routed". The question now is whether we should honor
+  these route requests when such frames arrive, or if we should
+  drop all those frames instead. Honoring can introduce security
+  problems (and is not required by the IP specification), and hence it
+  is recommended to say Y here unless you really know what you're
+  doing.
+
+IP: Allow large windows (not recommend if <16Mb of memory)
+CONFIG_SKB_LARGE
+  This option can speed up network performance. It works by increasing
+  the size of socket buffers, thereby reducing overhead but increasing
+  memory usage. Say N if you have less than 16Mb of RAM, otherwise Y.
+  Note for machines with more that 64MB: in order for the kernel to be
+  able to use the memory above 64MB, pass the command line option
+  "mem=XXXM" (where XXX is the memory size in megabytes) to your
+  kernel. See the documentation of your boot loader (lilo or loadlin)
+  about how to pass options to the kernel. The lilo procedure is also
+  explained in the SCSI-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  You also need at least 512kB
+  of RAM cache if you have more than 64MB of RAM.
+
+The IPX protocol
+CONFIG_IPX
+  This is support for the Novell networking protocol. You need it if
+  you want to access Novell Netware servers from within the Linux DOS
+  emulator dosemu (read the DOSEMU-HOWTO, available via ftp (user:
+  anonymous) in sunsite.unc.edu:/pub/Linux/docs/HOWTO). It's very
+  limited and won't make your Linux box into a Novell server. It would
+  enlarge your kernel by about 5 kB. General information about how to
+  connect Linux, Windows machines and Macs is on the WWW at
+  http://eats.com/linux_mac_win.html (to browse the WWW, you need to
+  have access to a machine on the Internet that has one of the
+  programs lynx, netscape or Mosaic). Unless you have Novell computers
+  on your local network, say N.
+
+Appletalk DDP
+CONFIG_ATALK
+  Appletalk is the way Apple computers speak to each other on an
+  Ethernet (Apple calls it EtherTalk) network. If your linux box is
+  connected to such a network and you want to join the conversation,
+  say Y. You would have to give "appletalk" as the address family
+  argument to ifconfig ("man ifconfig") in order to do this. You will
+  also probably want to use the netatalk package so that your Linux
+  box can act as a print and file server for macs as well as access
+  appletalk printers. Check out
+  http://www.cs.dartmouth.edu/~flowerpt/projects/linux-netatalk/ on
+  the WWW for details (to browse the WWW, you need to have access to a
+  machine on the Internet that has one of the programs lynx, netscape
+  or Mosaic). I hear that the GNU boycott of Apple is over, so even
+  politically correct people are allowed to say Y here.
+
+Amateur Radio AX.25 Level 2
+CONFIG_AX25
+  This is the protocol used for computer communication over amateur
+  radio. It is either used by itself for point-to-point links, or to
+  carry other protocols such as tcp/ip. To use it, you need a device
+  that connects your Linux box to your amateur radio. You can either
+  use a low speed TNC (a Terminal Node Controller acts as a kind of
+  modem connecting your computer's serial port to your radio's
+  microphone input and speaker output) supporting the KISS protocol or
+  the much faster Ottawa PI card (to enable support for this card,
+  you'll have to answer Y to the question about ALPHA test drivers,
+  below) or the Z8530 SCC cards; the latter two require an additional
+  radio modem.  In order to use AX.25, you need to get a set of
+  supporting software tools via ftp (user: anonymous) from
+  sunacm.swan.ac.uk:/pub/misc/Linux/Radio/. A comprehensive listing of
+  all the software for Linux amateur radio users as well as
+  information about how to configure an AX.25 port is contained in the
+  HAM-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. You might also want to check
+  out the file Documentation/networking/ax25.txt in the kernel
+  source. More information about digital amateur radio in general is
+  on the WWW at
+  http://www.cis.ohio-state.edu/hypertext/faq/usenet/radio/ham-radio/digital-faq/faq.html
+  (To browse the WWW, you need to have access to a machine on the
+  Internet that has one of the programs lynx, netscape or
+  Mosaic). AX.25 support is actively being developed, so it's best to
+  get the very latest 1.3 kernel if you intend to use this.
+
+Amateur Radio NET/ROM
+CONFIG_NETROM
+  NET/ROM is a network layer protocol on top of AX.25 useful for
+  routing.  A comprehensive listing of all the software for Linux
+  amateur radio users as well as information about how to configure an
+  AX.25 port is contained in the HAM-HOWTO, available via ftp (user:
+  anonymous) in sunsite.unc.edu:/pub/Linux/docs/HOWTO. You also might
+  also want to check out the file
+  Documentation/networking/ax25.txt. More information about digital
+  amateur radio in general is on the WWW at
+  http://www.cis.ohio-state.edu/hypertext/faq/usenet/radio/ham-radio/digital-faq/faq.html
+  (To browse the WWW, you need to have access to a machine on the
+  Internet that has one of the programs lynx, netscape or
+  Mosaic). Amateur radio support is actively being developed, so you
+  might want to get the very latest 1.3 kernel if you intend to use
+  this.
+
+Kernel/User network link driver(ALPHA)
+CONFIG_NETLINK
+  This driver will allow for two-way communication between certain
+  parts of the kernel or modules and user processes; the user
+  processes will be able to read from and write to special files in
+  the /dev directory having major mode 18. So far, the kernel uses it
+  to publish some network related information if you enable "Routing
+  messages", below. Say Y if you want to experiment with it; this is
+  ALPHA code, which means that it need not be completely stable; it
+  has nothing to do with the computer architecture of the same name.
+
+Routing messages
+CONFIG_RTNETLINK
+  If you enable this and create a special file with major number 18
+  and minor number 0 with mknod ("man mknod"), you can read some
+  network related information from that file. Everything you write to
+  that file will be discarded. Say Y, because otherwise the network
+  link driver is pointless.
+
+SCSI support?
+CONFIG_SCSI
+  If you want to use an SCSI harddisk, SCSI tapedrive, SCSI CDROM or
+  any other SCSI device under Linux, say Y and make sure that you know
+  the name of your SCSI host adaptor (the card inside your computer
+  that "speaks" the SCSI protocol), because you will be asked for
+  it. And read the SCSI-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. This driver is also available
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt.
+
+SCSI disk support
+CONFIG_BLK_DEV_SD
+  If you want to use an SCSI harddisk under Linux, say Y and read the
+  SCSI-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. This is NOT for SCSI
+  CDROMs. This driver is also available as a module ( = code which can
+  be inserted in and removed from the running kernel whenever you
+  want). If you want to compile it as a module, say M here and read
+  Documentation/modules.txt.
+  
+SCSI tape support
+CONFIG_CHR_DEV_ST
+  If you want to use an SCSI tapedrive under Linux, say Y and read the
+  SCSI-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO and drivers/scsi/README.st in
+  the kernel source. This is NOT for SCSI CDROMs. This driver is also
+  available as a module ( = code which can be inserted in and removed
+  from the running kernel whenever you want). If you want to compile
+  it as a module, say M here and read Documentation/modules.txt.
+
+SCSI CDROM support
+CONFIG_BLK_DEV_SR
+  If you want to use an SCSI CDROM under Linux, say Y and read the
+  SCSI-HOWTO and the CDROM-HOWTO from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. Also make sure to enable the
+  ISO9660 filesystem later. This driver is also available as a module
+  ( = code which can be inserted in and removed from the running
+  kernel whenever you want). If you want to compile it as a module,
+  say M here and read Documentation/modules.txt.
+
+SCSI generic support
+CONFIG_CHR_DEV_SG
+  If you want to use SCSI scanners, synthesizers or CD-writers or just
+  about anything having "SCSI" in its name, say Y here. Those won't be
+  supported by the kernel directly, so you need some additional
+  software which knows how to talk to these things using the SCSI
+  protocol. Chances are that you'll have to write that software
+  yourself, so have a look at the SCSI-HOWTO and at the
+  SCSI-Programming-HOWTO, both available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If you want to compile this
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want), say M here and read
+  Documentation/modules.txt.
+
+Probe all LUNs on each SCSI device
+CONFIG_SCSI_MULTI_LUN
+  If you have an SCSI device that supports more than one LUN (Logical
+  Unit Number), e.g. a CD jukebox, you should say Y here so that all
+  will be found by the SCSI driver. An SCSI device with multiple LUNs
+  acts logically like multiple SCSI devices. The vast majority of SCSI
+  devices have only one LUN, and so most people can say N here.
+
+Verbose SCSI error reporting (kernel size +=12K)
+CONFIG_SCSI_CONSTANTS
+  The error messages regarding your SCSI hardware will be easier to
+  understand if you enable this; it will enlarge your kernel by about
+  12KB. If in doubt, say Y.
+
+Adaptec AHA152X support
+CONFIG_SCSI_AHA152X
+  This is support for an SCSI host adaptor. It is explained in section
+  3.3 of the SCSI-HOWTO, available via ftp (user: anonymous) at
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If it doesn't work out of the
+  box, you may have to change some settings in drivers/scsi/aha152x.h.
+  This driver is also available as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you
+  want). If you want to compile it as a module, say M here and read
+  Documentation/modules.txt.
+
+Adaptec AHA1542 support
+CONFIG_SCSI_AHA1542
+  This is support for an SCSI host adaptor. It is explained in section
+  3.4 of the SCSI-HOWTO, available via ftp (user: anonymous) at
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  If it doesn't work out of
+  the box, you may have to change some settings in
+  drivers/scsi/aha1542.h.  If you want to compile this as a module ( =
+  code which can be inserted in and removed from the running kernel
+  whenever you want), say M here and read Documentation/modules.txt.
+ 
+Adaptec AHA1740 support
+CONFIG_SCSI_AHA1740
+  This is support for an SCSI host adaptor. It is explained in section
+  3.5 of the SCSI-HOWTO, available via ftp (user: anonymous) at
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  If it doesn't work out of
+  the box, you may have to change some settings in
+  drivers/scsi/aha1740.h. This driver is also available as a module (
+  = code which can be inserted in and removed from the running kernel
+  whenever you want). If you want to compile it as a module, say M
+  here and read Documentation/modules.txt.
+
+Adaptec AHA274X/284X/294X support
+CONFIG_SCSI_AIC7XXX
+  Information about this SCSI host adaptor is contained in
+  drivers/scsi/README.aic7xxx and in the SCSI-HOWTO, available via ftp
+  (user: anonymous) at sunsite.unc.edu:/pub/Linux/docs/HOWTO. If it
+  doesn't work out of the box, you may have to change some settings in
+  drivers/scsi/aic7xxx.h.  If you want to compile this as a module ( =
+  code which can be inserted in and removed from the running kernel
+  whenever you want), say M here and read Documentation/modules.txt.
+
+BusLogic SCSI support
+CONFIG_SCSI_BUSLOGIC
+  This is support for the BusLogic family of SCSI host adaptors.  If
+  it doesn't work out of the box, you may have to change some settings
+  in drivers/scsi/buslogic.h. Please read the SCSI-HOWTO, available
+  via ftp (user: anonymous) at
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. This driver is also available
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt.
+ 
+EATA-DMA (DPT,NEC&ATT for ISA,EISA,PCI) support
+CONFIG_SCSI_EATA_DMA
+  This is support for an SCSI host adaptor. Please read the
+  SCSI-HOWTO, available via ftp (user: anonymous) at
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If it doesn't work out of the
+  box, you may have to change some settings in
+  drivers/scsi/eata_dma.h. This driver is also available as a module (
+  = code which can be inserted in and removed from the running kernel
+  whenever you want). If you want to compile it as a module, say M
+  here and read Documentation/modules.txt.
+
+EATA-PIO (old DPT PM2001, PM2012A) support
+CONFIG_SCSI_EATA_PIO
+  This driver supports all EATA-PIO SCSI host adaptors. You might want
+  to have a look at the settings in drivers/scsi/eata_pio.h and at the
+  SCSI-HOWTO, available via ftp (user: anonymous) at
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  If you want to compile this
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want), say M here and read
+  Documentation/modules.txt.
+
+UltraStor 14F/34F support
+CONFIG_SCSI_U14_34F
+  This is support for the UltraStor 14F, 24F and 34F SCSI-2 host
+  adaptor family. The source at drivers/scsi/u14-34f.c contains some
+  information about this hardware. If the driver doesn't work out of
+  the box, you may have to change some settings in
+  drivers/scsi/u14-34f.h. Read the SCSI-HOWTO, available via ftp
+  (user: anonymous) at sunsite.unc.edu:/pub/Linux/docs/HOWTO. Note
+  that there is also another driver for the same hardware: "UltraStor
+  SCSI support", below. You should only enable one of them. This
+  driver is also available as a module ( = code which can be inserted
+  in and removed from the running kernel whenever you want). If you
+  want to compile it as a module, say M here and read
+  Documentation/modules.txt.
+
+Future Domain 16xx SCSI support
+CONFIG_SCSI_FUTURE_DOMAIN
+  This is support for an SCSI host adaptor. It is explained in section
+  3.7 of the SCSI-HOWTO, available via ftp (user: anonymous) at
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  If it doesn't work out of
+  the box, you may have to change some settings in
+  drivers/scsi/fdomain.h. This driver is also available as a module (
+  = code which can be inserted in and removed from the running kernel
+  whenever you want). If you want to compile it as a module, say M
+  here and read Documentation/modules.txt.
+
+Generic NCR5380 SCSI support
+CONFIG_SCSI_GENERIC_NCR5380
+  This is the generic NCR family of SCSI controllers, not to be
+  confused with the NCR 53c7 or 8xx controllers. It is explained in
+  section 3.8 of the SCSI-HOWTO, available via ftp (user: anonymous)
+  at sunsite.unc.edu:/pub/Linux/docs/HOWTO.  If it doesn't work out of
+  the box, you may have to change some settings in
+  drivers/scsi/g_NCR5380.h. This driver is also available as a module
+  ( = code which can be inserted in and removed from the running
+  kernel whenever you want). If you want to compile it as a module,
+  say M here and read Documentation/modules.txt.
+ 
+NCR53c7,8xx SCSI support
+CONFIG_SCSI_NCR53C7xx
+  This is the 53c7 and 8xx NCR family of SCSI controllers, not to be
+  confused with the NCR 5380 controllers. It is explained in section
+  3.8 of the SCSI-HOWTO, available via ftp (user: anonymous) at
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If it doesn't work out of the
+  box, you may have to change some settings in
+  drivers/scsi/53c7,8xx.h. This driver is also available as a module (
+  = code which can be inserted in and removed from the running kernel
+  whenever you want). If you want to compile it as a module, say M
+  here and read Documentation/modules.txt.
+ 
+Always IN2000 SCSI support (test release)
+CONFIG_SCSI_IN2000
+  Believe it or not, there is an SCSI host adaptor of that name. It is
+  explained in section 3.6 of the SCSI-HOWTO, available via ftp (user:
+  anonymous) at sunsite.unc.edu:/pub/Linux/docs/HOWTO. If it doesn't
+  work out of the box, you may have to change some settings in
+  drivers/scsi/inn2000.h.  If you want to compile this as a module ( =
+  code which can be inserted in and removed from the running kernel
+  whenever you want), say M here and read Documentation/modules.txt.
+
+PAS16 SCSI support
+CONFIG_SCSI_PAS16
+  This is support for an SCSI host adaptor. It is explained in section
+  3.10 of the SCSI-HOWTO, available via ftp (user: anonymous) at
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If it doesn't work out of the
+  box, you may have to change some settings in drivers/scsi/pas16.h.
+ 
+QLOGIC SCSI support
+CONFIG_SCSI_QLOGIC
+  Information about this SCSI driver is contained in
+  drivers/scsi/README.qlogic. You should also read the SCSI-HOWTO,
+  available via ftp (user: anonymous) at
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. This driver is also available
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt.
+
+Seagate ST-02 and Future Domain TMC-8xx SCSI support
+CONFIG_SCSI_SEAGATE
+  These are 8-bit SCSI controller; the ST-01 is also supported by this
+  driver.  It is explained in section 3.9 of the SCSI-HOWTO, available
+  via ftp (user: anonymous) at
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If it doesn't work out of the
+  box, you may have to change some settings in drivers/scsi/seagate.h.
+  This driver is also available as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you
+  want). If you want to compile it as a module, say M here and read
+  Documentation/modules.txt.
+
+Trantor T128/T128F/T228 SCSI support
+CONFIG_SCSI_T128
+  This is support for an SCSI host adaptor. It is explained in section
+  3.11 of the SCSI-HOWTO, available via ftp (user: anonymous) at
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  If it doesn't work out of
+  the box, you may have to change some settings in
+  drivers/scsi/t128.h. Note that Trantor was recently purchased by
+  Adaptec, and some former Trantor products are being sold under the
+  Adaptec name.
+
+UltraStor SCSI support
+CONFIG_SCSI_ULTRASTOR
+  This is support for the UltraStor 14F, 24F and 34F SCSI-2 host
+  adaptor family. This driver is explained in section 3.12 of the
+  SCSI-HOWTO, available via ftp (user: anonymous) at
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If it doesn't work out of the
+  box, you may have to change some settings in
+  drivers/scsi/ultrastor.h. If you want to compile this as a module (
+  = code which can be inserted in and removed from the running kernel
+  whenever you want), say M here and read Documentation/modules.txt.
+  Note that there is also another driver for the same hardware:
+  "UltraStor 14F/34F support", above. You should only enable one of
+  them.
+ 
+7000FASST SCSI support
+CONFIG_SCSI_7000FASST
+  This driver supports the Western Digital 7000 SCSI host adaptor.
+  Some information is in the source: drivers/scsi/wd7000.c.  This
+  driver is also available as a module ( = code which can be inserted
+  in and removed from the running kernel whenever you want). If you
+  want to compile it as a module, say M here and read
+  Documentation/modules.txt.
+
+EATA ISA/EISA (DPT PM2011/021/012/022/122/322) support
+CONFIG_SCSI_EATA
+  This driver supports all the DPT SCSI host adapters, such as
+  PM2011B/9X, PM2021A/9X, PM2012A, PM1012B, PM2022A/9X, PM2122A/9X and
+  PM2322A/9X. Note that the PM2001 is not supported by this
+  driver. You want to read the start of drivers/scsi/eata.c and the
+  SCSI-HOWTO, available via ftp (user: anonymous) at
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  If you want to compile this
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want), say M here and read
+  Documentation/modules.txt.
+
+Network device support?
+CONFIG_NETDEVICES
+  You can say N here in case you don't intend to connect to any other
+  computer at all or all your connections will be either via UUCP
+  (UUCP is a protocol to forward mail and news between unix hosts over
+  telephone lines; read the UUCP-HOWTO, available via ftp (user:
+  anonymous) in sunsite.unc.edu:/pub/Linux/docs/HOWTO) or dialing up a
+  shell account or a BBS, even using term (term is a program which
+  gives you almost full Internet connectivity if you have a regular
+  dial up shell account on some Internet connected Unix computer. Read
+  the Term-HOWTO).  You'll have to say Y if your computer contains a
+  network card that you want to use under linux (make sure you know
+  its name because you will be asked for it and read the
+  Ethernet-HOWTO; also, if you plan to use more than one network card
+  under linux, read the Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini) or if you want to use
+  SLIP (Serial Line Internet Protocol is the protocol used to send
+  Internet traffic over telephone lines or nullmodem cables) or CSLIP
+  (compressed SLIP) or PPP (better and newer variant of SLIP) or PLIP
+  (Parallel Line Internet Protocol is mainly used to create a mini
+  network by connecting the parallel ports of two local machines) or
+  AX.25/KISS (protocol for sending internet traffic over radio links).
+  Make sure to read the NET-2-HOWTO.  Eventually, you will have to
+  read Olaf Kirch's excellent book "Network Administrator's Guide", to
+  be found in sunsite.unc.edu:/pub/Linux/docs/LDP.  If unsure, say Y.
+
+Dummy net driver support
+CONFIG_DUMMY
+  This is essentially a loopback device (i.e. traffic you send to this
+  device is immediately returned back to you) with a configurable IP
+  address different from the usual 127.0.0.1. Can be used to give you
+  more than one IP address or make your currently inactive SLIP
+  address seem like a real address. If you use SLIP or PPP, you might
+  want to enable it. Read about it in the Network Administrator's
+  Guide, available via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/docs/LDP. Since this thing comes often
+  handy, the default is Y. It won't enlarge your kernel either. What a
+  deal.  If you want to compile this as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you want),
+  say M here and read Documentation/modules.txt.
+  
+SLIP (serial line) support
+CONFIG_SLIP
+  Say Y if you intend to use SLIP or CSLIP (compressed SLIP) to
+  connect to your Internet service provider or to connect to some
+  other local Unix box or if you want to configure your Linux box as a
+  Slip/CSlip server for other people to dial in.  SLIP (Serial Line
+  Internet Protocol) is the protocol used to send Internet traffic
+  over telephone lines or serial cables (also known as
+  nullmodems). Normally, your access provider has to support SLIP in
+  order for you to be able to use it, but there is now a SLIP emulator
+  called SLiRP around (available via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/system/Network/serial/) which allows you
+  to use SLIP over a regular dial up shell connection. If you plan to
+  use SLiRP, make sure to say Y to CSLIP, below. The NET-2-HOWTO,
+  available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO, explains how to configure
+  SLIP. Note that you don't need this option if you just want to run
+  term (term is a program which gives you almost full Internet
+  connectivity if you have a regular dial up shell account on some
+  Internet connected Unix computer. Read the Term-HOWTO). SLIP support
+  will enlarge your kernel by about 4kB. If unsure, say N.  If you
+  want to compile this as a module ( = code which can be inserted in
+  and removed from the running kernel whenever you want), say M here
+  and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt.
+  
+CSLIP compressed headers
+CONFIG_SLIP_COMPRESSED
+  This protocol is faster than SLIP because it uses compression on the
+  TCP/IP headers (not on the data itself), but it has to be supported
+  on both ends. Ask your access provider if you are not sure and say
+  Y, just in case. You will still be able to use plain SLIP. If you
+  plan to use SLiRP, the SLIP emulator (available via ftp (user:
+  anonymous) from sunsite.unc.edu:/pub/Linux/system/Network/serial/)
+  which allows you to use SLIP over a regular dial up shell
+  connection, you definitely want to say Y here. The NET-2-HOWTO,
+  available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO, explains how to configure
+  CSLIP. This won't enlarge your kernel.
+
+PPP (point-to-point) support
+CONFIG_PPP
+  PPP (Point to Point Protocol) is a newer and better SLIP. It serves
+  the same purpose: sending Internet traffic over telephone (and other
+  serial) lines.  Ask your access provider if they support it, because
+  otherwise you can't use it (not quite true any more: the free
+  program SLiRP can emulate a PPP line if you just have a regular dial
+  up shell account on some UNIX computer; get it via ftp (user:
+  anonymous) from sunsite.unc.edu:/pub/Linux/system/Network/serial/).
+  To use PPP, you need an additional program called pppd as described
+  in Documentation/networking/ppp.txt and in the PPP-HOWTO, available
+  from sunsite.unc.edu:/pub/Linux/docs/HOWTO. Note that you don't need
+  this option if you just want to run term (term is a program which
+  gives you almost full Internet connectivity if you have a regular
+  dial up shell account on some Internet connected UNIX computer. Read
+  the Term-HOWTO). The PPP option enlarges your kernel by about
+  16kB. This driver is also available as a module ( = code which can
+  be inserted in and removed from the running kernel whenever you
+  want). If you said Y to "Version information on all symbols" above,
+  then you cannot compile the PPP driver into the kernel; you can only
+  compile it as a module. If you want to compile it as a module, say M
+  here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If unsure, say N.
+
+16 channels instead of 4 
+CONFIG_PPP_LOTS
+  Saying Y here will allow you to have up to 16 PPP connections
+  running in parallel. This is mainly useful if you intend your linux
+  box to act as a dial-in PPP server. Most people can say N.
+
+Z8530 SCC kiss emulation driver for AX.2
+CONFIG_SCC
+  These cards are used to connect your Linux box to an amateur radio
+  and communicate with other computers.  If you want to use this, read
+  drivers/char/README.scc and the HAM-HOWTO, available available via
+  ftp (user: anonymous) at sunsite.unc.edu:/pub/Linux/docs/HOWTO.
+
+PLIP (parallel port) support
+CONFIG_PLIP
+  PLIP (Parallel Line Internet Protocol) is mainly used to create a
+  mini network consisting of two local machines. The parallel ports
+  are connected using a "null printer" or "Turbo Laplink" cable (you
+  can find the wiring in drivers/net/README?.plip).  This works also
+  if one of the two machines runs DOS and has some PLIP software
+  installed, e.g. NCSA telnet.  If you want to use this, say Y and
+  read the NET-2-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  You need to say N or M to
+  "parallel printer support" below if you say Y here. Also, you might
+  have to edit the file drivers/net/Space.c and adjust the parallel
+  port's IRQ (there is a small number of Interrupt ReQuest lines in
+  your computer that are used by the periphery to gain the CPU's
+  attention - often a source of trouble if two different devices are
+  mistakenly configured to use the same IRQ. If you have the /proc
+  filesystem installed (see below), you can say "cat /proc/interrupts"
+  to see what the different IRQs are currently used for.)  This option
+  enlarges your kernel by about 8kB. If unsure, say N.  If you want to
+  compile this as a module ( = code which can be inserted in and
+  removed from the running kernel whenever you want), say M here and
+  read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you want to use both a
+  parallel printer and PLIP, it is best to compile both drivers as
+  modules.
+
+EQL (serial line load balancing) support
+CONFIG_EQUALIZER
+  If you have two serial connections to some other computer (this
+  usually requires two modems and two telephone lines) and you use
+  SLIP (= the protocol for sending internet traffic over telephone
+  lines) or PPP (= a better SLIP) on them, you can make them behave
+  like one double speed connection using this driver. Naturally, this
+  has to be supported at the other end as well, either with a similar
+  EQL Linux driver or with a Livingston Portmaster 2e. Say Y if you
+  want this and read drivers/net/README.eql. This driver is also
+  available as a module ( = code which can be inserted in and removed
+  from the running kernel whenever you want). If you want to compile
+  it as a module, say M here and read Documentation/modules.txt.
+
+Sun LANCE Ethernet support
+CONFIG_SUN_LANCE
+  This is support for a certain type of Ethernet cards on Sun
+  workstations. The driver does not yet exist, so you might as well
+  say N.
+
+Sun Intel Ethernet support
+CONFIG_SUN_INTEL
+  This is support for a certain type of Ethernet cards on Sun
+  workstations. The driver does not yet exist, so you might as well
+  say N.
+
+Do you want to be offered ALPHA test drivers
+CONFIG_NET_ALPHA
+  ALPHA means that they might be unstable and buggy; it has nothing to
+  do with the computer architecture of the same name. If you don't
+  have a network card in your computer, say N; otherwise say Y,
+  because in most circumstances buggy support for your hardware is
+  still better than none at all (in particular, it enables you to test
+  and improve the drivers). Note that the answer to this question
+  doesn't directly affect the kernel: saying N will just cause this
+  configure script to present you with less choices. If you plan to
+  use more than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available via ftp (user anonymous)
+  from sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+Western Digital/SMC cards
+CONFIG_NET_VENDOR_SMC
+  If you have a network (ethernet) card belonging to this class, say Y
+  and read the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If you plan to use more than
+  one network card under linux, read the Multiple-Ethernet-mini-HOWTO,
+  available from sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini. Note that
+  the answer to this question doesn't directly affect the kernel:
+  saying N will just cause this configure script to skip all the
+  questions about Western Digital cards. If you say Y, you will be
+  asked for your specific card in the following questions. If you plan
+  to use more than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+WD80*3 support
+CONFIG_WD80x3
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. This driver is also available
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+SMC Ultra support
+CONFIG_ULTRA
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  This driver is also
+  available as a module ( = code which can be inserted in and removed
+  from the running kernel whenever you want). If you want to compile
+  it as a module, say M here and read Documentation/modules.txt as
+  well as Documentation/networking/net-modules.txt. If you plan to use
+  more than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+AMD LANCE and PCnet (AT1500 and NE2100) support
+CONFIG_LANCE
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If you plan to use more than
+  one network card under linux, read the Multiple-Ethernet-mini-HOWTO,
+  available from sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+3COM cards
+CONFIG_NET_VENDOR_3COM
+  If you have a network (ethernet) card belonging to this class, say Y
+  and read the Ethernet-HOWTO, available via ftp (user: anonymous)
+  in sunsite.unc.edu:/pub/Linux/docs/HOWTO. Note that the answer to
+  this question doesn't directly affect the kernel: saying N will just
+  cause this configure script to skip all the questions about 3COM
+  cards. If you say Y, you will be asked for your specific card in the
+  following questions. If you plan to use more than one network card
+  under linux, read the Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini. 
+
+3c501 support
+CONFIG_EL1
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  Also, consider buying a new
+  card, since the 3c501 is buggy and obsolete and the driver is
+  unsupported. This driver is also available as a module ( = code
+  which can be inserted in and removed from the running kernel
+  whenever you want). If you want to compile it as a module, say M
+  here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+3c503 support
+CONFIG_EL2
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. This driver is also available
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+3c505 support
+CONFIG_ELPLUS
+  Information about this network (ethernet) card can be found in
+  drivers/net/README.3c505. If you have a card of this type, say Y and
+  read the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  If you want to compile this
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want), say M here and read
+  Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+3c507 support
+CONFIG_EL16
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. This driver is also available
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+3c509/3c579 support
+CONFIG_EL3
+  If you have a network (ethernet) card belonging to the 3Com
+  EtherLinkIII series, say Y and read the Ethernet-HOWTO, available
+  via ftp (user: anonymous) in sunsite.unc.edu:/pub/Linux/docs/HOWTO.
+  If you want to compile this as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you want),
+  say M here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+Other ISA cards
+CONFIG_NET_ISA
+  If your network (ethernet) card hasn't been mentioned yet and its
+  bussystem (that's the way the components of the card talk to each
+  other) is ISA (as opposed to EISA, VLB or PCI), say Y. Make sure you
+  know the name of your card. Read the Ethernet-HOWTO, available via
+  ftp (user: anonymous) in sunsite.unc.edu:/pub/Linux/docs/HOWTO. If
+  unsure, say Y.  Note that the answer to this question doesn't
+  directly affect the kernel: saying N will just cause this configure
+  script to skip all the remaining ISA network card questions.  If you
+  say Y, you will be asked for your specific card in the following
+  questions.  If you plan to use more than one network card under
+  linux, read the Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+Arcnet support
+CONFIG_ARCNET
+  If you have a network card of this type, say Y and check out the
+  beautiful poetry in Documentation/networking/arcnet.txt in the
+  kernel source. If you get this driver to work or not, either way,
+  send mail to the author. You might also want to have a look at the
+  Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO (even though arcnet is no true
+  ethernet). This driver is also available as a module ( = code which
+  can be inserted in and removed from the running kernel whenever you
+  want). If you want to compile it as a module, say M here and read
+  Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+Cabletron E21xx support
+CONFIG_E2100
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. This driver is also available
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+DEPCA support
+CONFIG_DEPCA
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO as well as
+  drivers/net/depca.c.  If you want to compile this as a module ( =
+  code which can be inserted in and removed from the running kernel
+  whenever you want), say M here and read Documentation/modules.txt as
+  well as Documentation/networking/net-modules.txt. If you plan to use
+  more than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+EtherWorks 3 support
+CONFIG_EWRK3
+  This driver supports the DE203, DE204 and DE205 network (ethernet)
+  cards. If this is for you, say Y and read drivers/net/README.ewrk3
+  in the kernel source as well as the Ethernet-HOWTO, available via
+  ftp (user: anonymous) from sunsite.unc.edu:/pub/Linux/docs/HOWTO.
+  If you want to compile this as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you want),
+  say M here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+SEEQ8005 support
+CONFIG_SEEQ8005
+  This is a driver for the SEEQ 8005 network (ethernet) card. If this
+  is for you, read the Ethernet-HOWTO, available via ftp (user:
+  anonymous) from sunsite.unc.edu:/pub/Linux/docs/HOWTO. If you plan
+  to use more than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+AT1700 support
+CONFIG_AT1700
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. This driver is also available
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+EtherExpressPro support
+CONFIG_EEXPRESS_PRO
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. This driver is also available
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+EtherExpress support
+CONFIG_EEXPRESS
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. Note that the Intel
+  EtherExpress card is generally regarded to be a very poor choice and
+  the driver is not very reliable. If you want to compile this as a
+  module ( = code which can be inserted in and removed from the
+  running kernel whenever you want), say M here and read
+  Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+NI5210 support
+CONFIG_NI52
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If you plan to use more than
+  one network card under linux, read the Multiple-Ethernet-mini-HOWTO,
+  available from sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+NI6510 support
+CONFIG_NI65
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If you plan to use more than
+  one network card under linux, read the Multiple-Ethernet-mini-HOWTO,
+  available from sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+Ottawa PI and PI/2 support
+CONFIG_PI
+  This is a driver for the Ottawa Amateur Radio Club PI and PI2 cards,
+  which are commonly used to send internet traffic over radio. More
+  information about these cards is on the WWW at
+  http://hydra.carleton.ca/info/pi2.html (To browse the WWW, you need
+  to have access to a machine on the Internet that has one of the
+  programs lynx, netscape or Mosaic). If you have one of these cards,
+  you can say Y here and should read the HAM-HOWTO, available via ftp
+  (user: anonymous) in sunsite.unc.edu:/pub/Linux/docs/HOWTO. Also,
+  you should have said Y to "AX.25 support" above, because AX.25 is
+  the protocol used for digital traffic over radio links.
+
+WaveLAN support
+CONFIG_WAVELAN
+  These are cards for wireless ethernet-like networking. Supported are
+  AT&T GIS and NCR WaveLAN cards. If you want to use a card of this
+  type under Linux, say Y and read the Ethernet-HOWTO, available via
+  ftp (user: anonymous) in sunsite.unc.edu:/pub/Linux/docs/HOWTO. Some
+  more specific information is contained in
+  drivers/net/README.wavelan. This driver is also available as a
+  module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+HP PCLAN+ (27247B and 27252A) support
+CONFIG_HPLAN_PLUS
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. This driver is also available
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+HP PCLAN (27245 and other 27xxx series) support
+CONFIG_HPLAN
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. This driver is also available
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+HP 10/100VG PCLAN (ISA, EISA, PCI) support
+CONFIG_HP100
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  If you want to compile this
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want), say M here and read
+  Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+NE2000/NE1000 support
+CONFIG_NE2000
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. This driver is also available
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+SK_G16 support
+CONFIG_SK_G16
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If you plan to use more than
+  one network card under linux, read the Multiple-Ethernet-mini-HOWTO,
+  available from sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+EISA, VLB, PCI and on board controllers
+CONFIG_NET_EISA
+  This is another class of network cards which attach directly to the
+  bus. If you have one of those, say Y and read the Ethernet-HOWTO,
+  available via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO; if you are unsure, say
+  Y. Note that the answer to this question doesn't directly affect the
+  kernel: saying N will just cause this configure script to skip all
+  the questions about this class of network cards. If you say Y, you
+  will be asked for your specific card in the following questions.  If
+  you plan to use more than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+Ansel Communications EISA 3200 support
+CONFIG_AC3200
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. This driver is also available
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+Apricot Xen-II on board ethernet
+CONFIG_APRICOT
+  If you have a network (ethernet) controller of this type, say Y and
+  read the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  If you want to compile this
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want), say M here and read
+  Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+DE425, DE434, DE435 support
+CONFIG_DE4X5
+  If you have a network (ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  More specific information is
+  contained in drivers/net/README.de4x5. This driver is also available
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+Zenith Z-Note support
+CONFIG_ZNET
+  The Zenith Z-Note notebook computer has a built-in network
+  (ethernet) card, and this is the Linux driver for it. Note that the
+  IBM Thinkpad 300 is compatible with the Z-Note and is also supported
+  by this driver. Read the Ethernet-HOWTO, available via ftp (user:
+  anonymous) in sunsite.unc.edu:/pub/Linux/docs/HOWTO.
+
+Pocket and portable adaptors
+CONFIG_NET_POCKET
+  Cute little network (ethernet) devices which attach to your parallel
+  port ("pocket adaptors"). If you have one of those, say Y and read
+  the Ethernet-HOWTO, available via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If you plan to use more than
+#####
+##### What should you say to CONFIG_PRINTER in order to use these?
+#####
+  one network card under linux, read the Multiple-Ethernet-mini-HOWTO,
+  available from sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini. If you
+  want to plug a network card into the PCMCIA slot of your laptop
+  instead (PCMCIA is the standard for credit card size extension cards
+  used by all modern laptops), look in
+  cb-iris.stanford.edu:/pub/pcmcia and say N here.  Note that the
+  answer to this question doesn't directly affect the kernel: saying N
+  will just cause this configure script to skip all the questions
+  about this class of network devices.  If you say Y, you will be
+  asked for your specific device in the following questions.  If you
+  plan to use more than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+AT-LAN-TEC/RealTek pocket adaptor support
+CONFIG_ATP
+  This is a network (ethernet) device which attaches to your parallel
+  port. Read drivers/net/atp.c as well as the Ethernet-HOWTO,
+  available via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO if you want to use this. If
+  you plan to use more than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+D-Link DE600 pocket adaptor support
+CONFIG_DE600
+  This is a network (ethernet) device which attaches to your parallel
+  port. Read drivers/net/README.DLINK as well as the Ethernet-HOWTO,
+  available via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO if you want to use this.  If
+  you want to compile this as a module ( = code which can be inserted
+  in and removed from the running kernel whenever you want), say M
+  here and read Documentation/modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+
+D-Link DE620 pocket adaptor support
+CONFIG_DE620
+  This is a network (ethernet) device which attaches to your parallel
+  port. Read drivers/net/README.DLINK as well as the Ethernet-HOWTO,
+  available via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO if you want to use this.  If
+  you want to compile this as a module ( = code which can be inserted
+  in and removed from the running kernel whenever you want), say M
+  here and read Documentation/modules.txt. If you plan to use more
+  than one network card under linux, read the
+  Multiple-Ethernet-mini-HOWTO, available from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
+ 
+Token Ring driver support
+CONFIG_TR
+  Token Ring is IBM's way of communication on a local network; the
+  rest of the world uses ethernet. If you are connected to a token
+  ring network and want to use your Token Ring card under Linux, say Y.
+  Most people can say N here.
+
+IBM Tropic chipset based adaptor support
+CONFIG_IBMTR
+  This is support for all IBM Token Ring cards that don't use DMA. If
+  you have such a beast, say Y, otherwise N. Warning: this driver will
+  almost definitely fail if more than one active Token Ring card is
+  present. This driver is also available as a module ( = code which
+  can be inserted in and removed from the running kernel whenever you
+  want). If you want to compile it as a module, say M here and read
+  Documentation/modules.txt.
+
+Support non-SCSI/IDE/ATAPI drives
+CONFIG_CD_NO_IDESCSI
+  If you have a CDROM drive that is neither SCSI nor IDE/ATAPI, say Y
+  here, otherwise N. Read the CDROM-HOWTO, available via ftp (user:
+  anonymous) from sunsite.unc.edu:/pub/Linux/docs/HOWTO. Note that the
+  answer to this question doesn't directly affect the kernel: saying N
+  will just cause this configure script to skip all the questions
+  about these CDROM drives. If you are unsure what you have, say Y and
+  find out whether you have one of the following drives.
+
+Sony CDU31A/CDU33A CDROM driver support
+CONFIG_CDU31A
+  These CDROM drives have a spring-pop-out caddyless drawer, and a
+  rectangular green LED centered beneath it. If you have one of these,
+  say Y here and also to "ISO9660 cdrom filesystem support"
+  below. Read the CDROM-HOWTO, available via ftp (user: anonymous)
+  from sunsite.unc.edu:/pub/Linux/docs/HOWTO. Also, read
+  Documentation/cdrom/cdu31a. NOTE: this CDROM drive won't be
+  auto detected by the kernel at boot time; you have to provide its
+  specifications as an option to the kernel as described in the above
+  README.  See the documentation of your boot loader (lilo or loadlin)
+  about how to pass options to the kernel. The lilo procedure is also
+  explained in the SCSI-HOWTO. This driver is also available as a
+  module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt. If unsure,
+  say N.
+
+Standard Mitsumi [no XA/Multisession] CDROM support
+CONFIG_MCD
+  This is a very common CDROM drive. In some models, the whole drive
+  chassis slides out for cd insertion.  Later models use a motorized
+  tray type mechanism. If you have one of these CDROM drives, say Y
+  here and also to "ISO9660 cdrom filesystem support" below. Read the,
+  available via ftp (user: anonymous) CDROM-HOWTO from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. Note that this driver does
+  not support XA or MultiSession CDs (PhotoCDs). There's a new
+  experimental driver in the 1.3 kernels that can do this, but cannot
+  play your music CDs. If you want that one, say N here. If the driver
+  doesn't work out of the box, you might want to have a look at
+  linux/include/linux/mcd.h. If your Mitsumi CDROM drive is of type
+  IDE/ATAPI, then you have to say N here and should have said Y to
+  "Support for IDE/ATAPI CDROMs" above. This driver is also available
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want). If you want to compile it as a
+  module, say M here and read Documentation/modules.txt. If unsure,
+  say N now.
+
+Experimental Mitsumi [XA/MultiSession, no Audio] support
+CONFIG_MCDX
+  Use this driver if you want to be able to read XA or MultiSession
+  CDs (PhotoCDs) as well as ordinary CDs with your Mitsumi CDROM
+  drive. In addition, this driver uses much less kernel memory than
+  the old one, if that is a concern. However, you won't be able to
+  play audio CDs. If you have two Mitsumi CDROM drives, you can use
+  the old driver for one and the new for the other;
+  Documentation/cdrom/mcdx explains how. If you want to compile this
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want), say M here and read
+  Documentation/modules.txt.
+
+Matsushita/Panasonic CDROM driver support
+CONFIG_SBPCD
+  The Creative Labs Soundblaster CD drives as well as Longshine and
+  IBM External ISA also fall under this category. It has a uniquely
+  shaped faceplate, with a caddyless motorized drawer which makes it
+  recognizable, but has no external brand markings. Some Soundblaster
+  drives have a caddy and manual loading/eject, but still no external
+  markings. If you have one of these, say Y here and also to "ISO9660
+  cdrom filesystem support" below. This driver can support up to four
+  CDROM controllers, each of which can support up to four CDROM
+  drives; you will be asked how many controllers you have. Read
+  Documentation/cdrom/sbpcd and include/linux/sbpcd.h in the kernel
+  source and the CDROM-HOWTO, available via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If unsure, say N.  If you
+  want to compile this as a module ( = code which can be inserted in
+  and removed from the running kernel whenever you want), say M here
+  and read Documentation/modules.txt.
+
+Matsushita/Panasonic second CDROM controller support
+CONFIG_SBPCD2
+  If you have two CDROM drives of this type that you want to use
+  simultaneously under Linux, say Y here, otherwise N.
+
+Aztech/Orchid/Okano/Wearnes (non IDE) CDROM support
+CONFIG_AZTCD
+  If you have a CDA268-01A, ORCHID CD-3110, OKANO/WEARNES CDD110 CDROM
+  drive, say Y here and also to "ISO9660 cdrom filesystem support"
+  below. This is NOT for CDROM drives with IDE interface, such as
+  Aztech CDA269-031SE. (If you have one of those, you should have said
+  Y to the new IDE driver above.) You want to read
+  Documentation/cdrom/aztcd and include/linux/aztcd.h in the kernel
+  source and the CDROM-HOWTO, available via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If unsure, say N.  If you
+  want to compile this as a module ( = code which can be inserted in
+  and removed from the running kernel whenever you want), say M here
+  and read Documentation/modules.txt.
+
+Sony CDU535 CDROM driver support
+CONFIG_CDU535
+  If you have a CDU-535 or CDU-531 CDROM drive (this is one of the
+  older Sony drives with its own interface card), say Y here and also
+  to "ISO9660 cdrom filesystem support" below. You want to read
+  Documentation/cdrom/sonycd535 in the kernel source and the
+  CDROM-HOWTO, available via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If unsure, say N.  If you
+  want to compile this as a module ( = code which can be inserted in
+  and removed from the running kernel whenever you want), say M here
+  and read Documentation/modules.txt.
+
+Goldstar R420 CDROM support
+CONFIG_GSCD
+  If this is your CDROM drive, say Y here and also to "ISO9660 cdrom
+  filesystem support" below. You want to read Documentation/cdrom/gscd
+  in the kernel source and the CDROM-HOWTO, available via ftp (user:
+  anonymous) from sunsite.unc.edu:/pub/Linux/docs/HOWTO. As described
+  in the file gscd, you might have to change a setting in the file
+  include/linux/gscd.h before compiling the kernel. If unsure, say N.
+  If you want to compile this as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you want),
+  say M here and read Documentation/modules.txt.
+
+Philips/LMS CM206 CDROM support
+CONFIG_CM206
+  If you have a Philips/LMS CDROM drive cm206 in combination with a
+  cm260 host adapter card, say Y here and also to "ISO9660 cdrom
+  filesystem support" below. You want to read
+  Documentation/cdrom/cm206 in the kernel source and the CDROM-HOWTO,
+  available via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If unsure, say N.  If you
+  want to compile this as a module ( = code which can be inserted in
+  and removed from the running kernel whenever you want), say M here
+  and read Documentation/modules.txt.
+
+Experimental Optics Storage DOLPHIN 8000AT CDROM support
+CONFIG_OPTCD
+  If this is your CDROM drive, say Y here and also to "ISO9660 cdrom
+  filesystem support" below. You want to read
+  Documentation/cdrom/optcd in the kernel source and the CDROM-HOWTO,
+  available via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If unsure, say N.  If you
+  want to compile this as a module ( = code which can be inserted in
+  and removed from the running kernel whenever you want), say M here
+  and read Documentation/modules.txt.
+
+Experimental Sanyo H94A CDROM support
+CONFIG_SJCD
+  If this is your CDROM drive, say Y here and also to "ISO9660 cdrom
+  filesystem support" below. You want to read
+  Documentation/cdrom/sjcd in the kernel source (this file includes
+  information about how to make the driver work together with an ISP16
+  soundcard) and the CDROM-HOWTO,
+  available via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If unsure, say N.
+
+Standard (minix) fs support
+CONFIG_MINIX_FS
+  Minix is a simple operating system used in many classes about
+  OS's. The minix filesystem (= method to organize files on a harddisk
+  partition or a floppy disk) was the original filesystem for Linux,
+  has been superseded by the second extended filesystem ext2fs but is
+  still used for root/boot and other floppies or ram disks since it is
+  leaner. You don't want to use it on your harddisk because of certain
+  built-in restrictions. This option will enlarge your kernel by about
+  25 kB. Everyone should say Y so that they are able to read this
+  common floppy format.  If you want to compile this as a module
+  however ( = code which can be inserted in and removed from the
+  running kernel whenever you want), say M here and read
+  Documentation/modules.txt. Note that the filesystem of your root
+  partition cannot be compiled as a module.
+
+Extended fs support
+CONFIG_EXT_FS
+  This is the old Linux filesystem (= method to organize files on a
+  harddisk partition or a floppy disk) and not in use anymore. It
+  enlarges your kernel by about 25 kB. Let's all kill this beast. Say
+  N.
+
+Second extended fs support
+CONFIG_EXT2_FS
+  This is the de facto standard Linux filesystem (= method to organize
+  files on a storage device) for harddisks. You want to say Y, unless
+  you intend to use Linux exclusively from inside a DOS partition
+  using the umsdos filesystem. The advantage of the latter is that you
+  can get away without repartitioning your hard drive (which often
+  implies backing everything up and restoring afterwards); the
+  disadvantage is that Linux becomes susceptible to DOS viruses and
+  that umsdos is somewhat slower than ext2fs. Even if you want to run
+  Linux in this fashion, it might be a good idea to have ext2fs
+  around: it enables you to read more floppy disks and facilitates the
+  transition to a *real* Linux partition later. Another (rare) case
+  which doesn't require ext2fs is a diskless Linux box which mounts
+  all files over the network using NFS (in this case it's sufficient
+  to enable NFS filesystem support below; if you are planning to do
+  this, have a look at the package
+  /pub/Linux/system/Linux-boot/netboot-nfs.tar.gz, available via ftp
+  (user: anonymous) from sunsite.unc.edu, extract with "tar xzvf
+  filename"). There is a short ext2fs-FAQ, available via ftp
+  (user: anonymous) in sunsite.unc.edu:/pub/Linux/docs/faqs. This
+  option will enlarge your kernel by about 41 kB. Default is Y.
+
+xiafs filesystem support
+CONFIG_XIA_FS
+  This filesystem (= method to organize files on a harddisk partition
+  or a floppy disk) is only used rarely these days. This option would
+  enlarge your kernel by about 28 kB. Say N.  If you want to compile
+  this as a module ( = code which can be inserted in and removed from
+  the running kernel whenever you want), say M here and read
+  Documentation/modules.txt. Note that the filesystem of your root
+  partition cannot be compiled as a module.
+
+msdos fs support
+CONFIG_MSDOS_FS
+  This allows you to mount MSDOS partitions of your harddrive (unless
+  they are compressed; the only way to access compressed MSDOS
+  partitions under Linux is with the DOS emulator DOSEMU, described in
+  the DOSEMU-HOWTO, available via ftp (user: anonymous) at
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO. If you intend to use dosemu
+  with a non-compressed MSDOS partition, say Y here) and MSDOS
+  floppies. This means that file access becomes transparent, i.e. the
+  MSDOS files look and behave just like all other Unix files.  Another
+  way to read and write MSDOS floppies from within Linux (but not
+  transparently) is with the mtools ("man mtools") program suite,
+  which doesn't require the msdos filesystem support.  If you want to
+  use umsdos, the Unix-like filesystem on top of DOS, which allows you
+  to run Linux from within a DOS partition without repartitioning,
+  you'll have to say Y here. This option will enlarge your kernel by
+  about 25 kB. If unsure, say Y.  If you want to compile this as a
+  module however ( = code which can be inserted in and removed from
+  the running kernel whenever you want), say M here and read
+  Documentation/modules.txt. Note that the filesystem of your root
+  partition cannot be a module.
+
+umsdos: Unix like fs on top of std MSDOS FAT fs
+CONFIG_UMSDOS_FS
+  Say Y here if you want to run Linux from within an existing DOS
+  partition of your harddrive. The advantage of this is that you can
+  get away without repartitioning your hard drive (which often implies
+  backing everything up and restoring afterwards) and hence you're
+  able to quickly try out Linux or show it to your friends; the
+  disadvantage is that Linux becomes susceptible to DOS viruses and
+  that UMSDOS is somewhat slower than ext2fs.  Another use of umsdos
+  is to write files with long unix filenames to MSDOS floppies; it
+  also allows unix style softlinks and owner/permissions of files on
+  MSDOS floppies. You will need a program called umssync in order to
+  make use of umsdos. Read Documentation/filesystems/umsdos.txt. This
+  option enlarges your kernel by about 25 kB. If unsure, say N.  If
+  you want to compile this as a module ( = code which can be inserted
+  in and removed from the running kernel whenever you want), say M
+  here and read Documentation/modules.txt. Note that the filesystem of
+  your root partition cannot be a module.
+
+/proc filesystem support
+CONFIG_PROC_FS
+  This is a virtual filesystem providing information about the status
+  of the system. "Virtual" means that it doesn't take any space on
+  your harddisk: the files are created on the fly when you access
+  them. Also, you cannot read the files with less or more: you need to
+  use cat. The filesystem is explained in the Kernel Hacker's Guide,
+  available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/LDP.  This option will enlarge your
+  kernel by about 18 kB. It's totally cool; for example, "cat
+  /proc/interrupts" gives information about what the different IRQs
+  are used for at the moment (there is a small number of Interrupt
+  ReQuest lines in your computer that are used by the periphery to
+  gain the CPU's attention - often a source of trouble if two devices
+  are mistakenly configured to use the same IRQ). Several programs
+  depend on this, so everyone should say Y here.
+  
+NFS filesystem support
+CONFIG_NFS_FS
+  If you are connected to a network (using SLIP, PPP or ethernet, not
+  term [term is a program which gives you almost full Internet
+  connectivity if you have a regular dial up shell account on some
+  Internet connected Unix computer. Read the Term-HOWTO, available via
+  ftp (user: anonymous) on sunsite.unc.edu:/pub/Linux/docs/HOWTO]) and
+  want to mount files residing on another UNIX computer (the NFS
+  server) using the NetworkFileSharing protocol, say Y. "Mounting
+  files" means that the client can access the files with usual UNIX
+  commands as if they were sitting on the client's harddisk. For this
+  to work, the server must run the programs nfsd and mountd (but does
+  not need to have NFS filesystem support enabled). NFS is explained
+  in the Network Administrator's Guide, available via ftp (user:
+  anonymous) in sunsite.unc.edu:/pub/Linux/docs/LDP, and on its man
+  page: "man nfs". There is also a NFS-FAQ in
+  sunsite.unc.edu:/pub/Linux/docs/faqs which presumes that you know
+  the basics of NFS already. If you say Y here, you should have said Y
+  to TCP/IP networking also. This option would enlarge your kernel by
+  about 27 kB. This filesystem is also available as a module ( = code
+  which can be inserted in and removed from the running kernel
+  whenever you want). If you want to compile it as a module, say M
+  here and read Documentation/modules.txt. If you don't know what all
+  this is about, say N.
+
+ISO9660 cdrom filesystem support
+CONFIG_ISO9660_FS
+  If you have a CDROM and want to do more with it than just listen to
+  audio CDs and watch its LEDs, say Y (and read the CDROM-HOWTO,
+  available via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO), thereby enlarging your
+  kernel by about 27 kB; otherwise say N.  If you want to compile this
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want), say M here and read
+  Documentation/modules.txt.
+
+OS/2 HPFS filesystem support (read only)
+CONFIG_HPFS_FS
+  OS/2 is IBM's operating system for PC's, the same as Warp, and HPFS
+  is the filesystem used for organizing files on OS/2 harddisk
+  partitions. Say Y if you want to be able to read files from an OS/2
+  HPFS partition of your harddrive. OS/2 floppies however are in
+  regular MSDOS format, so you don't need this option in order to be
+  able to read them. Read Documentation/filesystems/hpfs.txt. This
+  filesystem is also available as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you
+  want). If you want to compile it as a module, say M here and read
+  Documentation/modules.txt. If unsure, say N.
+  
+System V and Coherent filesystem support
+CONFIG_SYSV_FS
+  SCO, Xenix and Coherent are commercial Unix systems for intel
+  machines. Enabling this option would allow you to read and write to
+  and from their floppies and harddisk partitions. You need this if
+  you want to run iBCS2 (iBCS2 [Intel Binary Compatibility Standard]
+  is a kernel module which lets you run SCO, Xenix, Wyse, Unix Ware,
+  Dell Unix and System V programs under Linux and is often needed to
+  run commercial software, most prominently WordPerfect. It's in
+  tsx-11.mit.edu:/pub/linux/BETA). If you only intend to mount files
+  from some other Unix over the network using NFS, you don't need this
+  (but you need nfs filesystem support obviously). Note that this
+  option is generally not needed for floppies, since a good portable
+  way to transport files between unixes (and even to other operating
+  systems) is given by the tar program ("man tar").  Note also that
+  this option has nothing to do whatsoever with the option "System V
+  IPC". Read about the System V filesystem in
+  Documentation/filesystems/sysv-fs.txt. This option will enlarge your
+  kernel by about 34 kB. If you want to compile this as a module
+  ( = code which can be inserted in and removed from the running
+  kernel whenever you want), say M here and read
+  Documentation/modules.txt. If you haven't heard about all of this
+  before, it's safe to say N.  
+
+SMB filesystem (to mount WfW shares etc..) support
+CONFIG_SMB_FS
+  SMB (Server Message Buffer) is the protocol Windows for Workgroups
+  (WfW), Windows NT and Lan Manager use to talk to each other over an
+  ethernet. Enabling this allows you to mount their filesystems and
+  access them just like any other unix directory. For details, read
+  Documentation/filesystems/smbfs.txt.  Note: if you just want your
+  box to act as an SMB *server* and make files and printing services
+  available to Windows clients (which need to have a TCP/IP stack),
+  you don't need to enable this filesystem support; you can use the
+  program samba (available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/system/Network/samba) for that. General
+  information about how to connect Linux, Windows machines and Macs is
+  on the WWW at http://eats.com/linux_mac_win.html (to browse the WWW,
+  you need to have access to a machine on the Internet that has one of
+  the programs lynx, netscape or Mosaic).  If you want to compile this
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want), say M here and read
+  Documentation/modules.txt. Most people say N here.
+
+Cyclades async mux support
+CONFIG_CYCLADES
+  This is a card which gives you many serial ports. You would need
+  something like this to connect more than two modems to your linux
+  box, for instance in order to become a BBS. If you haven't heard
+  about it, it's safe to say N.
+
+Stallion multiport serial support 
+CONFIG_STALDRV
+  Stallion cards give you many serial ports. You would need something
+  like this to connect more than two modems to your linux box, for
+  instance in order to become a BBS. If you say Y here, you will be
+  asked for your specific card model in the next questions. If you
+  haven't heard about it, it's safe to say N.
+ 
+Stallion EasyIO or EC8/32 support 
+CONFIG_STALLION n
+  If you have an EasyIO or EasyConnection 8/32 multiport Stallion
+  card, then this is for you; say Y.  If you want to compile this as a
+  module ( = code which can be inserted in and removed from the
+  running kernel whenever you want), say M here and read
+  Documentation/modules.txt.
+
+CONFIG_ISTALLION n
+  If you have an EasyConnection 8/64, ONboard, Brumby or Stallion
+  serial multiport card, say Y here. To compile it as a module ( =
+  code which can be inserted in and removed from the running kernel
+  whenever you want), say M here and read Documentation/modules.txt.
+
+Parallel printer support
+CONFIG_PRINTER
+  If you intend to attach a printer to the parallel port of your Linux
+  box (as opposed to using a serial printer; if the connector at the
+  printer has 9 or 25 holes ["female"], then it's serial), say Y. Also
+  read the Printing-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  If you want to compile this
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want), say M here and read
+  Documentation/modules.txt. If you intend to use PLIP (Parallel Line
+  Internet Protocol is mainly used to create a mini network by
+  connecting the parallel ports of two local machines) and a parallel
+  printer, you should compile both as modules because the drivers
+  don't like each other.
+
+Logitech busmouse support
+CONFIG_BUSMOUSE
+  Logitech mouse connected to a proprietary interface card. It's
+  generally a round connector with 9 pins. Note that the newer mice
+  made by Logitech don't use the Logitech protocol anymore; for those,
+  you don't need this option. You want to read the Busmouse-HOWTO,
+  available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  If you want to compile this
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want), say M here and read
+  Documentation/modules.txt. If you are unsure, say N and read the
+  HOWTO nevertheless: it will tell you what you have. Chances are that
+  you have a regular serial MouseSystem or Microsoft mouse (made by
+  Logitech) plugging in a COM port (rectangular with 9 or 25 pins)
+  which is supported automatically.
+
+PS/2 mouse (aka "auxiliary device") support
+CONFIG_PSMOUSE
+  The PS/2 mouse connects to a special mouse port that looks much like
+  the keyboard port (small circular connector with 6 pins). This way,
+  the mouse does not use any serial ports. This port can also be used
+  for other input devices like light pens, tablets, keypads. Compaq,
+  AST and IBM all use this as their mouse port on currently shipping
+  machines. The trackballs of some laptops are PS/2 mice
+  also. Although this is not a busmouse, it is explained in detail in
+  the Busmouse-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO.  If you want to compile this
+  as a module ( = code which can be inserted in and removed from the
+  running kernel whenever you want), say M here and read
+  Documentation/modules.txt. If you are unsure, say N and read the
+  HOWTO nevertheless: it will tell you what you have. Chances are that
+  you have a regular serial MouseSystem or Microsoft mouse plugging in
+  a COM port (9 or 25 pins) which is supported automatically.
+
+C&T 82C710 mouse port support (as on TI Travelmate)
+CONFIG_82C710_MOUSE
+  This is a certain kind of PS/2 mouse used on the TI Travelmate. If
+  you are unsure, try first to say N here and come back if the mouse
+  doesn't work. Read the Busmouse-HOWTO, available via ftp (user:
+  anonymous) in sunsite.unc.edu:/pub/Linux/docs/HOWTO.
+
+Microsoft busmouse support
+CONFIG_MS_BUSMOUSE
+  These animals (also called Inport mice) are connected to an
+  expansion board using a round connector with 9 pins. If this is what
+  you have, say Y and read the Busmouse-HOWTO, available via ftp
+  (user: anonymous) in sunsite.unc.edu:/pub/Linux/docs/HOWTO.  If you
+  want to compile this as a module ( = code which can be inserted in
+  and removed from the running kernel whenever you want), say M here
+  and read Documentation/modules.txt. If you are unsure, say N and
+  read the HOWTO nevertheless: it will tell you what you have. Chances
+  are that you have a regular serial MouseSystem or Microsoft mouse
+  plugging in a COM port which is supported automatically.
+
+ATIXL busmouse support
+CONFIG_ATIXL_BUSMOUSE
+  This is a rare type of busmouse that is connected to the back of an
+  ATI video card. Note that most ATI mice are actually Microsoft
+  busmice. Read the Busmouse-HOWTO, available via ftp (user:
+  anonymous) in sunsite.unc.edu:/pub/Linux/docs/HOWTO.  If you want to
+  compile this as a module ( = code which can be inserted in and
+  removed from the running kernel whenever you want), say M here and
+  read Documentation/modules.txt. If you are unsure, say N and read
+  the HOWTO nevertheless: it will tell you what you have. Chances are
+  that you have a regular serial MouseSystem or Microsoft mouse
+  plugging in a COM port (9 or 25 pins) which is supported
+  automatically.
+
+Selection (cut and paste for virtual consoles)
+CONFIG_SELECTION
+  This allows you to use your mouse for moving text on a Linux console
+  or even between several virtual consoles. Read about it with "man
+  selection". You also need it to run gpm ("general purpose mouse")
+  which is a superset of selection. This is explained in the
+  Busmouse-HOWTO, available via ftp (user: anonymous) in
+  sunsite.unc.edu:/pub/Linux/docs/HOWTO, although selection works fine
+  with serial mice, too. Most people say Y unless they run mainly the
+  X Window System, which has its own cut-and-paste mechanism. Enabling
+  this option enlarges your kernel by about 1 kB. Newer kernels
+  contain this code by default and don't have this config option
+  anymore. 
+
+QIC-02 tape support
+CONFIG_QIC02_TAPE
+  If you have a non-SCSI tape drive like that, say Y.
+
+Do you want runtime configuration for QIC-02
+CONFIG_QIC02_DYNCONF
+  You can either configure this driver once and for all by editing a
+  header file, in which case you should say N, or you can fetch a
+  program via anonymous ftp which is able to configure this driver
+  during runtime. If you want this, say Y.
+
+QIC-117 tape support
+CONFIG_FTAPE
+  Most tape drives using the floppy disk controller will need
+  this. Colorado Jumbo, Conner Tape-Stor would be two models of this.
+  If you have a non-SCSI tape device like that, say Y. QIC-40 users
+  say Y too. And everyone read the Ftape-HOWTO, available via ftp
+  (user: anonymous) from sunsite.unc.edu:/pub/Linux/docs/HOWTO. Tape
+  drives that attach to the parallel port, like the Colorado Tracker,
+  are not yet supported by Linux.  Note that saying Y here will not
+  insert the code into the kernel: instead, a module will be compiled
+  ( = code which can be inserted in and removed from the running
+  kernel whenever you want). Read Documentation/modules.txt to find
+  out how to use it.
+
+number of ftape buffers
+NR_FTAPE_BUFFERS 3
+  The floppy tape drive needs some memory allocated in the kernel.
+  n buffers, each having 32 kB, will be allocated if you enter n
+  here. Consequently, your kernel size increases by n*32 kB. You
+  should accept the default unless you know what you're doing.
+
+Zilog serial support
+CONFIG_SUN_ZS
+  This driver does not exist at this point, so you might as well say
+  N.
+
+Sound card support
+CONFIG_SOUND
+  If you have a Sound Card in your Computer, i.e. if it can say more
+  than an occasional beep, say Y. Be sure to have all the information
+  about your sound card and its configuration down (I/O port,
+  interrupt and DMA channel), because you will be asked for it. You
+  want to read the Sound-HOWTO, available via ftp (user: anonymous)
+  from sunsite.unc.edu:/pub/Linux/docs/HOWTO. There is also some
+  information in various README files in drivers/sound.  If you want
+  to compile this as a module ( = code which can be inserted in and
+  removed from the running kernel whenever you want), say M here and
+  read Documentation/modules.txt. I'm told that even without a sound
+  card, you can make your computer say more than an occasional beep,
+  by programming the PC speaker. Kernel patches and programs to do
+  that are at
+  sunsite.unc.edu:/pub/Linux/kernel/patches/console/pcsndrv-X.X.tar.gz,
+  to be extracted with "tar xzvf filename".
+
+Sun Audio support
+CONFIG_SUN_AUDIO
+  This is support for the soundcards on Sun workstations. The code
+  does not exist yet, so you might as well say N here.
+
+Kernel profiling support
+CONFIG_PROFILE
+  This is for kernel hackers who want to know how much time the kernel
+  spends in the various procedures. The information is stored in
+  /proc/profile (enable the /proc filesystem!) and in order to read
+  it, you need the readprofile package from sunsite.unc.edu. Its
+  manpage gives information regarding the format of profiling data. To
+  become a kernel hacker, you can start with the Kernel Hacker's
+  Guide, available via ftp (user: anonymous) from
+  sunsite.unc.edu:/pub/Linux/docs/LDP. Mere mortals say N.
+ 
+Profile shift count
+CONFIG_PROFILE_SHIFT
+  This is used to adjust the granularity with which the addresses of
+  executed instructions get recorded in /proc/profile. But since you
+  enabled "Kernel profiling support", you must be a kernel hacker and
+  hence you know what this is about :-)
+
+# need an empty line after last entry, for sed script in Configure.
+
+#
+# This is used by ispell.el:
+#
+# LocalWords:  CONFIG coprocessor DX Pentium SX lilo loadlin HOWTO ftp sunsite
+# LocalWords:  unc edu docs emu README kB BLK DEV FD Thinkpad fd MFM RLL IDE gz
+# LocalWords:  cdrom harddisk diskless netboot nfs xzvf ATAPI MB harddrives ide
+# LocalWords:  HD harddisks CDROMs IDECD NEC MITSUMI filesystem XT XD PCI bios
+# LocalWords:  ISA EISA Microchannel VESA BIOSes bussystem IPC SYSVIPC ipc Ctrl
+# LocalWords:  InterProcessCommunication BINFMT Linkable http ac uk jo html GCC
+# LocalWords:  netscape gcc LD CC toplevel MODVERSIONS insmod rmmod modprobe IP
+# LocalWords:  genksyms INET loopback gatewaying ethernet internet PPP ARP Arp
+# LocalWords:  howto multicasting MULTICAST MBONE firewalling ipfw ACCT resp ip
+# LocalWords:  proc acct IPIP encapsulator decapsulator klogd PCTCP RARP EXT PS
+# LocalWords:  telneting AddressResolutionProtocol subnetted NAGLE rlogin NOSR
+# LocalWords:  Mb SKB IPX Novell Netware dosemu Appletalk DDP ATALK tapedrive
+# LocalWords:  SD CHR scsi thingy SG CD LUNs LUN jukebox Adaptec BusLogic EATA
+# LocalWords:  buslogic DMA DPT ATT eata dma PIO UltraStor fdomain umsdos ext
+# LocalWords:  QLOGIC qlogic TMC seagate Trantor ultrastor FASST wd NETDEVICES
+# LocalWords:  unix BBS linux nullmodem CSLIP PLIP Kirch's LDP CSlip SL SCC IRQ
+# LocalWords:  Turbo Laplink plip NCSA port's ReQuest IRQs EQL SMC AMD PCnet NE
+# LocalWords:  COM ELPLUS Com EtherLinkIII VLB Arcnet arcnet Cabletron DEPCA DE
+# LocalWords:  depca EtherWorks EWRK ewrk SEEQ EtherExpressPro EEXPRESS NI xxx
+# LocalWords:  EtherExpress WaveLAN wavelan PCLAN HPLAN VG SK Ansel Xen de ZNET
+# LocalWords:  PCMCIA cb stanford pcmcia LAN TEC RealTek ATP atp DLINK NetTools
+# LocalWords:  TR Sony CDU caddyless cdu Mitsumi MCD cd mcd XA MultiSession CDA
+# LocalWords:  Matsushita Panasonic SBPCD Soundblaster Longshine sbpcd Aztech
+# LocalWords:  Okano Wearnes AZTCD CDD SE aztcd sonycd Goldstar GSCD Philips fs
+# LocalWords:  LMS OPTCD Sanyo SJCD minix faqs xiafs XIA msdos harddrive mtools
+# LocalWords:  std softlinks umssync NetworkFileSharing nfsd mountd CDs HPFS TI
+# LocalWords:  hpfs SYSV SCO intel iBCS Wyse WordPerfect tsx mit unixes sysv NR
+# LocalWords:  SMB WfW Cyclades async mux Logitech busmouse MouseSystem aka AST
+# LocalWords:  PSMOUSE Compaq trackballs Travelmate Inport ATIXL ATI busmice ld
+# LocalWords:  gpm config QIC DYNCONF FTAPE Stor Ftape ftape pcsndrv manpage NT
+# LocalWords:  readprofile diskdrives org com masq EtherTalk tcp netrom sunacm
+# LocalWords:  misc AIC aic pio nullmodems scc Portmaster eql GIS PhotoCDs MCDX
+# LocalWords:  mcdx gscd optcd sjcd ISP soundcard hdparm Workgroups Lan samba
+# LocalWords:  filesystems smbfs ATA ppp PCTech RZ www powerquest txt CMD ESDI
+# LocalWords:  chipset FB multicast MROUTE appletalk ifconfig IBMTR multiport
+# LocalWords:  Multisession STALDRV EasyIO EC EasyConnection ISTALLION ONboard
+# LocalWords:  Brumby pci TNC cis ohio faq usenet NETLINK dev hydra ca Tyne mem
+# LocalWords:  carleton Deskstation DECstation SUNFD JENSEN Noname XXXM SLiRP
+# LocalWords:  pppd Zilog ZS soundcards SRM bootloader SMP smp ez mainmenu rarp
+# LocalWords:  RTNETLINK mknod
diff -u --recursive --new-file v1.3.36/linux/Documentation/SMP.txt linux/Documentation/SMP.txt
--- v1.3.36/linux/Documentation/SMP.txt	Wed Oct  4 14:14:27 1995
+++ linux/Documentation/SMP.txt	Sat Oct 28 15:18:23 1995
@@ -11,10 +11,7 @@
 
 o	Fix sys_idle to exit/enter kernel state and do hlt's.
 o	Fix scheduler decisions to reschedule. Per cpu reschedule ?
-o	Scheduler ignores stick to CPU advantage. Critical for P6!
-o	FPU state save/restore - fault any process on FPU and do a
-	restore on the fault each context switch, do a save if we
-	faulted that run of the task when we switch away. [DONE]
+o	Scheduler ignores stick to CPU advantage. Critical for P6! [Done - FK]
 o	Clean up message pass.
 o	Test for B stepping processors.
 o	Clean up processor specific/independant split.
@@ -23,12 +20,7 @@
 o	Halt other CPU's on reset/panic doesn't always work.
 o	Dont waste page at 4K - dont need it now.(watch the GDT code).
 o	Dump bootup pages once booted somehow.
-o	Verify message pass safe for >2 CPU's - should be now it
-	is atomic lock based.
-o	Dont schedule switches between idle tasks (if current->pid==0 &&
-	next->pid==0 && next!=current)	[IN]
 o	Clean up warnings/volatiles.
-o	Send CTRL-ALT-DEL to pid 1 not task[1]!	[IN]
 o	Fix load_TR() for non contiguous processor ids
 o	Iterate over the slave timer requests if one is lost (keep a count per cpu)
 o	Distribute irq's (locking present just needs the 82489 to be asked
diff -u --recursive --new-file v1.3.36/linux/Documentation/cdrom/aztcd linux/Documentation/cdrom/aztcd
--- v1.3.36/linux/Documentation/cdrom/aztcd	Mon Oct 23 18:02:00 1995
+++ linux/Documentation/cdrom/aztcd	Sat Oct 28 15:54:18 1995
@@ -1,8 +1,9 @@
-$Id: README.aztcd,v 1.80 1995/10/11 19:37:49 root Exp root $
+$Id: README.aztcd,v 1.90 1995/10/21 17:52:16 root Exp root $
                        Readme-File README.aztcd
-   for Aztech CD-ROM CDA268-01A, ORCHID CD-3110, OKANO/WEARNES CDD110 
-                          CD-ROM  Driver 
-                       Version 1.7 and newer
+           for Aztech CD-ROM CDA268-01A, ORCHID CD-3110,
+                  OKANO/WEARNES CDD110, Conrad TXC
+                           CD-ROM Driver 
+                       Version 1.9 and newer
                    (for other drives see 6.-8.)
 
 NOTE: THIS DRIVER WILL WORK WITH THE CD-ROM DRIVES LISTED, WHICH HAVE
@@ -37,29 +38,31 @@
 ----------------------------------------------------------------------------
 
 1. NOTE 
-This software has been successfully in alpha and beta test for quite a long
-time with AZTECH CDA268-01A, ORCHID CDS-3110 and ORCHID/WEARNES CDD110 
-and has proven to be stable with kernel versions 1.0.9 to 1.2.0. But with
-any software there still may be bugs in it. So if you encounter problems,
-you are invited to help us improve this software. Please send me a detailed
-bug report (see chapter BUG REPORTS). You are also invited in helping us to 
-increase the number of drives, which are supported.
+This software has been successfully in alpha and beta test and is part of
+the standard kernel since kernel 1.1.8x since December 1994. It works with
+time with AZTECH CDA268-01A, ORCHID CDS-3110, ORCHID/WEARNES CDD110 and
+CONRAD TXC (Nr.99 31 23 -series 04) and has proven to be stable with kernel 
+versions 1.0.9 to 1.3.35. But with any software there still may be bugs in it. 
+So if you encounter problems, you are invited to help us improve this software. 
+Please send me a detailed bug report (see chapter BUG REPORTS). You are also 
+invited in helping us to increase the number of drives, which are supported.
 
 Please read the README-files carefully and always keep a backup copy of your 
 old kernel, in order to reboot if something goes wrong!
 
-
 2. INSTALLATION
-If you received this software as a standalone package AZTECH.CDROM.Vxx.tgz 
-(xx=version number) and not included in the standard Linux kernel, read the 
-file AZTECH.CDROM.README included in that package to install it. The 
-standalone package's home is 'ftp.gwdg.de : pub/linux/cdrom/drivers/aztech'.
 The driver consists of a header file 'aztcd.h', which normally should reside 
 in /usr/include/linux and the source code 'aztcd.c', which normally resides in
-/usr/src/linux/drivers/block. It uses /dev/aztcd0, which must be a valid block
-device with major number 29 and reside in directory /dev. To mount a CD-ROM,
-your kernel needs to have the ISO9660-filesystem support included.
-
+/usr/src/linux/drivers/block. It uses /dev/aztcd (/dev/aztcd0 in some distri-
+butions), which must be a valid block device with major number 29 and reside 
+in directory /dev. To mount a CD-ROM, your kernel needs to have the ISO9660-
+filesystem support included.
+
+PLEASE NOTE: aztcd.c has been developped in parallel to the linux kernel,
+which had and is having many major and minor changes which are not backward
+compatible. Quite definitely aztcd.c version 1.80 and newer will NOT work
+in kernels older than 1.3.33. So please always use the most recent version
+of aztcd.c with the appropriate linux-kernel.
 
 3.  CONFIGURING YOUR KERNEL
 If your kernel is already configured for using the AZTECH driver you will
@@ -89,13 +92,12 @@
 message, that the ISO9660-filesystem is not supported by your kernel, when
 you try to mount the CD-ROM drive, you have to recompile your kernel.
 
-If you do *not* have an Aztech/Orchid/Okano/Wearnes drive and want to bypass
-drive detection during Linux boot up, start with boot parameter aztcd=0.
-
-Joe Nardone has compiled a boot disk with the Aztech driver for installing 
-Slackware from CDROM. You can find the disk images at 'sunsite.unc.edu'; 
-see file 'aztech.gz.README' for instructions on how to use it.
+If you do *not* have an Aztech/Orchid/Okano/Wearnes/TXC drive and want to 
+bypass drive detection during Linux boot up, start with boot parameter aztcd=0.
 
+Most distributions nowadays do contain a boot disk image containing aztcd.
+Please note, that this driver will not work with IDE/ATAPI drives! With these 
+you must use ide-cd.c instead.
 
 4. RECOMPILING YOUR KERNEL
 If your kernel is not yet configured for the AZTECH driver and the ISO9660-
@@ -138,10 +140,10 @@
 4.1 AZTCD AS A RUN-TIME LOADABLE MODULE
 If you do not need aztcd permanently, you can also load and remove the driver
 during runtime via insmod and rmmod. To build aztcd as a loadable module you 
-must *not* configure your kernel for AZTECH support. Nevertheless, you may
-run into problems, if the version of your boot kernel is not the same than
-the source kernel version, from which you create the modules. So rebuild your 
-kernel, if necessary. 
+must configure your kernel for AZTECH module support (answer 'm' when con-
+figuring the kernel). Anyhow, you may run into problems, if the version of 
+your boot kernel is not the same than the source kernel version, from which 
+you create the modules. So rebuild your kernel, if necessary. 
 
 Now edit the base address of your AZTECH interface card in
 /usr/src/linux/include/linux/aztcd.h to the appropriate value. There are
@@ -193,7 +195,7 @@
 AZT_MULTISESSION to 0, you can use multisession CDs anyway. In that case the 
 drive's firmware will do automatic redirection. For the ISO9660-filesystem any 
 multisession CD  will then look like a 'normal' single session CD. But never-
-theless the data of all sessions is viewable and accessible. So with practical-
+theless the data of all sessions are viewable and accessible. So with practical-
 ly all real world applications you won't notice the difference. But as future
 applications may make use of advanced multisession features, I've started to
 implement the interface for the ISO9660 multisession interface via ioctl
@@ -209,8 +211,9 @@
 
 The driver uses busy wait in most cases for the drive handshake (macros
 STEN_LOW and DTEN_LOW). I tested with a 486/DX2 at 66MHz and a Pentium at
-60MHz. Whenever you use a much faster machine you are likely to get timeout 
-messages. In that case edit aztcd.h and increase the timeout value AZT_TIMEOUT. 
+60MHz and 90MHz. Whenever you use a much faster machine you are likely to get 
+timeout messages. In that case edit aztcd.h and increase the timeout value 
+AZT_TIMEOUT. 
 
 For some 'slow' drive commands I implemented waiting with a timer waitqueue
 (macro STEN_LOW_WAIT). If you get this timeout message, you may also edit
@@ -221,17 +224,14 @@
 
 5.3 DOSEMU's CD-ROM SUPPORT
 With release 1.20 aztcd was modified to allow access to CD-ROMS when running
-under dosemu-0.60. aztcd-versions before 1.20 are most likely to crash
+under dosemu-0.60.0 aztcd-versions before 1.20 are most likely to crash
 Linux, when a CD-ROM is accessed under dosemu. This problem has partly been
 fixed, but still when accessing a directory for the first time the system
 might hang for some 30sec. So be patient, when using dosemu's CD-ROM support
-in combination with aztcd :-) ! Unfortunately up to now, I could not locate
-the root cause of that problem. It seems to be somewhere in the interaction
-of the kernel with dosemu's and aztcd's buffers. I appreciate any help on
-this subject ! 
+in combination with aztcd :-) ! 
 This problem has now (July 1995) been fixed by a modification to dosemu's
-CD-ROM driver, but it is unclear, with which version of dosemu this modi-
-fication will officially be included.
+CD-ROM driver. The new version came with dosemu-0.60.2, see dosemu's
+README.CDROM.
 
 6. BUG REPORTS
 Please send detailed bug reports and bug fixes via EMail to
@@ -261,16 +261,17 @@
 
 
 7. OTHER DRIVES
-The following drives ORCHID CDS3110, OKANO CDD110 and WEARNES nearly look 
-the same as AZTECH CDA268-01A, especially they seem to use the same command 
-codes. So it was quite simple to make the AZTECH driver work with these drives. 
+The following drives ORCHID CDS3110, OKANO CDD110, WEARNES CDD110 and Conrad
+TXC Nr. 993123-series 04 nearly look the same as AZTECH CDA268-01A, especially 
+they seem to use the same command codes. So it was quite simple to make the 
+AZTECH driver work with these drives. 
 
 Unfortunately I do not have any of these drives available, so I couldn't test
 it myself. But I've got reports, that it works with ORCHID CDS3110 and Game-
-Wave32 sound cards and also with WEARNES CDD110 in some different combinations. 
-In some installations, it seems necessary to initialize the drive with the DOS 
-driver before (especially if combined with a sound card) and then do a warm 
-boot (CTRL-ALT-RESET) or start Linux from DOS, e.g. with 'loadlin'.
+Wave32 sound cards and also with WEARNES CDD110 and Conrad TXC in some different
+combinations. In some installations, it seems necessary to initialize the drive 
+with the DOS driver before (especially if combined with a sound card) and then 
+do a warm boot (CTRL-ALT-RESET) or start Linux from DOS, e.g. with 'loadlin'.
 
 If you do not succeed, read chapter DEBUGGING. Thanks in advance!
 
@@ -289,6 +290,9 @@
  drive. By appropriately configuring the drive and the DOS driver you can
  check, whether your drive does operate in this mode correctly under DOS. If
  it does not operate under DOS, it won't under Linux.
+ If your drive's base address is something like 0x170 or 0x1F0 you most
+ likely are having a IDE/ATAPI-compatible drive, which is not supported by
+ aztcd.c, use ide-cd.c instead.
  Make sure the Base Address is configured correctly in aztcd.h, also make
  sure, that /dev/aztcd0 exists with the correct major number (compare it with
  the entry in file /usr/include/linux/major.h for the Aztech drive). 
@@ -456,6 +460,9 @@
 Reinhard Max delivered the information for the CDROM-interface of the
 SoundWave32 soundcards.
 
+Jochen Koch and Olaf ? delivered the information for supporting Conrad's TXC
+drive.
+
 Anybody, who is interested in these items should have a look at 'ftp.gwdg.de',
 directory 'pub/linux/cdrom' and at 'ftp.cdrom.com', directory 'pub/cdrom'.
 
@@ -500,7 +507,7 @@
 Werner Zimmermann
 Fachhochschule fuer Technik Esslingen
 (EMail: zimmerma@rz.fht-esslingen.de)
-July 26, 1995
+October 21, 1995
 
 ---------------------------------------------------------------------------
 APPENDIX: Source code of cdplay.c
diff -u --recursive --new-file v1.3.36/linux/Documentation/cdrom/cdu31a linux/Documentation/cdrom/cdu31a
--- v1.3.36/linux/Documentation/cdrom/cdu31a	Mon Oct 23 18:02:00 1995
+++ linux/Documentation/cdrom/cdu31a	Sat Oct 28 17:26:24 1995
@@ -1,117 +1,57 @@
-   Tips for using cdu31a.c, the driver for Sony CDU-31A and CDU-33A CDROM
-   drives.
-  
-   Corey Minyard (minyard@wf-rch.cirr.com)
+
+		CDU31A/CDU33A Driver Info
+		-------------------------
+
+Information on the Sony CDU31A/CDU33A CDROM driver for the Linux
+kernel.
+
+   Corey Minyard (minyard@metronet.com)
   
    Colossians 3:17
-  
-   The Sony interface device driver handles Sony interface CDROM
-   drives and provides a complete block-level interface as well as an
-   ioctl() interface compatible with the Sun (as specified in
-   include/linux/cdrom.h).  With this interface, CDROMs can be
-   accessed and standard audio CDs can be played back normally.
-  
-   WARNING - 	All autoprobes have been removed from the driver.
-  		You MUST configure the CDU31A via a LILO config
-  		at boot time or in lilo.conf.  I have the
-  		following in my lilo.conf:
-  
-                  append="cdu31a=0x1f88,0,PAS"
-  
-  		The first number is the I/O base address of the
-  		card.  The second is the interrupt (0 means none).
-  		The third should be "PAS" if on a Pro-Audio
-  		spectrum, or nothing if on something else.
-  
-   This interface is (unfortunately) a polled interface.  This is
-   because most Sony interfaces are set up with DMA and interrupts
-   disables.  Some (like mine) do not even have the capability to
-   handle interrupts or DMA.  For this reason you will see a lot of
-   the following:
-  
-     retry_count = jiffies+ SONY_JIFFIES_TIMEOUT;
-     while ((retry_count > jiffies) && (! <some condition to wait for))
-     {
-        while (handle_sony_cd_attention())
-           ;
-  
-        sony_sleep();
-     }
-     if (the condition not met)
-     {
-        return an error;
-     }
-  
-   This ugly hack waits for something to happen, sleeping a little
-   between every try.  it also handles attentions, which are
-   asynchronous events from the drive informing the driver that a disk
-   has been inserted, removed, etc.
-  
-   NEWS FLASH - The driver now supports interrupts but they are
-   turned off by default.  Use of interrupts is highly encouraged, it
-   cuts CPU usage down to a reasonable level.  I had DMA in for a while
-   but PC DMA is just too slow.  Better to just insb() it.
-  
-   One thing about these drives: They talk in MSF (Minute Second Frame) format.
-   There are 75 frames a second, 60 seconds a minute, and up to 75 minutes on a
-   disk.  The funny thing is that these are sent to the drive in BCD, but the
-   interface wants to see them in decimal.  A lot of conversion goes on.
-  
-   DRIVER SPECIAL FEATURES
-   -----------------------
-  
-   This section describes features beyond the normal audio and CD-ROM
-   functions of the drive.
-  
-   2048 byte buffer mode
-  
-   If a disk is mounted with -o block=2048, data is copied straight
-   from the drive data port to the buffer.  Otherwise, the readahead
-   buffer must be involved to hold the other 1K of data when a 1K
-   block operation is done.  Note that with 2048 byte blocks you
-   cannot execute files from the CD.
-  
-   XA compatibility
-  
-   The driver should support XA disks for both the CDU31A and CDU33A.
-   It does this transparently, the using program doesn't need to set it.
-  
-   Multi-Session
-  
-   A multi-session disk looks just like a normal disk to the user.
-   Just mount one normally, and all the data should be there.
-   A special thanks to Koen for help with this!
-   
-   Raw sector I/O
-  
-   Using the CDROMREADAUDIO it is possible to read raw audio and data
-   tracks.  Both operations return 2352 bytes per sector.  On the data
-   tracks, the first 12 bytes is not returned by the drive and the value
-   of that data is indeterminate.
-  
-  
-    Copyright (C) 1993  Corey Minyard
-  
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-  
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-  
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-  
-  /
 
-/*
+Crude Table of Contents
+-----------------------
+
+  Setting Up the Hardware
+  Configuring the Kernel
+  Configuring as a Module
+  Driver Special Features
+
   
-   Setting up the Sony CDU31A/CDU33A drive interface card.  If
-   You have another card, you are on your own.
+This device driver handles Sony CDU31A/CDU33A CDROM drives and
+provides a complete block-level interface as well as an ioctl()
+interface as specified in include/linux/cdrom.h).  With this
+interface, CDROMs can be accessed, standard audio CDs can be played
+back normally, and CD audio information can be read off the drive.
+
+Note that this will only work for CDU31A/CDU33A drives.  Some vendors
+market their drives as CDU31A compatible.  They lie.  Their drives are
+really CDU31A hardware interface compatible (they can plug into the
+same card).  They are not software compatible.
+
+Setting Up the Hardware
+-----------------------
+
+The CDU31A driver in unable to safely tell if an interface card is
+present that it can use because the interface card does not announce
+its presence in any way besides placing 4 I/O locations in memory.  It
+used to just probe memory and attempt commands, but Linus wisely asked
+me to remove that because it could really screw up other hardware in
+the system.
+
+Because of this, you must tell the kernel where the drive interface
+is, what interrupts are used, and possibly if you are on a PAS-16
+soundcard.
+
+If you have the Sony CDU31A/CDU33A drive interface card, the following
+diagram will help you set it up.  If You have another card, you are on
+your own.  You need to make sure that the I/O address and interrupt is
+not used by another card in the system.  You will need to know the I/O
+address and interrupt you have set.  Note that use of interrupts is
+highly recommended, if possible, it really cuts down on CPU used.
+Unfortunately, most soundcards do not support interrupts for their
+CDROM interfaces.  By default, the Sony interface card comes with
+interrupts disabled.
    
         +----------+-----------------+----------------------+
         |  JP1     |  34 Pin Conn    |                      |
@@ -158,3 +98,99 @@
    
                   The documentation states to set this for interrupt
                   4, but I think that is a mistake.
+
+Note that if you have another interface card, you will need to look at
+the documentation to find the I/O base address.  This is specified to
+the SLCD.SYS driver for DOS with the /B: parameter, so you can look at
+you DOS driver setup to find the address, if necessary.
+
+Configuring the Kernel
+----------------------
+
+You must tell the kernel where the drive is at boot time.  This can be
+done at the Linux boot prompt, by using LILO, or by using Bootlin.
+Note that this is no substitute for HOWTOs and LILO documentation, if
+you are confused please read those for info on bootline configuration
+and LILO.
+
+At the linux boot prompt, press the ALT key and add the following line
+after the boot name (you can let the kernel boot, it will tell you the
+default boot name while booting):
+
+	cdu31a=<base address>,<interrupt>[,PAS]
+
+The base address needs to have "0x" in front of it, since it is in
+hex.  For instanc, to configure a drive at address 320 on interrupt 5,
+use the following:
+
+	cdu31a=0x320,5
+
+I use the following boot line:
+
+	cdu31a=0x1f88,0,PAS
+
+because I have a PAS-16 which does not support interrupt for the
+CDU31A interface.
+
+Adding this as an append line at the beginning of the /etc/lilo.conf
+file will set it for lilo configurations.  I have the following as the
+first line in my lilo.conf file:
+
+	append="cdu31a=0x1f88,0"
+
+I'm not sure how to set up Bootlin (I have never used it), if someone
+would like to fill in this section please do.
+
+
+Configuring as a Module
+-----------------------
+
+The driver supports loading as a module.  However, you must specify
+the boot address and interrupt on the boot line to insmod.  You can't
+use modprobe to load it, since modprobe doesn't support setting
+variables.
+
+Anyway, I use the following line to load my driver as a module
+
+  /sbin/insmod /lib/modules/`uname -r`/misc/cdu31a.o cdu31a_port=0x1f88
+
+You can set the following variables in the driver:
+
+  cdu31a_port=<I/O address> - sets the base I/O.  If hex, put 0x in
+			      front of it.  This must be specified.
+
+  cdu31a_irq=<interrupt> - Sets the interrupt number.  Leaving this
+			   off will turn interrupts off.
+
+
+Driver Special Features
+-----------------------
+
+This section describes features beyond the normal audio and CD-ROM
+functions of the drive.
+
+2048 byte buffer mode
+
+If a disk is mounted with -o block=2048, data is copied straight from
+the drive data port to the buffer.  Otherwise, the readahead buffer
+must be involved to hold the other 1K of data when a 1K block
+operation is done.  Note that with 2048 byte blocks you cannot execute
+files from the CD.
+
+XA compatibility
+
+The driver should support XA disks for both the CDU31A and CDU33A.  It
+does this transparently, the using program doesn't need to set it.
+
+Multi-Session
+
+A multi-session disk looks just like a normal disk to the user.  Just
+mount one normally, and all the data should be there.  A special
+thanks to Koen for help with this!
+
+Raw sector I/O
+
+Using the CDROMREADAUDIO it is possible to read raw audio and data
+tracks.  Both operations return 2352 bytes per sector.  On the data
+tracks, the first 12 bytes is not returned by the drive and the value
+of that data is indeterminate.
diff -u --recursive --new-file v1.3.36/linux/Documentation/networking/arcnet.txt linux/Documentation/networking/arcnet.txt
--- v1.3.36/linux/Documentation/networking/arcnet.txt	Sat Sep  9 15:26:50 1995
+++ linux/Documentation/networking/arcnet.txt	Sat Oct 28 16:00:49 1995
@@ -45,27 +45,24 @@
 			
 These are the ARCnet drivers for Linux.
 
-This new "stable" release has come from many months of on-and-off effort
-from me (Avery Pennarun), many bug reports from users, and in particular a
-lot of input and coding from Tomasz Motylewski.  (I've held off on Tomasz'
-latest patches - but his all-new RFC1051 support is here and waiting for the
-next ALPHA release!)
+This new release has resulted from many months of on-and-off effort from me
+(Avery Pennarun), many bug reports from users, and in particular a lot of
+input and coding from Tomasz Motylewski.  Starting with ARCnet 2.10 ALPHA,
+Tomasz's all-new-and-improved RFC1051 support has been included and seems to
+be working fine!
 
 
 Where do I discuss these drivers?
 ---------------------------------
 
-There is a mailing list specifically for discussion of the ARCnet drivers
-for Linux, and anything you might want to interface them with (ie. DOS). 
-I'll also post new versions of the Linux-ARCnet distribution to the list in
-tar-gzip-uuencode format.
-
-To subscribe to the list, send a message to listserv@807-city.on.ca
-with the following line in the BODY (not the SUBJECT) of your message:
-	subscribe linux-arcnet YOUR REAL NAME
-Remember to remove your signature, or you'll get an error back.
+BOINGY - the linux-arcnet@807-city.on.ca mailing list is now so unstable
+that I can't recommend people even bother with it.  I no longer have an
+account on 807-CITY (though they still graciously forward my mail to me) so
+there's not much I can do.  If there's sufficient interest (e-mail me!) I
+will set one up at my new address, Foxnet.
 
-Send all bug (or success) reports to me or to the list.
+Send all bug (or success) reports to me, then, not the list, since (as I
+mentioned) the list doesn't work.
 
 The people on linux-net@vger.rutgers.edu have also been known to be very
 helpful, especially when we're talking about ALPHA Linux kernels that may or
@@ -93,9 +90,29 @@
 You can get the Crynwr packet driver collection (including arcether.com, the
 one you'll want to use with arcnet cards) from
 oak.oakland.edu:/simtel/msdos/pktdrvr. It won't work perfectly on a 386+
-without patches, though, and also doesn't like several cards.  Mail me if
-you want a fixed version.  (Ahem: I may or may not have a 100% fixed version
-by the time I get your mail!)
+without patches, though, and also doesn't like several cards.  Fixed
+versions are available on my WWW page, or via e-mail if you don't have WWW
+access. 
+
+
+Installing the Driver
+---------------------
+
+If this driver was included as part of your Linux kernel source, all you
+will need to do in order to install it is:
+	make config
+		(be sure to choose ARCnet under "other ISA cards")
+	make dep
+	make clean
+	make zImage
+	
+If you obtained this ARCnet package as an upgrade to the ARCnet driver in
+your current kernel, you will need to first copy arcnet.c over the one in
+the linux/drivers/net directory.
+
+You will know the driver is installed properly if you get a lot of ARCnet
+messages when you boot into the new Linux kernel.  (These messages can be
+disabled by taking D_INIT out of the list of debug flags in arcnet.c.)
 
 
 Loadable Module Support
@@ -113,9 +130,9 @@
 	make zImage
 	make modules
 	
-If you're using a loadable module, you need to use insmod to load the
-module, and you need to specify various characteristics of your card on the
-command line.  For example:
+If you're using a loadable module, you need to use insmod to load it, and
+you need to specify various characteristics of your card on the command
+line.  For example:
 	cd /usr/src/linux/modules
 	insmod arcnet.o io=0x300 irqnum=2 shmem=0xd0000
 You can also add a num=1, num=2 etc for additional arcnet cards that will
@@ -145,12 +162,21 @@
         is also a DOS-based NFS server called SOSS.  It doesn't multitask
         quite the way Linux does (actually, it doesn't multitask AT ALL) but
         you never know what you might need.
+        
+        With AmiTCP (and possibly others), you may need to set the following
+        options in your Amiga nfstab:  MD 1024 MR 1024 MW 1024
+        (Thanks to Christian Gottschling <ferksy@indigo.tng.oche.de>
+	for this.)
+	
+	Probably these refer to maximum NFS data/read/write block sizes.  I
+	don't know why the defaults on the Amiga didn't work; write to me if
+	you know more.
 
 DOS: If you're using the freeware arcether.com, you might want to install
-        the source code patch.  It helps with PC/TCP, and also can get
-        arcether to load if it timed out too quickly during initialization. 
-        Mail me if you need a precompiled version of arcether.com. (ie. you
-        if don't have a DOS assembler)
+        the driver patch from my web page.  It helps with PC/TCP, and also
+        can get arcether to load if it timed out too quickly during
+        initialization.  In fact, if you use it on a 386+ you REALLY need
+        the patch, really.
 	
 Windows:  See DOS :)  Trumpet Winsock works fine with either the Novell or
 	Arcether client, assuming you remember to load winpkt of course.
@@ -159,10 +185,10 @@
         are incompatible with the internet standard.  They try to pretend
         the cards are ethernet, and confuse everyone else on the network. 
         
-        However, v2.00 of the Linux ARCnet driver supports this protocol via
-        the 'arc0e' device.  See the section on "Multiprotocol Support" for
-	more information.
-        
+        However, v2.00 and higher of the Linux ARCnet driver supports this
+        protocol via the 'arc0e' device.  See the section on "Multiprotocol
+        Support" for more information.
+
 	Using the freeware Samba server and clients for Linux, you can now
 	interface quite nicely with TCP/IP-based WfWg or Lan Manager
 	networks.
@@ -182,24 +208,25 @@
 	installing it under Warp, however.  Please mail me with any results.
 
 NetBSD/AmiTCP: These use an old version of the Internet standard ARCnet
-	protocol (RFC1051) which is incompatible with the Linux driver at
-	present.  Work to support these is underway and should be available
-	in an ALPHA release very soon.
-	
+	protocol (RFC1051) which is compatible with the Linux driver v2.10
+	ALPHA and above using the arc0s device. (See "Multiprotocol ARCnet"
+	below.)
+
 
 Using Multiprotocol ARCnet
 --------------------------
 
-The ARCnet driver v2.00 supports two protocols, each on its own "virtual
-network device":
+The ARCnet driver v2.10 ALPHA supports three protocols, each on its own
+"virtual network device":
+
 	arc0  - RFC1201 protocol, the official internet standard which just
 		happens to be 100% compatible with Novell's TRXNET driver. 
-		Version 1.00 of the ARCnet driver _only_ supported this
-		protocol.  arc0 is the faster of the two protocols, and
-		allows larger packets to be used because it supports RFC1201
-		"packet splitting" operations.  Unless you have a specific
-		need to use a different protocol, I highly suggest that you
-		stick with this one.
+		Version 1.00 of the ARCnet driver supported _only_ this
+		protocol.  arc0 is the fastest of the three protocols (for
+		whatever reason), and allows larger packets to be used
+		because it supports RFC1201 "packet splitting" operations. 
+		Unless you have a specific need to use a different protocol,
+		I strongly suggest that you stick with this one.
 		
 	arc0e - "Ethernet-Encapsulation" which sends packets over ARCnet
 		that are actually a lot like Ethernet packets, including the
@@ -207,16 +234,30 @@
 		Microsoft's NDIS ARCnet driver, like the one in WfWg and
 		LANMAN.  Because the MTU of 493 is actually smaller than the
 		one "required" by TCP/IP (576), there is a chance that some
-		network operations will not work properly.  The Linux TCP/IP
-		layer can compensate in most cases, however, by
+		network operations will not function properly.  The Linux
+		TCP/IP layer can compensate in most cases, however, by
 		automatically fragmenting the TCP/IP packets to make them
 		fit.  arc0e also works slightly more slowly than arc0, for
 		reasons yet to be determined.  (Probably it's the smaller
-		MTU that does it)
+		MTU that does it.)
+		
+	arc0s - The "[s]imple" RFC1051 protocol is the "previous" internet
+		standard that is completely incompatible with the new
+		standard.  Some software today, however, continues to
+		support the old standard (and only the old standard)
+		including NetBSD and AmiTCP.  RFC1051 also does not support
+		RFC1201's packet splitting, and the MTU of 507 is still
+		smaller than the internet "requirement," so it's quite
+		possible that you may run into problems.  It's also slower
+		than RFC1201 by about 25%, for the same reason as arc0e.
+		
+		The arc0s support was contributed by Tomasz Motylewski
+		and modified somewhat by me.  Bugs are probably my fault.
 
-The arc0e device is created automatically when you first 'ifconfig' the arc0
-device.  To actually use arc0e, though, you need to 'ifconfig' it as well. 
-There are a number of ways you can set up your network then:
+The arc0e and arc0s devices are created automatically when you first
+'ifconfig' the arc0 device.  To actually use them, though, you need to also
+'ifconfig' the other virtual devices you need.  There are a number of ways
+you can set up your network then:
 
 
 1. Single Protocol.
@@ -230,29 +271,33 @@
    	ifconfig arc0 MY.IP.ADD.RESS
    	route add MY.IP.ADD.RESS arc0
    	route add SUB.NET.ADD.RESS arc0
-   	[etc]
+   	[add other local routes here]
    	
    If you need arc0e (and only arc0e), it's a little different:
-   	ifconfig arc0 up     /* the IP address doesn't matter on arc0 */
+   	ifconfig arc0 MY.IP.ADD.RESS
    	ifconfig arc0e MY.IP.ADD.RESS
    	route add MY.IP.ADD.RESS arc0e
    	route add SUB.NET.ADD.RESS arc0e
+   
+   arc0s works much the same way as arc0e.
 
 
 2. More than one protocol on the same wire.
 
    Now things start getting confusing.  To even try it, you may need to be
-   partly crazy.  Here's what *I* did.  :)
+   partly crazy.  Here's what *I* did. :) Note that I don't include arc0s in
+   my home network; I don't have any NetBSD or AmiTCP computers, so I only
+   use arc0s during limited testing.
 
    I have three computers on my home network; two Linux boxes (which prefer
-   RFC1201 protocol), and one XT that can't run Linux but runs the free
-   Microsoft LANMAN Client instead.
-   
+   RFC1201 protocol, for reasons listed above), and one XT that can't run
+   Linux but runs the free Microsoft LANMAN Client instead.
+
    Worse, one of the Linux computers (freedom) also has a modem and acts as
-   a router to my information provider.  The other Linux box (insight) also
-   has its own IP address and needs to use freedom as its default gateway. 
-   The XT (patience), however, does not have its own internet IP address and
-   so I assigned it one on a "private subnet" (as defined by RFC1597).
+   a router to my internet provider.  The other Linux box (insight) also has
+   its own IP address and needs to use freedom as its default gateway.  The
+   XT (patience), however, does not have its own internet IP address and so
+   I assigned it one on a "private subnet" (as defined by RFC1597).
    
    To start with, take a simple network with just insight and freedom. 
    Insight needs to:
@@ -372,13 +417,13 @@
 commands, as well as any pertinent log entries (ie: anything that starts
 with "arcnet:" and has shown up since the last reboot) in your mail.
 
-If you want to try fixing it yourself (I highly recommend that you mail me
+If you want to try fixing it yourself (I strongly recommend that you mail me
 about the problem first, since it might already have been solved) you may
 want to try some of the debug levels available.  For heavy testing on
-D_DURING or more, it would be a REALLY good idea to kill your klogd
-daemon first!  D_DURING displays 4-5 lines for each packet sent or
-received.  D_TX and RX actually DISPLAY each packet as it is sent or
-received, which is obviously quite big.
+D_DURING or more, it would be a REALLY good idea to kill your klogd daemon
+first!  D_DURING displays 4-5 lines for each packet sent or received.  D_TX
+and RX actually DISPLAY each packet as it is sent or received, which is
+obviously quite big.
 
 You can run the arcdump shell script (available from me or in the full
 ARCnet package if you got it) as root to list the contents of the arcnet
@@ -399,7 +444,7 @@
 	ifconfig arc0 down metric 1xxx
 	/etc/rc.d/rc.inet1
 where "xxx" is the debug level you want.  For example, "metric 1015" would put
-you at debug level 15.  Debug level 3 is currently the default.
+you at debug level 15.  Debug level 7 is currently the default.
 
 Note that the debug level is (as of v1.90 ALPHA) a binary combination of
 different debug flags; so debug level 7 is really 1+2+4 or
diff -u --recursive --new-file v1.3.36/linux/Makefile linux/Makefile
--- v1.3.36/linux/Makefile	Mon Oct 23 18:02:00 1995
+++ linux/Makefile	Tue Oct 24 15:56:01 1995
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 3
-SUBLEVEL = 36
+SUBLEVEL = 37
 
 ARCH = i386
 
@@ -251,7 +251,7 @@
 	rm -f drivers/scsi/aic7xxx_asm drivers/scsi/aic7xxx_seq.h
 	rm -f drivers/char/uni_hash.tbl drivers/char/conmakehash
 	rm -f .version .config* config.in config.old
-	rm -f scripts/tkparse scripts/kconfig.tk
+	rm -f scripts/tkparse scripts/kconfig.tk scripts/kconfig.tmp
 	rm -f include/asm
 	rm -f .depend `find . -name .depend -print`
 	rm -f .hdepend
diff -u --recursive --new-file v1.3.36/linux/arch/alpha/boot/main.c linux/arch/alpha/boot/main.c
--- v1.3.36/linux/arch/alpha/boot/main.c	Thu Jun  1 13:22:05 1995
+++ linux/arch/alpha/boot/main.c	Tue Oct 24 16:19:41 1995
@@ -24,13 +24,36 @@
 int printk(const char * fmt, ...)
 {
 	va_list args;
-	int i;
+	int i, j, written, remaining, num_nl;
 	static char buf[1024];
+	char * str;
 
 	va_start(args, fmt);
 	i = vsprintf(buf, fmt, args);
 	va_end(args);
-	puts(buf,i);
+
+	/* expand \n into \r\n: */
+
+	num_nl = 0;
+	for (j = 0; j < i; ++j) {
+	    if (buf[j] == '\n')
+	    	++num_nl;
+	}
+	remaining = i + num_nl;
+	for (j = i - 1; j >= 0; --j) {
+	    buf[j + num_nl] = buf[j];
+	    if (buf[j] == '\n') {
+	    	--num_nl;
+		buf[j + num_nl] = '\r';
+	    }
+	}
+
+	str = buf;
+	do {
+	    written = puts(str, remaining);
+	    remaining -= written;
+	    str += written;
+	} while (remaining > 0);
 	return i;
 }
 
diff -u --recursive --new-file v1.3.36/linux/arch/alpha/config.in linux/arch/alpha/config.in
--- v1.3.36/linux/arch/alpha/config.in	Mon Oct 23 18:02:00 1995
+++ linux/arch/alpha/config.in	Fri Oct 27 08:07:30 1995
@@ -14,7 +14,8 @@
 fi
 
 choice 'Alpha system type' \
-	"Jensen		CONFIG_ALPHA_JENSEN		\
+	"Avanti		CONFIG_ALPHA_AVANTI		\
+	 Jensen		CONFIG_ALPHA_JENSEN		\
 	 Noname		CONFIG_ALPHA_NONAME		\
 	 Cabriolet	CONFIG_ALPHA_CABRIOLET		\
 	 EB66		CONFIG_ALPHA_EB66		\
@@ -87,7 +88,7 @@
 comment 'Sound'
 
 tristate 'Sound card support' CONFIG_SOUND
-if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then
+if [ "$CONFIG_SOUND" != "n" ]; then
   source drivers/sound/Config.in
 fi
 
diff -u --recursive --new-file v1.3.36/linux/arch/alpha/defconfig linux/arch/alpha/defconfig
--- v1.3.36/linux/arch/alpha/defconfig	Mon Oct 23 18:02:00 1995
+++ linux/arch/alpha/defconfig	Tue Oct 24 11:59:39 1995
@@ -13,7 +13,7 @@
 CONFIG_PCI_OPTIMIZE=y
 CONFIG_NET=y
 CONFIG_SYSVIPC=y
-CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_ELF is not set
 
 #
 # Loadable module support
diff -u --recursive --new-file v1.3.36/linux/arch/alpha/kernel/apecs.c linux/arch/alpha/kernel/apecs.c
--- v1.3.36/linux/arch/alpha/kernel/apecs.c	Fri Oct  6 14:35:13 1995
+++ linux/arch/alpha/kernel/apecs.c	Tue Oct 24 16:19:41 1995
@@ -28,7 +28,7 @@
 #ifdef CONFIG_ALPHA_APECS
 
 #ifdef DEBUG
-# define DBG(args)	printk(args)
+# define DBG(args)	printk args
 #else
 # define DBG(args)
 #endif
@@ -120,6 +120,21 @@
 	unsigned int stat0, value;
 	unsigned int haxr2 = 0; /* to keep gcc quiet */
 
+#ifdef CONFIG_ALPHA_AVANTI
+	register long s0 asm ("9");
+	register long s1 asm ("10");
+	register long s2 asm ("11");
+	register long s3 asm ("12");
+	register long s4 asm ("13");
+	register long s5 asm ("14");
+	asm volatile ("# %0" : "r="(s0));/* SRM X4.2 on Avanti steps on this */
+	asm volatile ("# %0" : "r="(s1));/* SRM X4.2 on Avanti steps on this */
+	asm volatile ("# %0" : "r="(s2));/* SRM X4.2 on Avanti steps on this */
+	asm volatile ("# %0" : "r="(s3));/* SRM X4.2 on Avanti steps on this */
+	asm volatile ("# %0" : "r="(s4));/* SRM X4.2 on Avanti steps on this */
+	asm volatile ("# %0" : "r="(s5));/* SRM X4.2 on Avanti steps on this */
+#endif
+
 	save_flags(flags);	/* avoid getting hit by machine check */
 	cli();
 
@@ -185,6 +200,14 @@
 		mb();
 	}
 	restore_flags(flags);
+#ifdef CONFIG_ALPHA_AVANTI
+	asm volatile ("# %0" :: "r"(s0));/* SRM X4.2 on Avanti steps on this */
+	asm volatile ("# %0" :: "r"(s1));/* SRM X4.2 on Avanti steps on this */
+	asm volatile ("# %0" :: "r"(s2));/* SRM X4.2 on Avanti steps on this */
+	asm volatile ("# %0" :: "r"(s3));/* SRM X4.2 on Avanti steps on this */
+	asm volatile ("# %0" :: "r"(s4));/* SRM X4.2 on Avanti steps on this */
+	asm volatile ("# %0" :: "r"(s5));/* SRM X4.2 on Avanti steps on this */
+#endif
 	return value;
 }
 
@@ -383,8 +406,8 @@
 #ifdef CONFIG_ALPHA_CABRIOLET
 	/*
 	 * JAE: HACK!!! for now, hardwire if configured...
-	 * davidm: miniloader doesn't seem to get clockfrequency
-	 * right, so fix for now.
+	 * davidm: Older miniloader versions don't set the clockfrequency
+	 * right, so hardcode it for now.
 	 */
 	if (hwrpb->sys_type == ST_DEC_EB64P) {
 		hwrpb->sys_type = ST_DEC_EBPC64;
@@ -438,12 +461,14 @@
 	DBG(("apecs_machine_check: expected %d DCSR 0x%lx PEAR 0x%lx\n",
 	     apecs_mcheck_expected, mchk_sysdata->epic_dcsr, mchk_sysdata->epic_pear));
 #ifdef DEBUG
-	unsigned long *ptr;
-	int i;
+	{
+	    unsigned long *ptr;
+	    int i;
 
-	ptr = (unsigned long *)la_ptr;
-	for (i = 0; i < mchk_header->size / sizeof(long); i += 2) {
-		printk(" +%x %lx %lx\n", i*sizeof(long), ptr[i], ptr[i+1]);
+	    ptr = (unsigned long *)la_ptr;
+	    for (i = 0; i < mchk_header->size / sizeof(long); i += 2) {
+		printk(" +%lx %lx %lx\n", i*sizeof(long), ptr[i], ptr[i+1]);
+	    }
 	}
 #endif /* DEBUG */
 
diff -u --recursive --new-file v1.3.36/linux/arch/alpha/kernel/bios32.c linux/arch/alpha/kernel/bios32.c
--- v1.3.36/linux/arch/alpha/kernel/bios32.c	Fri Oct  6 14:35:13 1995
+++ linux/arch/alpha/kernel/bios32.c	Tue Oct 24 16:19:41 1995
@@ -541,29 +541,40 @@
 
 
 /*
- * Fixup configuration for Noname boards (AXPpci33).
+ * Fixup configuration for Noname (AXPpci33) and Avanti (AlphaStation 240).
  */
-static inline void noname_fixup(void)
+static inline void avanti_and_noname_fixup(void)
 {
 	struct pci_dev *dev;
 	/*
 	 * The Noname board has 5 PCI slots with each of the 4
 	 * interrupt pins routed to different pins on the PCI/ISA
-	 * bridge (PIRQ0-PIRQ3).  I don't have any information yet as
-	 * to how INTB, INTC, and INTD get routed (4/12/95,
-	 * davidm@cs.arizona.edu).  pirq_tab[0] is a fake entry to
-	 * deal with old PCI boards that have the interrupt pin number
-	 * hardwired to 0 (meaning that they use the default INTA
-	 * line, if they are interrupt driven at all).
+	 * bridge (PIRQ0-PIRQ3).  The table below is based on
+	 * information available at:
+	 *
+	 *   http://ftp.digital.com/pub/DEC/axppci/ref_interrupts.txt
+	 *
+	 * I have no information on the Avanti interrupt routing, but
+	 * the routing seems to be identical to the Noname except
+	 * that the Avanti has an additional slot whose routing I'm
+	 * unsure of.
+	 *
+	 * pirq_tab[0] is a fake entry to deal with old PCI boards
+	 * that have the interrupt pin number hardwired to 0 (meaning
+	 * that they use the default INTA line, if they are interrupt
+	 * driven at all).
 	 */
-	static const char pirq_tab[7][5] = {
-		{ 3,  3, -1, -1, -1}, /* idsel  6 (53c810) */ 
-		{-1, -1, -1, -1, -1}, /* idsel  7 (PCI/ISA bridge) */
+	static const char pirq_tab[][5] = {
+		{ 3,  3,  3,  3,  3}, /* idsel  6 (53c810) */ 
+		{-1, -1, -1, -1, -1}, /* idsel  7 (SIO: PCI/ISA bridge) */
 		{ 2,  2, -1, -1, -1}, /* idsel  8 (slot closest to ISA) */
 		{-1, -1, -1, -1, -1}, /* idsel  9 (unused) */
 		{-1, -1, -1, -1, -1}, /* idsel 10 (unused) */
-		{ 0,  0, -1, -1, -1}, /* idsel 11 (slot furthest from ISA) */
-		{ 1,  1, -1, -1, -1}, /* idsel 12 (middle slot) */
+		{ 0,  0,  2,  1,  0}, /* idsel 11 (slot furthest from ISA) KN25_PCI_SLOT0 */
+		{ 1,  1,  0,  2,  1}, /* idsel 12 (middle slot) KN25_PCI_SLOT1 */
+#ifdef CONFIG_ALPHA_AVANTI
+		{ 1,  1, -1, -1, -1}, /* idsel 13 KN25_PCI_SLOT2 ??? */
+#endif /* CONFIG_ALPHA_AVANTI */
 	};
 	/*
 	 * route_tab selects irq routing in PCI/ISA bridge so that:
@@ -571,6 +582,9 @@
 	 *		PIRQ1 -> irq  9
 	 *		PIRQ2 -> irq 10
 	 *		PIRQ3 -> irq 11
+	 *
+	 * This probably ought to be configurable via MILO.  For
+	 * example, sound boards seem to like using IRQ 9.
 	 */
 	const unsigned int route_tab = 0x0b0a090f;
 	unsigned char pin;
@@ -587,13 +601,13 @@
 	for (dev = pci_devices; dev; dev = dev->next) {
 		dev->irq = 0;
 		if (dev->bus->number != 0 ||
-		    PCI_SLOT(dev->devfn) < 6 || PCI_SLOT(dev->devfn) > 12)
+		    PCI_SLOT(dev->devfn) < 6 ||
+		    PCI_SLOT(dev->devfn) >= 6 + sizeof(pirq_tab)/sizeof(pirq_tab[0]))
 		{
-			printk("noname_set_irq: no dev on bus %d, slot %d!!\n",
+			printk("bios32.avanti_and_noname_fixup: no dev on bus %d, slot %d!!\n",
 			       dev->bus->number, PCI_SLOT(dev->devfn));
 			continue;
 		}
-
 		pcibios_read_config_byte(dev->bus->number, dev->devfn,
 					 PCI_INTERRUPT_PIN, &pin);
 		pirq = pirq_tab[PCI_SLOT(dev->devfn) - 6][pin];
@@ -644,8 +658,8 @@
 	/*
 	 * Now is the time to do all those dirty little deeds...
 	 */
-#if defined(CONFIG_ALPHA_NONAME)
-	noname_fixup();
+#if defined(CONFIG_ALPHA_NONAME) || defined(CONFIG_ALPHA_AVANTI)
+	avanti_and_noname_fixup();
 #elif defined(CONFIG_ALPHA_CABRIOLET)
 	cabriolet_fixup();
 #elif defined(CONFIG_ALPHA_EB66P)
diff -u --recursive --new-file v1.3.36/linux/arch/alpha/kernel/entry.S linux/arch/alpha/kernel/entry.S
--- v1.3.36/linux/arch/alpha/kernel/entry.S	Fri Oct 13 14:44:32 1995
+++ linux/arch/alpha/kernel/entry.S	Tue Oct 24 16:19:41 1995
@@ -606,7 +606,7 @@
 	.quad sys_open, do_entSys, sys_getxgid, osf_sigprocmask, do_entSys
 /*50*/	.quad do_entSys, sys_acct, do_entSys, do_entSys, sys_ioctl
 	.quad do_entSys, do_entSys, sys_symlink, sys_readlink, sys_execve
-	.quad sys_umask, do_entSys, do_entSys, sys_getpgrp, sys_getpagesize
+	.quad sys_umask, sys_chroot, do_entSys, sys_getpgrp, sys_getpagesize
 	.quad do_entSys, osf_vfork, sys_newstat, sys_newlstat, do_entSys
 	.quad do_entSys, osf_mmap, do_entSys, sys_munmap, sys_mprotect
 	.quad sys_madvise, sys_vhangup, do_entSys, do_entSys, sys_getgroups
diff -u --recursive --new-file v1.3.36/linux/arch/alpha/kernel/irq.c linux/arch/alpha/kernel/irq.c
--- v1.3.36/linux/arch/alpha/kernel/irq.c	Mon Oct 16 18:38:21 1995
+++ linux/arch/alpha/kernel/irq.c	Tue Oct 24 16:19:41 1995
@@ -30,11 +30,11 @@
 static unsigned char cache_21 = 0xff;
 static unsigned char cache_A1 = 0xff;
 
-#if defined(CONFIG_ALPHA_CABRIOLET) || defined(CONFIG_ALPHA_EB66P)
+#if NR_IRQS == 33
   static unsigned char cache_804 = 0xef;
   static unsigned char cache_805 = 0xff;
   static unsigned char cache_806 = 0xff;
-#elif defined(CONFIG_ALPHA_EB66) || defined(CONFIG_ALPHA_EB64P)
+#elif NR_IRQS == 32
   static unsigned char cache_26 = 0xdf;
   static unsigned char cache_27 = 0xff;
 #endif
@@ -54,7 +54,7 @@
 	} else if (irq_nr < 16) {
 		cache_A1 |= mask;
 		outb(cache_A1,0xA1);
-#if defined(CONFIG_ALPHA_CABRIOLET) || defined(CONFIG_ALPHA_EB66P)
+#if NR_IRQS == 33
 	} else if (irq_nr < 24) {
 		cache_804 |= mask;
 		outb(cache_804, 0x804);
@@ -64,7 +64,7 @@
 	} else {
 		cache_806 |= mask;
 		outb(cache_806, 0x806);
-#elif defined(CONFIG_ALPHA_EB66) || defined(CONFIG_ALPHA_EB64P) 
+#elif NR_IRQS == 32 
 	} else if (irq_nr < 24) {
 		cache_26 |= mask;
 		outb(cache_26, 0x26);
@@ -91,7 +91,7 @@
 	} else if (irq_nr < 16) {
 		cache_A1 &= mask;
 		outb(cache_A1,0xA1);
-#if defined(CONFIG_ALPHA_CABRIOLET) || defined(CONFIG_ALPHA_EB66P)
+#if NR_IRQS == 33
 	} else if (irq_nr < 24) {
 		cache_804 &= mask;
 		outb(cache_804, 0x804);
@@ -101,7 +101,7 @@
 	} else {
 		cache_806 &= mask;
 		outb(cache_806, 0x806);
-#elif defined(CONFIG_ALPHA_EB66) || defined(CONFIG_ALPHA_EB64P)
+#elif NR_IRQS == 32
 	} else if (irq_nr < 24) {
 		cache_26 &= mask;
 		outb(cache_26, 0x26);
@@ -166,7 +166,7 @@
 	} else if (irq < 16) {
 		cache_A1 |= mask;
 		outb(cache_A1, 0xA1);
-#if defined(CONFIG_ALPHA_CABRIOLET) || defined(CONFIG_ALPHA_EB66P)
+#if NR_IRQS == 33
 	} else if (irq < 24) {
 		cache_804 |= mask;
 		outb(cache_804, 0x804);
@@ -176,7 +176,7 @@
 	} else {
 		cache_806 |= mask;
 		outb(cache_806, 0x806);
-#elif defined(CONFIG_ALPHA_EB66) || defined(CONFIG_ALPHA_EB66P)
+#elif NR_IRQS == 32
 	} else if (irq < 24) {
 		cache_26 |= mask;
 		outb(cache_26, 0x26);
@@ -197,7 +197,7 @@
 	} else if (irq < 16) {
 		cache_A1 &= mask;
 		outb(cache_A1, 0xA1);
-#if defined(CONFIG_ALPHA_CABRIOLET) || defined(CONFIG_ALPHA_EB66P)
+#if NR_IRQS == 33
 	} else if (irq < 24) {
 		cache_804 &= mask;
 		outb(cache_804, 0x804);
@@ -295,8 +295,6 @@
 	outb(0x0c, 0x2fc);
 	outb(0,0x61);
 	outb(0,0x461);
-#elif defined(CONFIG_ALPHA_NONAME)
-	printk("61=%02x, 64=%02x, 60=%02x\n", inb(0x61), inb(0x64), inb(0x60));
 #endif
 }
 
@@ -507,11 +505,11 @@
 	
 	/* now filter out any obviously spurious interrupts */
 	irqmask = (((unsigned long)cache_A1)<<8) | (unsigned long) cache_21;
-#if defined(CONFIG_ALPHA_CABRIOLET) || defined(CONFIG_ALPHA_EB66P)
+#if NR_IRQS == 33
 	irqmask |= ((((unsigned long)cache_804)<<16) |
 		    (((unsigned long)cache_805)<<24) |
 		    (((unsigned long)cache_806)<<24));
-#elif defined(CONFIG_ALPHA_EB66) || defined(CONFIG_ALPHA_EB64P)
+#elif NR_IRQS == 32
 	irqmask |= ((((unsigned long)cache_26)<<16) |
 		    (((unsigned long)cache_27)<<24));
 #endif
@@ -530,11 +528,11 @@
 	int i;
 	
 	irqmask = (((unsigned int)cache_A1)<<8) | (unsigned int)cache_21;
-#if defined(CONFIG_ALPHA_CABRIOLET) || defined(CONFIG_ALPHA_EB66P)
+#if NR_IRQS == 33
 	irqmask |= ((((unsigned long)cache_804)<<16) |
 		    (((unsigned long)cache_805)<<24) |
 		    (((unsigned long)cache_806)<<24));
-#elif defined(CONFIG_ALPHA_EB66) || defined(CONFIG_ALPHA_EB64P)
+#elif NR_IRQS == 32
 	irqmask |= ((((unsigned long)cache_26)<<16) |
 		    (((unsigned long)cache_27)<<24));
 #endif
@@ -575,14 +573,14 @@
 			return;
 		case 2:
 			machine_check(vector, la_ptr, &regs);
-			break;
+			return;
 		case 3:
 #if defined(CONFIG_ALPHA_JENSEN) || defined(CONFIG_ALPHA_NONAME) || \
     defined(CONFIG_ALPHA_SRM)
 			srm_device_interrupt(vector, &regs);
-#elif defined(CONFIG_ALPHA_CABRIOLET) || defined(CONFIG_ALPHA_EB66P)
+#elif NR_IRQS == 33
 			cabriolet_and_eb66p_device_interrupt(vector, &regs);
-#elif defined(CONFIG_ALPHA_EB66) || defined(CONFIG_ALPHA_EB64P)
+#elif NR_IRQS == 32
 			eb66_and_eb64p_device_interrupt(vector, &regs);
 #endif
 			return;
@@ -604,11 +602,11 @@
 	dma_outb(0, DMA2_RESET_REG);
 	dma_outb(0, DMA1_CLR_MASK_REG);
 	dma_outb(0, DMA2_CLR_MASK_REG);
-#if defined(CONFIG_ALPHA_CABRIOLET) || defined(CONFIG_ALPHA_EB66P)
+#if NR_IRQS == 33
 	outb(cache_804, 0x804);
 	outb(cache_805, 0x805);
 	outb(cache_806, 0x806);
-#elif defined(CONFIG_ALPHA_EB66) || defined(CONFIG_ALPHA_EB64P)
+#elif NR_IRQS == 32
 	outb(cache_26, 0x26);
 	outb(cache_27, 0x27);
 #endif
diff -u --recursive --new-file v1.3.36/linux/arch/alpha/kernel/lca.c linux/arch/alpha/kernel/lca.c
--- v1.3.36/linux/arch/alpha/kernel/lca.c	Tue Oct 10 18:46:30 1995
+++ linux/arch/alpha/kernel/lca.c	Tue Oct 24 16:19:41 1995
@@ -359,21 +359,6 @@
 		printk("    esr: %lx  ear: %lx\n", el.s->esr, el.s->ear);
 		printk("    dc_stat: %lx  ioc_stat0: %lx  ioc_stat1: %lx\n",
 		       el.s->dc_stat, el.s->ioc_stat0, el.s->ioc_stat1);
-		if (el.c->retry &&
-		    (el.s->esr & (ESR_EAV|ESR_CEE|ESR_UEE|ESR_NXM)) == (ESR_EAV|ESR_CEE))
-		{
-			unsigned long addr, val;
-
-			/* temporarily disable processor/system correctable error logging: */
-			wrmces(0x18);
-			addr = el.s->ear & ~ (0x7<<29 | 0x7);
-			addr += IDENT_ADDR;
-			printk("  correcting quadword at address %lx\n", addr);
-			val = *(volatile long *)addr;
-			*(volatile long *)addr = val;
-			/* reenable all machine checks: */
-			wrmces(0x00);
-		}
 		break;
 
 	      case sizeof(struct el_lca_mcheck_long):
diff -u --recursive --new-file v1.3.36/linux/arch/alpha/mm/init.c linux/arch/alpha/mm/init.c
--- v1.3.36/linux/arch/alpha/mm/init.c	Mon Sep 25 12:26:20 1995
+++ linux/arch/alpha/mm/init.c	Sat Oct 28 15:18:41 1995
@@ -22,7 +22,6 @@
 #include <asm/hwrpb.h>
 
 extern void scsi_mem_init(unsigned long);
-extern void sound_mem_init(void);
 extern void die_if_kernel(char *,struct pt_regs *,long);
 extern void show_net_buffers(void);
 
@@ -165,9 +164,6 @@
 
 #ifdef CONFIG_SCSI
 	scsi_mem_init(high_memory);
-#endif
-#ifdef CONFIG_SOUND
-	sound_mem_init();
 #endif
 
 	for (tmp = PAGE_OFFSET ; tmp < high_memory ; tmp += PAGE_SIZE) {
diff -u --recursive --new-file v1.3.36/linux/arch/i386/config.in linux/arch/i386/config.in
--- v1.3.36/linux/arch/i386/config.in	Mon Oct 23 18:02:00 1995
+++ linux/arch/i386/config.in	Fri Oct 27 08:06:14 1995
@@ -70,7 +70,7 @@
 comment 'Sound'
 
 tristate 'Sound card support' CONFIG_SOUND
-if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then
+if [ "$CONFIG_SOUND" != "n" ]; then
   source drivers/sound/Config.in
 fi
 
diff -u --recursive --new-file v1.3.36/linux/arch/i386/kernel/smp.c linux/arch/i386/kernel/smp.c
--- v1.3.36/linux/arch/i386/kernel/smp.c	Tue Oct 10 18:46:31 1995
+++ linux/arch/i386/kernel/smp.c	Sat Oct 28 15:18:23 1995
@@ -11,7 +11,9 @@
  *	later.
  *
  *	Fixes
- *		Felix Koop:	NR_CPUS used properly
+ *		Felix Koop	:	NR_CPUS used properly
+ *		Jose Renau	:	Handle single CPU case.
+ *		Alan Cox	:	By repeated request 8) - Total BogoMIP report.
  *
  */
 
@@ -57,7 +59,7 @@
 volatile unsigned long kernel_flag=0;			/* Kernel spinlock 					*/
 volatile unsigned char active_kernel_processor = NO_PROC_ID;	/* Processor holding kernel spinlock		*/
 volatile unsigned long kernel_counter=0;		/* Number of times the processor holds the lock		*/
-volatile unsigned long syscall_count=0;		/* Number of times the processor holds the syscall lock	*/
+volatile unsigned long syscall_count=0;			/* Number of times the processor holds the syscall lock	*/
 volatile unsigned long smp_spins=0;			/* Count of cycles wasted to spinning			*/
 
 volatile unsigned long ipi_count;			/* Number of IPI's delivered				*/
@@ -560,10 +562,22 @@
 	 *	Allow the user to impress friends.
 	 */
 	if(cpucount==0)
+	{
 		printk("Error: only one processor found.\n");
+		cpu_present_map=(1<<smp_processor_id());
+	}
 	else
 	{
-		printk("Total of %d processors activated.\n", cpucount+1);
+		unsigned long bogosum=0;
+		for(i=0;i<32;i++)
+		{
+			if(cpu_present_map&(1<<i))
+				bogosum+=cpu_data[i].udelay_val;
+		}
+		printk("Total of %d processors activated (%lu.%02lu BogoMIPS).\n", 
+			cpucount+1, 
+			(bogosum+2500)/500000,
+			((bogosum+2500)/5000)%100);
 		smp_activated=1;
 		smp_num_cpus=cpucount+1;
 	}
diff -u --recursive --new-file v1.3.36/linux/drivers/block/genhd.c linux/drivers/block/genhd.c
--- v1.3.36/linux/drivers/block/genhd.c	Mon Oct 23 18:02:02 1995
+++ linux/drivers/block/genhd.c	Sat Oct 28 15:18:25 1995
@@ -213,8 +213,7 @@
 	if (!tested_for_dm6++) {	/* only check for DM6 *once* */
 		extern int ide_xlate_1024(kdev_t, int, const char *);
 		/* check for various "disk managers" which do strange things */
-		int ezstring = !strncmp(data+0x1a3, "Micro House", 11);
-		if (p->sys_ind == EZD_PARTITION || ezstring) {
+		if (p->sys_ind == EZD_PARTITION) {
 			/*
 			 * The remainder of the disk must be accessed using
 			 * a translated geometry that reduces the number of 
diff -u --recursive --new-file v1.3.36/linux/drivers/cdrom/Config.in linux/drivers/cdrom/Config.in
--- v1.3.36/linux/drivers/cdrom/Config.in	Mon Oct 23 18:02:04 1995
+++ linux/drivers/cdrom/Config.in	Sat Oct 28 15:54:18 1995
@@ -14,7 +14,7 @@
     fi
   fi
 fi
-tristate 'Aztech/Orchid/Okano/Wearnes (non IDE) CDROM support' CONFIG_AZTCD
+tristate 'Aztech/Orchid/Okano/Wearnes/TXC (non IDE) CDROM support' CONFIG_AZTCD
 tristate 'Sony CDU535 CDROM support' CONFIG_CDU535
 tristate 'Goldstar R420 CDROM support' CONFIG_GSCD
 tristate 'Philips/LMS CM206 CDROM support' CONFIG_CM206
diff -u --recursive --new-file v1.3.36/linux/drivers/cdrom/aztcd.c linux/drivers/cdrom/aztcd.c
--- v1.3.36/linux/drivers/cdrom/aztcd.c	Mon Oct 23 18:02:05 1995
+++ linux/drivers/cdrom/aztcd.c	Sat Oct 28 15:54:18 1995
@@ -1,5 +1,5 @@
-#define AZT_VERSION "1.80"
-/*      $Id: aztcd.c,v 1.80 1995/10/11 19:35:03 root Exp root $
+#define AZT_VERSION "1.90"
+/*      $Id: aztcd.c,v 1.90 1995/10/21 17:51:59 root Exp root $
 	linux/drivers/block/aztcd.c - AztechCD268 CDROM driver
 
 	Copyright (C) 1994,1995 Werner Zimmermann (zimmerma@rz.fht-esslingen.de)
@@ -134,6 +134,8 @@
                 with kernel 1.3.33. Will definitely not work with older kernels.
                 Programming done by Linus himself.
                 Werner Zimmermann, October 11, 1995
+	V1.90   Support for Conrad TXC drives, thank's to Jochen and Olaf.
+	        Werner Zimmermann, October 21, 1995
 	NOTE: 
 	Points marked with ??? are questionable !
 */
@@ -164,7 +166,8 @@
 #include <asm/segment.h>
 
 #define MAJOR_NR AZTECH_CDROM_MAJOR 
-#include <linux/blk.h>
+
+#include "blk.h"
 
 #ifdef MODULE
 #else
@@ -1538,8 +1541,9 @@
 	  printk("aztcd: no Aztech CD-ROM Initialization");
           return -EIO;
 	}
-	printk("aztcd: Aztech, Orchid, Okano, Wearnes CD-ROM Driver (C) 1994,1995 W.Zimmermann\n");
-	printk("aztcd: DriverVersion=%s  BaseAddress=0x%x \n",AZT_VERSION,azt_port);
+	printk("aztcd: Aztech,Orchid,Okano,Wearnes,TXC CD-ROM Driver (C) 1994,1995 W.Zimmermann\n");
+	printk("aztcd: DriverVersion=%s BaseAddress=0x%x  For IDE/ATAPI-drives use ide-cd.c\n",AZT_VERSION,azt_port);
+	printk("aztcd: If you have problems, read /usr/src/linux/drivers/block/README.aztcd\n");
 
 	if (check_region(azt_port, 4)) {
 	  printk("aztcd: conflict, I/O port (%X) already used\n",
@@ -1644,6 +1648,9 @@
 	 }
 	else if ((result[2]=='C')&&(result[3]=='D')&&(result[4]=='D'))
 	 { printk("aztcd: ORCHID or WEARNES drive detected\n"); /*ORCHID or WEARNES*/
+	 }
+	else if ((result[1]==0x03)&&(result[2]=='5'))
+	 { printk("aztcd: TXC drive detected\n"); /*Conrad TXC*/
 	 }
 	else                                               /*OTHERS or none*/
 	 { printk("aztcd: : unknown drive or firmware version detected\n");
diff -u --recursive --new-file v1.3.36/linux/drivers/cdrom/cdu31a.c linux/drivers/cdrom/cdu31a.c
--- v1.3.36/linux/drivers/cdrom/cdu31a.c	Mon Oct 23 18:02:05 1995
+++ linux/drivers/cdrom/cdu31a.c	Wed Oct 25 20:54:57 1995
@@ -1,25 +1,25 @@
 /*
- * Sony CDU-31A CDROM interface device driver.
- *
- * Corey Minyard (minyard@wf-rch.cirr.com)
- *
- * Colossians 3:17
- *
- * The Sony interface device driver handles Sony interface CDROM
- * drives and provides a complete block-level interface as well as an
- * ioctl() interface compatible with the Sun (as specified in
- * include/linux/cdrom.h).  With this interface, CDROMs can be
- * accessed and standard audio CDs can be played back normally.
- *
- * WARNING - 	All autoprobes have been removed from the driver.
- *		You MUST configure the CDU31A via a LILO config
- *		at boot time or in lilo.conf.  I have the
- *		following in my lilo.conf:
- *
- *                append="cdu31a=0x1f88,0,PAS"
- *
- *		The first number is the I/O base address of the
- *		card.  The second is the interrupt (0 means none).
+* Sony CDU-31A CDROM interface device driver.
+*
+* Corey Minyard (minyard@wf-rch.cirr.com)
+*
+* Colossians 3:17
+*
+* The Sony interface device driver handles Sony interface CDROM
+* drives and provides a complete block-level interface as well as an
+* ioctl() interface compatible with the Sun (as specified in
+* include/linux/cdrom.h).  With this interface, CDROMs can be
+* accessed and standard audio CDs can be played back normally.
+*
+* WARNING - 	All autoprobes have been removed from the driver.
+*		You MUST configure the CDU31A via a LILO config
+*		at boot time or in lilo.conf.  I have the
+*		following in my lilo.conf:
+*
+*                append="cdu31a=0x1f88,0,PAS"
+*
+*		The first number is the I/O base address of the
+*		card.  The second is the interrupt (0 means none).
  *		The third should be "PAS" if on a Pro-Audio
  *		spectrum, or nothing if on something else.
  *
@@ -158,6 +158,15 @@
  * 
  *              * The documentation states to set this for interrupt
  *                4, but I think that is a mistake.
+ *
+ *  It probably a little late to be adding a history, but I guess I
+ *  will start.
+ *
+ *  10/24/95 - Added support for disabling the eject button when the
+ *             drive is open.  Note that there is a small problem
+ *             still here, if the eject button is pushed while the
+ *             drive light is flashing, the drive will return a bad
+ *             status and be reset.  It recovers, though.
  */
 
 #include <linux/major.h>
@@ -297,6 +306,8 @@
 
 static int is_double_speed = 0; /* Is the drive a CDU33A? */
 
+static int is_auto_eject = 1;   /* Door has been locked? 1=No/0=Yes */
+
 /*
  * The audio status uses the values from read subchannel data as specified
  * in include/linux/cdrom.h.
@@ -454,6 +465,8 @@
 reset_drive(void)
 {
    curr_control_reg = 0;
+   readahead_dataleft = 0;
+   sony_toc_read = 0;
    outb(SONY_DRIVE_RESET_BIT, sony_cd_control_reg);
 }
 
@@ -581,10 +594,14 @@
    }
 
    params[0] = SONY_SD_MECH_CONTROL;
-   params[1] = 0x03; /* Set auto spin up and auto eject */
+   params[1] = SONY_AUTO_SPIN_UP_BIT; /* Set auto spin up */
+
+   if (is_auto_eject) params[1] |= SONY_AUTO_EJECT_BIT;
+   
    if (is_double_speed)
    {
-      params[1] |= 0x04; /* Set the drive to double speed if possible */
+      params[1] |= SONY_DOUBLE_SPEED_BIT; /* Set the drive to double speed if 
+                                             possible */
    }
    do_sony_cd_cmd(SONY_SET_DRIVE_PARAM_CMD,
                   params,
@@ -626,11 +643,7 @@
    current->timeout = jiffies + 2*HZ;
    schedule();
 
-   do_sony_cd_cmd(SONY_READ_TOC_CMD, NULL, 0, res_reg, &res_size);
-   if ((res_size < 2) || ((res_reg[0] & 0xf0) == 0x20))
-   {
-      printk("cdu31a: Unable to read TOC: 0x%2.2x\n", res_reg[1]);
-   }
+   sony_get_toc();
 }
 
 /*
@@ -919,23 +932,7 @@
    volatile int val;
 
 
-   if (abort_read_started)
-   {
-      while (is_result_reg_not_empty())
-      {
-         val = read_result_register();
-      }
-      clear_data_ready();
-      clear_result_ready();
-      /* Clear out the data */
-      while (is_data_requested())
-      {
-         val = read_data_register();
-      }
-      abort_read_started = 0;
-      return(1);
-   }
-   else if (is_attention())
+   if (is_attention())
    {
       if (num_consecutive_attentions > CDU31A_MAX_CONSECUTIVE_ATTENTIONS)
       {
@@ -969,7 +966,10 @@
          break;
 
       case SONY_EJECT_PUSHED_ATTN:
-         sony_audio_status = CDROM_AUDIO_INVALID;
+         if (is_auto_eject)
+         {
+            sony_audio_status = CDROM_AUDIO_INVALID;
+         }
          break;
 
       case SONY_LEAD_IN_ERR_ATTN:
@@ -983,6 +983,22 @@
       num_consecutive_attentions++;
       return(1);
    }
+   else if (abort_read_started)
+   {
+      while (is_result_reg_not_empty())
+      {
+         val = read_result_register();
+      }
+      clear_data_ready();
+      clear_result_ready();
+      /* Clear out the data */
+      while (is_data_requested())
+      {
+         val = read_data_register();
+      }
+      abort_read_started = 0;
+      return(1);
+   }
 
    num_consecutive_attentions = 0;
    return(0);
@@ -1496,6 +1512,9 @@
    while (handle_sony_cd_attention())
       ;
 
+   /* Make sure we have a valid TOC. */
+   sony_get_toc(); 
+
    sti();
 
    /* If the timer is running, cancel it. */
@@ -1719,14 +1738,49 @@
    unsigned int res_size;
    unsigned char parms[1];
    int session;
+   int num_spin_ups;
 
 
 #if DEBUG
    printk("Entering sony_get_toc\n");
 #endif
 
+   num_spin_ups = 0;
    if (!sony_toc_read)
    {
+respinup_on_gettoc:
+      /* Ignore the result, since it might error if spinning already. */
+      do_sony_cd_cmd(SONY_SPIN_UP_CMD, NULL, 0, res_reg, &res_size);
+
+      do_sony_cd_cmd(SONY_READ_TOC_CMD, NULL, 0, res_reg, &res_size);
+
+      /* The drive sometimes returns error 0.  I don't know why, but ignore
+         it.  It seems to mean the drive has already done the operation. */
+      if ((res_size < 2) || ((res_reg[0] != 0) && (res_reg[1] != 0)))
+      {
+         /* If the drive is already playing, it's ok.  */
+         if ((res_reg[1] == SONY_AUDIO_PLAYING_ERR) || (res_reg[1] == 0))
+         {
+            goto gettoc_drive_spinning;
+         }
+
+         /* If the drive says it is not spun up (even though we just did it!)
+            then retry the operation at least a few times. */
+         if (   (res_reg[1] == SONY_NOT_SPIN_ERR)
+             && (num_spin_ups < MAX_CDU31A_RETRIES))
+         {
+            num_spin_ups++;
+            goto respinup_on_gettoc;
+         }
+
+         printk("cdu31a: Error reading TOC: %x %x\n",
+                sony_toc.exec_status[0],
+                sony_toc.exec_status[1]);
+	 return;
+      }
+
+gettoc_drive_spinning:
+
       /* The idea here is we keep asking for sessions until the command
 	 fails.  Then we know what the last valid session on the disk is.
 	 No need to check session 0, since session 0 is the same as session
@@ -1761,6 +1815,7 @@
          /* Let's not get carried away... */
          if (session > 20)
          {
+            printk("cdu31a: too many sessions: %d\n", session);
             return;
          }
       }
@@ -1779,6 +1834,10 @@
 		     &res_size);
       if ((res_size < 2) || ((sony_toc.exec_status[0] & 0xf0) == 0x20))
       {
+         printk("cdu31a: Error reading session %d: %x %x\n",
+                session,
+                sony_toc.exec_status[0],
+                sony_toc.exec_status[1]);
 	 /* An error reading the TOC.  Return without sony_toc_read
 	    set. */
 	 return;
@@ -2650,6 +2709,12 @@
       return 0;
       break;
 
+   case CDROMEJECT_SW:
+      is_auto_eject = arg;
+      set_drive_params();
+      return 0;
+      break;
+
    default:
       return -EINVAL;
    }
@@ -2771,6 +2836,10 @@
    sony_usage++;
    MOD_INC_USE_COUNT;
 
+   /* If all is OK (until now...), then lock the door */
+   is_auto_eject = 0;
+   set_drive_params();
+
    return 0;
 }
 
@@ -2795,6 +2864,11 @@
    if (sony_usage == 0)
    {
       sync_dev(inode->i_rdev);
+
+      /* Unlock the door, only if nobody is using the drive */
+      is_auto_eject = 1;
+      set_drive_params();
+
       do_sony_cd_cmd(SONY_SPIN_DOWN_CMD, NULL, 0, res_reg, &res_size);
 
       sony_spun_up = 0;
diff -u --recursive --new-file v1.3.36/linux/drivers/char/n_tty.c linux/drivers/char/n_tty.c
--- v1.3.36/linux/drivers/char/n_tty.c	Wed Sep 13 12:45:30 1995
+++ linux/drivers/char/n_tty.c	Sat Oct 28 15:19:02 1995
@@ -255,24 +255,31 @@
 					tail = (tail+1) & (N_TTY_BUF_SIZE-1);
 				}
 
+				/* should never happen */
+				if (tty->column > 0x80000000)
+					tty->column = 0; 
+
 				/* Now backup to that column. */
 				while (tty->column > col) {
 					/* Can't use opost here. */
 					put_char('\b', tty);
-					tty->column--;
+					if (tty->column > 0)
+						tty->column--;
 				}
 			} else {
 				if (iscntrl(c) && L_ECHOCTL(tty)) {
 					put_char('\b', tty);
 					put_char(' ', tty);
 					put_char('\b', tty);
-					tty->column--;
+					if (tty->column > 0)
+						tty->column--;
 				}
 				if (!iscntrl(c) || L_ECHOCTL(tty)) {
 					put_char('\b', tty);
 					put_char(' ', tty);
 					put_char('\b', tty);
-					tty->column--;
+					if (tty->column > 0)
+						tty->column--;
 				}
 			}
 		}
@@ -696,6 +703,8 @@
 	}
 	memset(tty->read_buf, 0, N_TTY_BUF_SIZE);
 	tty->read_head = tty->read_tail = tty->read_cnt = 0;
+	tty->canon_head = tty->canon_data = tty->erasing = 0;
+	tty->column = 0;
 	memset(tty->read_flags, 0, sizeof(tty->read_flags));
 	n_tty_set_termios(tty, 0);
 	tty->minimum_to_wake = 1;
diff -u --recursive --new-file v1.3.36/linux/drivers/net/3c503.c linux/drivers/net/3c503.c
--- v1.3.36/linux/drivers/net/3c503.c	Tue Oct 10 18:46:34 1995
+++ linux/drivers/net/3c503.c	Wed Oct 25 20:51:21 1995
@@ -16,10 +16,16 @@
     in programmed-I/O mode.
 
     Sources:
-    EtherLink II Technical Reference Guide,
+    EtherLink II Technical Reference Manual,
+    EtherLink II/16 Technical Reference Manual Supplement,
     3Com Corporation, 5400 Bayfront Plaza, Santa Clara CA 95052-8145
     
     The Crynwr 3c503 packet driver.
+
+    Changelog:
+
+    Paul Gortmaker	: add support for the 2nd 8kB of RAM on 16 bit cards.
+
 */
 
 static const char *version =
@@ -148,7 +154,7 @@
 int
 el2_probe1(struct device *dev, int ioaddr)
 {
-    int i, iobase_reg, membase_reg, saved_406;
+    int i, iobase_reg, membase_reg, saved_406, wordlength;
     static unsigned version_printed = 0;
     unsigned long vendor_id;
 
@@ -180,8 +186,6 @@
 	return ENODEV;
     }
 
-    request_region(ioaddr, EL2_IO_EXTENT,"3c503");
-
     if (dev == NULL)
 	dev = init_etherdev(0, sizeof(struct ei_device));
 
@@ -191,7 +195,7 @@
     dev->base_addr = ioaddr;
     ethdev_init(dev);
 
-    printk("%s: 3c503 at %#3x,", dev->name, ioaddr);
+    printk("%s: 3c503 at i/o base %#3x, node address", dev->name, ioaddr);
 
     /* Retrieve and print the ethernet address. */
     for (i = 0; i < 6; i++)
@@ -200,6 +204,13 @@
     /* Map the 8390 back into the window. */
     outb(ECNTRL_THIN, ioaddr + 0x406);
 
+    /* Check for EL2/16 as described in tech. man. */
+    outb_p(E8390_PAGE0, ioaddr + E8390_CMD);
+    outb_p(0, ioaddr + EN0_DCFG);
+    outb_p(E8390_PAGE2, ioaddr + E8390_CMD);
+    wordlength = inb_p(ioaddr + EN0_DCFG) & ENDCFG_WTS;
+    outb_p(E8390_PAGE0, ioaddr + E8390_CMD);
+
     /* Probe for, turn on and clear the board's shared memory. */
     if (ei_debug > 2) printk(" memory jumpers %2.2x ", membase_reg);
     outb(EGACFR_NORM, ioaddr + 0x405);	/* Enable RAM */
@@ -216,13 +227,16 @@
 
     if ((membase_reg & 0xf0) == 0) {
 	dev->mem_start = 0;
+	ei_status.name = "3c503-PIO";
     } else {
 	dev->mem_start = ((membase_reg & 0xc0) ? 0xD8000 : 0xC8000) +
 	    ((membase_reg & 0xA0) ? 0x4000 : 0);
 
-#define EL2_MEMSIZE (EL2SM_STOP_PG - EL2SM_START_PG)*256
+#define EL2_MEMSIZE (EL2_MB1_STOP_PG - EL2_MB1_START_PG)*256
 #ifdef EL2MEMTEST
-	/* This has never found an error, but someone might care. */
+	/* This has never found an error, but someone might care.
+	   Note that it only tests the 2nd 8kB on 16kB 3c503/16
+	   cards between card addr. 0x2000 and 0x3fff. */
 	{			/* Check the card's memory. */
 	    unsigned long mem_base = dev->mem_start;
 	    unsigned int test_val = 0xbbadf00d;
@@ -233,6 +247,7 @@
 		    || readl(mem_base + i) != test_val) {
 		    printk(" memory failure or memory address conflict.\n");
 		    dev->mem_start = 0;
+		    ei_status.name = "3c503-PIO";
 		    break;
 		}
 		test_val += 0x55555555;
@@ -240,27 +255,48 @@
 	    }
 	}
 #endif  /* EL2MEMTEST */
-	/* Divide the on-board memory into a single maximum-sized transmit
-	   (double-sized for ping-pong transmit) buffer at the base, and
-	   use the rest as a receive ring. */
+
 	dev->mem_end = dev->rmem_end = dev->mem_start + EL2_MEMSIZE;
-	dev->rmem_start = TX_PAGES*256 + dev->mem_start;
+
+	if (wordlength) {	/* No Tx pages to skip over to get to Rx */
+		dev->rmem_start = dev->mem_start;
+		ei_status.name = "3c503/16";
+	} else {
+		dev->rmem_start = TX_PAGES*256 + dev->mem_start;
+		ei_status.name = "3c503";
+	}
+    }
+
+    /*
+	Divide up the memory on the card. This is the same regardless of
+	whether shared-mem or PIO is used. For 16 bit cards (16kB RAM),
+	we use the entire 8k of bank1 for an Rx ring. We only use 3k 
+	of the bank0 for 2 full size Tx packet slots. For 8 bit cards,
+	(8kB RAM) we use 3kB of bank1 for two Tx slots, and the remaining 
+	5kB for an Rx ring.  */
+
+    if (wordlength) {
+	ei_status.tx_start_page = EL2_MB0_START_PG;
+	ei_status.rx_start_page = EL2_MB1_START_PG;
+    } else {
+	ei_status.tx_start_page = EL2_MB1_START_PG;
+	ei_status.rx_start_page = EL2_MB1_START_PG + TX_PAGES;
     }
 
     /* Finish setting the board's parameters. */
-    ei_status.name = "3C503";
-    ei_status.tx_start_page = EL2SM_START_PG;
-    ei_status.rx_start_page = EL2SM_START_PG + TX_PAGES;
-    ei_status.stop_page = EL2SM_STOP_PG;
+    ei_status.stop_page = EL2_MB1_STOP_PG;
+    ei_status.word16 = wordlength;
     ei_status.reset_8390 = &el2_reset_8390;
     ei_status.get_8390_hdr = &el2_get_8390_hdr;
     ei_status.block_input = &el2_block_input;
     ei_status.block_output = &el2_block_output;
 
+    request_region(ioaddr, EL2_IO_EXTENT, ei_status.name);
+
     if (dev->irq == 2)
 	dev->irq = 9;
     else if (dev->irq > 5 && dev->irq != 9) {
-	printk("\n3c503: configured interrupt %d invalid, using autoIRQ.\n",
+	printk("\n3c503: configured interrupt %d invalid, will use autoIRQ.\n",
 	       dev->irq);
 	dev->irq = 0;
     }
@@ -272,14 +308,13 @@
     dev->stop = &el2_close;
 
     if (dev->mem_start)
-	printk("\n%s: %s with shared memory at %#6lx-%#6lx.\n",
-	       dev->name, ei_status.name, dev->mem_start, dev->mem_end-1);
-    else
-	printk("\n%s: %s using programmed I/O (REJUMPER for SHARED MEMORY).\n",
-	       dev->name, ei_status.name);
+	printk("\n%s: %s - %dkB RAM, 8kB shared mem window at %#6lx-%#6lx.\n",
+		dev->name, ei_status.name, (wordlength+1)<<3,
+		dev->mem_start, dev->mem_end-1);
 
-    if (ei_debug > 1)
-	printk(version);
+    else
+	printk("\n%s: %s, %dkB RAM, using programmed I/O (REJUMPER for SHARED MEMORY).\n",
+	       dev->name, ei_status.name, (wordlength+1)<<3);
 
     return 0;
 }
@@ -300,7 +335,7 @@
 		outb_p(0x04 << ((*irqp == 9) ? 2 : *irqp), E33G_IDCFR);
 		outb_p(0x00, E33G_IDCFR);
 		if (*irqp == autoirq_report(0)	 /* It's a good IRQ line! */
-		    && request_irq (dev->irq = *irqp, &ei_interrupt, 0, "3c503") == 0)
+		    && request_irq (dev->irq = *irqp, &ei_interrupt, 0, ei_status.name) == 0)
 		    break;
 	    }
 	} while (*++irqp);
@@ -309,7 +344,7 @@
 	    return -EAGAIN;
 	}
     } else {
-	if (request_irq(dev->irq, &ei_interrupt, 0, "3c503")) {
+	if (request_irq(dev->irq, &ei_interrupt, 0, ei_status.name)) {
 	    return -EAGAIN;
 	}
     }
@@ -388,13 +423,16 @@
     int i;				/* Buffer index */
     int boguscount = 0;		/* timeout counter */
 
-    /* This should really be set with during an open(). */
-    outb(EGACFR_NORM, E33G_GACFR);	/* Enable RAM and interrupts. */
+    if (ei_status.word16)      /* Tx packets go into bank 0 on EL2/16 card */
+	outb(EGACFR_RSEL|EGACFR_TCM, E33G_GACFR);
+    else 
+	outb(EGACFR_NORM, E33G_GACFR);
 
     if (dev->mem_start) {	/* Shared memory transfer */
 	unsigned long dest_addr = dev->mem_start +
 	    ((start_page - ei_status.tx_start_page) << 8);
 	memcpy_toio(dest_addr, buf, count);
+	outb(EGACFR_NORM, E33G_GACFR);	/* Back to bank1 in case on bank0 */
 	return;
     }
     /* No shared memory, put the packet out the slow way. */
@@ -413,11 +451,13 @@
 		if (++boguscount > (i<<3) + 32) {
 		    printk("%s: FIFO blocked in el2_block_output (at %d of %d, bc=%d).\n",
 			   dev->name, i, count, boguscount);
+		    outb(EGACFR_NORM, E33G_GACFR);	/* To MB1 for EL2/16 */
 		    return;
 		}
 	outb(buf[i], E33G_FIFOH);
     }
     outb_p(ei_status.interface_num==0 ? ECNTRL_THIN : ECNTRL_AUI, E33G_CNTRL);
+    outb(EGACFR_NORM, E33G_GACFR);	/* Back to bank1 in case on bank0 */
     return;
 }
 
@@ -426,7 +466,7 @@
 el2_get_8390_hdr(struct device *dev, struct e8390_pkt_hdr *hdr, int ring_page)
 {
     unsigned int i;
-    unsigned long hdr_start = dev->mem_start + ((ring_page - EL2SM_START_PG)<<8);
+    unsigned long hdr_start = dev->mem_start + ((ring_page - EL2_MB1_START_PG)<<8);
 
     if (dev->mem_start) {       /* Use the shared memory. */
 	memcpy_fromio(hdr, hdr_start, sizeof(struct e8390_pkt_hdr));
@@ -456,7 +496,7 @@
 
     /* Maybe enable shared memory just be to be safe... nahh.*/
     if (dev->mem_start) {	/* Use the shared memory. */
-	ring_offset -= (EL2SM_START_PG<<8);
+	ring_offset -= (EL2_MB1_START_PG<<8);
 	if (dev->mem_start + ring_offset + count > end_of_ring) {
 	    /* We must wrap the input move. */
 	    int semi_count = end_of_ring - (dev->mem_start + ring_offset);
diff -u --recursive --new-file v1.3.36/linux/drivers/net/3c503.h linux/drivers/net/3c503.h
--- v1.3.36/linux/drivers/net/3c503.h	Wed Oct  4 14:14:30 1995
+++ linux/drivers/net/3c503.h	Wed Oct 25 20:51:21 1995
@@ -12,10 +12,14 @@
 #define OLD_3COM_ID	0x02608c
 #define NEW_3COM_ID	0x0020af
 
-/* Shared memory management parameters */
-
-#define EL2SM_START_PG	(0x20)	/* First page of TX buffer */
-#define EL2SM_STOP_PG	(0x40)	/* Last page +1 of RX ring */
+/* Shared memory management parameters. NB: The 8 bit cards have only
+   one bank (MB1) which serves both Tx and Rx packet space. The 16bit
+   cards have 2 banks, MB0 for Tx packets, and MB1 for Rx packets. 
+   You choose which bank appears in the sh. mem window with EGACFR_MBSn */
+
+#define EL2_MB0_START_PG	(0x00)	/* EL2/16 Tx packets go in bank 0 */
+#define EL2_MB1_START_PG	(0x20)	/* First page of bank 1 */
+#define EL2_MB1_STOP_PG		(0x40)	/* Last page +1 of bank 1 */
 
 /* 3Com 3c503 ASIC registers */
 #define E33G_STARTPG	(EL2H+0)	/* Start page, matching EN0_STARTPG */
@@ -60,7 +64,28 @@
 
 /* Bits in E33G_GACFR register: */
 
-#define EGACFR_NORM	(0x49)	/* Enable 8K shared mem, no DMA TC int */
-#define EGACFR_IRQOFF	(0xc9)	/* Above, and disable 8390 IRQ line */
+#define EGACFR_NIM	(0x80)	/* NIC interrupt mask */
+#define EGACFR_TCM	(0x40)	/* DMA term. count interrupt mask */
+#define EGACFR_RSEL	(0x08)	/* Map a bank of card mem into system mem */
+#define EGACFR_MBS2	(0x04)	/* Memory bank select, bit 2. */
+#define EGACFR_MBS1	(0x02)	/* Memory bank select, bit 1. */
+#define EGACFR_MBS0	(0x01)	/* Memory bank select, bit 0. */
+
+#define EGACFR_NORM	(0x49)	/* TCM | RSEL | MBS0 */
+#define EGACFR_IRQOFF	(0xc9)	/* TCM | RSEL | MBS0 | NIM */
+
+/*
+	MBS2	MBS1	MBS0	Sh. mem windows card mem at:
+	----	----	----	-----------------------------
+	0	0	0	0x0000 -- bank 0
+	0	0	1	0x2000 -- bank 1 (only choice for 8bit card)
+	0	1	0	0x4000 -- bank 2, not used
+	0	1	1	0x6000 -- bank 3, not used
+
+There was going to be a 32k card that used bank 2 and 3, but it 
+never got produced.
+
+*/
+
 
 /* End of 3C503 parameter definitions */
diff -u --recursive --new-file v1.3.36/linux/drivers/net/arcnet.c linux/drivers/net/arcnet.c
--- v1.3.36/linux/drivers/net/arcnet.c	Sat Sep  9 15:26:52 1995
+++ linux/drivers/net/arcnet.c	Sat Oct 28 16:00:49 1995
@@ -17,6 +17,38 @@
          
 	**********************
 
+	v2.12 ALPHA (95/10/27)
+	  - Tried to improve skb handling and init code to fix problems with
+	    the latest 1.3.x kernels. (We no longer use ether_setup except
+	    in arc0e since they keep coming up with new and improved
+	    incompatibilities for us.)
+
+	v2.11 ALPHA (95/10/25)
+	  - Removed superfluous sti() from arcnet_inthandler.
+	  - "Cleaned up" (?) handling of dev->interrupt for multiple
+	    devices.
+	  - Place includes BEFORE configuration settings (solves some
+	    problems with insmod and undefined symbols)
+	  - Removed race condition in arcnet_open that could cause
+	    packet reception to be disabled until after the first TX.
+	  
+	v2.10 ALPHA (95/09/10)
+	  - Integrated Tomasz Motylewski's new RFC1051 compliant "arc0s"
+	    ([S]imple [S]tandard?) device.  This should make Linux-ARCnet
+	    work with the NetBSD/AmiTCP implementation of this older RFC,
+	    via the arc0s device.
+	  - Decided the current implementation of Multiprotocol ARCnet
+	    involved way too much duplicated code, and tried to share things
+	    a _bit_ more, at least.  This means, pretty much, that any
+	    bugs in the arc0s module are now my fault :)
+	  - Added a new ARCNET_DEBUG_MAX define that sets the highest
+	    debug message level to be included in the driver.  This can
+	    reduce the size of the object file, and probably increases
+	    efficiency a bit.  I get a 0.1 ms speedup in my "ping" times if
+	    I disable all debug messages.  Oh, wow.
+	  - Fixed a long-standing annoyance with some of the power-up debug
+	    messages.  ("IRQ for unknown device" was showing up too often)
+
 	v2.00 (95/09/06)
 	  - THIS IS ONLY A SUMMARY.  The complete changelog is available
 	    from me upon request.
@@ -59,22 +91,20 @@
          - Test in systems with NON-ARCnet network cards, just to see if
            autoprobe kills anything.  Currently, we do cause some NE2000's
            to die.  Autoprobe is also way too slow and verbose, particularly
-           if there ARE no ARCnet cards.
+           if there aren't any ARCnet cards in the system.  And why shouldn't
+           it work as a module again?
+         - Rewrite autoprobe.
          - What about cards with shared memory that can be "turned off?"
          - NFS mount freezes after several megabytes to SOSS for DOS. 
  	   unmount/remount fixes it.  Is this arcnet-specific?  I don't know.
-         - Add support for "old" (RFC1051) protocol arcnet, such as AmiTCP
-           and NetBSD.  Work in Tomasz' initial support for this.
-         - How about TCP/IP over netbios?  Or vice versa?
          - Some newer ARCnets support promiscuous mode, supposedly. 
            If someone sends me information, I'll try to implement it.
-         - Remove excess lock variables that are probably not necessary
-           anymore due to the changes in Linux 1.2.9.
-         - Dump Linux 1.2 and properly use the extended 1.3.x skb functions.
-         - Problems forwarding from arc0e to arc0 in 1.3.x? (it may be a
-           general kernel bug, though, since I heard other people complaining
-           about forwarding problems on ethernet cards)
-         - D_SKB doesn't work right on 1.3.x kernels.
+         - Find and remove excess lock variables that are probably not
+           necessary anymore due to the changes in Linux 1.2.9.
+         - Dump Linux 1.2 support and its ugly #ifdefs.
+         - Add support for the new 1.3.x IP header cache features.
+         - ATA protocol support??
+         - Banyan VINES TCP/IP support??
 
            
 	Sources:
@@ -85,7 +115,7 @@
 	 	(from Linux Kernel 1.1.45)
 	 - The official ARCnet data sheets (!) thanks to Ken Cornetet
 		<kcornete@nyx10.cs.du.edu>
-	 - RFC's 1201 and 1051 (mostly 1201) - re: ARCnet IP packets
+	 - RFC's 1201 and 1051 - re: TCP/IP over ARCnet
 	 - net/inet/eth.c (from kernel 1.1.50) for header-building info...
 	 - Alternate Linux ARCnet source by V.Shergin <vsher@sao.stavropol.su>
 	 - Textual information and more alternate source from Joachim Koenig
@@ -93,40 +123,8 @@
 */
 
 static const char *version =
- "arcnet.c:v2.00 95/09/06 Avery Pennarun <apenwarr@foxnet.net>\n";
-
-/**************************************************************************/
+ "arcnet.c:v2.12 ALPHA 95/10/27 Avery Pennarun <apenwarr@foxnet.net>\n";
 
-/* Define this if you want to detect network reconfigurations.
- * They may be a real nuisance on a larger ARCnet network: but if you are
- * a network administrator you probably would like to count them. 
- * Reconfigurations will be recorded in stats.tx_carrier_errors 
- * (the last field of the /proc/net/dev file).
- *
- * The card sends the reconfiguration signal when it loses the connection
- * to the rest of its network. It is a 'Hello, is anybody there?' cry.  This
- * usually happens when a new computer on the network is powered on or when
- * the cable is broken.
- */
-#define DETECT_RECONFIGS
-
-/* Define this if you want to make sure transmitted packets are "acknowledged"
- * by the destination host, as long as they're not to the broadcast address.
- *
- * That way, if one segment of a split packet doesn't get through, it can
- * be resent immediately rather than confusing the other end.
- *
- * Disable this to return to 1.01-style behaviour, if you have problems.
- */
-#define VERIFY_ACK
-
-/* Define this if you want to make it easier to use the "call trace" when
- * a kernel NULL pointer assignment occurs.  Hopefully unnecessary, most of
- * the time.
- */
-#undef static
-
-/**************************************************************************/
  
 
 #include <linux/config.h>
@@ -173,14 +171,52 @@
 #include <net/arp.h>
 #endif
 
+/**************************************************************************/
+
+/* Define this if you want to detect network reconfigurations.
+ * They may be a real nuisance on a larger ARCnet network: but if you are
+ * a network administrator you probably would like to count them. 
+ * Reconfigurations will be recorded in stats.tx_carrier_errors 
+ * (the last field of the /proc/net/dev file).
+ *
+ * The card sends the reconfiguration signal when it loses the connection
+ * to the rest of its network. It is a 'Hello, is anybody there?' cry.  This
+ * usually happens when a new computer on the network is powered on or when
+ * the cable is broken.
+ */
+#define DETECT_RECONFIGS
+
+/* Define this if you want to make sure transmitted packets are "acknowledged"
+ * by the destination host, as long as they're not to the broadcast address.
+ *
+ * That way, if one segment of a split packet doesn't get through, it can
+ * be resent immediately rather than confusing the other end.
+ *
+ * Disable this to return to 1.02-style behaviour, if you have problems.
+ */
+#define VERIFY_ACK
+
+/* Define this if you want to make it easier to use the "call trace" when
+ * a kernel NULL pointer assignment occurs.  Hopefully unnecessary, most of
+ * the time.  It will make all the function names (and other things) show
+ * up as kernel symbols.  (especially handy when using arcnet as a module)
+ */
+#define static
+
+/**************************************************************************/
 
 /* new debugging bitflags: each option can be enabled individually.
  *
  * these can be set while the driver is running by typing:
  *	ifconfig arc0 down metric 1xxx HOSTNAME
- *		where 1xx is 1000 + the debug level you want
+ *		where 1xxx is 1000 + the debug level you want
  *		and HOSTNAME is your hostname/ip address
  * and then resetting your routes.
+ *
+ * Note: only debug flags included in the ARCNET_DEBUG_MAX define will
+ *   actually be available.  GCC (at least 2.7.0) will notice lines
+ *   using a BUGLVL not in ARCNET_DEBUG_MAX and automatically optimize
+ *   them out.
  */
 #define D_NORMAL	1	/* D_NORMAL  normal operational info	*/
 #define	D_INIT		2	/* D_INIT    show init/probe messages	*/
@@ -191,12 +227,21 @@
 #define D_RX		32	/* D_RX	     show rx packets		*/
 #define D_SKB		64	/* D_SKB     dump skb's			*/
 
+#ifndef ARCNET_DEBUG_MAX
+#define ARCNET_DEBUG_MAX (~0)		/* enable ALL debug messages */
+/*#define ARCNET_DEBUG_MAX (D_NORMAL|D_INIT|D_EXTRA) */
+/*#define ARCNET_DEBUG_MAX 0	*/	/* enable NO debug messages */
+#endif
+
 #ifndef ARCNET_DEBUG
-/*#define ARCNET_DEBUG D_NORMAL|D_INIT|D_EXTRA*/
-#define ARCNET_DEBUG D_NORMAL|D_INIT
+#define ARCNET_DEBUG (D_NORMAL|D_INIT|D_EXTRA)
+/*#define ARCNET_DEBUG (D_NORMAL|D_INIT)*/
 #endif
 int arcnet_debug = ARCNET_DEBUG;
 
+/* macro to simplify debug checking */
+#define BUGLVL(x) if ((ARCNET_DEBUG_MAX)&arcnet_debug&(x))
+
 #ifndef HAVE_AUTOIRQ
 /* From auto_irq.c, in ioport.h for later versions. */
 extern void autoirq_setup(int waittime);
@@ -211,17 +256,22 @@
 #define	request_region(ioaddr, size)		do ; while (0)
 #endif
 
-/* macro to simplify debug checking */
-#define BUGLVL(x) if (arcnet_debug&(x))
-
-
 /* Some useful multiprotocol macros */
 #define TBUSY lp->adev->tbusy \
-		=lp->edev->tbusy
+		=lp->edev->tbusy \
+		=lp->sdev->tbusy
 #define IF_TBUSY (lp->adev->tbusy \
-		|| lp->edev->tbusy)
+		|| lp->edev->tbusy \
+		|| lp->sdev->tbusy)
+#define INTERRUPT lp->adev->interrupt \
+		=lp->edev->interrupt \
+		=lp->sdev->interrupt
+#define IF_INTERRUPT (lp->adev->interrupt \
+		|| lp->edev->interrupt \
+		|| lp->sdev->interrupt)
 #define START lp->adev->start \
-		=lp->edev->start
+		=lp->edev->start \
+		=lp->sdev->start
 
 
 /* The number of low I/O ports used by the ethercard. */
@@ -229,7 +279,7 @@
 
 
 /* Handy defines for ARCnet specific stuff */
-	/* COM 9026 (?) --> ARCnet register addresses */
+	/* COM 9026 controller chip --> ARCnet register addresses */
 #define INTMASK	(ioaddr+0)		/* writable */
 #define STATUS	(ioaddr+0)		/* readable */
 #define COMMAND (ioaddr+1)	/* writable, returns random vals on read (?) */
@@ -309,6 +359,10 @@
 #define ARC_P_RARP	214		/* 0xD6 */
 #define ARC_P_IPX	250		/* 0xFA */
 
+	/* Old RFC1051 Protocol ID's */
+#define ARC_P_IP_RFC1051 240		/* 0xF0 */
+#define ARC_P_ARP_RFC1051 241		/* 0xF1 */
+
 	/* MS LanMan/WfWg protocol */
 #define ARC_P_ETHER	0xE8
 
@@ -316,11 +370,6 @@
 #define ARC_P_LANSOFT	251		/* 0xFB */
 #define ARC_P_ATALK	0xDD
 
-	/* these structures define the format of an arcnet packet. */
-#define NORMAL		0
-#define EXTENDED	1
-#define EXCEPTION	2
-
 	/* the header required by the card itself */
 struct HardHeader
 {
@@ -337,7 +386,7 @@
 	u_char raw[512];		/* raw packet info, incl ClientData */
 };
 
-	/* the "client data" header - RFC-1201 information
+	/* the "client data" header - RFC1201 information
 	 * notice that this screws up if it's not an even number of bytes
 	 * <sigh>
 	 */
@@ -357,6 +406,25 @@
 #define EXTRA_CLIENTDATA (sizeof(struct ClientData)-4)
 
 
+	/* the "client data" header - RFC1051 information
+	 * this also screws up if it's not an even number of bytes
+	 * <sigh again>
+	 */
+struct S_ClientData
+{
+	/* data that's NOT part of real packet - we MUST get rid of it before
+	 * actually sending!!
+	 */
+	u_char  saddr,		/* Source address - needed for IPX */
+		daddr,		/* Destination address */
+		junk;		/* padding to make an even length */
+	
+	/* data that IS part of real packet */
+	u_char	protocol_id;	/* ARC_P_IP, ARC_P_ARP, etc */
+};
+#define S_EXTRA_CLIENTDATA (sizeof(struct S_ClientData)-1)
+
+
 /* "Incoming" is information needed for each address that could be sending
  * to us.  Mostly for partially-received split packets.
  */
@@ -403,8 +471,9 @@
 	struct Incoming incoming[256];	/* one from each address */
 	struct Outgoing outgoing; /* packet currently being sent */
 	
-	struct device *adev;	/* RFC1201 protocol device */
-	struct device *edev;	/* Ethernet-Encap device */
+	struct device *adev,	/* RFC1201 protocol device */
+		 	*edev,	/* Ethernet-Encap device */
+		 	*sdev;	/* RFC1051 protocol device */
 };
 
 
@@ -414,28 +483,32 @@
 static int arcnet_memprobe(struct device *dev,u_char *addr);
 static int arcnet_ioprobe(struct device *dev, short ioaddr);
 #endif
+static void arcnet_setup(struct device *dev);
 static int arcnetE_init(struct device *dev);
+static int arcnetS_init(struct device *dev);
 
 static int arcnet_open(struct device *dev);
 static int arcnet_close(struct device *dev);
 static int arcnet_reset(struct device *dev);
 
 static int arcnetA_send_packet(struct sk_buff *skb, struct device *dev);
-static void arcnetA_continue_tx(struct device *dev);
-static void arcnetA_prepare_tx(struct device *dev,struct ClientData *hdr,
-		short length,char *data);
-static void arcnetA_go_tx(struct device *dev);
-
 static int arcnetE_send_packet(struct sk_buff *skb, struct device *dev);
+static int arcnetS_send_packet(struct sk_buff *skb, struct device *dev);
+static void arcnetA_continue_tx(struct device *dev);
+static void arcnetAS_prepare_tx(struct device *dev,u_char *hdr,int hdrlen,
+		char *data,int length,int daddr,int exceptA);
+static void arcnetAS_go_tx(struct device *dev);
 
 static void arcnet_interrupt(int irq,struct pt_regs *regs);
 static void arcnet_inthandler(struct device *dev);
 
 static void arcnet_rx(struct device *dev,int recbuf);
-static void arcnetA_rx(struct device *dev,struct ClientData *arcsoft,
+static void arcnetA_rx(struct device *dev,u_char *buf,
 	int length,u_char saddr, u_char daddr);
 static void arcnetE_rx(struct device *dev,u_char *arcsoft,
 	int length,u_char saddr, u_char daddr);
+static void arcnetS_rx(struct device *dev,u_char *buf,
+	int length,u_char saddr, u_char daddr);
 
 static struct enet_statistics *arcnet_get_stats(struct device *dev);
 static void set_multicast_list(struct device *dev, int num_addrs, void *addrs);
@@ -445,13 +518,21 @@
 int arcnetA_header(unsigned char *buff,struct device *dev,
 		unsigned short type,void *daddr,void *saddr,unsigned len,
 		struct sk_buff *skb);
+int arcnetS_header(unsigned char *buff,struct device *dev,
+		unsigned short type,void *daddr,void *saddr,unsigned len,
+		struct sk_buff *skb);
 #else
 int arcnetA_header(struct sk_buff *skb,struct device *dev,
 		unsigned short type,void *daddr,void *saddr,unsigned len);
+int arcnetS_header(struct sk_buff *skb,struct device *dev,
+		unsigned short type,void *daddr,void *saddr,unsigned len);
 #endif
 int arcnetA_rebuild_header(void *eth,struct device *dev,unsigned long raddr,
 		struct sk_buff *skb);
+int arcnetS_rebuild_header(void *eth,struct device *dev,unsigned long raddr,
+		struct sk_buff *skb);
 unsigned short arcnetA_type_trans(struct sk_buff *skb,struct device *dev);
+unsigned short arcnetS_type_trans(struct sk_buff *skb,struct device *dev);
 
 #ifdef MODULE
 int  init_module(void);
@@ -470,7 +551,6 @@
  *                                                                          *
  ****************************************************************************/
  
-
 /* Check for a network adaptor of this type, and return '0' if one exists.
  *  If dev->base_addr == 0, probe all likely locations.
  *  If dev->base_addr == 1, always return failure.
@@ -510,10 +590,11 @@
 	int delayval;
 	struct arcnet_local *lp;
 
-#if 0
+	printk(version);
+
+#if 1
 	BUGLVL(D_NORMAL)
 	{
-		printk(version);
 		printk("arcnet: ***\n");
 		printk("arcnet: * Read README.arcnet for important release notes!\n");
 		printk("arcnet: *\n");
@@ -524,7 +605,6 @@
 #else
 	BUGLVL(D_INIT)
 	{
-		printk(version);
 		printk("arcnet: ***\n");
 		printk("arcnet: * Read README.arcnet for important release notes!\n");
 		printk("arcnet: *\n");
@@ -537,7 +617,7 @@
 	BUGLVL(D_INIT)
 		printk("arcnet: given: base %lXh, IRQ %Xh, shmem %lXh\n",
 			dev->base_addr,dev->irq,dev->mem_start);
-			
+
 #ifndef MODULE
 	if (base_addr > 0x1ff)		/* Check a single specified location. */
 		status=arcnet_ioprobe(dev, base_addr);
@@ -627,13 +707,13 @@
 	dev->set_multicast_list = &set_multicast_list;
 #endif
 
-	/* Fill in the fields of the device structure with ethernet-generic
+	/* Fill in the fields of the device structure with generic
 	 * values.
 	 */
-	ether_setup(dev);
+	arcnet_setup(dev);
 	
 	/* And now fill particular fields with arcnet values */
-	dev->type=ARPHRD_ARCNET;
+	dev->mtu=1500; /* completely arbitrary - agrees with ether, though */
 	dev->hard_header_len=sizeof(struct ClientData);
 	BUGLVL(D_DURING)
 		printk("arcnet: ClientData header size is %d.\narcnet: HardHeader size is %d.\n",
@@ -642,8 +722,6 @@
 		/* since we strip EXTRA_CLIENTDATA bytes off before sending,
 		 * we let Linux add that many bytes to the packet data...
 		 */
-	dev->addr_len=1;
-	dev->broadcast[0]=0x00;
 	
 	BUGLVL(D_INIT) printk("arcnet: arcnet_probe: resetting card.\n");
 	arcnet_reset(dev);
@@ -847,6 +925,8 @@
 #endif /* MODULE */
 
 
+/* Do a hardware reset on the card.
+ */
 int arcnet_reset(struct device *dev)
 {
 	struct arcnet_local *lp=(struct arcnet_local *)dev->priv;
@@ -899,25 +979,84 @@
 	return 0;
 }
 
+
+/* Setup a struct device for ARCnet.  This should really be in net_init.c
+ * but since there are three different ARCnet devices ANYWAY... <gargle>
+ *
+ * Actually, the whole idea of having all this kernel-dependent stuff (ie.
+ * "new-style flags") setup per-net-device is kind of weird anyway.
+ *
+ * Intelligent defaults?!  Nah.
+ */
+void arcnet_setup(struct device *dev)
+{
+	int i;
+	for (i=0; i<DEV_NUMBUFFS; i++)
+		skb_queue_head_init(&dev->buffs[i]);
+
+	dev->broadcast[0]=0x00;	/* broadcasts on ARCnet are address 0 */
+	dev->addr_len=1;
+	dev->type=ARPHRD_ARCNET;
+
+	/* New-style flags. */
+	dev->flags	= IFF_BROADCAST;
+	dev->family	= AF_INET;
+	dev->pa_addr	= 0;
+	dev->pa_brdaddr = 0;
+	dev->pa_mask	= 0;
+	dev->pa_alen	= 4;
+}
+
+
+/* Initialize the arc0e device.
+ */
 static int arcnetE_init(struct device *dev)
 {
 	struct arcnet_local *lp = (struct arcnet_local *)dev->priv;
 
-	ether_setup(lp->edev);
+	ether_setup(dev); /* we're emulating ether here, not ARCnet */
 	dev->dev_addr[0]=0;
 	dev->dev_addr[5]=lp->arcnum;
-	dev->mtu=493;	/* MTU is small because of missing packet splitting */
-	lp->edev->open=NULL;
-	lp->edev->stop=NULL;
-	lp->edev->hard_start_xmit=arcnetE_send_packet;
+	dev->mtu=512-sizeof(struct HardHeader)-dev->hard_header_len-1;
+	dev->open=NULL;
+	dev->stop=NULL;
+	dev->hard_start_xmit=arcnetE_send_packet;
 
 	BUGLVL(D_EXTRA)
-		printk("%s: ARCnet \"Ethernet-Encap\" protocol initialized.\n",
-			lp->edev->name);
+		printk("%s: ARCnet Ethernet-Encap protocol initialized.\n",
+			dev->name);
 			
 	return 0;
 }
 
+/* Initialize the arc0s device.
+ */
+static int arcnetS_init(struct device *dev)
+{
+	struct arcnet_local *lp = (struct arcnet_local *)dev->priv;
+
+	arcnet_setup(dev);
+       
+	/* And now fill particular fields with arcnet values */
+	dev->dev_addr[0]=lp->arcnum;
+	dev->hard_header_len=sizeof(struct S_ClientData);
+	dev->mtu=512-sizeof(struct HardHeader)-dev->hard_header_len
+		+ S_EXTRA_CLIENTDATA;
+	dev->open=NULL;
+	dev->stop=NULL;
+	dev->hard_start_xmit=arcnetS_send_packet;
+	dev->hard_header=arcnetS_header;
+	dev->rebuild_header=arcnetS_rebuild_header;
+#ifdef LINUX12
+	dev->type_trans=arcnetS_type_trans;
+#endif
+	BUGLVL(D_EXTRA)
+		printk("%s: ARCnet RFC1051 (NetBsd, AmiTCP) protocol initialized.\n",
+			dev->name);
+
+	return 0;
+}
+
 
 /****************************************************************************
  *                                                                          *
@@ -937,6 +1076,7 @@
 arcnet_open(struct device *dev)
 {
 	struct arcnet_local *lp = (struct arcnet_local *)dev->priv;
+	int ioaddr=dev->base_addr,delayval;
 
 	if (dev->metric>=1000)
 	{
@@ -945,7 +1085,7 @@
 		dev->metric=1;
 	}
 
-	BUGLVL(D_NORMAL) printk(version);
+	BUGLVL(D_EXTRA) printk(version);
 
 	irq2dev_map[dev->irq] = dev;
 
@@ -981,8 +1121,25 @@
 	lp->edev->init=arcnetE_init;
 	register_netdev(lp->edev);
 
+	/* Initialize the RFC1051-encap protocol driver */
+	lp->sdev=(struct device *)kmalloc(sizeof(struct device),GFP_KERNEL);
+	memcpy(lp->sdev,dev,sizeof(struct device));
+	lp->sdev->name=(char *)kmalloc(10,GFP_KERNEL);
+	sprintf(lp->sdev->name,"%ss",dev->name);
+	lp->sdev->init=arcnetS_init;
+	register_netdev(lp->sdev);
+
 	/* we're started */
 	START=1;
+	
+	/* make sure we're ready to receive IRQ's.
+	 * arcnet_reset sets this for us, but if we receive one before
+	 * START is set to 1, bad things happen.
+	 */
+	outb(0,INTMASK);
+	JIFFER(ACKtime);
+	outb(NORXflag|RECON_flag,INTMASK);
+	
 
 #ifdef MODULE
 	MOD_INC_USE_COUNT;
@@ -1003,17 +1160,18 @@
 	TBUSY=1;
 	START=0;
 	
-	/* Flush the Tx and disable Rx here.     */
-
-	outb(0,INTMASK);	/* no IRQ's */
-	outb(NOTXcmd,COMMAND);  /* disable transmit */
+	/* Flush TX and disable RX */
+	outb(0,INTMASK);	/* no IRQ's (except RESET, of course) */
+	outb(NOTXcmd,COMMAND);  /* stop transmit */
 	outb(NORXcmd,COMMAND);	/* disable receive */
 	
+	/* reset more flags */
+	INTERRUPT=0;
+	
 	/* do NOT free lp->adev!!  It's static! */
 	lp->adev=NULL;
 	
 	/* free the ethernet-encap protocol device */
-	lp->edev->start=0;
 	lp->edev->priv=NULL;
 	dev_close(lp->edev);
 	unregister_netdev(lp->edev);
@@ -1021,6 +1179,14 @@
 	kfree(lp->edev);
 	lp->edev=NULL;
 
+	/* free the RFC1051-encap protocol device */
+	lp->sdev->priv=NULL;
+	dev_close(lp->sdev);
+	unregister_netdev(lp->sdev);
+	kfree(lp->sdev->name);
+	kfree(lp->sdev);
+	lp->sdev=NULL;
+
 	/* Update the statistics here. */
 
 #ifdef MODULE
@@ -1090,8 +1256,9 @@
 		
 		outb(0,INTMASK);
 		if (status&NORXflag) EnableReceiver();
-		if (!(status&TXFREEflag)) outb(NOTXcmd,COMMAND);
-		dev->trans_start = jiffies;
+		if (!(status&TXFREEflag))
+			outb(NOTXcmd,COMMAND);
+		/*dev->trans_start = jiffies;*/
 
 		if (lp->outgoing.skb)
 		{
@@ -1099,14 +1266,14 @@
 			lp->stats.tx_dropped++;
 		}
 		lp->outgoing.skb=NULL;
-
+		
 		TBUSY=0;
 		lp->intx--;
 		/*lp->intx=0;*/
 		/*lp->in_txhandler=0;*/
 		lp->txready=0;
 		lp->sending=0;
-		mark_bh(NET_BH);
+		/*mark_bh(NET_BH);*/
 
 		outb(NORXflag|RECON_flag,INTMASK);
 
@@ -1117,9 +1284,8 @@
 	   we are passed NULL. Caution: dev_tint() handles the cli()/sti()
 	   itself. */
 	if (skb == NULL) {
-		BUGLVL(D_NORMAL)
-			printk("arcnet: tx passed null skb (status=%Xh, inTX=%d, tickssofar=%ld)\n",
-				inb(STATUS),lp->intx,jiffies-dev->trans_start);
+		printk("arcnet: tx passed null skb (status=%Xh, inTX=%d, tickssofar=%ld)\n",
+			inb(STATUS),lp->intx,jiffies-dev->trans_start);
 		dev_tint(dev);
 		lp->intx--;
 		return 0;
@@ -1172,7 +1338,7 @@
 		out->hdr->sequence=(lp->sequence++);
 
 		if (lp->txready && inb(STATUS)&TXFREEflag)
-			arcnetA_go_tx(dev);
+			arcnetAS_go_tx(dev);
 		
 		/* fits in one packet? */
 		if (out->length-EXTRA_CLIENTDATA<=XMTU)
@@ -1185,9 +1351,12 @@
 					out->hdr->split_flag);
 			out->numsegs=1;
 			out->segnum=1;
-			arcnetA_prepare_tx(dev,out->hdr,
+			arcnetAS_prepare_tx(dev,
+				((char *)out->hdr)+EXTRA_CLIENTDATA,
+				sizeof(struct ClientData)-EXTRA_CLIENTDATA,
+				((char *)skb->data)+sizeof(struct ClientData),
 				out->length-sizeof(struct ClientData),
-				((char *)skb->data)+sizeof(struct ClientData));
+				out->hdr->daddr,1);
 
 			/* done right away */
 			dev_kfree_skb(out->skb,FREE_WRITE);
@@ -1195,7 +1364,7 @@
 					
 			if (!lp->sending)
 			{
-				arcnetA_go_tx(dev);
+				arcnetAS_go_tx(dev);
 				
 				/* inform upper layers */
 				TBUSY=0;
@@ -1218,7 +1387,7 @@
 
 			/* if a packet waiting, launch it */
 			if (lp->txready && inb(STATUS)&TXFREEflag)
-				arcnetA_go_tx(dev);
+				arcnetAS_go_tx(dev);
 
 			if (!lp->txready)
 			{
@@ -1228,10 +1397,10 @@
 				arcnetA_continue_tx(dev);
 				if (!lp->sending)
 				{
-					arcnetA_go_tx(dev);
+					arcnetAS_go_tx(dev);
 					arcnetA_continue_tx(dev);
 					if (!lp->sending)
-						arcnetA_go_tx(dev);
+						arcnetAS_go_tx(dev);
 				}
 			}
 			
@@ -1256,8 +1425,8 @@
 }
 
 /* After an RFC1201 split packet has been set up, this function calls
- * arcnetA_prepare_tx to load the next segment into the card.  This function
- * does NOT automatically call arcnetA_go_tx to allow for easier double-
+ * arcnetAS_prepare_tx to load the next segment into the card.  This function
+ * does NOT automatically call arcnetAS_go_tx to allow for easier double-
  * buffering.
  */
 static void arcnetA_continue_tx(struct device *dev)
@@ -1290,7 +1459,9 @@
 		out->segnum+1,out->seglen,out->numsegs,
 		out->length,out->hdr->split_flag);
 
-	arcnetA_prepare_tx(dev,out->hdr,out->seglen,out->data);
+	arcnetAS_prepare_tx(dev,((char *)out->hdr)+EXTRA_CLIENTDATA,
+		sizeof(struct ClientData)-EXTRA_CLIENTDATA,
+		out->data,out->seglen,out->hdr->daddr,1);
 		
 	out->dataleft-=out->seglen;
 	out->data+=out->seglen;
@@ -1299,82 +1470,85 @@
 
 
 /* Given an skb, copy a packet into the ARCnet buffers for later transmission
- * by arcnetA_go_tx.
+ * by arcnetAS_go_tx.
  */
 static void
-arcnetA_prepare_tx(struct device *dev,struct ClientData *hdr,short length,
-		char *data)
+arcnetAS_prepare_tx(struct device *dev,u_char *hdr,int hdrlen,
+		char *data,int length,int daddr,int exceptA)
 {
 	struct arcnet_local *lp = (struct arcnet_local *)dev->priv;
 	struct ClientData *arcsoft;
 	union ArcPacket *arcpacket = 
 		(union ArcPacket *)(dev->mem_start+512*(lp->txbuf^1));
-	u_char pkttype;
 	int offset;
-	short daddr;
 	
 	lp->txbuf=lp->txbuf^1;	/* XOR with 1 to alternate between 2 and 3 */
 	
-	length+=4;
+	length+=hdrlen;
 
 	BUGLVL(D_TX)
-		printk("arcnet: arcnetA_prep_tx: hdr:%ph, length:%d, data:%ph\n",
+		printk("arcnet: arcnetAS_prep_tx: hdr:%ph, length:%d, data:%ph\n",
 			hdr,length,data);
 
 	/* clean out the page to make debugging make more sense :) */
 	BUGLVL(D_DURING)
 		memset((void *)dev->mem_start+lp->txbuf*512,0x42,512);
 
-	daddr=arcpacket->hardheader.destination=hdr->daddr;
+	arcpacket->hardheader.destination=daddr;
 
 	/* load packet into shared memory */
 	if (length<=MTU)	/* Normal (256-byte) Packet */
 	{
-		pkttype=NORMAL;
-			
 		arcpacket->hardheader.offset1=offset=256-length;
 		arcsoft=(struct ClientData *)
-			(&arcpacket->raw[offset-EXTRA_CLIENTDATA]);
+			(&arcpacket->raw[offset]);
 	}
 	else if (length>=MinTU)	/* Extended (512-byte) Packet */
 	{
-		pkttype=EXTENDED;
-		
 		arcpacket->hardheader.offset1=0;
 		arcpacket->hardheader.offset2=offset=512-length;
+		
 		arcsoft=(struct ClientData *)
-			(&arcpacket->raw[offset-EXTRA_CLIENTDATA]);
+			(&arcpacket->raw[offset]);
 	}
-	else				/* Exception Packet */
+	else if (exceptA)		/* RFC1201 Exception Packet */
 	{
-		pkttype=EXCEPTION;
-		
 		arcpacket->hardheader.offset1=0;
 		arcpacket->hardheader.offset2=offset=512-length-4;
 		arcsoft=(struct ClientData *)
-			(&arcpacket->raw[offset+4-EXTRA_CLIENTDATA]);
+			(&arcpacket->raw[offset+4]);
 		
 		/* exception-specific stuff - these four bytes
 		 * make the packet long enough to fit in a 512-byte
 		 * frame.
 		 */
-		arcpacket->raw[offset+0]=hdr->protocol_id;
+		arcpacket->raw[offset+0]=hdr[0];
 		arcpacket->raw[offset+1]=0xFF; /* FF flag */
 			arcpacket->raw[offset+2]=0xFF; /* FF padding */
 			arcpacket->raw[offset+3]=0xFF; /* FF padding */
 	}
+	else				/* "other" Exception packet */
+	{
+		/* RFC1051 - set 4 trailing bytes to 0 */
+		memset(&arcpacket->raw[508],0,4);
+
+		/* now round up to MinTU */
+		arcpacket->hardheader.offset1=0;
+		arcpacket->hardheader.offset2=offset=512-MinTU;
+		arcsoft=(struct ClientData *)(&arcpacket->raw[offset]);
+	}
 
 
 	/* copy the packet into ARCnet shmem
 	 *  - the first bytes of ClientData header are skipped
 	 */
-	memcpy((u_char*)arcsoft+EXTRA_CLIENTDATA,
-		(u_char*)hdr+EXTRA_CLIENTDATA,4);
-	memcpy((u_char*)arcsoft+sizeof(struct ClientData),
-		data,length-4);
+	memcpy((u_char*)arcsoft,
+		(u_char*)hdr,hdrlen);
+	memcpy((u_char*)arcsoft+hdrlen,
+		data,length-hdrlen);
 		
-	BUGLVL(D_DURING) printk("arcnet: transmitting packet to station %02Xh (%d bytes, type=%d)\n",
-			daddr,length,pkttype);
+	BUGLVL(D_DURING) printk("arcnet: transmitting packet to station %02Xh (%d bytes)\n",
+			daddr,length);
 			
 	BUGLVL(D_TX)
 	{
@@ -1382,7 +1556,7 @@
 		
 		printk("arcnet: packet dump [tx] follows:");
 
- 		for (county=0; county<16+(pkttype!=NORMAL)*16; county++)
+ 		for (county=0; county<16+(length>MTU)*16; county++)
 		{
 			printk("\n[%04X] ",county*16);
 			for (countx=0; countx<16; countx++)
@@ -1394,16 +1568,16 @@
 	}
 
 #ifdef VERIFY_ACK
-	lp->outgoing.lastload_dest=hdr->daddr;
+	lp->outgoing.lastload_dest=daddr;
 #endif
 	lp->txready=lp->txbuf;	/* packet is ready for sending */
 }
 
 /* Actually start transmitting a packet that was placed in the card's
- * buffer by arcnetA_prepare_tx.
+ * buffer by arcnetAS_prepare_tx.
  */
 static void
-arcnetA_go_tx(struct device *dev)
+arcnetAS_go_tx(struct device *dev)
 {
 	struct arcnet_local *lp=(struct arcnet_local *)dev->priv;
 	int ioaddr=dev->base_addr;
@@ -1450,7 +1624,7 @@
 		
 		/* Try to restart the adaptor. */
 		TBUSY=0;
-		dev->trans_start = jiffies;
+		/*dev->trans_start = jiffies;*/
 		return 0;
 	}
 
@@ -1557,7 +1731,7 @@
 	#endif
 		lp->txready=lp->txbuf;	/* packet is ready for sending */
 
-		arcnetA_go_tx(dev);
+		arcnetAS_go_tx(dev);
 		dev->trans_start = jiffies;
 	}
 
@@ -1567,6 +1741,179 @@
 }
 
 
+/* Called by the kernel in order to transmit an RFC1051-type packet.
+ */
+static int
+arcnetS_send_packet(struct sk_buff *skb, struct device *dev)
+{
+	struct arcnet_local *lp = (struct arcnet_local *)dev->priv;
+	int ioaddr=dev->base_addr;
+
+	lp->intx++;
+	
+	BUGLVL(D_DURING)
+		printk("arcnetS: transmit requested (status=%Xh, inTX=%d)\n",
+			inb(STATUS),lp->intx);
+			
+	if (lp->in_txhandler)
+	{
+		printk("arcnetS: send_packet called while in txhandler!\n");
+		lp->intx--;
+		return 1;
+	}
+
+	if (IF_TBUSY)
+	{
+		/* If we get here, some higher level has decided we are broken.
+		   There should really be a "kick me" function call instead. */
+		int tickssofar = jiffies - dev->trans_start;
+		int recbuf=lp->recbuf;
+		int status=inb(STATUS);
+		
+		if (tickssofar < 5) 
+		{
+			BUGLVL(D_DURING)
+				printk("arcnetS: premature kickme! (status=%Xh ticks=%d o.skb=%ph numsegs=%d segnum=%d\n",
+					status,tickssofar,lp->outgoing.skb,
+					lp->outgoing.numsegs,
+					lp->outgoing.segnum);
+			lp->intx--;
+			return 1;
+		}
+
+		BUGLVL(D_EXTRA)
+			printk("arcnetS: transmit timed out (status=%Xh, inTX=%d, inTXh=%d, tickssofar=%d)\n",
+				status,lp->intx,lp->in_txhandler,tickssofar);
+				
+		lp->stats.tx_errors++;
+
+		/* Try to restart the adaptor. */
+		/*arcnet_reset(dev);*/
+		
+		outb(0,INTMASK);
+		if (status&NORXflag) EnableReceiver();
+		if (!(status&TXFREEflag)) outb(NOTXcmd,COMMAND);
+		/*dev->trans_start = jiffies;*/
+
+		if (lp->outgoing.skb)
+		{
+			dev_kfree_skb(lp->outgoing.skb,FREE_WRITE);
+			lp->stats.tx_dropped++;
+		}
+		lp->outgoing.skb=NULL;
+
+		TBUSY=0;
+		lp->intx--;
+		/*lp->intx=0;*/
+		/*lp->in_txhandler=0;*/
+		lp->txready=0;
+		lp->sending=0;
+		/*mark_bh(NET_BH);*/
+
+		outb(NORXflag|RECON_flag,INTMASK);
+
+		return 1;
+	}
+
+	/* If some higher layer thinks we've missed a tx-done interrupt
+	   we are passed NULL. Caution: dev_tint() handles the cli()/sti()
+	   itself. */
+	if (skb == NULL) {
+		printk("arcnetS: tx passed null skb (status=%Xh, inTX=%d, tickssofar=%ld)\n",
+			inb(STATUS),lp->intx,jiffies-dev->trans_start);
+		dev_tint(dev);
+		lp->intx--;
+		return 0;
+	}
+	
+	if (lp->txready)	/* transmit already in progress! */
+	{
+		printk("arcnetS: trying to start new packet while busy! (status=%Xh)\n",
+			inb(STATUS));
+		/*printk("arcnetS: marking as not ready.\n");*/
+		outb(0,INTMASK);
+		outb(NOTXcmd,COMMAND); /* abort current send */
+		arcnet_inthandler(dev); /* fake an interrupt */
+		lp->stats.tx_errors++;
+		lp->intx--;
+		lp->txready=0;	/* we definitely need this line! */
+		
+		return 1;
+	}
+
+	/* Block a timer-based transmit from overlapping.  This could better be
+	   done with atomic_swap(1, dev->tbusy), but set_bit() works as well. */
+        if (set_bit(0, (void*)&dev->tbusy) != 0)
+        {
+            printk("arcnetS: transmitter called with busy bit set! (status=%Xh, inTX=%d, tickssofar=%ld)\n",
+            		inb(STATUS),lp->intx,jiffies-dev->trans_start);
+            lp->intx--;
+            return -EBUSY;
+        }
+	else {
+		int length;
+		struct S_ClientData *hdr=(struct S_ClientData *)skb->data;
+		
+		TBUSY=1;
+		
+		length = 1 < skb->len ? skb->len : 1;
+		
+		BUGLVL(D_SKB)
+		{
+			short i;
+			for(i=0; i<skb->len; i++)
+			{
+				if( i%16 == 0 ) printk("\n[%04hX] ",i);
+				printk("%02hX ",((unsigned char*)skb->data)[i]);
+			}
+			printk("\n");
+		}
+
+		if (lp->txready && inb(STATUS)&TXFREEflag)
+			arcnetAS_go_tx(dev);
+		
+		/* fits in one packet? */
+		if (length-S_EXTRA_CLIENTDATA<=XMTU)
+		{
+			arcnetAS_prepare_tx(dev,
+				skb->data+S_EXTRA_CLIENTDATA,
+				sizeof(struct S_ClientData)-S_EXTRA_CLIENTDATA,
+				skb->data+sizeof(struct S_ClientData),
+				length-sizeof(struct S_ClientData),
+				hdr->daddr,0);
+
+			/* done right away */
+			dev_kfree_skb(skb,FREE_WRITE);
+					
+			if (!lp->sending)
+			{
+				arcnetAS_go_tx(dev);
+				
+				/* inform upper layers */
+				TBUSY=0;
+				mark_bh(NET_BH);
+			}
+		}
+		else			/* too big for one - not accepted */
+		{
+			printk("arcnetS: packet too long (length=%d)\n",
+				length);
+			dev_kfree_skb(skb,FREE_WRITE);
+			lp->stats.tx_dropped++;
+			TBUSY=0;
+			mark_bh(NET_BH);	
+		}
+	}
+
+	lp->intx--;
+	lp->stats.tx_packets++;
+	dev->trans_start=jiffies;
+	return 0;
+}
+
+
+
+
 /****************************************************************************
  *                                                                          *
  * Interrupt handler                                                        *
@@ -1576,7 +1923,7 @@
 
 /* The typical workload of the driver:  Handle the network interface
  * interrupts.  This doesn't do much right now except call arcnet_inthandler,
- * which takes different parameters but is sometimes called from other places
+ * which takes different parameters but may be called from other places
  * as well.
  */
 static void
@@ -1584,12 +1931,14 @@
 {
 	struct device *dev = (struct device *)(irq2dev_map[irq]);
 
-	if (dev==NULL || !dev->start)
+	if (dev==NULL)
 	{
 		BUGLVL(D_EXTRA)
 			printk("arcnet: irq %d for unknown device.\n", irq);
 		return;
 	}
+	
+	if (!dev->start) return;
 
 	arcnet_inthandler(dev);
 }
@@ -1601,23 +1950,21 @@
 static void
 arcnet_inthandler(struct device *dev)
 {	
-	struct arcnet_local *lp;
-	int ioaddr, status, boguscount = 3, didsomething;
+	struct arcnet_local *lp=(struct arcnet_local *)dev->priv;
+	int ioaddr=dev->base_addr, status, boguscount = 3, didsomething;
 	
-	if (dev->interrupt)
+	if (IF_INTERRUPT)
+	{
 		printk("arcnet: DRIVER PROBLEM!  Nested arcnet interrupts!\n");
-	
-	dev->interrupt = 1;
-
-	ioaddr = dev->base_addr;
-	lp = (struct arcnet_local *)dev->priv;
-
+		return;	/* don't even try. */
+	}
 	outb(0,INTMASK);
-	sti();
+	INTERRUPT = 1;
 	
 	BUGLVL(D_DURING)
 		printk("arcnet: in net_interrupt (status=%Xh)\n",inb(STATUS));
-
+		
+#if 1 /* Whatever you do, don't set this to 0. */
 	do
 	{
 		status = inb(STATUS);
@@ -1667,13 +2014,12 @@
 
 			/* enable receive of our next packet */
 			EnableReceiver();
-		
+
 			/* Got a packet. */
 			arcnet_rx(dev,!recbuf);
-			
 			didsomething++;
 		}
-
+		
 		/* it can only be an xmit-done irq if we're xmitting :) */
 		if (status&TXFREEflag && !lp->in_txhandler && lp->sending)
 		{
@@ -1691,10 +2037,9 @@
 			{
 				if (lp->outgoing.lasttrans_dest != 0)
 				{
-					BUGLVL(D_NORMAL)
-						printk("arcnet: transmit was not acknowledged! (status=%Xh, dest=%d)\n",
-							status,
-							lp->outgoing.lasttrans_dest);
+					printk("arcnet: transmit was not acknowledged! (status=%Xh, dest=%d)\n",
+						status,
+						lp->outgoing.lasttrans_dest);
 					lp->stats.tx_errors++;
 				}
 				else
@@ -1710,7 +2055,7 @@
 			/* send packet if there is one */
 			if (lp->txready)
 			{
-				arcnetA_go_tx(dev);
+				arcnetAS_go_tx(dev);
 				didsomething++;
 			}
 			
@@ -1744,7 +2089,7 @@
 			if (out->segnum<out->numsegs)
 				arcnetA_continue_tx(dev);
 			if (lp->txready && !lp->sending)
-				arcnetA_go_tx(dev);
+				arcnetAS_go_tx(dev);
 
 			/* if segnum==numsegs, the transmission is finished;
 			 * free the skb.
@@ -1768,19 +2113,25 @@
 			
 			lp->in_txhandler--;
 		}
-
 	} while (--boguscount && didsomething);
 
 	BUGLVL(D_DURING)
-		printk("arcnet: net_interrupt complete (status=%Xh)\n\n",
-			inb(STATUS));
+		printk("arcnet: net_interrupt complete (status=%Xh, count=%d)\n\n",
+			inb(STATUS),boguscount);
 
-	if (dev->start && lp->sending )
+	if (dev->start && lp->sending)
 		outb(NORXflag|TXFREEflag|RECON_flag,INTMASK);
 	else
 		outb(NORXflag|RECON_flag,INTMASK);
 
-	dev->interrupt=0;
+#else /* Disable everything */
+
+	outb(RXcmd|(0<<3)|RXbcasts,COMMAND);
+	outb(NORXflag,INTMASK);
+
+#endif
+
+	INTERRUPT=0;
 }
 
 
@@ -1844,12 +2195,15 @@
 	case ARC_P_ARP:
 	case ARC_P_RARP:
 	case ARC_P_IPX:
-		arcnetA_rx(dev,(struct ClientData*)arcsoft,
-			length,saddr,daddr);
+		arcnetA_rx(lp->adev,arcsoft,length,saddr,daddr);
 		break;
 	case ARC_P_ETHER:
-		arcnetE_rx(dev,arcsoft,length,saddr,daddr);
+		arcnetE_rx(lp->edev,arcsoft,length,saddr,daddr);
 		break;		
+	case ARC_P_IP_RFC1051:
+	case ARC_P_ARP_RFC1051:
+		arcnetS_rx(lp->sdev,arcsoft,length,saddr,daddr);
+		break;
 	default:
 		printk("arcnet: received unknown protocol %d (%Xh)\n",
 			arcsoft[0],arcsoft[0]);
@@ -1860,7 +2214,7 @@
 	{
         	int countx,county;
         	
-        	printk("arcnet: rx packet dump follows:");
+        	printk("arcnet: packet dump [rx] follows:");
 
        		for (county=0; county<16+(length>240)*16; county++)
        		{
@@ -1889,18 +2243,21 @@
 /* Packet receiver for "standard" RFC1201-style packets
  */
 static void
-arcnetA_rx(struct device *dev,struct ClientData *arcsoft,
+arcnetA_rx(struct device *dev,u_char *buf,
 	int length,u_char saddr, u_char daddr)
 {
 	struct arcnet_local *lp = (struct arcnet_local *)dev->priv;
 	struct sk_buff *skb;
-	struct ClientData *soft;
+	struct ClientData *arcsoft,*soft;
 	
 	BUGLVL(D_DURING)
 		printk("arcnet: it's an RFC1201 packet (length=%d)\n",
 			length);
 			
-	arcsoft=(struct ClientData *)((u_char *)arcsoft-EXTRA_CLIENTDATA);
+	/* compensate for EXTRA_CLIENTDATA (which isn't actually in the
+	 * packet)
+	 */
+	arcsoft=(struct ClientData *)(buf-EXTRA_CLIENTDATA);
 	length+=EXTRA_CLIENTDATA;
 
 	if (arcsoft->split_flag==0xFF)  /* Exception Packet */
@@ -1998,9 +2355,9 @@
                		printk("\n");
             	}
 
-			#ifndef LINUX12
-			skb->protocol=arcnetA_type_trans(skb,dev);
-			#endif
+		#ifndef LINUX12
+		skb->protocol=arcnetA_type_trans(skb,dev);
+		#endif
 
          	netif_rx(skb);
          	lp->stats.rx_packets++;
@@ -2156,7 +2513,7 @@
 			BUGLVL(D_SKB)
 			{
 	        	    short i;
-	        	       	for( i=0; i< skb->len; i++)
+	        	       	for(i=0; i<skb->len; i++)
                			{
                 	       		if( i%16 == 0 ) printk("\n[%04hX] ",i);
                 	       		printk("%02hX ",((unsigned char*)skb->data)[i]);
@@ -2165,9 +2522,9 @@
             		}
 
 			
-				#ifndef LINUX12
-				skb->protocol=arcnetA_type_trans(skb,dev);
-				#endif
+			#ifndef LINUX12
+			skb->protocol=arcnetA_type_trans(skb,dev);
+			#endif
 				
 	         	netif_rx(skb);
         	 	lp->stats.rx_packets++;
@@ -2197,7 +2554,7 @@
        	}
        	
        	skb->len = length;
-       	skb->dev = lp->edev;
+       	skb->dev = dev;
        	
        	memcpy(skb->data,(u_char *)arcsoft+1,length-1);
 
@@ -2215,14 +2572,75 @@
                 printk("\n");
         }
         
-		#ifndef LINUX12
-		skb->protocol=eth_type_trans(skb,dev);
-		#endif
+	#ifndef LINUX12
+	skb->protocol=eth_type_trans(skb,dev);
+	#endif
         
         netif_rx(skb);
         lp->stats.rx_packets++;
 }
 
+/* Packet receiver for RFC1051 packets; 
+ */
+static void
+arcnetS_rx(struct device *dev,u_char *buf,
+	int length,u_char saddr, u_char daddr)
+{
+	struct arcnet_local *lp = (struct arcnet_local *)dev->priv;
+	struct sk_buff *skb;
+	struct S_ClientData *arcsoft,*soft;
+	
+	arcsoft=(struct S_ClientData *)(buf-S_EXTRA_CLIENTDATA);
+	length+=S_EXTRA_CLIENTDATA;
+	
+	BUGLVL(D_DURING)
+		printk("arcnetS: it's an RFC1051 packet (length=%d)\n",
+			length);
+			
+	
+			
+	{    /* was "if not split" in A protocol, S is never split */	
+
+         	skb = alloc_skb(length, GFP_ATOMIC);
+         	if (skb == NULL) {
+         		printk("arcnetS: Memory squeeze, dropping packet.\n");
+         		lp->stats.rx_dropped++;
+         		return;
+         	}
+         	soft=(struct S_ClientData *)skb->data;
+		skb->len = length;
+		memcpy((u_char *)soft + sizeof(struct S_ClientData)
+				- S_EXTRA_CLIENTDATA,
+			(u_char *)arcsoft + sizeof(struct S_ClientData)
+				- S_EXTRA_CLIENTDATA, 
+			length - sizeof(struct S_ClientData)
+				+ S_EXTRA_CLIENTDATA);
+		soft->protocol_id=arcsoft->protocol_id;
+         	soft->daddr=daddr;
+         	soft->saddr=saddr;
+         	skb->dev = dev;  /* is already lp->sdev */
+         	
+		BUGLVL(D_SKB)
+		{
+	        	short i;
+	               	for(i=0; i<skb->len; i++)
+               		{
+                       		if( i%16 == 0 ) printk("\n[%04hX] ",i);
+                       		printk("%02hX ",((unsigned char*)skb->data)[i]);
+               		}
+               		printk("\n");
+            	}
+
+		#ifndef LINUX12
+		skb->protocol=arcnetS_type_trans(skb,dev);
+		#endif
+
+         	netif_rx(skb);
+         	lp->stats.rx_packets++;
+         }
+}
+
+
 
 /****************************************************************************
  *                                                                          *
@@ -2285,7 +2703,13 @@
 #endif
 /*	struct arcnet_local *lp=(struct arcnet_local *)(dev->priv);*/
 
-	/* set the protocol ID according to RFC-1201 */
+	BUGLVL(D_DURING)
+		printk("arcnetA: create header from %d to %d; protocol %d (%Xh); size %u.\n",
+			saddr ? *(u_char*)saddr : -1,
+			daddr ? *(u_char*)daddr : -1,
+			type,type,len);
+
+	/* set the protocol ID according to RFC1201 */
 	switch(type)
 	{
 	case ETH_P_IP:
@@ -2322,22 +2746,75 @@
 	else
 		head->saddr=((u_char*)(dev->dev_addr))[0];
 
-#if 0
-	/*
-	 *	Anyway, the loopback-device should never use this function... 
-	 *
-	 *	And the chances of it using the ARCnet version of it are so
-	 *	tiny that I don't think we have to worry :)
-	 */
-	if (dev->flags & IFF_LOOPBACK) 
+	head->split_flag=0;	/* split packets are done elsewhere */
+	head->sequence=0;	/* so are sequence numbers */
+
+	/* supposedly if daddr is NULL, we should ignore it... */
+	if(daddr)
 	{
-		head->daddr=0;
-		return(dev->hard_header_len);
+		head->daddr=((u_char*)daddr)[0];
+		return dev->hard_header_len;
 	}
+	else
+		head->daddr=0;	/* better fill one in anyway */
+		
+	return -dev->hard_header_len;
+}
+
+
+/* Create the ARCnet ClientData header for an arbitrary protocol layer
+ *
+ * saddr=NULL	means use device source address (always will anyway)
+ * daddr=NULL	means leave destination address (eg unresolved arp)
+ */
+#ifdef LINUX12
+int arcnetS_header(unsigned char *buff,struct device *dev,
+		unsigned short type,void *daddr,void *saddr,unsigned len,
+		struct sk_buff *skb)
+#else
+int arcnetS_header(struct sk_buff *skb,struct device *dev,
+		unsigned short type,void *daddr,void *saddr,unsigned len)
 #endif
+{
+	struct S_ClientData *head = (struct S_ClientData *)
+#ifdef LINUX12
+		buff;
+#else
+		skb_push(skb,dev->hard_header_len);
+#endif
+/*	struct arcnet_local *lp=(struct arcnet_local *)(dev->priv);*/
 
-	head->split_flag=0;	/* split packets are done elsewhere */
-	head->sequence=0;	/* so are sequence numbers */
+	/* set the protocol ID according to RFC1051 */
+	switch(type)
+	{
+	case ETH_P_IP:
+		head->protocol_id=ARC_P_IP_RFC1051;
+		BUGLVL(D_DURING)
+			printk("arcnetS: S_header: IP_RFC1051 packet.\n");
+		break;
+	case ETH_P_ARP:
+		head->protocol_id=ARC_P_ARP_RFC1051;
+		BUGLVL(D_DURING)
+			printk("arcnetS: S_header: ARP_RFC1051 packet.\n");
+		break;
+	default:
+		printk("arcnetS: I don't understand protocol %d (%Xh)\n",
+			type,type);
+		return 0;
+	}	
+
+	/*
+	 * Set the source hardware address.
+	 *
+	 * This is pretty pointless for most purposes, but it can help
+	 * in debugging.  saddr is stored in the ClientData header and
+	 * removed before sending the packet (since ARCnet does not allow
+	 * us to change the source address in the actual packet sent)
+	 */
+	if(saddr)
+		head->saddr=((u_char*)saddr)[0];
+	else
+		head->saddr=((u_char*)(dev->dev_addr))[0];
 
 	/* supposedly if daddr is NULL, we should ignore it... */
 	if(daddr)
@@ -2352,6 +2829,7 @@
 }
 
 
+
 /* Rebuild the ARCnet ClientData header. This is called after an ARP
  * (or in future other address resolution) has completed on this
  * sk_buff. We now let ARP fill in the other fields.
@@ -2360,6 +2838,7 @@
 		struct sk_buff *skb)
 {
 	struct ClientData *head = (struct ClientData *)buff;
+	int status;
 
 	/*
 	 * Only ARP and IP are currently supported
@@ -2367,7 +2846,43 @@
 	 
 	if(head->protocol_id != ARC_P_IP) 
 	{
-		printk("arcnet: I don't understand resolve type %d (%Xh) addresses!\n",
+		printk("arcnet: I don't understand protocol type %d (%Xh) addresses!\n",
+			head->protocol_id,head->protocol_id);
+		head->daddr=0;
+		/*memcpy(eth->h_source, dev->dev_addr, dev->addr_len);*/
+		return 0;
+	}
+
+	/*
+	 * Try and get ARP to resolve the header.
+	 */
+#ifdef CONFIG_INET	 
+	BUGLVL(D_DURING)
+		printk("arcnetA: rebuild header from %d to %d; protocol %Xh\n",
+			head->saddr,head->daddr,head->protocol_id);
+	status=arp_find(&(head->daddr), dst, dev, dev->pa_addr, skb)? 1 : 0;
+	BUGLVL(D_DURING)
+		printk("arcnetA:   rebuilt: from %d to %d; protocol %Xh\n",
+			head->saddr,head->daddr,head->protocol_id);
+	return status;
+#else
+	return 0;	
+#endif	
+}
+
+
+int arcnetS_rebuild_header(void *buff,struct device *dev,unsigned long dst,
+		struct sk_buff *skb)
+{
+	struct S_ClientData *head = (struct S_ClientData *)buff;
+
+	/*
+	 * Only ARP and IP are currently supported
+	 */
+	 
+	if(head->protocol_id != ARC_P_IP_RFC1051) 
+	{
+		printk("arcnetS: I don't understand protocol type %d (%Xh) addresses!\n",
 			head->protocol_id,head->protocol_id);
 		head->daddr=0;
 		/*memcpy(eth->h_source, dev->dev_addr, dev->addr_len);*/
@@ -2383,6 +2898,7 @@
 	return 0;	
 #endif	
 }
+
 		
 /* Determine a packet's protocol ID.
  *
@@ -2390,13 +2906,16 @@
  */
 unsigned short arcnetA_type_trans(struct sk_buff *skb,struct device *dev)
 {
-	struct ClientData *head = (struct ClientData *) skb->data;
+	struct ClientData *head;
 	struct arcnet_local *lp=(struct arcnet_local *) (dev->priv);
 
-#ifndef LINUX12
+#ifdef LINUX12
+	head=(struct ClientData *)skb->data;
+#else
 	/* Pull off the arcnet header. */
 	skb->mac.raw=skb->data;
 	skb_pull(skb,dev->hard_header_len);
+	head=(struct ClientData *)skb->mac.raw;
 #endif
 	
 	if (head->daddr==0)
@@ -2420,6 +2939,46 @@
 	default:
 		BUGLVL(D_EXTRA)
 			printk("arcnet: received packet of unknown protocol id %d (%Xh)\n",
+				head->protocol_id,head->protocol_id);
+		lp->stats.rx_frame_errors++;
+		return 0;
+	}
+
+	return htons(ETH_P_IP);
+}
+
+
+unsigned short arcnetS_type_trans(struct sk_buff *skb,struct device *dev)
+{
+	struct S_ClientData *head;
+	struct arcnet_local *lp=(struct arcnet_local *) (dev->priv);
+
+#ifdef LINUX12
+	head=(struct ClientData *)skb->data;
+#else
+	/* Pull off the arcnet header. */
+	skb->mac.raw=skb->data;
+	skb_pull(skb,dev->hard_header_len);
+	head=(struct S_ClientData *)skb->mac.raw;
+#endif
+	
+	if (head->daddr==0)
+		skb->pkt_type=PACKET_BROADCAST;
+	else if (dev->flags&IFF_PROMISC)
+	{
+		/* if we're not sending to ourselves :) */
+		if (head->daddr != dev->dev_addr[0])
+			skb->pkt_type=PACKET_OTHERHOST;
+	}
+	
+	/* now return the protocol number */
+	switch (head->protocol_id)
+	{
+	case ARC_P_IP_RFC1051:	return htons(ETH_P_IP);
+	case ARC_P_ARP_RFC1051:	return htons(ETH_P_ARP);
+	default:
+		BUGLVL(D_EXTRA)
+			printk("arcnetS: received packet of unknown protocol id %d (%Xh)\n",
 				head->protocol_id,head->protocol_id);
 		lp->stats.rx_frame_errors++;
 		return 0;
diff -u --recursive --new-file v1.3.36/linux/drivers/net/loopback.c linux/drivers/net/loopback.c
--- v1.3.36/linux/drivers/net/loopback.c	Tue Oct 10 18:46:36 1995
+++ linux/drivers/net/loopback.c	Sat Oct 28 15:18:23 1995
@@ -15,6 +15,8 @@
  *		Alan Cox	:	Rejig for NET3.029 snap #3
  *		Alan Cox	: 	Fixed NET3.029 bugs and sped up
  *		Larry McVoy	:	Tiny tweak to double performance
+ *		Alan Cox	:	Backed out LMV's tweak - the linux mm cant
+ *					take it...
  *
  *		This program is free software; you can redistribute it and/or
  *		modify it under the terms of the GNU General Public License
@@ -125,10 +127,13 @@
 int loopback_init(struct device *dev)
 {
 	int i;
-#ifdef CONFIG_SKB_LARGE
+#if LINUS_EVER_SOLVES_THE_LARGE_ATOMIC_BUFFER_ISSUE
 	dev->mtu		= 7900;			/* MTU			*/
 #else
-	dev->mtu		= 3800;
+/*
+ *	If Alpha uses 8K pages then I guess 7K would be good for it.
+ */
+	dev->mtu		= 2000;			/* Kept under 1 page    */
 #endif	
 	dev->tbusy		= 0;
 	dev->hard_start_xmit	= loopback_xmit;
diff -u --recursive --new-file v1.3.36/linux/drivers/net/net_init.c linux/drivers/net/net_init.c
--- v1.3.36/linux/drivers/net/net_init.c	Tue Oct 10 18:46:36 1995
+++ linux/drivers/net/net_init.c	Sat Oct 28 15:18:23 1995
@@ -247,7 +247,6 @@
 			for (i = 0; i < MAX_ETH_CARDS; ++i)
 				if (ethdev_index[i] == NULL) {
 					sprintf(dev->name, "eth%d", i);
-					printk("loading device '%s'...\n", dev->name);
 					ethdev_index[i] = dev;
 					break;
 				}
diff -u --recursive --new-file v1.3.36/linux/drivers/net/ppp.c linux/drivers/net/ppp.c
--- v1.3.36/linux/drivers/net/ppp.c	Mon Oct 23 18:02:06 1995
+++ linux/drivers/net/ppp.c	Tue Oct 24 16:19:41 1995
@@ -210,10 +210,10 @@
 			   unsigned len, struct sk_buff *skb);
 
 #else /* The 1.3.x kernel is here */
-#define get_long_user(addr)	    get_user(((long *) addr))
+#define get_long_user(addr)	    get_user(((int *) addr))
 #define get_int_user(addr)	    ((int) get_user(((int *) addr)))
 #define put_byte_user(val,addr)	    put_user((val),((u_char *) (addr)))
-#define put_long_user(val,addr)	    put_user((val),((long *) (addr)))
+#define put_long_user(val,addr)	    put_user((val),((int *) (addr)))
 
 static int ppp_dev_header (sk_buff *, struct device *, unsigned short,
 			   void *, void *, unsigned);
diff -u --recursive --new-file v1.3.36/linux/drivers/net/wd.c linux/drivers/net/wd.c
--- v1.3.36/linux/drivers/net/wd.c	Tue Oct 10 18:46:37 1995
+++ linux/drivers/net/wd.c	Sat Oct 28 15:18:23 1995
@@ -15,6 +15,11 @@
 	This is a driver for WD8003 and WD8013 "compatible" ethercards.
 
 	Thanks to Russ Nelson (nelson@crnwyr.com) for loaning me a WD8013.
+
+	Changelog:
+
+	Paul Gortmaker	: multiple card support for module users
+
 */
 
 static const char *version =
@@ -110,6 +115,7 @@
 	int ancient = 0;			/* An old card without config registers. */
 	int word16 = 0;				/* 0 = 8 bit, 1 = 16 bit */
 	const char *model_name;
+	static unsigned version_printed = 0;
 
 	for (i = 0; i < 8; i++)
 		checksum += inb(ioaddr + 8 + i);
@@ -121,6 +127,9 @@
 	if (dev == NULL)
 		dev = init_etherdev(0, sizeof(struct ei_device));
 
+	if (ei_debug  &&  version_printed++ == 0)
+		printk(version);
+
 	printk("%s: WD80x3 at %#3x, ", dev->name, ioaddr);
 	for (i = 0; i < 6; i++)
 		printk(" %2.2X", dev->dev_addr[i] = inb(ioaddr + 8 + i));
@@ -257,8 +266,6 @@
 
 	printk(" %s, IRQ %d, shared memory at %#lx-%#lx.\n",
 		   model_name, dev->irq, dev->mem_start, dev->mem_end-1);
-	if (ei_debug > 0)
-		printk(version);
 
 	ei_status.reset_8390 = &wd_reset_8390;
 	ei_status.block_input = &wd_block_input;
@@ -408,44 +415,61 @@
 
 
 #ifdef MODULE
+#define MAX_WD_MODS	4	/* Max number of wd modules allowed */
+#define NAMELEN		9	/* # of chars for storing dev->name */
 char kernel_version[] = UTS_RELEASE;
-static char devicename[9] = { 0, };
-static struct device dev_wd80x3 = {
-	devicename, /* device name is inserted by linux/drivers/net/net_init.c */
-	0, 0, 0, 0,
-	0, 0,
-	0, 0, 0, NULL, wd_probe };
-
-int io = 0x300;
-int irq = 0;
-int mem = 0;
-
-int init_module(void)
+static char namelist[NAMELEN * MAX_WD_MODS] = { 0, };
+static struct device dev_wd80x3[MAX_WD_MODS] = {
+	{
+		NULL,		/* assign a chunk of namelist[] below */
+		0, 0, 0, 0,
+		0, 0,
+		0, 0, 0, NULL, NULL
+	},
+};
+
+static int io[MAX_WD_MODS] = { 0, };
+static int irq[MAX_WD_MODS]  = { 0, };
+static int mem[MAX_WD_MODS] = { 0, };
+
+/* This is set up so that only a single autoprobe takes place per call.
+ISA device autoprobes on a running machine are not recommended. */
+int
+init_module(void)
 {
-	if (io == 0)
-		printk("wd: You should not use auto-probing with insmod!\n");
-	dev_wd80x3.base_addr = io;
-	dev_wd80x3.irq       = irq;
-	dev_wd80x3.mem_start = mem;
-	if (register_netdev(&dev_wd80x3) != 0)
-		return -EIO;
+	int this_dev;
+
+	for (this_dev = 0; this_dev < MAX_WD_MODS; this_dev++) {
+		dev_wd80x3[this_dev].name = namelist+(NAMELEN*this_dev);
+		dev_wd80x3[this_dev].irq = irq[this_dev];
+		dev_wd80x3[this_dev].base_addr = io[this_dev];
+		dev_wd80x3[this_dev].mem_start = mem[this_dev];
+		dev_wd80x3[this_dev].init = wd_probe;
+		if (io[this_dev] == 0)  {
+			if (this_dev != 0) break; /* only autoprobe 1st one */
+			printk(KERN_NOTICE "wd.c: Presently autoprobing (not recommended) for a single card.\n");
+		}
+		if (register_netdev(&dev_wd80x3[this_dev]) != 0) {
+			printk(KERN_WARNING "modules: No wd80x3 card found (i/o = 0x%x).\n", io[this_dev]);
+			return -EIO;
+		}
+	}
+
 	return 0;
 }
 
 void
 cleanup_module(void)
 {
-	if (MOD_IN_USE)
-		printk("wd80x3: device busy, remove delayed\n");
-	else
-	{
-		int ioaddr = dev_wd80x3.base_addr - WD_NIC_OFFSET;
+	int this_dev;
 
-		unregister_netdev(&dev_wd80x3);
-
-		/* If we don't do this, we can't re-insmod it later. */
-		free_irq(dev_wd80x3.irq);
-		release_region(ioaddr, WD_IO_EXTENT);
+	for (this_dev = 0; this_dev < MAX_WD_MODS; this_dev++) {
+		if (dev_wd80x3[this_dev].priv != NULL) {
+			int ioaddr = dev_wd80x3[this_dev].base_addr - WD_NIC_OFFSET;
+			unregister_netdev(&dev_wd80x3[this_dev]);
+			free_irq(dev_wd80x3[this_dev].irq);
+			release_region(ioaddr, WD_IO_EXTENT);
+		}
 	}
 }
 #endif /* MODULE */
diff -u --recursive --new-file v1.3.36/linux/drivers/pci/pci.c linux/drivers/pci/pci.c
--- v1.3.36/linux/drivers/pci/pci.c	Mon Oct 23 18:02:06 1995
+++ linux/drivers/pci/pci.c	Wed Oct 25 20:54:57 1995
@@ -73,6 +73,7 @@
 	DEVICE( AMD,		AMD_SCSI,	"53C974"),
 	DEVICE( TRIDENT,	TRIDENT_9420,	"TG 9420"),
 	DEVICE( TRIDENT,	TRIDENT_9440,	"TG 9440"),
+	DEVICE( TRIDENT,	TRIDENT_9660,	"TG 9660"),
 	DEVICE( AI,		AI_M1435,	"M1435"),
 	DEVICE( MATROX,		MATROX_MGA_2,	"Atlas PX2085"),
 	DEVICE( MATROX,		MATROX_MIL     ,"Millenium"),
@@ -106,6 +107,7 @@
 	DEVICE( UMC,		UMC_UM8886A,	"UM8886A"),
 	BRIDGE( UMC,		UMC_UM8881F,	"UM8881F",		0x02),
 	DEVICE( UMC,		UMC_UM8886F,	"UM8886F"),
+	DEVICE( UMC,		UMC_UM9017F,	"UM9017F"),
 	DEVICE( X,		X_AGX016,	"ITT AGX016"),
 	DEVICE( QLOGIC,		QLOGIC_ISP1020,	"ISP1020"),
 	DEVICE( QLOGIC,		QLOGIC_ISP1022,	"ISP1022"),
@@ -134,11 +136,13 @@
 	DEVICE( EF,		EF_ATM,		"155P-MF1"),
 	DEVICE( IMAGINGTECH,	IMAGINGTECH_ICPCI, "MVC IC-PCI"),
 	DEVICE( PLX,		PLX_9060,	"PCI9060 i960 bridge"),
+	DEVICE( ALLIANCE,	ALLIANCE_PROVIDEO, "Provideo"),
 	DEVICE( MUTECH,		MUTECH_MV1000,	"MV-1000"),
 	DEVICE( ZEINET,		ZEINET_1221,	"1221"),
 	DEVICE( CYCLADES,	CYCLADES_Y,	"Cyclome-Y"),
 	DEVICE( SYMPHONY,	SYMPHONY_101,	"82C101"),
 	DEVICE( TEKRAM,		TEKRAM_DC290,	"DC-290"),
+	DEVICE( AVANCE,		AVANCE_2302,	"ALG-2302"),
 	DEVICE( S3,		S3_811,		"Trio32/Trio64"),
 	DEVICE( S3,		S3_868,	"Vision 868"),
 	DEVICE( S3,		S3_928,		"Vision 928-P"),
@@ -153,15 +157,18 @@
 	DEVICE( INTEL,		INTEL_82430,	"82430ZX Aries"),
 	BRIDGE( INTEL,		INTEL_82434,	"82434LX Mercury/Neptune", 0x00),
 	DEVICE( INTEL,		INTEL_7116,	"SAA7116"),
+	DEVICE( INTEL,		INTEL_82596,	"82596"),
 	DEVICE( INTEL,		INTEL_82865,	"82865"),
 	DEVICE( INTEL,		INTEL_82437,	"82437"),
 	DEVICE( INTEL,		INTEL_82371_0,	"82371 Triton PIIX"),
 	DEVICE( INTEL,		INTEL_82371_1,	"82371 Triton PIIX"),
 	DEVICE( INTEL,		INTEL_P6,	"Experimental P6 bridge"),
 	DEVICE( ADAPTEC,	ADAPTEC_7850,	"AIC-7850"),
-	DEVICE( ADAPTEC,	ADAPTEC_294x,	"294x"),
-	DEVICE( ADAPTEC,	ADAPTEC_2940,	"2940"),
+	DEVICE( ADAPTEC,	ADAPTEC_7870,	"AIC-7870"),
+	DEVICE( ADAPTEC,	ADAPTEC_7871,	"AIC-7871"),
 	DEVICE( ADAPTEC,	ADAPTEC_7872,	"AIC-7872"),
+	DEVICE( ADAPTEC,	ADAPTEC_7880,	"AIC-7880"),
+	DEVICE( ADAPTEC,	ADAPTEC_7881,	"AIC-7881"),
   	DEVICE( ATRONICS,	ATRONICS_2015,	"IDE-2015PL"),
 	DEVICE( HER,		HER_STING,	"Stingray"),
 	DEVICE( HER,		HER_STINGARK,	"Stingray ARK 2000PV")
@@ -392,7 +399,7 @@
 	      case PCI_VENDOR_ID_ATI:		return "ATI";
 	      case PCI_VENDOR_ID_WEITEK:	return "Weitek";
 	      case PCI_VENDOR_ID_CIRRUS:	return "Cirrus Logic";
-	      case PCI_VENDOR_ID_BUSLOGIC:	return "Bus Logic";
+	      case PCI_VENDOR_ID_BUSLOGIC:	return "BusLogic";
 	      case PCI_VENDOR_ID_N9:		return "Number Nine";
 	      case PCI_VENDOR_ID_AI:		return "Acer Incorporated";
 	      case PCI_VENDOR_ID_AL:		return "Acer Labs";
@@ -427,6 +434,9 @@
 	      case PCI_VENDOR_ID_IMAGINGTECH:	return "Imaging Technology";
 	      case PCI_VENDOR_ID_CYCLADES:	return "Cyclades";
 	      case PCI_VENDOR_ID_OLICOM:	return "Olicom";
+	      case PCI_VENDOR_ID_IBM:		return "IBM";
+	      case PCI_VENDOR_ID_AVANCE:	return "Avance";
+	      case PCI_VENDOR_ID_ALLIANCE:	return "Alliance";
 	      default:				return "Unknown vendor";
 	}
 }
diff -u --recursive --new-file v1.3.36/linux/drivers/sound/Config.in linux/drivers/sound/Config.in
--- v1.3.36/linux/drivers/sound/Config.in	Mon Oct 23 18:02:13 1995
+++ linux/drivers/sound/Config.in	Wed Oct 25 07:36:12 1995
@@ -4,5 +4,5 @@
 # This is really ugly: it should probably be changed
 # to use the normal config script setup
 #
-$MAKE -C drivers/sound config || exit 1 ;;
+$MAKE -C drivers/sound config || exit 1
 
diff -u --recursive --new-file v1.3.36/linux/drivers/sound/audio.c linux/drivers/sound/audio.c
--- v1.3.36/linux/drivers/sound/audio.c	Mon Oct 23 18:02:13 1995
+++ linux/drivers/sound/audio.c	Sat Oct 28 15:18:46 1995
@@ -154,6 +154,20 @@
   DMAbuf_release (dev, mode);
 }
 
+#if !defined(i386)
+static void
+translate_bytes (const unsigned char *table, unsigned char *buff, int n)
+{
+  unsigned long   i;
+
+  if (n <= 0)
+    return;
+
+  for (i = 0; i < n; ++i)
+    buff[i] = table[buff[i]];
+}
+
+#else
 extern inline void
 translate_bytes (const void *table, void *buff, int n)
 {
@@ -168,7 +182,7 @@
     :	       "bx", "cx", "di", "si", "ax");
     }
 }
-
+#endif
 
 int
 audio_write (int dev, struct fileinfo *file, const snd_rw_buf * buf, int count)
@@ -248,7 +262,7 @@
 	  /*
 	   * This just allows interrupts while the conversion is running
 	   */
-	  __asm__ ("sti");
+	  sti();
 	  translate_bytes (ulaw_dsp, (unsigned char *) &wr_dma_buf[dev][wr_buff_ptr[dev]], l);
 	}
 
@@ -323,7 +337,7 @@
 	  /*
 	   * This just allows interrupts while the conversion is running
 	   */
-	  __asm__ ("sti");
+	  sti();
 
 	  translate_bytes (dsp_ulaw, (unsigned char *) dmabuf, l);
 	}
diff -u --recursive --new-file v1.3.36/linux/drivers/sound/sequencer.c linux/drivers/sound/sequencer.c
--- v1.3.36/linux/drivers/sound/sequencer.c	Mon Oct 23 18:02:16 1995
+++ linux/drivers/sound/sequencer.c	Sat Oct 28 15:18:50 1995
@@ -2101,7 +2101,7 @@
 }
 
 int
-sequencer_write (int dev, struct fileinfo *file, snd_rw_buf * buf, int count)
+sequencer_write (int dev, struct fileinfo *file, const snd_rw_buf * buf, int count)
 {
   return -EIO;
 }
@@ -2118,7 +2118,7 @@
 }
 int
 sequencer_ioctl (int dev, struct fileinfo *file,
-		 unsigned int cmd, unsigned int arg)
+		 unsigned int cmd, ioctl_arg arg)
 {
   return -EIO;
 }
diff -u --recursive --new-file v1.3.36/linux/drivers/sound/soundcard.c linux/drivers/sound/soundcard.c
--- v1.3.36/linux/drivers/sound/soundcard.c	Mon Oct 23 18:02:16 1995
+++ linux/drivers/sound/soundcard.c	Sat Oct 28 15:18:55 1995
@@ -667,7 +667,7 @@
 
       if (((long) start_addr & ~(dma_pagesize - 1))
 	  != ((long) end_addr & ~(dma_pagesize - 1))
-	  || end_addr >= (char *) (16 * 1024 * 1024))
+	  || end_addr >= (char *) MAX_DMA_ADDRESS)
 	{
 	  printk (
 		   "sound: kmalloc returned invalid address 0x%lx for %ld Bytes DMA-buffer\n",
@@ -677,7 +677,7 @@
 	}
     }
   dmap->raw_buf = start_addr;
-  dmap->raw_buf_phys = (unsigned long) start_addr;
+  dmap->raw_buf_phys = virt_to_bus((unsigned long) start_addr);
 
   for (i = MAP_NR (start_addr); i <= MAP_NR (end_addr); i++)
     {
diff -u --recursive --new-file v1.3.36/linux/fs/proc/array.c linux/fs/proc/array.c
--- v1.3.36/linux/fs/proc/array.c	Mon Oct 23 18:02:18 1995
+++ linux/fs/proc/array.c	Tue Oct 24 16:19:41 1995
@@ -373,32 +373,65 @@
 
 static unsigned long get_wchan(struct task_struct *p)
 {
-#ifdef __i386__
-	unsigned long ebp, eip;
-	unsigned long stack_page;
-	int count = 0;
-
 	if (!p || p == current || p->state == TASK_RUNNING)
 		return 0;
-	stack_page = p->kernel_stack_page;
-	if (!stack_page)
-		return 0;
-	ebp = p->tss.ebp;
-	do {
-		if (ebp < stack_page || ebp >= 4092+stack_page)
+#if defined(__i386__)
+	{
+		unsigned long ebp, eip;
+		unsigned long stack_page;
+		int count = 0;
+
+		stack_page = p->kernel_stack_page;
+		if (!stack_page)
 			return 0;
-		eip = *(unsigned long *) (ebp+4);
-		if ((void *)eip != sleep_on &&
-		    (void *)eip != interruptible_sleep_on)
-			return eip;
-		ebp = *(unsigned long *) ebp;
-	} while (count++ < 16);
+		ebp = p->tss.ebp;
+		do {
+			if (ebp < stack_page || ebp >= 4092+stack_page)
+				return 0;
+			eip = *(unsigned long *) (ebp+4);
+			if ((void *)eip != sleep_on &&
+			    (void *)eip != interruptible_sleep_on)
+				return eip;
+			ebp = *(unsigned long *) ebp;
+		} while (count++ < 16);
+	}
+#elif defined(__alpha__)
+	/*
+	 * This one depends on the frame size of schedule().  Do a
+	 * "disass schedule" in gdb to find the frame size.  Also, the
+	 * code assumes that sleep_on() follows immediately after
+	 * interruptible_sleep_on() and that add_timer() follows
+	 * immediately after interruptible_sleep().  Ugly, isn't it?
+	 * Maybe adding a wchan field to task_struct would be better,
+	 * after all...
+	 */
+	{
+	    unsigned long schedule_frame;
+	    unsigned long pc;
+
+	    pc = thread_saved_pc(&p->tss);
+	    if (pc >= (unsigned long) interruptible_sleep_on && pc < (unsigned long) add_timer) {
+		schedule_frame = ((unsigned long *)p->tss.ksp)[6];
+		return ((unsigned long *)schedule_frame)[12];
+	    }
+	    return pc;
+	}
 #endif
 	return 0;
 }
 
-#define	KSTK_EIP(stack)	(((unsigned long *)stack)[1019])
-#define	KSTK_ESP(stack)	(((unsigned long *)stack)[1022])
+#if defined(__i386__)
+# define KSTK_EIP(tsk)	(((unsigned long *)tsk->kernel_stack_page)[1019])
+# define KSTK_ESP(tsk)	(((unsigned long *)tsk->kernel_stack_page)[1022])
+#elif defined(__alpha__)
+  /*
+   * See arch/alpha/kernel/ptrace.c for details.
+   */
+# define PT_REG(reg)		(PAGE_SIZE - sizeof(struct pt_regs)	\
+				 + (long)&((struct pt_regs *)0)->reg)
+# define KSTK_EIP(tsk)	(*(unsigned long *)(tsk->kernel_stack_page + PT_REG(pc)))
+# define KSTK_ESP(tsk)	((tsk) == current ? rdusp() : (tsk)->tss.usp)
+#endif
 
 static int get_stat(int pid, char * buffer)
 {
@@ -417,13 +450,15 @@
 		state = "RSDZTD"[tsk->state];
 	vsize = eip = esp = 0;
 	if (tsk->mm) {
-		vsize = tsk->kernel_stack_page;
-		if (vsize) {
-			eip = KSTK_EIP(vsize);
-			esp = KSTK_ESP(vsize);
-			vsize = tsk->mm->brk - tsk->mm->start_code + PAGE_SIZE-1;
-			if (esp)
-				vsize += TASK_SIZE - esp;
+		if (tsk->kernel_stack_page) {
+			eip = KSTK_EIP(tsk);
+			esp = KSTK_ESP(tsk);
+			vsize = (  (tsk->mm->end_code - tsk->mm->start_code)	/* text */
+				 + (tsk->mm->end_data - tsk->mm->start_data)	/* data */
+				 + (tsk->mm->brk - tsk->mm->start_brk));	/* bss + heap */
+			if (esp) {
+				vsize += tsk->mm->start_stack - esp;		/* stack */
+			}
 		}
 	}
 	wchan = get_wchan(tsk);
diff -u --recursive --new-file v1.3.36/linux/fs/umsdos/dir.c linux/fs/umsdos/dir.c
--- v1.3.36/linux/fs/umsdos/dir.c	Mon Sep 18 14:54:08 1995
+++ linux/fs/umsdos/dir.c	Fri Oct 27 08:02:39 1995
@@ -260,7 +260,7 @@
 /*
 	Read count directory entries from directory filp
 	Return a negative value from linux/errno.h.
-	Return > 0 if success (the amount of byte written to dirent)
+	Return 0 or positive if successful
 */
 static int UMSDOS_readdir(
 	struct inode *dir,		/* Point to a description of the super block */
@@ -284,7 +284,7 @@
 	}
 	PRINTK (("UMSDOS_readdir out %d count %d pos %Ld\n",ret,count
 		,filp->f_pos));
-	return count == 0 ? -ENOENT : ret;
+	return count?:ret;
 }
 /*
 	Complete the inode content with info from the EMD file
diff -u --recursive --new-file v1.3.36/linux/include/asm-alpha/a.out.h linux/include/asm-alpha/a.out.h
--- v1.3.36/linux/include/asm-alpha/a.out.h	Thu Jul 13 16:20:21 1995
+++ linux/include/asm-alpha/a.out.h	Tue Oct 24 16:19:41 1995
@@ -1,6 +1,8 @@
 #ifndef __ALPHA_A_OUT_H__
 #define __ALPHA_A_OUT_H__
 
+#include <linux/types.h>
+
 /*
  * OSF/1 ECOFF header structs.  ECOFF files consist of:
  * 	- a file header (struct filehdr),
diff -u --recursive --new-file v1.3.36/linux/include/asm-alpha/bitops.h linux/include/asm-alpha/bitops.h
--- v1.3.36/linux/include/asm-alpha/bitops.h	Sun Sep  3 12:27:01 1995
+++ linux/include/asm-alpha/bitops.h	Sat Oct 28 16:00:49 1995
@@ -77,7 +77,7 @@
 	return oldbit != 0;
 }
 
-extern __inline__ unsigned long test_bit(int nr, void * addr)
+extern __inline__ unsigned long test_bit(int nr, const void * addr)
 {
 	return 1UL & (((int *) addr)[nr >> 5] >> (nr & 31));
 }
diff -u --recursive --new-file v1.3.36/linux/include/asm-alpha/io.h linux/include/asm-alpha/io.h
--- v1.3.36/linux/include/asm-alpha/io.h	Wed Oct  4 14:14:33 1995
+++ linux/include/asm-alpha/io.h	Tue Oct 24 16:19:41 1995
@@ -61,6 +61,8 @@
  * accomodate things like XFree or svgalib that like to define their
  * own versions of inb etc.
  */
+extern void __sethae (unsigned long addr);	/* syscall */
+extern void _sethae (unsigned long addr);	/* cached version */
 extern unsigned int _inb (unsigned long port);
 extern unsigned int _inw (unsigned long port);
 extern unsigned int _inl (unsigned long port);
diff -u --recursive --new-file v1.3.36/linux/include/asm-alpha/ioctl.h linux/include/asm-alpha/ioctl.h
--- v1.3.36/linux/include/asm-alpha/ioctl.h	Fri Jun  2 13:51:16 1995
+++ linux/include/asm-alpha/ioctl.h	Sat Oct 28 15:19:02 1995
@@ -54,4 +54,12 @@
 #define _IOC_NR(nr)		(((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
 #define _IOC_SIZE(nr)		(((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
 
+/* ...and for the drivers/sound files... */
+
+#define IOC_IN		(_IOC_WRITE << _IOC_DIRSHIFT)
+#define IOC_OUT		(_IOC_READ << _IOC_DIRSHIFT)
+#define IOC_INOUT	((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
+#define IOCSIZE_MASK	(_IOC_SIZEMASK << _IOC_SIZESHIFT)
+#define IOCSIZE_SHIFT	(_IOC_SIZESHIFT)
+
 #endif
diff -u --recursive --new-file v1.3.36/linux/include/asm-alpha/lca.h linux/include/asm-alpha/lca.h
--- v1.3.36/linux/include/asm-alpha/lca.h	Fri Oct  6 14:35:16 1995
+++ linux/include/asm-alpha/lca.h	Tue Oct 24 16:19:41 1995
@@ -344,6 +344,7 @@
 	struct el_common	h;		/* common logout header */
 	unsigned long		pt[32];		/* PAL temps (pt[0] is reason) */
 	unsigned long		exc_addr;	/* exception address */
+	unsigned long		pad1[3];
 	unsigned long		pal_base;	/* PALcode base address */
 	unsigned long		hier;		/* hw interrupt enable */
 	unsigned long		hirr;		/* hw interrupt request */
diff -u --recursive --new-file v1.3.36/linux/include/asm-alpha/processor.h linux/include/asm-alpha/processor.h
--- v1.3.36/linux/include/asm-alpha/processor.h	Thu Sep  7 17:17:18 1995
+++ linux/include/asm-alpha/processor.h	Tue Oct 24 16:19:41 1995
@@ -49,10 +49,12 @@
 #include <asm/ptrace.h>
 
 /*
- * Return saved PC of a blocked thread.  This assumes the frame pointer
- * is the 6th saved long on the kernel stack and that the saved return
- * address is the first long in the frame.  This all holds provided the
- * thread blocked through a call to schedule().
+ * Return saved PC of a blocked thread.  This assumes the frame
+ * pointer is the 6th saved long on the kernel stack and that the
+ * saved return address is the first long in the frame.  This all
+ * holds provided the thread blocked through a call to schedule() ($15
+ * is the frame pointer in schedule() and $15 is saved at offset 48 by
+ * entry.S:do_switch_stack).
  */
 extern inline unsigned long thread_saved_pc(struct thread_struct *t)
 {
diff -u --recursive --new-file v1.3.36/linux/include/asm-alpha/system.h linux/include/asm-alpha/system.h
--- v1.3.36/linux/include/asm-alpha/system.h	Mon Oct 23 18:02:18 1995
+++ linux/include/asm-alpha/system.h	Tue Oct 24 16:19:41 1995
@@ -97,6 +97,12 @@
 #define save_flags(flags)	do { flags = getipl(); } while (0)
 #define restore_flags(flags)	setipl(flags)
 
+/*
+ * Give prototypes to shut up gcc.
+ */
+extern inline unsigned long xchg_u32 (volatile int * m, unsigned long val);
+extern inline unsigned long xchg_u64 (volatile long * m, unsigned long val);
+
 extern inline unsigned long xchg_u32(volatile int * m, unsigned long val)
 {
 	unsigned long dummy, dummy2;
diff -u --recursive --new-file v1.3.36/linux/include/asm-alpha/unistd.h linux/include/asm-alpha/unistd.h
--- v1.3.36/linux/include/asm-alpha/unistd.h	Fri Oct 13 14:44:45 1995
+++ linux/include/asm-alpha/unistd.h	Tue Oct 24 16:20:25 1995
@@ -41,6 +41,7 @@
 #define __NR_readlink		 58
 #define __NR_execve		 59
 #define __NR_umask		 60
+#define __NR_chroot		 61
 #define __NR_getpgrp		 63
 #define __NR_getpagesize	 64
 #define __NR_stat		 67
diff -u --recursive --new-file v1.3.36/linux/include/asm-i386/bitops.h linux/include/asm-i386/bitops.h
--- v1.3.36/linux/include/asm-i386/bitops.h	Wed Oct  4 14:14:33 1995
+++ linux/include/asm-i386/bitops.h	Sat Oct 28 16:00:49 1995
@@ -64,7 +64,7 @@
  * This routine doesn't need to be atomic, but it's faster to code it
  * this way.
  */
-extern __inline__ int test_bit(int nr, void * addr)
+extern __inline__ int test_bit(int nr, const void * addr)
 {
 	int oldbit;
 
diff -u --recursive --new-file v1.3.36/linux/include/asm-mips/bitops.h linux/include/asm-mips/bitops.h
--- v1.3.36/linux/include/asm-mips/bitops.h	Wed Jan 18 08:54:13 1995
+++ linux/include/asm-mips/bitops.h	Sat Oct 28 16:00:49 1995
@@ -135,7 +135,7 @@
 
 #endif /* !defined(__R4000__) */
 
-extern __inline__ int test_bit(int nr, void *addr)
+extern __inline__ int test_bit(int nr, const void *addr)
 {
 	int	mask;
 	unsigned long	*a;
diff -u --recursive --new-file v1.3.36/linux/include/linux/atalk.h linux/include/linux/atalk.h
--- v1.3.36/linux/include/linux/atalk.h	Fri Jul  7 08:54:53 1995
+++ linux/include/linux/atalk.h	Tue Oct 24 09:48:57 1995
@@ -72,6 +72,8 @@
 
 #ifdef __KERNEL__
 
+#include <linux/if_ether.h>
+
 struct ddpehdr
 {
 	/* FIXME for bigendians */
diff -u --recursive --new-file v1.3.36/linux/include/linux/aztcd.h linux/include/linux/aztcd.h
--- v1.3.36/linux/include/linux/aztcd.h	Mon Oct 16 18:38:24 1995
+++ linux/include/linux/aztcd.h	Sat Oct 28 15:54:18 1995
@@ -1,4 +1,4 @@
-/* $Id: aztcd.h,v 1.80 1995/10/11 19:39:18 root Exp root $
+/* $Id: aztcd.h,v 1.90 1995/10/21 17:52:10 root Exp root $
  *
  * Definitions for a AztechCD268 CD-ROM interface
  *	Copyright (C) 1994, 1995  Werner Zimmermann
@@ -57,7 +57,6 @@
 
 /*---------------------------------------------------------------------------*/
 /*-----nothing to be configured for normal applications below this line------*/
-
 
 /* Increase this if you get lots of timeouts; if you get kernel panic, replace
    STEN_LOW_WAIT by STEN_LOW in the source code */
diff -u --recursive --new-file v1.3.36/linux/include/linux/cdu31a.h linux/include/linux/cdu31a.h
--- v1.3.36/linux/include/linux/cdu31a.h	Sun Sep  3 12:27:02 1995
+++ linux/include/linux/cdu31a.h	Wed Oct 25 20:54:57 1995
@@ -134,6 +134,13 @@
 #define SONY_SD_AUTO_SPIN_DOWN_TIME     0x06
 
 /*
+ * The following are parameter bits for the mechanical control command
+ */
+#define SONY_AUTO_SPIN_UP_BIT           0x01
+#define SONY_AUTO_EJECT_BIT             0x02
+#define SONY_DOUBLE_SPEED_BIT           0x04
+
+/*
  * The following extract information from the drive configuration about
  * the drive itself.
  */
diff -u --recursive --new-file v1.3.36/linux/include/linux/pci.h linux/include/linux/pci.h
--- v1.3.36/linux/include/linux/pci.h	Wed Sep 27 16:00:00 1995
+++ linux/include/linux/pci.h	Wed Oct 25 20:51:36 1995
@@ -261,6 +261,8 @@
 #define PCI_DEVICE_ID_CIRRUS_6729	0x1100
 #define PCI_DEVICE_ID_CIRRUS_7542	0x1200
 
+#define PCI_VENDOR_ID_IBM		0x1014
+
 #define PCI_VENDOR_ID_AMD		0x1022
 #define PCI_DEVICE_ID_AMD_LANCE		0x2000
 #define PCI_DEVICE_ID_AMD_SCSI		0x2020
@@ -268,6 +270,7 @@
 #define PCI_VENDOR_ID_TRIDENT		0x1023
 #define PCI_DEVICE_ID_TRIDENT_9420	0x9420
 #define PCI_DEVICE_ID_TRIDENT_9440	0x9440
+#define PCI_DEVICE_ID_TRIDENT_9660	0x9660
 
 #define PCI_VENDOR_ID_AI		0x1025
 #define PCI_DEVICE_ID_AI_M1435		0x1435
@@ -332,6 +335,7 @@
 #define PCI_DEVICE_ID_UMC_UM8886A	0x886a
 #define PCI_DEVICE_ID_UMC_UM8881F	0x8881
 #define PCI_DEVICE_ID_UMC_UM8886F	0x8886
+#define PCI_DEVICE_ID_UMC_UM9017F	0x9017
 
 #define PCI_VENDOR_ID_X			0x1061
 #define PCI_DEVICE_ID_X_AGX016		0x0001
@@ -397,6 +401,9 @@
 #define PCI_VENDOR_ID_PLX		0x113c
 #define PCI_DEVICE_ID_PLX_9060		0x0001
 
+#define PCI_VENDOR_ID_ALLIANCE		0x1142
+#define PCI_DEVICE_ID_ALLIANCE_PROVIDEO	0x6422
+
 #define PCI_VENDOR_ID_MUTECH		0x1159
 #define PCI_DEVICE_ID_MUTECH_MV1000	0x0001
 
@@ -412,6 +419,9 @@
 #define PCI_VENDOR_ID_TEKRAM		0x1de1
 #define PCI_DEVICE_ID_TEKRAM_DC290	0xdc29
 
+#define PCI_VENDOR_ID_AVANCE		0x4005
+#define PCI_DEVICE_ID_AVANCE_2302	0x2302
+
 #define PCI_VENDOR_ID_S3		0x5333
 #define PCI_DEVICE_ID_S3_811		0x8811
 #define PCI_DEVICE_ID_S3_868		0x8880
@@ -429,6 +439,7 @@
 #define PCI_DEVICE_ID_INTEL_82430	0x0486
 #define PCI_DEVICE_ID_INTEL_82434	0x04a3
 #define PCI_DEVICE_ID_INTEL_7116	0x1223
+#define PCI_DEVICE_ID_INTEL_82596	0x1226
 #define PCI_DEVICE_ID_INTEL_82865	0x1227
 #define PCI_DEVICE_ID_INTEL_82437	0x122d
 #define PCI_DEVICE_ID_INTEL_82371_0	0x122e
@@ -437,9 +448,11 @@
 
 #define PCI_VENDOR_ID_ADAPTEC		0x9004
 #define PCI_DEVICE_ID_ADAPTEC_7850	0x5078
-#define PCI_DEVICE_ID_ADAPTEC_294x	0x7078
-#define PCI_DEVICE_ID_ADAPTEC_2940	0x7178
+#define PCI_DEVICE_ID_ADAPTEC_7870	0x7078
+#define PCI_DEVICE_ID_ADAPTEC_7871	0x7178
 #define PCI_DEVICE_ID_ADAPTEC_7872	0x7278
+#define PCI_DEVICE_ID_ADAPTEC_7880	0x8078
+#define PCI_DEVICE_ID_ADAPTEC_7881	0x8178
 
 #define PCI_VENDOR_ID_ATRONICS		0x907f
 #define PCI_DEVICE_ID_ATRONICS_2015	0x2015
diff -u --recursive --new-file v1.3.36/linux/include/linux/timex.h linux/include/linux/timex.h
--- v1.3.36/linux/include/linux/timex.h	Mon Sep 18 14:54:10 1995
+++ linux/include/linux/timex.h	Tue Oct 24 16:19:42 1995
@@ -105,6 +105,11 @@
 #define PPS_VALID 120		/* pps signal watchdog max (s) */
 #define MAXGLITCH 30		/* pps signal glitch max (s) */
 
+#ifndef __alpha__
+/*
+ * This definitively is wrong for the Alpha and none of the
+ * kernel code seems to reference this anymore.
+ */
 #define CLOCK_TICK_RATE	1193180 /* Underlying HZ */
 #define CLOCK_TICK_FACTOR	20	/* Factor of both 1000000 and CLOCK_TICK_RATE */
 #define LATCH  ((CLOCK_TICK_RATE + HZ/2) / HZ)	/* For divider */
@@ -112,6 +117,7 @@
 #define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \
 	(1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \
 		<< (SHIFT_SCALE-SHIFT_HZ)) / HZ)
+#endif /* !__alpha__ */
 
 /*
  * syscall interface - used (mainly by NTP daemon)
diff -u --recursive --new-file v1.3.36/linux/include/net/datalink.h linux/include/net/datalink.h
--- v1.3.36/linux/include/net/datalink.h	Wed Aug  2 13:21:16 1995
+++ linux/include/net/datalink.h	Tue Oct 24 15:26:07 1995
@@ -14,4 +14,3 @@
 };
 
 #endif
-
diff -u --recursive --new-file v1.3.36/linux/include/net/ip.h linux/include/net/ip.h
--- v1.3.36/linux/include/net/ip.h	Mon Oct 23 18:02:19 1995
+++ linux/include/net/ip.h	Sat Oct 28 17:31:02 1995
@@ -115,7 +115,8 @@
 				      __u32 saddr,
 				      struct options * opt,
 				      int flags,
-				      int type);
+				      int type,
+				      int noblock);
 
 extern struct ip_mib	ip_statistics;
 
diff -u --recursive --new-file v1.3.36/linux/kernel/ksyms.c linux/kernel/ksyms.c
--- v1.3.36/linux/kernel/ksyms.c	Mon Oct 23 18:02:19 1995
+++ linux/kernel/ksyms.c	Sat Oct 28 15:18:23 1995
@@ -37,6 +37,25 @@
 #include <linux/minix_fs.h>
 #include <linux/ext2_fs.h>
 
+#ifdef __alpha__
+# include <asm/io.h>
+# include <asm/hwrpb.h>
+
+extern void bcopy (const char *src, char *dst, int len);
+extern struct hwrpb_struct *hwrpb;
+
+/* these are C runtime functions with special calling conventions: */
+extern void __divl (void);
+extern void __reml (void);
+extern void __divq (void);
+extern void __remq (void);
+extern void __divlu (void);
+extern void __remlu (void);
+extern void __divqu (void);
+extern void __remqu (void);
+
+#endif
+
 #ifdef CONFIG_NET
 #include <linux/in.h>
 #include <linux/net.h>
@@ -78,6 +97,13 @@
 
 extern void *sys_call_table;
 
+#if	defined(CONFIG_ULTRA)	||	defined(CONFIG_WD80x3)		|| \
+	defined(CONFIG_EL2)	||	defined(CONFIG_NE2000)		|| \
+	defined(CONFIG_E2100)	||	defined(CONFIG_HPLAN_PLUS)	|| \
+	defined(CONFIG_HPLAN)	||	defined(CONFIG_AC3200)		
+#include "../drivers/net/8390.h"
+#endif
+
 #ifdef CONFIG_SCSI
 #include "../drivers/scsi/scsi.h"
 #include "../drivers/scsi/scsi_ioctl.h"
@@ -105,6 +131,31 @@
 	{ (void *)1 /* Version version :-) */,
 		SYMBOL_NAME_STR (Using_Versions) },
 #endif
+
+	/* platform dependent support */
+#ifdef __alpha__
+	X(inb),
+	X(inw),
+	X(inl),
+	X(outb),
+	X(outw),
+	X(outl),
+	X(bcopy),	/* generated by gcc-2.7.0 for string assignments */
+	X(hwrpb),
+	X(__divl),
+	X(__reml),
+	X(__divq),
+	X(__remq),
+	X(__divlu),
+	X(__remlu),
+	X(__divqu),
+	X(__remqu),
+	X(strlen),	/* used by ftape */
+	X(memcmp),
+	X(memmove),
+	X(__constant_c_memset),
+#endif
+
 	/* stackable module support */
 	X(rename_module_symbol),
 	X(register_symtab),
@@ -329,6 +380,17 @@
 	X(arp_send),
 #ifdef CONFIG_IP_FORWARD
 	X(ip_forward),
+#endif
+#if	defined(CONFIG_ULTRA)	||	defined(CONFIG_WD80x3)		|| \
+	defined(CONFIG_EL2)	||	defined(CONFIG_NE2000)		|| \
+	defined(CONFIG_E2100)	||	defined(CONFIG_HPLAN_PLUS)	|| \
+	defined(CONFIG_HPLAN)	||	defined(CONFIG_AC3200)		
+	/* If 8390 NIC support is built in, we will need these. */
+	X(ei_open),
+	X(ei_debug),
+	X(ei_interrupt),
+	X(ethdev_init),
+	X(NS8390_init),
 #endif
 #if defined(CONFIG_PPP) || defined(CONFIG_SLIP)
     	/* VJ header compression */
diff -u --recursive --new-file v1.3.36/linux/kernel/printk.c linux/kernel/printk.c
--- v1.3.36/linux/kernel/printk.c	Thu Jun 29 19:02:55 1995
+++ linux/kernel/printk.c	Wed Oct 25 08:40:47 1995
@@ -27,8 +27,12 @@
 
 extern void console_print(const char *);
 
-#define DEFAULT_MESSAGE_LOGLEVEL 6 /* KERN_INFO */
-#define DEFAULT_CONSOLE_LOGLEVEL 7 /* anything more serious than KERN_DEBUG */
+/* printk's without a loglevel use this.. */
+#define DEFAULT_MESSAGE_LOGLEVEL 5 /* KERN_NOTICE */
+
+/* We show everything that is more important than this.. */
+#define MINIMUM_CONSOLE_LOGLEVEL 6 /* Minimum loglevel we let people use */
+#define DEFAULT_CONSOLE_LOGLEVEL 6 /* anything more serious than KERN_INFO */
 
 unsigned long log_size = 0;
 struct wait_queue * log_wait = NULL;
@@ -124,7 +128,7 @@
 			logged_chars = 0;
 			return 0;
 		case 6:		/* Disable logging to console */
-			console_loglevel = 1; /* only panic messages shown */
+			console_loglevel = MINIMUM_CONSOLE_LOGLEVEL;
 			return 0;
 		case 7:		/* Enable logging to console */
 			console_loglevel = DEFAULT_CONSOLE_LOGLEVEL;
@@ -132,6 +136,8 @@
 		case 8:
 			if (len < 1 || len > 8)
 				return -EINVAL;
+			if (len < MINIMUM_CONSOLE_LOGLEVEL)
+				len = MINIMUM_CONSOLE_LOGLEVEL;
 			console_loglevel = len;
 			return 0;
 	}
diff -u --recursive --new-file v1.3.36/linux/kernel/sched.c linux/kernel/sched.c
--- v1.3.36/linux/kernel/sched.c	Mon Oct 23 18:02:19 1995
+++ linux/kernel/sched.c	Tue Oct 24 16:19:42 1995
@@ -654,11 +654,13 @@
 	time_adj += ltemp >>
 	    (SHIFT_USEC + SHIFT_HZ - SHIFT_SCALE);
 
+#if HZ == 100
     /* compensate for (HZ==100) != 128. Add 25% to get 125; => only 3% error */
     if (time_adj < 0)
 	time_adj -= -time_adj >> 2;
     else
 	time_adj += time_adj >> 2;
+#endif
 }
 
 /*
diff -u --recursive --new-file v1.3.36/linux/kernel/signal.c linux/kernel/signal.c
--- v1.3.36/linux/kernel/signal.c	Wed Sep 13 12:45:34 1995
+++ linux/kernel/signal.c	Tue Oct 24 11:54:14 1995
@@ -109,7 +109,7 @@
 	}	
 }
 
-asmlinkage unsigned long sys_signal(int signum, void (*handler)(int))
+asmlinkage unsigned long sys_signal(int signum, __sighandler_t handler)
 {
 	int err;
 	struct sigaction tmp;
diff -u --recursive --new-file v1.3.36/linux/kernel/sys.c linux/kernel/sys.c
--- v1.3.36/linux/kernel/sys.c	Mon Oct 23 18:02:20 1995
+++ linux/kernel/sys.c	Tue Oct 24 16:19:42 1995
@@ -28,8 +28,6 @@
 
 extern void adjust_clock(void);
 
-#define	PZERO	15
-
 asmlinkage int sys_ni_syscall(void)
 {
 	return -ENOSYS;
diff -u --recursive --new-file v1.3.36/linux/net/core/firewall.c linux/net/core/firewall.c
--- v1.3.36/linux/net/core/firewall.c	Mon Oct 23 18:02:22 1995
+++ linux/net/core/firewall.c	Sat Oct 28 15:18:23 1995
@@ -100,7 +100,6 @@
 int call_fw_firewall(int pf, struct sk_buff *skb, void *phdr)
 {
 	struct firewall_ops *fw=firewall_chain[pf];
-	int result=firewall_policy[pf];
 	
 	while(fw!=NULL)
 	{
@@ -109,8 +108,7 @@
 			return rc;
 		fw=fw->next;
 	}
-	/* alan, is this right? */
-	return result;
+	return firewall_policy[pf];
 }
 
 /*
@@ -120,7 +118,6 @@
 int call_in_firewall(int pf, struct sk_buff *skb, void *phdr)
 {
 	struct firewall_ops *fw=firewall_chain[pf];
-	int result=firewall_policy[pf];
 	
 	while(fw!=NULL)
 	{
@@ -129,14 +126,12 @@
 			return rc;
 		fw=fw->next;
 	}
-	/* alan, is this right? */
-	return result;
+	return firewall_policy[pf];
 }
 
 int call_out_firewall(int pf, struct sk_buff *skb, void *phdr)
 {
 	struct firewall_ops *fw=firewall_chain[pf];
-	int result=firewall_policy[pf];
 	
 	while(fw!=NULL)
 	{
@@ -146,7 +141,7 @@
 		fw=fw->next;
 	}
 	/* alan, is this right? */
-	return result;
+	return firewall_policy[pf];
 }
 
 void fwchain_init(void)
diff -u --recursive --new-file v1.3.36/linux/net/core/skbuff.c linux/net/core/skbuff.c
--- v1.3.36/linux/net/core/skbuff.c	Mon Oct 23 18:02:22 1995
+++ linux/net/core/skbuff.c	Sat Oct 28 15:18:23 1995
@@ -53,6 +53,8 @@
 volatile unsigned long net_fails  = 0;
 volatile unsigned long net_free_locked = 0;
 
+extern unsigned long ip_frag_mem;
+
 void show_net_buffers(void)
 {
 	printk("Networking buffers in use          : %lu\n",net_skbcount);
@@ -60,6 +62,9 @@
 	printk("Total network buffer allocations   : %lu\n",net_allocs);
 	printk("Total failed network buffer allocs : %lu\n",net_fails);
 	printk("Total free while locked events     : %lu\n",net_free_locked);
+#ifdef CONFIG_INET
+	printk("IP fragment buffer size            : %lu\n",ip_frag_mem);
+#endif	
 }
 
 #if CONFIG_SKB_CHECK
diff -u --recursive --new-file v1.3.36/linux/net/ipv4/af_inet.c linux/net/ipv4/af_inet.c
--- v1.3.36/linux/net/ipv4/af_inet.c	Mon Oct 23 18:02:22 1995
+++ linux/net/ipv4/af_inet.c	Wed Oct 25 09:37:24 1995
@@ -230,6 +230,7 @@
 	while ((tmp = *skp) != NULL) {
 		if (!(tmp->rcv_saddr & mask))
 			break;
+		skp = &tmp->next;
 	}
 	sk->next = tmp;
 	*skp = sk;
diff -u --recursive --new-file v1.3.36/linux/net/ipv4/icmp.c linux/net/ipv4/icmp.c
--- v1.3.36/linux/net/ipv4/icmp.c	Mon Oct 23 18:02:22 1995
+++ linux/net/ipv4/icmp.c	Sat Oct 28 15:18:24 1995
@@ -16,6 +16,7 @@
  *	Fixes:
  *		Mike Shaver	:	RFC1122 checks.
  *		Alan Cox	:	Multicast ping reply as self.
+ *		Alan Cox	:	Fix atomicity lockup in ip_build_xmit call
  *
  *
  *
@@ -235,7 +236,7 @@
 	icmp_out_count(icmp_param->icmph.type);
 	ip_build_xmit(sk, icmp_glue_bits, icmp_param, 
 		icmp_param->data_len+sizeof(struct icmphdr),
-		daddr, saddr, &icmp_param->replyopts, 0, IPPROTO_ICMP);
+		daddr, saddr, &icmp_param->replyopts, 0, IPPROTO_ICMP, 1);
 }
 
 
diff -u --recursive --new-file v1.3.36/linux/net/ipv4/ip_forward.c linux/net/ipv4/ip_forward.c
--- v1.3.36/linux/net/ipv4/ip_forward.c	Mon Oct 23 18:02:22 1995
+++ linux/net/ipv4/ip_forward.c	Sat Oct 28 15:18:24 1995
@@ -18,6 +18,7 @@
 #include <linux/skbuff.h>
 #include <linux/ip.h>
 #include <linux/icmp.h>
+#include <linux/netdevice.h>
 #include <net/sock.h>
 #include <net/ip.h>
 #include <net/icmp.h>
diff -u --recursive --new-file v1.3.36/linux/net/ipv4/ip_fragment.c linux/net/ipv4/ip_fragment.c
--- v1.3.36/linux/net/ipv4/ip_fragment.c	Mon Oct 23 18:02:23 1995
+++ linux/net/ipv4/ip_fragment.c	Sat Oct 28 15:18:24 1995
@@ -19,6 +19,7 @@
 #include <linux/skbuff.h>
 #include <linux/ip.h>
 #include <linux/icmp.h>
+#include <linux/netdevice.h>
 #include <net/sock.h>
 #include <net/ip.h>
 #include <net/icmp.h>
@@ -29,12 +30,61 @@
 #include <net/checksum.h>
 
 /*
+ *	Fragment cache limits. We will commit 256K at one time. Should we
+ *	cross that limit we will prune down to 192K. This should cope with
+ *	even the most extreme cases without allowing an attacker to measurably
+ *	harm machine performance.
+ */
+ 
+#define IPFRAG_HIGH_THRESH		(256*1024)
+#define IPFRAG_LOW_THRESH		(192*1024)
+
+/*
  *	This fragment handler is a bit of a heap. On the other hand it works quite
  *	happily and handles things quite well.
  */
 
 static struct ipq *ipqueue = NULL;		/* IP fragment queue	*/
 
+unsigned long ip_frag_mem = 0;			/* Memory used for fragments */
+
+/*
+ *	Memory Tracking Functions
+ */
+ 
+extern __inline__ void frag_kfree_skb(struct sk_buff *skb, int type)
+{
+	unsigned long flags;
+	save_flags(flags);
+	cli();
+	ip_frag_mem-=skb->truesize;
+	restore_flags(flags);
+	kfree_skb(skb,type);
+}
+
+extern __inline__ void frag_kfree_s(void *ptr, int len)
+{
+	unsigned long flags;
+	save_flags(flags);
+	cli();
+	ip_frag_mem-=len;
+	restore_flags(flags);
+	kfree_s(ptr,len);
+}
+ 
+extern __inline__ void *frag_kmalloc(int size, int pri)
+{
+	unsigned long flags;
+	void *vp=kmalloc(size,pri);
+	if(!vp)
+		return NULL;
+	save_flags(flags);
+	cli();
+	ip_frag_mem+=size;
+	restore_flags(flags);
+	return vp;
+}
+ 
 /*
  *	Create a new fragment entry.
  */
@@ -42,8 +92,9 @@
 static struct ipfrag *ip_frag_create(int offset, int end, struct sk_buff *skb, unsigned char *ptr)
 {
 	struct ipfrag *fp;
+	unsigned long flags;
 
-	fp = (struct ipfrag *) kmalloc(sizeof(struct ipfrag), GFP_ATOMIC);
+	fp = (struct ipfrag *) frag_kmalloc(sizeof(struct ipfrag), GFP_ATOMIC);
 	if (fp == NULL)
 	{
 		NETDEBUG(printk("IP: frag_create: no memory left !\n"));
@@ -57,6 +108,15 @@
 	fp->len = end - offset;
 	fp->skb = skb;
 	fp->ptr = ptr;
+	
+	/*
+	 *	Charge for the SKB as well.
+	 */
+	 
+	save_flags(flags);
+	cli();
+	ip_frag_mem+=skb->truesize;
+	restore_flags(flags);
 
 	return(fp);
 }
@@ -128,16 +188,16 @@
 	{
 		xp = fp->next;
 		IS_SKB(fp->skb);
-		kfree_skb(fp->skb,FREE_READ);
-		kfree_s(fp, sizeof(struct ipfrag));
+		frag_kfree_skb(fp->skb,FREE_READ);
+		frag_kfree_s(fp, sizeof(struct ipfrag));
 		fp = xp;
 	}
 
 	/* Release the IP header. */
-	kfree_s(qp->iph, 64 + 8);
+	frag_kfree_s(qp->iph, 64 + 8);
 
 	/* Finally, release the queue descriptor itself. */
-	kfree_s(qp, sizeof(struct ipq));
+	frag_kfree_s(qp, sizeof(struct ipq));
 	sti();
 }
 
@@ -169,6 +229,20 @@
 	ip_free(qp);
 }
 
+/*
+ *	Memory limiting on fragments. Evictor trashes the oldest 
+ *	fragment queue until we are back under the low threshold
+ */
+ 
+static void ip_evictor(void)
+{
+	while(ip_frag_mem>IPFRAG_LOW_THRESH)
+	{
+		if(!ipqueue)
+			panic("ip_evictor: memcount");
+		ip_free(ipqueue);
+	}
+}
 
 /*
  * 	Add an entry to the 'ipq' queue for a newly received IP datagram.
@@ -182,7 +256,7 @@
 	struct ipq *qp;
 	int ihlen;
 
-	qp = (struct ipq *) kmalloc(sizeof(struct ipq), GFP_ATOMIC);
+	qp = (struct ipq *) frag_kmalloc(sizeof(struct ipq), GFP_ATOMIC);
 	if (qp == NULL)
 	{
 		NETDEBUG(printk("IP: create: no memory left !\n"));
@@ -196,11 +270,11 @@
 	 */
 
 	ihlen = iph->ihl * 4;
-	qp->iph = (struct iphdr *) kmalloc(64 + 8, GFP_ATOMIC);
+	qp->iph = (struct iphdr *) frag_kmalloc(64 + 8, GFP_ATOMIC);
 	if (qp->iph == NULL)
 	{
 		NETDEBUG(printk("IP: create: no memory left !\n"));
-		kfree_s(qp, sizeof(struct ipq));
+		frag_kfree_s(qp, sizeof(struct ipq));
 		return(NULL);
 	}
 
@@ -306,7 +380,7 @@
 		{
 			NETDEBUG(printk("Invalid fragment list: Fragment over size.\n"));
 			ip_free(qp);
-			kfree_skb(skb,FREE_WRITE);
+			frag_kfree_skb(skb,FREE_WRITE);
 			ip_statistics.IpReasmFails++;
 			return NULL;
 		}
@@ -342,10 +416,19 @@
 	unsigned char *ptr;
 	int flags, offset;
 	int i, ihl, end;
-
+	
 	ip_statistics.IpReasmReqds++;
 
-	/* Find the entry of this IP datagram in the "incomplete datagrams" queue. */
+	/*
+	 *	Start by cleaning up the memory
+	 */
+
+	if(ip_frag_mem>IPFRAG_HIGH_THRESH)
+		ip_evictor();
+	/* 
+	 *	Find the entry of this IP datagram in the "incomplete datagrams" queue. 
+	 */
+	 
 	qp = ip_find(iph);
 
 	/* Is this a non-fragmented datagram? */
@@ -392,7 +475,7 @@
 		if ((qp = ip_create(skb, iph, dev)) == NULL)
 		{
 			skb->sk = NULL;
-			kfree_skb(skb, FREE_READ);
+			frag_kfree_skb(skb, FREE_READ);
 			ip_statistics.IpReasmFails++;
 			return NULL;
 		}
@@ -474,8 +557,8 @@
 			
 			next=tfp;	/* We have killed the original next frame */
 
-			kfree_skb(tmp->skb,FREE_READ);
-			kfree_s(tmp, sizeof(struct ipfrag));
+			frag_kfree_skb(tmp->skb,FREE_READ);
+			frag_kfree_s(tmp, sizeof(struct ipfrag));
 		}
 	}
 
@@ -493,7 +576,7 @@
 	if (!tfp)
 	{
 		skb->sk = NULL;
-		kfree_skb(skb, FREE_READ);
+		frag_kfree_skb(skb, FREE_READ);
 		return NULL;
 	}
 	tfp->prev = prev;
diff -u --recursive --new-file v1.3.36/linux/net/ipv4/ip_options.c linux/net/ipv4/ip_options.c
--- v1.3.36/linux/net/ipv4/ip_options.c	Mon Oct 23 18:02:23 1995
+++ linux/net/ipv4/ip_options.c	Sat Oct 28 15:18:24 1995
@@ -14,6 +14,7 @@
 #include <linux/skbuff.h>
 #include <linux/ip.h>
 #include <linux/icmp.h>
+#include <linux/netdevice.h>
 #include <net/sock.h>
 #include <net/ip.h>
 #include <net/icmp.h>
diff -u --recursive --new-file v1.3.36/linux/net/ipv4/ip_output.c linux/net/ipv4/ip_output.c
--- v1.3.36/linux/net/ipv4/ip_output.c	Mon Oct 23 18:02:23 1995
+++ linux/net/ipv4/ip_output.c	Sat Oct 28 15:18:24 1995
@@ -17,6 +17,9 @@
  *		Arnt Gulbrandsen, <agulbra@nvg.unit.no>
  *
  *	See ip_input.c for original log
+ *
+ *	Fixes:
+ *		Alan Cox	:	Missing nonblock feature in ip_build_xmit.
  */
 
 #include <asm/segment.h>
@@ -551,7 +554,8 @@
 		   __u32 user_saddr,
 		   struct options * opt,
 		   int flags,
-		   int type) 
+		   int type,
+		   int noblock) 
 {
 	struct rtable *rt;
 	unsigned int fraglen, maxfraglen, fragheaderlen;
@@ -671,7 +675,7 @@
 	if(length <= dev->mtu && !MULTICAST(daddr) && daddr!=0xFFFFFFFF && daddr!=dev->pa_brdaddr)
 	{	
 		int error;
-		struct sk_buff *skb=sock_alloc_send_skb(sk, length+15+dev->hard_header_len,0, 0,&error);
+		struct sk_buff *skb=sock_alloc_send_skb(sk, length+15+dev->hard_header_len,0, noblock, &error);
 		if(skb==NULL)
 		{
 			ip_statistics.IpOutDiscards++;
@@ -822,7 +826,7 @@
 		 *	Get the memory we require with some space left for alignment.
 		 */
 
-		skb = sock_alloc_send_skb(sk, fraglen+15, 0, 0, &error);
+		skb = sock_alloc_send_skb(sk, fraglen+15, 0, noblock, &error);
 		if (skb == NULL)
 		{
 			ip_statistics.IpOutDiscards++;
diff -u --recursive --new-file v1.3.36/linux/net/ipv4/ip_sockglue.c linux/net/ipv4/ip_sockglue.c
--- v1.3.36/linux/net/ipv4/ip_sockglue.c	Mon Oct 23 18:02:23 1995
+++ linux/net/ipv4/ip_sockglue.c	Sat Oct 28 15:18:24 1995
@@ -18,6 +18,7 @@
 #include <linux/skbuff.h>
 #include <linux/ip.h>
 #include <linux/icmp.h>
+#include <linux/netdevice.h>
 #include <net/sock.h>
 #include <net/ip.h>
 #include <net/icmp.h>
diff -u --recursive --new-file v1.3.36/linux/net/ipv4/raw.c linux/net/ipv4/raw.c
--- v1.3.36/linux/net/ipv4/raw.c	Mon Oct 23 18:02:23 1995
+++ linux/net/ipv4/raw.c	Sat Oct 28 15:18:24 1995
@@ -223,13 +223,13 @@
 	{
 		if(len>65535)
 			return -EMSGSIZE;
-		err=ip_build_xmit(sk, raw_getrawfrag, from, len, sin.sin_addr.s_addr, 0, sk->opt, flags, sin.sin_port);
+		err=ip_build_xmit(sk, raw_getrawfrag, from, len, sin.sin_addr.s_addr, 0, sk->opt, flags, sin.sin_port, noblock);
 	}
 	else
 	{
 		if(len>65535-sizeof(struct iphdr))
 			return -EMSGSIZE;
-		err=ip_build_xmit(sk, raw_getfrag, from, len, sin.sin_addr.s_addr, 0, sk->opt, flags, sin.sin_port);
+		err=ip_build_xmit(sk, raw_getfrag, from, len, sin.sin_addr.s_addr, 0, sk->opt, flags, sin.sin_port, noblock);
 	}
 	return err<0?err:len;
 }
diff -u --recursive --new-file v1.3.36/linux/net/ipv4/route.c linux/net/ipv4/route.c
--- v1.3.36/linux/net/ipv4/route.c	Tue Oct 10 18:46:39 1995
+++ linux/net/ipv4/route.c	Sat Oct 28 15:18:24 1995
@@ -575,16 +575,14 @@
 int rt_get_info(char *buffer, char **start, off_t offset, int length, int dummy)
 {
 	struct rtable *r;
-	int len=0;
+	int len=128;
 	off_t pos=0;
 	off_t begin=0;
 	char temp[129];
 
 	if(offset<128)
-	{
 		sprintf(buffer,"%-127s\n","Iface\tDestination\tGateway \tFlags\tRefCnt\tUse\tMetric\tMask\t\tMTU\tWindow\tIRTT");
-		pos=128;
-  	}
+	pos=128;
   	
 	for (r = rt_base; r != NULL; r = r->rt_next) 
 	{
diff -u --recursive --new-file v1.3.36/linux/net/ipv4/tcp.c linux/net/ipv4/tcp.c
--- v1.3.36/linux/net/ipv4/tcp.c	Mon Oct 23 18:02:23 1995
+++ linux/net/ipv4/tcp.c	Sat Oct 28 15:18:24 1995
@@ -174,7 +174,8 @@
  *					change. Doesn't yet cope with MSS shrink right
  *					but its a start!
  *		Marc Tamsky	:	Closing in closing fixes.
- *		Mike Shaver	:	RFC1122 verifications
+ *		Mike Shaver	:	RFC1122 verifications.
+ *		Alan Cox	:	rcv_saddr errors.
  *
  *
  * To Fix:
@@ -1816,7 +1817,6 @@
 					from += copy;
 					copied += copy;
 					len -= copy;
-					seglen -= copy;
 					sk->write_seq += copy;
 					seglen -= copy;
 				}
@@ -3053,6 +3053,7 @@
 	 
 	newsk->daddr = saddr;
 	newsk->saddr = daddr;
+	newsk->rcv_saddr = daddr;
 
 	put_sock(newsk->num,newsk);
 	newsk->dummy_th.res1 = 0;
@@ -4575,7 +4576,7 @@
 	
 
 	/*
-	 *	Put in the IP header and routing stuff. 
+	 *	Put in the IP header and routing stuff.
 	 */
 	 
 	if (sk->localroute)
@@ -4583,6 +4584,12 @@
 	else
 	  rt=ip_rt_route(sk->daddr, NULL, sk->saddr ? NULL : &sk->saddr);
 
+	/*
+	 *	When we connect we enforce receive requirements too.
+	 */
+	 
+	sk->rcv_saddr=sk->saddr;
+	
 	/*
 	 *	We need to build the routing stuff from the things saved in skb. 
 	 */
diff -u --recursive --new-file v1.3.36/linux/net/ipv4/udp.c linux/net/ipv4/udp.c
--- v1.3.36/linux/net/ipv4/udp.c	Mon Oct 23 18:02:23 1995
+++ linux/net/ipv4/udp.c	Sat Oct 28 15:18:24 1995
@@ -47,6 +47,7 @@
  *		Alan Cox	:	Route cache
  *		Jon Peatfield	:	Minor efficientcy fix to sendto().
  *		Mike Shaver	:	RFC1122 checks.
+ *		Alan Cox	:	Nonblocking error fix.
  *
  *
  *		This program is free software; you can redistribute it and/or
@@ -292,7 +293,7 @@
 
 static int udp_send(struct sock *sk, struct sockaddr_in *sin,
 		      const unsigned char *from, int len, int rt,
-		    __u32 saddr) 
+		    __u32 saddr, int noblock) 
 {
 	int ulen = len + sizeof(struct udphdr);
 	int a;
@@ -310,11 +311,6 @@
 	ufh.from = from;
 	ufh.wcheck = 0;
 
-	/* RFC1122 Violation: there is no provision for passing IP options */
-	/* from the application layer to the IP one.  It's a MUST (4.1.3.2), */
-	/* but it looks like it'd require some work on ip_build_xmit. */
-	/* Alan says he's got a Cunning Plan. -- MS */
-
 	/* RFC1122: OK.  Provides the checksumming facility (MUST) as per */
 	/* 4.1.3.4. It's configurable by the application via setsockopt() */
 	/* (MAY) and it defaults to on (MUST).  Almost makes up for the */
@@ -322,10 +318,10 @@
 
 	if(sk->no_check)
 		a = ip_build_xmit(sk, udp_getfrag_nosum, &ufh, ulen, 
-			sin->sin_addr.s_addr, saddr, sk->opt, rt, IPPROTO_UDP);
+			sin->sin_addr.s_addr, saddr, sk->opt, rt, IPPROTO_UDP, noblock);
 	else
 		a = ip_build_xmit(sk, udp_getfrag, &ufh, ulen, 
-			sin->sin_addr.s_addr, saddr, sk->opt, rt, IPPROTO_UDP);
+			sin->sin_addr.s_addr, saddr, sk->opt, rt, IPPROTO_UDP, noblock);
 	if(a<0)
 		return a;
 	udp_statistics.UdpOutDatagrams++;
@@ -393,7 +389,7 @@
 	sk->inuse = 1;
 
 	/* Send the packet. */
-	tmp = udp_send(sk, usin, from, len, flags, saddr);
+	tmp = udp_send(sk, usin, from, len, flags, saddr, noblock);
 
 	/* The datagram has been sent off.  Release the socket. */
 	release_sock(sk);
@@ -568,7 +564,10 @@
   	rt=(sk->localroute?ip_rt_local:ip_rt_route)((__u32)usin->sin_addr.s_addr, NULL, &sa);
   	if(rt==NULL)
   		return -ENETUNREACH;
-  	sk->saddr = sa;		/* Update source address */
+  	if(!sk->saddr)
+	  	sk->saddr = sa;		/* Update source address */
+	if(!sk->rcv_saddr)
+		sk->rcv_saddr = sa;
 	sk->daddr = usin->sin_addr.s_addr;
 	sk->dummy_th.dest = usin->sin_port;
 	sk->state = TCP_ESTABLISHED;
diff -u --recursive --new-file v1.3.36/linux/net/unix/af_unix.c linux/net/unix/af_unix.c
--- v1.3.36/linux/net/unix/af_unix.c	Wed Sep 13 12:45:36 1995
+++ linux/net/unix/af_unix.c	Sat Oct 28 17:52:34 1995
@@ -18,6 +18,7 @@
  *		Niibe Yutaka	:	async I/O support.
  *		Carsten Paeth	:	PF_UNIX check, address fixes.
  *		Alan Cox	:	Limit size of allocated blocks.
+ *		Alan Cox	:	Fixed the stupid socketpair bug.
  */
 
 #include <linux/config.h>
@@ -46,7 +47,7 @@
 #include <net/af_unix.h>
 #include <linux/proc_fs.h>
 
-static unix_socket *volatile unix_socket_list=NULL;
+static unix_socket * unix_socket_list=NULL;
 
 #define min(a,b)	(((a)<(b))?(a):(b))
 
@@ -68,25 +69,19 @@
  
 static void unix_remove_socket(unix_socket *sk)
 {
-	unix_socket *s;
+	unix_socket **s;
 	
 	cli();
-	s=unix_socket_list;
-	if(s==sk)
-	{
-		unix_socket_list=s->next;
-		sti();
-		return;
-	}
-	while(s && s->next)
+	s = &unix_socket_list;
+
+	while(*s!=NULL)
 	{
-		if(s->next==sk)
+		if(*s==sk)
 		{
-			s->next=sk->next;
-			sti();
-			return;
+			*s=sk->next;
+			break;
 		}
-		s=s->next;
+		s=&((*s)->next);
 	}
 	sti();
 }
@@ -279,7 +274,7 @@
 	skb_queue_head_init(&sk->back_log);
 	sk->protinfo.af_unix.family=AF_UNIX;
 	sk->protinfo.af_unix.inode=NULL;
-	sk->protinfo.af_unix.locks=1;	/* Us */
+	sk->protinfo.af_unix.locks=1;		/* Us */
 	sk->protinfo.af_unix.readsem=MUTEX;	/* single task reading lock */
 	sk->protinfo.af_unix.name=NULL;
 	sk->protinfo.af_unix.other=NULL;
@@ -540,20 +535,8 @@
 
 static int unix_socketpair(struct socket *a, struct socket *b)
 {
-	int err;
 	unix_socket *ska,*skb;	
 	
-	err=unix_create(a, 0);
-	if(err)
-		return err;
-	err=unix_create(b, 0);
-	if(err)
-	{
-		unix_release(a, NULL);
-		a->data=NULL;
-		return err;
-	}
-
 	ska=a->data;
 	skb=b->data;
 
diff -u --recursive --new-file v1.3.36/linux/scripts/Configure linux/scripts/Configure
--- v1.3.36/linux/scripts/Configure	Mon Oct 23 18:02:24 1995
+++ linux/scripts/Configure	Fri Oct 27 08:07:03 1995
@@ -150,7 +150,7 @@
 #
 function dep_tristate () {
 	def=$(eval echo "\${$2:-'n'}")
-	if [ "$def" != "m" ]; then
+	if [ "$3" != "m" ]; then
 		tristate "$1" "$2"
 	else
 		ans=""
diff -u --recursive --new-file v1.3.36/linux/scripts/Makefile linux/scripts/Makefile
--- v1.3.36/linux/scripts/Makefile	Mon Oct 16 18:38:24 1995
+++ linux/scripts/Makefile	Mon Oct 23 17:51:21 1995
@@ -2,7 +2,7 @@
 TAIL=tail.tk
 
 kconfig.tk: ../arch/${ARCH}/config.in tkparse ${HEADER} ${TAIL}
-	./tkparse < ../arch/${ARCH}/config.in  > kconfig.tmp
+	./tkparse < ../arch/${ARCH}/config.in > kconfig.tmp
 	cp ${HEADER} ./kconfig.tk
 	cat kconfig.tmp >> kconfig.tk
 	rm -f kconfig.tmp
diff -u --recursive --new-file v1.3.36/linux/scripts/tkparse.c linux/scripts/tkparse.c
--- v1.3.36/linux/scripts/tkparse.c	Mon Oct 23 18:02:24 1995
+++ linux/scripts/tkparse.c	Mon Oct 23 17:56:05 1995
@@ -27,6 +27,8 @@
 struct kconfig * koption = NULL;
 static int lineno = 0;
 static int menus_seen = 0;
+static char * current_file = NULL;
+static int do_source(char * filename);
 /*
  * Simple function just to skip over spaces and tabs in config.in.
  */
@@ -138,7 +140,10 @@
   return list;
 
  error:
-  printf("Bad if clause at line %d:%s\n", lineno, opnt);
+  if(current_file != NULL) 
+    printf("Bad if clause at line %d(%s):%s\n", lineno, current_file, opnt);
+  else
+    printf("Bad if clause at line %d:%s\n", lineno, opnt);
   return NULL;
 }
 
@@ -242,6 +247,13 @@
       tok = tok_menuname;
       pnt += 13;
     }
+  else if      (strncmp(pnt, "source", 6) == 0) 
+    {
+      pnt += 7;
+      pnt = skip_whitespace(pnt);
+      do_source(pnt);
+      return;
+    }
   else if (strncmp(pnt, "mainmenu_option", 15) == 0) 
     {
       menus_seen++;
@@ -417,22 +429,49 @@
   printf("\n");
 }
 
-char buffer[1024];
+static int do_source(char * filename)
+{
+  char buffer[1024];
+  int old_lineno;
+  char * pnt;
+  FILE * infile;
+
+  infile = fopen(filename,"r");
+  if(!infile) {
+    fprintf(stderr,"Unable to open file %s\n", filename);
+    return 1;
+  }
+  old_lineno = lineno;
+  lineno = 0;
+  current_file = filename;
+  while (fgets(buffer, sizeof(buffer), infile))
+    {
+      /*
+       * Strip the trailing return character.
+       */
+      pnt = buffer + strlen(buffer) - 1;
+      if( *pnt == '\n') *pnt = 0;
+      lineno++;
+      parse(buffer);
+    }
+  fclose(infile);
+  current_file = NULL;
+  lineno = old_lineno;
+  return 0;
+}
 
 main(int argc, char * argv[])
 {
   char * pnt;
   struct kconfig * cfg;
+  char buffer[1024];
   int    i;
 
   /*
    * Loop over every input line, and parse it into the tables.
    */
-  while(1)
+  while(fgets(buffer, sizeof(buffer), stdin))
     {
-      fgets(buffer, sizeof(buffer), stdin);
-      if(feof(stdin)) break;
-
       /*
        * Strip the trailing return character.
        */
