mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 07:22:33 +00:00
73 lines
2.8 KiB
Diff
73 lines
2.8 KiB
Diff
|
From: Mohammed Shafi Shajakhan <mohammed@qti.qualcomm.com>
|
||
|
Date: Thu, 23 Jun 2016 22:10:01 +0530
|
||
|
Subject: [PATCH] ath10k: Fix sending NULL/ Qos NULL data frames for
|
||
|
QCA99X0 and later
|
||
|
|
||
|
For chipsets like QCA99X0, IPQ4019 and later we are not getting proper
|
||
|
NULL func status (always acked/successs !!) when hostapd does a
|
||
|
PROBE_CLIENT via nullfunc frames when the station is powered off
|
||
|
abruptly (inactive timer probes client via null func after the inactive
|
||
|
time reaches beyond the threshold). Fix this by disabling the workaround
|
||
|
(getting the ACK status of NULL func frames by sending via HTT mgmt-tx
|
||
|
path) introduced by the change ("ath10k: fix beacon loss handling ")
|
||
|
for QCA99X0 and later chipsets. The normal tx path provides the proper
|
||
|
ACK status for NULL data frames. As of now disable this workaround for
|
||
|
chipsets QCA99X0 and later, once the 10.1 firmware is obselete we can
|
||
|
completely get rid of this workaround for all the chipsets
|
||
|
|
||
|
Signed-off-by: Tamizh chelvam <c_traja@qti.qualcomm.com>
|
||
|
Signed-off-by: Mohammed Shafi Shajakhan <mohammed@qti.qualcomm.com>
|
||
|
---
|
||
|
|
||
|
--- a/drivers/net/wireless/ath/ath10k/core.c
|
||
|
+++ b/drivers/net/wireless/ath/ath10k/core.c
|
||
|
@@ -181,6 +181,7 @@ static const struct ath10k_hw_params ath
|
||
|
.board = QCA99X0_HW_2_0_BOARD_DATA_FILE,
|
||
|
.board_size = QCA99X0_BOARD_DATA_SZ,
|
||
|
.board_ext_size = QCA99X0_BOARD_EXT_DATA_SZ,
|
||
|
+ .disable_null_func_workaround = true,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
@@ -204,6 +205,7 @@ static const struct ath10k_hw_params ath
|
||
|
.board = QCA9984_HW_1_0_BOARD_DATA_FILE,
|
||
|
.board_size = QCA99X0_BOARD_DATA_SZ,
|
||
|
.board_ext_size = QCA99X0_BOARD_EXT_DATA_SZ,
|
||
|
+ .disable_null_func_workaround = true,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
@@ -262,6 +264,7 @@ static const struct ath10k_hw_params ath
|
||
|
.board = QCA4019_HW_1_0_BOARD_DATA_FILE,
|
||
|
.board_size = QCA4019_BOARD_DATA_SZ,
|
||
|
.board_ext_size = QCA4019_BOARD_EXT_DATA_SZ,
|
||
|
+ .disable_null_func_workaround = true,
|
||
|
},
|
||
|
},
|
||
|
};
|
||
|
--- a/drivers/net/wireless/ath/ath10k/core.h
|
||
|
+++ b/drivers/net/wireless/ath/ath10k/core.h
|
||
|
@@ -750,6 +750,12 @@ struct ath10k {
|
||
|
const char *board;
|
||
|
size_t board_size;
|
||
|
size_t board_ext_size;
|
||
|
+ /* Workaround of sending NULL data frames via
|
||
|
+ * HTT mgmt TX and getting the proper ACK status does
|
||
|
+ * not works for chipsets QCA99X0 and later, while
|
||
|
+ * Tx data path reports the ACK status properly.
|
||
|
+ */
|
||
|
+ bool disable_null_func_workaround;
|
||
|
} fw;
|
||
|
} hw_params;
|
||
|
|
||
|
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||
|
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||
|
@@ -3253,6 +3253,7 @@ ath10k_mac_tx_h_get_txmode(struct ath10k
|
||
|
* mode though because AP don't sleep.
|
||
|
*/
|
||
|
if (ar->htt.target_version_major < 3 &&
|
||
|
+ !ar->hw_params.fw.disable_null_func_workaround &&
|
||
|
(ieee80211_is_nullfunc(fc) || ieee80211_is_qos_nullfunc(fc)) &&
|
||
|
!test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
|
||
|
ar->running_fw->fw_file.fw_features))
|