Module Name: src Committed By: martin Date: Tue Feb 19 15:09:52 UTC 2019
Modified Files: src/sys/dev/usb [netbsd-8]: if_axen.c if_axenreg.h Log Message: Pull up following revision(s) (requested by rin in ticket #1192): sys/dev/usb/if_axen.c: revision 1.27 sys/dev/usb/if_axenreg.h: revision 1.6 sys/dev/usb/if_axen.c: revision 1.32 sys/dev/usb/if_axen.c: revision 1.35 sys/dev/usb/if_axen.c: revision 1.37 sys/dev/usb/if_axenreg.h: revision 1.10 sys/dev/usb/if_axenreg.h: revision 1.11 sys/dev/usb/if_axen.c: revision 1.24 Correct error bits in RX packet header: - Drop error is bit 31. - CRC error is bit 29. - Distinguish the two errors in debug printf. Cosmetic changes; no functional changes. Add couple of error printf. XXX We should not to use aprint_xxx() for non-autoconf staffs. Add ratecheck for TX errors for axen(4) and mue(4). Remove unused. To generate a diff of this commit: cvs rdiff -u -r1.11.8.5 -r1.11.8.6 src/sys/dev/usb/if_axen.c cvs rdiff -u -r1.3.10.1 -r1.3.10.2 src/sys/dev/usb/if_axenreg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/usb/if_axen.c diff -u src/sys/dev/usb/if_axen.c:1.11.8.5 src/sys/dev/usb/if_axen.c:1.11.8.6 --- src/sys/dev/usb/if_axen.c:1.11.8.5 Tue Feb 19 15:05:52 2019 +++ src/sys/dev/usb/if_axen.c Tue Feb 19 15:09:51 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: if_axen.c,v 1.11.8.5 2019/02/19 15:05:52 martin Exp $ */ +/* $NetBSD: if_axen.c,v 1.11.8.6 2019/02/19 15:09:51 martin Exp $ */ /* $OpenBSD: if_axen.c,v 1.3 2013/10/21 10:10:22 yuo Exp $ */ /* @@ -23,7 +23,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_axen.c,v 1.11.8.5 2019/02/19 15:05:52 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_axen.c,v 1.11.8.6 2019/02/19 15:09:51 martin Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -950,7 +950,6 @@ axen_rx_list_init(struct axen_softc *sc) for (i = 0; i < AXEN_RX_LIST_CNT; i++) { c = &cd->axen_rx_chain[i]; c->axen_sc = sc; - c->axen_idx = i; if (c->axen_xfer == NULL) { int err = usbd_create_xfer(sc->axen_ep[AXEN_ENDPT_RX], sc->axen_rx_bufsz, 0, 0, &c->axen_xfer); @@ -976,7 +975,6 @@ axen_tx_list_init(struct axen_softc *sc) for (i = 0; i < AXEN_TX_LIST_CNT; i++) { c = &cd->axen_tx_chain[i]; c->axen_sc = sc; - c->axen_idx = i; if (c->axen_xfer == NULL) { int err = usbd_create_xfer(sc->axen_ep[AXEN_ENDPT_TX], sc->axen_tx_bufsz, USBD_FORCE_SHORT_XFER, 0, @@ -1021,10 +1019,9 @@ axen_rxeof(struct usbd_xfer *xfer, void if (status != USBD_NORMAL_COMPLETION) { if (status == USBD_NOT_STARTED || status == USBD_CANCELLED) return; - if (usbd_ratecheck(&sc->axen_rx_notice)) { + if (usbd_ratecheck(&sc->axen_rx_notice)) aprint_error_dev(sc->axen_dev, "usb errors on rx: %s\n", usbd_errstr(status)); - } if (status == USBD_STALLED) usbd_clear_endpoint_stall_async(sc->axen_ep[AXEN_ENDPT_RX]); goto done; @@ -1033,6 +1030,7 @@ axen_rxeof(struct usbd_xfer *xfer, void usbd_get_xfer_status(xfer, NULL, NULL, &total_len, NULL); if (total_len < sizeof(pkt_hdr)) { + aprint_error_dev(sc->axen_dev, "rxeof: too short transfer\n"); ifp->if_ierrors++; goto done; } @@ -1054,6 +1052,7 @@ axen_rxeof(struct usbd_xfer *xfer, void /* sanity check */ if (hdr_offset > total_len) { + aprint_error_dev(sc->axen_dev, "rxeof: invalid hdr offset\n"); ifp->if_ierrors++; usbd_delay_ms(sc->axen_udev, 100); goto done; @@ -1090,12 +1089,13 @@ axen_rxeof(struct usbd_xfer *xfer, void ("%s: rxeof: packet#%d, pkt_hdr 0x%08x, pkt_len %zu\n", device_xname(sc->axen_dev), pkt_count, pkt_hdr, pkt_len)); - if ((pkt_hdr & AXEN_RXHDR_CRC_ERR) || - (pkt_hdr & AXEN_RXHDR_DROP_ERR)) { + if (pkt_hdr & (AXEN_RXHDR_CRC_ERR | AXEN_RXHDR_DROP_ERR)) { ifp->if_ierrors++; /* move to next pkt header */ - DPRINTF(("%s: crc err (pkt#%d)\n", - device_xname(sc->axen_dev), pkt_count)); + DPRINTF(("%s: %s err (pkt#%d)\n", + device_xname(sc->axen_dev), + (pkt_hdr & AXEN_RXHDR_CRC_ERR) ? "crc" : "drop", + pkt_count)); goto nextpkt; } @@ -1208,8 +1208,9 @@ axen_txeof(struct usbd_xfer *xfer, void return; } ifp->if_oerrors++; - aprint_error_dev(sc->axen_dev, "usb error on tx: %s\n", - usbd_errstr(status)); + if (usbd_ratecheck(&sc->axen_tx_notice)) + aprint_error_dev(sc->axen_dev, "usb error on tx: %s\n", + usbd_errstr(status)); if (status == USBD_STALLED) usbd_clear_endpoint_stall_async(sc->axen_ep[AXEN_ENDPT_TX]); splx(s); @@ -1547,6 +1548,7 @@ static void axen_stop(struct ifnet *ifp, int disable) { struct axen_softc *sc = ifp->if_softc; + struct axen_chain *c; usbd_status err; int i; uint16_t rxmode, wval; @@ -1595,17 +1597,19 @@ axen_stop(struct ifnet *ifp, int disable /* Free RX resources. */ for (i = 0; i < AXEN_RX_LIST_CNT; i++) { - if (sc->axen_cdata.axen_rx_chain[i].axen_xfer != NULL) { - usbd_destroy_xfer(sc->axen_cdata.axen_rx_chain[i].axen_xfer); - sc->axen_cdata.axen_rx_chain[i].axen_xfer = NULL; + c = &sc->axen_cdata.axen_rx_chain[i]; + if (c->axen_xfer != NULL) { + usbd_destroy_xfer(c->axen_xfer); + c->axen_xfer = NULL; } } /* Free TX resources. */ for (i = 0; i < AXEN_TX_LIST_CNT; i++) { - if (sc->axen_cdata.axen_tx_chain[i].axen_xfer != NULL) { - usbd_destroy_xfer(sc->axen_cdata.axen_tx_chain[i].axen_xfer); - sc->axen_cdata.axen_tx_chain[i].axen_xfer = NULL; + c = &sc->axen_cdata.axen_tx_chain[i]; + if (c->axen_xfer != NULL) { + usbd_destroy_xfer(c->axen_xfer); + c->axen_xfer = NULL; } } Index: src/sys/dev/usb/if_axenreg.h diff -u src/sys/dev/usb/if_axenreg.h:1.3.10.1 src/sys/dev/usb/if_axenreg.h:1.3.10.2 --- src/sys/dev/usb/if_axenreg.h:1.3.10.1 Tue Feb 19 15:05:52 2019 +++ src/sys/dev/usb/if_axenreg.h Tue Feb 19 15:09:51 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: if_axenreg.h,v 1.3.10.1 2019/02/19 15:05:52 martin Exp $ */ +/* $NetBSD: if_axenreg.h,v 1.3.10.2 2019/02/19 15:09:51 martin Exp $ */ /* $OpenBSD: if_axenreg.h,v 1.1 2013/10/07 05:37:41 yuo Exp $ */ /* @@ -30,8 +30,8 @@ * | | ++-----L3_type (1:ipv4, 0/2:ipv6) * pkt_len(13) | | ||+ ++-L4_type(0: icmp, 1: UDP, 4: TCP) * |765|43210 76543210|7654 3210 7654 3210| - * |+-Drop_err |+-L4_err |+-L4_CSUM_ERR - * +--crc_err +--L3_err +--L3_CSUM_ERR + * | +-crc_err |+-L4_err |+-L4_CSUM_ERR + * +--drop_err +--L3_err +--L3_CSUM_ERR * * ex) pkt_hdr 0x00680820 * drop_err, crc_err: none @@ -55,8 +55,8 @@ * 0x0850: ipv6 tcp (ssh) 0000 1000 0101 0000 */ -#define AXEN_RXHDR_CRC_ERR (1 << 31) -#define AXEN_RXHDR_DROP_ERR (1 << 30) +#define AXEN_RXHDR_DROP_ERR (1 << 31) +#define AXEN_RXHDR_CRC_ERR (1 << 29) #define AXEN_RXHDR_MCAST (1 << 15) #define AXEN_RXHDR_RX_OK (1 << 11) #define AXEN_RXHDR_L3_ERR (1 << 9) @@ -239,17 +239,13 @@ struct axen_chain { struct axen_softc *axen_sc; struct usbd_xfer *axen_xfer; uint8_t *axen_buf; - int axen_accum; - int axen_idx; }; struct axen_cdata { struct axen_chain axen_tx_chain[AXEN_TX_LIST_CNT]; struct axen_chain axen_rx_chain[AXEN_RX_LIST_CNT]; int axen_tx_prod; - int axen_tx_cons; int axen_tx_cnt; - int axen_rx_prod; }; struct axen_qctrl { @@ -296,6 +292,7 @@ struct axen_softc { uint8_t axen_ipgs[3]; int axen_phyno; struct timeval axen_rx_notice; + struct timeval axen_tx_notice; u_int axen_rx_bufsz; u_int axen_tx_bufsz; int axen_rev;