aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/ath/ath6kl/cfg80211.c11
-rw-r--r--drivers/net/wireless/ath/ath6kl/core.h6
-rw-r--r--drivers/net/wireless/ath/ath6kl/wmi.c17
-rw-r--r--drivers/net/wireless/ath/ath6kl/wmi.h7
4 files changed, 41 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index 80910286d1b8..df95e0d9d708 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -2617,6 +2617,13 @@ static int ath6kl_start_ap(struct wiphy *wiphy, struct net_device *dev,
2617 p.nw_subtype = SUBTYPE_NONE; 2617 p.nw_subtype = SUBTYPE_NONE;
2618 } 2618 }
2619 2619
2620 if (info->inactivity_timeout) {
2621 res = ath6kl_wmi_set_inact_period(ar->wmi, vif->fw_vif_idx,
2622 info->inactivity_timeout);
2623 if (res < 0)
2624 return res;
2625 }
2626
2620 res = ath6kl_wmi_ap_profile_commit(ar->wmi, vif->fw_vif_idx, &p); 2627 res = ath6kl_wmi_ap_profile_commit(ar->wmi, vif->fw_vif_idx, &p);
2621 if (res < 0) 2628 if (res < 0)
2622 return res; 2629 return res;
@@ -3283,6 +3290,10 @@ int ath6kl_cfg80211_init(struct ath6kl *ar)
3283 if (test_bit(ATH6KL_FW_CAPABILITY_SCHED_SCAN, ar->fw_capabilities)) 3290 if (test_bit(ATH6KL_FW_CAPABILITY_SCHED_SCAN, ar->fw_capabilities))
3284 ar->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN; 3291 ar->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN;
3285 3292
3293 if (test_bit(ATH6KL_FW_CAPABILITY_INACTIVITY_TIMEOUT,
3294 ar->fw_capabilities))
3295 ar->wiphy->features = NL80211_FEATURE_INACTIVITY_TIMER;
3296
3286 ar->wiphy->probe_resp_offload = 3297 ar->wiphy->probe_resp_offload =
3287 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS | 3298 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS |
3288 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 | 3299 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 |
diff --git a/drivers/net/wireless/ath/ath6kl/core.h b/drivers/net/wireless/ath/ath6kl/core.h
index 17697eb054fa..a29a3494dcc5 100644
--- a/drivers/net/wireless/ath/ath6kl/core.h
+++ b/drivers/net/wireless/ath/ath6kl/core.h
@@ -91,6 +91,12 @@ enum ath6kl_fw_capability {
91 */ 91 */
92 ATH6KL_FW_CAPABILITY_STA_P2PDEV_DUPLEX, 92 ATH6KL_FW_CAPABILITY_STA_P2PDEV_DUPLEX,
93 93
94 /*
95 * Firmware has support to cleanup inactive stations
96 * in AP mode.
97 */
98 ATH6KL_FW_CAPABILITY_INACTIVITY_TIMEOUT,
99
94 /* this needs to be last */ 100 /* this needs to be last */
95 ATH6KL_FW_CAPABILITY_MAX, 101 ATH6KL_FW_CAPABILITY_MAX,
96}; 102};
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c
index 7654e8e286d3..b1b1f347a118 100644
--- a/drivers/net/wireless/ath/ath6kl/wmi.c
+++ b/drivers/net/wireless/ath/ath6kl/wmi.c
@@ -3395,6 +3395,23 @@ int ath6kl_wmi_cancel_remain_on_chnl_cmd(struct wmi *wmi, u8 if_idx)
3395 WMI_CANCEL_REMAIN_ON_CHNL_CMDID); 3395 WMI_CANCEL_REMAIN_ON_CHNL_CMDID);
3396} 3396}
3397 3397
3398int ath6kl_wmi_set_inact_period(struct wmi *wmi, u8 if_idx, int inact_timeout)
3399{
3400 struct sk_buff *skb;
3401 struct wmi_set_inact_period_cmd *cmd;
3402
3403 skb = ath6kl_wmi_get_new_buf(sizeof(*cmd));
3404 if (!skb)
3405 return -ENOMEM;
3406
3407 cmd = (struct wmi_set_inact_period_cmd *) skb->data;
3408 cmd->inact_period = cpu_to_le32(inact_timeout);
3409 cmd->num_null_func = 0;
3410
3411 return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_AP_CONN_INACT_CMDID,
3412 NO_SYNC_WMIFLAG);
3413}
3414
3398static int ath6kl_wmi_control_rx_xtnd(struct wmi *wmi, struct sk_buff *skb) 3415static int ath6kl_wmi_control_rx_xtnd(struct wmi *wmi, struct sk_buff *skb)
3399{ 3416{
3400 struct wmix_cmd_hdr *cmd; 3417 struct wmix_cmd_hdr *cmd;
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.h b/drivers/net/wireless/ath/ath6kl/wmi.h
index 4092e3e80790..8c8a92258517 100644
--- a/drivers/net/wireless/ath/ath6kl/wmi.h
+++ b/drivers/net/wireless/ath/ath6kl/wmi.h
@@ -2141,6 +2141,11 @@ struct wmi_ap_hidden_ssid_cmd {
2141 u8 hidden_ssid; 2141 u8 hidden_ssid;
2142} __packed; 2142} __packed;
2143 2143
2144struct wmi_set_inact_period_cmd {
2145 __le32 inact_period;
2146 u8 num_null_func;
2147} __packed;
2148
2144/* AP mode events */ 2149/* AP mode events */
2145struct wmi_ap_set_apsd_cmd { 2150struct wmi_ap_set_apsd_cmd {
2146 u8 enable; 2151 u8 enable;
@@ -2538,6 +2543,8 @@ int ath6kl_wmi_cancel_remain_on_chnl_cmd(struct wmi *wmi, u8 if_idx);
2538int ath6kl_wmi_set_appie_cmd(struct wmi *wmi, u8 if_idx, u8 mgmt_frm_type, 2543int ath6kl_wmi_set_appie_cmd(struct wmi *wmi, u8 if_idx, u8 mgmt_frm_type,
2539 const u8 *ie, u8 ie_len); 2544 const u8 *ie, u8 ie_len);
2540 2545
2546int ath6kl_wmi_set_inact_period(struct wmi *wmi, u8 if_idx, int inact_timeout);
2547
2541void ath6kl_wmi_sscan_timer(unsigned long ptr); 2548void ath6kl_wmi_sscan_timer(unsigned long ptr);
2542 2549
2543struct ath6kl_vif *ath6kl_get_vif_by_index(struct ath6kl *ar, u8 if_idx); 2550struct ath6kl_vif *ath6kl_get_vif_by_index(struct ath6kl *ar, u8 if_idx);