1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
|
"8139too" Fast Ethernet driver for Linux
RTL-8139, -8129, and -8130 10/100 Fast Ethernet adapters
Copyright 2000,2001 Jeff Garzik <jgarzik@mandrakesoft.com>
http://sourceforge.net/projects/gkernel/
Architectures supported (all PCI platforms):
x86, Alpha AXP, PowerPC, Sparc64
Kernel versions supported: 2.4.x
Disclaimer
----------
THIS DRIVER IS A DEVELOPMENT RELEASE FOR A DEVELOPMENT KERNEL. DO NOT
USE IN A PRODUCTION ENVIRONMENT.
DO NOT CONTACT DONALD BECKER FOR SUPPORT OF THIS DRIVER, his driver is
completely different and maintained independently of the 8139too code base.
Requirements
------------
Kernel 2.4.3 or later.
A Fast Ethernet adapter containing an RTL8139-based chip.
Introduction
------------
The "8139too" Fast Ethernet driver for Linux 2.4.0 is a substantial
modification of the experimental rtl8139 driver from Donald Becker,
some versions of which appeared in 2.2.x and 2.3.x kernels. The
RTL-8139 is a very low-cost Fast Ethernet chip, which makes it very
popular.
The step from 2.2.x to 2.4.x kernels brings many new features to Linux
device drivers. Features for MMIO resources, a standard hot-plug API,
and other interfaces are now becoming requirements, as drivers move
off the x86 platform. With that in mind, I have begun updating the
RTL-8139 driver to current 2.3.x (2.4) kernel standards and APIs, and
fixing the problems that users have been encountering.
Features of 8139too
-------------------
[note - this list intended for people familiar with kernel drivers]
** 100% MMIO, for full speed operation. All users (so far) have
reported performance increases over their existing RTL drivers.
** Multi-platform support: x86, Alpha, PPC, ...
** Use proper SMP spinlocking, fixing SMP interrupt bugs, making the
driver portable to non-x86 SMP platforms in the process.
** Use new PCI driver API for seamless, low-maintenance hot-plug support
** Several bugs fixes from original rtl8139 1.08r (October 5, 1999),
including the very common "transmit timeout" problem.
* Use new resource allocation API, required for hot-plug support
* Use new register read/write macros
* initcall support (module_init/exit)
* vastly improved debug tracing support
* code formatting in many places for readability
* use new init_etherdev() facilities
...and probably some other less important changes which I forgot.
Installation
------------
OPTION 1: Build inside kernel tree (into kernel image, or as module)
(overwrite 8139too driver in kernel tree with different version)
1) cp 8139too.c $my_source_tree/drivers/net/8139too.c
OPTION 2: Build outside kernel tree
Use the included Makefile.
Tested Adapters
---------------
AOpen ALN-325C
KTI KF-230TX
KTI KF-230TX/2
Lantech FastNet TX
SMC EZNET 10/100
(please add your adapter model to this list)
Status of Platform Support
--------------------------
(see errata below for details)
x86: tested, stable
Alpha AXP: tested, stable
PowerPC: tested, unstable
Sparc64: not tested
Special Thanks
--------------
The following people contributed invaluable testing time, feedback
and/or patches during the development of this driver. Thanks to all
of them.
Donald Becker, Alan Cox, Richard Stallman, Linus Torvalds - inspiration
Alan Cox, Gerard Roudier - insight on posted MMIO writes
Martin Mares - code review
Tigran Aivazian - testing, code review, and a bug fix
Chmouel Boudjnah, Alexander Dietrich, Oleg Drokin,
James Fidell, Taso Hatzi, Peter K - intrepid test team
And thanks to every supporter free software.
(see top of 8139too.c for further credits and kudos)
Submitting Bug Reports
----------------------
Obtain and compile the modified rtl8139-diag source code from the
8139too driver Web site, http://sourceforge.net/projects/gkernel/
This diagnostics programs, originally from Donald Becker, has been
modified to display all registers on your RTL8139 chip, not just the
first 0x80.
If possible, send the output of a working and broken driver with
rtl8139-diag -mmaaavvveefN > my-output-file.txt
Send "lspci -vvv" or "cat /proc/pci" output for PCI information.
Known Bugs / Errata / To-Do
---------------------------
The following issues are known, and are actively being pursued. Patches
to resolve these issues is welcome. If a problem occurs which is not in
the list, please report it. That's why we do beta releases, after all...
1) Work with Donald to merge fixes and updates into his driver.
2) ethtool support
3) PPC platform has stability problems. (XXX: verify this is still true)
4) Sparc64 platform not tested at all.
8) Much improved command line / module parameter setup. (patches and
suggestions welcome) (WIP)
9) Better documentation. (patches welcome)
11) RTL8139C support untested.
12) 10base-T support flaky or slow (todo: verify this is still true)
Change History
--------------
Version 0.9.15 - February 20, 2001
* Call pci_enable_device to wake up/assign resource to device,
before actually using it.
* Support wacky clone PCI ids (report from Norival Toniato Junior)
* Text spelling corrections
* Make sure tp->phys[] is signed
* Always wake queue after hw restart, in tx_timeout
* Record time of last received packet
Version 0.9.14 - January 11, 2001
* Merge some changes from Becker version 1.13:
* Add DFE 538TX PCI id
* MII read/write functions updated
* Cfg93[45]6 lock/unlock fix
* RTL-8129 (MII) support
* Clean up spinlocking
Version 0.9.13 - December, 2000
* Clear blocked signals, avoid buffer overrun setting current->comm
* Remove bogus PCI BAR length assertions
* Remove unused 'debug' module parameter
Version 0.9.12 - November 23, 2000
* Kill major Tx stop/wake queue race
* Use SET_MODULE_OWNER and fix module unload race
* Fix cable length ("Twister") tuning
* Proper media[] array length checking
* Replace timer with kernel thread for twister tuning state machine
and media checking. Fixes mdio_xxx locking, now mdio_xxx is always
protected by rtnl_lock semaphore.
* Correct some sledgehammer a.k.a. overzealous spin-locks
* Performance: Eliminate atomic_t for Tx counters, we don't need it
* Performance: Don't copy Tx buffer if the rare case occurs where it
is aligned perfectly for us.
* Eliminate needless casting of dev->priv
* PIO mode selection and Twister tuning are now CONFIG_xxx options
(though purposefully not in net/Config.in... yet)
Version 0.9.11 - October 28, 2000
* Do not fail when PIO and MMIO region lengths do not match.
(They don't on some CardBus models, at least)
* Sanity check Rx packet status and size (Tobias)
* When handling a Tx timeout, disable Tx ASAP if not already.
* Do not inline Tx interrupt handler (better register usage)
* Handle dirty_tx signed integer wrap
* Do not abort Rx processing on lack of memory, keep going
until the current Rx ring is completely handling. (Tobias)
* Clean up rtl8139_close
* Whitespace correction for dev_kfree_skb_irq call
Version 0.9.10 - September 12, 2000
* Never wrap an Rx packet (faster Rx interrupt handling)
* Clear all TxAborted conditions (bug fix)
* Correct copyright
* More credits
* Update NWay doc URL
* Clean up commonly used ifdef switches
* Reorg info displayed at bootup/modprobe time
* Remove some unneeded spinlocks
* Misc cosmetic code cleanup
* Always print interrupt status for abnormal interrupts
* Use RealTek-recommended FIFO and DMA burst settings (1024 bytes)
Version 0.9.9 - September 9, 2000
* Fix oops-able bug in Rx ring wrap calculation (David Ford)
* Use PIO instead of MMIO when USE_IO_OPS is defined
* Move Rx error handling out of Rx interrupt handler, resulting in
tighter Rx interrupt processing
Version 0.9.8 - September 7, 2000
* Propagate request_irq error value (andrew morton)
* Correct potential oops bug in PCI DMA unmap code
* Fix bugs related to counting/discounting of 32-bit CRC in each Rx packet
* Fix 16/32-bit bug in interrupt status check
* Timer cleanups (andrew morton)
Version 0.9.7 - June 11, 2000
* Fix support for older chips (RTL8139 early chips should now work again)
Version 0.9.6 - May 30, 2000
* Fix 4-extra-bytes bug
(thanks to Markus Westergren, via Santiago Garcia Mantinan)
* Yet more improved chip recognition
Version 0.9.5 - May 17, 2000
* Improved chip version recognition
* Continue banging away at receiver hang problem
* Use spin_lock_irq in another spot
* Don't print anything on pci_enable_device, it does so for us
* Disable buggy NWay code
* Define TxConfig bitmasks
Version 0.9.4.1 - April 27, 2000 - third public beta release
* Replace several "magic numbers" with symbolic constants
* Differentiate between board-specific info and chip-specific info
(allows for easier support of specific boards or chips)
* Move some of the transmit side outside of the spinlock
by using atomic variables. Use spin_lock_irq instead of
spin_lock_irq{save,restore} in select places, for better performance.
* New module option "media" for forcing media selection. Functions the
same as "options" in other drivers, and will soon be renamed
'options' to be homogeneous.
* New power management wake-up code
* Slightly more verbose chip id messages in kernel log
* Add/correct chip register constant list
* New chipset wake up (open) logic
* No longer locks CONFIGx updates
* Do not set Interfame Gap (IFG) bits in TxConfig
* Better Rx reset logic in case of Rx FIFO Overflow
* For chips which support it, enable bit to automatically clear Rx
FIFO overflow
* No longer enable and disable interrupts in interrupt handler
(technique borrowed from BSD driver, appears to have problems
with some chips)
* H/W spinlock now protects ioctl
* Chipset-dependent RxConfig settings
Version 0.9.3.3.2 - Feb 22, 2000 - second public beta release
* Begin integration of Daniel Kobras' MMIO flush patch (disabled for now)
* Softnet logic updates to fix bugs and improve performance
* Dynamic sizing of I/O resources (0x80 for older chips, 0xFF for newer ones)
* Remove bogus SiS entries from PCI probe table
* Add support for cards
"Delta Electronics 8139 10/100BaseTX"
"Addtron Technolgy 8139 10/100BaseTX"
* Fix major bug with rx ring buffer size (also present in rtl8139.c 1.08r)
* PCI DMA mapping by Dave Miller
* Complete rewrite of SMP locking logic
* Hotplug support
* Call rtl8139_hw_start from rtl8139_open, and remove duplicated code
from rtl8139_open
* Reset NWay registers to sane defaults on rtl8139_open/hw_start
* Miscellaneous code cleanup
Version 0.7.0 - Feb 7, 2000 - first public beta release
* Initial public version, derived from Donald Becker's rtl8139.c v1.08r
[EOF]
|