Date: Thu, 19 Aug 2010 23:07:21 GMT From: Hans Petter Selasky <hselasky@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 182635 for review Message-ID: <201008192307.o7JN7LdD024843@skunkworks.freebsd.org>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008192307.o7JN7LdD024843>