PERFORCE change 182635 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Thu Aug 19 23:07:22 UTC 2010
http://p4web.freebsd.org/@@182635?ac=10
Change 182635 by hselasky at 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
More information about the p4-projects
mailing list