From owner-p4-projects@FreeBSD.ORG Thu Aug 19 23:07:22 2010 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0620A1065679; Thu, 19 Aug 2010 23:07:22 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BC8E8106566C for ; Thu, 19 Aug 2010 23:07:21 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id A97B18FC14 for ; Thu, 19 Aug 2010 23:07:21 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id o7JN7Lbw024846 for ; Thu, 19 Aug 2010 23:07:21 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id o7JN7LdD024843 for perforce@freebsd.org; Thu, 19 Aug 2010 23:07:21 GMT (envelope-from hselasky@FreeBSD.org) Date: Thu, 19 Aug 2010 23:07:21 GMT Message-Id: <201008192307.o7JN7LdD024843@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 182635 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 Aug 2010 23:07:22 -0000 http://p4web.freebsd.org/@@182635?ac=10 Change 182635 by hselasky@hselasky_laptop001 on 2010/08/19 23:06:17 USB network (iPhone 3G/3GS/4G ethernet protocol): - fix some protocol issues. Affected files ... .. //depot/projects/usb/src/sys/dev/usb/net/if_ipheth.c#3 edit .. //depot/projects/usb/src/sys/dev/usb/net/if_iphethvar.h#3 edit Differences ... ==== //depot/projects/usb/src/sys/dev/usb/net/if_ipheth.c#3 (text+ko) ==== @@ -108,7 +108,7 @@ .direction = UE_DIR_TX, .frames = IPHETH_TX_FRAMES_MAX, .bufsize = (IPHETH_TX_FRAMES_MAX * IPHETH_BUF_SIZE), - .flags = {.force_short_xfer = 1,.ext_buffer = 1,}, + .flags = {.force_short_xfer = 1,}, .callback = ipheth_bulk_write_callback, .timeout = IPHETH_TX_TIMEOUT, }, @@ -387,8 +387,8 @@ { struct ipheth_softc *sc = usbd_xfer_softc(xfer); struct ifnet *ifp = uether_getifp(&sc->sc_ue); + struct usb_page_cache *pc; struct mbuf *m; - struct mbuf *mt; uint8_t x; int actlen; int aframes; @@ -417,21 +417,24 @@ if (m == NULL) break; - if (m->m_len != m->m_pkthdr.len) { - mt = m_defrag(m, M_DONTWAIT); - if (mt == NULL) { - m_freem(m); - ifp->if_oerrors++; - continue; - } - m = mt; - } - if (m->m_pkthdr.len > MCLBYTES) { - m->m_pkthdr.len = MCLBYTES; - } + usbd_xfer_set_frame_offset(xfer, + x * IPHETH_BUF_SIZE, x); + + pc = usbd_xfer_get_frame(xfer, x); + sc->sc_tx_buf[x] = m; - usbd_xfer_set_frame_data(xfer, x, m->m_data, m->m_len); + if (m->m_pkthdr.len > IPHETH_BUF_SIZE) + m->m_pkthdr.len = IPHETH_BUF_SIZE; + + usbd_m_copy_in(pc, 0, m, 0, m->m_pkthdr.len); + + usbd_xfer_set_frame_len(xfer, x, IPHETH_BUF_SIZE); + + if (IPHETH_BUF_SIZE != m->m_pkthdr.len) { + usbd_frame_zero(pc, m->m_pkthdr.len, + IPHETH_BUF_SIZE - m->m_pkthdr.len); + } /* * If there's a BPF listener, bounce a copy of @@ -488,12 +491,16 @@ sc->sc_rx_buf[x] = NULL; len = usbd_xfer_frame_len(xfer, x); - if (len < sizeof(struct ether_header)) { + if (len < (sizeof(struct ether_header) + + IPHETH_RX_ADJ)) { m_freem(m); continue; } + + m_adj(m, IPHETH_RX_ADJ); + /* queue up mbuf */ - uether_rxmbuf(&sc->sc_ue, m, len); + uether_rxmbuf(&sc->sc_ue, m, len - IPHETH_RX_ADJ); } /* FALLTHROUGH */ ==== //depot/projects/usb/src/sys/dev/usb/net/if_iphethvar.h#3 (text+ko) ==== @@ -49,6 +49,8 @@ #define IPHETH_RX_FRAMES_MAX 1 #define IPHETH_TX_FRAMES_MAX 8 +#define IPHETH_RX_ADJ 2 + #define IPHETH_CFG_INDEX 0 #define IPHETH_IF_INDEX 2 #define IPHETH_ALT_INTFNUM 1