1.. SPDX-License-Identifier: GPL-2.0
2
3=========================================================
4D-Link DL2000-based Gigabit Ethernet Adapter Installation
5=========================================================
6
7May 23, 2002
8
9.. Contents
10
11 - Compatibility List
12 - Quick Install
13 - Compiling the Driver
14 - Installing the Driver
15 - Option parameter
16 - Configuration Script Sample
17 - Troubleshooting
18
19
20Compatibility List
21==================
22
23Adapter Support:
24
25- D-Link DGE-550T Gigabit Ethernet Adapter.
26- D-Link DGE-550SX Gigabit Ethernet Adapter.
27- D-Link DL2000-based Gigabit Ethernet Adapter.
28
29
30The driver support Linux kernel 2.4.7 later. We had tested it
31on the environments below.
32
33 . Red Hat v6.2 (update kernel to 2.4.7)
34 . Red Hat v7.0 (update kernel to 2.4.7)
35 . Red Hat v7.1 (kernel 2.4.7)
36 . Red Hat v7.2 (kernel 2.4.7-10)
37
38
39Quick Install
40=============
41Install linux driver as following command::
42
43    1. make all
44    2. insmod dl2k.ko
45    3. ifconfig eth0 up 10.xxx.xxx.xxx netmask 255.0.0.0
46			^^^^^^^^^^^^^^^\	    ^^^^^^^^\
47					IP		     NETMASK
48
49Now eth0 should active, you can test it by "ping" or get more information by
50"ifconfig". If tested ok, continue the next step.
51
524. ``cp dl2k.ko /lib/modules/`uname -r`/kernel/drivers/net``
535. Add the following line to /etc/modprobe.d/dl2k.conf::
54
55	alias eth0 dl2k
56
576. Run ``depmod`` to updated module indexes.
587. Run ``netconfig`` or ``netconf`` to create configuration script ifcfg-eth0
59   located at /etc/sysconfig/network-scripts or create it manually.
60
61   [see - Configuration Script Sample]
628. Driver will automatically load and configure at next boot time.
63
64Compiling the Driver
65====================
66In Linux, NIC drivers are most commonly configured as loadable modules.
67The approach of building a monolithic kernel has become obsolete. The driver
68can be compiled as part of a monolithic kernel, but is strongly discouraged.
69The remainder of this section assumes the driver is built as a loadable module.
70In the Linux environment, it is a good idea to rebuild the driver from the
71source instead of relying on a precompiled version. This approach provides
72better reliability since a precompiled driver might depend on libraries or
73kernel features that are not present in a given Linux installation.
74
75The 3 files necessary to build Linux device driver are dl2k.c, dl2k.h and
76Makefile. To compile, the Linux installation must include the gcc compiler,
77the kernel source, and the kernel headers. The Linux driver supports Linux
78Kernels 2.4.7. Copy the files to a directory and enter the following command
79to compile and link the driver:
80
81CD-ROM drive
82------------
83
84::
85
86    [root@XXX /] mkdir cdrom
87    [root@XXX /] mount -r -t iso9660 -o conv=auto /dev/cdrom /cdrom
88    [root@XXX /] cd root
89    [root@XXX /root] mkdir dl2k
90    [root@XXX /root] cd dl2k
91    [root@XXX dl2k] cp /cdrom/linux/dl2k.tgz /root/dl2k
92    [root@XXX dl2k] tar xfvz dl2k.tgz
93    [root@XXX dl2k] make all
94
95Floppy disc drive
96-----------------
97
98::
99
100    [root@XXX /] cd root
101    [root@XXX /root] mkdir dl2k
102    [root@XXX /root] cd dl2k
103    [root@XXX dl2k] mcopy a:/linux/dl2k.tgz /root/dl2k
104    [root@XXX dl2k] tar xfvz dl2k.tgz
105    [root@XXX dl2k] make all
106
107Installing the Driver
108=====================
109
110Manual Installation
111-------------------
112
113  Once the driver has been compiled, it must be loaded, enabled, and bound
114  to a protocol stack in order to establish network connectivity. To load a
115  module enter the command::
116
117    insmod dl2k.o
118
119  or::
120
121    insmod dl2k.o <optional parameter>	; add parameter
122
123---------------------------------------------------------
124
125  example::
126
127    insmod dl2k.o media=100mbps_hd
128
129   or::
130
131    insmod dl2k.o media=3
132
133   or::
134
135    insmod dl2k.o media=3,2	; for 2 cards
136
137---------------------------------------------------------
138
139  Please reference the list of the command line parameters supported by
140  the Linux device driver below.
141
142  The insmod command only loads the driver and gives it a name of the form
143  eth0, eth1, etc. To bring the NIC into an operational state,
144  it is necessary to issue the following command::
145
146    ifconfig eth0 up
147
148  Finally, to bind the driver to the active protocol (e.g., TCP/IP with
149  Linux), enter the following command::
150
151    ifup eth0
152
153  Note that this is meaningful only if the system can find a configuration
154  script that contains the necessary network information. A sample will be
155  given in the next paragraph.
156
157  The commands to unload a driver are as follows::
158
159    ifdown eth0
160    ifconfig eth0 down
161    rmmod dl2k.o
162
163  The following are the commands to list the currently loaded modules and
164  to see the current network configuration::
165
166    lsmod
167    ifconfig
168
169
170Automated Installation
171----------------------
172  This section describes how to install the driver such that it is
173  automatically loaded and configured at boot time. The following description
174  is based on a Red Hat 6.0/7.0 distribution, but it can easily be ported to
175  other distributions as well.
176
177Red Hat v6.x/v7.x
178-----------------
179  1. Copy dl2k.o to the network modules directory, typically
180     /lib/modules/2.x.x-xx/net or /lib/modules/2.x.x/kernel/drivers/net.
181  2. Locate the boot module configuration file, most commonly in the
182     /etc/modprobe.d/ directory. Add the following lines::
183
184	alias ethx dl2k
185	options dl2k <optional parameters>
186
187     where ethx will be eth0 if the NIC is the only ethernet adapter, eth1 if
188     one other ethernet adapter is installed, etc. Refer to the table in the
189     previous section for the list of optional parameters.
190  3. Locate the network configuration scripts, normally the
191     /etc/sysconfig/network-scripts directory, and create a configuration
192     script named ifcfg-ethx that contains network information.
193  4. Note that for most Linux distributions, Red Hat included, a configuration
194     utility with a graphical user interface is provided to perform steps 2
195     and 3 above.
196
197
198Parameter Description
199=====================
200You can install this driver without any additional parameter. However, if you
201are going to have extensive functions then it is necessary to set extra
202parameter. Below is a list of the command line parameters supported by the
203Linux device
204driver.
205
206
207===============================   ==============================================
208mtu=packet_size			  Specifies the maximum packet size. default
209				  is 1500.
210
211media=media_type		  Specifies the media type the NIC operates at.
212				  autosense	Autosensing active media.
213
214				  ===========	=========================
215				  10mbps_hd	10Mbps half duplex.
216				  10mbps_fd	10Mbps full duplex.
217				  100mbps_hd	100Mbps half duplex.
218				  100mbps_fd	100Mbps full duplex.
219				  1000mbps_fd	1000Mbps full duplex.
220				  1000mbps_hd	1000Mbps half duplex.
221				  0		Autosensing active media.
222				  1		10Mbps half duplex.
223				  2		10Mbps full duplex.
224				  3		100Mbps half duplex.
225				  4		100Mbps full duplex.
226				  5          	1000Mbps half duplex.
227				  6          	1000Mbps full duplex.
228				  ===========	=========================
229
230				  By default, the NIC operates at autosense.
231				  1000mbps_fd and 1000mbps_hd types are only
232				  available for fiber adapter.
233
234vlan=n				  Specifies the VLAN ID. If vlan=0, the
235				  Virtual Local Area Network (VLAN) function is
236				  disable.
237
238jumbo=[0|1]			  Specifies the jumbo frame support. If jumbo=1,
239				  the NIC accept jumbo frames. By default, this
240				  function is disabled.
241				  Jumbo frame usually improve the performance
242				  int gigabit.
243				  This feature need jumbo frame compatible
244				  remote.
245
246rx_coalesce=m			  Number of rx frame handled each interrupt.
247rx_timeout=n			  Rx DMA wait time for an interrupt.
248				  If set rx_coalesce > 0, hardware only assert
249				  an interrupt for m frames. Hardware won't
250				  assert rx interrupt until m frames received or
251				  reach timeout of n * 640 nano seconds.
252				  Set proper rx_coalesce and rx_timeout can
253				  reduce congestion collapse and overload which
254				  has been a bottleneck for high speed network.
255
256				  For example, rx_coalesce=10 rx_timeout=800.
257				  that is, hardware assert only 1 interrupt
258				  for 10 frames received or timeout of 512 us.
259
260tx_coalesce=n			  Number of tx frame handled each interrupt.
261				  Set n > 1 can reduce the interrupts
262				  congestion usually lower performance of
263				  high speed network card. Default is 16.
264
265tx_flow=[1|0]			  Specifies the Tx flow control. If tx_flow=0,
266				  the Tx flow control disable else driver
267				  autodetect.
268rx_flow=[1|0]			  Specifies the Rx flow control. If rx_flow=0,
269				  the Rx flow control enable else driver
270				  autodetect.
271===============================   ==============================================
272
273
274Configuration Script Sample
275===========================
276Here is a sample of a simple configuration script::
277
278    DEVICE=eth0
279    USERCTL=no
280    ONBOOT=yes
281    POOTPROTO=none
282    BROADCAST=207.200.5.255
283    NETWORK=207.200.5.0
284    NETMASK=255.255.255.0
285    IPADDR=207.200.5.2
286
287
288Troubleshooting
289===============
290Q1. Source files contain ^ M behind every line.
291
292    Make sure all files are Unix file format (no LF). Try the following
293    shell command to convert files::
294
295	cat dl2k.c | col -b > dl2k.tmp
296	mv dl2k.tmp dl2k.c
297
298    OR::
299
300	cat dl2k.c | tr -d "\r" > dl2k.tmp
301	mv dl2k.tmp dl2k.c
302
303Q2: Could not find header files (``*.h``)?
304
305    To compile the driver, you need kernel header files. After
306    installing the kernel source, the header files are usually located in
307    /usr/src/linux/include, which is the default include directory configured
308    in Makefile. For some distributions, there is a copy of header files in
309    /usr/src/include/linux and /usr/src/include/asm, that you can change the
310    INCLUDEDIR in Makefile to /usr/include without installing kernel source.
311
312    Note that RH 7.0 didn't provide correct header files in /usr/include,
313    including those files will make a wrong version driver.
314
315