wcn36xx: Move BSS parameter setup to wcn36xx_smd_set_bss_params()
This commit moves BSS parameter setup to a separate function wcn36xx_smd_set_bss_params(). This will allow for further functional decomposition and fewer kzalloc() operations in subsequent patches. Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Reviewed-by: Loic Poulain <loic.poulain@linaro.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Link: https://lore.kernel.org/r/20200910150631.2178970-4-bryan.odonoghue@linaro.org
This commit is contained in:
parent
9e212908b5
commit
6836931020
|
@ -1402,6 +1402,100 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
void wcn36xx_smd_set_bss_params(struct wcn36xx *wcn,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta,
|
||||
const u8 *bssid,
|
||||
bool update,
|
||||
struct wcn36xx_hal_config_bss_params *bss);
|
||||
void wcn36xx_smd_set_bss_params(struct wcn36xx *wcn,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta,
|
||||
const u8 *bssid,
|
||||
bool update,
|
||||
struct wcn36xx_hal_config_bss_params *bss)
|
||||
{
|
||||
struct wcn36xx_vif *vif_priv = wcn36xx_vif_to_priv(vif);
|
||||
|
||||
WARN_ON(is_zero_ether_addr(bssid));
|
||||
|
||||
memcpy(&bss->bssid, bssid, ETH_ALEN);
|
||||
|
||||
memcpy(bss->self_mac_addr, vif->addr, ETH_ALEN);
|
||||
|
||||
if (vif->type == NL80211_IFTYPE_STATION) {
|
||||
bss->bss_type = WCN36XX_HAL_INFRASTRUCTURE_MODE;
|
||||
|
||||
/* STA */
|
||||
bss->oper_mode = 1;
|
||||
bss->wcn36xx_hal_persona = WCN36XX_HAL_STA_MODE;
|
||||
} else if (vif->type == NL80211_IFTYPE_AP ||
|
||||
vif->type == NL80211_IFTYPE_MESH_POINT) {
|
||||
bss->bss_type = WCN36XX_HAL_INFRA_AP_MODE;
|
||||
|
||||
/* AP */
|
||||
bss->oper_mode = 0;
|
||||
bss->wcn36xx_hal_persona = WCN36XX_HAL_STA_SAP_MODE;
|
||||
} else if (vif->type == NL80211_IFTYPE_ADHOC) {
|
||||
bss->bss_type = WCN36XX_HAL_IBSS_MODE;
|
||||
|
||||
/* STA */
|
||||
bss->oper_mode = 1;
|
||||
} else {
|
||||
wcn36xx_warn("Unknown type for bss config: %d\n", vif->type);
|
||||
}
|
||||
|
||||
if (vif->type == NL80211_IFTYPE_STATION)
|
||||
wcn36xx_smd_set_bss_nw_type(wcn, sta, bss);
|
||||
else
|
||||
bss->nw_type = WCN36XX_HAL_11N_NW_TYPE;
|
||||
|
||||
bss->short_slot_time_supported = vif->bss_conf.use_short_slot;
|
||||
bss->lla_coexist = 0;
|
||||
bss->llb_coexist = 0;
|
||||
bss->llg_coexist = 0;
|
||||
bss->rifs_mode = 0;
|
||||
bss->beacon_interval = vif->bss_conf.beacon_int;
|
||||
bss->dtim_period = vif_priv->dtim_period;
|
||||
|
||||
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;
|
||||
else if (conf_is_ht40_plus(&wcn->hw->conf))
|
||||
bss->ext_channel = IEEE80211_HT_PARAM_CHA_SEC_ABOVE;
|
||||
else
|
||||
bss->ext_channel = IEEE80211_HT_PARAM_CHA_SEC_NONE;
|
||||
|
||||
bss->reserved = 0;
|
||||
|
||||
/* wcn->ssid is only valid in AP and IBSS mode */
|
||||
bss->ssid.length = vif_priv->ssid.length;
|
||||
memcpy(bss->ssid.ssid, vif_priv->ssid.ssid, vif_priv->ssid.length);
|
||||
|
||||
bss->obss_prot_enabled = 0;
|
||||
bss->rmf = 0;
|
||||
bss->max_probe_resp_retry_limit = 0;
|
||||
bss->hidden_ssid = vif->bss_conf.hidden_ssid;
|
||||
bss->proxy_probe_resp = 0;
|
||||
bss->edca_params_valid = 0;
|
||||
|
||||
/* FIXME: set acbe, acbk, acvi and acvo */
|
||||
|
||||
bss->ext_set_sta_key_param_valid = 0;
|
||||
|
||||
/* FIXME: set ext_set_sta_key_param */
|
||||
|
||||
bss->spectrum_mgt_enable = 0;
|
||||
bss->tx_mgmt_power = 0;
|
||||
bss->max_tx_power = WCN36XX_MAX_POWER(wcn);
|
||||
bss->action = update;
|
||||
|
||||
vif_priv->bss_type = bss->bss_type;
|
||||
}
|
||||
|
||||
static int wcn36xx_smd_config_bss_v1(struct wcn36xx *wcn,
|
||||
const struct wcn36xx_hal_config_bss_req_msg *orig)
|
||||
{
|
||||
|
@ -1505,7 +1599,6 @@ static int wcn36xx_smd_config_bss_v1(struct wcn36xx *wcn,
|
|||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static int wcn36xx_smd_config_bss_rsp(struct wcn36xx *wcn,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta,
|
||||
|
@ -1557,7 +1650,6 @@ int wcn36xx_smd_config_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif,
|
|||
struct wcn36xx_hal_config_bss_req_msg *msg;
|
||||
struct wcn36xx_hal_config_bss_params *bss;
|
||||
struct wcn36xx_hal_config_sta_params *sta_params;
|
||||
struct wcn36xx_vif *vif_priv = wcn36xx_vif_to_priv(vif);
|
||||
int ret;
|
||||
|
||||
mutex_lock(&wcn->hal_mutex);
|
||||
|
@ -1571,84 +1663,7 @@ int wcn36xx_smd_config_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif,
|
|||
bss = &msg->bss_params;
|
||||
sta_params = &bss->sta;
|
||||
|
||||
WARN_ON(is_zero_ether_addr(bssid));
|
||||
|
||||
memcpy(&bss->bssid, bssid, ETH_ALEN);
|
||||
|
||||
memcpy(bss->self_mac_addr, vif->addr, ETH_ALEN);
|
||||
|
||||
if (vif->type == NL80211_IFTYPE_STATION) {
|
||||
bss->bss_type = WCN36XX_HAL_INFRASTRUCTURE_MODE;
|
||||
|
||||
/* STA */
|
||||
bss->oper_mode = 1;
|
||||
bss->wcn36xx_hal_persona = WCN36XX_HAL_STA_MODE;
|
||||
} else if (vif->type == NL80211_IFTYPE_AP ||
|
||||
vif->type == NL80211_IFTYPE_MESH_POINT) {
|
||||
bss->bss_type = WCN36XX_HAL_INFRA_AP_MODE;
|
||||
|
||||
/* AP */
|
||||
bss->oper_mode = 0;
|
||||
bss->wcn36xx_hal_persona = WCN36XX_HAL_STA_SAP_MODE;
|
||||
} else if (vif->type == NL80211_IFTYPE_ADHOC) {
|
||||
bss->bss_type = WCN36XX_HAL_IBSS_MODE;
|
||||
|
||||
/* STA */
|
||||
bss->oper_mode = 1;
|
||||
} else {
|
||||
wcn36xx_warn("Unknown type for bss config: %d\n", vif->type);
|
||||
}
|
||||
|
||||
if (vif->type == NL80211_IFTYPE_STATION)
|
||||
wcn36xx_smd_set_bss_nw_type(wcn, sta, bss);
|
||||
else
|
||||
bss->nw_type = WCN36XX_HAL_11N_NW_TYPE;
|
||||
|
||||
bss->short_slot_time_supported = vif->bss_conf.use_short_slot;
|
||||
bss->lla_coexist = 0;
|
||||
bss->llb_coexist = 0;
|
||||
bss->llg_coexist = 0;
|
||||
bss->rifs_mode = 0;
|
||||
bss->beacon_interval = vif->bss_conf.beacon_int;
|
||||
bss->dtim_period = vif_priv->dtim_period;
|
||||
|
||||
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;
|
||||
else if (conf_is_ht40_plus(&wcn->hw->conf))
|
||||
bss->ext_channel = IEEE80211_HT_PARAM_CHA_SEC_ABOVE;
|
||||
else
|
||||
bss->ext_channel = IEEE80211_HT_PARAM_CHA_SEC_NONE;
|
||||
|
||||
bss->reserved = 0;
|
||||
|
||||
/* wcn->ssid is only valid in AP and IBSS mode */
|
||||
bss->ssid.length = vif_priv->ssid.length;
|
||||
memcpy(bss->ssid.ssid, vif_priv->ssid.ssid, vif_priv->ssid.length);
|
||||
|
||||
bss->obss_prot_enabled = 0;
|
||||
bss->rmf = 0;
|
||||
bss->max_probe_resp_retry_limit = 0;
|
||||
bss->hidden_ssid = vif->bss_conf.hidden_ssid;
|
||||
bss->proxy_probe_resp = 0;
|
||||
bss->edca_params_valid = 0;
|
||||
|
||||
/* FIXME: set acbe, acbk, acvi and acvo */
|
||||
|
||||
bss->ext_set_sta_key_param_valid = 0;
|
||||
|
||||
/* FIXME: set ext_set_sta_key_param */
|
||||
|
||||
bss->spectrum_mgt_enable = 0;
|
||||
bss->tx_mgmt_power = 0;
|
||||
bss->max_tx_power = WCN36XX_MAX_POWER(wcn);
|
||||
bss->action = update;
|
||||
|
||||
vif_priv->bss_type = bss->bss_type;
|
||||
|
||||
wcn36xx_smd_set_bss_params(wcn, vif, sta, bssid, update, bss);
|
||||
wcn36xx_smd_set_sta_params(wcn, vif, sta, sta_params);
|
||||
|
||||
wcn36xx_dbg(WCN36XX_DBG_HAL,
|
||||
|
|
Loading…
Reference in New Issue