From nobody@FreeBSD.org  Fri Apr 15 06:13:01 2005
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id 0D65B16A4CE
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 15 Apr 2005 06:13:01 +0000 (GMT)
Received: from www.freebsd.org (www.freebsd.org [216.136.204.117])
	by mx1.FreeBSD.org (Postfix) with ESMTP id E60AB43D41
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 15 Apr 2005 06:13:00 +0000 (GMT)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.13.1/8.13.1) with ESMTP id j3F6D0F8016882
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 15 Apr 2005 06:13:00 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.13.1/8.13.1/Submit) id j3F6D0wA016881;
	Fri, 15 Apr 2005 06:13:00 GMT
	(envelope-from nobody)
Message-Id: <200504150613.j3F6D0wA016881@www.freebsd.org>
Date: Fri, 15 Apr 2005 06:13:00 GMT
From: Lobach Pavel <lobach_pavel@mail.ru>
To: freebsd-gnats-submit@FreeBSD.org
Subject: Checksum offloading doesn't work on intel 82551 NIC (chip rev=0x10)
X-Send-Pr-Version: www-2.3

>Number:         79946
>Category:       kern
>Synopsis:       [patch] Checksum offloading doesn't work on intel 82551 NIC (chip rev=0x10)
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    mux
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Apr 15 06:20:10 GMT 2005
>Closed-Date:    Fri Apr 22 09:28:19 GMT 2005
>Last-Modified:  Fri Apr 22 09:28:19 GMT 2005
>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:
Responsible-Changed-From-To: freebsd-bugs->mux 
Responsible-Changed-By: glebius 
Responsible-Changed-When: Fri Apr 15 10:05:16 GMT 2005 
Responsible-Changed-Why:  
For Maxime's review. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=79946 
State-Changed-From-To: open->closed 
State-Changed-By: mux 
State-Changed-When: Fri Apr 22 09:27:57 GMT 2005 
State-Changed-Why:  
Fix committed. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=79946 
>Unformatted:
