Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 102438
b: refs/heads/master
c: 1c01442
h: refs/heads/master
v: v3
  • Loading branch information
Ivo van Doorn authored and John W. Linville committed May 7, 2008
1 parent ef72b1b commit 80248a2
Show file tree
Hide file tree
Showing 9 changed files with 31 additions and 19 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6f4083aadd57e3da12fa4e67fcadaec23138a315
refs/heads/master: 1c014420583564ac09e3b67006f2e7050861e66b
2 changes: 1 addition & 1 deletion trunk/drivers/net/wireless/ath5k/base.c
Original file line number Diff line number Diff line change
Expand Up @@ -1319,7 +1319,7 @@ ath5k_txbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf,
pktlen = skb->len;

if (!(ctl->flags & IEEE80211_TXCTL_DO_NOT_ENCRYPT)) {
keyidx = ctl->key_idx;
keyidx = ctl->hw_key->hw_key_idx;
pktlen += ctl->icv_len;
}

Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/net/wireless/b43/xmit.c
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ int b43_generate_txhdr(struct b43_wldev *dev,

plcp_fragment_len = fragment_len + FCS_LEN;
if (use_encryption) {
u8 key_idx = (u16) (txctl->key_idx);
u8 key_idx = txctl->hw_key->hw_key_idx;
struct b43_key *key;
int wlhdr_len;
size_t iv_len;
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/net/wireless/b43legacy/xmit.c
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ static int generate_txhdr_fw3(struct b43legacy_wldev *dev,

plcp_fragment_len = fragment_len + FCS_LEN;
if (use_encryption) {
u8 key_idx = (u16)(txctl->key_idx);
u8 key_idx = txctl->hw_key->hw_key_idx;
struct b43legacy_key *key;
int wlhdr_len;
size_t iv_len;
Expand Down
7 changes: 4 additions & 3 deletions trunk/drivers/net/wireless/iwlwifi/iwl3945-base.c
Original file line number Diff line number Diff line change
Expand Up @@ -2391,7 +2391,8 @@ static void iwl3945_build_tx_cmd_hwcrypto(struct iwl3945_priv *priv,
struct sk_buff *skb_frag,
int last_frag)
{
struct iwl3945_hw_key *keyinfo = &priv->stations[ctl->key_idx].keyinfo;
struct iwl3945_hw_key *keyinfo =
&priv->stations[ctl->hw_key->hw_key_idx].keyinfo;

switch (keyinfo->alg) {
case ALG_CCMP:
Expand All @@ -2414,15 +2415,15 @@ static void iwl3945_build_tx_cmd_hwcrypto(struct iwl3945_priv *priv,

case ALG_WEP:
cmd->cmd.tx.sec_ctl = TX_CMD_SEC_WEP |
(ctl->key_idx & TX_CMD_SEC_MSK) << TX_CMD_SEC_SHIFT;
(ctl->hw_key->hw_key_idx & TX_CMD_SEC_MSK) << TX_CMD_SEC_SHIFT;

if (keyinfo->keylen == 13)
cmd->cmd.tx.sec_ctl |= TX_CMD_SEC_KEY128;

memcpy(&cmd->cmd.tx.key[3], keyinfo->key, keyinfo->keylen);

IWL_DEBUG_TX("Configuring packet for WEP encryption "
"with key %d\n", ctl->key_idx);
"with key %d\n", ctl->hw_key->hw_key_idx);
break;

default:
Expand Down
6 changes: 3 additions & 3 deletions trunk/drivers/net/wireless/iwlwifi/iwl4965-base.c
Original file line number Diff line number Diff line change
Expand Up @@ -1926,7 +1926,7 @@ static void iwl4965_build_tx_cmd_hwcrypto(struct iwl_priv *priv,
struct iwl_wep_key *wepkey;
int keyidx = 0;

BUG_ON(ctl->key_idx > 3);
BUG_ON(ctl->hw_key->hw_key_idx > 3);

switch (keyinfo->alg) {
case ALG_CCMP:
Expand All @@ -1945,11 +1945,11 @@ static void iwl4965_build_tx_cmd_hwcrypto(struct iwl_priv *priv,
break;

case ALG_WEP:
wepkey = &priv->wep_keys[ctl->key_idx];
wepkey = &priv->wep_keys[ctl->hw_key->hw_key_idx];
cmd->cmd.tx.sec_ctl = 0;
if (priv->default_wep_key) {
/* the WEP key was sent as static */
keyidx = ctl->key_idx;
keyidx = ctl->hw_key->hw_key_idx;
memcpy(&cmd->cmd.tx.key[3], wepkey->key,
wepkey->key_size);
if (wepkey->key_size == WEP_KEY_LEN_128)
Expand Down
19 changes: 15 additions & 4 deletions trunk/include/net/mac80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -286,8 +286,17 @@ enum mac80211_tx_control_flags {

/* Transmit control fields. This data structure is passed to low-level driver
* with each TX frame. The low-level driver is responsible for configuring
* the hardware to use given values (depending on what is supported). */

* the hardware to use given values (depending on what is supported).
*
* NOTE: Be careful with using the pointers outside of the ieee80211_ops->tx()
* context (i.e. when defering the work to a workqueue).
* The vif pointer is valid until the it has been removed with the
* ieee80211_ops->remove_interface() callback funtion.
* The hw_key pointer is valid until it has been removed with the
* ieee80211_ops->set_key() callback function.
* The tx_rate and alt_retry_rate pointers are valid until the phy is
* deregistered.
*/
struct ieee80211_tx_control {
struct ieee80211_vif *vif;
struct ieee80211_rate *tx_rate;
Expand All @@ -298,9 +307,11 @@ struct ieee80211_tx_control {
/* retry rate for the last retries */
struct ieee80211_rate *alt_retry_rate;

/* Key used for hardware encryption
* NULL if IEEE80211_TXCTL_DO_NOT_ENCRYPT is set */
struct ieee80211_key_conf *hw_key;

u32 flags; /* tx control flags defined above */
u8 key_idx; /* keyidx from hw->set_key(), undefined if
* IEEE80211_TXCTL_DO_NOT_ENCRYPT is set */
u8 retry_limit; /* 1 = only first attempt, 2 = one retry, ..
* This could be used when set_retry_limit
* is not implemented by the driver */
Expand Down
2 changes: 1 addition & 1 deletion trunk/net/mac80211/wep.c
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,7 @@ static int wep_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb)
if (ieee80211_wep_encrypt(tx->local, skb, tx->key))
return -1;
} else {
tx->control->key_idx = tx->key->conf.hw_key_idx;
tx->control->hw_key = &tx->key->conf;
if (tx->key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) {
if (!ieee80211_wep_add_iv(tx->local, skb, tx->key))
return -1;
Expand Down
8 changes: 4 additions & 4 deletions trunk/net/mac80211/wpa.c
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ static int tkip_encrypt_skb(struct ieee80211_tx_data *tx,
0x7f),
(u8) key->u.tkip.iv16);

tx->control->key_idx = tx->key->conf.hw_key_idx;
tx->control->hw_key = &tx->key->conf;
return 0;
}

Expand Down Expand Up @@ -256,7 +256,7 @@ ieee80211_crypto_tkip_encrypt(struct ieee80211_tx_data *tx)
!(tx->key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) &&
!wpa_test) {
/* hwaccel - with no need for preallocated room for IV/ICV */
tx->control->key_idx = tx->key->conf.hw_key_idx;
tx->control->hw_key = &tx->key->conf;
return TX_CONTINUE;
}

Expand Down Expand Up @@ -478,7 +478,7 @@ static int ccmp_encrypt_skb(struct ieee80211_tx_data *tx,

if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) {
/* hwaccel - with preallocated room for CCMP header */
tx->control->key_idx = key->conf.hw_key_idx;
tx->control->hw_key = &tx->key->conf;
return 0;
}

Expand All @@ -505,7 +505,7 @@ ieee80211_crypto_ccmp_encrypt(struct ieee80211_tx_data *tx)
!(tx->key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) {
/* hwaccel - with no need for preallocated room for CCMP "
* header or MIC fields */
tx->control->key_idx = tx->key->conf.hw_key_idx;
tx->control->hw_key = &tx->key->conf;
return TX_CONTINUE;
}

Expand Down

0 comments on commit 80248a2

Please sign in to comment.