rndis_wlan: replace wireless_send_event with cfg80211_disconnected
[safe/jmp/linux-2.6] / drivers / net / wireless / rndis_wlan.c
index aceb95e..4bd61ee 100644 (file)
@@ -41,6 +41,7 @@
 #include <linux/if_arp.h>
 #include <linux/ctype.h>
 #include <linux/spinlock.h>
+#include <linux/slab.h>
 #include <net/iw_handler.h>
 #include <net/cfg80211.h>
 #include <linux/usb/usbnet.h>
@@ -534,7 +535,7 @@ static int rndis_join_ibss(struct wiphy *wiphy, struct net_device *dev,
 
 static int rndis_leave_ibss(struct wiphy *wiphy, struct net_device *dev);
 
-static int rndis_set_channel(struct wiphy *wiphy,
+static int rndis_set_channel(struct wiphy *wiphy, struct net_device *dev,
        struct ieee80211_channel *chan, enum nl80211_channel_type channel_type);
 
 static int rndis_add_key(struct wiphy *wiphy, struct net_device *netdev,
@@ -1545,7 +1546,7 @@ static int remove_key(struct usbnet *usbdev, int index, const u8 *bssid)
 static void set_multicast_list(struct usbnet *usbdev)
 {
        struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
-       struct dev_mc_list *mclist;
+       struct netdev_hw_addr *ha;
        __le32 filter, basefilter;
        int ret;
        char *mc_addrs = NULL;
@@ -1584,9 +1585,9 @@ static void set_multicast_list(struct usbnet *usbdev)
                        return;
                }
 
-               netdev_for_each_mc_addr(mclist, usbdev->net)
+               netdev_for_each_mc_addr(ha, usbdev->net)
                        memcpy(mc_addrs + i++ * ETH_ALEN,
-                              mclist->dmi_addr, ETH_ALEN);
+                              ha->addr, ETH_ALEN);
        }
        netif_addr_unlock_bh(usbdev->net);
 
@@ -2290,7 +2291,7 @@ static int rndis_leave_ibss(struct wiphy *wiphy, struct net_device *dev)
        return deauthenticate(usbdev);
 }
 
-static int rndis_set_channel(struct wiphy *wiphy,
+static int rndis_set_channel(struct wiphy *wiphy, struct net_device *netdev,
        struct ieee80211_channel *chan, enum nl80211_channel_type channel_type)
 {
        struct rndis_wlan_private *priv = wiphy_priv(wiphy);
@@ -2571,14 +2572,18 @@ static void rndis_wlan_do_link_up_work(struct usbnet *usbdev)
 
 static void rndis_wlan_do_link_down_work(struct usbnet *usbdev)
 {
-       union iwreq_data evt;
+       struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
 
-       netif_carrier_off(usbdev->net);
+       if (priv->connected) {
+               priv->connected = false;
+               memset(priv->bssid, 0, ETH_ALEN);
+
+               deauthenticate(usbdev);
 
-       evt.data.flags = 0;
-       evt.data.length = 0;
-       memset(evt.ap_addr.sa_data, 0, ETH_ALEN);
-       wireless_send_event(usbdev->net, SIOCGIWAP, &evt, NULL);
+               cfg80211_disconnected(usbdev->net, 0, NULL, 0, GFP_KERNEL);
+       }
+
+       netif_carrier_off(usbdev->net);
 }
 
 static void rndis_wlan_worker(struct work_struct *work)