diff options
author | sobomax <sobomax@FreeBSD.org> | 2005-03-25 00:44:21 +0000 |
---|---|---|
committer | sobomax <sobomax@FreeBSD.org> | 2005-03-25 00:44:21 +0000 |
commit | 20ed90b9011d0f1fc0b8e3451704cadc18017d21 (patch) | |
tree | d9c6670400f80fe7f04c24108433cf982d7b148b | |
parent | b1a03beb9ba3fc1db597deb178c280f3c57c1eb4 (diff) | |
download | FreeBSD-src-20ed90b9011d0f1fc0b8e3451704cadc18017d21.zip FreeBSD-src-20ed90b9011d0f1fc0b8e3451704cadc18017d21.tar.gz |
Move xxx_newbuf() function, which was the same in all drivers into central
location.
-rw-r--r-- | sys/dev/usb/if_aue.c | 44 | ||||
-rw-r--r-- | sys/dev/usb/if_auereg.h | 1 | ||||
-rw-r--r-- | sys/dev/usb/if_axe.c | 35 | ||||
-rw-r--r-- | sys/dev/usb/if_cdce.c | 32 | ||||
-rw-r--r-- | sys/dev/usb/if_cue.c | 44 | ||||
-rw-r--r-- | sys/dev/usb/if_cuereg.h | 1 | ||||
-rw-r--r-- | sys/dev/usb/if_kue.c | 43 | ||||
-rw-r--r-- | sys/dev/usb/if_kuereg.h | 1 | ||||
-rw-r--r-- | sys/dev/usb/if_rue.c | 45 | ||||
-rw-r--r-- | sys/dev/usb/if_ruereg.h | 1 | ||||
-rw-r--r-- | sys/dev/usb/if_udav.c | 45 | ||||
-rw-r--r-- | sys/dev/usb/usb_ethersubr.c | 17 | ||||
-rw-r--r-- | sys/dev/usb/usb_ethersubr.h | 1 |
13 files changed, 56 insertions, 254 deletions
diff --git a/sys/dev/usb/if_aue.c b/sys/dev/usb/if_aue.c index 9588bf8..738dfbf 100644 --- a/sys/dev/usb/if_aue.c +++ b/sys/dev/usb/if_aue.c @@ -183,7 +183,6 @@ Static int aue_detach(device_ptr_t); Static void aue_reset_pegasus_II(struct aue_softc *sc); Static int aue_tx_list_init(struct aue_softc *); Static int aue_rx_list_init(struct aue_softc *); -Static int aue_newbuf(struct aue_softc *, struct aue_chain *, struct mbuf *); Static int aue_encap(struct aue_softc *, struct mbuf *, int); #ifdef AUE_INTR_PIPE Static void aue_intr(usbd_xfer_handle, usbd_private_handle, usbd_status); @@ -649,6 +648,7 @@ USB_ATTACH(aue) usbd_devinfo(uaa->device, 0, devinfo); + sc->aue_dev = self; sc->aue_udev = uaa->device; sc->aue_unit = device_get_unit(self); @@ -803,42 +803,6 @@ aue_detach(device_ptr_t dev) return (0); } -/* - * Initialize an RX descriptor and attach an MBUF cluster. - */ -Static int -aue_newbuf(struct aue_softc *sc, struct aue_chain *c, struct mbuf *m) -{ - struct mbuf *m_new = NULL; - - if (m == NULL) { - MGETHDR(m_new, M_DONTWAIT, MT_DATA); - if (m_new == NULL) { - printf("aue%d: no memory for rx list " - "-- packet dropped!\n", sc->aue_unit); - return (ENOBUFS); - } - - MCLGET(m_new, M_DONTWAIT); - if (!(m_new->m_flags & M_EXT)) { - printf("aue%d: no memory for rx list " - "-- packet dropped!\n", sc->aue_unit); - m_freem(m_new); - return (ENOBUFS); - } - m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; - } else { - m_new = m; - m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; - m_new->m_data = m_new->m_ext.ext_buf; - } - - m_adj(m_new, ETHER_ALIGN); - c->aue_mbuf = m_new; - - return (0); -} - Static int aue_rx_list_init(struct aue_softc *sc) { @@ -851,7 +815,8 @@ aue_rx_list_init(struct aue_softc *sc) c = &cd->aue_rx_chain[i]; c->aue_sc = sc; c->aue_idx = i; - if (aue_newbuf(sc, c, NULL) == ENOBUFS) + c->aue_mbuf = usb_ether_newbuf(USBDEVNAME(sc->aue_dev)); + if (c->aue_mbuf == NULL) return (ENOBUFS); if (c->aue_xfer == NULL) { c->aue_xfer = usbd_alloc_xfer(sc->aue_udev); @@ -941,7 +906,8 @@ aue_rxstart(struct ifnet *ifp) AUE_LOCK(sc); c = &sc->aue_cdata.aue_rx_chain[sc->aue_cdata.aue_rx_prod]; - if (aue_newbuf(sc, c, NULL) == ENOBUFS) { + c->aue_mbuf = usb_ether_newbuf(USBDEVNAME(sc->aue_dev)); + if (c->aue_mbuf == NULL) { ifp->if_ierrors++; AUE_UNLOCK(sc); return; diff --git a/sys/dev/usb/if_auereg.h b/sys/dev/usb/if_auereg.h index eaa587a..6c445dd 100644 --- a/sys/dev/usb/if_auereg.h +++ b/sys/dev/usb/if_auereg.h @@ -230,6 +230,7 @@ struct aue_softc { #define GET_MII(sc) (&(sc)->aue_mii) #endif struct arpcom arpcom; + device_t aue_dev; device_t aue_miibus; usbd_device_handle aue_udev; usbd_interface_handle aue_iface; diff --git a/sys/dev/usb/if_axe.c b/sys/dev/usb/if_axe.c index ed1c046..141c7dc 100644 --- a/sys/dev/usb/if_axe.c +++ b/sys/dev/usb/if_axe.c @@ -126,7 +126,6 @@ Static int axe_detach(device_ptr_t); Static int axe_tx_list_init(struct axe_softc *); Static int axe_rx_list_init(struct axe_softc *); -Static int axe_newbuf(struct axe_softc *, struct axe_chain *, struct mbuf *); Static int axe_encap(struct axe_softc *, struct mbuf *, int); Static void axe_rxeof(usbd_xfer_handle, usbd_private_handle, usbd_status); Static void axe_txeof(usbd_xfer_handle, usbd_private_handle, usbd_status); @@ -562,34 +561,6 @@ axe_detach(device_ptr_t dev) return(0); } -/* - * Initialize an RX descriptor and attach an MBUF cluster. - */ -Static int -axe_newbuf(struct axe_softc *sc, struct axe_chain *c, struct mbuf *m) -{ - struct mbuf *m_new = NULL; - - if (m == NULL) { - m_new = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); - if (m_new == NULL) { - printf("axe%d: no memory for rx list " - "-- packet dropped!\n", sc->axe_unit); - return(ENOBUFS); - } - m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; - } else { - m_new = m; - m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; - m_new->m_data = m_new->m_ext.ext_buf; - } - - m_adj(m_new, ETHER_ALIGN); - c->axe_mbuf = m_new; - - return(0); -} - Static int axe_rx_list_init(struct axe_softc *sc) { @@ -602,7 +573,8 @@ axe_rx_list_init(struct axe_softc *sc) c = &cd->axe_rx_chain[i]; c->axe_sc = sc; c->axe_idx = i; - if (axe_newbuf(sc, c, NULL) == ENOBUFS) + c->axe_mbuf = usb_ether_newbuf(USBDEVNAME(sc->axe_dev)); + if (c->axe_mbuf == NULL) return(ENOBUFS); if (c->axe_xfer == NULL) { c->axe_xfer = usbd_alloc_xfer(sc->axe_udev); @@ -650,7 +622,8 @@ axe_rxstart(struct ifnet *ifp) AXE_LOCK(sc); c = &sc->axe_cdata.axe_rx_chain[sc->axe_cdata.axe_rx_prod]; - if (axe_newbuf(sc, c, NULL) == ENOBUFS) { + c->axe_mbuf = usb_ether_newbuf(USBDEVNAME(sc->axe_dev)); + if (c->axe_mbuf == NULL) { ifp->if_ierrors++; AXE_UNLOCK(sc); return; diff --git a/sys/dev/usb/if_cdce.c b/sys/dev/usb/if_cdce.c index 7991d99..45b2216 100644 --- a/sys/dev/usb/if_cdce.c +++ b/sys/dev/usb/if_cdce.c @@ -83,8 +83,6 @@ MODULE_VERSION(cdce, 0); Static int cdce_tx_list_init(struct cdce_softc *); Static int cdce_rx_list_init(struct cdce_softc *); -Static int cdce_newbuf(struct cdce_softc *, struct cdce_chain *, - struct mbuf *); Static int cdce_encap(struct cdce_softc *, struct mbuf *, int); Static void cdce_rxeof(usbd_xfer_handle, usbd_private_handle, usbd_status); Static void cdce_txeof(usbd_xfer_handle, usbd_private_handle, usbd_status); @@ -582,30 +580,6 @@ cdce_init(void *xsc) } Static int -cdce_newbuf(struct cdce_softc *sc, struct cdce_chain *c, struct mbuf *m) -{ - struct mbuf *m_new = NULL; - - if (m == NULL) { - m_new = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); - if (m_new == NULL) { - printf("%s: no memory for rx list " - "-- packet dropped!\n", USBDEVNAME(sc->cdce_dev)); - return (ENOBUFS); - } - m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; - } else { - m_new = m; - m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; - m_new->m_data = m_new->m_ext.ext_buf; - } - - m_adj(m_new, ETHER_ALIGN); - c->cdce_mbuf = m_new; - return (0); -} - -Static int cdce_rx_list_init(struct cdce_softc *sc) { struct cdce_cdata *cd; @@ -617,7 +591,8 @@ cdce_rx_list_init(struct cdce_softc *sc) c = &cd->cdce_rx_chain[i]; c->cdce_sc = sc; c->cdce_idx = i; - if (cdce_newbuf(sc, c, NULL) == ENOBUFS) + c->cdce_mbuf = usb_ether_newbuf(USBDEVNAME(sc->cdce_dev)); + if (c->cdce_mbuf == NULL) return (ENOBUFS); if (c->cdce_xfer == NULL) { c->cdce_xfer = usbd_alloc_xfer(sc->cdce_udev); @@ -792,7 +767,8 @@ cdce_rxstart(struct ifnet *ifp) c = &sc->cdce_cdata.cdce_rx_chain[sc->cdce_cdata.cdce_rx_prod]; - if (cdce_newbuf(sc, c, NULL) == ENOBUFS) { + c->cdce_mbuf = usb_ether_newbuf(USBDEVNAME(sc->cdce_dev)); + if (c->cdce_mbuf == NULL) { ifp->if_ierrors++; CDCE_UNLOCK(sc); return; diff --git a/sys/dev/usb/if_cue.c b/sys/dev/usb/if_cue.c index e379428..70e5b75 100644 --- a/sys/dev/usb/if_cue.c +++ b/sys/dev/usb/if_cue.c @@ -98,7 +98,6 @@ Static int cue_detach(device_ptr_t); Static int cue_tx_list_init(struct cue_softc *); Static int cue_rx_list_init(struct cue_softc *); -Static int cue_newbuf(struct cue_softc *, struct cue_chain *, struct mbuf *); Static int cue_encap(struct cue_softc *, struct mbuf *, int); Static void cue_rxeof(usbd_xfer_handle, usbd_private_handle, usbd_status); Static void cue_txeof(usbd_xfer_handle, usbd_private_handle, usbd_status); @@ -450,6 +449,7 @@ USB_ATTACH(cue) int i; bzero(sc, sizeof(struct cue_softc)); + sc->cue_dev = self; sc->cue_iface = uaa->iface; sc->cue_udev = uaa->device; sc->cue_unit = device_get_unit(self); @@ -568,42 +568,6 @@ cue_detach(device_ptr_t dev) return(0); } -/* - * Initialize an RX descriptor and attach an MBUF cluster. - */ -Static int -cue_newbuf(struct cue_softc *sc, struct cue_chain *c, struct mbuf *m) -{ - struct mbuf *m_new = NULL; - - if (m == NULL) { - MGETHDR(m_new, M_DONTWAIT, MT_DATA); - if (m_new == NULL) { - printf("cue%d: no memory for rx list " - "-- packet dropped!\n", sc->cue_unit); - return(ENOBUFS); - } - - MCLGET(m_new, M_DONTWAIT); - if (!(m_new->m_flags & M_EXT)) { - printf("cue%d: no memory for rx list " - "-- packet dropped!\n", sc->cue_unit); - m_freem(m_new); - return(ENOBUFS); - } - m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; - } else { - m_new = m; - m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; - m_new->m_data = m_new->m_ext.ext_buf; - } - - m_adj(m_new, ETHER_ALIGN); - c->cue_mbuf = m_new; - - return(0); -} - Static int cue_rx_list_init(struct cue_softc *sc) { @@ -616,7 +580,8 @@ cue_rx_list_init(struct cue_softc *sc) c = &cd->cue_rx_chain[i]; c->cue_sc = sc; c->cue_idx = i; - if (cue_newbuf(sc, c, NULL) == ENOBUFS) + c->cue_mbuf = usb_ether_newbuf(USBDEVNAME(sc->cue_dev)); + if (c->cue_mbuf == NULL) return(ENOBUFS); if (c->cue_xfer == NULL) { c->cue_xfer = usbd_alloc_xfer(sc->cue_udev); @@ -664,7 +629,8 @@ cue_rxstart(struct ifnet *ifp) CUE_LOCK(sc); c = &sc->cue_cdata.cue_rx_chain[sc->cue_cdata.cue_rx_prod]; - if (cue_newbuf(sc, c, NULL) == ENOBUFS) { + c->cue_mbuf = usb_ether_newbuf(USBDEVNAME(sc->cue_dev)); + if (c->cue_mbuf == NULL) { ifp->if_ierrors++; CUE_UNLOCK(sc); return; diff --git a/sys/dev/usb/if_cuereg.h b/sys/dev/usb/if_cuereg.h index 85fc71e..21af042 100644 --- a/sys/dev/usb/if_cuereg.h +++ b/sys/dev/usb/if_cuereg.h @@ -167,6 +167,7 @@ struct cue_cdata { struct cue_softc { struct arpcom arpcom; + device_t cue_dev; usbd_device_handle cue_udev; usbd_interface_handle cue_iface; int cue_ed[CUE_ENDPT_MAX]; diff --git a/sys/dev/usb/if_kue.c b/sys/dev/usb/if_kue.c index 9a4258b..3bc8f4e 100644 --- a/sys/dev/usb/if_kue.c +++ b/sys/dev/usb/if_kue.c @@ -132,7 +132,6 @@ Static int kue_detach(device_ptr_t); Static void kue_shutdown(device_ptr_t); Static int kue_tx_list_init(struct kue_softc *); Static int kue_rx_list_init(struct kue_softc *); -Static int kue_newbuf(struct kue_softc *, struct kue_chain *, struct mbuf *); Static int kue_encap(struct kue_softc *, struct mbuf *, int); Static void kue_rxeof(usbd_xfer_handle, usbd_private_handle, usbd_status); Static void kue_txeof(usbd_xfer_handle, usbd_private_handle, usbd_status); @@ -419,6 +418,7 @@ USB_ATTACH(kue) int i; bzero(sc, sizeof(struct kue_softc)); + sc->kue_dev = self; sc->kue_iface = uaa->iface; sc->kue_udev = uaa->device; sc->kue_unit = device_get_unit(self); @@ -546,41 +546,6 @@ kue_detach(device_ptr_t dev) return(0); } -/* - * Initialize an RX descriptor and attach an MBUF cluster. - */ -Static int -kue_newbuf(struct kue_softc *sc, struct kue_chain *c, struct mbuf *m) -{ - struct mbuf *m_new = NULL; - - if (m == NULL) { - MGETHDR(m_new, M_DONTWAIT, MT_DATA); - if (m_new == NULL) { - printf("kue%d: no memory for rx list " - "-- packet dropped!\n", sc->kue_unit); - return(ENOBUFS); - } - - MCLGET(m_new, M_DONTWAIT); - if (!(m_new->m_flags & M_EXT)) { - printf("kue%d: no memory for rx list " - "-- packet dropped!\n", sc->kue_unit); - m_freem(m_new); - return(ENOBUFS); - } - m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; - } else { - m_new = m; - m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; - m_new->m_data = m_new->m_ext.ext_buf; - } - - c->kue_mbuf = m_new; - - return(0); -} - Static int kue_rx_list_init(struct kue_softc *sc) { @@ -593,7 +558,8 @@ kue_rx_list_init(struct kue_softc *sc) c = &cd->kue_rx_chain[i]; c->kue_sc = sc; c->kue_idx = i; - if (kue_newbuf(sc, c, NULL) == ENOBUFS) + c->kue_mbuf = usb_ether_newbuf(USBDEVNAME(sc->kue_dev)); + if (c->kue_mbuf == NULL) return(ENOBUFS); if (c->kue_xfer == NULL) { c->kue_xfer = usbd_alloc_xfer(sc->kue_udev); @@ -641,7 +607,8 @@ kue_rxstart(struct ifnet *ifp) KUE_LOCK(sc); c = &sc->kue_cdata.kue_rx_chain[sc->kue_cdata.kue_rx_prod]; - if (kue_newbuf(sc, c, NULL) == ENOBUFS) { + c->kue_mbuf = usb_ether_newbuf(USBDEVNAME(sc->kue_dev)); + if (c->kue_mbuf == NULL) { ifp->if_ierrors++; return; } diff --git a/sys/dev/usb/if_kuereg.h b/sys/dev/usb/if_kuereg.h index 5ea0226..102ccd3 100644 --- a/sys/dev/usb/if_kuereg.h +++ b/sys/dev/usb/if_kuereg.h @@ -159,6 +159,7 @@ struct kue_cdata { struct kue_softc { struct arpcom arpcom; + device_t kue_dev; usbd_device_handle kue_udev; usbd_interface_handle kue_iface; struct kue_ether_desc kue_desc; diff --git a/sys/dev/usb/if_rue.c b/sys/dev/usb/if_rue.c index e4ffd81..a5adaf6 100644 --- a/sys/dev/usb/if_rue.c +++ b/sys/dev/usb/if_rue.c @@ -134,7 +134,6 @@ Static int rue_detach(device_ptr_t); Static int rue_tx_list_init(struct rue_softc *); Static int rue_rx_list_init(struct rue_softc *); -Static int rue_newbuf(struct rue_softc *, struct rue_chain *, struct mbuf *); Static int rue_encap(struct rue_softc *, struct mbuf *, int); #ifdef RUE_INTR_PIPE Static void rue_intr(usbd_xfer_handle, usbd_private_handle, usbd_status); @@ -584,6 +583,7 @@ USB_ATTACH(rue) bzero(sc, sizeof (struct rue_softc)); usbd_devinfo(uaa->device, 0, devinfo); + sc->rue_dev = self; sc->rue_udev = uaa->device; sc->rue_unit = device_get_unit(self); @@ -738,43 +738,6 @@ rue_detach(device_ptr_t dev) return (0); } -/* - * Initialize an RX descriptor and attach an MBUF cluster. - */ - -Static int -rue_newbuf(struct rue_softc *sc, struct rue_chain *c, struct mbuf *m) -{ - struct mbuf *m_new = NULL; - - if (m == NULL) { - MGETHDR(m_new, M_DONTWAIT, MT_DATA); - if (m_new == NULL) { - printf("rue%d: no memory for rx list " - "-- packet dropped!\n", sc->rue_unit); - return (ENOBUFS); - } - - MCLGET(m_new, M_DONTWAIT); - if (!(m_new->m_flags & M_EXT)) { - printf("rue%d: no memory for rx list " - "-- packet dropped!\n", sc->rue_unit); - m_freem(m_new); - return (ENOBUFS); - } - m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; - } else { - m_new = m; - m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; - m_new->m_data = m_new->m_ext.ext_buf; - } - - m_adj(m_new, ETHER_ALIGN); - c->rue_mbuf = m_new; - - return (0); -} - Static int rue_rx_list_init(struct rue_softc *sc) { @@ -787,7 +750,8 @@ rue_rx_list_init(struct rue_softc *sc) c = &cd->rue_rx_chain[i]; c->rue_sc = sc; c->rue_idx = i; - if (rue_newbuf(sc, c, NULL) == ENOBUFS) + c->rue_mbuf = usb_ether_newbuf(USBDEVNAME(sc->rue_dev)); + if (c->rue_mbuf == NULL) return (ENOBUFS); if (c->rue_xfer == NULL) { c->rue_xfer = usbd_alloc_xfer(sc->rue_udev); @@ -874,7 +838,8 @@ rue_rxstart(struct ifnet *ifp) RUE_LOCK(sc); c = &sc->rue_cdata.rue_rx_chain[sc->rue_cdata.rue_rx_prod]; - if (rue_newbuf(sc, c, NULL) == ENOBUFS) { + c->rue_mbuf = usb_ether_newbuf(USBDEVNAME(sc->rue_dev)); + if (c->rue_mbuf == NULL) { ifp->if_ierrors++; RUE_UNLOCK(sc); return; diff --git a/sys/dev/usb/if_ruereg.h b/sys/dev/usb/if_ruereg.h index f381828..df87687 100644 --- a/sys/dev/usb/if_ruereg.h +++ b/sys/dev/usb/if_ruereg.h @@ -212,6 +212,7 @@ struct rue_cdata { struct rue_softc { struct arpcom arpcom; + device_t rue_dev; device_t rue_miibus; usbd_device_handle rue_udev; usbd_interface_handle rue_iface; diff --git a/sys/dev/usb/if_udav.c b/sys/dev/usb/if_udav.c index 96ef08f..93180a1 100644 --- a/sys/dev/usb/if_udav.c +++ b/sys/dev/usb/if_udav.c @@ -161,7 +161,6 @@ Static void udav_shutdown(device_ptr_t); Static int udav_openpipes(struct udav_softc *); Static int udav_rx_list_init(struct udav_softc *); Static int udav_tx_list_init(struct udav_softc *); -Static int udav_newbuf(struct udav_softc *, struct udav_chain *, struct mbuf *); Static void udav_start(struct ifnet *); Static int udav_send(struct udav_softc *, struct mbuf *, int); Static void udav_txeof(usbd_xfer_handle, usbd_private_handle, usbd_status); @@ -1127,41 +1126,6 @@ udav_openpipes(struct udav_softc *sc) } Static int -udav_newbuf(struct udav_softc *sc, struct udav_chain *c, struct mbuf *m) -{ - struct mbuf *m_new = NULL; - - DPRINTF(("%s: %s: enter\n", USBDEVNAME(sc->sc_dev), __func__)); - - if (m == NULL) { - MGETHDR(m_new, M_DONTWAIT, MT_DATA); - if (m_new == NULL) { - printf("%s: no memory for rx list " - "-- packet dropped!\n", USBDEVNAME(sc->sc_dev)); - return (ENOBUFS); - } - MCLGET(m_new, M_DONTWAIT); - if (!(m_new->m_flags & M_EXT)) { - printf("%s: no memory for rx list " - "-- packet dropped!\n", USBDEVNAME(sc->sc_dev)); - m_freem(m_new); - return (ENOBUFS); - } - m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; - } else { - m_new = m; - m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; - m_new->m_data = m_new->m_ext.ext_buf; - } - - m_adj(m_new, ETHER_ALIGN); - c->udav_mbuf = m_new; - - return (0); -} - - -Static int udav_rx_list_init(struct udav_softc *sc) { struct udav_cdata *cd; @@ -1175,7 +1139,8 @@ udav_rx_list_init(struct udav_softc *sc) c = &cd->udav_rx_chain[i]; c->udav_sc = sc; c->udav_idx = i; - if (udav_newbuf(sc, c, NULL) == ENOBUFS) + c->udav_mbuf = usb_ether_newbuf(USBDEVNAME(sc->sc_dev)); + if (c->udav_mbuf == NULL) return (ENOBUFS); if (c->udav_xfer == NULL) { c->udav_xfer = usbd_alloc_xfer(sc->sc_udev); @@ -1469,7 +1434,8 @@ udav_rxeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status) #endif #if defined(__NetBSD__) - if (udav_newbuf(sc, c, NULL) == ENOBUFS) { + c->udav_mbuf = usb_ether_newbuf(USBDEVNAME(sc->sc_dev)); + if (c->udav_mbuf == NULL) { ifp->if_ierrors++; goto done1; } @@ -2026,7 +1992,8 @@ udav_rxstart(struct ifnet *ifp) UDAV_LOCK(sc); c = &sc->sc_cdata.udav_rx_chain[sc->sc_cdata.udav_rx_prod]; - if (udav_newbuf(sc, c, NULL) == ENOBUFS) { + c->udav_mbuf = usb_ether_newbuf(USBDEVNAME(sc->sc_dev)); + if (c->udav_mbuf == NULL) { ifp->if_ierrors++; UDAV_UNLOCK(sc); return; diff --git a/sys/dev/usb/usb_ethersubr.c b/sys/dev/usb/usb_ethersubr.c index 642f94a..bccc7ea 100644 --- a/sys/dev/usb/usb_ethersubr.c +++ b/sys/dev/usb/usb_ethersubr.c @@ -142,3 +142,20 @@ void usb_tx_done(m) return; } + +struct mbuf * +usb_ether_newbuf(const char *devname) +{ + struct mbuf *m_new; + + m_new = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + if (m_new == NULL) { + printf("%s: no memory for rx list " + "-- packet dropped!\n", devname); + return (NULL); + } + m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; + + m_adj(m_new, ETHER_ALIGN); + return (m_new); +} diff --git a/sys/dev/usb/usb_ethersubr.h b/sys/dev/usb/usb_ethersubr.h index 9cd6c79..e53d02e 100644 --- a/sys/dev/usb/usb_ethersubr.h +++ b/sys/dev/usb/usb_ethersubr.h @@ -43,5 +43,6 @@ struct usb_qdat { void usb_register_netisr (void); void usb_ether_input (struct mbuf *); void usb_tx_done (struct mbuf *); +struct mbuf *usb_ether_newbuf (const char *); #endif |