diff options
Diffstat (limited to 'sys/dev/ipw/if_ipw.c')
-rw-r--r-- | sys/dev/ipw/if_ipw.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/sys/dev/ipw/if_ipw.c b/sys/dev/ipw/if_ipw.c index f21bc5b..b2fda27 100644 --- a/sys/dev/ipw/if_ipw.c +++ b/sys/dev/ipw/if_ipw.c @@ -1847,9 +1847,9 @@ ipw_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) int error = 0, startall = 0; IPW_LOCK_DECL; - IPW_LOCK(sc); switch (cmd) { case SIOCSIFFLAGS: + IPW_LOCK(sc); if (ifp->if_flags & IFF_UP) { if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) { ipw_init_locked(sc); @@ -1859,18 +1859,20 @@ ipw_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) if (ifp->if_drv_flags & IFF_DRV_RUNNING) ipw_stop_locked(sc); } + IPW_UNLOCK(sc); + if (startall) + ieee80211_start_all(ic); break; case SIOCGIFMEDIA: - case SIOCSIFMEDIA: error = ifmedia_ioctl(ifp, ifr, &ic->ic_media, cmd); break; - default: + case SIOCGIFADDR: error = ether_ioctl(ifp, cmd, data); + break; + default: + error = EINVAL; + break; } - IPW_UNLOCK(sc); - - if (startall) - ieee80211_start_all(ic); return error; } |