Deleted Added
full compact
if_zyd.c (243857) if_zyd.c (246614)
1/* $OpenBSD: if_zyd.c,v 1.52 2007/02/11 00:08:04 jsg Exp $ */
2/* $NetBSD: if_zyd.c,v 1.7 2007/06/21 04:04:29 kiyohara Exp $ */
1/* $OpenBSD: if_zyd.c,v 1.52 2007/02/11 00:08:04 jsg Exp $ */
2/* $NetBSD: if_zyd.c,v 1.7 2007/06/21 04:04:29 kiyohara Exp $ */
3/* $FreeBSD: head/sys/dev/usb/wlan/if_zyd.c 243857 2012-12-04 09:32:43Z glebius $ */
3/* $FreeBSD: head/sys/dev/usb/wlan/if_zyd.c 246614 2013-02-10 10:36:16Z hselasky $ */
4
5/*-
6 * Copyright (c) 2006 by Damien Bergamini <damien.bergamini@free.fr>
7 * Copyright (c) 2006 by Florian Stoehr <ich@florian-stoehr.de>
8 *
9 * Permission to use, copy, modify, and distribute this software for any
10 * purpose with or without fee is hereby granted, provided that the above
11 * copyright notice and this permission notice appear in all copies.
12 *
13 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
14 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
16 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 */
21
22#include <sys/cdefs.h>
4
5/*-
6 * Copyright (c) 2006 by Damien Bergamini <damien.bergamini@free.fr>
7 * Copyright (c) 2006 by Florian Stoehr <ich@florian-stoehr.de>
8 *
9 * Permission to use, copy, modify, and distribute this software for any
10 * purpose with or without fee is hereby granted, provided that the above
11 * copyright notice and this permission notice appear in all copies.
12 *
13 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
14 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
16 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 */
21
22#include <sys/cdefs.h>
23__FBSDID("$FreeBSD: head/sys/dev/usb/wlan/if_zyd.c 243857 2012-12-04 09:32:43Z glebius $");
23__FBSDID("$FreeBSD: head/sys/dev/usb/wlan/if_zyd.c 246614 2013-02-10 10:36:16Z hselasky $");
24
25/*
26 * ZyDAS ZD1211/ZD1211B USB WLAN driver.
27 */
28
29#include <sys/param.h>
30#include <sys/sockio.h>
31#include <sys/sysctl.h>

--- 401 unchanged lines hidden (view full) ---

433}
434
435static int
436zyd_detach(device_t dev)
437{
438 struct zyd_softc *sc = device_get_softc(dev);
439 struct ifnet *ifp = sc->sc_ifp;
440 struct ieee80211com *ic;
24
25/*
26 * ZyDAS ZD1211/ZD1211B USB WLAN driver.
27 */
28
29#include <sys/param.h>
30#include <sys/sockio.h>
31#include <sys/sysctl.h>

--- 401 unchanged lines hidden (view full) ---

433}
434
435static int
436zyd_detach(device_t dev)
437{
438 struct zyd_softc *sc = device_get_softc(dev);
439 struct ifnet *ifp = sc->sc_ifp;
440 struct ieee80211com *ic;
441 unsigned int x;
441
442
442 /* stop all USB transfers */
443 usbd_transfer_unsetup(sc->sc_xfer, ZYD_N_TRANSFER);
443 /*
444 * Prevent further allocations from RX/TX data
445 * lists and ioctls:
446 */
447 ZYD_LOCK(sc);
448 sc->sc_flags |= ZYD_FLAG_DETACHED;
449 STAILQ_INIT(&sc->tx_q);
450 STAILQ_INIT(&sc->tx_free);
451 ZYD_UNLOCK(sc);
444
452
453 /* drain USB transfers */
454 for (x = 0; x != ZYD_N_TRANSFER; x++)
455 usbd_transfer_drain(sc->sc_xfer[x]);
456
445 /* free TX list, if any */
457 /* free TX list, if any */
458 ZYD_LOCK(sc);
446 zyd_unsetup_tx_list(sc);
459 zyd_unsetup_tx_list(sc);
460 ZYD_UNLOCK(sc);
447
461
462 /* free USB transfers and some data buffers */
463 usbd_transfer_unsetup(sc->sc_xfer, ZYD_N_TRANSFER);
464
448 if (ifp) {
449 ic = ifp->if_l2com;
450 ieee80211_ifdetach(ic);
451 if_free(ifp);
452 }
453 mtx_destroy(&sc->sc_mtx);
454
455 return (0);

--- 2176 unchanged lines hidden (view full) ---

2632}
2633
2634static int
2635zyd_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
2636{
2637 struct zyd_softc *sc = ifp->if_softc;
2638 struct ieee80211com *ic = ifp->if_l2com;
2639 struct ifreq *ifr = (struct ifreq *) data;
465 if (ifp) {
466 ic = ifp->if_l2com;
467 ieee80211_ifdetach(ic);
468 if_free(ifp);
469 }
470 mtx_destroy(&sc->sc_mtx);
471
472 return (0);

--- 2176 unchanged lines hidden (view full) ---

2649}
2650
2651static int
2652zyd_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
2653{
2654 struct zyd_softc *sc = ifp->if_softc;
2655 struct ieee80211com *ic = ifp->if_l2com;
2656 struct ifreq *ifr = (struct ifreq *) data;
2640 int error = 0, startall = 0;
2657 int error;
2658 int startall = 0;
2641
2659
2660 ZYD_LOCK(sc);
2661 error = (sc->sc_flags & ZYD_FLAG_DETACHED) ? ENXIO : 0;
2662 ZYD_UNLOCK(sc);
2663 if (error)
2664 return (error);
2665
2642 switch (cmd) {
2643 case SIOCSIFFLAGS:
2644 ZYD_LOCK(sc);
2645 if (ifp->if_flags & IFF_UP) {
2646 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
2647 zyd_init_locked(sc);
2648 startall = 1;
2649 } else

--- 273 unchanged lines hidden (view full) ---

2923 ZYD_UNLOCK(sc);
2924}
2925
2926static device_method_t zyd_methods[] = {
2927 /* Device interface */
2928 DEVMETHOD(device_probe, zyd_match),
2929 DEVMETHOD(device_attach, zyd_attach),
2930 DEVMETHOD(device_detach, zyd_detach),
2666 switch (cmd) {
2667 case SIOCSIFFLAGS:
2668 ZYD_LOCK(sc);
2669 if (ifp->if_flags & IFF_UP) {
2670 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
2671 zyd_init_locked(sc);
2672 startall = 1;
2673 } else

--- 273 unchanged lines hidden (view full) ---

2947 ZYD_UNLOCK(sc);
2948}
2949
2950static device_method_t zyd_methods[] = {
2951 /* Device interface */
2952 DEVMETHOD(device_probe, zyd_match),
2953 DEVMETHOD(device_attach, zyd_attach),
2954 DEVMETHOD(device_detach, zyd_detach),
2931
2932 { 0, 0 }
2955 DEVMETHOD_END
2933};
2934
2935static driver_t zyd_driver = {
2936 .name = "zyd",
2937 .methods = zyd_methods,
2938 .size = sizeof(struct zyd_softc)
2939};
2940
2941static devclass_t zyd_devclass;
2942
2943DRIVER_MODULE(zyd, uhub, zyd_driver, zyd_devclass, NULL, 0);
2944MODULE_DEPEND(zyd, usb, 1, 1, 1);
2945MODULE_DEPEND(zyd, wlan, 1, 1, 1);
2946MODULE_VERSION(zyd, 1);
2956};
2957
2958static driver_t zyd_driver = {
2959 .name = "zyd",
2960 .methods = zyd_methods,
2961 .size = sizeof(struct zyd_softc)
2962};
2963
2964static devclass_t zyd_devclass;
2965
2966DRIVER_MODULE(zyd, uhub, zyd_driver, zyd_devclass, NULL, 0);
2967MODULE_DEPEND(zyd, usb, 1, 1, 1);
2968MODULE_DEPEND(zyd, wlan, 1, 1, 1);
2969MODULE_VERSION(zyd, 1);