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
This commit is contained in:
Arunk Khandavalli
2018-01-25 14:41:02 +05:30
committed by snandini
parent aaf6b14da0
commit 2462f461ab
3 changed files with 110 additions and 89 deletions

View File

@@ -1239,16 +1239,11 @@ struct hw_mode_idx_to_mac_cap_idx {
* @driver_type: driver type * @driver_type: driver type
* @myaddr: current mac address * @myaddr: current mac address
* @hwaddr: mac address from EEPROM * @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 * @lpss_support: LPSS feature is supported in target or not
* @egap_support: Enhanced Green AP support flag * @egap_support: Enhanced Green AP support flag
* @wmi_ready: wmi status flag * @wmi_ready: wmi status flag
* @wlan_init_status: wlan init status * @wlan_init_status: wlan init status
* @qdf_dev: qdf device * @qdf_dev: qdf device
* @max_frag_entry: Max number of Fragment entry
* @wmi_service_bitmap: wmi services bitmap received from Target * @wmi_service_bitmap: wmi services bitmap received from Target
* @frameTransRequired: frame transmission required * @frameTransRequired: frame transmission required
* @wmaGlobalSystemRole: global system role * @wmaGlobalSystemRole: global system role
@@ -1269,10 +1264,7 @@ struct hw_mode_idx_to_mac_cap_idx {
* @pdevconfig: pdev related configrations * @pdevconfig: pdev related configrations
* @vdev_resp_queue: vdev response queue * @vdev_resp_queue: vdev response queue
* @vdev_respq_lock: vdev response queue lock * @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 * @vht_supp_mcs: VHT supported MCS
* @num_rf_chains: number of RF chains
* @is_fw_assert: is fw asserted * @is_fw_assert: is fw asserted
* @wow: wow related patterns & parameters * @wow: wow related patterns & parameters
* @no_of_suspend_ind: number of suspend indications * @no_of_suspend_ind: number of suspend indications
@@ -1378,10 +1370,6 @@ typedef struct {
enum qdf_driver_type driver_type; enum qdf_driver_type driver_type;
uint8_t myaddr[IEEE80211_ADDR_LEN]; uint8_t myaddr[IEEE80211_ADDR_LEN];
uint8_t hwaddr[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 #ifdef WLAN_FEATURE_LPSS
uint8_t lpss_support; uint8_t lpss_support;
#endif #endif
@@ -1389,7 +1377,6 @@ typedef struct {
bool wmi_ready; bool wmi_ready;
uint32_t wlan_init_status; uint32_t wlan_init_status;
qdf_device_t qdf_dev; qdf_device_t qdf_dev;
uint32_t max_frag_entry;
uint32_t wmi_service_bitmap[WMI_SERVICE_BM_SIZE]; uint32_t wmi_service_bitmap[WMI_SERVICE_BM_SIZE];
uint32_t wmi_service_ext_offset; uint32_t wmi_service_ext_offset;
uint32_t wmi_service_ext_bitmap[WMI_SERVICE_SEGMENT_BM_SIZE32]; uint32_t wmi_service_ext_bitmap[WMI_SERVICE_SEGMENT_BM_SIZE32];
@@ -1420,10 +1407,7 @@ typedef struct {
qdf_spinlock_t vdev_respq_lock; qdf_spinlock_t vdev_respq_lock;
qdf_list_t wma_hold_req_queue; qdf_list_t wma_hold_req_queue;
qdf_spinlock_t wma_hold_req_q_lock; 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 vht_supp_mcs;
uint32_t num_rf_chains;
uint8_t is_fw_assert; uint8_t is_fw_assert;
struct wma_wow wow; struct wma_wow wow;
uint8_t no_of_suspend_ind; uint8_t no_of_suspend_ind;
@@ -1524,7 +1508,6 @@ typedef struct {
enum sir_roam_op_code reason); enum sir_roam_op_code reason);
qdf_wake_lock_t wmi_cmd_rsp_wake_lock; qdf_wake_lock_t wmi_cmd_rsp_wake_lock;
qdf_runtime_lock_t wmi_cmd_rsp_runtime_lock; qdf_runtime_lock_t wmi_cmd_rsp_runtime_lock;
uint32_t fine_time_measurement_cap;
bool bpf_enabled; bool bpf_enabled;
bool bpf_packet_filter_enable; bool bpf_packet_filter_enable;
enum active_bpf_mode active_uc_bpf_mode; enum active_bpf_mode active_uc_bpf_mode;

View File

@@ -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 qpower_params *qparams = &intr[vid].config.qpower_params;
struct pdev_params pdev_param; struct pdev_params pdev_param;
void *soc = cds_get_context(QDF_MODULE_ID_SOC); void *soc = cds_get_context(QDF_MODULE_ID_SOC);
struct target_psoc_info *tgt_hdl;
WMA_LOGD("wmihandle %pK", wma->wmi_handle); WMA_LOGD("wmihandle %pK", wma->wmi_handle);
@@ -1061,6 +1062,12 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma,
return; 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) { if (privcmd->param_id >= WMI_CMDID_MAX) {
/* /*
* This configuration setting is not done using any wmi * 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)) { (privcmd->param_id == WMI_PDEV_PARAM_TX_CHAIN_MASK)) {
if (QDF_STATUS_SUCCESS != if (QDF_STATUS_SUCCESS !=
wma_check_txrx_chainmask( wma_check_txrx_chainmask(
wma->num_rf_chains, target_if_get_num_rf_chains(tgt_hdl),
privcmd->param_value)) { privcmd->param_value)) {
WMA_LOGD("Chainmask value is invalid"); WMA_LOGD("Chainmask value is invalid");
return; return;
@@ -4435,12 +4442,14 @@ QDF_STATUS wma_close(void)
/** /**
* wma_update_fw_config() - update fw configuration * wma_update_fw_config() - update fw configuration
* @wma_handle: wma handle * @wma_handle: wma handle
* @tgt_cap: target capabality * @tgt_cap: pointer to structure target_psoc_info
* @tgt_hdl: Target capability info
* *
* Return: none * Return: none
*/ */
static void wma_update_fw_config(tp_wma_handle wma_handle, 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 * 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 */ /* Override the no. of max fragments as per platform configuration */
tgt_cap->wlan_resource_config.max_frag_entries = tgt_cap->wlan_resource_config.max_frag_entries =
QDF_MIN(QCA_OL_11AC_TX_MAX_FRAGS, QDF_MIN(QCA_OL_11AC_TX_MAX_FRAGS,
wma_handle->max_frag_entry); target_if_get_max_frag_entry(tgt_hdl));
wma_handle->max_frag_entry =
tgt_cap->wlan_resource_config.max_frag_entries; target_if_set_max_frag_entry(tgt_hdl,
tgt_cap->wlan_resource_config.max_frag_entries);
/* Update no. of maxWoWFilters depending on BPF service */ /* Update no. of maxWoWFilters depending on BPF service */
if (wmi_service_enabled(wma_handle->wmi_handle, 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 * wma_update_target_ht_cap() - update ht capabality from wma handle
* @wh: wma handle * @tgt_hdl: pointer to structure target_psoc_info
* @cfg: ht capabality * @cfg: ht capability
* *
* Return: none * Return: none
*/ */
static inline void wma_update_target_ht_cap(tp_wma_handle wh, static inline void
struct wma_tgt_ht_cap *cfg) 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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" 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" "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_stbc, cfg->ht_tx_stbc, cfg->mpdu_density,
cfg->ht_rx_ldpc, cfg->ht_sgi_20, cfg->ht_sgi_40, cfg->ht_rx_ldpc, cfg->ht_sgi_20, cfg->ht_sgi_40,
cfg->num_rf_chains); 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 * 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 * @cfg: vht capabality
* *
* Return: none * Return: none
*/ */
static inline void wma_update_target_vht_cap(tp_wma_handle wh, static inline void
struct wma_tgt_vht_cap *cfg) 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; 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; cfg->vht_max_mpdu = WMI_VHT_CAP_MAX_MPDU_LEN_7935;
else else
cfg->vht_max_mpdu = 0; 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_80P80MHZ;
cfg->supp_chan_width |= 1 << eHT_CHANNEL_WIDTH_160MHZ; 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; cfg->supp_chan_width = 1 << eHT_CHANNEL_WIDTH_160MHZ;
else } else {
cfg->supp_chan_width = 1 << eHT_CHANNEL_WIDTH_80MHZ; 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_80 = 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_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) | cfg->vht_rx_stbc =
(wh->vht_cap_info & WMI_VHT_CAP_RX_STBC_2SS) | (vht_cap_info & WMI_VHT_CAP_RX_STBC_1SS) |
(wh->vht_cap_info & WMI_VHT_CAP_RX_STBC_3SS); (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)
>> WMI_VHT_CAP_MAX_AMPDU_LEN_EXP_SHIFT; >> 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" 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" "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); void *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
target_resource_config *wlan_res_cfg; target_resource_config *wlan_res_cfg;
struct target_psoc_info *tgt_hdl; struct target_psoc_info *tgt_hdl;
struct wlan_psoc_host_service_ext_param *service_ext_param;
WMA_LOGD("%s: Enter", __func__); 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); 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)); 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); ATH_MAC_LEN);
wma_update_target_services(wma_handle, &tgt_cfg.services); wma_update_target_services(wma_handle, &tgt_cfg.services);
wma_update_target_ht_cap(wma_handle, &tgt_cfg.ht_cap); wma_update_target_ht_cap(tgt_hdl, &tgt_cfg.ht_cap);
wma_update_target_vht_cap(wma_handle, &tgt_cfg.vht_cap); wma_update_target_vht_cap(tgt_hdl, &tgt_cfg.vht_cap);
/* /*
* This will overwrite the structure filled by wma_update_target_ht_cap * This will overwrite the structure filled by wma_update_target_ht_cap
* and wma_update_target_vht_cap APIs. * 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); wma_update_target_ext_he_cap(wma_handle, &tgt_cfg);
tgt_cfg.target_fw_version = wma_handle->target_fw_version; tgt_cfg.target_fw_version = target_if_get_fw_version(tgt_hdl);
tgt_cfg.target_fw_vers_ext = wma_handle->target_fw_vers_ext; if (service_ext_param)
tgt_cfg.target_fw_vers_ext =
service_ext_param->fw_build_vers_ext;
#ifdef WLAN_FEATURE_LPSS #ifdef WLAN_FEATURE_LPSS
tgt_cfg.lpss_support = wma_handle->lpss_support; tgt_cfg.lpss_support = wma_handle->lpss_support;
#endif /* WLAN_FEATURE_LPSS */ #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), wma_update_hdd_band_cap(target_if_get_phy_capability(tgt_hdl),
&tgt_cfg); &tgt_cfg);
tgt_cfg.fine_time_measurement_cap = 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) tgt_cfg.wmi_max_len = wmi_get_max_msg_len(wma_handle->wmi_handle)
- WMI_TLV_HEADROOM; - WMI_TLV_HEADROOM;
tgt_cfg.tx_bfee_8ss_enabled = wma_handle->tx_bfee_8ss_enabled; 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_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, qdf_mem_copy(&wma_handle->reg_cap, param_buf->hal_reg_capabilities,
sizeof(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->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; wma_handle->new_hw_mode_index = tgt_cap_info->default_dbs_hw_mode_index;
policy_mgr_update_new_hw_mode_index(wma_handle->psoc, policy_mgr_update_new_hw_mode_index(wma_handle->psoc,
tgt_cap_info->default_dbs_hw_mode_index); 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", WMA_LOGD("%s: Firmware default hw mode index : %d",
__func__, tgt_cap_info->default_dbs_hw_mode_index); __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, service_bitmap,
sizeof(wma_handle->wmi_service_bitmap)); sizeof(wma_handle->wmi_service_bitmap));
target_cap.wlan_resource_config = tgt_hdl->info.wlan_res_cfg; 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, qdf_mem_copy(wma_handle->wmi_service_bitmap,
service_bitmap, service_bitmap,
sizeof(wma_handle->wmi_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; struct hw_mode_idx_to_mac_cap_idx *map;
WMI_MAC_PHY_CAPABILITIES *phy_cap; WMI_MAC_PHY_CAPABILITIES *phy_cap;
uint8_t phyid, our_hw_mode = hw_mode; uint8_t phyid, our_hw_mode = hw_mode;
struct target_psoc_info *tgt_hdl;
int ht_cap_info, vht_cap_info;
if (!wma_handle) { if (!wma_handle) {
WMA_LOGE("Invalid wma handle"); WMA_LOGE("Invalid wma handle");
return QDF_STATUS_E_FAILURE; 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) { if (0 == wma_handle->phy_caps.num_hw_modes.num_hw_modes) {
WMA_LOGD("Invalid number of hw modes, use legacy HT/VHT caps"); 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_2g = ht_cap_info;
caps_per_phy->ht_5g = wma_handle->ht_cap_info; caps_per_phy->ht_5g = ht_cap_info;
caps_per_phy->vht_2g = wma_handle->vht_cap_info; caps_per_phy->vht_2g = vht_cap_info;
caps_per_phy->vht_5g = wma_handle->vht_cap_info; caps_per_phy->vht_5g = vht_cap_info;
/* legacy platform doesn't support HE IE */ /* legacy platform doesn't support HE IE */
caps_per_phy->he_2g = 0; caps_per_phy->he_2g = 0;
caps_per_phy->he_5g = 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; wmi_service_ready_ext_event_fixed_param *ev;
QDF_STATUS ret; QDF_STATUS ret;
struct target_psoc_info *tgt_hdl; struct target_psoc_info *tgt_hdl;
uint32_t conc_scan_config_bits, fw_config_bits;
WMA_LOGD("%s: Enter", __func__); WMA_LOGD("%s: Enter", __func__);
if (!wma_handle) { 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"); 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", WMA_LOGD("%s: Defaults: scan config:%x FW mode config:%x",
__func__, ev->default_conc_scan_config_bits, __func__, conc_scan_config_bits, fw_config_bits);
ev->default_fw_config_bits);
ret = qdf_mc_timer_stop(&wma_handle->service_ready_ext_timer); ret = qdf_mc_timer_stop(&wma_handle->service_ready_ext_timer);
if (!QDF_IS_STATUS_SUCCESS(ret)) { 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_LOGD("WMA --> WMI_INIT_CMDID");
wma_init_scan_fw_mode_config(wma_handle, wma_init_scan_fw_mode_config(wma_handle, conc_scan_config_bits,
ev->default_conc_scan_config_bits, fw_config_bits);
ev->default_fw_config_bits);
wma_handle->target_fw_vers_ext = ev->fw_build_vers_ext;
target_psoc_set_num_radios(tgt_hdl, 1); target_psoc_set_num_radios(tgt_hdl, 1);
return 0; 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->wmi_ready = true;
wma_handle->wlan_init_status = ev->status; 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 */ /* 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->myaddr);
WMI_MAC_ADDR_TO_CHAR_ARRAY(&ev->mac_addr, wma_handle->hwaddr); WMI_MAC_ADDR_TO_CHAR_ARRAY(&ev->mac_addr, wma_handle->hwaddr);

View File

@@ -67,6 +67,7 @@
#include "linux/ieee80211.h" #include "linux/ieee80211.h"
#include <cdp_txrx_handle.h> #include <cdp_txrx_handle.h>
#include "cds_reg_service.h" #include "cds_reg_service.h"
#include "target_if.h"
/* MCS Based rate table */ /* MCS Based rate table */
/* HT MCS parameters with Nss = 1 */ /* 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) uint32_t version_buffer_size)
{ {
tp_wma_handle wma_handle = cds_get_context(QDF_MODULE_ID_WMA); tp_wma_handle wma_handle = cds_get_context(QDF_MODULE_ID_WMA);
struct target_psoc_info *tgt_hdl;
if (NULL == wma_handle) { if (NULL == wma_handle) {
WMA_LOGE("%s: Failed to get wma", __func__); WMA_LOGE("%s: Failed to get wma", __func__);
return QDF_STATUS_E_FAULT; 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", snprintf(version, version_buffer_size, "%x",
(unsigned int)wma_handle->target_fw_version); target_if_get_fw_version(tgt_hdl));
return QDF_STATUS_SUCCESS; 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; uint32_t fw_ch_wd = WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ;
tp_wma_handle wm_hdl = cds_get_context(QDF_MODULE_ID_WMA); 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) if (NULL == wm_hdl)
return fw_ch_wd; 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; 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; fw_ch_wd = WNI_CFG_VHT_CHANNEL_WIDTH_160MHZ;
return fw_ch_wd; return fw_ch_wd;