iwmc3200wifi: remove "_safe" for some list_for_each_entry usage
[safe/jmp/linux-2.6] / drivers / net / wireless / iwmc3200wifi / cfg80211.c
index 2e00a4b..6778e58 100644 (file)
@@ -263,7 +263,7 @@ static int iwm_cfg80211_get_station(struct wiphy *wiphy,
 int iwm_cfg80211_inform_bss(struct iwm_priv *iwm)
 {
        struct wiphy *wiphy = iwm_to_wiphy(iwm);
-       struct iwm_bss_info *bss, *next;
+       struct iwm_bss_info *bss;
        struct iwm_umac_notif_bss_info *umac_bss;
        struct ieee80211_mgmt *mgmt;
        struct ieee80211_channel *channel;
@@ -271,7 +271,7 @@ int iwm_cfg80211_inform_bss(struct iwm_priv *iwm)
        s32 signal;
        int freq;
 
-       list_for_each_entry_safe(bss, next, &iwm->bss_list, node) {
+       list_for_each_entry(bss, &iwm->bss_list, node) {
                umac_bss = bss->bss;
                mgmt = (struct ieee80211_mgmt *)(umac_bss->frame_buf);
 
@@ -678,6 +678,9 @@ static int iwm_cfg80211_set_txpower(struct wiphy *wiphy,
        case TX_POWER_AUTOMATIC:
                return 0;
        case TX_POWER_FIXED:
+               if (!test_bit(IWM_STATUS_READY, &iwm->status))
+                       return 0;
+
                ret = iwm_umac_set_config_fix(iwm, UMAC_PARAM_TBL_CFG_FIX,
                                              CFG_TX_PWR_LIMIT_USR, dbm * 2);
                if (ret < 0)
@@ -685,6 +688,7 @@ static int iwm_cfg80211_set_txpower(struct wiphy *wiphy,
 
                return iwm_tx_power_trigger(iwm);
        default:
+               IWM_ERR(iwm, "Unsupported power type: %d\n", type);
                return -EOPNOTSUPP;
        }
 
@@ -721,6 +725,33 @@ static int iwm_cfg80211_set_power_mgmt(struct wiphy *wiphy,
                                       CFG_POWER_INDEX, iwm->conf.power_index);
 }
 
+int iwm_cfg80211_set_pmksa(struct wiphy *wiphy, struct net_device *netdev,
+                          struct cfg80211_pmksa *pmksa)
+{
+       struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
+
+       return iwm_send_pmkid_update(iwm, pmksa, IWM_CMD_PMKID_ADD);
+}
+
+int iwm_cfg80211_del_pmksa(struct wiphy *wiphy, struct net_device *netdev,
+                          struct cfg80211_pmksa *pmksa)
+{
+       struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
+
+       return iwm_send_pmkid_update(iwm, pmksa, IWM_CMD_PMKID_DEL);
+}
+
+int iwm_cfg80211_flush_pmksa(struct wiphy *wiphy, struct net_device *netdev)
+{
+       struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
+       struct cfg80211_pmksa pmksa;
+
+       memset(&pmksa, 0, sizeof(struct cfg80211_pmksa));
+
+       return iwm_send_pmkid_update(iwm, &pmksa, IWM_CMD_PMKID_FLUSH);
+}
+
+
 static struct cfg80211_ops iwm_cfg80211_ops = {
        .change_virtual_intf = iwm_cfg80211_change_iface,
        .add_key = iwm_cfg80211_add_key,
@@ -737,6 +768,9 @@ static struct cfg80211_ops iwm_cfg80211_ops = {
        .set_tx_power = iwm_cfg80211_set_txpower,
        .get_tx_power = iwm_cfg80211_get_txpower,
        .set_power_mgmt = iwm_cfg80211_set_power_mgmt,
+       .set_pmksa = iwm_cfg80211_set_pmksa,
+       .del_pmksa = iwm_cfg80211_del_pmksa,
+       .flush_pmksa = iwm_cfg80211_flush_pmksa,
 };
 
 static const u32 cipher_suites[] = {
@@ -782,6 +816,7 @@ struct wireless_dev *iwm_wdev_alloc(int sizeof_bus, struct device *dev)
 
        set_wiphy_dev(wdev->wiphy, dev);
        wdev->wiphy->max_scan_ssids = UMAC_WIFI_IF_PROBE_OPTION_MAX;
+       wdev->wiphy->max_num_pmkids = UMAC_MAX_NUM_PMKIDS;
        wdev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
                                       BIT(NL80211_IFTYPE_ADHOC);
        wdev->wiphy->bands[IEEE80211_BAND_2GHZ] = &iwm_band_2ghz;