提交 7a5c7307 编写于 作者: C Christian Lamparter 提交者: John W. Linville

carl9170: don't enable hw crypto offload, if the fw doesn't support it

Previously, op_start would set disable_offload always
to false, even if it was set to true by the fw parser.
Signed-off-by: NChristian Lamparter <chunkeey@googlemail.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 17f658ac
...@@ -290,6 +290,7 @@ struct ar9170 { ...@@ -290,6 +290,7 @@ struct ar9170 {
unsigned int rx_size; unsigned int rx_size;
unsigned int tx_seq_table; unsigned int tx_seq_table;
bool ba_filter; bool ba_filter;
bool disable_offload_fw;
} fw; } fw;
/* interface configuration combinations */ /* interface configuration combinations */
......
...@@ -282,7 +282,7 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len) ...@@ -282,7 +282,7 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len)
if (!SUPP(CARL9170FW_COMMAND_CAM)) { if (!SUPP(CARL9170FW_COMMAND_CAM)) {
dev_info(&ar->udev->dev, "crypto offloading is disabled " dev_info(&ar->udev->dev, "crypto offloading is disabled "
"by firmware.\n"); "by firmware.\n");
ar->disable_offload = true; ar->fw.disable_offload_fw = true;
} }
if (SUPP(CARL9170FW_PSM) && SUPP(CARL9170FW_FIXED_5GHZ_PSM)) if (SUPP(CARL9170FW_PSM) && SUPP(CARL9170FW_FIXED_5GHZ_PSM))
......
...@@ -358,8 +358,13 @@ static int carl9170_op_start(struct ieee80211_hw *hw) ...@@ -358,8 +358,13 @@ static int carl9170_op_start(struct ieee80211_hw *hw)
ar->ps.last_action = jiffies; ar->ps.last_action = jiffies;
ar->ps.last_slept = jiffies; ar->ps.last_slept = jiffies;
ar->erp_mode = CARL9170_ERP_AUTO; ar->erp_mode = CARL9170_ERP_AUTO;
ar->rx_software_decryption = false;
ar->disable_offload = false; /* Set "disable hw crypto offload" whenever the module parameter
* nohwcrypt is true or if the firmware does not support it.
*/
ar->disable_offload = modparam_nohwcrypt |
ar->fw.disable_offload_fw;
ar->rx_software_decryption = ar->disable_offload;
for (i = 0; i < ar->hw->queues; i++) { for (i = 0; i < ar->hw->queues; i++) {
ar->queue_stop_timeout[i] = jiffies; ar->queue_stop_timeout[i] = jiffies;
...@@ -565,12 +570,20 @@ static int carl9170_init_interface(struct ar9170 *ar, ...@@ -565,12 +570,20 @@ static int carl9170_init_interface(struct ar9170 *ar,
memcpy(common->macaddr, vif->addr, ETH_ALEN); memcpy(common->macaddr, vif->addr, ETH_ALEN);
if (modparam_nohwcrypt || /* We have to fall back to software crypto, whenever
((vif->type != NL80211_IFTYPE_STATION) && * the user choose to participates in an IBSS. HW
(vif->type != NL80211_IFTYPE_AP))) { * offload for IBSS RSN is not supported by this driver.
ar->rx_software_decryption = true; *
ar->disable_offload = true; * NOTE: If the previous main interface has already
} * disabled hw crypto offload, we have to keep this
* previous disable_offload setting as it was.
* Altough ideally, we should notify mac80211 and tell
* it to forget about any HW crypto offload for now.
*/
ar->disable_offload |= ((vif->type != NL80211_IFTYPE_STATION) &&
(vif->type != NL80211_IFTYPE_AP));
ar->rx_software_decryption = ar->disable_offload;
err = carl9170_set_operating_mode(ar); err = carl9170_set_operating_mode(ar);
return err; return err;
...@@ -1160,9 +1173,7 @@ static int carl9170_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, ...@@ -1160,9 +1173,7 @@ static int carl9170_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
if (ar->disable_offload || !vif) if (ar->disable_offload || !vif)
return -EOPNOTSUPP; return -EOPNOTSUPP;
/* /* Fall back to software encryption whenever the driver is connected
* We have to fall back to software encryption, whenever
* the user choose to participates in an IBSS or is connected
* to more than one network. * to more than one network.
* *
* This is very unfortunate, because some machines cannot handle * This is very unfortunate, because some machines cannot handle
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册