diff options
Diffstat (limited to 'drivers/net/wireless/p54/main.c')
-rw-r--r-- | drivers/net/wireless/p54/main.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/net/wireless/p54/main.c b/drivers/net/wireless/p54/main.c index 7cffea795ad..aadda99989c 100644 --- a/drivers/net/wireless/p54/main.c +++ b/drivers/net/wireless/p54/main.c | |||
@@ -139,6 +139,7 @@ static int p54_beacon_format_ie_tim(struct sk_buff *skb) | |||
139 | static int p54_beacon_update(struct p54_common *priv, | 139 | static int p54_beacon_update(struct p54_common *priv, |
140 | struct ieee80211_vif *vif) | 140 | struct ieee80211_vif *vif) |
141 | { | 141 | { |
142 | struct ieee80211_tx_control control = { }; | ||
142 | struct sk_buff *beacon; | 143 | struct sk_buff *beacon; |
143 | int ret; | 144 | int ret; |
144 | 145 | ||
@@ -158,7 +159,7 @@ static int p54_beacon_update(struct p54_common *priv, | |||
158 | * to cancel the old beacon template by hand, instead the firmware | 159 | * to cancel the old beacon template by hand, instead the firmware |
159 | * will release the previous one through the feedback mechanism. | 160 | * will release the previous one through the feedback mechanism. |
160 | */ | 161 | */ |
161 | p54_tx_80211(priv->hw, beacon); | 162 | p54_tx_80211(priv->hw, &control, beacon); |
162 | priv->tsf_high32 = 0; | 163 | priv->tsf_high32 = 0; |
163 | priv->tsf_low32 = 0; | 164 | priv->tsf_low32 = 0; |
164 | 165 | ||
@@ -514,6 +515,17 @@ static int p54_set_key(struct ieee80211_hw *dev, enum set_key_cmd cmd, | |||
514 | if (modparam_nohwcrypt) | 515 | if (modparam_nohwcrypt) |
515 | return -EOPNOTSUPP; | 516 | return -EOPNOTSUPP; |
516 | 517 | ||
518 | if (key->flags & IEEE80211_KEY_FLAG_RX_MGMT) { | ||
519 | /* | ||
520 | * Unfortunately most/all firmwares are trying to decrypt | ||
521 | * incoming management frames if a suitable key can be found. | ||
522 | * However, in doing so the data in these frames gets | ||
523 | * corrupted. So, we can't have firmware supported crypto | ||
524 | * offload in this case. | ||
525 | */ | ||
526 | return -EOPNOTSUPP; | ||
527 | } | ||
528 | |||
517 | mutex_lock(&priv->conf_mutex); | 529 | mutex_lock(&priv->conf_mutex); |
518 | if (cmd == SET_KEY) { | 530 | if (cmd == SET_KEY) { |
519 | switch (key->cipher) { | 531 | switch (key->cipher) { |
@@ -737,6 +749,7 @@ struct ieee80211_hw *p54_init_common(size_t priv_data_len) | |||
737 | IEEE80211_HW_SIGNAL_DBM | | 749 | IEEE80211_HW_SIGNAL_DBM | |
738 | IEEE80211_HW_SUPPORTS_PS | | 750 | IEEE80211_HW_SUPPORTS_PS | |
739 | IEEE80211_HW_PS_NULLFUNC_STACK | | 751 | IEEE80211_HW_PS_NULLFUNC_STACK | |
752 | IEEE80211_HW_MFP_CAPABLE | | ||
740 | IEEE80211_HW_REPORTS_TX_ACK_STATUS; | 753 | IEEE80211_HW_REPORTS_TX_ACK_STATUS; |
741 | 754 | ||
742 | dev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | | 755 | dev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | |