Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | Documentation/networking/vortex.txt |
| 2 | Andrew Morton <andrewm@uow.edu.au> |
| 3 | 30 April 2000 |
| 4 | |
| 5 | |
| 6 | This document describes the usage and errata of the 3Com "Vortex" device |
| 7 | driver for Linux, 3c59x.c. |
| 8 | |
| 9 | The driver was written by Donald Becker <becker@scyld.com> |
| 10 | |
| 11 | Don is no longer the prime maintainer of this version of the driver. |
| 12 | Please report problems to one or more of: |
| 13 | |
Randy Dunlap | 98766fb | 2005-11-21 21:32:31 -0800 | [diff] [blame] | 14 | Andrew Morton <akpm@osdl.org> |
Ralf Baechle | 979b6c1 | 2005-06-13 14:30:40 -0700 | [diff] [blame] | 15 | Netdev mailing list <netdev@vger.kernel.org> |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 16 | Linux kernel mailing list <linux-kernel@vger.kernel.org> |
| 17 | |
| 18 | Please note the 'Reporting and Diagnosing Problems' section at the end |
| 19 | of this file. |
| 20 | |
| 21 | |
| 22 | Since kernel 2.3.99-pre6, this driver incorporates the support for the |
| 23 | 3c575-series Cardbus cards which used to be handled by 3c575_cb.c. |
| 24 | |
| 25 | This driver supports the following hardware: |
| 26 | |
| 27 | 3c590 Vortex 10Mbps |
| 28 | 3c592 EISA 10mbps Demon/Vortex |
| 29 | 3c597 EISA Fast Demon/Vortex |
| 30 | 3c595 Vortex 100baseTx |
| 31 | 3c595 Vortex 100baseT4 |
| 32 | 3c595 Vortex 100base-MII |
| 33 | 3Com Vortex |
| 34 | 3c900 Boomerang 10baseT |
| 35 | 3c900 Boomerang 10Mbps Combo |
| 36 | 3c900 Cyclone 10Mbps TPO |
| 37 | 3c900B Cyclone 10Mbps T |
| 38 | 3c900 Cyclone 10Mbps Combo |
| 39 | 3c900 Cyclone 10Mbps TPC |
| 40 | 3c900B-FL Cyclone 10base-FL |
| 41 | 3c905 Boomerang 100baseTx |
| 42 | 3c905 Boomerang 100baseT4 |
| 43 | 3c905B Cyclone 100baseTx |
| 44 | 3c905B Cyclone 10/100/BNC |
| 45 | 3c905B-FX Cyclone 100baseFx |
| 46 | 3c905C Tornado |
| 47 | 3c980 Cyclone |
| 48 | 3cSOHO100-TX Hurricane |
| 49 | 3c555 Laptop Hurricane |
| 50 | 3c575 Boomerang CardBus |
| 51 | 3CCFE575 Cyclone CardBus |
| 52 | 3CCFE575CT Cyclone CardBus |
| 53 | 3CCFE656 Cyclone CardBus |
| 54 | 3CCFEM656 Cyclone CardBus |
| 55 | 3c450 Cyclone/unknown |
| 56 | |
| 57 | |
| 58 | Module parameters |
| 59 | ================= |
| 60 | |
| 61 | There are several parameters which may be provided to the driver when |
| 62 | its module is loaded. These are usually placed in /etc/modprobe.conf |
| 63 | (/etc/modules.conf in 2.4). Example: |
| 64 | |
| 65 | options 3c59x debug=3 rx_copybreak=300 |
| 66 | |
| 67 | If you are using the PCMCIA tools (cardmgr) then the options may be |
| 68 | placed in /etc/pcmcia/config.opts: |
| 69 | |
| 70 | module "3c59x" opts "debug=3 rx_copybreak=300" |
| 71 | |
| 72 | |
| 73 | The supported parameters are: |
| 74 | |
| 75 | debug=N |
| 76 | |
| 77 | Where N is a number from 0 to 7. Anything above 3 produces a lot |
| 78 | of output in your system logs. debug=1 is default. |
| 79 | |
| 80 | options=N1,N2,N3,... |
| 81 | |
| 82 | Each number in the list provides an option to the corresponding |
| 83 | network card. So if you have two 3c905's and you wish to provide |
| 84 | them with option 0x204 you would use: |
| 85 | |
| 86 | options=0x204,0x204 |
| 87 | |
| 88 | The individual options are composed of a number of bitfields which |
| 89 | have the following meanings: |
| 90 | |
| 91 | Possible media type settings |
| 92 | 0 10baseT |
| 93 | 1 10Mbs AUI |
| 94 | 2 undefined |
| 95 | 3 10base2 (BNC) |
| 96 | 4 100base-TX |
| 97 | 5 100base-FX |
| 98 | 6 MII (Media Independent Interface) |
| 99 | 7 Use default setting from EEPROM |
| 100 | 8 Autonegotiate |
| 101 | 9 External MII |
| 102 | 10 Use default setting from EEPROM |
| 103 | |
| 104 | When generating a value for the 'options' setting, the above media |
| 105 | selection values may be OR'ed (or added to) the following: |
| 106 | |
| 107 | 0x8000 Set driver debugging level to 7 |
| 108 | 0x4000 Set driver debugging level to 2 |
| 109 | 0x0400 Enable Wake-on-LAN |
| 110 | 0x0200 Force full duplex mode. |
| 111 | 0x0010 Bus-master enable bit (Old Vortex cards only) |
| 112 | |
| 113 | For example: |
| 114 | |
| 115 | insmod 3c59x options=0x204 |
| 116 | |
| 117 | will force full-duplex 100base-TX, rather than allowing the usual |
| 118 | autonegotiation. |
| 119 | |
| 120 | global_options=N |
| 121 | |
| 122 | Sets the `options' parameter for all 3c59x NICs in the machine. |
| 123 | Entries in the `options' array above will override any setting of |
| 124 | this. |
| 125 | |
| 126 | full_duplex=N1,N2,N3... |
| 127 | |
| 128 | Similar to bit 9 of 'options'. Forces the corresponding card into |
| 129 | full-duplex mode. Please use this in preference to the `options' |
| 130 | parameter. |
| 131 | |
| 132 | In fact, please don't use this at all! You're better off getting |
| 133 | autonegotiation working properly. |
| 134 | |
| 135 | global_full_duplex=N1 |
| 136 | |
| 137 | Sets full duplex mode for all 3c59x NICs in the machine. Entries |
| 138 | in the `full_duplex' array above will override any setting of this. |
| 139 | |
| 140 | flow_ctrl=N1,N2,N3... |
| 141 | |
| 142 | Use 802.3x MAC-layer flow control. The 3com cards only support the |
| 143 | PAUSE command, which means that they will stop sending packets for a |
| 144 | short period if they receive a PAUSE frame from the link partner. |
| 145 | |
| 146 | The driver only allows flow control on a link which is operating in |
| 147 | full duplex mode. |
| 148 | |
| 149 | This feature does not appear to work on the 3c905 - only 3c905B and |
| 150 | 3c905C have been tested. |
| 151 | |
| 152 | The 3com cards appear to only respond to PAUSE frames which are |
| 153 | sent to the reserved destination address of 01:80:c2:00:00:01. They |
| 154 | do not honour PAUSE frames which are sent to the station MAC address. |
| 155 | |
| 156 | rx_copybreak=M |
| 157 | |
| 158 | The driver preallocates 32 full-sized (1536 byte) network buffers |
| 159 | for receiving. When a packet arrives, the driver has to decide |
| 160 | whether to leave the packet in its full-sized buffer, or to allocate |
| 161 | a smaller buffer and copy the packet across into it. |
| 162 | |
| 163 | This is a speed/space tradeoff. |
| 164 | |
| 165 | The value of rx_copybreak is used to decide when to make the copy. |
| 166 | If the packet size is less than rx_copybreak, the packet is copied. |
| 167 | The default value for rx_copybreak is 200 bytes. |
| 168 | |
| 169 | max_interrupt_work=N |
| 170 | |
| 171 | The driver's interrupt service routine can handle many receive and |
| 172 | transmit packets in a single invocation. It does this in a loop. |
| 173 | The value of max_interrupt_work governs how mnay times the interrupt |
| 174 | service routine will loop. The default value is 32 loops. If this |
| 175 | is exceeded the interrupt service routine gives up and generates a |
| 176 | warning message "eth0: Too much work in interrupt". |
| 177 | |
| 178 | hw_checksums=N1,N2,N3,... |
| 179 | |
| 180 | Recent 3com NICs are able to generate IPv4, TCP and UDP checksums |
| 181 | in hardware. Linux has used the Rx checksumming for a long time. |
| 182 | The "zero copy" patch which is planned for the 2.4 kernel series |
| 183 | allows you to make use of the NIC's DMA scatter/gather and transmit |
| 184 | checksumming as well. |
| 185 | |
| 186 | The driver is set up so that, when the zerocopy patch is applied, |
| 187 | all Tornado and Cyclone devices will use S/G and Tx checksums. |
| 188 | |
| 189 | This module parameter has been provided so you can override this |
| 190 | decision. If you think that Tx checksums are causing a problem, you |
| 191 | may disable the feature with `hw_checksums=0'. |
| 192 | |
| 193 | If you think your NIC should be performing Tx checksumming and the |
| 194 | driver isn't enabling it, you can force the use of hardware Tx |
| 195 | checksumming with `hw_checksums=1'. |
| 196 | |
| 197 | The driver drops a message in the logfiles to indicate whether or |
| 198 | not it is using hardware scatter/gather and hardware Tx checksums. |
| 199 | |
| 200 | Scatter/gather and hardware checksums provide considerable |
| 201 | performance improvement for the sendfile() system call, but a small |
| 202 | decrease in throughput for send(). There is no effect upon receive |
| 203 | efficiency. |
| 204 | |
| 205 | compaq_ioaddr=N |
| 206 | compaq_irq=N |
| 207 | compaq_device_id=N |
| 208 | |
| 209 | "Variables to work-around the Compaq PCI BIOS32 problem".... |
| 210 | |
| 211 | watchdog=N |
| 212 | |
| 213 | Sets the time duration (in milliseconds) after which the kernel |
| 214 | decides that the transmitter has become stuck and needs to be reset. |
| 215 | This is mainly for debugging purposes, although it may be advantageous |
| 216 | to increase this value on LANs which have very high collision rates. |
| 217 | The default value is 5000 (5.0 seconds). |
| 218 | |
| 219 | enable_wol=N1,N2,N3,... |
| 220 | |
| 221 | Enable Wake-on-LAN support for the relevant interface. Donald |
| 222 | Becker's `ether-wake' application may be used to wake suspended |
| 223 | machines. |
| 224 | |
| 225 | Also enables the NIC's power management support. |
| 226 | |
| 227 | global_enable_wol=N |
| 228 | |
| 229 | Sets enable_wol mode for all 3c59x NICs in the machine. Entries in |
| 230 | the `enable_wol' array above will override any setting of this. |
| 231 | |
| 232 | Media selection |
| 233 | --------------- |
| 234 | |
| 235 | A number of the older NICs such as the 3c590 and 3c900 series have |
| 236 | 10base2 and AUI interfaces. |
| 237 | |
| 238 | Prior to January, 2001 this driver would autoeselect the 10base2 or AUI |
| 239 | port if it didn't detect activity on the 10baseT port. It would then |
| 240 | get stuck on the 10base2 port and a driver reload was necessary to |
| 241 | switch back to 10baseT. This behaviour could not be prevented with a |
| 242 | module option override. |
| 243 | |
| 244 | Later (current) versions of the driver _do_ support locking of the |
| 245 | media type. So if you load the driver module with |
| 246 | |
| 247 | modprobe 3c59x options=0 |
| 248 | |
| 249 | it will permanently select the 10baseT port. Automatic selection of |
| 250 | other media types does not occur. |
| 251 | |
| 252 | |
| 253 | Transmit error, Tx status register 82 |
| 254 | ------------------------------------- |
| 255 | |
| 256 | This is a common error which is almost always caused by another host on |
| 257 | the same network being in full-duplex mode, while this host is in |
| 258 | half-duplex mode. You need to find that other host and make it run in |
| 259 | half-duplex mode or fix this host to run in full-duplex mode. |
| 260 | |
| 261 | As a last resort, you can force the 3c59x driver into full-duplex mode |
| 262 | with |
| 263 | |
| 264 | options 3c59x full_duplex=1 |
| 265 | |
| 266 | but this has to be viewed as a workaround for broken network gear and |
| 267 | should only really be used for equipment which cannot autonegotiate. |
| 268 | |
| 269 | |
| 270 | Additional resources |
| 271 | -------------------- |
| 272 | |
| 273 | Details of the device driver implementation are at the top of the source file. |
| 274 | |
| 275 | Additional documentation is available at Don Becker's Linux Drivers site: |
| 276 | |
Randy Dunlap | 98766fb | 2005-11-21 21:32:31 -0800 | [diff] [blame] | 277 | http://www.scyld.com/vortex.html |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 278 | |
| 279 | Donald Becker's driver development site: |
| 280 | |
Randy Dunlap | 98766fb | 2005-11-21 21:32:31 -0800 | [diff] [blame] | 281 | http://www.scyld.com/network.html |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 282 | |
| 283 | Donald's vortex-diag program is useful for inspecting the NIC's state: |
| 284 | |
Randy Dunlap | 98766fb | 2005-11-21 21:32:31 -0800 | [diff] [blame] | 285 | http://www.scyld.com/ethercard_diag.html |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 286 | |
| 287 | Donald's mii-diag program may be used for inspecting and manipulating |
| 288 | the NIC's Media Independent Interface subsystem: |
| 289 | |
Randy Dunlap | 98766fb | 2005-11-21 21:32:31 -0800 | [diff] [blame] | 290 | http://www.scyld.com/ethercard_diag.html#mii-diag |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 291 | |
| 292 | Donald's wake-on-LAN page: |
| 293 | |
Randy Dunlap | 98766fb | 2005-11-21 21:32:31 -0800 | [diff] [blame] | 294 | http://www.scyld.com/wakeonlan.html |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 295 | |
| 296 | 3Com's documentation for many NICs, including the ones supported by |
| 297 | this driver is available at |
| 298 | |
| 299 | http://support.3com.com/partners/developer/developer_form.html |
| 300 | |
| 301 | 3Com's DOS-based application for setting up the NICs EEPROMs: |
| 302 | |
| 303 | ftp://ftp.3com.com/pub/nic/3c90x/3c90xx2.exe |
| 304 | |
| 305 | Driver updates and a detailed changelog for the modifications which |
| 306 | were made for the 2.3/2,4 series kernel is available at |
| 307 | |
Randy Dunlap | 98766fb | 2005-11-21 21:32:31 -0800 | [diff] [blame] | 308 | http://www.zip.com.au/~akpm/linux/#3c59x-bc |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 309 | |
| 310 | |
| 311 | Autonegotiation notes |
| 312 | --------------------- |
| 313 | |
| 314 | The driver uses a one-minute heartbeat for adapting to changes in |
| 315 | the external LAN environment. This means that when, for example, a |
| 316 | machine is unplugged from a hubbed 10baseT LAN plugged into a |
| 317 | switched 100baseT LAN, the throughput will be quite dreadful for up |
| 318 | to sixty seconds. Be patient. |
| 319 | |
| 320 | Cisco interoperability note from Walter Wong <wcw+@CMU.EDU>: |
| 321 | |
| 322 | On a side note, adding HAS_NWAY seems to share a problem with the |
| 323 | Cisco 6509 switch. Specifically, you need to change the spanning |
| 324 | tree parameter for the port the machine is plugged into to 'portfast' |
| 325 | mode. Otherwise, the negotiation fails. This has been an issue |
| 326 | we've noticed for a while but haven't had the time to track down. |
| 327 | |
| 328 | Cisco switches (Jeff Busch <jbusch@deja.com>) |
| 329 | |
| 330 | My "standard config" for ports to which PC's/servers connect directly: |
| 331 | |
| 332 | interface FastEthernet0/N |
| 333 | description machinename |
| 334 | load-interval 30 |
| 335 | spanning-tree portfast |
| 336 | |
| 337 | If autonegotiation is a problem, you may need to specify "speed |
| 338 | 100" and "duplex full" as well (or "speed 10" and "duplex half"). |
| 339 | |
| 340 | WARNING: DO NOT hook up hubs/switches/bridges to these |
| 341 | specially-configured ports! The switch will become very confused. |
| 342 | |
| 343 | |
| 344 | Reporting and diagnosing problems |
| 345 | --------------------------------- |
| 346 | |
| 347 | Maintainers find that accurate and complete problem reports are |
| 348 | invaluable in resolving driver problems. We are frequently not able to |
| 349 | reproduce problems and must rely on your patience and efforts to get to |
| 350 | the bottom of the problem. |
| 351 | |
| 352 | If you believe you have a driver problem here are some of the |
| 353 | steps you should take: |
| 354 | |
| 355 | - Is it really a driver problem? |
| 356 | |
| 357 | Eliminate some variables: try different cards, different |
| 358 | computers, different cables, different ports on the switch/hub, |
| 359 | different versions of the kernel or ofthe driver, etc. |
| 360 | |
| 361 | - OK, it's a driver problem. |
| 362 | |
| 363 | You need to generate a report. Typically this is an email to the |
| 364 | maintainer and/or linux-net@vger.kernel.org. The maintainer's |
| 365 | email address will be inthe driver source or in the MAINTAINERS file. |
| 366 | |
| 367 | - The contents of your report will vary a lot depending upon the |
| 368 | problem. If it's a kernel crash then you should refer to the |
| 369 | REPORTING-BUGS file. |
| 370 | |
| 371 | But for most problems it is useful to provide the following: |
| 372 | |
| 373 | o Kernel version, driver version |
| 374 | |
| 375 | o A copy of the banner message which the driver generates when |
| 376 | it is initialised. For example: |
| 377 | |
| 378 | eth0: 3Com PCI 3c905C Tornado at 0xa400, 00:50:da:6a:88:f0, IRQ 19 |
| 379 | 8K byte-wide RAM 5:3 Rx:Tx split, autoselect/Autonegotiate interface. |
| 380 | MII transceiver found at address 24, status 782d. |
| 381 | Enabling bus-master transmits and whole-frame receives. |
| 382 | |
| 383 | NOTE: You must provide the `debug=2' modprobe option to generate |
| 384 | a full detection message. Please do this: |
| 385 | |
| 386 | modprobe 3c59x debug=2 |
| 387 | |
| 388 | o If it is a PCI device, the relevant output from 'lspci -vx', eg: |
| 389 | |
| 390 | 00:09.0 Ethernet controller: 3Com Corporation 3c905C-TX [Fast Etherlink] (rev 74) |
| 391 | Subsystem: 3Com Corporation: Unknown device 9200 |
| 392 | Flags: bus master, medium devsel, latency 32, IRQ 19 |
| 393 | I/O ports at a400 [size=128] |
| 394 | Memory at db000000 (32-bit, non-prefetchable) [size=128] |
| 395 | Expansion ROM at <unassigned> [disabled] [size=128K] |
| 396 | Capabilities: [dc] Power Management version 2 |
| 397 | 00: b7 10 00 92 07 00 10 02 74 00 00 02 08 20 00 00 |
| 398 | 10: 01 a4 00 00 00 00 00 db 00 00 00 00 00 00 00 00 |
| 399 | 20: 00 00 00 00 00 00 00 00 00 00 00 00 b7 10 00 10 |
| 400 | 30: 00 00 00 00 dc 00 00 00 00 00 00 00 05 01 0a 0a |
| 401 | |
| 402 | o A description of the environment: 10baseT? 100baseT? |
| 403 | full/half duplex? switched or hubbed? |
| 404 | |
| 405 | o Any additional module parameters which you may be providing to the driver. |
| 406 | |
| 407 | o Any kernel logs which are produced. The more the merrier. |
| 408 | If this is a large file and you are sending your report to a |
| 409 | mailing list, mention that you have the logfile, but don't send |
| 410 | it. If you're reporting direct to the maintainer then just send |
| 411 | it. |
| 412 | |
| 413 | To ensure that all kernel logs are available, add the |
| 414 | following line to /etc/syslog.conf: |
| 415 | |
| 416 | kern.* /var/log/messages |
| 417 | |
| 418 | Then restart syslogd with: |
| 419 | |
| 420 | /etc/rc.d/init.d/syslog restart |
| 421 | |
| 422 | (The above may vary, depending upon which Linux distribution you use). |
| 423 | |
| 424 | o If your problem is reproducible then that's great. Try the |
| 425 | following: |
| 426 | |
| 427 | 1) Increase the debug level. Usually this is done via: |
| 428 | |
| 429 | a) modprobe driver debug=7 |
| 430 | b) In /etc/modprobe.conf (or /etc/modules.conf for 2.4): |
| 431 | options driver debug=7 |
| 432 | |
| 433 | 2) Recreate the problem with the higher debug level, |
| 434 | send all logs to the maintainer. |
| 435 | |
| 436 | 3) Download you card's diagnostic tool from Donald |
Randy Dunlap | 98766fb | 2005-11-21 21:32:31 -0800 | [diff] [blame] | 437 | Becker's website <http://www.scyld.com/ethercard_diag.html>. |
| 438 | Download mii-diag.c as well. Build these. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 439 | |
| 440 | a) Run 'vortex-diag -aaee' and 'mii-diag -v' when the card is |
| 441 | working correctly. Save the output. |
| 442 | |
| 443 | b) Run the above commands when the card is malfunctioning. Send |
| 444 | both sets of output. |
| 445 | |
Randy Dunlap | 98766fb | 2005-11-21 21:32:31 -0800 | [diff] [blame] | 446 | Finally, please be patient and be prepared to do some work. You may |
| 447 | end up working on this problem for a week or more as the maintainer |
| 448 | asks more questions, asks for more tests, asks for patches to be |
| 449 | applied, etc. At the end of it all, the problem may even remain |
| 450 | unresolved. |