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: Christian Lamparter <chunkeey@googlemail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
17f658ac8c
commit
7a5c730773
|
@ -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)
|
||||||
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)
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue