diff options
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/cfg80211.c | 11 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/core.h | 6 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/wmi.c | 17 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/wmi.h | 7 |
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 | ||
3398 | int 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 | |||
3398 | static int ath6kl_wmi_control_rx_xtnd(struct wmi *wmi, struct sk_buff *skb) | 3415 | static 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 | ||
2144 | struct 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 */ |
2145 | struct wmi_ap_set_apsd_cmd { | 2150 | struct 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); | |||
2538 | int ath6kl_wmi_set_appie_cmd(struct wmi *wmi, u8 if_idx, u8 mgmt_frm_type, | 2543 | int 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 | ||
2546 | int ath6kl_wmi_set_inact_period(struct wmi *wmi, u8 if_idx, int inact_timeout); | ||
2547 | |||
2541 | void ath6kl_wmi_sscan_timer(unsigned long ptr); | 2548 | void ath6kl_wmi_sscan_timer(unsigned long ptr); |
2542 | 2549 | ||
2543 | struct ath6kl_vif *ath6kl_get_vif_by_index(struct ath6kl *ar, u8 if_idx); | 2550 | struct ath6kl_vif *ath6kl_get_vif_by_index(struct ath6kl *ar, u8 if_idx); |