Author: avos Date: Sun Jan 8 23:41:17 2017 New Revision: 311707 URL: https://svnweb.freebsd.org/changeset/base/311707
Log: rtwn_usb(4): fix Rx buffer size calculation. Use device-specific Rx buffer size to ensure that data will not be truncated + add a warning if truncation was detected (the driver cannot handle this case correctly yet). Tested with: - RTL8188CUS, RTL8188EU and RTL8821AU, STA / AP modes. Modified: head/sys/dev/rtwn/if_rtwnvar.h head/sys/dev/rtwn/usb/rtwn_usb_attach.c head/sys/dev/rtwn/usb/rtwn_usb_ep.c head/sys/dev/rtwn/usb/rtwn_usb_rx.c Modified: head/sys/dev/rtwn/if_rtwnvar.h ============================================================================== --- head/sys/dev/rtwn/if_rtwnvar.h Sun Jan 8 23:25:46 2017 (r311706) +++ head/sys/dev/rtwn/if_rtwnvar.h Sun Jan 8 23:41:17 2017 (r311707) @@ -25,7 +25,6 @@ #define RTWN_TX_DESC_SIZE 64 -#define RTWN_RXBUFSZ (8 * 1024) #define RTWN_TXBUFSZ (16 * 1024) #define RTWN_BCN_MAX_SIZE 512 Modified: head/sys/dev/rtwn/usb/rtwn_usb_attach.c ============================================================================== --- head/sys/dev/rtwn/usb/rtwn_usb_attach.c Sun Jan 8 23:25:46 2017 (r311706) +++ head/sys/dev/rtwn/usb/rtwn_usb_attach.c Sun Jan 8 23:41:17 2017 (r311707) @@ -133,8 +133,9 @@ rtwn_usb_alloc_rx_list(struct rtwn_softc struct rtwn_usb_softc *uc = RTWN_USB_SOFTC(sc); int error, i; + /* XXX recheck */ error = rtwn_usb_alloc_list(sc, uc->uc_rx, RTWN_USB_RX_LIST_COUNT, - RTWN_RXBUFSZ); + sc->rx_dma_size + 1024); if (error != 0) return (error); Modified: head/sys/dev/rtwn/usb/rtwn_usb_ep.c ============================================================================== --- head/sys/dev/rtwn/usb/rtwn_usb_ep.c Sun Jan 8 23:25:46 2017 (r311706) +++ head/sys/dev/rtwn/usb/rtwn_usb_ep.c Sun Jan 8 23:41:17 2017 (r311707) @@ -63,7 +63,6 @@ static struct usb_config rtwn_config[RTW .type = UE_BULK, .endpoint = UE_ADDR_ANY, .direction = UE_DIR_IN, - .bufsize = RTWN_RXBUFSZ, .flags = { .pipe_bof = 1, .short_xfer_ok = 1 @@ -222,6 +221,7 @@ rtwn_usb_setup_endpoints(struct rtwn_usb break; } + rtwn_config[RTWN_BULK_RX].bufsize = sc->rx_dma_size + 1024; error = usbd_transfer_setup(uc->uc_udev, &iface_index, uc->uc_xfer, rtwn_config, RTWN_N_TRANSFER, uc, &sc->sc_mtx); if (error) { Modified: head/sys/dev/rtwn/usb/rtwn_usb_rx.c ============================================================================== --- head/sys/dev/rtwn/usb/rtwn_usb_rx.c Sun Jan 8 23:25:46 2017 (r311706) +++ head/sys/dev/rtwn/usb/rtwn_usb_rx.c Sun Jan 8 23:41:17 2017 (r311707) @@ -158,8 +158,12 @@ rtwn_rxeof(struct rtwn_softc *sc, uint8_ /* Make sure everything fits in xfer. */ totlen = sizeof(*stat) + infosz + pktlen; - if (totlen > len) + if (totlen > len) { + device_printf(sc->sc_dev, + "%s: totlen (%d) > len (%d)!\n", + __func__, totlen, len); break; + } if (m0 == NULL) m0 = m = rtwn_rx_copy_to_mbuf(sc, stat, totlen); _______________________________________________ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"