* [PATCH v5 1/7] wcn36xx: Add wcn36xx_set_default_rates_v1
2020-09-10 15:05 [PATCH v5 0/7] wcn36xx: Add a set of helpers to enable VHT parameter passing Bryan O'Donoghue
@ 2020-09-10 15:05 ` Bryan O'Donoghue
2020-09-21 13:14 ` Kalle Valo
2020-09-10 15:05 ` [PATCH v5 2/7] wcn36xx: Add wcn36xx_smd_set_sta_default_vht_params() Bryan O'Donoghue
` (5 subsequent siblings)
6 siblings, 1 reply; 9+ messages in thread
From: Bryan O'Donoghue @ 2020-09-10 15:05 UTC (permalink / raw)
To: kvalo, wcn36xx, linux-wireless; +Cc: bryan.odonoghue, shawn.guo, loic.poulain
Add a routine to set some additional default parameters associated with the
V1 data structure.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
drivers/net/wireless/ath/wcn36xx/main.c | 8 ++++++++
drivers/net/wireless/ath/wcn36xx/wcn36xx.h | 1 +
2 files changed, 9 insertions(+)
diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
index c5e94ba8f941..ab6685dc956b 100644
--- a/drivers/net/wireless/ath/wcn36xx/main.c
+++ b/drivers/net/wireless/ath/wcn36xx/main.c
@@ -793,6 +793,14 @@ void wcn36xx_set_default_rates(struct wcn36xx_hal_supported_rates *rates)
sizeof(*ofdm_rates) * WCN36XX_HAL_NUM_OFDM_RATES);
rates->supported_mcs_set[0] = 0xFF;
}
+
+void wcn36xx_set_default_rates_v1(struct wcn36xx_hal_supported_rates_v1 *rates)
+{
+ rates->op_rate_mode = STA_11ac;
+ rates->vht_rx_mcs_map = IEEE80211_VHT_MCS_SUPPORT_0_9;
+ rates->vht_tx_mcs_map = IEEE80211_VHT_MCS_SUPPORT_0_9;
+}
+
static void wcn36xx_bss_info_changed(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_bss_conf *bss_conf,
diff --git a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
index d7d349de20e6..2da81d9926c4 100644
--- a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
+++ b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
@@ -271,6 +271,7 @@ static inline bool wcn36xx_is_fw_version(struct wcn36xx *wcn,
wcn->fw_revision == revision);
}
void wcn36xx_set_default_rates(struct wcn36xx_hal_supported_rates *rates);
+void wcn36xx_set_default_rates_v1(struct wcn36xx_hal_supported_rates_v1 *rates);
static inline
struct ieee80211_sta *wcn36xx_priv_to_sta(struct wcn36xx_sta *sta_priv)
--
2.27.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 2/7] wcn36xx: Add wcn36xx_smd_set_sta_default_vht_params()
2020-09-10 15:05 [PATCH v5 0/7] wcn36xx: Add a set of helpers to enable VHT parameter passing Bryan O'Donoghue
2020-09-10 15:05 ` [PATCH v5 1/7] wcn36xx: Add wcn36xx_set_default_rates_v1 Bryan O'Donoghue
@ 2020-09-10 15:05 ` Bryan O'Donoghue
2020-09-10 15:05 ` [PATCH v5 3/7] wcn36xx: Add wcn36xx_smd_set_sta_default_ht_ldpc_params() Bryan O'Donoghue
` (4 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Bryan O'Donoghue @ 2020-09-10 15:05 UTC (permalink / raw)
To: kvalo, wcn36xx, linux-wireless; +Cc: bryan.odonoghue, shawn.guo, loic.poulain
This commit adds support for setting default VHT parameters, which are
exposed by the extended version 1 STA parameter type.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
drivers/net/wireless/ath/wcn36xx/smd.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
index d5ca9907af86..bf584ac382cb 100644
--- a/drivers/net/wireless/ath/wcn36xx/smd.c
+++ b/drivers/net/wireless/ath/wcn36xx/smd.c
@@ -190,6 +190,24 @@ static void wcn36xx_smd_set_sta_default_ht_params(
sta_params->dsss_cck_mode_40mhz = 1;
}
+void wcn36xx_smd_set_sta_default_vht_params(struct wcn36xx *wcn,
+ struct wcn36xx_hal_config_sta_params_v1 *sta_params);
+void wcn36xx_smd_set_sta_default_vht_params(struct wcn36xx *wcn,
+ struct wcn36xx_hal_config_sta_params_v1 *sta_params)
+{
+ if (wcn->rf_id == RF_IRIS_WCN3680) {
+ sta_params->vht_capable = 1;
+ sta_params->vht_tx_mu_beamformee_capable = 1;
+ } else {
+ sta_params->vht_capable = 0;
+ sta_params->vht_tx_mu_beamformee_capable = 0;
+ }
+
+ sta_params->vht_ldpc_enabled = 0;
+ sta_params->vht_tx_channel_width_set = 0;
+ sta_params->vht_tx_bf_enabled = 0;
+}
+
static void wcn36xx_smd_set_sta_params(struct wcn36xx *wcn,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
--
2.27.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 3/7] wcn36xx: Add wcn36xx_smd_set_sta_default_ht_ldpc_params()
2020-09-10 15:05 [PATCH v5 0/7] wcn36xx: Add a set of helpers to enable VHT parameter passing Bryan O'Donoghue
2020-09-10 15:05 ` [PATCH v5 1/7] wcn36xx: Add wcn36xx_set_default_rates_v1 Bryan O'Donoghue
2020-09-10 15:05 ` [PATCH v5 2/7] wcn36xx: Add wcn36xx_smd_set_sta_default_vht_params() Bryan O'Donoghue
@ 2020-09-10 15:05 ` Bryan O'Donoghue
2020-09-10 15:05 ` [PATCH v5 4/7] wcn36xx: Add wcn36xx_smd_set_sta_vht_params() Bryan O'Donoghue
` (3 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Bryan O'Donoghue @ 2020-09-10 15:05 UTC (permalink / raw)
To: kvalo, wcn36xx, linux-wireless; +Cc: bryan.odonoghue, shawn.guo, loic.poulain
Toggling the LDPC enabled bit is possible only via the extended V1
data-structure. This function provides a means of setting the default
depending on chip-type.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
drivers/net/wireless/ath/wcn36xx/smd.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
index bf584ac382cb..e926bbaec220 100644
--- a/drivers/net/wireless/ath/wcn36xx/smd.c
+++ b/drivers/net/wireless/ath/wcn36xx/smd.c
@@ -208,6 +208,17 @@ void wcn36xx_smd_set_sta_default_vht_params(struct wcn36xx *wcn,
sta_params->vht_tx_bf_enabled = 0;
}
+void wcn36xx_smd_set_sta_default_ht_ldpc_params(struct wcn36xx *wcn,
+ struct wcn36xx_hal_config_sta_params_v1 *sta_params);
+void wcn36xx_smd_set_sta_default_ht_ldpc_params(struct wcn36xx *wcn,
+ struct wcn36xx_hal_config_sta_params_v1 *sta_params)
+{
+ if (wcn->rf_id == RF_IRIS_WCN3680)
+ sta_params->ht_ldpc_enabled = 1;
+ else
+ sta_params->ht_ldpc_enabled = 0;
+}
+
static void wcn36xx_smd_set_sta_params(struct wcn36xx *wcn,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
--
2.27.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 4/7] wcn36xx: Add wcn36xx_smd_set_sta_vht_params()
2020-09-10 15:05 [PATCH v5 0/7] wcn36xx: Add a set of helpers to enable VHT parameter passing Bryan O'Donoghue
` (2 preceding siblings ...)
2020-09-10 15:05 ` [PATCH v5 3/7] wcn36xx: Add wcn36xx_smd_set_sta_default_ht_ldpc_params() Bryan O'Donoghue
@ 2020-09-10 15:05 ` Bryan O'Donoghue
2020-09-10 15:05 ` [PATCH v5 5/7] wcn36xx: Add wcn36xx_smd_set_sta_ht_ldpc_params() Bryan O'Donoghue
` (2 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Bryan O'Donoghue @ 2020-09-10 15:05 UTC (permalink / raw)
To: kvalo, wcn36xx, linux-wireless; +Cc: bryan.odonoghue, shawn.guo, loic.poulain
This commit adds support for setting VHT parameters based on the declared
VHT capability bits in the VHT capability structure.
We cannot do 160MHz so VHT Channel width set should be zero.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
drivers/net/wireless/ath/wcn36xx/smd.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
index e926bbaec220..1432f310f758 100644
--- a/drivers/net/wireless/ath/wcn36xx/smd.c
+++ b/drivers/net/wireless/ath/wcn36xx/smd.c
@@ -174,6 +174,31 @@ static void wcn36xx_smd_set_sta_ht_params(struct ieee80211_sta *sta,
}
}
+void wcn36xx_smd_set_sta_vht_params(struct wcn36xx *wcn,
+ struct ieee80211_sta *sta,
+ struct wcn36xx_hal_config_sta_params_v1 *sta_params);
+void wcn36xx_smd_set_sta_vht_params(struct wcn36xx *wcn,
+ struct ieee80211_sta *sta,
+ struct wcn36xx_hal_config_sta_params_v1 *sta_params)
+{
+ if (sta->vht_cap.vht_supported) {
+ unsigned long caps = sta->vht_cap.cap;
+
+ sta_params->vht_capable = sta->vht_cap.vht_supported;
+ sta_params->vht_ldpc_enabled =
+ is_cap_supported(caps, IEEE80211_VHT_CAP_RXLDPC);
+ if (get_feat_caps(wcn->fw_feat_caps, MU_MIMO)) {
+ sta_params->vht_tx_mu_beamformee_capable =
+ is_cap_supported(caps, IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE);
+ if (sta_params->vht_tx_mu_beamformee_capable)
+ sta_params->vht_tx_bf_enabled = 1;
+ } else {
+ sta_params->vht_tx_mu_beamformee_capable = 0;
+ }
+ sta_params->vht_tx_channel_width_set = 0;
+ }
+}
+
static void wcn36xx_smd_set_sta_default_ht_params(
struct wcn36xx_hal_config_sta_params *sta_params)
{
--
2.27.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 5/7] wcn36xx: Add wcn36xx_smd_set_sta_ht_ldpc_params()
2020-09-10 15:05 [PATCH v5 0/7] wcn36xx: Add a set of helpers to enable VHT parameter passing Bryan O'Donoghue
` (3 preceding siblings ...)
2020-09-10 15:05 ` [PATCH v5 4/7] wcn36xx: Add wcn36xx_smd_set_sta_vht_params() Bryan O'Donoghue
@ 2020-09-10 15:05 ` Bryan O'Donoghue
2020-09-10 15:05 ` [PATCH v5 6/7] wcn36xx: Add wcn36xx_smd_set_bss_vht_params() Bryan O'Donoghue
2020-09-10 15:05 ` [PATCH v5 7/7] wcn36xx: Add wrapper function wcn36xx_smd_set_sta_params_v1() Bryan O'Donoghue
6 siblings, 0 replies; 9+ messages in thread
From: Bryan O'Donoghue @ 2020-09-10 15:05 UTC (permalink / raw)
To: kvalo, wcn36xx, linux-wireless; +Cc: bryan.odonoghue, shawn.guo, loic.poulain
Adds a routine to allow setting the LDPC bit for HT parameter passing
inside the version 1 STA parameters data structure.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
drivers/net/wireless/ath/wcn36xx/smd.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
index 1432f310f758..ab9b6116cc75 100644
--- a/drivers/net/wireless/ath/wcn36xx/smd.c
+++ b/drivers/net/wireless/ath/wcn36xx/smd.c
@@ -199,6 +199,17 @@ void wcn36xx_smd_set_sta_vht_params(struct wcn36xx *wcn,
}
}
+void wcn36xx_smd_set_sta_ht_ldpc_params(struct ieee80211_sta *sta,
+ struct wcn36xx_hal_config_sta_params_v1 *sta_params);
+void wcn36xx_smd_set_sta_ht_ldpc_params(struct ieee80211_sta *sta,
+ struct wcn36xx_hal_config_sta_params_v1 *sta_params)
+{
+ if (sta->ht_cap.ht_supported) {
+ sta_params->ht_ldpc_enabled =
+ is_cap_supported(sta->ht_cap.cap, IEEE80211_HT_CAP_LDPC_CODING);
+ }
+}
+
static void wcn36xx_smd_set_sta_default_ht_params(
struct wcn36xx_hal_config_sta_params *sta_params)
{
--
2.27.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 6/7] wcn36xx: Add wcn36xx_smd_set_bss_vht_params()
2020-09-10 15:05 [PATCH v5 0/7] wcn36xx: Add a set of helpers to enable VHT parameter passing Bryan O'Donoghue
` (4 preceding siblings ...)
2020-09-10 15:05 ` [PATCH v5 5/7] wcn36xx: Add wcn36xx_smd_set_sta_ht_ldpc_params() Bryan O'Donoghue
@ 2020-09-10 15:05 ` Bryan O'Donoghue
2020-09-10 15:05 ` [PATCH v5 7/7] wcn36xx: Add wrapper function wcn36xx_smd_set_sta_params_v1() Bryan O'Donoghue
6 siblings, 0 replies; 9+ messages in thread
From: Bryan O'Donoghue @ 2020-09-10 15:05 UTC (permalink / raw)
To: kvalo, wcn36xx, linux-wireless; +Cc: bryan.odonoghue, shawn.guo, loic.poulain
This commit adds wcn36xx_smd_set_bss_vht_params(). The job of this function
is to decide if the BSS is VHT capable and if so set the appropriate bit
in the BSS parameter structure for passing to the firmware.
VHT Channel width set is not set since we don't support 160MHz.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
drivers/net/wireless/ath/wcn36xx/smd.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
index ab9b6116cc75..d5089aa382bd 100644
--- a/drivers/net/wireless/ath/wcn36xx/smd.c
+++ b/drivers/net/wireless/ath/wcn36xx/smd.c
@@ -146,6 +146,19 @@ static void wcn36xx_smd_set_bss_ht_params(struct ieee80211_vif *vif,
}
}
+void
+wcn36xx_smd_set_bss_vht_params(struct ieee80211_vif *vif,
+ struct ieee80211_sta *sta,
+ struct wcn36xx_hal_config_bss_params_v1 *bss);
+void
+wcn36xx_smd_set_bss_vht_params(struct ieee80211_vif *vif,
+ struct ieee80211_sta *sta,
+ struct wcn36xx_hal_config_bss_params_v1 *bss)
+{
+ if (sta && sta->vht_cap.vht_supported)
+ bss->vht_capable = 1;
+}
+
static void wcn36xx_smd_set_sta_ht_params(struct ieee80211_sta *sta,
struct wcn36xx_hal_config_sta_params *sta_params)
{
--
2.27.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 7/7] wcn36xx: Add wrapper function wcn36xx_smd_set_sta_params_v1()
2020-09-10 15:05 [PATCH v5 0/7] wcn36xx: Add a set of helpers to enable VHT parameter passing Bryan O'Donoghue
` (5 preceding siblings ...)
2020-09-10 15:05 ` [PATCH v5 6/7] wcn36xx: Add wcn36xx_smd_set_bss_vht_params() Bryan O'Donoghue
@ 2020-09-10 15:05 ` Bryan O'Donoghue
6 siblings, 0 replies; 9+ messages in thread
From: Bryan O'Donoghue @ 2020-09-10 15:05 UTC (permalink / raw)
To: kvalo, wcn36xx, linux-wireless; +Cc: bryan.odonoghue, shawn.guo, loic.poulain
This commit adds a wrapper function wcn36xx_smd_set_sta_params_v1() which
calls into wcn36xx_smd_set_sta_params() and then subsequently sets
version-1 specific parameters.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
drivers/net/wireless/ath/wcn36xx/smd.c | 30 ++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
index d5089aa382bd..71ecf3ef5ab2 100644
--- a/drivers/net/wireless/ath/wcn36xx/smd.c
+++ b/drivers/net/wireless/ath/wcn36xx/smd.c
@@ -1262,6 +1262,36 @@ static void wcn36xx_smd_convert_sta_to_v1(struct wcn36xx *wcn,
v1->p2p = orig->p2p;
}
+void
+wcn36xx_smd_set_sta_params_v1(struct wcn36xx *wcn,
+ struct ieee80211_vif *vif,
+ struct ieee80211_sta *sta,
+ struct wcn36xx_hal_config_sta_params_v1 *sta_par);
+void
+wcn36xx_smd_set_sta_params_v1(struct wcn36xx *wcn,
+ struct ieee80211_vif *vif,
+ struct ieee80211_sta *sta,
+ struct wcn36xx_hal_config_sta_params_v1 *sta_par)
+{
+ struct wcn36xx_sta *sta_priv = NULL;
+ struct wcn36xx_hal_config_sta_params sta_par_v0;
+
+ wcn36xx_smd_set_sta_params(wcn, vif, sta, &sta_par_v0);
+ wcn36xx_smd_convert_sta_to_v1(wcn, &sta_par_v0, sta_par);
+
+ if (sta) {
+ sta_priv = wcn36xx_sta_to_priv(sta);
+ wcn36xx_smd_set_sta_vht_params(wcn, sta, sta_par);
+ wcn36xx_smd_set_sta_ht_ldpc_params(sta, sta_par);
+ memcpy(&sta_par->supported_rates, &sta_priv->supported_rates,
+ sizeof(sta_par->supported_rates));
+ } else {
+ wcn36xx_set_default_rates_v1(&sta_par->supported_rates);
+ wcn36xx_smd_set_sta_default_vht_params(wcn, sta_par);
+ wcn36xx_smd_set_sta_default_ht_ldpc_params(wcn, sta_par);
+ }
+}
+
static int wcn36xx_smd_config_sta_rsp(struct wcn36xx *wcn,
struct ieee80211_sta *sta,
void *buf,
--
2.27.0
^ permalink raw reply related [flat|nested] 9+ messages in thread