iwmc3200wifi: remove key caches in driver
cfg80211 now guarantees keys are set after connecting. We can remove the key cache code from the driver now. Signed-off-by: Zhu Yi <yi.zhu@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
b6c321718e
commit
6e5db0a845
@ -158,34 +158,6 @@ static int iwm_key_init(struct iwm_key *key, u8 key_index,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int iwm_reset_profile(struct iwm_priv *iwm)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (!iwm->umac_profile_active)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If there is a current active profile, but no
|
|
||||||
* default key, it's not worth trying to associate again.
|
|
||||||
*/
|
|
||||||
if (iwm->default_key < 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Here we have an active profile, but a key setting changed.
|
|
||||||
* We thus have to invalidate the current profile, and push the
|
|
||||||
* new one. Keys will be pushed when association takes place.
|
|
||||||
*/
|
|
||||||
ret = iwm_invalidate_mlme_profile(iwm);
|
|
||||||
if (ret < 0) {
|
|
||||||
IWM_ERR(iwm, "Couldn't invalidate profile\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return iwm_send_mlme_profile(iwm);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int iwm_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev,
|
static int iwm_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev,
|
||||||
u8 key_index, const u8 *mac_addr,
|
u8 key_index, const u8 *mac_addr,
|
||||||
struct key_params *params)
|
struct key_params *params)
|
||||||
@ -245,10 +217,6 @@ static int iwm_cfg80211_del_key(struct wiphy *wiphy, struct net_device *ndev,
|
|||||||
if (key_index == iwm->default_key)
|
if (key_index == iwm->default_key)
|
||||||
iwm->default_key = -1;
|
iwm->default_key = -1;
|
||||||
|
|
||||||
/* If the interface is down, we just cache this */
|
|
||||||
if (!test_bit(IWM_STATUS_READY, &iwm->status))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return iwm_set_key(iwm, 1, key);
|
return iwm_set_key(iwm, 1, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,7 +225,6 @@ static int iwm_cfg80211_set_default_key(struct wiphy *wiphy,
|
|||||||
u8 key_index)
|
u8 key_index)
|
||||||
{
|
{
|
||||||
struct iwm_priv *iwm = ndev_to_iwm(ndev);
|
struct iwm_priv *iwm = ndev_to_iwm(ndev);
|
||||||
int ret;
|
|
||||||
|
|
||||||
IWM_DBG_WEXT(iwm, DBG, "Default key index is: %d\n", key_index);
|
IWM_DBG_WEXT(iwm, DBG, "Default key index is: %d\n", key_index);
|
||||||
|
|
||||||
@ -268,15 +235,7 @@ static int iwm_cfg80211_set_default_key(struct wiphy *wiphy,
|
|||||||
|
|
||||||
iwm->default_key = key_index;
|
iwm->default_key = key_index;
|
||||||
|
|
||||||
/* If the interface is down, we just cache this */
|
return iwm_set_tx_key(iwm, key_index);
|
||||||
if (!test_bit(IWM_STATUS_READY, &iwm->status))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
ret = iwm_set_tx_key(iwm, key_index);
|
|
||||||
if (ret < 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
return iwm_reset_profile(iwm);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int iwm_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev,
|
int iwm_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev,
|
||||||
|
@ -584,12 +584,6 @@ int iwm_set_key(struct iwm_priv *iwm, bool remove, struct iwm_key *key)
|
|||||||
struct iwm_umac_key_tkip *tkip = (struct iwm_umac_key_tkip *)cmd;
|
struct iwm_umac_key_tkip *tkip = (struct iwm_umac_key_tkip *)cmd;
|
||||||
struct iwm_umac_key_ccmp *ccmp = (struct iwm_umac_key_ccmp *)cmd;
|
struct iwm_umac_key_ccmp *ccmp = (struct iwm_umac_key_ccmp *)cmd;
|
||||||
|
|
||||||
/*
|
|
||||||
* We check if our current profile is valid.
|
|
||||||
* If not, we dont push the key, we just cache them,
|
|
||||||
* so that with the next siwsessid call, the keys
|
|
||||||
* will be actually pushed.
|
|
||||||
*/
|
|
||||||
if (!remove) {
|
if (!remove) {
|
||||||
ret = iwm_check_profile(iwm);
|
ret = iwm_check_profile(iwm);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
@ -727,7 +721,7 @@ int iwm_set_key(struct iwm_priv *iwm, bool remove, struct iwm_key *key)
|
|||||||
|
|
||||||
int iwm_send_mlme_profile(struct iwm_priv *iwm)
|
int iwm_send_mlme_profile(struct iwm_priv *iwm)
|
||||||
{
|
{
|
||||||
int ret, i;
|
int ret;
|
||||||
struct iwm_umac_profile profile;
|
struct iwm_umac_profile profile;
|
||||||
|
|
||||||
memcpy(&profile, iwm->umac_profile, sizeof(profile));
|
memcpy(&profile, iwm->umac_profile, sizeof(profile));
|
||||||
@ -742,27 +736,6 @@ int iwm_send_mlme_profile(struct iwm_priv *iwm)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < IWM_NUM_KEYS; i++)
|
|
||||||
if (iwm->keys[i].key_len) {
|
|
||||||
struct iwm_key *key = &iwm->keys[i];
|
|
||||||
|
|
||||||
/* Wait for the profile before sending the keys */
|
|
||||||
wait_event_interruptible_timeout(iwm->mlme_queue,
|
|
||||||
(test_bit(IWM_STATUS_ASSOCIATING, &iwm->status) ||
|
|
||||||
test_bit(IWM_STATUS_ASSOCIATED, &iwm->status)),
|
|
||||||
3 * HZ);
|
|
||||||
|
|
||||||
ret = iwm_set_key(iwm, 0, key);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
if (iwm->default_key == i) {
|
|
||||||
ret = iwm_set_tx_key(iwm, i);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user