[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