From owner-svn-src-user@FreeBSD.ORG Tue Jan 27 15:34:30 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E03C0106564A; Tue, 27 Jan 2009 15:34:30 +0000 (UTC) (envelope-from thompsa@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CEC9A8FC1B; Tue, 27 Jan 2009 15:34:30 +0000 (UTC) (envelope-from thompsa@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n0RFYU8k089753; Tue, 27 Jan 2009 15:34:30 GMT (envelope-from thompsa@svn.freebsd.org) Received: (from thompsa@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n0RFYUHY089750; Tue, 27 Jan 2009 15:34:30 GMT (envelope-from thompsa@svn.freebsd.org) Message-Id: <200901271534.n0RFYUHY089750@svn.freebsd.org> From: Andrew Thompson Date: Tue, 27 Jan 2009 15:34:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r187772 - user/thompsa/usb/sys/dev/usb2/wlan X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Jan 2009 15:34:31 -0000 Author: thompsa Date: Tue Jan 27 15:34:30 2009 New Revision: 187772 URL: http://svn.freebsd.org/changeset/base/187772 Log: - Remove check of null softc in attach routines; it can never happen - Readd missing parts of zyd_attach Submitted by: sam Modified: user/thompsa/usb/sys/dev/usb2/wlan/if_rum2.c user/thompsa/usb/sys/dev/usb2/wlan/if_ural2.c user/thompsa/usb/sys/dev/usb2/wlan/if_zyd2.c Modified: user/thompsa/usb/sys/dev/usb2/wlan/if_rum2.c ============================================================================== --- user/thompsa/usb/sys/dev/usb2/wlan/if_rum2.c Tue Jan 27 12:24:53 2009 (r187771) +++ user/thompsa/usb/sys/dev/usb2/wlan/if_rum2.c Tue Jan 27 15:34:30 2009 (r187772) @@ -418,9 +418,6 @@ rum_attach(device_t self) uint32_t tmp; int error, ntries, size; - if (sc == NULL) - return (ENOMEM); - device_set_usb2_desc(self); sc->sc_udev = uaa->device; sc->sc_dev = self; Modified: user/thompsa/usb/sys/dev/usb2/wlan/if_ural2.c ============================================================================== --- user/thompsa/usb/sys/dev/usb2/wlan/if_ural2.c Tue Jan 27 12:24:53 2009 (r187771) +++ user/thompsa/usb/sys/dev/usb2/wlan/if_ural2.c Tue Jan 27 15:34:30 2009 (r187772) @@ -419,9 +419,6 @@ ural_attach(device_t self) int error; uint8_t bands, iface_index; - if (sc == NULL) - return (ENOMEM); - device_set_usb2_desc(self); sc->sc_udev = uaa->device; sc->sc_dev = self; Modified: user/thompsa/usb/sys/dev/usb2/wlan/if_zyd2.c ============================================================================== --- user/thompsa/usb/sys/dev/usb2/wlan/if_zyd2.c Tue Jan 27 12:24:53 2009 (r187771) +++ user/thompsa/usb/sys/dev/usb2/wlan/if_zyd2.c Tue Jan 27 15:34:30 2009 (r187772) @@ -355,10 +355,7 @@ zyd_attach(device_t dev) struct ifnet *ifp; struct usb2_attach_arg *uaa = device_get_ivars(dev); struct zyd_softc *sc = device_get_softc(dev); - uint8_t bands; - - if (sc == NULL) - return (ENOMEM); + uint8_t bands, iface_index; if (uaa->info.bcdDevice < 0x4330) { device_printf(dev, "device version mismatch: 0x%X " @@ -374,19 +371,36 @@ zyd_attach(device_t dev) #ifdef ZYD_DEBUG sc->sc_debug = zyd_debug; #endif - - if ((error = zyd_get_macaddr(sc)) != 0) { - device_printf(sc->sc_dev, "could not read EEPROM\n"); - return (ENXIO); - } - mtx_init(&sc->sc_mtx, device_get_nameunit(sc->sc_dev), MTX_NETWORK_LOCK, MTX_DEF); + USB_TASK_INIT(&sc->sc_task, zyd_task, sc, NULL); USB_TASK_INIT(&sc->sc_scantask, zyd_scantask, sc, &sc->sc_mtx); USB_TASK_INIT(&sc->sc_mcasttask, zyd_multitask, sc, &sc->sc_mtx); STAILQ_INIT(&sc->sc_rqh); + iface_index = ZYD_IFACE_INDEX; + error = usb2_transfer_setup(uaa->device, + &iface_index, sc->sc_xfer, zyd_config, + ZYD_N_TRANSFER, sc, &sc->sc_mtx); + if (error) { + device_printf(dev, "could not allocate USB transfers, " + "err=%s\n", usb2_errstr(error)); + goto fail0; + } + error = usb2_proc_create(&sc->sc_tq, USB_PRI_MED, + device_get_nameunit(dev)); + if (error) { + device_printf(dev, "could not setup config thread!\n"); + goto fail0; + } + + if ((error = zyd_get_macaddr(sc)) != 0) { + device_printf(sc->sc_dev, "could not read EEPROM\n"); + error = ENXIO; + goto fail0; + } + ifp = sc->sc_ifp = if_alloc(IFT_IEEE80211); if (ifp == NULL) { device_printf(dev, "can not if_alloc()\n"); @@ -395,8 +409,7 @@ zyd_attach(device_t dev) } ifp->if_softc = sc; if_initname(ifp, "zyd", device_get_unit(sc->sc_dev)); - ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST | - IFF_NEEDSGIANT; /* USB stack is still under Giant lock */ + ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; ifp->if_init = zyd_init; ifp->if_ioctl = zyd_ioctl; ifp->if_start = zyd_start; @@ -1958,11 +1971,13 @@ zyd_get_macaddr(struct zyd_softc *sc) USETW(req.wIndex, 0); USETW(req.wLength, IEEE80211_ADDR_LEN); + ZYD_LOCK(sc); error = usb2_do_request(sc->sc_udev, &sc->sc_mtx, &req, sc->sc_bssid); if (error != 0) { device_printf(sc->sc_dev, "could not read EEPROM: %s\n", usb2_errstr(error)); } + ZYD_UNLOCK(sc); return (error); } @@ -2286,9 +2301,9 @@ zyd_bulk_read_callback(struct usb2_xfer int8_t nf; int i, rxcount; + rxcount = 0; switch (USB_GET_STATE(xfer)) { case USB_ST_TRANSFERRED: - if (xfer->actlen < MAX(sizeof(desc), ZYD_MIN_FRAGSZ)) { DPRINTF(sc, ZYD_DEBUG_ANY, "xfer too short, %d bytes\n", xfer->actlen); ifp->if_ierrors++; @@ -2297,7 +2312,7 @@ zyd_bulk_read_callback(struct usb2_xfer usb2_copy_out(xfer->frbuffers, xfer->actlen - sizeof(desc), &desc, sizeof(desc)); - rxcount = offset = 0; + offset = 0; if (UGETW(desc.tag) == ZYD_TAG_MULTIFRAME) { DPRINTF(sc, ZYD_DEBUG_RECV, "%s: received multi-frame transfer\n", __func__); @@ -2347,7 +2362,8 @@ tr_setup: nf = -95; /* XXX */ - ni = ieee80211_find_rxnode(ic, mtod(m, struct ieee80211_frame_min *)); + ni = ieee80211_find_rxnode(ic, + mtod(m, struct ieee80211_frame_min *)); if (ni != NULL) { (void)ieee80211_input(ni, m, rssi, nf, 0); ieee80211_free_node(ni);