From 2462f461ab41c9029d5ba425dce78bdcb43373b5 Mon Sep 17 00:00:00 2001 From: Arunk Khandavalli Date: Thu, 25 Jan 2018 14:41:02 +0530 Subject: [PATCH] qcacld-3.0: Remove redundant wma_handle values update the max frag entry,ht,vht, rf chains from from the converged target psoc capabilities information and remove redundant wma_handle. CRs-Fixed: 2178922 Change-Id: I6bfe734bac85905b0d6837bffb37d286cff2a4ff --- core/wma/inc/wma.h | 17 ----- core/wma/src/wma_main.c | 161 ++++++++++++++++++++++----------------- core/wma/src/wma_utils.c | 21 ++++- 3 files changed, 110 insertions(+), 89 deletions(-) diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index 5ab969720a56..d05a10948d36 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -1239,16 +1239,11 @@ struct hw_mode_idx_to_mac_cap_idx { * @driver_type: driver type * @myaddr: current mac address * @hwaddr: mac address from EEPROM - * @target_abi_vers: target firmware version - * @final_abi_vers: The final ABI version to be used for communicating - * @target_fw_version: Target f/w build version - * @target_fw_vers_ext: Target f/w build version sub id * @lpss_support: LPSS feature is supported in target or not * @egap_support: Enhanced Green AP support flag * @wmi_ready: wmi status flag * @wlan_init_status: wlan init status * @qdf_dev: qdf device - * @max_frag_entry: Max number of Fragment entry * @wmi_service_bitmap: wmi services bitmap received from Target * @frameTransRequired: frame transmission required * @wmaGlobalSystemRole: global system role @@ -1269,10 +1264,7 @@ struct hw_mode_idx_to_mac_cap_idx { * @pdevconfig: pdev related configrations * @vdev_resp_queue: vdev response queue * @vdev_respq_lock: vdev response queue lock - * @ht_cap_info: HT capablity info - * @vht_cap_info: VHT capablity info * @vht_supp_mcs: VHT supported MCS - * @num_rf_chains: number of RF chains * @is_fw_assert: is fw asserted * @wow: wow related patterns & parameters * @no_of_suspend_ind: number of suspend indications @@ -1378,10 +1370,6 @@ typedef struct { enum qdf_driver_type driver_type; uint8_t myaddr[IEEE80211_ADDR_LEN]; uint8_t hwaddr[IEEE80211_ADDR_LEN]; - wmi_abi_version target_abi_vers; - wmi_abi_version final_abi_vers; - uint32_t target_fw_version; - uint32_t target_fw_vers_ext; #ifdef WLAN_FEATURE_LPSS uint8_t lpss_support; #endif @@ -1389,7 +1377,6 @@ typedef struct { bool wmi_ready; uint32_t wlan_init_status; qdf_device_t qdf_dev; - uint32_t max_frag_entry; uint32_t wmi_service_bitmap[WMI_SERVICE_BM_SIZE]; uint32_t wmi_service_ext_offset; uint32_t wmi_service_ext_bitmap[WMI_SERVICE_SEGMENT_BM_SIZE32]; @@ -1420,10 +1407,7 @@ typedef struct { qdf_spinlock_t vdev_respq_lock; qdf_list_t wma_hold_req_queue; qdf_spinlock_t wma_hold_req_q_lock; - uint32_t ht_cap_info; - uint32_t vht_cap_info; uint32_t vht_supp_mcs; - uint32_t num_rf_chains; uint8_t is_fw_assert; struct wma_wow wow; uint8_t no_of_suspend_ind; @@ -1524,7 +1508,6 @@ typedef struct { enum sir_roam_op_code reason); qdf_wake_lock_t wmi_cmd_rsp_wake_lock; qdf_runtime_lock_t wmi_cmd_rsp_runtime_lock; - uint32_t fine_time_measurement_cap; bool bpf_enabled; bool bpf_packet_filter_enable; enum active_bpf_mode active_uc_bpf_mode; diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index e09d9b04f050..eb507caaed4e 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -1053,6 +1053,7 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, struct qpower_params *qparams = &intr[vid].config.qpower_params; struct pdev_params pdev_param; void *soc = cds_get_context(QDF_MODULE_ID_SOC); + struct target_psoc_info *tgt_hdl; WMA_LOGD("wmihandle %pK", wma->wmi_handle); @@ -1061,6 +1062,12 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, return; } + tgt_hdl = wlan_psoc_get_tgt_if_handle(wma->psoc); + if (!tgt_hdl) { + WMA_LOGE("%s: target psoc info is NULL", __func__); + return; + } + if (privcmd->param_id >= WMI_CMDID_MAX) { /* * This configuration setting is not done using any wmi @@ -1097,7 +1104,7 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, (privcmd->param_id == WMI_PDEV_PARAM_TX_CHAIN_MASK)) { if (QDF_STATUS_SUCCESS != wma_check_txrx_chainmask( - wma->num_rf_chains, + target_if_get_num_rf_chains(tgt_hdl), privcmd->param_value)) { WMA_LOGD("Chainmask value is invalid"); return; @@ -4435,12 +4442,14 @@ QDF_STATUS wma_close(void) /** * wma_update_fw_config() - update fw configuration * @wma_handle: wma handle - * @tgt_cap: target capabality + * @tgt_cap: pointer to structure target_psoc_info + * @tgt_hdl: Target capability info * * Return: none */ static void wma_update_fw_config(tp_wma_handle wma_handle, - struct wma_target_cap *tgt_cap) + struct wma_target_cap *tgt_cap, + struct target_psoc_info *tgt_hdl) { /* * tgt_cap contains default target resource configuration @@ -4449,9 +4458,10 @@ static void wma_update_fw_config(tp_wma_handle wma_handle, /* Override the no. of max fragments as per platform configuration */ tgt_cap->wlan_resource_config.max_frag_entries = QDF_MIN(QCA_OL_11AC_TX_MAX_FRAGS, - wma_handle->max_frag_entry); - wma_handle->max_frag_entry = - tgt_cap->wlan_resource_config.max_frag_entries; + target_if_get_max_frag_entry(tgt_hdl)); + + target_if_set_max_frag_entry(tgt_hdl, + tgt_cap->wlan_resource_config.max_frag_entries); /* Update no. of maxWoWFilters depending on BPF service */ if (wmi_service_enabled(wma_handle->wmi_handle, @@ -4602,37 +4612,42 @@ static inline void wma_update_target_services(tp_wma_handle wh, /** * wma_update_target_ht_cap() - update ht capabality from wma handle - * @wh: wma handle - * @cfg: ht capabality + * @tgt_hdl: pointer to structure target_psoc_info + * @cfg: ht capability * * Return: none */ -static inline void wma_update_target_ht_cap(tp_wma_handle wh, - struct wma_tgt_ht_cap *cfg) +static inline void +wma_update_target_ht_cap(struct target_psoc_info *tgt_hdl, + struct wma_tgt_ht_cap *cfg) { + int ht_cap_info; + + ht_cap_info = target_if_get_ht_cap_info(tgt_hdl); /* RX STBC */ - cfg->ht_rx_stbc = !!(wh->ht_cap_info & WMI_HT_CAP_RX_STBC); + cfg->ht_rx_stbc = !!(ht_cap_info & WMI_HT_CAP_RX_STBC); /* TX STBC */ - cfg->ht_tx_stbc = !!(wh->ht_cap_info & WMI_HT_CAP_TX_STBC); + cfg->ht_tx_stbc = !!(ht_cap_info & WMI_HT_CAP_TX_STBC); /* MPDU density */ - cfg->mpdu_density = wh->ht_cap_info & WMI_HT_CAP_MPDU_DENSITY; + cfg->mpdu_density = ht_cap_info & WMI_HT_CAP_MPDU_DENSITY; /* HT RX LDPC */ - cfg->ht_rx_ldpc = !!(wh->ht_cap_info & WMI_HT_CAP_LDPC); + cfg->ht_rx_ldpc = !!(ht_cap_info & WMI_HT_CAP_LDPC); /* HT SGI */ - cfg->ht_sgi_20 = !!(wh->ht_cap_info & WMI_HT_CAP_HT20_SGI); + cfg->ht_sgi_20 = !!(ht_cap_info & WMI_HT_CAP_HT20_SGI); - cfg->ht_sgi_40 = !!(wh->ht_cap_info & WMI_HT_CAP_HT40_SGI); + cfg->ht_sgi_40 = !!(ht_cap_info & WMI_HT_CAP_HT40_SGI); /* RF chains */ - cfg->num_rf_chains = wh->num_rf_chains; + cfg->num_rf_chains = target_if_get_num_rf_chains(tgt_hdl); WMA_LOGD("%s: ht_cap_info - %x ht_rx_stbc - %d, ht_tx_stbc - %d\n" "mpdu_density - %d ht_rx_ldpc - %d ht_sgi_20 - %d\n" - "ht_sgi_40 - %d num_rf_chains - %d", __func__, wh->ht_cap_info, + "ht_sgi_40 - %d num_rf_chains - %d", __func__, + ht_cap_info, cfg->ht_rx_stbc, cfg->ht_tx_stbc, cfg->mpdu_density, cfg->ht_rx_ldpc, cfg->ht_sgi_20, cfg->ht_sgi_40, cfg->num_rf_chains); @@ -4641,55 +4656,59 @@ static inline void wma_update_target_ht_cap(tp_wma_handle wh, /** * wma_update_target_vht_cap() - update vht capabality from wma handle - * @wh: wma handle + * @tgt_hdl: pointer to structure target_psoc_info * @cfg: vht capabality * * Return: none */ -static inline void wma_update_target_vht_cap(tp_wma_handle wh, - struct wma_tgt_vht_cap *cfg) +static inline void +wma_update_target_vht_cap(struct target_psoc_info *tgt_hdl, + struct wma_tgt_vht_cap *cfg) { + int vht_cap_info = target_if_get_vht_cap_info(tgt_hdl); - if (wh->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_11454) + if (vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_11454) cfg->vht_max_mpdu = WMI_VHT_CAP_MAX_MPDU_LEN_11454; - else if (wh->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_7935) + else if (vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_7935) cfg->vht_max_mpdu = WMI_VHT_CAP_MAX_MPDU_LEN_7935; else cfg->vht_max_mpdu = 0; - if (wh->vht_cap_info & WMI_VHT_CAP_CH_WIDTH_80P80_160MHZ) { + if (vht_cap_info & WMI_VHT_CAP_CH_WIDTH_80P80_160MHZ) { cfg->supp_chan_width = 1 << eHT_CHANNEL_WIDTH_80P80MHZ; cfg->supp_chan_width |= 1 << eHT_CHANNEL_WIDTH_160MHZ; - } else if (wh->vht_cap_info & WMI_VHT_CAP_CH_WIDTH_160MHZ) + } else if (vht_cap_info & WMI_VHT_CAP_CH_WIDTH_160MHZ) { cfg->supp_chan_width = 1 << eHT_CHANNEL_WIDTH_160MHZ; - else + } else { cfg->supp_chan_width = 1 << eHT_CHANNEL_WIDTH_80MHZ; + } - cfg->vht_rx_ldpc = wh->vht_cap_info & WMI_VHT_CAP_RX_LDPC; + cfg->vht_rx_ldpc = vht_cap_info & WMI_VHT_CAP_RX_LDPC; - cfg->vht_short_gi_80 = wh->vht_cap_info & WMI_VHT_CAP_SGI_80MHZ; - cfg->vht_short_gi_160 = wh->vht_cap_info & WMI_VHT_CAP_SGI_160MHZ; + cfg->vht_short_gi_80 = vht_cap_info & WMI_VHT_CAP_SGI_80MHZ; + cfg->vht_short_gi_160 = vht_cap_info & WMI_VHT_CAP_SGI_160MHZ; - cfg->vht_tx_stbc = wh->vht_cap_info & WMI_VHT_CAP_TX_STBC; + cfg->vht_tx_stbc = vht_cap_info & WMI_VHT_CAP_TX_STBC; - cfg->vht_rx_stbc = (wh->vht_cap_info & WMI_VHT_CAP_RX_STBC_1SS) | - (wh->vht_cap_info & WMI_VHT_CAP_RX_STBC_2SS) | - (wh->vht_cap_info & WMI_VHT_CAP_RX_STBC_3SS); + cfg->vht_rx_stbc = + (vht_cap_info & WMI_VHT_CAP_RX_STBC_1SS) | + (vht_cap_info & WMI_VHT_CAP_RX_STBC_2SS) | + (vht_cap_info & WMI_VHT_CAP_RX_STBC_3SS); - cfg->vht_max_ampdu_len_exp = (wh->vht_cap_info & + cfg->vht_max_ampdu_len_exp = (vht_cap_info & WMI_VHT_CAP_MAX_AMPDU_LEN_EXP) >> WMI_VHT_CAP_MAX_AMPDU_LEN_EXP_SHIFT; - cfg->vht_su_bformer = wh->vht_cap_info & WMI_VHT_CAP_SU_BFORMER; + cfg->vht_su_bformer = vht_cap_info & WMI_VHT_CAP_SU_BFORMER; - cfg->vht_su_bformee = wh->vht_cap_info & WMI_VHT_CAP_SU_BFORMEE; + cfg->vht_su_bformee = vht_cap_info & WMI_VHT_CAP_SU_BFORMEE; - cfg->vht_mu_bformer = wh->vht_cap_info & WMI_VHT_CAP_MU_BFORMER; + cfg->vht_mu_bformer = vht_cap_info & WMI_VHT_CAP_MU_BFORMER; - cfg->vht_mu_bformee = wh->vht_cap_info & WMI_VHT_CAP_MU_BFORMEE; + cfg->vht_mu_bformee = vht_cap_info & WMI_VHT_CAP_MU_BFORMEE; - cfg->vht_txop_ps = wh->vht_cap_info & WMI_VHT_CAP_TXOP_PS; + cfg->vht_txop_ps = vht_cap_info & WMI_VHT_CAP_TXOP_PS; WMA_LOGD("%s: max_mpdu %d supp_chan_width %x rx_ldpc %x\n" "short_gi_80 %x tx_stbc %x rx_stbc %x txop_ps %x\n" @@ -5117,6 +5136,7 @@ static void wma_update_hdd_cfg(tp_wma_handle wma_handle) void *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); target_resource_config *wlan_res_cfg; struct target_psoc_info *tgt_hdl; + struct wlan_psoc_host_service_ext_param *service_ext_param; WMA_LOGD("%s: Enter", __func__); @@ -5127,6 +5147,8 @@ static void wma_update_hdd_cfg(tp_wma_handle wma_handle) } wlan_res_cfg = target_psoc_get_wlan_res_cfg(tgt_hdl); + service_ext_param = + target_psoc_get_service_ext_param(tgt_hdl); qdf_mem_zero(&tgt_cfg, sizeof(struct wma_tgt_cfg)); @@ -5140,8 +5162,8 @@ static void wma_update_hdd_cfg(tp_wma_handle wma_handle) ATH_MAC_LEN); wma_update_target_services(wma_handle, &tgt_cfg.services); - wma_update_target_ht_cap(wma_handle, &tgt_cfg.ht_cap); - wma_update_target_vht_cap(wma_handle, &tgt_cfg.vht_cap); + wma_update_target_ht_cap(tgt_hdl, &tgt_cfg.ht_cap); + wma_update_target_vht_cap(tgt_hdl, &tgt_cfg.vht_cap); /* * This will overwrite the structure filled by wma_update_target_ht_cap * and wma_update_target_vht_cap APIs. @@ -5151,8 +5173,11 @@ static void wma_update_hdd_cfg(tp_wma_handle wma_handle) wma_update_target_ext_he_cap(wma_handle, &tgt_cfg); - tgt_cfg.target_fw_version = wma_handle->target_fw_version; - tgt_cfg.target_fw_vers_ext = wma_handle->target_fw_vers_ext; + tgt_cfg.target_fw_version = target_if_get_fw_version(tgt_hdl); + if (service_ext_param) + tgt_cfg.target_fw_vers_ext = + service_ext_param->fw_build_vers_ext; + #ifdef WLAN_FEATURE_LPSS tgt_cfg.lpss_support = wma_handle->lpss_support; #endif /* WLAN_FEATURE_LPSS */ @@ -5164,7 +5189,7 @@ static void wma_update_hdd_cfg(tp_wma_handle wma_handle) wma_update_hdd_band_cap(target_if_get_phy_capability(tgt_hdl), &tgt_cfg); tgt_cfg.fine_time_measurement_cap = - wma_handle->fine_time_measurement_cap; + target_if_get_wmi_fw_sub_feat_caps(tgt_hdl); tgt_cfg.wmi_max_len = wmi_get_max_msg_len(wma_handle->wmi_handle) - WMI_TLV_HEADROOM; tgt_cfg.tx_bfee_8ss_enabled = wma_handle->tx_bfee_8ss_enabled; @@ -5358,22 +5383,14 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info, */ wma_init_scan_fw_mode_config(wma_handle, 0, 0); - wma_handle->max_frag_entry = tgt_cap_info->max_frag_entry; - wma_handle->num_rf_chains = tgt_cap_info->num_rf_chains; qdf_mem_copy(&wma_handle->reg_cap, param_buf->hal_reg_capabilities, sizeof(HAL_REG_CAPABILITIES)); - wma_handle->ht_cap_info = ev->ht_cap_info; - wma_handle->vht_cap_info = ev->vht_cap_info; wma_handle->vht_supp_mcs = ev->vht_supp_mcs; - wma_handle->num_rf_chains = ev->num_rf_chains; - wma_handle->target_fw_version = ev->fw_build_vers; wma_handle->new_hw_mode_index = tgt_cap_info->default_dbs_hw_mode_index; policy_mgr_update_new_hw_mode_index(wma_handle->psoc, tgt_cap_info->default_dbs_hw_mode_index); - wma_handle->fine_time_measurement_cap = - tgt_cap_info->wmi_fw_sub_feat_caps; WMA_LOGD("%s: Firmware default hw mode index : %d", __func__, tgt_cap_info->default_dbs_hw_mode_index); @@ -5558,7 +5575,7 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info, service_bitmap, sizeof(wma_handle->wmi_service_bitmap)); target_cap.wlan_resource_config = tgt_hdl->info.wlan_res_cfg; - wma_update_fw_config(wma_handle, &target_cap); + wma_update_fw_config(wma_handle, &target_cap, tgt_hdl); qdf_mem_copy(wma_handle->wmi_service_bitmap, service_bitmap, sizeof(wma_handle->wmi_service_bitmap)); @@ -5667,18 +5684,29 @@ QDF_STATUS wma_get_caps_for_phyidx_hwmode(struct wma_caps_per_phy *caps_per_phy, struct hw_mode_idx_to_mac_cap_idx *map; WMI_MAC_PHY_CAPABILITIES *phy_cap; uint8_t phyid, our_hw_mode = hw_mode; + struct target_psoc_info *tgt_hdl; + int ht_cap_info, vht_cap_info; if (!wma_handle) { WMA_LOGE("Invalid wma handle"); return QDF_STATUS_E_FAILURE; } + tgt_hdl = wlan_psoc_get_tgt_if_handle(wma_handle->psoc); + if (!tgt_hdl) { + WMA_LOGE("%s: target psoc info is NULL", __func__); + return -EINVAL; + } + + ht_cap_info = target_if_get_ht_cap_info(tgt_hdl); + vht_cap_info = target_if_get_vht_cap_info(tgt_hdl); + if (0 == wma_handle->phy_caps.num_hw_modes.num_hw_modes) { WMA_LOGD("Invalid number of hw modes, use legacy HT/VHT caps"); - caps_per_phy->ht_2g = wma_handle->ht_cap_info; - caps_per_phy->ht_5g = wma_handle->ht_cap_info; - caps_per_phy->vht_2g = wma_handle->vht_cap_info; - caps_per_phy->vht_5g = wma_handle->vht_cap_info; + caps_per_phy->ht_2g = ht_cap_info; + caps_per_phy->ht_5g = ht_cap_info; + caps_per_phy->vht_2g = vht_cap_info; + caps_per_phy->vht_5g = vht_cap_info; /* legacy platform doesn't support HE IE */ caps_per_phy->he_2g = 0; caps_per_phy->he_5g = 0; @@ -6289,7 +6317,7 @@ int wma_rx_service_ready_ext_event(void *handle, uint8_t *event, wmi_service_ready_ext_event_fixed_param *ev; QDF_STATUS ret; struct target_psoc_info *tgt_hdl; - + uint32_t conc_scan_config_bits, fw_config_bits; WMA_LOGD("%s: Enter", __func__); if (!wma_handle) { @@ -6317,9 +6345,11 @@ int wma_rx_service_ready_ext_event(void *handle, uint8_t *event, WMA_LOGD("WMA <-- WMI_SERVICE_READY_EXT_EVENTID"); + fw_config_bits = target_if_get_fw_config_bits(tgt_hdl); + conc_scan_config_bits = target_if_get_conc_scan_config_bits(tgt_hdl); + WMA_LOGD("%s: Defaults: scan config:%x FW mode config:%x", - __func__, ev->default_conc_scan_config_bits, - ev->default_fw_config_bits); + __func__, conc_scan_config_bits, fw_config_bits); ret = qdf_mc_timer_stop(&wma_handle->service_ready_ext_timer); if (!QDF_IS_STATUS_SUCCESS(ret)) { @@ -6336,10 +6366,8 @@ int wma_rx_service_ready_ext_event(void *handle, uint8_t *event, WMA_LOGD("WMA --> WMI_INIT_CMDID"); - wma_init_scan_fw_mode_config(wma_handle, - ev->default_conc_scan_config_bits, - ev->default_fw_config_bits); - wma_handle->target_fw_vers_ext = ev->fw_build_vers_ext; + wma_init_scan_fw_mode_config(wma_handle, conc_scan_config_bits, + fw_config_bits); target_psoc_set_num_radios(tgt_hdl, 1); return 0; @@ -6382,11 +6410,6 @@ int wma_rx_ready_event(void *handle, uint8_t *cmd_param_info, wma_handle->wmi_ready = true; wma_handle->wlan_init_status = ev->status; - qdf_mem_copy(&wma_handle->final_abi_vers, &ev->fw_abi_vers, - sizeof(wmi_abi_version)); - qdf_mem_copy(&wma_handle->target_abi_vers, &ev->fw_abi_vers, - sizeof(wmi_abi_version)); - /* copy the mac addr */ WMI_MAC_ADDR_TO_CHAR_ARRAY(&ev->mac_addr, wma_handle->myaddr); WMI_MAC_ADDR_TO_CHAR_ARRAY(&ev->mac_addr, wma_handle->hwaddr); diff --git a/core/wma/src/wma_utils.c b/core/wma/src/wma_utils.c index f920ef43e507..083d4a74f9a9 100644 --- a/core/wma/src/wma_utils.c +++ b/core/wma/src/wma_utils.c @@ -67,6 +67,7 @@ #include "linux/ieee80211.h" #include #include "cds_reg_service.h" +#include "target_if.h" /* MCS Based rate table */ /* HT MCS parameters with Nss = 1 */ @@ -4092,14 +4093,21 @@ QDF_STATUS wma_get_wcnss_software_version(uint8_t *version, uint32_t version_buffer_size) { tp_wma_handle wma_handle = cds_get_context(QDF_MODULE_ID_WMA); + struct target_psoc_info *tgt_hdl; if (NULL == wma_handle) { WMA_LOGE("%s: Failed to get wma", __func__); return QDF_STATUS_E_FAULT; } + tgt_hdl = wlan_psoc_get_tgt_if_handle(wma_handle->psoc); + if (!tgt_hdl) { + WMA_LOGE("%s: Failed to get wma", __func__); + return QDF_STATUS_E_FAULT; + } + snprintf(version, version_buffer_size, "%x", - (unsigned int)wma_handle->target_fw_version); + target_if_get_fw_version(tgt_hdl)); return QDF_STATUS_SUCCESS; } @@ -4183,13 +4191,20 @@ uint32_t wma_get_vht_ch_width(void) { uint32_t fw_ch_wd = WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ; tp_wma_handle wm_hdl = cds_get_context(QDF_MODULE_ID_WMA); + struct target_psoc_info *tgt_hdl; + int vht_cap_info; if (NULL == wm_hdl) return fw_ch_wd; - if (wm_hdl->vht_cap_info & WMI_VHT_CAP_CH_WIDTH_80P80_160MHZ) + tgt_hdl = wlan_psoc_get_tgt_if_handle(wm_hdl->psoc); + if (!tgt_hdl) + return fw_ch_wd; + + vht_cap_info = target_if_get_vht_cap_info(tgt_hdl); + if (vht_cap_info & WMI_VHT_CAP_CH_WIDTH_80P80_160MHZ) fw_ch_wd = WNI_CFG_VHT_CHANNEL_WIDTH_80_PLUS_80MHZ; - else if (wm_hdl->vht_cap_info & WMI_VHT_CAP_CH_WIDTH_160MHZ) + else if (vht_cap_info & WMI_VHT_CAP_CH_WIDTH_160MHZ) fw_ch_wd = WNI_CFG_VHT_CHANNEL_WIDTH_160MHZ; return fw_ch_wd;