summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsobomax <sobomax@FreeBSD.org>2005-03-25 00:44:21 +0000
committersobomax <sobomax@FreeBSD.org>2005-03-25 00:44:21 +0000
commit20ed90b9011d0f1fc0b8e3451704cadc18017d21 (patch)
treed9c6670400f80fe7f04c24108433cf982d7b148b
parentb1a03beb9ba3fc1db597deb178c280f3c57c1eb4 (diff)
downloadFreeBSD-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.c44
-rw-r--r--sys/dev/usb/if_auereg.h1
-rw-r--r--sys/dev/usb/if_axe.c35
-rw-r--r--sys/dev/usb/if_cdce.c32
-rw-r--r--sys/dev/usb/if_cue.c44
-rw-r--r--sys/dev/usb/if_cuereg.h1
-rw-r--r--sys/dev/usb/if_kue.c43
-rw-r--r--sys/dev/usb/if_kuereg.h1
-rw-r--r--sys/dev/usb/if_rue.c45
-rw-r--r--sys/dev/usb/if_ruereg.h1
-rw-r--r--sys/dev/usb/if_udav.c45
-rw-r--r--sys/dev/usb/usb_ethersubr.c17
-rw-r--r--sys/dev/usb/usb_ethersubr.h1
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
OpenPOWER on IntegriCloud