rt2x00: Fix regression for rt2500pci
authorIvo van Doorn <ivdoorn@gmail.com>
Sat, 24 Jul 2010 17:32:25 +0000 (19:32 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 26 Jul 2010 19:32:43 +0000 (15:32 -0400)
Since commit:
     commit f1aa4c541e98afa8b770a75ccaa8504d0bff44a7
     Author: Ivo van Doorn <ivdoorn@gmail.com>
     Date:   Tue Jun 29 21:38:55 2010 +0200

     rt2x00: Write the BSSID to register when interface is added

mananged mode in rt2500pci was broken, due to intf->bssid containing
random data rather then the expected 00:00:00:00:00:00

This is corrected by sending the BSSID to rt2x00lib_config_intf
only in AP mode where the bssid is set to a valid value.

Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Acked-by: Helmut Schaa <helmut.schaa@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/rt2x00/rt2x00mac.c

index 4d8d232..235e037 100644 (file)
@@ -273,17 +273,24 @@ int rt2x00mac_add_interface(struct ieee80211_hw *hw,
        mutex_init(&intf->beacon_skb_mutex);
        intf->beacon = entry;
 
-       if (vif->type == NL80211_IFTYPE_AP)
-               memcpy(&intf->bssid, vif->addr, ETH_ALEN);
-       memcpy(&intf->mac, vif->addr, ETH_ALEN);
-
        /*
         * The MAC adddress must be configured after the device
         * has been initialized. Otherwise the device can reset
         * the MAC registers.
+        * The BSSID address must only be configured in AP mode,
+        * however we should not send an empty BSSID address for
+        * STA interfaces at this time, since this can cause
+        * invalid behavior in the device.
         */
-       rt2x00lib_config_intf(rt2x00dev, intf, vif->type,
-                             intf->mac, intf->bssid);
+       memcpy(&intf->mac, vif->addr, ETH_ALEN);
+       if (vif->type == NL80211_IFTYPE_AP) {
+               memcpy(&intf->bssid, vif->addr, ETH_ALEN);
+               rt2x00lib_config_intf(rt2x00dev, intf, vif->type,
+                                     intf->mac, intf->bssid);
+       } else {
+               rt2x00lib_config_intf(rt2x00dev, intf, vif->type,
+                                     intf->mac, NULL);
+       }
 
        /*
         * Some filters depend on the current working mode. We can force