blob: cd6987949e4efd4205b5127f55cf43ea7da4f385 [file] [log] [blame]
From: bj0rn@blox.se (Bjorn Ekwall)
To: waltje@nic.NL.Mugnet.ORG
Subject: Re: NET-2 and the D-Link Ethernet driver
X-Mailer: Mail User's Shell (7.2.4 2/2/92)
Message-ID: <m0nvKUE-0001OLC@blox.se>
Date: Tue, 18 May 1993 07:45:13 +0000
Hello Fred!
> My collegue put a copy of your article regarding the Dlink 0.20
> driver on my desk. I wasn't aware such a driver already existed...
>
> Anyway. I'd like to get a copy of your driver to add it to the
> current "new" kernel code (called NET-2). Many people are waiting
> for it, and now is the time to add it... right?
That's true, I'm waiting too :-)
Enclosed is the most current release that has been shipped so far (== v 0.20+).
Note that there are some things that still needs some attention:
- There is a not yet fully tested part of the code for handling
alternations of transmitter pages. Enable with "-DD_LINK_FIFO".
- I am only 99% sure that I have not missed any valid
interrupt-code from the adapter.
- There is always(?) a spurious IRQ 7 interrupt at boot. This might
come from the port being initialized by lp_init(), but I haven't
been able to stomp it out. Kludge found in d_link_interrupt().
Anyway, there seems to be some people out there using the driver,
and I haven't received any bugreports yet on this version
(hope that Murphy doesn't read email :-))
Good luck with the code,
Bjorn Ekwall == bj0rn@blox.se
= = = = = = Release shar-file follows = = = = = = = = = = = = = = = = = = =
Now, here it is!
A driver for the D-Link Ethernet pocket adapter in the parallel port,
to use with Linux on a laptop PC.
It has been tested with mount, rsh, ftp, telnet and remote X-clients.
TCP/IP throughput can be expected to be around 70-80 kbytes/second.
It now "runs" on:
- linux 0.99pl5, (with supplied patch for linux/net/tcp/dev.c)
- linux 0.99pl6, and later
(using a 386-25 Taiwan-made with 5Mb DRAM + 120Mb disk (60Mb == linux)).
Since this still is an alpha-release, some bugs might still be lurking...
All comments/requests/fixes to Bjorn Ekwall == bj0rn@blox.se
*** If you read nothing else, at least check around line 20 in the source! ***
(You may want to unshar this in /linux/net/tcp)
This is version 0.20
---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ----
= = = = = = Release shar-file ends = = = = = = = = = = = = = = = = = = =
CONTENTS:
1. Introduction.
2. License.
3. Files in this release.
4. Installation.
5. Known problems and some solutions.
6. Acknowledgments.
1. INTRODUCTION.
This is an Ethernet driver for the D-Link Ethernet pocket
adapter for the parallel port, used with Linux on a laptop.
This is an ALPHA release, i.e. it might not work flawlessly! (:-)
It now runs on SLS (beg. of February) linux 0.99pl5, patched
in linux/net/tcp/dev.c, and 0.99pl6 (and later), in a 386-25
Taiwan-made with 5Mb DRAM + 120Mb disk (60Mb == linux).
I have used this driver for ftp, telnet and X-clients on
remote machines. Transmissions with ftp seems to work as
good as can be expected (i.e. about 80k bytes/sec) from a
parallel port...:-)
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.d_link This file.
d_link.c The Source (,may it be with You :-).
Makefile.new Replaced "we.o" with "d_link.o"
Space.c.new An entry for "d_link" instead of "wdxxx"
4. INSTALLATION.
o Replace (or edit) /linux/net/tcp/Makefile with
Makefile.new (save the original!). Actually, you only
have to make sure that "d_link.o" is included in the list
at "OBJS =".
o Replace /linux/net/tcp/Space.c with Space.c.new (save the
original!). If your kernel source is later than 0.99p5,
check your original for any greater differences
(shouldn't really be any).
o Copy d_link.c to /linux/net/tcp if you unshared somewhere
else.
o If you have linux 0.99p5, then add two lines close to the
end of /linux/net/tcp/dev.c (thanks Ross Biro, for the
information!):
...
}
}
skb->next = NULL;
skb->prev = NULL;
sti();
/* this will send it through the process again. */
dev->queue_xmit (skb, dev, -i-1);
+ if (dev->tbusy)
+ return;
}
}
...
o Read the NET_FAQ and the relevant files in /etc/inet
(hint: "hosts")
o Make sure that TCP/IP is included in your config, and
then do:
# cd /linux
# make clean
# make depend
# make Image (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 = /usr/src/linux/Image
label = newlinux
root = /dev/hda2 (or whatever YOU have...)
...
# /etc/lilo/install
o Do "sync" and reboot the new kernel with a D-Link pocket
adapter connected.
Now, watch for any fireworks (try to ignore (or live with)
the smoke... :-) or:
do
read NET-FAQ and all info in /etc/inet
if fix in code needed...
vi /linux/net/tcp/d_link.c
cd /linux
make Image
/etc/lilo/install
sync
reboot
endif
try it...
until satisfied
5. KNOWN "PROBLEMS" AND SOME SOLUTIONS.
o Some machines have trouble handling the parallel port and
the adapter at high speed. If you experience problems
like "Strange interrupt...", try to uncomment the
"#define REALLY_SLOW_IO" near line 20 in d_link.c
o A frequent number of "eth0: transmit timed out..." might
indicate a heavy load on your network or some strange
internal driver bug. You can decrease the number of
messages by changing about 25 lines into the function
"d_link_start_xmit()", where it looks like:
if (tickssofar < 5)
Change the "5" to something greater, like 10, 20 or
whatever... Every "tick" equals 10 milliseconds.
o There has been some "hangs" when communicating with other
systems. As of now I'm not clear of where the trouble
might come from. It seems that reception of large
amounts of information can trigger this. Try to be
patient and see if the machines can clear up the mess
without any help (can happen!). If not, try to switch to
another virtual console and call the other system with
telnet and see what happens. If your machine seems
completely locked, there might be a race of transmit and
receive interrupts emanating from inet_bh() in dev.c .
The reason why this driver can trigger this is not quite
clear yet.
o There will always(?) be a spurious IRQ 7 interrupt at
boot. This might come from the port being initialized by
lp_init(), but I haven't been able to stomp it out.
Kludge can be found in d_link_interrupt().
o The code inside d_link_interrupt() is somewhat of a
guesswork since I'm not quite clear about how the adapter
REALLY tells us about its internal status. Since my only
source of information is the asm-source (:-), I'm not
sure of how to improve on it. Some more turns around the
edit_a_hack-compile-boot-tryout loop...
o There is some rudimentary support for debugging, see
the source. Use "-DD_LINK_DEBUG=3" when compiling.
6. ACKNOWLEDGMENTS.
This driver wouldn't have been done without the base
(and support) from Ross Biro (bir7@leland.stanford.edu).
The driver also relies upon GPL-ed source from D-Link Inc.
and from Russel Nelson at Crynwr Software (nelson@crynwr.com).
Additional input also from Donald Becker (becker@super.org).
Alpha release primary victim^H^H^H^H^H^Htester:
Erik Proper (erikp@cs.kun.nl).
Happy hacking!
Bjorn Ekwall == bj0rn@blox.se