Here is a diff to enable the checksum offload support for stge(4).
Looking for any testing.
Index: if_stge.c
===================================================================
RCS file: /home/cvs/src/sys/dev/pci/if_stge.c,v
retrieving revision 1.55
diff -u -p -r1.55 if_stge.c
--- if_stge.c 7 Aug 2013 01:06:38 -0000 1.55
+++ if_stge.c 14 Aug 2013 04:08:45 -0000
@@ -377,6 +377,12 @@ stge_attach(struct device *parent, struc
ifp->if_capabilities = IFCAP_VLAN_MTU;
+ /* Revision B3 and earlier chips have a checksum bug. */
+ if (sc->sc_rev >= 0x0c) {
+ ifp->if_capabilities |= IFCAP_CSUM_IPv4 | IFCAP_CSUM_TCPv4 |
+ IFCAP_CSUM_UDPv4;
+ }
+
#if NVLAN > 0
ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING;
#endif
@@ -398,14 +404,6 @@ stge_attach(struct device *parent, struc
sc->sc_DMACtrl |= DMAC_MWIDisable;
#endif
-#ifdef STGE_CHECKSUM
- /*
- * We can do IPv4/TCPv4/UDPv4 checksums in hardware.
- */
- sc->sc_arpcom.ac_if.if_capabilities |= IFCAP_CSUM_IPv4 |
- IFCAP_CSUM_TCPv4 | IFCAP_CSUM_UDPv4;
-#endif
-
/*
* Attach the interface.
*/
@@ -555,7 +553,6 @@ stge_start(struct ifnet *ifp)
totlen += dmamap->dm_segs[seg].ds_len;
}
-#ifdef STGE_CHECKSUM
/*
* Initialize checksumming flags in the descriptor.
* Byte-swap constants so the compiler can optimize.
@@ -567,7 +564,6 @@ stge_start(struct ifnet *ifp)
csum_flags |= TFD_TCPChecksumEnable;
else if (m0->m_pkthdr.csum_flags & M_UDP_CSUM_OUT)
csum_flags |= TFD_UDPChecksumEnable;
-#endif
/*
* Initialize the descriptor and give it to the chip.
--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.