PERFORCE change 137809 for review
Sam Leffler
sam at FreeBSD.org
Sat Mar 15 22:50:16 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=137809
Change 137809 by sam at sam_ebb on 2008/03/15 22:49:47
hookup to an mcast update callback now that net80211 handles
the merge; add a usb task so the update can be done in a
context that avoids LOR's and such (this is gross)
Affected files ...
.. //depot/projects/vap/sys/dev/usb/if_zyd.c#12 edit
.. //depot/projects/vap/sys/dev/usb/if_zydreg.h#7 edit
Differences ...
==== //depot/projects/vap/sys/dev/usb/if_zyd.c#12 (text+ko) ====
@@ -204,7 +204,8 @@
static int zyd_set_bssid(struct zyd_softc *, const uint8_t *);
static int zyd_switch_radio(struct zyd_softc *, int);
static void zyd_set_led(struct zyd_softc *, int, int);
-static void zyd_set_multi(struct zyd_softc *);
+static void zyd_set_multi(void *);
+static void zyd_update_mcast(struct ifnet *);
static int zyd_set_rxfilter(struct zyd_softc *);
static void zyd_set_chan(struct zyd_softc *, struct ieee80211_channel *);
static int zyd_set_beacon_interval(struct zyd_softc *, int);
@@ -334,6 +335,7 @@
usb_init_task(&sc->sc_scantask, zyd_scantask, sc);
usb_init_task(&sc->sc_task, zyd_task, sc);
+ usb_init_task(&sc->sc_mcasttask, zyd_set_multi, sc);
callout_init(&sc->sc_watchdog_ch, 0);
@@ -409,6 +411,7 @@
ic->ic_vap_create = zyd_vap_create;
ic->ic_vap_delete = zyd_vap_delete;
+ ic->ic_update_mcast = zyd_update_mcast;
bpfattach(ifp, DLT_IEEE802_11_RADIO,
sizeof(struct ieee80211_frame) + sizeof(sc->sc_txtap));
@@ -1706,8 +1709,9 @@
}
static void
-zyd_set_multi(struct zyd_softc *sc)
+zyd_set_multi(void *arg)
{
+ struct zyd_softc *sc = arg;
struct ieee80211com *ic = &sc->sc_ic;
struct ifnet *ifp = ic->ic_ifp;
struct ifmultiaddr *ifma;
@@ -1744,6 +1748,14 @@
zyd_write32(sc, ZYD_MAC_GHTBH, high);
}
+static void
+zyd_update_mcast(struct ifnet *ifp)
+{
+ struct zyd_softc *sc = ifp->if_softc;
+
+ usb_add_task(sc->sc_udev, &sc->sc_mcasttask, USB_TASKQ_DRIVER);
+}
+
static int
zyd_set_rxfilter(struct zyd_softc *sc)
{
@@ -2487,11 +2499,6 @@
}
sc->sc_if_flags = ifp->if_flags;
break;
- case SIOCADDMULTI:
- case SIOCDELMULTI:
- if (ifp->if_drv_flags & IFF_DRV_RUNNING)
- zyd_set_multi(sc);
- break;
case SIOCGIFMEDIA:
case SIOCSIFMEDIA:
error = ifmedia_ioctl(ifp, ifr, &ic->ic_media, cmd);
==== //depot/projects/vap/sys/dev/usb/if_zydreg.h#7 (text+ko) ====
@@ -1195,6 +1195,7 @@
#define ZYD_SCAN_START 0
#define ZYD_SCAN_END 1
#define ZYD_SET_CHANNEL 2
+ struct usb_task sc_mcasttask;
usbd_device_handle sc_udev;
usbd_interface_handle sc_iface;
int sc_flags;
More information about the p4-projects
mailing list