Author: yongari
Date: Fri Feb 26 22:46:36 2010
New Revision: 204378
URL: http://svn.freebsd.org/changeset/base/204378

Log:
  Add TSO support on VLANs. While I'm here remove unnecessary check
  of VLAN hardware checksum offloading. vlan(4) already takes care of
  this.

Modified:
  head/sys/dev/ale/if_ale.c

Modified: head/sys/dev/ale/if_ale.c
==============================================================================
--- head/sys/dev/ale/if_ale.c   Fri Feb 26 22:43:23 2010        (r204377)
+++ head/sys/dev/ale/if_ale.c   Fri Feb 26 22:46:36 2010        (r204378)
@@ -78,9 +78,6 @@ __FBSDID("$FreeBSD$");
 
 /* For more information about Tx checksum offload issues see ale_encap(). */
 #define        ALE_CSUM_FEATURES       (CSUM_TCP | CSUM_UDP)
-#ifndef        IFCAP_VLAN_HWTSO
-#define        IFCAP_VLAN_HWTSO        0
-#endif
 
 MODULE_DEPEND(ale, pci, 1, 1, 1);
 MODULE_DEPEND(ale, ether, 1, 1, 1);
@@ -617,8 +614,8 @@ ale_attach(device_t dev)
        ether_ifattach(ifp, sc->ale_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;
        /*
         * Even though controllers supported by ale(3) have Rx checksum
@@ -2003,29 +2000,19 @@ ale_ioctl(struct ifnet *ifp, u_long cmd,
                if ((mask & IFCAP_WOL_MAGIC) != 0 &&
                    (ifp->if_capabilities & IFCAP_WOL_MAGIC) != 0)
                        ifp->if_capenable ^= IFCAP_WOL_MAGIC;
-
-               if ((mask & IFCAP_VLAN_HWTAGGING) != 0 &&
-                   (ifp->if_capabilities & IFCAP_VLAN_HWTAGGING) != 0) {
-                       ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
-                       ale_rxvlan(sc);
-               }
                if ((mask & IFCAP_VLAN_HWCSUM) != 0 &&
                    (ifp->if_capabilities & IFCAP_VLAN_HWCSUM) != 0)
                        ifp->if_capenable ^= IFCAP_VLAN_HWCSUM;
                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);
+               if ((mask & IFCAP_VLAN_HWTAGGING) != 0 &&
+                   (ifp->if_capabilities & IFCAP_VLAN_HWTAGGING) != 0) {
+                       ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
+                       if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) == 0)
+                               ifp->if_capenable &= ~IFCAP_VLAN_HWTSO;
+                       ale_rxvlan(sc);
+               }
                ALE_UNLOCK(sc);
                VLAN_CAPABILITIES(ifp);
                break;
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to