Released 1994-06-13


	CONTENTS:

	1. Introduction.
	2. License.
	3. Files in this release.
	4. Installation.
	5. Problems and tuning.
	6. Using the drivers with earlier releases.
	7. Acknowledgments.


	1. INTRODUCTION.

	This is a set of Ethernet drivers for the D-Link DE-600/DE-620
	pocket adapters, for the parallel port on a Linux based machine.
	Some adapter "clones" will also work.  Xircom is _not_ a clone...
	These drivers _can_ be used as loadable modules,
	and were developed for use on Linux 1.1.13 and above.
	For use on Linux 1.0.X, or earlier releases, see below.

	I have used these drivers for NFS, ftp, telnet and X-clients on
	remote machines. Transmissions with ftp seems to work as
	good as can be expected (i.e. > 80k bytes/sec) from a
	parallel port...:-)  Receive speeds will be about 60-80% of this.
	Depending on your machine, somewhat higher speeds can be achieved.

	All comments/fixes to Bjorn Ekwall (bj0rn@blox.se).


	2. LICENSE.

	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, 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.


	3. FILES IN THIS RELEASE.

	README.DLINK  This file.
	de600.c       The Source (may it be with You :-) for the DE-600
	de620.c       ditto for the DE-620
	de620.h       Macros for de620.c

	If you are upgrading from the d-link tar release, there will
	also be a "dlink-patches" file that will patch Linux 1.1.18:
		linux/drivers/net/Makefile
		linux/drivers/net/CONFIG
		linux/drivers/net/MODULES
		linux/drivers/net/Space.c
		linux/config.in
	Apply the patch by:
	"cd /usr/src; patch -p0 < linux/drivers/net/dlink-patches"
	The old source, "linux/drivers/net/d_link.c", can be removed.


	4. INSTALLATION.

	o Get the latest net binaries, according to current net.wisdom.

	o Read the NET-2 and Ethernet HOWTOs and modify your setup.

	o If your parallel port has a strange address or irq,
	  modify "linux/drivers/net/CONFIG" accordingly, or adjust
	  the parameters in the "tuning" section in the sources.

	If you are going to use the drivers as loadable modules, do _not_
	enable them while doing "make config", but instead make sure that
	the drivers are included in "linux/drivers/net/MODULES".

	If you are _not_ going to use the driver(s) as loadable modules,
	but instead have them included in the kernel, remember to enable
	the drivers while doing "make config".

	o To include networking and DE600/DE620 support in your kernel:
	  # cd /linux
	  (as modules:)
	  #  make config (answer yes on CONFIG_NET and CONFIG_INET)
	  (else included in the kernel:)
	  #  make config (answer yes on CONFIG _NET, _INET and _DE600 or _DE620)
	  # make clean
	  # make zImage (or whatever magic you usually do)

	o I use lilo to boot multiple kernels, so that I at least
	  can have one working kernel :-). If you do too, append
	  these lines to /etc/lilo/config:

		image = /linux/zImage
		label = newlinux
		root = /dev/hda2 (or whatever YOU have...)

	  # /etc/lilo/install

	o Do "sync" and reboot the new kernel with a D-Link
	  DE-600/DE-620 pocket adapter connected.

	o The adapter can be configured with ifconfig eth?
	  where the actual number is decided by the kernel
	  when the drivers are initialized.


	5. "PROBLEMS" AND TUNING,

	o If you see error messages from the driver, and if the traffic
	  stops on the adapter, try to do "ifconfig" and "route" once
	  more, just as in "rc.inet1".  This should take care of most
	  problems, including effects from power loss, or adapters that
	  aren't connected to the printer port in some way or another.
	  You can somewhat change the behaviour by enabling/disabling
	  the macro  SHUTDOWN_WHEN_LOST  in the "tuning" section.
	  For the DE-600 there is another macro, CHECK_LOST_DE600,
	  that you might want to read about in the "tuning" section.

	o Some machines have trouble handling the parallel port and
	  the adapter at high speed. If you experience problems:

	  DE-600:
	  - The adapter is not recognized at boot, i.e. an Ethernet
	    address of 00:80:c8:... is not shown, try to add another
	      "; SLOW_DOWN_IO"
	    at DE600_SLOW_DOWN in the "tuning" section. As a last resort,
	    uncomment: "#define REALLY_SLOW_IO" (see <asm/io.h> for hints).

	  - You experience "timeout" messages: first try to add another
	      "; SLOW_DOWN_IO"
	    at DE600_SLOW_DOWN in the "tuning" section, _then_ try to
	    increase the value (original value: 5) at
	    "if (tickssofar < 5)" near line 422.

	  DE-620:
	  - Your parallel port might be "sluggish".  To cater for
	    this, there are the macros LOWSPEED and READ_DELAY/WRITE_DELAY
	    in the "tuning" section. Your first step should be to enable
	    LOWSPEED, and after that you can "tune" the XXX_DELAY values.

	o If the adapter _is_ recognized at boot but you get messages
	  about "Network Unreachable", then the problem is probably
	  _not_ with the driver.  Check your net configuration instead
	  (ifconfig and route) in "rc.inet1".

	o There is some rudimentary support for debugging, look at
	  the source. Use "-DDE600_DEBUG=3" or "-DDE620_DEBUG=3"
	  when compiling, or include it in "linux/drivers/net/CONFIG".
	  IF YOU HAVE PROBLEMS YOU CAN'T SOLVE: PLEASE COMPILE THE DRIVER
	  WITH DEBUGGING ENABLED, AND SEND ME THE RESULTING OUTPUT!


	6. USING THE DRIVERS WITH EARLIER RELEASES.

	The later 1.1.X releases of the Linux kernel include some
	changes in the networking layer (a.k.a. NET3). This affects
	these drivers in a few places.  The hints that follow are
	_not_ tested by me, since I don't have the disk space to keep
	all releases on-line.
	Known needed changes to date:
	- release patchfile: some patches will fail, but they should
	  be easy to apply "by hand", since they are trivial.
	  (Space.c: d_link_init() is now called de600_probe())
	- de600.c: change  "mark_bh(NET_BH)" to  "mark_bh(INET_BH)".
	- de620.c: (maybe) change the code around "netif_rx(skb);" to be
		   similar to the code around "dev_rint(...)" in de600.c


	7. ACKNOWLEDGMENTS.

	These drivers wouldn't have been done without the base
	(and support) from Ross Biro, and D-Link Systems Inc.
	The driver relies upon GPL-ed source from D-Link Systems Inc.
	and from Russel Nelson at Crynwr Software <nelson@crynwr.com>.

	Additional input also from:
	Donald Becker <becker@super.org>, Alan Cox <A.Cox@swansea.ac.uk>
	and Fred N. van Kempen <waltje@uWalt.NL.Mugnet.ORG>

	DE-600 alpha release primary victim^H^H^H^H^H^Htester:
	- Erik Proper <erikp@cs.kun.nl>.
	Good input also from several users, most notably
	- Mark Burton <markb@ordern.demon.co.uk>.

	DE-620 alpha release victims^H^H^H^H^H^H^Htesters:
	- J. Joshua Kopper <kopper@rtsg.mot.com>
	- Olav Kvittem <Olav.Kvittem@uninett.no>
	- Germano Caronni <caronni@nessie.cs.id.ethz.ch>
	- Jeremy Fitzhardinge <jeremy@suite.sw.oz.au>


	Happy hacking!

	Bjorn Ekwall == bj0rn@blox.se
