[PATCH 1/3] Use beacon interval from mac80211

Kalle Valo kvalo at qca.qualcomm.com
Tue May 28 04:23:00 EDT 2013


Signed-off-by: Kalle Valo <kvalo at qca.qualcomm.com>
---
 main.c    |   16 +++++++++++++---
 smd.c     |    5 +++--
 smd.h     |    2 +-
 wcn36xx.h |    2 ++
 4 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/main.c b/main.c
index d6e0d75..a9d58db 100644
--- a/main.c
+++ b/main.c
@@ -237,7 +237,8 @@ static void wcn36xx_bss_info_changed(struct ieee80211_hw *hw,
 		    !is_zero_ether_addr(bss_conf->bssid)) {
 			wcn36xx_smd_join(wcn, bss_conf->bssid, vif->addr, wcn->ch);
 			wcn36xx_smd_config_bss(wcn, NL80211_IFTYPE_STATION,
-					       bss_conf->bssid, false);
+					       bss_conf->bssid, false,
+					       wcn->beacon_interval);
 		}
 	}
 
@@ -251,6 +252,14 @@ static void wcn36xx_bss_info_changed(struct ieee80211_hw *hw,
 		memcpy(&wcn->ssid.ssid, bss_conf->ssid, bss_conf->ssid_len);
 	}
 
+	if (changed & BSS_CHANGED_BEACON_INT) {
+		wcn36xx_dbg(WCN36XX_DBG_MAC,
+			    "mac bss changed beacon_int %d",
+			    bss_conf->beacon_int);
+
+		wcn->beacon_interval = bss_conf->beacon_int;
+	}
+
 	if (changed & BSS_CHANGED_ASSOC) {
 		if(bss_conf->assoc) {
 			wcn36xx_dbg(WCN36XX_DBG_MAC,
@@ -266,7 +275,7 @@ static void wcn36xx_bss_info_changed(struct ieee80211_hw *hw,
 						WCN36XX_HAL_LINK_POSTASSOC_STATE);
 			wcn36xx_smd_config_bss(wcn, NL80211_IFTYPE_STATION,
 					       bss_conf->bssid,
-					       true);
+					       true, wcn->beacon_interval);
 			wcn36xx_smd_config_sta(wcn, bss_conf->bssid, vif->addr);
 
 		} else {
@@ -299,7 +308,8 @@ static void wcn36xx_bss_info_changed(struct ieee80211_hw *hw,
 			wcn->beacon_enable = true;
 			skb = ieee80211_beacon_get_tim(hw, vif, &tim_off, &tim_len);
 			wcn36xx_smd_config_bss(wcn, wcn->iftype,
-					       wcn->addresses[0].addr, false);
+					       wcn->addresses[0].addr, false,
+					       wcn->beacon_interval);
 			wcn36xx_smd_send_beacon(wcn, skb, tim_off, 0);
 
 			if (vif->type == NL80211_IFTYPE_ADHOC)
diff --git a/smd.c b/smd.c
index 99d40f4..67361b6 100644
--- a/smd.c
+++ b/smd.c
@@ -652,7 +652,8 @@ static int wcn36xx_smd_config_bss_v1(struct wcn36xx *wcn,
 }
 
 int wcn36xx_smd_config_bss(struct wcn36xx *wcn, enum nl80211_iftype type,
-			   const u8 *bssid, bool update)
+			   const u8 *bssid, bool update,
+			   u16 beacon_interval)
 {
 	struct wcn36xx_hal_config_bss_req_msg msg;
 	struct wcn36xx_hal_config_bss_params *bss;
@@ -698,7 +699,7 @@ int wcn36xx_smd_config_bss(struct wcn36xx *wcn, enum nl80211_iftype type,
 	bss->lln_non_gf_coexist = 0;
 	bss->lsig_tx_op_protection_full_support = 0;
 	bss->rifs_mode = 0;
-	bss->beacon_interval = 0x64;
+	bss->beacon_interval = beacon_interval;
 	bss->dtim_period = 2;
 	bss->tx_channel_width_set = 0;
 	bss->oper_channel = wcn->ch;
diff --git a/smd.h b/smd.h
index 53d1655..e326f72 100644
--- a/smd.h
+++ b/smd.h
@@ -63,7 +63,7 @@ int wcn36xx_smd_set_link_st(struct wcn36xx *wcn, const u8 *bssid,
 			    const u8 *sta_mac,
 			    enum wcn36xx_hal_link_state state);
 int wcn36xx_smd_config_bss(struct wcn36xx *wcn, enum nl80211_iftype type,
-			   const u8 *bssid, bool update);
+			   const u8 *bssid, bool update, u16 beacon_interval);
 int wcn36xx_smd_delete_bss(struct wcn36xx *wcn);
 int wcn36xx_smd_config_sta(struct wcn36xx *wcn, const u8 *bssid,
 			   const u8 *sta_mac);
diff --git a/wcn36xx.h b/wcn36xx.h
index 91eacb4..ab29b44 100644
--- a/wcn36xx.h
+++ b/wcn36xx.h
@@ -102,6 +102,8 @@ struct wcn36xx {
 	struct wcn36xx_hal_mac_ssid ssid;
 	enum nl80211_iftype iftype;
 	u16 aid;
+	u16 beacon_interval;
+
 	u8 fw_revision;
 	u8 fw_version;
 	u8 fw_minor;




More information about the wcn36xx mailing list