aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>2012-09-27 08:49:51 -0400
committerKalle Valo <kvalo@qca.qualcomm.com>2012-10-24 04:49:57 -0400
commit7ac25eacc6766617edaac69d928f431a9983ccf2 (patch)
tree888dfad03f1d061cdcb53c49ad8d027c0ddb6103
parentc0b34e2b41cc29c15b4cf247727efdab6a864c1b (diff)
ath6kl: Fix inactivity timeout for AR6004
Currently AR6004 handles the inactivity timeout resolution in minutes rather than seconds. So parse the inactivity timeout to the firmware in minutes. For now we will cleanup the inactive station entries to the nearest converted minutes (ex: an inactive time of 70 seconds would take atleast 2 - 3 minutes) Tested with surprise removal of client cards/host shutdown. Cc: Manikandan Radhakrishnan <mradhakr@qca.qualcomm.com> Reported-by: Leela Kella <leela@qca.qualcomm.com> Signed-off-by: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
-rw-r--r--drivers/net/wireless/ath/ath6kl/cfg80211.c10
-rw-r--r--drivers/net/wireless/ath/ath6kl/core.h3
-rw-r--r--drivers/net/wireless/ath/ath6kl/init.c13
3 files changed, 19 insertions, 7 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index 6d143e453f9e..bf5e7d519398 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -2760,6 +2760,7 @@ static int ath6kl_start_ap(struct wiphy *wiphy, struct net_device *dev,
2760 int res; 2760 int res;
2761 int i, ret; 2761 int i, ret;
2762 u16 rsn_capab = 0; 2762 u16 rsn_capab = 0;
2763 int inactivity_timeout = 0;
2763 2764
2764 ath6kl_dbg(ATH6KL_DBG_WLAN_CFG, "%s:\n", __func__); 2765 ath6kl_dbg(ATH6KL_DBG_WLAN_CFG, "%s:\n", __func__);
2765 2766
@@ -2896,8 +2897,15 @@ static int ath6kl_start_ap(struct wiphy *wiphy, struct net_device *dev,
2896 } 2897 }
2897 2898
2898 if (info->inactivity_timeout) { 2899 if (info->inactivity_timeout) {
2900
2901 inactivity_timeout = info->inactivity_timeout;
2902
2903 if (ar->hw.flags & ATH6KL_HW_AP_INACTIVITY_MINS)
2904 inactivity_timeout = DIV_ROUND_UP(inactivity_timeout,
2905 60);
2906
2899 res = ath6kl_wmi_set_inact_period(ar->wmi, vif->fw_vif_idx, 2907 res = ath6kl_wmi_set_inact_period(ar->wmi, vif->fw_vif_idx,
2900 info->inactivity_timeout); 2908 inactivity_timeout);
2901 if (res < 0) 2909 if (res < 0)
2902 return res; 2910 return res;
2903 } 2911 }
diff --git a/drivers/net/wireless/ath/ath6kl/core.h b/drivers/net/wireless/ath/ath6kl/core.h
index fc5e4b258183..95fc9b37e6a6 100644
--- a/drivers/net/wireless/ath/ath6kl/core.h
+++ b/drivers/net/wireless/ath/ath6kl/core.h
@@ -149,7 +149,8 @@ struct ath6kl_fw_ie {
149}; 149};
150 150
151enum ath6kl_hw_flags { 151enum ath6kl_hw_flags {
152 ATH6KL_HW_64BIT_RATES = BIT(0), 152 ATH6KL_HW_64BIT_RATES = BIT(0),
153 ATH6KL_HW_AP_INACTIVITY_MINS = BIT(1),
153}; 154};
154 155
155#define ATH6KL_FW_API2_FILE "fw-2.bin" 156#define ATH6KL_FW_API2_FILE "fw-2.bin"
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c
index 18550c51e12e..7ffb8533986b 100644
--- a/drivers/net/wireless/ath/ath6kl/init.c
+++ b/drivers/net/wireless/ath/ath6kl/init.c
@@ -93,7 +93,8 @@ static const struct ath6kl_hw hw_list[] = {
93 .board_addr = 0x433900, 93 .board_addr = 0x433900,
94 .refclk_hz = 26000000, 94 .refclk_hz = 26000000,
95 .uarttx_pin = 11, 95 .uarttx_pin = 11,
96 .flags = ATH6KL_HW_64BIT_RATES, 96 .flags = ATH6KL_HW_64BIT_RATES |
97 ATH6KL_HW_AP_INACTIVITY_MINS,
97 98
98 .fw = { 99 .fw = {
99 .dir = AR6004_HW_1_0_FW_DIR, 100 .dir = AR6004_HW_1_0_FW_DIR,
@@ -113,8 +114,8 @@ static const struct ath6kl_hw hw_list[] = {
113 .board_addr = 0x43d400, 114 .board_addr = 0x43d400,
114 .refclk_hz = 40000000, 115 .refclk_hz = 40000000,
115 .uarttx_pin = 11, 116 .uarttx_pin = 11,
116 .flags = ATH6KL_HW_64BIT_RATES, 117 .flags = ATH6KL_HW_64BIT_RATES |
117 118 ATH6KL_HW_AP_INACTIVITY_MINS,
118 .fw = { 119 .fw = {
119 .dir = AR6004_HW_1_1_FW_DIR, 120 .dir = AR6004_HW_1_1_FW_DIR,
120 .fw = AR6004_HW_1_1_FIRMWARE_FILE, 121 .fw = AR6004_HW_1_1_FIRMWARE_FILE,
@@ -133,7 +134,8 @@ static const struct ath6kl_hw hw_list[] = {
133 .board_addr = 0x435c00, 134 .board_addr = 0x435c00,
134 .refclk_hz = 40000000, 135 .refclk_hz = 40000000,
135 .uarttx_pin = 11, 136 .uarttx_pin = 11,
136 .flags = ATH6KL_HW_64BIT_RATES, 137 .flags = ATH6KL_HW_64BIT_RATES |
138 ATH6KL_HW_AP_INACTIVITY_MINS,
137 139
138 .fw = { 140 .fw = {
139 .dir = AR6004_HW_1_2_FW_DIR, 141 .dir = AR6004_HW_1_2_FW_DIR,
@@ -152,7 +154,8 @@ static const struct ath6kl_hw hw_list[] = {
152 .board_addr = 0x436400, 154 .board_addr = 0x436400,
153 .refclk_hz = 40000000, 155 .refclk_hz = 40000000,
154 .uarttx_pin = 11, 156 .uarttx_pin = 11,
155 .flags = ATH6KL_HW_64BIT_RATES, 157 .flags = ATH6KL_HW_64BIT_RATES |
158 ATH6KL_HW_AP_INACTIVITY_MINS,
156 159
157 .fw = { 160 .fw = {
158 .dir = AR6004_HW_1_3_FW_DIR, 161 .dir = AR6004_HW_1_3_FW_DIR,