kern/79946: Checksum offloading doesn't work on intel 82551 NIC (chip rev=0x10)

Lobach Pavel lobach_pavel at
Thu Apr 14 23:20:11 PDT 2005

>Number:         79946
>Category:       kern
>Synopsis:       Checksum offloading doesn't work on intel 82551 NIC (chip rev=0x10)
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Apr 15 06:20:10 GMT 2005
>Originator:     Lobach Pavel
>Release:        FreeBSD 5.3
Intel PRO/100 ethernet adapter (82551 chip rev=0x10)
We bought a couple of Intel 82551's cards (chip rev=0x10)
But fxp driver doesn't enable checksum offloading for it nether in RELENG_5, nor in HEAD, because of in if_fxp.c:

if (sc->revision == FXP_REV_82550 || sc->revision == FXP_REV_82550_C) {
  sc->flags |= FXP_FLAG_EXT_RFA;

i.e. flag FXP_FLAG_EXT_RFA enabled only for 82550
and thus prevents enabling checksum offloading for 82551(chips rev=0x0f, 0x10) and even for 82550 (chip rev=0x0e) below:

 /* Enable checksum offload for 82550 or better chips */
 if (sc->flags & FXP_FLAG_EXT_RFA) { <-- this flag doesn't set for "better chips"
  ifp->if_hwassist = FXP_CSUM_FEATURES;
  ifp->if_capabilities |= IFCAP_HWCSUM;
  ifp->if_capenable |= IFCAP_HWCSUM;
Install intel pro/100 card with 82551 chip and do:
ifconfig fxp0 txcsum rxcsum
it doesn't work

In if_fxp.c it should be:
if (sc->revision >= FXP_REV_82550) { ...
instead of
if (sc->revision == FXP_REV_82550 || sc->revision == FXP_REV_82550_C) {
Because intel chipset beginning from 82550 all have this feature
or we can
#define FXP_REV_82551 0x10
in if_fxpreg.h
and in if_fxp.c:
if (sc->revision >= FXP_REV_82550 && sc->revision <= FXP_REV_82551) { ...

More information about the freebsd-bugs mailing list