iwmc3200wifi: mark some pmksa functions static
[safe/jmp/linux-2.6] / drivers / net / wireless / iwmc3200wifi / cfg80211.c
index 89edb66..fc239a3 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <linux/kernel.h>
 #include <linux/netdevice.h>
+#include <linux/sched.h>
 #include <linux/etherdevice.h>
 #include <linux/wireless.h>
 #include <linux/ieee80211.h>
@@ -262,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;
@@ -270,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);
 
@@ -670,10 +671,24 @@ static int iwm_cfg80211_disconnect(struct wiphy *wiphy, struct net_device *dev,
 static int iwm_cfg80211_set_txpower(struct wiphy *wiphy,
                                    enum tx_power_setting type, int dbm)
 {
+       struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
+       int ret;
+
        switch (type) {
        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)
+                       return ret;
+
+               return iwm_tx_power_trigger(iwm);
        default:
+               IWM_ERR(iwm, "Unsupported power type: %d\n", type);
                return -EOPNOTSUPP;
        }
 
@@ -684,7 +699,7 @@ static int iwm_cfg80211_get_txpower(struct wiphy *wiphy, int *dbm)
 {
        struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
 
-       *dbm = iwm->txpower;
+       *dbm = iwm->txpower >> 1;
 
        return 0;
 }
@@ -710,6 +725,36 @@ static int iwm_cfg80211_set_power_mgmt(struct wiphy *wiphy,
                                       CFG_POWER_INDEX, iwm->conf.power_index);
 }
 
+static 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);
+}
+
+static 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);
+}
+
+static 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,
@@ -726,6 +771,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[] = {
@@ -771,6 +819,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;