qcacld-3.0: Refactor country change update APIs
Iterate through all the link info which are active in adapter on country change update. 1) hdd_country_change_update_sap() 2) hdd_country_change_update_sta() Change-Id: I199ca2cd87e114c4a8c64ee356388781b3a53097 CRs-Fixed: 3522443
This commit is contained in:

committed by
Rahul Choudhary

parent
e5462e248b
commit
32502d8e0c
@@ -1647,62 +1647,67 @@ static void hdd_country_change_update_sta(struct hdd_context *hdd_ctx)
|
|||||||
qdf_freq_t oper_freq;
|
qdf_freq_t oper_freq;
|
||||||
eCsrPhyMode csr_phy_mode;
|
eCsrPhyMode csr_phy_mode;
|
||||||
wlan_net_dev_ref_dbgid dbgid = NET_DEV_HOLD_COUNTRY_CHANGE_UPDATE_STA;
|
wlan_net_dev_ref_dbgid dbgid = NET_DEV_HOLD_COUNTRY_CHANGE_UPDATE_STA;
|
||||||
|
struct wlan_hdd_link_info *link_info;
|
||||||
|
|
||||||
pdev = hdd_ctx->pdev;
|
pdev = hdd_ctx->pdev;
|
||||||
|
|
||||||
hdd_for_each_adapter_dev_held_safe(hdd_ctx, adapter, next_adapter,
|
hdd_for_each_adapter_dev_held_safe(hdd_ctx, adapter, next_adapter,
|
||||||
dbgid) {
|
dbgid) {
|
||||||
width_changed = false;
|
hdd_adapter_for_each_active_link_info(adapter, link_info) {
|
||||||
oper_freq = hdd_get_link_info_home_channel(adapter->deflink);
|
width_changed = false;
|
||||||
if (oper_freq)
|
oper_freq = hdd_get_link_info_home_channel(link_info);
|
||||||
freq_changed = wlan_reg_is_disable_for_pwrmode(
|
if (oper_freq)
|
||||||
pdev,
|
freq_changed = wlan_reg_is_disable_for_pwrmode(
|
||||||
oper_freq,
|
pdev, oper_freq,
|
||||||
REG_CURRENT_PWR_MODE);
|
REG_CURRENT_PWR_MODE);
|
||||||
else
|
else
|
||||||
freq_changed = false;
|
freq_changed = false;
|
||||||
|
|
||||||
switch (adapter->device_mode) {
|
switch (adapter->device_mode) {
|
||||||
case QDF_P2P_CLIENT_MODE:
|
case QDF_P2P_CLIENT_MODE:
|
||||||
/*
|
/*
|
||||||
* P2P client is the same as STA
|
* P2P client is the same as STA
|
||||||
* continue to next statement
|
* continue to next statement
|
||||||
*/
|
*/
|
||||||
case QDF_STA_MODE:
|
case QDF_STA_MODE:
|
||||||
sta_ctx =
|
sta_ctx =
|
||||||
WLAN_HDD_GET_STATION_CTX_PTR(adapter->deflink);
|
WLAN_HDD_GET_STATION_CTX_PTR(link_info);
|
||||||
new_phy_mode = wlan_reg_get_max_phymode(pdev,
|
new_phy_mode = wlan_reg_get_max_phymode(pdev,
|
||||||
REG_PHYMODE_MAX,
|
REG_PHYMODE_MAX,
|
||||||
oper_freq);
|
oper_freq);
|
||||||
csr_phy_mode =
|
csr_phy_mode =
|
||||||
csr_convert_from_reg_phy_mode(new_phy_mode);
|
csr_convert_from_reg_phy_mode(new_phy_mode);
|
||||||
phy_changed = (sta_ctx->reg_phymode != csr_phy_mode);
|
phy_changed =
|
||||||
|
(sta_ctx->reg_phymode != csr_phy_mode);
|
||||||
|
|
||||||
width_changed = hdd_country_change_bw_check(hdd_ctx,
|
width_changed =
|
||||||
|
hdd_country_change_bw_check(hdd_ctx,
|
||||||
adapter,
|
adapter,
|
||||||
oper_freq);
|
oper_freq);
|
||||||
|
|
||||||
if (hdd_is_vdev_in_conn_state(adapter->deflink)) {
|
if (!hdd_is_vdev_in_conn_state(link_info))
|
||||||
|
continue;
|
||||||
|
|
||||||
if (phy_changed || freq_changed ||
|
if (phy_changed || freq_changed ||
|
||||||
width_changed) {
|
width_changed) {
|
||||||
hdd_debug("changed: phy %d, freq %d, width %d",
|
hdd_debug("changed: phy %d, freq %d, width %d",
|
||||||
phy_changed, freq_changed,
|
phy_changed, freq_changed,
|
||||||
width_changed);
|
width_changed);
|
||||||
wlan_hdd_cm_issue_disconnect(
|
wlan_hdd_cm_issue_disconnect(
|
||||||
adapter->deflink,
|
link_info,
|
||||||
REASON_UNSPEC_FAILURE,
|
REASON_UNSPEC_FAILURE,
|
||||||
false);
|
false);
|
||||||
sta_ctx->reg_phymode = csr_phy_mode;
|
sta_ctx->reg_phymode = csr_phy_mode;
|
||||||
} else {
|
} else {
|
||||||
hdd_debug("Remain on current channel but update tx power");
|
hdd_debug("Remain on current channel but update tx power");
|
||||||
wlan_reg_update_tx_power_on_ctry_change(
|
wlan_reg_update_tx_power_on_ctry_change(
|
||||||
pdev,
|
pdev,
|
||||||
adapter->deflink->vdev_id);
|
link_info->vdev_id);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
/* dev_put has to be done here */
|
/* dev_put has to be done here */
|
||||||
hdd_adapter_dev_put_debug(adapter, dbgid);
|
hdd_adapter_dev_put_debug(adapter, dbgid);
|
||||||
@@ -1797,50 +1802,54 @@ static void hdd_country_change_update_sap(struct hdd_context *hdd_ctx)
|
|||||||
qdf_freq_t oper_freq;
|
qdf_freq_t oper_freq;
|
||||||
eCsrPhyMode csr_phy_mode;
|
eCsrPhyMode csr_phy_mode;
|
||||||
wlan_net_dev_ref_dbgid dbgid = NET_DEV_HOLD_COUNTRY_CHANGE_UPDATE_SAP;
|
wlan_net_dev_ref_dbgid dbgid = NET_DEV_HOLD_COUNTRY_CHANGE_UPDATE_SAP;
|
||||||
|
struct wlan_hdd_link_info *link_info;
|
||||||
|
|
||||||
pdev = hdd_ctx->pdev;
|
pdev = hdd_ctx->pdev;
|
||||||
|
|
||||||
hdd_for_each_adapter_dev_held_safe(hdd_ctx, adapter, next_adapter,
|
hdd_for_each_adapter_dev_held_safe(hdd_ctx, adapter, next_adapter,
|
||||||
dbgid) {
|
dbgid) {
|
||||||
oper_freq = hdd_get_link_info_home_channel(adapter->deflink);
|
hdd_adapter_for_each_active_link_info(adapter, link_info) {
|
||||||
|
oper_freq = hdd_get_link_info_home_channel(link_info);
|
||||||
|
|
||||||
switch (adapter->device_mode) {
|
switch (adapter->device_mode) {
|
||||||
case QDF_P2P_GO_MODE:
|
case QDF_P2P_GO_MODE:
|
||||||
policy_mgr_check_sap_restart(hdd_ctx->psoc,
|
policy_mgr_check_sap_restart(hdd_ctx->psoc,
|
||||||
adapter->deflink->vdev_id);
|
link_info->vdev_id);
|
||||||
break;
|
|
||||||
case QDF_SAP_MODE:
|
|
||||||
if (!test_bit(SOFTAP_INIT_DONE,
|
|
||||||
&adapter->deflink->link_flags)) {
|
|
||||||
hdd_info("AP is not started yet");
|
|
||||||
break;
|
break;
|
||||||
}
|
case QDF_SAP_MODE:
|
||||||
sap_config = &adapter->deflink->session.ap.sap_config;
|
if (!test_bit(SOFTAP_INIT_DONE,
|
||||||
reg_phy_mode = csr_convert_to_reg_phy_mode(
|
&link_info->link_flags)) {
|
||||||
sap_config->sap_orig_hw_mode,
|
hdd_info("AP is not started yet");
|
||||||
oper_freq);
|
break;
|
||||||
new_phy_mode = wlan_reg_get_max_phymode(pdev,
|
}
|
||||||
|
sap_config = &link_info->session.ap.sap_config;
|
||||||
|
reg_phy_mode = csr_convert_to_reg_phy_mode(
|
||||||
|
sap_config->sap_orig_hw_mode,
|
||||||
|
oper_freq);
|
||||||
|
new_phy_mode = wlan_reg_get_max_phymode(pdev,
|
||||||
reg_phy_mode,
|
reg_phy_mode,
|
||||||
oper_freq);
|
oper_freq);
|
||||||
csr_phy_mode =
|
csr_phy_mode =
|
||||||
csr_convert_from_reg_phy_mode(new_phy_mode);
|
csr_convert_from_reg_phy_mode(new_phy_mode);
|
||||||
phy_changed = (csr_phy_mode != sap_config->SapHw_mode);
|
phy_changed =
|
||||||
|
(csr_phy_mode != sap_config->SapHw_mode);
|
||||||
|
|
||||||
if (phy_changed)
|
if (phy_changed)
|
||||||
hdd_restart_sap_with_new_phymode(hdd_ctx,
|
hdd_restart_sap_with_new_phymode(hdd_ctx,
|
||||||
adapter,
|
adapter,
|
||||||
sap_config,
|
sap_config,
|
||||||
csr_phy_mode);
|
csr_phy_mode);
|
||||||
else
|
else
|
||||||
policy_mgr_check_sap_restart(
|
policy_mgr_check_sap_restart(
|
||||||
hdd_ctx->psoc,
|
hdd_ctx->psoc,
|
||||||
adapter->deflink->vdev_id);
|
link_info->vdev_id);
|
||||||
hdd_debug("Update tx power due to ctry change");
|
hdd_debug("Update tx power due to ctry change");
|
||||||
wlan_reg_update_tx_power_on_ctry_change(
|
wlan_reg_update_tx_power_on_ctry_change(
|
||||||
pdev, adapter->deflink->vdev_id);
|
pdev, link_info->vdev_id);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* dev_put has to be done here */
|
/* dev_put has to be done here */
|
||||||
hdd_adapter_dev_put_debug(adapter, dbgid);
|
hdd_adapter_dev_put_debug(adapter, dbgid);
|
||||||
|
Reference in New Issue
Block a user