version 1.38, 2013/01/05 01:30:15 |
version 1.38.14.2, 2014/12/23 11:24:31 |
Line 123 cdce_match(device_t parent, cfdata_t mat |
|
Line 123 cdce_match(device_t parent, cfdata_t mat |
|
struct usbif_attach_arg *uaa = aux; |
struct usbif_attach_arg *uaa = aux; |
|
|
if (cdce_lookup(uaa->vendor, uaa->product) != NULL) |
if (cdce_lookup(uaa->vendor, uaa->product) != NULL) |
return (UMATCH_VENDOR_PRODUCT); |
return UMATCH_VENDOR_PRODUCT; |
|
|
if (uaa->class == UICLASS_CDC && uaa->subclass == |
if (uaa->class == UICLASS_CDC && uaa->subclass == |
UISUBCLASS_ETHERNET_NETWORKING_CONTROL_MODEL) |
UISUBCLASS_ETHERNET_NETWORKING_CONTROL_MODEL) |
return (UMATCH_IFACECLASS_GENERIC); |
return UMATCH_IFACECLASS_GENERIC; |
|
|
return (UMATCH_NONE); |
return UMATCH_NONE; |
} |
} |
|
|
void |
void |
Line 315 cdce_detach(device_t self, int flags) |
|
Line 315 cdce_detach(device_t self, int flags) |
|
|
|
if (!sc->cdce_attached) { |
if (!sc->cdce_attached) { |
splx(s); |
splx(s); |
return (0); |
return 0; |
} |
} |
|
|
if (ifp->if_flags & IFF_RUNNING) |
if (ifp->if_flags & IFF_RUNNING) |
Line 328 cdce_detach(device_t self, int flags) |
|
Line 328 cdce_detach(device_t self, int flags) |
|
sc->cdce_attached = 0; |
sc->cdce_attached = 0; |
splx(s); |
splx(s); |
|
|
return (0); |
return 0; |
} |
} |
|
|
Static void |
Static void |
Line 379 cdce_encap(struct cdce_softc *sc, struct |
|
Line 379 cdce_encap(struct cdce_softc *sc, struct |
|
c->cdce_mbuf = m; |
c->cdce_mbuf = m; |
|
|
usbd_setup_xfer(c->cdce_xfer, sc->cdce_bulkout_pipe, c, c->cdce_buf, |
usbd_setup_xfer(c->cdce_xfer, sc->cdce_bulkout_pipe, c, c->cdce_buf, |
m->m_pkthdr.len + extra, USBD_FORCE_SHORT_XFER | USBD_NO_COPY, |
m->m_pkthdr.len + extra, USBD_FORCE_SHORT_XFER, |
10000, cdce_txeof); |
10000, cdce_txeof); |
err = usbd_transfer(c->cdce_xfer); |
err = usbd_transfer(c->cdce_xfer); |
if (err != USBD_IN_PROGRESS) { |
if (err != USBD_IN_PROGRESS) { |
cdce_stop(sc); |
cdce_stop(sc); |
return (EIO); |
return EIO; |
} |
} |
|
|
sc->cdce_cdata.cdce_tx_cnt++; |
sc->cdce_cdata.cdce_tx_cnt++; |
|
|
return (0); |
return 0; |
} |
} |
|
|
Static void |
Static void |
Line 461 cdce_ioctl(struct ifnet *ifp, u_long com |
|
Line 461 cdce_ioctl(struct ifnet *ifp, u_long com |
|
int s, error = 0; |
int s, error = 0; |
|
|
if (sc->cdce_dying) |
if (sc->cdce_dying) |
return (EIO); |
return EIO; |
|
|
s = splnet(); |
s = splnet(); |
|
|
Line 511 cdce_ioctl(struct ifnet *ifp, u_long com |
|
Line 511 cdce_ioctl(struct ifnet *ifp, u_long com |
|
if (error == ENETRESET) |
if (error == ENETRESET) |
error = 0; |
error = 0; |
|
|
return (error); |
return error; |
} |
} |
|
|
Static void |
Static void |
Line 575 cdce_init(void *xsc) |
|
Line 575 cdce_init(void *xsc) |
|
for (i = 0; i < CDCE_RX_LIST_CNT; i++) { |
for (i = 0; i < CDCE_RX_LIST_CNT; i++) { |
c = &sc->cdce_cdata.cdce_rx_chain[i]; |
c = &sc->cdce_cdata.cdce_rx_chain[i]; |
usbd_setup_xfer(c->cdce_xfer, sc->cdce_bulkin_pipe, c, |
usbd_setup_xfer(c->cdce_xfer, sc->cdce_bulkin_pipe, c, |
c->cdce_buf, CDCE_BUFSZ, USBD_SHORT_XFER_OK | USBD_NO_COPY, |
c->cdce_buf, CDCE_BUFSZ, USBD_SHORT_XFER_OK, |
USBD_NO_TIMEOUT, cdce_rxeof); |
USBD_NO_TIMEOUT, cdce_rxeof); |
usbd_transfer(c->cdce_xfer); |
usbd_transfer(c->cdce_xfer); |
} |
} |
Line 596 cdce_newbuf(struct cdce_softc *sc, struc |
|
Line 596 cdce_newbuf(struct cdce_softc *sc, struc |
|
if (m_new == NULL) { |
if (m_new == NULL) { |
printf("%s: no memory for rx list " |
printf("%s: no memory for rx list " |
"-- packet dropped!\n", device_xname(sc->cdce_dev)); |
"-- packet dropped!\n", device_xname(sc->cdce_dev)); |
return (ENOBUFS); |
return ENOBUFS; |
} |
} |
MCLGET(m_new, M_DONTWAIT); |
MCLGET(m_new, M_DONTWAIT); |
if (!(m_new->m_flags & M_EXT)) { |
if (!(m_new->m_flags & M_EXT)) { |
printf("%s: no memory for rx list " |
printf("%s: no memory for rx list " |
"-- packet dropped!\n", device_xname(sc->cdce_dev)); |
"-- packet dropped!\n", device_xname(sc->cdce_dev)); |
m_freem(m_new); |
m_freem(m_new); |
return (ENOBUFS); |
return ENOBUFS; |
} |
} |
m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; |
m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; |
} else { |
} else { |
Line 612 cdce_newbuf(struct cdce_softc *sc, struc |
|
Line 612 cdce_newbuf(struct cdce_softc *sc, struc |
|
m_new->m_data = m_new->m_ext.ext_buf; |
m_new->m_data = m_new->m_ext.ext_buf; |
} |
} |
c->cdce_mbuf = m_new; |
c->cdce_mbuf = m_new; |
return (0); |
return 0; |
} |
} |
|
|
Static int |
Static int |
Line 628 cdce_rx_list_init(struct cdce_softc *sc) |
|
Line 628 cdce_rx_list_init(struct cdce_softc *sc) |
|
c->cdce_sc = sc; |
c->cdce_sc = sc; |
c->cdce_idx = i; |
c->cdce_idx = i; |
if (cdce_newbuf(sc, c, NULL) == ENOBUFS) |
if (cdce_newbuf(sc, c, NULL) == ENOBUFS) |
return (ENOBUFS); |
return ENOBUFS; |
if (c->cdce_xfer == NULL) { |
if (c->cdce_xfer == NULL) { |
c->cdce_xfer = usbd_alloc_xfer(sc->cdce_udev); |
c->cdce_xfer = usbd_alloc_xfer(sc->cdce_udev); |
if (c->cdce_xfer == NULL) |
if (c->cdce_xfer == NULL) |
return (ENOBUFS); |
return ENOBUFS; |
c->cdce_buf = usbd_alloc_buffer(c->cdce_xfer, |
c->cdce_buf = usbd_alloc_buffer(c->cdce_xfer, |
CDCE_BUFSZ); |
CDCE_BUFSZ); |
if (c->cdce_buf == NULL) |
if (c->cdce_buf == NULL) |
return (ENOBUFS); |
return ENOBUFS; |
} |
} |
} |
} |
|
|
return (0); |
return 0; |
} |
} |
|
|
Static int |
Static int |
Line 659 cdce_tx_list_init(struct cdce_softc *sc) |
|
Line 659 cdce_tx_list_init(struct cdce_softc *sc) |
|
if (c->cdce_xfer == NULL) { |
if (c->cdce_xfer == NULL) { |
c->cdce_xfer = usbd_alloc_xfer(sc->cdce_udev); |
c->cdce_xfer = usbd_alloc_xfer(sc->cdce_udev); |
if (c->cdce_xfer == NULL) |
if (c->cdce_xfer == NULL) |
return (ENOBUFS); |
return ENOBUFS; |
c->cdce_buf = usbd_alloc_buffer(c->cdce_xfer, CDCE_BUFSZ); |
c->cdce_buf = usbd_alloc_buffer(c->cdce_xfer, CDCE_BUFSZ); |
if (c->cdce_buf == NULL) |
if (c->cdce_buf == NULL) |
return (ENOBUFS); |
return ENOBUFS; |
} |
} |
} |
} |
|
|
return (0); |
return 0; |
} |
} |
|
|
Static void |
Static void |
|
|
done: |
done: |
/* Setup new transfer. */ |
/* Setup new transfer. */ |
usbd_setup_xfer(c->cdce_xfer, sc->cdce_bulkin_pipe, c, c->cdce_buf, |
usbd_setup_xfer(c->cdce_xfer, sc->cdce_bulkin_pipe, c, c->cdce_buf, |
CDCE_BUFSZ, USBD_SHORT_XFER_OK | USBD_NO_COPY, USBD_NO_TIMEOUT, |
CDCE_BUFSZ, USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT, |
cdce_rxeof); |
cdce_rxeof); |
usbd_transfer(c->cdce_xfer); |
usbd_transfer(c->cdce_xfer); |
} |
} |