| Documentation/networking/vortex.txt |
| 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 |
| configuretion 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 mnay 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 autoeselect 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 the |
| REPORTING-BUGS file. |
| |
| But for most problems it is useful to provide the following: |
| |
| o Kernel version, driver version |
| |
| o 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 |
| |
| o 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 |
| |
| o A description of the environment: 10baseT? 100baseT? |
| full/half duplex? switched or hubbed? |
| |
| o Any additional module parameters which you may be providing to the driver. |
| |
| o 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). |
| |
| o 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. |