Date: Thu, 9 Sep 2010 02:29:40 +0000 (UTC) From: Weongyo Jeong <weongyo@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r212346 - user/weongyo/usb/sys/dev/usb/net Message-ID: <201009090229.o892TeVO018061@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: weongyo Date: Thu Sep 9 02:29:40 2010 New Revision: 212346 URL: http://svn.freebsd.org/changeset/base/212346 Log: cdce(4) doesn't depend on uether module anymore. But it's not tested because I don't have a device working with cdce(4). Modified: user/weongyo/usb/sys/dev/usb/net/if_cdce.c user/weongyo/usb/sys/dev/usb/net/if_cdcereg.h Modified: user/weongyo/usb/sys/dev/usb/net/if_cdce.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/net/if_cdce.c Thu Sep 9 00:39:24 2010 (r212345) +++ user/weongyo/usb/sys/dev/usb/net/if_cdce.c Thu Sep 9 02:29:40 2010 (r212346) @@ -61,6 +61,8 @@ __FBSDID("$FreeBSD$"); #include <sys/lock.h> #include <sys/mutex.h> #include <sys/condvar.h> +#include <sys/socket.h> +#include <sys/sockio.h> #include <sys/sysctl.h> #include <sys/sx.h> #include <sys/unistd.h> @@ -68,6 +70,19 @@ __FBSDID("$FreeBSD$"); #include <sys/malloc.h> #include <sys/priv.h> +#include <net/if.h> +#include <net/if_arp.h> +#include <net/if_dl.h> +#include <net/if_media.h> +#include <net/if_types.h> +#include <net/bpf.h> +#include <net/ethernet.h> + +#include "miibus_if.h" + +#include <dev/mii/mii.h> +#include <dev/mii/miivar.h> + #include <dev/usb/usb.h> #include <dev/usb/usbdi.h> #include <dev/usb/usbdi_util.h> @@ -76,17 +91,13 @@ __FBSDID("$FreeBSD$"); #define USB_DEBUG_VAR cdce_debug #include <dev/usb/usb_debug.h> -#include <dev/usb/usb_process.h> +#include <dev/usb/usb_sleepout.h> #include "usb_if.h" - -#include <dev/usb/net/usb_ethernet.h> #include <dev/usb/net/if_cdcereg.h> static device_probe_t cdce_probe; static device_attach_t cdce_attach; static device_detach_t cdce_detach; -static device_suspend_t cdce_suspend; -static device_resume_t cdce_resume; static usb_handle_request_t cdce_handle_request; static usb_callback_t cdce_bulk_write_callback; @@ -99,14 +110,14 @@ static usb_callback_t cdce_ncm_bulk_writ static usb_callback_t cdce_ncm_bulk_read_callback; #endif -static uether_fn_t cdce_attach_post; -static uether_fn_t cdce_init; -static uether_fn_t cdce_stop; -static uether_fn_t cdce_start; -static uether_fn_t cdce_setmulti; -static uether_fn_t cdce_setpromisc; - static uint32_t cdce_m_crc32(struct mbuf *, uint32_t, uint32_t); +static int cdce_ioctl(struct ifnet *, u_long, caddr_t); +static void cdce_start(struct ifnet *); +static void cdce_init(void *); +static void cdce_init_locked(struct cdce_softc *); +static int cdce_rxmbuf(struct cdce_softc *, struct mbuf *, unsigned int); +static struct mbuf *cdce_newbuf(void); +static void cdce_rxflush(struct cdce_softc *); #ifdef USB_DEBUG static int cdce_debug = 0; @@ -232,8 +243,6 @@ static device_method_t cdce_methods[] = DEVMETHOD(device_probe, cdce_probe), DEVMETHOD(device_attach, cdce_attach), DEVMETHOD(device_detach, cdce_detach), - DEVMETHOD(device_suspend, cdce_suspend), - DEVMETHOD(device_resume, cdce_resume), {0, 0} }; @@ -248,33 +257,24 @@ static devclass_t cdce_devclass; DRIVER_MODULE(cdce, uhub, cdce_driver, cdce_devclass, NULL, 0); MODULE_VERSION(cdce, 1); -MODULE_DEPEND(cdce, uether, 1, 1, 1); MODULE_DEPEND(cdce, usb, 1, 1, 1); MODULE_DEPEND(cdce, ether, 1, 1, 1); -static const struct usb_ether_methods cdce_ue_methods = { - .ue_attach_post = cdce_attach_post, - .ue_start = cdce_start, - .ue_init = cdce_init, - .ue_stop = cdce_stop, - .ue_setmulti = cdce_setmulti, - .ue_setpromisc = cdce_setpromisc, -}; - static const struct usb_device_id cdce_devs[] = { - {USB_VPI(USB_VENDOR_ACERLABS, USB_PRODUCT_ACERLABS_M5632, CDCE_FLAG_NO_UNION)}, - {USB_VPI(USB_VENDOR_AMBIT, USB_PRODUCT_AMBIT_NTL_250, CDCE_FLAG_NO_UNION)}, - {USB_VPI(USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQLINUX, CDCE_FLAG_NO_UNION)}, - {USB_VPI(USB_VENDOR_GMATE, USB_PRODUCT_GMATE_YP3X00, CDCE_FLAG_NO_UNION)}, - {USB_VPI(USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_USBLAN, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION)}, - {USB_VPI(USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_USBLAN2, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION)}, - {USB_VPI(USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_ETHERNETGADGET, CDCE_FLAG_NO_UNION)}, - {USB_VPI(USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2501, CDCE_FLAG_NO_UNION)}, - {USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SL5500, CDCE_FLAG_ZAURUS)}, - {USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SL5600, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION)}, - {USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SLA300, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION)}, - {USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SLC700, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION)}, - {USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SLC750, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION)}, +#define CDCE_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) } + CDCE_DEV(ACERLABS, M5632, CDCE_FLAG_NO_UNION), + CDCE_DEV(AMBIT, NTL_250, CDCE_FLAG_NO_UNION), + CDCE_DEV(COMPAQ, IPAQLINUX, CDCE_FLAG_NO_UNION), + CDCE_DEV(GMATE, YP3X00, CDCE_FLAG_NO_UNION), + CDCE_DEV(MOTOROLA2, USBLAN, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION), + CDCE_DEV(MOTOROLA2, USBLAN2, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION), + CDCE_DEV(NETCHIP, ETHERNETGADGET, CDCE_FLAG_NO_UNION), + CDCE_DEV(PROLIFIC, PL2501, CDCE_FLAG_NO_UNION), + CDCE_DEV(SHARP, SL5500, CDCE_FLAG_ZAURUS), + CDCE_DEV(SHARP, SL5600, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION), + CDCE_DEV(SHARP, SLA300, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION), + CDCE_DEV(SHARP, SLC700, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION), + CDCE_DEV(SHARP, SLC750, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION), {USB_IF_CSI(UICLASS_CDC, UISUBCLASS_ETHERNET_NETWORKING_CONTROL_MODEL, 0)}, {USB_IF_CSI(UICLASS_CDC, UISUBCLASS_MOBILE_DIRECT_LINE_MODEL, 0)}, @@ -304,14 +304,14 @@ cdce_ncm_init(struct cdce_softc *sc) req.wIndex[1] = 0; USETW(req.wLength, sizeof(temp)); - err = usbd_do_request_flags(sc->sc_ue.ue_udev, NULL, &req, + err = usbd_do_request_flags(sc->sc_udev, NULL, &req, &temp, 0, NULL, 1000 /* ms */); if (err) return (1); /* Read correct set of parameters according to device mode */ - if (usbd_get_mode(sc->sc_ue.ue_udev) == USB_MODE_HOST) { + if (usbd_get_mode(sc->sc_udev) == USB_MODE_HOST) { sc->sc_ncm.rx_max = UGETDW(temp.dwNtbInMaxSize); sc->sc_ncm.tx_max = UGETDW(temp.dwNtbOutMaxSize); sc->sc_ncm.tx_remainder = UGETW(temp.wNdpOutPayloadRemainder); @@ -386,7 +386,7 @@ cdce_ncm_init(struct cdce_softc *sc) USETW(req.wLength, 4); USETDW(value, sc->sc_ncm.rx_max); - err = usbd_do_request_flags(sc->sc_ue.ue_udev, NULL, &req, + err = usbd_do_request_flags(sc->sc_udev, NULL, &req, &value, 0, NULL, 1000 /* ms */); if (err) { DPRINTFN(1, "Setting input size " @@ -400,7 +400,7 @@ cdce_ncm_init(struct cdce_softc *sc) req.wIndex[1] = 0; USETW(req.wLength, 0); - err = usbd_do_request_flags(sc->sc_ue.ue_udev, NULL, &req, + err = usbd_do_request_flags(sc->sc_udev, NULL, &req, NULL, 0, NULL, 1000 /* ms */); if (err) { DPRINTFN(1, "Setting CRC mode to off failed.\n"); @@ -413,7 +413,7 @@ cdce_ncm_init(struct cdce_softc *sc) req.wIndex[1] = 0; USETW(req.wLength, 0); - err = usbd_do_request_flags(sc->sc_ue.ue_udev, NULL, &req, + err = usbd_do_request_flags(sc->sc_udev, NULL, &req, NULL, 0, NULL, 1000 /* ms */); if (err) { DPRINTFN(1, "Setting NTB format to 16-bit failed.\n"); @@ -431,18 +431,11 @@ cdce_probe(device_t dev) return (usbd_lookup_id_by_uaa(cdce_devs, sizeof(cdce_devs), uaa)); } -static void -cdce_attach_post(struct usb_ether *ue) -{ - /* no-op */ - return; -} - static int cdce_attach(device_t dev) { struct cdce_softc *sc = device_get_softc(dev); - struct usb_ether *ue = &sc->sc_ue; + struct ifnet *ifp; struct usb_attach_arg *uaa = device_get_ivars(dev); struct usb_interface *iface; const struct usb_cdc_union_descriptor *ud; @@ -454,8 +447,9 @@ cdce_attach(device_t dev) uint8_t data_iface_no; char eaddr_str[5 * ETHER_ADDR_LEN]; /* approx */ + sc->sc_dev = dev; + sc->sc_udev = uaa->device; sc->sc_flags = USB_GET_DRIVER_INFO(uaa); - sc->sc_ue.ue_udev = uaa->device; device_set_usb_desc(dev); @@ -485,7 +479,8 @@ cdce_attach(device_t dev) if (id && (id->bInterfaceNumber == data_iface_no)) { sc->sc_ifaces_index[0] = i; sc->sc_ifaces_index[1] = uaa->info.bIfaceIndex; - usbd_set_parent_iface(uaa->device, i, uaa->info.bIfaceIndex); + usbd_set_parent_iface(uaa->device, i, + uaa->info.bIfaceIndex); break; } } else { @@ -561,13 +556,13 @@ alloc_transfers: /* fake MAC address */ device_printf(dev, "faking MAC address\n"); - sc->sc_ue.ue_eaddr[0] = 0x2a; - memcpy(&sc->sc_ue.ue_eaddr[1], &ticks, sizeof(uint32_t)); - sc->sc_ue.ue_eaddr[5] = device_get_unit(dev); + sc->sc_eaddr[0] = 0x2a; + memcpy(&sc->sc_eaddr[1], &ticks, sizeof(uint32_t)); + sc->sc_eaddr[5] = device_get_unit(dev); } else { - bzero(sc->sc_ue.ue_eaddr, sizeof(sc->sc_ue.ue_eaddr)); + bzero(sc->sc_eaddr, sizeof(sc->sc_eaddr)); for (i = 0; i != (ETHER_ADDR_LEN * 2); i++) { @@ -584,30 +579,39 @@ alloc_transfers: if ((i & 1) == 0) c <<= 4; - sc->sc_ue.ue_eaddr[i / 2] |= c; + sc->sc_eaddr[i / 2] |= c; } if (uaa->usb_mode == USB_MODE_DEVICE) { /* * Do not use the same MAC address like the peer ! */ - sc->sc_ue.ue_eaddr[5] ^= 0xFF; + sc->sc_eaddr[5] ^= 0xFF; } } - ue->ue_sc = sc; - ue->ue_dev = dev; - ue->ue_udev = uaa->device; - ue->ue_mtx = &sc->sc_mtx; - ue->ue_methods = &cdce_ue_methods; - - error = uether_ifattach(ue); - if (error) { - device_printf(dev, "could not attach interface\n"); + sc->sc_ifp = ifp = if_alloc(IFT_ETHER); + if (ifp == NULL) { + device_printf(sc->sc_dev, "could not allocate ifnet\n"); goto detach; } - return (0); /* success */ + ifp->if_softc = sc; + if_initname(ifp, device_get_name(sc->sc_dev), + device_get_unit(sc->sc_dev)); + ifp->if_mtu = ETHERMTU; + ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; + ifp->if_ioctl = cdce_ioctl; + ifp->if_start = cdce_start; + ifp->if_init = cdce_init; + IFQ_SET_MAXLEN(&ifp->if_snd, ifqmaxlen); + ifp->if_snd.ifq_drv_maxlen = ifqmaxlen; + IFQ_SET_READY(&ifp->if_snd); + + if_printf(ifp, "<USB Ethernet> on %s\n", + device_get_nameunit(sc->sc_dev)); + ether_ifattach(ifp, sc->sc_eaddr); + return (0); detach: cdce_detach(dev); return (ENXIO); /* failure */ @@ -617,20 +621,24 @@ static int cdce_detach(device_t dev) { struct cdce_softc *sc = device_get_softc(dev); - struct usb_ether *ue = &sc->sc_ue; + struct ifnet *ifp = sc->sc_ifp; - /* stop all USB transfers first */ usbd_transfer_unsetup(sc->sc_xfer, CDCE_N_TRANSFER); - uether_ifdetach(ue); + if (ifp != NULL) { + CDCE_LOCK(sc); + ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + CDCE_UNLOCK(sc); + ether_ifdetach(ifp); + if_free(ifp); + } mtx_destroy(&sc->sc_mtx); - return (0); } static void -cdce_start(struct usb_ether *ue) +cdce_start(struct ifnet *ifp) { - struct cdce_softc *sc = uether_getsc(ue); + struct cdce_softc *sc = ifp->if_softc; /* * Start the USB transfers, if not already started: @@ -655,7 +663,7 @@ static void cdce_bulk_write_callback(struct usb_xfer *xfer, usb_error_t error) { struct cdce_softc *sc = usbd_xfer_softc(xfer); - struct ifnet *ifp = uether_getifp(&sc->sc_ue); + struct ifnet *ifp = sc->sc_ifp; struct mbuf *m; struct mbuf *mt; uint32_t crc; @@ -768,10 +776,19 @@ cdce_m_crc32(struct mbuf *m, uint32_t sr } static void -cdce_init(struct usb_ether *ue) +cdce_init(void *arg) +{ + struct cdce_softc *sc = arg; + + CDCE_LOCK(sc); + cdce_init_locked(sc); + CDCE_UNLOCK(sc); +} + +static void +cdce_init_locked(struct cdce_softc *sc) { - struct cdce_softc *sc = uether_getsc(ue); - struct ifnet *ifp = uether_getifp(ue); + struct ifnet *ifp = sc->sc_ifp; CDCE_LOCK_ASSERT(sc, MA_OWNED); @@ -785,14 +802,13 @@ cdce_init(struct usb_ether *ue) usbd_xfer_set_stall(sc->sc_xfer[CDCE_BULK_TX]); /* start data transfers */ - cdce_start(ue); + cdce_start(sc->sc_ifp); } static void -cdce_stop(struct usb_ether *ue) +cdce_stop(struct cdce_softc *sc) { - struct cdce_softc *sc = uether_getsc(ue); - struct ifnet *ifp = uether_getifp(ue); + struct ifnet *ifp = sc->sc_ifp; CDCE_LOCK_ASSERT(sc, MA_OWNED); @@ -808,34 +824,6 @@ cdce_stop(struct usb_ether *ue) } static void -cdce_setmulti(struct usb_ether *ue) -{ - /* no-op */ - return; -} - -static void -cdce_setpromisc(struct usb_ether *ue) -{ - /* no-op */ - return; -} - -static int -cdce_suspend(device_t dev) -{ - device_printf(dev, "Suspending\n"); - return (0); -} - -static int -cdce_resume(device_t dev) -{ - device_printf(dev, "Resuming\n"); - return (0); -} - -static void cdce_bulk_read_callback(struct usb_xfer *xfer, usb_error_t error) { struct cdce_softc *sc = usbd_xfer_softc(xfer); @@ -865,7 +853,7 @@ cdce_bulk_read_callback(struct usb_xfer continue; } /* queue up mbuf */ - uether_rxmbuf(&sc->sc_ue, m, len); + cdce_rxmbuf(sc, m, len); } /* FALLTHROUGH */ @@ -876,7 +864,7 @@ cdce_bulk_read_callback(struct usb_xfer */ for (x = 0; x != 1; x++) { if (sc->sc_rx_buf[x] == NULL) { - m = uether_newbuf(); + m = cdce_newbuf(); if (m == NULL) goto tr_stall; sc->sc_rx_buf[x] = m; @@ -890,7 +878,7 @@ cdce_bulk_read_callback(struct usb_xfer usbd_xfer_set_frames(xfer, x); usbd_transfer_submit(xfer); /* flush any received frames */ - uether_rxflush(&sc->sc_ue); + cdce_rxflush(sc); break; default: /* Error */ @@ -987,7 +975,7 @@ static uint8_t cdce_ncm_fill_tx_frames(struct usb_xfer *xfer, uint8_t index) { struct cdce_softc *sc = usbd_xfer_softc(xfer); - struct ifnet *ifp = uether_getifp(&sc->sc_ue); + struct ifnet *ifp = sc->sc_ifp; struct usb_page_cache *pc = usbd_xfer_get_frame(xfer, index); struct mbuf *m; uint32_t rem; @@ -1113,7 +1101,7 @@ static void cdce_ncm_bulk_write_callback(struct usb_xfer *xfer, usb_error_t error) { struct cdce_softc *sc = usbd_xfer_softc(xfer); - struct ifnet *ifp = uether_getifp(&sc->sc_ue); + struct ifnet *ifp = sc->sc_ifp; uint16_t x; int actlen; int aframes; @@ -1160,7 +1148,7 @@ cdce_ncm_bulk_read_callback(struct usb_x { struct cdce_softc *sc = usbd_xfer_softc(xfer); struct usb_page_cache *pc = usbd_xfer_get_frame(xfer, 0); - struct ifnet *ifp = uether_getifp(&sc->sc_ue); + struct ifnet *ifp = sc->sc_ifp; struct mbuf *m; int sumdata; int sumlen; @@ -1283,7 +1271,7 @@ cdce_ncm_bulk_read_callback(struct usb_x usbd_copy_out(pc, offset, m->m_data, temp); /* enqueue */ - uether_rxmbuf(&sc->sc_ue, m, temp); + cdce_rxmbuf(sc, m, temp); sumdata += temp; } else { @@ -1298,7 +1286,7 @@ tr_setup: usbd_xfer_set_frame_len(xfer, 0, sc->sc_ncm.rx_max); usbd_xfer_set_frames(xfer, 1); usbd_transfer_submit(xfer); - uether_rxflush(&sc->sc_ue); /* must be last */ + cdce_rxflush(sc); /* must be last */ break; default: /* Error */ @@ -1316,3 +1304,79 @@ tr_stall: } } #endif + +static int +cdce_rxmbuf(struct cdce_softc *sc, struct mbuf *m, unsigned int len) +{ + struct ifnet *ifp = sc->sc_ifp; + + CDCE_LOCK_ASSERT(sc, MA_OWNED); + + /* finalize mbuf */ + ifp->if_ipackets++; + m->m_pkthdr.rcvif = ifp; + m->m_pkthdr.len = m->m_len = len; + + /* enqueue for later when the lock can be released */ + _IF_ENQUEUE(&sc->sc_rxq, m); + return (0); +} + +static struct mbuf * +cdce_newbuf(void) +{ + struct mbuf *m_new; + + m_new = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + if (m_new == NULL) + return (NULL); + m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; + + m_adj(m_new, ETHER_ALIGN); + return (m_new); +} + +static void +cdce_rxflush(struct cdce_softc *sc) +{ + struct ifnet *ifp = sc->sc_ifp; + struct mbuf *m; + + CDCE_LOCK_ASSERT(sc, MA_OWNED); + + for (;;) { + _IF_DEQUEUE(&sc->sc_rxq, m); + if (m == NULL) + break; + + /* + * The USB xfer has been resubmitted so its safe to unlock now. + */ + CDCE_UNLOCK(sc); + ifp->if_input(ifp, m); + CDCE_LOCK(sc); + } +} + +static int +cdce_ioctl(struct ifnet *ifp, u_long command, caddr_t data) +{ + struct cdce_softc *sc = ifp->if_softc; + int error = 0; + + switch (command) { + case SIOCSIFFLAGS: + CDCE_LOCK(sc); + if (ifp->if_flags & IFF_UP) { + if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) + cdce_init_locked(sc); + } else + cdce_stop(sc); + CDCE_UNLOCK(sc); + break; + default: + error = ether_ioctl(ifp, command, data); + break; + } + return (error); +} Modified: user/weongyo/usb/sys/dev/usb/net/if_cdcereg.h ============================================================================== --- user/weongyo/usb/sys/dev/usb/net/if_cdcereg.h Thu Sep 9 00:39:24 2010 (r212345) +++ user/weongyo/usb/sys/dev/usb/net/if_cdcereg.h Thu Sep 9 02:29:40 2010 (r212346) @@ -71,22 +71,25 @@ struct cdce_ncm { }; struct cdce_softc { - struct usb_ether sc_ue; + struct ifnet *sc_ifp; + device_t sc_dev; + struct usb_device *sc_udev; /* used by uether_do_request() */ struct mtx sc_mtx; + struct usb_xfer *sc_xfer[CDCE_N_TRANSFER]; + struct ifqueue sc_rxq; + /* ethernet address from eeprom */ + uint8_t sc_eaddr[ETHER_ADDR_LEN]; #if CDCE_HAVE_NCM struct cdce_ncm sc_ncm; #endif - struct usb_xfer *sc_xfer[CDCE_N_TRANSFER]; struct mbuf *sc_rx_buf[CDCE_FRAMES_MAX]; struct mbuf *sc_tx_buf[CDCE_FRAMES_MAX]; - int sc_flags; #define CDCE_FLAG_ZAURUS 0x0001 #define CDCE_FLAG_NO_UNION 0x0002 #define CDCE_FLAG_RX_DATA 0x0010 - - uint8_t sc_eaddr_str_index; - uint8_t sc_ifaces_index[2]; + uint8_t sc_eaddr_str_index; + uint8_t sc_ifaces_index[2]; }; #define CDCE_LOCK(_sc) mtx_lock(&(_sc)->sc_mtx)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201009090229.o892TeVO018061>