The Intel 10/100 Mbit Ethernet Family is a common, embeddable, PCI Ethernet chip set, that is also used in the Intel PRO/100+ series of PCI Ethernet cards. The range includes the 82557, 82558, and 82559 controllers, that can be coupled with various PHY parts.
The ARM i8255x driver interfaces between any of these controllers and the ARM Network Protocol Suite. It was developed on the Integrator/AP development platform, using several different 8255x cards, version 1.1 of the Intel 8255x documentation, and the ARM Firmware Suite, version 1.1.
It is intended to be easily portable to target hardware.
This section describes particular features of the i8255x driver.
The i8255x driver uses none of the additional features of the i82558 and i82559 controllers, and is therefore compatible with the whole range.
- PCI bus
The PCI Library from the ARM Firmware Suite is used to find all the i8255x devices on the Integrator PCI bus. Multiple devices are allowed, and each device is mapped to a separate interface in the TCP/IP stack.
Early builds of the FPGAs on the Integrator had problems that affected the PCI bus. Ensure that up-to-date versions are used.
- Memory structure
Both receive and transmit are performed in flexible mode, meaning that the descriptors for the frames are separate from the descriptors for the data buffers. There is one data buffer for each frame.
Contrary to the documentation for the controllers, the end-of-list bits are not set in either the frame descriptors or the buffer descriptors. Rather, the descriptors are linked together as a circular FIFO, and the device never enters a No Resources condition. If there are no free descriptors, frames are simply discarded.
- Missing features
No power-management features are implemented, TCO functionality is not used, and there is no support for the Intel Adaptive Technology. The checksum offload feature of the 82559 is not used.
- Other features
The Intel-suggested workaround for a receiver lock-up problem with some controllers is implemented. This requires a call-back every second from the timer tick handler. This also updates the statistics.
There is a function to put a particular device into promiscuous mode, but this is not currently used.