summaryrefslogtreecommitdiffstats
path: root/sys/dev/bce
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2010-02-26 21:26:07 +0000
committeryongari <yongari@FreeBSD.org>2010-02-26 21:26:07 +0000
commit34ee75fb6591aad0cd813a8aecc9be9dff5f3bbb (patch)
treeae66e06f4b349644aaa54826e89acd55f2657210 /sys/dev/bce
parent142d4bad6742190307c16cf0996ca20d233188ab (diff)
downloadFreeBSD-src-34ee75fb6591aad0cd813a8aecc9be9dff5f3bbb.zip
FreeBSD-src-34ee75fb6591aad0cd813a8aecc9be9dff5f3bbb.tar.gz
Add TSO support on VLANs. bce(4) controllers require VLAN hardware
tagging to make TSO work on VLANs so explicitly disable TSO on VLAN if VLAN hardware tagging is disabled. Reviewed by: davidch
Diffstat (limited to 'sys/dev/bce')
-rw-r--r--sys/dev/bce/if_bce.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/sys/dev/bce/if_bce.c b/sys/dev/bce/if_bce.c
index b6cf634..8b6f222 100644
--- a/sys/dev/bce/if_bce.c
+++ b/sys/dev/bce/if_bce.c
@@ -1058,7 +1058,8 @@ bce_attach(device_t dev)
if (bce_tso_enable) {
ifp->if_hwassist = BCE_IF_HWASSIST | CSUM_TSO;
- ifp->if_capabilities = BCE_IF_CAPABILITIES | IFCAP_TSO4;
+ ifp->if_capabilities = BCE_IF_CAPABILITIES | IFCAP_TSO4 |
+ IFCAP_VLAN_HWTSO;
} else {
ifp->if_hwassist = BCE_IF_HWASSIST;
ifp->if_capabilities = BCE_IF_CAPABILITIES;
@@ -7176,6 +7177,9 @@ bce_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
ifp->if_capabilities & IFCAP_VLAN_HWCSUM)
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;
/*
* Don't actually disable VLAN tag stripping as
* management firmware (ASF/IPMI/UMP) requires the
@@ -7184,8 +7188,12 @@ bce_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
* appending stripped VLAN tag.
*/
if ((mask & IFCAP_VLAN_HWTAGGING) != 0 &&
- (ifp->if_capabilities & IFCAP_VLAN_HWTAGGING))
+ (ifp->if_capabilities & IFCAP_VLAN_HWTAGGING)) {
ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
+ if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING)
+ == 0)
+ ifp->if_capenable &= ~IFCAP_VLAN_HWTSO;
+ }
VLAN_CAPABILITIES(ifp);
break;
default:
OpenPOWER on IntegriCloud