qcacld-3.0: Config latency level to fw after vdev creates

From android Q, it uses a random MAC to connect to different
SSIDs which causes the interface down/up, the vdev will be
deleted and the latency level info is lost in firmware.

To fix this, save the latency level and reconfig it to fw
after vdev creates.

Change-Id: Ifac93fb869553d0f9eb553d5c41da43c8b014ad8
CRs-Fixed: 2554736
This commit is contained in:
Paul Zhang 2019-10-31 16:09:55 +08:00 • committed by nshrivas
commit 1ef2b7cd7f
3 changed files with 11 additions and 2 deletions

View file

@ -1046,6 +1046,7 @@ struct hdd_context;
* @gpio_tsf_sync_work: work to sync send TSF CAP WMI command
* @cache_sta_count: number of currently cached stations
* @acs_complete_event: acs complete event
* @latency_level: 0 - normal, 1 - moderate, 2 - low, 3 - ultralow
*/
struct hdd_adapter {
/* Magic cookie for adapter sanity verification. Note that this
@ -1290,6 +1291,7 @@ struct hdd_adapter {
uint32_t track_dest_ipv4;
uint32_t mon_chan_freq;
uint32_t mon_bandwidth;
uint16_t latency_level;
/* rcpi information */
struct rcpi_info rcpi;

View file

@ -7315,10 +7315,10 @@ static int hdd_config_latency_level(struct hdd_adapter *adapter,
/* Map the latency value to the level which fw expected
* 0 - normal, 1 - moderate, 2 - low, 3 - ultralow
*/
latency_level = latency_level - 1;
adapter->latency_level = latency_level - 1;
status = sme_set_wlm_latency_level(hdd_ctx->mac_handle,
adapter->vdev_id,
latency_level);
adapter->latency_level);
if (QDF_IS_STATUS_ERROR(status))
hdd_err("set latency level failed, %u", status);

View file

@ -10347,6 +10347,7 @@ err_out:
int hdd_start_station_adapter(struct hdd_adapter *adapter)
{
QDF_STATUS status;
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
int ret;
hdd_enter_dev(adapter->dev);
@ -10376,6 +10377,12 @@ int hdd_start_station_adapter(struct hdd_adapter *adapter)
hdd_register_hl_netdev_fc_timer(adapter,
hdd_tx_resume_timer_expired_handler);
status = sme_set_wlm_latency_level(hdd_ctx->mac_handle,
adapter->vdev_id,
adapter->latency_level);
if (QDF_IS_STATUS_ERROR(status))
hdd_warn("set latency level failed, %u", status);
hdd_exit();
return 0;