Loading...
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 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 | .. SPDX-License-Identifier: GPL-2.0 ========================= 3Com Vortex device driver ========================= Andrew Morton 30 April 2000 This document describes the usage and errata of the 3Com "Vortex" device driver for Linux, 3c59x.c. The driver was written by Donald Becker <becker@scyld.com> Don is no longer the prime maintainer of this version of the driver. Please report problems to one or more of: - Andrew Morton - Netdev mailing list <netdev@vger.kernel.org> - Linux kernel mailing list <linux-kernel@vger.kernel.org> Please note the 'Reporting and Diagnosing Problems' section at the end of this file. Since kernel 2.3.99-pre6, this driver incorporates the support for the 3c575-series Cardbus cards which used to be handled by 3c575_cb.c. This driver supports the following hardware: - 3c590 Vortex 10Mbps - 3c592 EISA 10Mbps Demon/Vortex - 3c597 EISA Fast Demon/Vortex - 3c595 Vortex 100baseTx - 3c595 Vortex 100baseT4 - 3c595 Vortex 100base-MII - 3c900 Boomerang 10baseT - 3c900 Boomerang 10Mbps Combo - 3c900 Cyclone 10Mbps TPO - 3c900 Cyclone 10Mbps Combo - 3c900 Cyclone 10Mbps TPC - 3c900B-FL Cyclone 10base-FL - 3c905 Boomerang 100baseTx - 3c905 Boomerang 100baseT4 - 3c905B Cyclone 100baseTx - 3c905B Cyclone 10/100/BNC - 3c905B-FX Cyclone 100baseFx - 3c905C Tornado - 3c920B-EMB-WNM (ATI Radeon 9100 IGP) - 3c980 Cyclone - 3c980C Python-T - 3cSOHO100-TX Hurricane - 3c555 Laptop Hurricane - 3c556 Laptop Tornado - 3c556B Laptop Hurricane - 3c575 [Megahertz] 10/100 LAN CardBus - 3c575 Boomerang CardBus - 3CCFE575BT Cyclone CardBus - 3CCFE575CT Tornado CardBus - 3CCFE656 Cyclone CardBus - 3CCFEM656B Cyclone+Winmodem CardBus - 3CXFEM656C Tornado+Winmodem CardBus - 3c450 HomePNA Tornado - 3c920 Tornado - 3c982 Hydra Dual Port A - 3c982 Hydra Dual Port B - 3c905B-T4 - 3c920B-EMB-WNM Tornado Module parameters ================= There are several parameters which may be provided to the driver when its module is loaded. These are usually placed in ``/etc/modprobe.d/*.conf`` configuration files. Example:: options 3c59x debug=3 rx_copybreak=300 If you are using the PCMCIA tools (cardmgr) then the options may be placed in /etc/pcmcia/config.opts:: module "3c59x" opts "debug=3 rx_copybreak=300" The supported parameters are: debug=N Where N is a number from 0 to 7. Anything above 3 produces a lot of output in your system logs. debug=1 is default. options=N1,N2,N3,... Each number in the list provides an option to the corresponding network card. So if you have two 3c905's and you wish to provide them with option 0x204 you would use:: options=0x204,0x204 The individual options are composed of a number of bitfields which have the following meanings: Possible media type settings == ================================= 0 10baseT 1 10Mbs AUI 2 undefined 3 10base2 (BNC) 4 100base-TX 5 100base-FX 6 MII (Media Independent Interface) 7 Use default setting from EEPROM 8 Autonegotiate 9 External MII 10 Use default setting from EEPROM == ================================= When generating a value for the 'options' setting, the above media selection values may be OR'ed (or added to) the following: ====== ============================================= 0x8000 Set driver debugging level to 7 0x4000 Set driver debugging level to 2 0x0400 Enable Wake-on-LAN 0x0200 Force full duplex mode. 0x0010 Bus-master enable bit (Old Vortex cards only) ====== ============================================= For example:: insmod 3c59x options=0x204 will force full-duplex 100base-TX, rather than allowing the usual autonegotiation. global_options=N Sets the ``options`` parameter for all 3c59x NICs in the machine. Entries in the ``options`` array above will override any setting of this. full_duplex=N1,N2,N3... Similar to bit 9 of 'options'. Forces the corresponding card into full-duplex mode. Please use this in preference to the ``options`` parameter. In fact, please don't use this at all! You're better off getting autonegotiation working properly. global_full_duplex=N1 Sets full duplex mode for all 3c59x NICs in the machine. Entries in the ``full_duplex`` array above will override any setting of this. flow_ctrl=N1,N2,N3... Use 802.3x MAC-layer flow control. The 3com cards only support the PAUSE command, which means that they will stop sending packets for a short period if they receive a PAUSE frame from the link partner. The driver only allows flow control on a link which is operating in full duplex mode. This feature does not appear to work on the 3c905 - only 3c905B and 3c905C have been tested. The 3com cards appear to only respond to PAUSE frames which are sent to the reserved destination address of 01:80:c2:00:00:01. They do not honour PAUSE frames which are sent to the station MAC address. rx_copybreak=M The driver preallocates 32 full-sized (1536 byte) network buffers for receiving. When a packet arrives, the driver has to decide whether to leave the packet in its full-sized buffer, or to allocate a smaller buffer and copy the packet across into it. This is a speed/space tradeoff. The value of rx_copybreak is used to decide when to make the copy. If the packet size is less than rx_copybreak, the packet is copied. The default value for rx_copybreak is 200 bytes. max_interrupt_work=N The driver's interrupt service routine can handle many receive and transmit packets in a single invocation. It does this in a loop. The value of max_interrupt_work governs how many times the interrupt service routine will loop. The default value is 32 loops. If this is exceeded the interrupt service routine gives up and generates a warning message "eth0: Too much work in interrupt". hw_checksums=N1,N2,N3,... Recent 3com NICs are able to generate IPv4, TCP and UDP checksums in hardware. Linux has used the Rx checksumming for a long time. The "zero copy" patch which is planned for the 2.4 kernel series allows you to make use of the NIC's DMA scatter/gather and transmit checksumming as well. The driver is set up so that, when the zerocopy patch is applied, all Tornado and Cyclone devices will use S/G and Tx checksums. This module parameter has been provided so you can override this decision. If you think that Tx checksums are causing a problem, you may disable the feature with ``hw_checksums=0``. If you think your NIC should be performing Tx checksumming and the driver isn't enabling it, you can force the use of hardware Tx checksumming with ``hw_checksums=1``. The driver drops a message in the logfiles to indicate whether or not it is using hardware scatter/gather and hardware Tx checksums. Scatter/gather and hardware checksums provide considerable performance improvement for the sendfile() system call, but a small decrease in throughput for send(). There is no effect upon receive efficiency. compaq_ioaddr=N, compaq_irq=N, compaq_device_id=N "Variables to work-around the Compaq PCI BIOS32 problem".... watchdog=N Sets the time duration (in milliseconds) after which the kernel decides that the transmitter has become stuck and needs to be reset. This is mainly for debugging purposes, although it may be advantageous to increase this value on LANs which have very high collision rates. The default value is 5000 (5.0 seconds). enable_wol=N1,N2,N3,... Enable Wake-on-LAN support for the relevant interface. Donald Becker's ``ether-wake`` application may be used to wake suspended machines. Also enables the NIC's power management support. global_enable_wol=N Sets enable_wol mode for all 3c59x NICs in the machine. Entries in the ``enable_wol`` array above will override any setting of this. Media selection --------------- A number of the older NICs such as the 3c590 and 3c900 series have 10base2 and AUI interfaces. Prior to January, 2001 this driver would autoselect the 10base2 or AUI port if it didn't detect activity on the 10baseT port. It would then get stuck on the 10base2 port and a driver reload was necessary to switch back to 10baseT. This behaviour could not be prevented with a module option override. Later (current) versions of the driver _do_ support locking of the media type. So if you load the driver module with modprobe 3c59x options=0 it will permanently select the 10baseT port. Automatic selection of other media types does not occur. Transmit error, Tx status register 82 ------------------------------------- This is a common error which is almost always caused by another host on the same network being in full-duplex mode, while this host is in half-duplex mode. You need to find that other host and make it run in half-duplex mode or fix this host to run in full-duplex mode. As a last resort, you can force the 3c59x driver into full-duplex mode with options 3c59x full_duplex=1 but this has to be viewed as a workaround for broken network gear and should only really be used for equipment which cannot autonegotiate. Additional resources -------------------- Details of the device driver implementation are at the top of the source file. Additional documentation is available at Don Becker's Linux Drivers site: http://www.scyld.com/vortex.html Donald Becker's driver development site: http://www.scyld.com/network.html Donald's vortex-diag program is useful for inspecting the NIC's state: http://www.scyld.com/ethercard_diag.html Donald's mii-diag program may be used for inspecting and manipulating the NIC's Media Independent Interface subsystem: http://www.scyld.com/ethercard_diag.html#mii-diag Donald's wake-on-LAN page: http://www.scyld.com/wakeonlan.html 3Com's DOS-based application for setting up the NICs EEPROMs: ftp://ftp.3com.com/pub/nic/3c90x/3c90xx2.exe Autonegotiation notes --------------------- The driver uses a one-minute heartbeat for adapting to changes in the external LAN environment if link is up and 5 seconds if link is down. This means that when, for example, a machine is unplugged from a hubbed 10baseT LAN plugged into a switched 100baseT LAN, the throughput will be quite dreadful for up to sixty seconds. Be patient. Cisco interoperability note from Walter Wong <wcw+@CMU.EDU>: On a side note, adding HAS_NWAY seems to share a problem with the Cisco 6509 switch. Specifically, you need to change the spanning tree parameter for the port the machine is plugged into to 'portfast' mode. Otherwise, the negotiation fails. This has been an issue we've noticed for a while but haven't had the time to track down. Cisco switches (Jeff Busch <jbusch@deja.com>) My "standard config" for ports to which PC's/servers connect directly:: interface FastEthernet0/N description machinename load-interval 30 spanning-tree portfast If autonegotiation is a problem, you may need to specify "speed 100" and "duplex full" as well (or "speed 10" and "duplex half"). WARNING: DO NOT hook up hubs/switches/bridges to these specially-configured ports! The switch will become very confused. Reporting and diagnosing problems --------------------------------- Maintainers find that accurate and complete problem reports are invaluable in resolving driver problems. We are frequently not able to reproduce problems and must rely on your patience and efforts to get to the bottom of the problem. If you believe you have a driver problem here are some of the steps you should take: - Is it really a driver problem? Eliminate some variables: try different cards, different computers, different cables, different ports on the switch/hub, different versions of the kernel or of the driver, etc. - OK, it's a driver problem. You need to generate a report. Typically this is an email to the maintainer and/or netdev@vger.kernel.org. The maintainer's email address will be in the driver source or in the MAINTAINERS file. - The contents of your report will vary a lot depending upon the problem. If it's a kernel crash then you should refer to 'Documentation/admin-guide/reporting-issues.rst'. But for most problems it is useful to provide the following: - Kernel version, driver version - A copy of the banner message which the driver generates when it is initialised. For example: eth0: 3Com PCI 3c905C Tornado at 0xa400, 00:50:da:6a:88:f0, IRQ 19 8K byte-wide RAM 5:3 Rx:Tx split, autoselect/Autonegotiate interface. MII transceiver found at address 24, status 782d. Enabling bus-master transmits and whole-frame receives. NOTE: You must provide the ``debug=2`` modprobe option to generate a full detection message. Please do this:: modprobe 3c59x debug=2 - If it is a PCI device, the relevant output from 'lspci -vx', eg:: 00:09.0 Ethernet controller: 3Com Corporation 3c905C-TX [Fast Etherlink] (rev 74) Subsystem: 3Com Corporation: Unknown device 9200 Flags: bus master, medium devsel, latency 32, IRQ 19 I/O ports at a400 [size=128] Memory at db000000 (32-bit, non-prefetchable) [size=128] Expansion ROM at <unassigned> [disabled] [size=128K] Capabilities: [dc] Power Management version 2 00: b7 10 00 92 07 00 10 02 74 00 00 02 08 20 00 00 10: 01 a4 00 00 00 00 00 db 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 b7 10 00 10 30: 00 00 00 00 dc 00 00 00 00 00 00 00 05 01 0a 0a - A description of the environment: 10baseT? 100baseT? full/half duplex? switched or hubbed? - Any additional module parameters which you may be providing to the driver. - Any kernel logs which are produced. The more the merrier. If this is a large file and you are sending your report to a mailing list, mention that you have the logfile, but don't send it. If you're reporting direct to the maintainer then just send it. To ensure that all kernel logs are available, add the following line to /etc/syslog.conf:: kern.* /var/log/messages Then restart syslogd with:: /etc/rc.d/init.d/syslog restart (The above may vary, depending upon which Linux distribution you use). - If your problem is reproducible then that's great. Try the following: 1) Increase the debug level. Usually this is done via: a) modprobe driver debug=7 b) In /etc/modprobe.d/driver.conf: options driver debug=7 2) Recreate the problem with the higher debug level, send all logs to the maintainer. 3) Download you card's diagnostic tool from Donald Becker's website <http://www.scyld.com/ethercard_diag.html>. Download mii-diag.c as well. Build these. a) Run 'vortex-diag -aaee' and 'mii-diag -v' when the card is working correctly. Save the output. b) Run the above commands when the card is malfunctioning. Send both sets of output. Finally, please be patient and be prepared to do some work. You may end up working on this problem for a week or more as the maintainer asks more questions, asks for more tests, asks for patches to be applied, etc. At the end of it all, the problem may even remain unresolved. |