Author: yongari
Date: Mon Feb 22 22:41:27 2010
New Revision: 204228
URL: http://svn.freebsd.org/changeset/base/204228

Log:
  Add TSO support on VLANs. Also make sure to update TSO capability
  whenever jumbo frame is configured.
  While I'm here remove unnecessary check of VLAN hardware checksum
  offloading. vlan(4) already takes care of this.

Modified:
  head/sys/dev/alc/if_alc.c

Modified: head/sys/dev/alc/if_alc.c
==============================================================================
--- head/sys/dev/alc/if_alc.c   Mon Feb 22 22:32:24 2010        (r204227)
+++ head/sys/dev/alc/if_alc.c   Mon Feb 22 22:41:27 2010        (r204228)
@@ -84,9 +84,6 @@ __FBSDID("$FreeBSD$");
 #else
 #define        ALC_CSUM_FEATURES       (CSUM_IP | CSUM_TCP | CSUM_UDP)
 #endif
-#ifndef        IFCAP_VLAN_HWTSO
-#define        IFCAP_VLAN_HWTSO        0
-#endif
 
 MODULE_DEPEND(alc, pci, 1, 1, 1);
 MODULE_DEPEND(alc, ether, 1, 1, 1);
@@ -756,8 +753,8 @@ alc_attach(device_t dev)
        ether_ifattach(ifp, sc->alc_eaddr);
 
        /* VLAN capability setup. */
-       ifp->if_capabilities |= IFCAP_VLAN_MTU;
-       ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_HWCSUM;
+       ifp->if_capabilities |= IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING |
+           IFCAP_VLAN_HWCSUM | IFCAP_VLAN_HWTSO;
        ifp->if_capenable = ifp->if_capabilities;
        /*
         * XXX
@@ -2133,6 +2130,7 @@ alc_ioctl(struct ifnet *ifp, u_long cmd,
                            (ifp->if_capenable & IFCAP_TSO4) != 0) {
                                ifp->if_capenable &= ~IFCAP_TSO4;
                                ifp->if_hwassist &= ~CSUM_TSO;
+                               VLAN_CAPABILITIES(ifp);
                        }
                        ALC_UNLOCK(sc);
                }
@@ -2204,14 +2202,6 @@ alc_ioctl(struct ifnet *ifp, u_long cmd,
                if ((mask & IFCAP_VLAN_HWTSO) != 0 &&
                    (ifp->if_capabilities & IFCAP_VLAN_HWTSO) != 0)
                        ifp->if_capenable ^= IFCAP_VLAN_HWTSO;
-               /*
-                * VLAN hardware tagging is required to do checksum
-                * offload or TSO on VLAN interface. Checksum offload
-                * on VLAN interface also requires hardware checksum
-                * offload of parent interface.
-                */
-               if ((ifp->if_capenable & IFCAP_TXCSUM) == 0)
-                       ifp->if_capenable &= ~IFCAP_VLAN_HWCSUM;
                if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) == 0)
                        ifp->if_capenable &=
                            ~(IFCAP_VLAN_HWTSO | IFCAP_VLAN_HWCSUM);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to