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