3c90x
3c90x NIC
This page is about the 3c90x/3c90xB/3c90xC family of ethernet adaptors manufactured by 3com. A number of 3com cards share the programming interface of this family; this includes the 3c556 10/100LAN + 56k Modem MiniPCI adapter (also known as 3CN3AC1556B and 3Com® Megahertz® 10 Mbps LAN CF+ Card) and 3c555 10/100LAN MiniPCI adapters, which support the 3c90xC interface.
The Card
- 3c90x (FastEtherLink XL) is a successor to 3c59x (which are successor to 3c5x9). A new feature introduced in this series is full bus master operation mode with seperate download and upload buffer chains.
- 3c90x support PIO for compatibility; 3c90xB and 3c90xC do not.
- the adapter can be setup to wake the system upon reception of packets with a programmable filter.
- VLAN support.
- TCP/IP checksum checking support.
There are three register mechanisms which enable the host to access and configure the NIC: PCI configuration registers, host registers (IO/memory space) and the NIC's EEPROM. Issuing a command to the NIC is achieved by writing to the write-only command register (a host register). The read-only interrupt status register informs about the interrupt source, the current register bank visible in the window and whether a command is being executed. The 3x90xC provides also the IntStatusAuto register, reading of which returns the value of the interrupt status register and causes side effects which are supposed to improve interrupt handling efficiency. Bytes 0-15 of the host registers form a switchable window, which means the meanings of particular bytes/words/dwords in the window depends on the currently selected register bank. The docs are well written and easy to follow.
Programming considerations
- For 3c555, 3c556, 3c575 and 3c656 cards, the EEPROM command for "Read" has value 0x230 (and not 0x80 like for 3c90x cards).
Resources
- Etherboot 3c90x driver
- Linux 3c59x driver, driver operation explained at the top of the file
- FreeBSD 3x90x driver
- 3com product details
- 3c90x and 3x90xB NICs technical reference
- https://people.freebsd.org/~wpaul/3Com/README