summaryrefslogtreecommitdiffstats
path: root/rtemsbsd/sys/dev
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2022-05-10 07:49:32 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2022-05-11 16:05:26 +0200
commit202502a397d00be3f3671b6809b30638bfb99c3a (patch)
treeff82ea09a3156bdd1c63fa39b8d7c68d54c0d4d8 /rtemsbsd/sys/dev
parentif_atsam: Optimize receive (diff)
downloadrtems-libbsd-202502a397d00be3f3671b6809b30638bfb99c3a.tar.bz2
if_atsam: Support IFCAP_VLAN_HWTAGGING
This is required to enable checksum offload for vlan interfaces. Update #4652.
Diffstat (limited to 'rtemsbsd/sys/dev')
-rw-r--r--rtemsbsd/sys/dev/atsam/if_atsam.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/rtemsbsd/sys/dev/atsam/if_atsam.c b/rtemsbsd/sys/dev/atsam/if_atsam.c
index ef2b3401..dbbe3f77 100644
--- a/rtemsbsd/sys/dev/atsam/if_atsam.c
+++ b/rtemsbsd/sys/dev/atsam/if_atsam.c
@@ -685,6 +685,18 @@ if_atsam_transmit(struct ifnet *ifp, struct mbuf *m)
struct if_atsam_softc *sc;
int error;
+ if (__predict_false((m->m_flags & M_VLANTAG) != 0)) {
+ struct mbuf *n;
+
+ n = ether_vlanencap(m, m->m_pkthdr.ether_vtag);
+ if (n == NULL) {
+ m_freem(m);
+ return (ENOBUFS);
+ }
+
+ m = n;
+ }
+
sc = ifp->if_softc;
IF_ATSAM_LOCK(sc);
@@ -1423,7 +1435,7 @@ static int if_atsam_driver_attach(device_t dev)
ifp->if_qflush = if_qflush;
ifp->if_flags = IFF_BROADCAST | IFF_MULTICAST | IFF_SIMPLEX;
ifp->if_capabilities |= IFCAP_HWCSUM | IFCAP_HWCSUM_IPV6 |
- IFCAP_VLAN_HWCSUM;
+ IFCAP_VLAN_HWCSUM | IFCAP_VLAN_HWTAGGING;
ifp->if_capenable = ifp->if_capabilities;
ifp->if_hwassist = CSUM_IP | CSUM_IP_UDP | CSUM_IP_TCP |
CSUM_IP6_UDP | CSUM_IP6_TCP;