svn commit: r205294 - stable/8/sys/net
Pyun YongHyeon
yongari at FreeBSD.org
Thu Mar 18 19:04:04 UTC 2010
Author: yongari
Date: Thu Mar 18 19:04:04 2010
New Revision: 205294
URL: http://svn.freebsd.org/changeset/base/205294
Log:
MFC r204149:
Add TSO support on VLANs. Intentionally separated IFCAP_VLAN_HWTSO
from IFCAP_VLAN_HWTAGGING. I think some hardwares may be able to
TSO over VLAN without VLAN hardware tagging.
Driver changes and userland support will follow.
Modified:
stable/8/sys/net/if.h
stable/8/sys/net/if_vlan.c
Directory Properties:
stable/8/sys/ (props changed)
stable/8/sys/amd64/include/xen/ (props changed)
stable/8/sys/cddl/contrib/opensolaris/ (props changed)
stable/8/sys/contrib/dev/acpica/ (props changed)
stable/8/sys/contrib/pf/ (props changed)
stable/8/sys/dev/xen/xenpci/ (props changed)
Modified: stable/8/sys/net/if.h
==============================================================================
--- stable/8/sys/net/if.h Thu Mar 18 19:00:37 2010 (r205293)
+++ stable/8/sys/net/if.h Thu Mar 18 19:04:04 2010 (r205294)
@@ -218,6 +218,7 @@ struct if_data {
#define IFCAP_TOE6 0x08000 /* interface can offload TCP6 */
#define IFCAP_VLAN_HWFILTER 0x10000 /* interface hw can filter vlan tag */
#define IFCAP_POLLING_NOCOUNT 0x20000 /* polling ticks cannot be fragmented */
+#define IFCAP_VLAN_HWTSO 0x40000 /* can do IFCAP_TSO on VLANs */
#define IFCAP_HWCSUM (IFCAP_RXCSUM | IFCAP_TXCSUM)
#define IFCAP_TSO (IFCAP_TSO4 | IFCAP_TSO6)
Modified: stable/8/sys/net/if_vlan.c
==============================================================================
--- stable/8/sys/net/if_vlan.c Thu Mar 18 19:00:37 2010 (r205293)
+++ stable/8/sys/net/if_vlan.c Thu Mar 18 19:04:04 2010 (r205294)
@@ -1275,11 +1275,26 @@ vlan_capabilities(struct ifvlan *ifv)
if (p->if_capenable & IFCAP_VLAN_HWCSUM &&
p->if_capenable & IFCAP_VLAN_HWTAGGING) {
ifp->if_capenable = p->if_capenable & IFCAP_HWCSUM;
- ifp->if_hwassist = p->if_hwassist;
+ ifp->if_hwassist = p->if_hwassist & (CSUM_IP | CSUM_TCP |
+ CSUM_UDP | CSUM_SCTP | CSUM_IP_FRAGS | CSUM_FRAGMENT);
} else {
ifp->if_capenable = 0;
ifp->if_hwassist = 0;
}
+ /*
+ * If the parent interface can do TSO on VLANs then
+ * propagate the hardware-assisted flag. TSO on VLANs
+ * does not necessarily require hardware VLAN tagging.
+ */
+ if (p->if_capabilities & IFCAP_VLAN_HWTSO)
+ ifp->if_capabilities |= p->if_capabilities & IFCAP_TSO;
+ if (p->if_capenable & IFCAP_VLAN_HWTSO) {
+ ifp->if_capenable |= p->if_capenable & IFCAP_TSO;
+ ifp->if_hwassist |= p->if_hwassist & CSUM_TSO;
+ } else {
+ ifp->if_capenable &= ~(p->if_capenable & IFCAP_TSO);
+ ifp->if_hwassist &= ~(p->if_hwassist & CSUM_TSO);
+ }
}
static void
More information about the svn-src-stable
mailing list