aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Tuexen <tuexen@FreeBSD.org>2026-01-23 07:59:57 +0000
committerMichael Tuexen <tuexen@FreeBSD.org>2026-01-23 07:59:57 +0000
commitf31336b3e3146fed9cc517fef8e877c17496f9e0 (patch)
tree192a383411a14ff3fceb701d1bd6c6bf8ec300d7
parent8352e24d0bc59f9730980986600bde7d8cdce21d (diff)
dpnaa2: announce transmit checksum support
Let the network stack know that the NIC supports checksum offloading for the IPv4 header checksum and the TCP and UDP transport checksum. This avoids the computation in software and therefore provides the expected performance gain. PR: 292006 Reviewed by: dsl, Timo Völker MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D54809
-rw-r--r--sys/dev/dpaa2/dpaa2_ni.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/dev/dpaa2/dpaa2_ni.c b/sys/dev/dpaa2/dpaa2_ni.c
index eda5bab78bde..5f796e6e472b 100644
--- a/sys/dev/dpaa2/dpaa2_ni.c
+++ b/sys/dev/dpaa2/dpaa2_ni.c
@@ -220,6 +220,9 @@ MALLOC_DEFINE(M_DPAA2_TXB, "dpaa2_txb", "DPAA2 DMA-mapped buffer (Tx)");
#define RXH_L4_B_2_3 (1 << 7) /* dst port in case of TCP/UDP/SCTP */
#define RXH_DISCARD (1 << 31)
+/* Transmit checksum offload */
+#define DPAA2_CSUM_TX_OFFLOAD (CSUM_IP | CSUM_DELAY_DATA | CSUM_DELAY_DATA_IPV6)
+
/* Default Rx hash options, set during attaching. */
#define DPAA2_RXH_DEFAULT (RXH_IP_SRC | RXH_IP_DST | RXH_L4_B_0_1 | RXH_L4_B_2_3)
@@ -559,6 +562,7 @@ dpaa2_ni_attach(device_t dev)
if_settransmitfn(ifp, dpaa2_ni_transmit);
if_setqflushfn(ifp, dpaa2_ni_qflush);
+ if_sethwassist(sc->ifp, DPAA2_CSUM_TX_OFFLOAD);
if_setcapabilities(ifp, IFCAP_VLAN_MTU | IFCAP_HWCSUM |
IFCAP_HWCSUM_IPV6 | IFCAP_JUMBO_MTU);
if_setcapenable(ifp, if_getcapabilities(ifp));
@@ -2600,8 +2604,10 @@ dpaa2_ni_ioctl(if_t ifp, u_long c, caddr_t data)
changed = if_getcapenable(ifp) ^ ifr->ifr_reqcap;
if ((changed & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6)) != 0)
if_togglecapenable(ifp, IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6);
- if ((changed & (IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6)) != 0)
- if_togglecapenable(ifp, IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6);
+ if ((changed & (IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6)) != 0) {
+ if_togglecapenable(ifp, IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6);
+ if_togglehwassist(ifp, DPAA2_CSUM_TX_OFFLOAD);
+ }
rc = dpaa2_ni_setup_if_caps(sc);
if (rc) {