diff options
author | Ivo van Doorn <ivdoorn@gmail.com> | 2008-04-17 13:41:02 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-05-07 15:02:11 -0400 |
commit | 1c014420583564ac09e3b67006f2e7050861e66b (patch) | |
tree | 12f075007d1e7d603a6142ba0a4f32b2dee1cefb /drivers | |
parent | 6f4083aadd57e3da12fa4e67fcadaec23138a315 (diff) |
mac80211: Replace ieee80211_tx_control->key_idx with ieee80211_key_conf
The hw_key_idx inside the ieee80211_key_conf structure does
not provide all the information drivers might need to perform
hardware encryption.
This is in particular true for rt2x00 who needs to know the
key algorithm and whether it is a shared or pairwise key.
By passing the ieee80211_key_conf pointer it assures us that
drivers can make full use of all information that it should know
about a particular key.
Additionally this patch updates all drivers to grab the hw_key_idx from
the ieee80211_key_conf structure.
v2: Removed bogus u16 cast
v3: Add warning about ieee80211_tx_control pointers
v4: Update warning about ieee80211_tx_control pointers
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Acked-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/ath5k/base.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/b43/xmit.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/b43legacy/xmit.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl3945-base.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl4965-base.c | 6 |
5 files changed, 10 insertions, 9 deletions
diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c index 4e5c8fc35200..3854619f3514 100644 --- a/drivers/net/wireless/ath5k/base.c +++ b/drivers/net/wireless/ath5k/base.c | |||
@@ -1319,7 +1319,7 @@ ath5k_txbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf, | |||
1319 | pktlen = skb->len; | 1319 | pktlen = skb->len; |
1320 | 1320 | ||
1321 | if (!(ctl->flags & IEEE80211_TXCTL_DO_NOT_ENCRYPT)) { | 1321 | if (!(ctl->flags & IEEE80211_TXCTL_DO_NOT_ENCRYPT)) { |
1322 | keyidx = ctl->key_idx; | 1322 | keyidx = ctl->hw_key->hw_key_idx; |
1323 | pktlen += ctl->icv_len; | 1323 | pktlen += ctl->icv_len; |
1324 | } | 1324 | } |
1325 | 1325 | ||
diff --git a/drivers/net/wireless/b43/xmit.c b/drivers/net/wireless/b43/xmit.c index 19aefbfb2c93..88491947a209 100644 --- a/drivers/net/wireless/b43/xmit.c +++ b/drivers/net/wireless/b43/xmit.c | |||
@@ -235,7 +235,7 @@ int b43_generate_txhdr(struct b43_wldev *dev, | |||
235 | 235 | ||
236 | plcp_fragment_len = fragment_len + FCS_LEN; | 236 | plcp_fragment_len = fragment_len + FCS_LEN; |
237 | if (use_encryption) { | 237 | if (use_encryption) { |
238 | u8 key_idx = (u16) (txctl->key_idx); | 238 | u8 key_idx = txctl->hw_key->hw_key_idx; |
239 | struct b43_key *key; | 239 | struct b43_key *key; |
240 | int wlhdr_len; | 240 | int wlhdr_len; |
241 | size_t iv_len; | 241 | size_t iv_len; |
diff --git a/drivers/net/wireless/b43legacy/xmit.c b/drivers/net/wireless/b43legacy/xmit.c index dcad2491a606..fc83dab6e2c7 100644 --- a/drivers/net/wireless/b43legacy/xmit.c +++ b/drivers/net/wireless/b43legacy/xmit.c | |||
@@ -232,7 +232,7 @@ static int generate_txhdr_fw3(struct b43legacy_wldev *dev, | |||
232 | 232 | ||
233 | plcp_fragment_len = fragment_len + FCS_LEN; | 233 | plcp_fragment_len = fragment_len + FCS_LEN; |
234 | if (use_encryption) { | 234 | if (use_encryption) { |
235 | u8 key_idx = (u16)(txctl->key_idx); | 235 | u8 key_idx = txctl->hw_key->hw_key_idx; |
236 | struct b43legacy_key *key; | 236 | struct b43legacy_key *key; |
237 | int wlhdr_len; | 237 | int wlhdr_len; |
238 | size_t iv_len; | 238 | size_t iv_len; |
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index 13925b627e3b..7bdffa9cfea6 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
@@ -2391,7 +2391,8 @@ static void iwl3945_build_tx_cmd_hwcrypto(struct iwl3945_priv *priv, | |||
2391 | struct sk_buff *skb_frag, | 2391 | struct sk_buff *skb_frag, |
2392 | int last_frag) | 2392 | int last_frag) |
2393 | { | 2393 | { |
2394 | struct iwl3945_hw_key *keyinfo = &priv->stations[ctl->key_idx].keyinfo; | 2394 | struct iwl3945_hw_key *keyinfo = |
2395 | &priv->stations[ctl->hw_key->hw_key_idx].keyinfo; | ||
2395 | 2396 | ||
2396 | switch (keyinfo->alg) { | 2397 | switch (keyinfo->alg) { |
2397 | case ALG_CCMP: | 2398 | case ALG_CCMP: |
@@ -2414,7 +2415,7 @@ static void iwl3945_build_tx_cmd_hwcrypto(struct iwl3945_priv *priv, | |||
2414 | 2415 | ||
2415 | case ALG_WEP: | 2416 | case ALG_WEP: |
2416 | cmd->cmd.tx.sec_ctl = TX_CMD_SEC_WEP | | 2417 | cmd->cmd.tx.sec_ctl = TX_CMD_SEC_WEP | |
2417 | (ctl->key_idx & TX_CMD_SEC_MSK) << TX_CMD_SEC_SHIFT; | 2418 | (ctl->hw_key->hw_key_idx & TX_CMD_SEC_MSK) << TX_CMD_SEC_SHIFT; |
2418 | 2419 | ||
2419 | if (keyinfo->keylen == 13) | 2420 | if (keyinfo->keylen == 13) |
2420 | cmd->cmd.tx.sec_ctl |= TX_CMD_SEC_KEY128; | 2421 | cmd->cmd.tx.sec_ctl |= TX_CMD_SEC_KEY128; |
@@ -2422,7 +2423,7 @@ static void iwl3945_build_tx_cmd_hwcrypto(struct iwl3945_priv *priv, | |||
2422 | memcpy(&cmd->cmd.tx.key[3], keyinfo->key, keyinfo->keylen); | 2423 | memcpy(&cmd->cmd.tx.key[3], keyinfo->key, keyinfo->keylen); |
2423 | 2424 | ||
2424 | IWL_DEBUG_TX("Configuring packet for WEP encryption " | 2425 | IWL_DEBUG_TX("Configuring packet for WEP encryption " |
2425 | "with key %d\n", ctl->key_idx); | 2426 | "with key %d\n", ctl->hw_key->hw_key_idx); |
2426 | break; | 2427 | break; |
2427 | 2428 | ||
2428 | default: | 2429 | default: |
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c index c8cbf70600da..e43ea5377d8e 100644 --- a/drivers/net/wireless/iwlwifi/iwl4965-base.c +++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c | |||
@@ -1926,7 +1926,7 @@ static void iwl4965_build_tx_cmd_hwcrypto(struct iwl_priv *priv, | |||
1926 | struct iwl_wep_key *wepkey; | 1926 | struct iwl_wep_key *wepkey; |
1927 | int keyidx = 0; | 1927 | int keyidx = 0; |
1928 | 1928 | ||
1929 | BUG_ON(ctl->key_idx > 3); | 1929 | BUG_ON(ctl->hw_key->hw_key_idx > 3); |
1930 | 1930 | ||
1931 | switch (keyinfo->alg) { | 1931 | switch (keyinfo->alg) { |
1932 | case ALG_CCMP: | 1932 | case ALG_CCMP: |
@@ -1945,11 +1945,11 @@ static void iwl4965_build_tx_cmd_hwcrypto(struct iwl_priv *priv, | |||
1945 | break; | 1945 | break; |
1946 | 1946 | ||
1947 | case ALG_WEP: | 1947 | case ALG_WEP: |
1948 | wepkey = &priv->wep_keys[ctl->key_idx]; | 1948 | wepkey = &priv->wep_keys[ctl->hw_key->hw_key_idx]; |
1949 | cmd->cmd.tx.sec_ctl = 0; | 1949 | cmd->cmd.tx.sec_ctl = 0; |
1950 | if (priv->default_wep_key) { | 1950 | if (priv->default_wep_key) { |
1951 | /* the WEP key was sent as static */ | 1951 | /* the WEP key was sent as static */ |
1952 | keyidx = ctl->key_idx; | 1952 | keyidx = ctl->hw_key->hw_key_idx; |
1953 | memcpy(&cmd->cmd.tx.key[3], wepkey->key, | 1953 | memcpy(&cmd->cmd.tx.key[3], wepkey->key, |
1954 | wepkey->key_size); | 1954 | wepkey->key_size); |
1955 | if (wepkey->key_size == WEP_KEY_LEN_128) | 1955 | if (wepkey->key_size == WEP_KEY_LEN_128) |