Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 15 Apr 2005 06:13:00 GMT
From:      Lobach Pavel <lobach_pavel@mail.ru>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   kern/79946: Checksum offloading doesn't work on intel 82551 NIC (chip rev=0x10)
Message-ID:  <200504150613.j3F6D0wA016881@www.freebsd.org>
Resent-Message-ID: <200504150620.j3F6KAYg042565@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>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
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Apr 15 06:20:10 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator:     Lobach Pavel
>Release:        FreeBSD 5.3
>Organization:
>Environment:
FreeBSD 5.3-RELEASE
Intel PRO/100 ethernet adapter (82551 chip rev=0x10)
>Description:
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) {
...skipped...
  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;
 }
      
>How-To-Repeat:
Install intel pro/100 card with 82551 chip and do:
ifconfig fxp0 txcsum rxcsum
it doesn't work

>Fix:
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) { ...
>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200504150613.j3F6D0wA016881>