|
@@ -3446,6 +3446,25 @@ wma_vdev_set_bss_params(tp_wma_handle wma, int vdev_id,
|
|
if (QDF_IS_STATUS_ERROR(ret))
|
|
if (QDF_IS_STATUS_ERROR(ret))
|
|
wma_err("failed to set WMI_VDEV_PARAM_DTIM_PERIOD");
|
|
wma_err("failed to set WMI_VDEV_PARAM_DTIM_PERIOD");
|
|
|
|
|
|
|
|
+ if (!wlan_reg_is_ext_tpc_supported(wma->psoc)) {
|
|
|
|
+ if (!maxTxPower)
|
|
|
|
+ wma_warn("Setting Tx power limit to 0");
|
|
|
|
+
|
|
|
|
+ wma_nofl_debug("TXP[W][set_bss_params]: %d", maxTxPower);
|
|
|
|
+
|
|
|
|
+ if (maxTxPower != INVALID_TXPOWER) {
|
|
|
|
+ ret = wma_vdev_set_param(wma->wmi_handle, vdev_id,
|
|
|
|
+ WMI_VDEV_PARAM_TX_PWRLIMIT,
|
|
|
|
+ maxTxPower);
|
|
|
|
+ if (QDF_IS_STATUS_ERROR(ret))
|
|
|
|
+ wma_err("failed to set VDEV_PARAM_TX_PWRLMT");
|
|
|
|
+ else
|
|
|
|
+ mlme_set_max_reg_power(intr[vdev_id].vdev,
|
|
|
|
+ maxTxPower);
|
|
|
|
+ } else {
|
|
|
|
+ wma_err("Invalid max Tx power");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
/* Slot time */
|
|
/* Slot time */
|
|
if (shortSlotTimeSupported)
|
|
if (shortSlotTimeSupported)
|
|
slot_time = WMI_VDEV_SLOT_TIME_SHORT;
|
|
slot_time = WMI_VDEV_SLOT_TIME_SHORT;
|
|
@@ -3588,6 +3607,7 @@ QDF_STATUS wma_post_vdev_start_setup(uint8_t vdev_id)
|
|
struct wma_txrx_node *intr;
|
|
struct wma_txrx_node *intr;
|
|
struct vdev_mlme_obj *mlme_obj;
|
|
struct vdev_mlme_obj *mlme_obj;
|
|
struct wlan_objmgr_vdev *vdev;
|
|
struct wlan_objmgr_vdev *vdev;
|
|
|
|
+ uint8_t bss_power = 0;
|
|
|
|
|
|
if (!wma)
|
|
if (!wma)
|
|
return QDF_STATUS_E_FAILURE;
|
|
return QDF_STATUS_E_FAILURE;
|
|
@@ -3621,12 +3641,16 @@ QDF_STATUS wma_post_vdev_start_setup(uint8_t vdev_id)
|
|
vdev->vdev_mlme.des_chan,
|
|
vdev->vdev_mlme.des_chan,
|
|
sizeof(struct wlan_channel));
|
|
sizeof(struct wlan_channel));
|
|
|
|
|
|
|
|
+ if (!wlan_reg_is_ext_tpc_supported(wma->psoc))
|
|
|
|
+ bss_power = wlan_reg_get_channel_reg_power_for_freq(
|
|
|
|
+ wma->pdev, vdev->vdev_mlme.bss_chan->ch_freq);
|
|
|
|
+
|
|
wma_vdev_set_bss_params(wma, vdev_id,
|
|
wma_vdev_set_bss_params(wma, vdev_id,
|
|
mlme_obj->proto.generic.beacon_interval,
|
|
mlme_obj->proto.generic.beacon_interval,
|
|
mlme_obj->proto.generic.dtim_period,
|
|
mlme_obj->proto.generic.dtim_period,
|
|
mlme_obj->proto.generic.slot_time,
|
|
mlme_obj->proto.generic.slot_time,
|
|
mlme_obj->proto.generic.protection_mode,
|
|
mlme_obj->proto.generic.protection_mode,
|
|
- 0, 0);
|
|
|
|
|
|
+ bss_power, 0);
|
|
|
|
|
|
wma_vdev_set_he_bss_params(wma, vdev_id,
|
|
wma_vdev_set_he_bss_params(wma, vdev_id,
|
|
&mlme_obj->proto.he_ops_info);
|
|
&mlme_obj->proto.he_ops_info);
|
|
@@ -3913,11 +3937,15 @@ QDF_STATUS wma_send_peer_assoc_req(struct bss_params *add_bss)
|
|
if (add_bss->rmfEnabled)
|
|
if (add_bss->rmfEnabled)
|
|
wma_set_mgmt_frame_protection(wma);
|
|
wma_set_mgmt_frame_protection(wma);
|
|
|
|
|
|
|
|
+ if (wlan_reg_is_ext_tpc_supported(wma->psoc))
|
|
|
|
+ add_bss->maxTxPower = 0;
|
|
|
|
+
|
|
wma_vdev_set_bss_params(wma, add_bss->staContext.smesessionId,
|
|
wma_vdev_set_bss_params(wma, add_bss->staContext.smesessionId,
|
|
add_bss->beaconInterval,
|
|
add_bss->beaconInterval,
|
|
add_bss->dtimPeriod,
|
|
add_bss->dtimPeriod,
|
|
add_bss->shortSlotTimeSupported,
|
|
add_bss->shortSlotTimeSupported,
|
|
- add_bss->llbCoexist, 0,
|
|
|
|
|
|
+ add_bss->llbCoexist,
|
|
|
|
+ add_bss->maxTxPower,
|
|
add_bss->bss_max_idle_period);
|
|
add_bss->bss_max_idle_period);
|
|
|
|
|
|
mlme_obj = wlan_vdev_mlme_get_cmpt_obj(iface->vdev);
|
|
mlme_obj = wlan_vdev_mlme_get_cmpt_obj(iface->vdev);
|
|
@@ -4314,6 +4342,7 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params)
|
|
{
|
|
{
|
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
|
struct wma_txrx_node *iface;
|
|
struct wma_txrx_node *iface;
|
|
|
|
+ int8_t maxTxPower = 0;
|
|
int ret = 0;
|
|
int ret = 0;
|
|
struct wma_target_req *msg;
|
|
struct wma_target_req *msg;
|
|
bool peer_assoc_cnf = false;
|
|
bool peer_assoc_cnf = false;
|
|
@@ -4436,10 +4465,14 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (!wlan_reg_is_ext_tpc_supported(wma->psoc))
|
|
|
|
+ maxTxPower = params->maxTxPower;
|
|
|
|
+
|
|
wma_vdev_set_bss_params(wma, params->smesessionId,
|
|
wma_vdev_set_bss_params(wma, params->smesessionId,
|
|
iface->beaconInterval, iface->dtimPeriod,
|
|
iface->beaconInterval, iface->dtimPeriod,
|
|
iface->shortSlotTimeSupported,
|
|
iface->shortSlotTimeSupported,
|
|
- iface->llbCoexist, 0, iface->bss_max_idle_period);
|
|
|
|
|
|
+ iface->llbCoexist, maxTxPower,
|
|
|
|
+ iface->bss_max_idle_period);
|
|
|
|
|
|
params->csaOffloadEnable = 0;
|
|
params->csaOffloadEnable = 0;
|
|
if (wmi_service_enabled(wma->wmi_handle,
|
|
if (wmi_service_enabled(wma->wmi_handle,
|