summaryrefslogtreecommitdiffstats
path: root/sys/dev/re
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2006-11-21 04:23:52 +0000
committeryongari <yongari@FreeBSD.org>2006-11-21 04:23:52 +0000
commit31dadd4d684390cafbda57c8ff033ff9812b64a0 (patch)
tree4e15d613bf215592a5c6cecf31fcc626f74434cb /sys/dev/re
parent8a793a6af6814354bd74ee44c8342ed495f3f46e (diff)
downloadFreeBSD-src-31dadd4d684390cafbda57c8ff033ff9812b64a0.zip
FreeBSD-src-31dadd4d684390cafbda57c8ff033ff9812b64a0.tar.gz
o Correctly set IFCAP_VLAN_HWCSUM as re(4) can do VLAN tagging/checksum
offloading in hardware. o Correctly set media header length for VLAN.
Diffstat (limited to 'sys/dev/re')
-rw-r--r--sys/dev/re/if_re.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/sys/dev/re/if_re.c b/sys/dev/re/if_re.c
index 5ef8995..e9ca0f1 100644
--- a/sys/dev/re/if_re.c
+++ b/sys/dev/re/if_re.c
@@ -1257,14 +1257,10 @@ re_attach(dev)
ifp->if_mtu = ETHERMTU;
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
ifp->if_ioctl = re_ioctl;
- ifp->if_capabilities = IFCAP_VLAN_MTU;
ifp->if_start = re_start;
ifp->if_hwassist = RE_CSUM_FEATURES;
- ifp->if_capabilities |= IFCAP_HWCSUM|IFCAP_VLAN_HWTAGGING;
+ ifp->if_capabilities = IFCAP_HWCSUM;
ifp->if_capenable = ifp->if_capabilities;
-#ifdef DEVICE_POLLING
- ifp->if_capabilities |= IFCAP_POLLING;
-#endif
ifp->if_watchdog = re_watchdog;
ifp->if_init = re_init;
IFQ_SET_MAXLEN(&ifp->if_snd, RL_IFQ_MAXLEN);
@@ -1279,6 +1275,21 @@ re_attach(dev)
*/
ether_ifattach(ifp, eaddr);
+ /* VLAN capability setup */
+ ifp->if_capabilities |= IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING;
+ if (ifp->if_capabilities & IFCAP_HWCSUM)
+ ifp->if_capabilities |= IFCAP_VLAN_HWCSUM;
+ ifp->if_capenable = ifp->if_capabilities;
+#ifdef DEVICE_POLLING
+ ifp->if_capabilities |= IFCAP_POLLING;
+#endif
+ /*
+ * Tell the upper layer(s) we support long frames.
+ * Must appear after the call to ether_ifattach() because
+ * ether_ifattach() sets ifi_hdrlen to the default value.
+ */
+ ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
+
#ifdef RE_DIAG
/*
* Perform hardware diagnostic on the original RTL8169.
@@ -2542,6 +2553,7 @@ re_ioctl(ifp, command, data)
}
if (reinit && ifp->if_drv_flags & IFF_DRV_RUNNING)
re_init(sc);
+ VLAN_CAPABILITIES(ifp);
}
break;
default:
OpenPOWER on IntegriCloud