[PATCH 4/4] Implement wcn36xx_smd_set_bss_ht_params

Eugene Krasnikov k.eugene.e at gmail.com
Wed Jul 17 13:47:33 EDT 2013


Fill in HT bss parameters bassed on bss capabilities.

Signed-off-by: Eugene Krasnikov <k.eugene.e at gmail.com>
---
 smd.c     | 41 +++++++++++++++++++++++++++--------------
 wcn36xx.h |  1 +
 2 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/smd.c b/smd.c
index 53c0736..b784fe6 100644
--- a/smd.c
+++ b/smd.c
@@ -34,6 +34,28 @@ static void wcn36xx_smd_set_bss_nw_type(struct wcn36xx *wcn,
 		bss_params->nw_type = WCN36XX_HAL_11B_NW_TYPE;
 }
 
+static void wcn36xx_smd_set_bss_ht_params(struct ieee80211_vif *vif,
+		struct ieee80211_sta *sta,
+		struct wcn36xx_hal_config_bss_params *bss_params)
+{
+	if (sta && sta->ht_cap.ht_supported) {
+		unsigned long caps = sta->ht_cap.cap;
+		bss_params->ht = sta->ht_cap.ht_supported;
+		bss_params->tx_channel_width_set =
+			test_bit(IEEE80211_HT_CAP_SUP_WIDTH_20_40, &caps);
+		bss_params->lsig_tx_op_protection_full_support =
+			test_bit(IEEE80211_HT_CAP_LSIG_TXOP_PROT, &caps);
+
+		bss_params->ht_oper_mode = vif->bss_conf.ht_operation_mode;
+		bss_params->lln_non_gf_coexist =
+			!!(vif->bss_conf.ht_operation_mode &
+			   IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT);
+		/* IEEE80211_HT_STBC_PARAM_DUAL_CTS_PROT */
+		bss_params->dual_cts_protection = 0;
+		/* IEEE80211_HT_OP_MODE_PROTECTION_20MHZ */
+		bss_params->ht20_coexist = 0;
+	}
+}
 static void wcn36xx_smd_set_sta_ht_params(struct ieee80211_sta *sta,
 		struct wcn36xx_hal_config_sta_params *sta_params)
 {
@@ -823,20 +845,16 @@ int wcn36xx_smd_config_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif,
 		wcn36xx_smd_set_bss_nw_type(wcn, sta, bss);
 	else
 		bss->nw_type = WCN36XX_HAL_11N_NW_TYPE;
-	bss->short_slot_time_supported = 0;
+	bss->short_slot_time_supported = vif->bss_conf.use_short_slot;
 	bss->lla_coexist = 0;
 	bss->llb_coexist = 0;
 	bss->llg_coexist = 0;
-	bss->ht20_coexist = 0;
-	bss->lln_non_gf_coexist = 0;
-	bss->lsig_tx_op_protection_full_support = 0;
 	bss->rifs_mode = 0;
 	bss->beacon_interval = vif->bss_conf.beacon_int;
 	bss->dtim_period = wcn->dtim_period;
-	if (sta && sta->ht_cap.ht_supported)
-		bss->tx_channel_width_set =
-			test_bit(IEEE80211_HT_CAP_SUP_WIDTH_20_40,
-				(unsigned long *)&sta->ht_cap.cap);
+
+	wcn36xx_smd_set_bss_ht_params(vif, sta, bss);
+
 	bss->oper_channel = WCN36XX_HW_CHANNEL(wcn);
 	if (conf_is_ht40_minus(&wcn->hw->conf))
 		bss->ext_channel = IEEE80211_HT_PARAM_CHA_SEC_BELOW;
@@ -851,15 +869,10 @@ int wcn36xx_smd_config_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif,
 	bss->ssid.length = wcn->ssid.length;
 	memcpy(bss->ssid.ssid, wcn->ssid.ssid, wcn->ssid.length);
 
-	bss->action = 0;
-
 	/* FIXME: set rateset */
 
-	bss->ht = 0;
 	bss->obss_prot_enabled = 0;
 	bss->rmf = 0;
-	bss->ht_oper_mode = vif->bss_conf.ht_operation_mode;
-	bss->dual_cts_protection = 0;
 	bss->max_probe_resp_retry_limit = 0;
 	bss->hidden_ssid = vif->bss_conf.hidden_ssid;
 	bss->proxy_probe_resp = 0;
@@ -874,7 +887,7 @@ int wcn36xx_smd_config_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif,
 	bss->wcn36xx_hal_persona = 1;
 	bss->spectrum_mgt_enable = 0;
 	bss->tx_mgmt_power = 0;
-	bss->max_tx_power = 0x10;
+	bss->max_tx_power = WCN36XX_MAX_POWER(wcn);
 
 	if (update) {
 		sta_params->bssid_index = 0;
diff --git a/wcn36xx.h b/wcn36xx.h
index fa2f46b..8aaec63 100644
--- a/wcn36xx.h
+++ b/wcn36xx.h
@@ -84,6 +84,7 @@ enum wcn36xx_debug_mask {
 #define WCN36XX_CENTER_FREQ(__wcn) (__wcn->hw->conf.chandef.chan->center_freq)
 #define WCN36XX_LISTEN_INTERVAL(__wcn) (__wcn->hw->conf.listen_interval)
 #define WCN36XX_FLAGS(__wcn) (__wcn->hw->flags)
+#define WCN36XX_MAX_POWER(__wcn) (__wcn->hw->conf.chandef.chan->max_power)
 
 static inline void buff_to_be(u32 *buf, size_t len)
 {
-- 
1.8.2.2




More information about the wcn36xx mailing list