ath6kl: Parse beacon interval from userspace
authorMohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
Fri, 16 Nov 2012 12:53:15 +0000 (18:23 +0530)
committerKalle Valo <kvalo@qca.qualcomm.com>
Tue, 27 Nov 2012 19:44:28 +0000 (21:44 +0200)
Parse beacon interval from userspace to
firmware. Incase the firmware does not
supports it, just print a warning message
and continue with AP settings.

Cc: Sumathi Mandipati <sumathi@qca.qualcomm.com>
Signed-off-by: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath6kl/cfg80211.c
drivers/net/wireless/ath/ath6kl/wmi.c
drivers/net/wireless/ath/ath6kl/wmi.h

index cea885617d61c277304c48393e83a28bf9a3808c..f253d6684d8ff3ee03c5dade2fa1bd145e77f2b6 100644 (file)
@@ -2770,9 +2770,11 @@ static int ath6kl_start_ap(struct wiphy *wiphy, struct net_device *dev,
 
        ar->ap_mode_bkey.valid = false;
 
-       /* TODO:
-        * info->interval
-        */
+       ret = ath6kl_wmi_ap_set_beacon_intvl_cmd(ar->wmi, vif->fw_vif_idx,
+                                                info->beacon_interval);
+
+       if (ret)
+               ath6kl_warn("Failed to set beacon interval: %d\n", ret);
 
        ret = ath6kl_wmi_ap_set_dtim_cmd(ar->wmi, vif->fw_vif_idx,
                                         info->dtim_period);
index f4ef6a724e4c0e44ad0a0fbef55c05e1771c191b..a0503c2e7a7e4f50bc60955fa6563a9565ae91ac 100644 (file)
@@ -752,6 +752,23 @@ int ath6kl_wmi_force_roam_cmd(struct wmi *wmi, const u8 *bssid)
                                   NO_SYNC_WMIFLAG);
 }
 
+int ath6kl_wmi_ap_set_beacon_intvl_cmd(struct wmi *wmi, u8 if_idx,
+                                      u32 beacon_intvl)
+{
+       struct sk_buff *skb;
+       struct set_beacon_int_cmd *cmd;
+
+       skb = ath6kl_wmi_get_new_buf(sizeof(*cmd));
+       if (!skb)
+               return -ENOMEM;
+
+       cmd = (struct set_beacon_int_cmd *) skb->data;
+
+       cmd->beacon_intvl = cpu_to_le32(beacon_intvl);
+       return ath6kl_wmi_cmd_send(wmi, if_idx, skb,
+                                  WMI_SET_BEACON_INT_CMDID, NO_SYNC_WMIFLAG);
+}
+
 int ath6kl_wmi_ap_set_dtim_cmd(struct wmi *wmi, u8 if_idx, u32 dtim_period)
 {
        struct sk_buff *skb;
index 98b1755e67f41f41f2af6f06ff6747731572aaca..b5f226503baf7e37ea15c7953878f7a05185375f 100644 (file)
@@ -1660,6 +1660,10 @@ struct roam_ctrl_cmd {
        u8 roam_ctrl;
 } __packed;
 
+struct set_beacon_int_cmd {
+       __le32 beacon_intvl;
+} __packed;
+
 struct set_dtim_cmd {
        __le32 dtim_period;
 } __packed;
@@ -2649,6 +2653,8 @@ int ath6kl_wmi_del_wow_pattern_cmd(struct wmi *wmi, u8 if_idx,
 int ath6kl_wmi_set_rssi_filter_cmd(struct wmi *wmi, u8 if_idx, s8 rssi);
 int ath6kl_wmi_set_roam_lrssi_cmd(struct wmi *wmi, u8 lrssi);
 int ath6kl_wmi_ap_set_dtim_cmd(struct wmi *wmi, u8 if_idx, u32 dtim_period);
+int ath6kl_wmi_ap_set_beacon_intvl_cmd(struct wmi *wmi, u8 if_idx,
+                                      u32 beacon_interval);
 int ath6kl_wmi_force_roam_cmd(struct wmi *wmi, const u8 *bssid);
 int ath6kl_wmi_set_roam_mode_cmd(struct wmi *wmi, enum wmi_roam_mode mode);
 int ath6kl_wmi_mcast_filter_cmd(struct wmi *wmi, u8 if_idx, bool mc_all_on);