I have an 8.1-RELEASE system with an xl on the mainboard:
xl0: <3Com 3c905C-TX Fast Etherlink XL> port 0xdc80-0xdcff mem
0xf8fffc00-0xf8fffc7f irq 16 at device 4.0 on pci2
miibus0: <MII bus> on xl0
xlphy0: <3c905C 10/100 internal PHY> PHY 24 on miibus0
xlphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
xl0: Ethernet address: 00:b0:d0:22:5a:14
xl0: [ITHREAD]
It has been working properly while connected to an old 10-BaseT hub,
but when I moved it to a (not as old) Netgear 10/100 dual-speed hub
the link started to yo-yo:
Oct 21 07:16:00 fbsd81 kernel: xl0: link state changed to DOWN
Oct 21 07:16:02 fbsd81 kernel: xl0: link state changed to UP
Oct 21 07:16:12 fbsd81 kernel: xl0: link state changed to DOWN
Oct 21 07:16:14 fbsd81 kernel: xl0: link state changed to UP
Oct 21 07:16:18 fbsd81 kernel: xl0: link state changed to DOWN
Oct 21 07:16:20 fbsd81 kernel: xl0: link state changed to UP
Oct 21 07:16:26 fbsd81 kernel: xl0: link state changed to DOWN
Oct 21 07:16:28 fbsd81 kernel: xl0: link state changed to UP
While it was misbehaving, ifconfig reported:
# ifconfig xl0
xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80009<RXCSUM,VLAN_MTU,LINKSTATE>
ether 00:b0:d0:22:5a:14
inet6 fe80::2b0:d0ff:fe22:5a14%xl0 prefixlen 64 scopeid 0x1
inet 192.168.200.81 netmask 0xffffff00 broadcast 192.168.200.255
nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
media: Ethernet autoselect (100baseTX)
status: active
Turning off unneeded features did not help:
# ifconfig xl0 -vlanmtu -rxcsum
# ifconfig xl0
xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80000<LINKSTATE>
ether 00:b0:d0:22:5a:14
inet6 fe80::2b0:d0ff:fe22:5a14%xl0 prefixlen 64 scopeid 0x1
inet 192.168.200.81 netmask 0xffffff00 broadcast 192.168.200.255
nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
media: Ethernet autoselect (100baseTX)
status: active
and neither did forcing it to 100baseTX, with either duplex setting:
# ifconfig xl0 media 100baseTX mediaopt full-duplex
# ifconfig xl0
xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80000<LINKSTATE>
ether 00:b0:d0:22:5a:14
inet6 fe80::2b0:d0ff:fe22:5a14%xl0 prefixlen 64 scopeid 0x1
inet 192.168.200.81 netmask 0xffffff00 broadcast 192.168.200.255
nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
media: Ethernet 100baseTX <full-duplex>
status: active
# ifconfig xl0 mediaopt half-duplex
# ifconfig xl0
xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80000<LINKSTATE>
ether 00:b0:d0:22:5a:14
inet6 fe80::2b0:d0ff:fe22:5a14%xl0 prefixlen 64 scopeid 0x1
inet 192.168.200.81 netmask 0xffffff00 broadcast 192.168.200.255
nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
media: Ethernet 100baseTX
status: active
but moving it back to the 10-BaseT hub (after restoring xl0 to
autoselect) fixed the problem:
# ifconfig xl0 media autoselect
# ifconfig xl0
xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80000<LINKSTATE>
ether 00:b0:d0:22:5a:14
inet6 fe80::2b0:d0ff:fe22:5a14%xl0 prefixlen 64 scopeid 0x1
inet 192.168.200.81 netmask 0xffffff00 broadcast 192.168.200.255
nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
media: Ethernet autoselect (100baseTX)
status: active
[still yo-yo-ing, until moved to the old hub, then OK]
# ifconfig xl0
xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80000<LINKSTATE>
ether 00:b0:d0:22:5a:14
inet6 fe80::2b0:d0ff:fe22:5a14%xl0 prefixlen 64 scopeid 0x1
inet 192.168.200.81 netmask 0xffffff00 broadcast 192.168.200.255
nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
media: Ethernet autoselect (10baseT/UTP)
status: active
Both connections were using the same (short) Cat5 cable, I tried two
different ports on the 10/100 hub, and other systems work OK on that
10/100 hub.
How do I get this interface to operate properly at 100MB?