summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb/net/if_axe.c
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2013-06-24 05:18:31 +0000
committeryongari <yongari@FreeBSD.org>2013-06-24 05:18:31 +0000
commit25ae538b0db6cca5ad64b4717596ad743f8fdb8c (patch)
tree15a2d773a553fcacabdb398e9b0f99777f782da1 /sys/dev/usb/net/if_axe.c
parent2478a430f6feedba08f44ddd4ccde7886c72c230 (diff)
downloadFreeBSD-src-25ae538b0db6cca5ad64b4717596ad743f8fdb8c.zip
FreeBSD-src-25ae538b0db6cca5ad64b4717596ad743f8fdb8c.tar.gz
When RX checksum offloading is active, AX88772B will prepend a
checksum header. The header contains a received frame length but the defined length for AX88772B is different with other ASIX controllers. When the RX checksum is off, AX88772B controller does not prepend a checksum header so driver has to use normal header length mask. This change should fix RX errors when RX checksum offloading is off. Tested by: kevlo MFC After: 1 week
Diffstat (limited to 'sys/dev/usb/net/if_axe.c')
-rw-r--r--sys/dev/usb/net/if_axe.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/sys/dev/usb/net/if_axe.c b/sys/dev/usb/net/if_axe.c
index d6da7c5..2660b97c 100644
--- a/sys/dev/usb/net/if_axe.c
+++ b/sys/dev/usb/net/if_axe.c
@@ -1351,15 +1351,14 @@ axe_init(struct usb_ether *ue)
if (AXE_IS_178_FAMILY(sc)) {
sc->sc_flags &= ~(AXE_FLAG_STD_FRAME | AXE_FLAG_CSUM_FRAME);
- if ((sc->sc_flags & AXE_FLAG_772B) != 0)
- sc->sc_lenmask = AXE_CSUM_HDR_LEN_MASK;
- else
- sc->sc_lenmask = AXE_HDR_LEN_MASK;
if ((sc->sc_flags & AXE_FLAG_772B) != 0 &&
- (ifp->if_capenable & IFCAP_RXCSUM) != 0)
+ (ifp->if_capenable & IFCAP_RXCSUM) != 0) {
+ sc->sc_lenmask = AXE_CSUM_HDR_LEN_MASK;
sc->sc_flags |= AXE_FLAG_CSUM_FRAME;
- else
+ } else {
+ sc->sc_lenmask = AXE_HDR_LEN_MASK;
sc->sc_flags |= AXE_FLAG_STD_FRAME;
+ }
}
/* Configure TX/RX checksum offloading. */
OpenPOWER on IntegriCloud