qcacld-3.0: use converged target resource config

As part of converged architecture use the converged
target resource configuration.

CRs-Fixed: 2178610
Change-Id: Ic0e3cbddea3c216688eb16c4e9a8045c7a0a1e9e
This commit is contained in:
Arunk Khandavalli 2018-01-25 11:27:42 +05:30 • committed by snandini
commit cfde2719f5
3 changed files with 182 additions and 117 deletions

View file

@ -1251,7 +1251,6 @@ struct hw_mode_idx_to_mac_cap_idx {
* @phy_capability: PHY Capability from Target
* @max_frag_entry: Max number of Fragment entry
* @wmi_service_bitmap: wmi services bitmap received from Target
* @wlan_resource_config: resource config
* @frameTransRequired: frame transmission required
* @wmaGlobalSystemRole: global system role
* @tx_frm_download_comp_cb: Tx Frame Compl Cb registered by umac
@ -1399,7 +1398,6 @@ typedef struct {
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];
target_resource_config wlan_resource_config;
uint32_t frameTransRequired;
tBssSystemRole wmaGlobalSystemRole;
wma_tx_dwnld_comp_callback tx_frm_download_comp_cb;

View file

@ -82,6 +82,7 @@
#include "wlan_roam_debug.h"
#include "wlan_ocb_ucfg_api.h"
#include "init_deinit_ucfg.h"
#include <target_if.h>
/**
* wma_find_vdev_by_addr() - find vdev_id from mac address
@ -983,20 +984,34 @@ int wma_vdev_start_resp_handler(void *handle, uint8_t *cmd_param_info,
QDF_STATUS status;
int err;
wmi_channel_width chanwidth;
target_resource_config *wlan_res_cfg;
struct wlan_objmgr_psoc *psoc = wma->psoc;
#ifdef FEATURE_AP_MCC_CH_AVOIDANCE
tpAniSirGlobal mac_ctx = cds_get_context(QDF_MODULE_ID_PE);
#endif
if (!psoc) {
WMA_LOGE("%s: psoc is NULL", __func__);
return -EINVAL;
}
#ifdef FEATURE_AP_MCC_CH_AVOIDANCE
if (NULL == mac_ctx) {
WMA_LOGE("%s: Failed to get mac_ctx", __func__);
policy_mgr_set_do_hw_mode_change_flag(
wma->psoc, false);
psoc, false);
return -EINVAL;
}
#endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
WMA_LOGD("%s: Enter", __func__);
wlan_res_cfg = ucfg_get_tgt_res_cfg(psoc);
if (!wlan_res_cfg) {
WMA_LOGE("%s: Wlan resource config is NULL", __func__);
return -EINVAL;
}
param_buf = (WMI_VDEV_START_RESP_EVENTID_param_tlvs *) cmd_param_info;
if (!param_buf) {
WMA_LOGE("Invalid start response event buffer");
@ -1028,7 +1043,7 @@ int wma_vdev_start_resp_handler(void *handle, uint8_t *cmd_param_info,
resp_event->cfgd_rx_streams;
wma->interfaces[resp_event->vdev_id].chain_mask =
resp_event->chain_mask;
if (wma->wlan_resource_config.use_pdev_id) {
if (wlan_res_cfg->use_pdev_id) {
if (resp_event->pdev_id == WMI_PDEV_ID_SOC) {
WMA_LOGE("%s: soc level id received for mac id",
__func__);
@ -1437,18 +1452,30 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma, struct cdp_pdev *pdev,
void *peer = NULL;
struct peer_create_params param = {0};
uint8_t *mac_addr_raw;
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
void *dp_soc = cds_get_context(QDF_MODULE_ID_SOC);
struct wlan_objmgr_psoc *psoc = wma->psoc;
target_resource_config *wlan_res_cfg;
if (!psoc) {
WMA_LOGE("%s: psoc is NULL", __func__);
return QDF_STATUS_E_INVAL;
}
wlan_res_cfg = ucfg_get_tgt_res_cfg(psoc);
if (!wlan_res_cfg) {
WMA_LOGE("%s: psoc target res cfg is null", __func__);
return QDF_STATUS_E_INVAL;
}
if (++wma->interfaces[vdev_id].peer_count >
wma->wlan_resource_config.num_peers) {
wlan_res_cfg->num_peers) {
WMA_LOGE("%s, the peer count exceeds the limit %d", __func__,
wma->interfaces[vdev_id].peer_count - 1);
goto err;
}
if (!soc) {
WMA_LOGE("%s:SOC context is NULL", __func__);
if (!dp_soc) {
WMA_LOGE("%s:DP SOC context is NULL", __func__);
goto err;
}
@ -1465,7 +1492,7 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma, struct cdp_pdev *pdev,
* where the HTT peer map event is received before the peer object
* is created in the data path
*/
peer = cdp_peer_create(soc, vdev, peer_addr);
peer = cdp_peer_create(dp_soc, vdev, peer_addr);
if (!peer) {
WMA_LOGE("%s : Unable to attach peer %pM", __func__, peer_addr);
goto err;
@ -1483,7 +1510,7 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma, struct cdp_pdev *pdev,
if (wmi_unified_peer_create_send(wma->wmi_handle,
&param) != QDF_STATUS_SUCCESS) {
WMA_LOGE("%s : Unable to create peer in Target", __func__);
cdp_peer_delete(soc, peer,
cdp_peer_delete(dp_soc, peer,
1 << CDP_PEER_DO_NOT_START_UNMAP_TIMER);
goto err;
}
@ -1494,12 +1521,12 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma, struct cdp_pdev *pdev,
wlan_roam_debug_log(vdev_id, DEBUG_PEER_CREATE_SEND,
DEBUG_INVALID_PEER_ID, peer_addr, peer, 0, 0);
cdp_peer_setup(soc, vdev, peer);
cdp_peer_setup(dp_soc, vdev, peer);
WMA_LOGD("%s: Initialized peer with peer_addr %pM vdev_id %d",
__func__, peer_addr, vdev_id);
mac_addr_raw = cdp_get_vdev_mac_addr(soc, vdev);
mac_addr_raw = cdp_get_vdev_mac_addr(dp_soc, vdev);
if (mac_addr_raw == NULL) {
WMA_LOGE("%s: peer mac addr is NULL", __func__);
return QDF_STATUS_E_FAULT;

View file

@ -224,92 +224,100 @@ static uint32_t wma_get_number_of_tids_supported(uint8_t no_of_peers_supported)
}
#endif
#ifdef PERE_IP_HDR_ALIGNMENT_WAR
static void wma_reset_rx_decap_mode(target_resource_config *tgt_cfg)
{
/*
* To make the IP header begins at dword aligned address,
* we make the decapsulation mode as Native Wifi.
*/
tgt_cfg->rx_decap_mode = CFG_TGT_RX_DECAP_MODE_NWIFI;
}
#else
static void wma_reset_rx_decap_mode(target_resource_config *tgt_cfg)
{
}
#endif
/**
* wma_set_default_tgt_config() - set default tgt config
* @wma_handle: wma handle
* @tgt_cfg: Resource config given to target
*
* Return: none
*/
static void wma_set_default_tgt_config(tp_wma_handle wma_handle)
static void wma_set_default_tgt_config(tp_wma_handle wma_handle,
target_resource_config *tgt_cfg)
{
uint8_t no_of_peers_supported;
target_resource_config tgt_cfg;
qdf_mem_zero(&tgt_cfg, sizeof(tgt_cfg));
tgt_cfg.num_vdevs = CFG_TGT_NUM_VDEV;
tgt_cfg.num_peers = CFG_TGT_NUM_PEERS + CFG_TGT_NUM_VDEV + 2;
tgt_cfg.num_offload_peers = CFG_TGT_NUM_OFFLOAD_PEERS;
tgt_cfg.num_offload_reorder_buffs = CFG_TGT_NUM_OFFLOAD_REORDER_BUFFS;
tgt_cfg.num_peer_keys = CFG_TGT_NUM_PEER_KEYS;
tgt_cfg.num_tids = CFG_TGT_NUM_TIDS;
tgt_cfg.ast_skid_limit = CFG_TGT_AST_SKID_LIMIT;
tgt_cfg.tx_chain_mask = CFG_TGT_DEFAULT_TX_CHAIN_MASK;
tgt_cfg.rx_chain_mask = CFG_TGT_DEFAULT_RX_CHAIN_MASK;
tgt_cfg.rx_timeout_pri[0] = CFG_TGT_RX_TIMEOUT_LO_PRI;
tgt_cfg.rx_timeout_pri[1] = CFG_TGT_RX_TIMEOUT_LO_PRI;
tgt_cfg.rx_timeout_pri[2] = CFG_TGT_RX_TIMEOUT_LO_PRI;
tgt_cfg.rx_timeout_pri[3] = CFG_TGT_RX_TIMEOUT_HI_PRI;
tgt_cfg.rx_decap_mode = CFG_TGT_RX_DECAP_MODE;
tgt_cfg.scan_max_pending_req = CFG_TGT_DEFAULT_SCAN_MAX_REQS;
tgt_cfg.bmiss_offload_max_vdev = CFG_TGT_DEFAULT_BMISS_OFFLOAD_MAX_VDEV;
tgt_cfg.roam_offload_max_vdev = CFG_TGT_DEFAULT_ROAM_OFFLOAD_MAX_VDEV;
tgt_cfg.roam_offload_max_ap_profiles =
qdf_mem_zero(tgt_cfg, sizeof(target_resource_config));
tgt_cfg->num_vdevs = CFG_TGT_NUM_VDEV;
tgt_cfg->num_peers = CFG_TGT_NUM_PEERS + CFG_TGT_NUM_VDEV + 2;
tgt_cfg->num_offload_peers = CFG_TGT_NUM_OFFLOAD_PEERS;
tgt_cfg->num_offload_reorder_buffs = CFG_TGT_NUM_OFFLOAD_REORDER_BUFFS;
tgt_cfg->num_peer_keys = CFG_TGT_NUM_PEER_KEYS;
tgt_cfg->num_tids = CFG_TGT_NUM_TIDS;
tgt_cfg->ast_skid_limit = CFG_TGT_AST_SKID_LIMIT;
tgt_cfg->tx_chain_mask = CFG_TGT_DEFAULT_TX_CHAIN_MASK;
tgt_cfg->rx_chain_mask = CFG_TGT_DEFAULT_RX_CHAIN_MASK;
tgt_cfg->rx_timeout_pri[0] = CFG_TGT_RX_TIMEOUT_LO_PRI;
tgt_cfg->rx_timeout_pri[1] = CFG_TGT_RX_TIMEOUT_LO_PRI;
tgt_cfg->rx_timeout_pri[2] = CFG_TGT_RX_TIMEOUT_LO_PRI;
tgt_cfg->rx_timeout_pri[3] = CFG_TGT_RX_TIMEOUT_HI_PRI;
tgt_cfg->rx_decap_mode = CFG_TGT_RX_DECAP_MODE;
tgt_cfg->scan_max_pending_req = CFG_TGT_DEFAULT_SCAN_MAX_REQS;
tgt_cfg->bmiss_offload_max_vdev =
CFG_TGT_DEFAULT_BMISS_OFFLOAD_MAX_VDEV;
tgt_cfg->roam_offload_max_vdev = CFG_TGT_DEFAULT_ROAM_OFFLOAD_MAX_VDEV;
tgt_cfg->roam_offload_max_ap_profiles =
CFG_TGT_DEFAULT_ROAM_OFFLOAD_MAX_PROFILES;
tgt_cfg.num_mcast_groups = CFG_TGT_DEFAULT_NUM_MCAST_GROUPS;
tgt_cfg.num_mcast_table_elems = CFG_TGT_DEFAULT_NUM_MCAST_TABLE_ELEMS;
tgt_cfg.mcast2ucast_mode = CFG_TGT_DEFAULT_MCAST2UCAST_MODE;
tgt_cfg.tx_dbg_log_size = CFG_TGT_DEFAULT_TX_DBG_LOG_SIZE;
tgt_cfg.num_wds_entries = CFG_TGT_WDS_ENTRIES;
tgt_cfg.dma_burst_size = CFG_TGT_DEFAULT_DMA_BURST_SIZE;
tgt_cfg.mac_aggr_delim = CFG_TGT_DEFAULT_MAC_AGGR_DELIM;
tgt_cfg.rx_skip_defrag_timeout_dup_detection_check =
tgt_cfg->num_mcast_groups = CFG_TGT_DEFAULT_NUM_MCAST_GROUPS;
tgt_cfg->num_mcast_table_elems = CFG_TGT_DEFAULT_NUM_MCAST_TABLE_ELEMS;
tgt_cfg->mcast2ucast_mode = CFG_TGT_DEFAULT_MCAST2UCAST_MODE;
tgt_cfg->tx_dbg_log_size = CFG_TGT_DEFAULT_TX_DBG_LOG_SIZE;
tgt_cfg->num_wds_entries = CFG_TGT_WDS_ENTRIES;
tgt_cfg->dma_burst_size = CFG_TGT_DEFAULT_DMA_BURST_SIZE;
tgt_cfg->mac_aggr_delim = CFG_TGT_DEFAULT_MAC_AGGR_DELIM;
tgt_cfg->rx_skip_defrag_timeout_dup_detection_check =
CFG_TGT_DEFAULT_RX_SKIP_DEFRAG_TIMEOUT_DUP_DETECTION_CHECK,
tgt_cfg.vow_config = CFG_TGT_DEFAULT_VOW_CONFIG;
tgt_cfg.gtk_offload_max_vdev = CFG_TGT_DEFAULT_GTK_OFFLOAD_MAX_VDEV;
tgt_cfg.num_msdu_desc = CFG_TGT_NUM_MSDU_DESC;
tgt_cfg.max_frag_entries = CFG_TGT_MAX_FRAG_TABLE_ENTRIES;
tgt_cfg.num_tdls_vdevs = CFG_TGT_NUM_TDLS_VDEVS;
tgt_cfg.num_tdls_conn_table_entries =
tgt_cfg->vow_config = CFG_TGT_DEFAULT_VOW_CONFIG;
tgt_cfg->gtk_offload_max_vdev = CFG_TGT_DEFAULT_GTK_OFFLOAD_MAX_VDEV;
tgt_cfg->num_msdu_desc = CFG_TGT_NUM_MSDU_DESC;
tgt_cfg->max_frag_entries = CFG_TGT_MAX_FRAG_TABLE_ENTRIES;
tgt_cfg->num_tdls_vdevs = CFG_TGT_NUM_TDLS_VDEVS;
tgt_cfg->num_tdls_conn_table_entries =
CFG_TGT_NUM_TDLS_CONN_TABLE_ENTRIES;
tgt_cfg.beacon_tx_offload_max_vdev =
tgt_cfg->beacon_tx_offload_max_vdev =
CFG_TGT_DEFAULT_BEACON_TX_OFFLOAD_MAX_VDEV;
tgt_cfg.num_multicast_filter_entries =
tgt_cfg->num_multicast_filter_entries =
CFG_TGT_MAX_MULTICAST_FILTER_ENTRIES;
tgt_cfg.num_wow_filters = 0;
tgt_cfg.num_keep_alive_pattern = 0;
tgt_cfg.keep_alive_pattern_size = 0;
tgt_cfg.max_tdls_concurrent_sleep_sta =
tgt_cfg->num_wow_filters = 0;
tgt_cfg->num_keep_alive_pattern = 0;
tgt_cfg->keep_alive_pattern_size = 0;
tgt_cfg->max_tdls_concurrent_sleep_sta =
CFG_TGT_NUM_TDLS_CONC_SLEEP_STAS;
tgt_cfg.max_tdls_concurrent_buffer_sta =
tgt_cfg->max_tdls_concurrent_buffer_sta =
CFG_TGT_NUM_TDLS_CONC_BUFFER_STAS;
tgt_cfg.wmi_send_separate = 0;
tgt_cfg.num_ocb_vdevs = CFG_TGT_NUM_OCB_VDEVS;
tgt_cfg.num_ocb_channels = CFG_TGT_NUM_OCB_CHANNELS;
tgt_cfg.num_ocb_schedules = CFG_TGT_NUM_OCB_SCHEDULES;
tgt_cfg->wmi_send_separate = 0;
tgt_cfg->num_ocb_vdevs = CFG_TGT_NUM_OCB_VDEVS;
tgt_cfg->num_ocb_channels = CFG_TGT_NUM_OCB_CHANNELS;
tgt_cfg->num_ocb_schedules = CFG_TGT_NUM_OCB_SCHEDULES;
no_of_peers_supported = wma_get_number_of_peers_supported(wma_handle);
tgt_cfg.num_peers = no_of_peers_supported + CFG_TGT_NUM_VDEV + 2;
tgt_cfg.num_tids = wma_get_number_of_tids_supported(
no_of_peers_supported);
tgt_cfg.scan_max_pending_req = wma_handle->max_scan;
tgt_cfg->num_peers = no_of_peers_supported + CFG_TGT_NUM_VDEV + 2;
tgt_cfg->num_tids = wma_get_number_of_tids_supported(
no_of_peers_supported);
tgt_cfg->scan_max_pending_req = wma_handle->max_scan;
tgt_cfg.mgmt_comp_evt_bundle_support = true;
tgt_cfg.tx_msdu_new_partition_id_support = true;
tgt_cfg->mgmt_comp_evt_bundle_support = true;
tgt_cfg->tx_msdu_new_partition_id_support = true;
/* reduce the peer/vdev if CFG_TGT_NUM_MSDU_DESC exceeds 1000 */
#ifdef PERE_IP_HDR_ALIGNMENT_WAR
if (scn->host_80211_enable) {
/*
* To make the IP header begins at dword aligned address,
* we make the decapsulation mode as Native Wifi.
*/
tgt_cfg.rx_decap_mode = CFG_TGT_RX_DECAP_MODE_NWIFI;
}
#endif /* PERE_IP_HDR_ALIGNMENT_WAR */
if (QDF_GLOBAL_MONITOR_MODE == cds_get_conparam())
tgt_cfg.rx_decap_mode = CFG_TGT_RX_DECAP_MODE_RAW;
wma_reset_rx_decap_mode(tgt_cfg);
wma_handle->wlan_resource_config = tgt_cfg;
if (cds_get_conparam() == QDF_GLOBAL_MONITOR_MODE)
tgt_cfg->rx_decap_mode = CFG_TGT_RX_DECAP_MODE_RAW;
}
/**
@ -2774,6 +2782,7 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
bool use_cookie = false;
int i;
void *cds_context;
target_resource_config *wlan_res_cfg;
WMA_LOGD("%s: Enter", __func__);
@ -2886,7 +2895,9 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
wma_init_max_no_of_peers(wma_handle, cds_cfg->max_station);
/* initialize default target config */
wma_set_default_tgt_config(wma_handle);
wlan_res_cfg = target_psoc_get_wlan_res_cfg(tgt_psoc_info);
wma_set_default_tgt_config(wma_handle, wlan_res_cfg);
wma_handle->tx_chain_mask_cck = cds_cfg->tx_chain_mask_cck;
wma_handle->self_gen_frm_pwr = cds_cfg->self_gen_frm_pwr;
@ -2895,18 +2906,16 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
cds_cfg->max_bssid = WMA_MAX_SUPPORTED_BSS;
wma_handle->wlan_resource_config.num_wow_filters =
cds_cfg->max_wow_filters;
wma_handle->wlan_resource_config.num_keep_alive_pattern =
WMA_MAXNUM_PERIODIC_TX_PTRNS;
wlan_res_cfg->num_wow_filters = cds_cfg->max_wow_filters;
wlan_res_cfg->num_keep_alive_pattern = WMA_MAXNUM_PERIODIC_TX_PTRNS;
/* The current firmware implementation requires the number of
* offload peers should be (number of vdevs + 1).
*/
wma_handle->wlan_resource_config.num_offload_peers =
wlan_res_cfg->num_offload_peers =
cds_cfg->ap_maxoffload_peers + 1;
wma_handle->wlan_resource_config.num_offload_reorder_buffs =
wlan_res_cfg->num_offload_reorder_buffs =
cds_cfg->ap_maxoffload_reorderbuffs + 1;
wma_handle->ol_ini_info = cds_cfg->ol_ini_info;
@ -5072,6 +5081,18 @@ static void wma_update_hdd_cfg(tp_wma_handle wma_handle)
{
struct wma_tgt_cfg tgt_cfg;
void *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
target_resource_config *wlan_res_cfg;
struct target_psoc_info *tgt_hdl;
WMA_LOGD("%s: Enter", __func__);
tgt_hdl = wlan_psoc_get_tgt_if_handle(wma_handle->psoc);
if (!tgt_hdl) {
WMA_LOGE("%s: target psoc info is NULL", __func__);
return;
}
wlan_res_cfg = target_psoc_get_wlan_res_cfg(tgt_hdl);
qdf_mem_zero(&tgt_cfg, sizeof(struct wma_tgt_cfg));
@ -5079,7 +5100,7 @@ static void wma_update_hdd_cfg(tp_wma_handle wma_handle)
tgt_cfg.reg_domain = wma_handle->reg_cap.eeprom_rd;
tgt_cfg.eeprom_rd_ext = wma_handle->reg_cap.eeprom_rd_ext;
tgt_cfg.max_intf_count = wma_handle->wlan_resource_config.num_vdevs;
tgt_cfg.max_intf_count = wlan_res_cfg->num_vdevs;
qdf_mem_copy(tgt_cfg.hw_macaddr.bytes, wma_handle->hwaddr,
ATH_MAC_LEN);
@ -5219,15 +5240,20 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info,
QDF_STATUS ret;
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
struct target_psoc_info *tgt_hdl;
struct wlan_psoc_target_capability_info *tgt_cap_info;
target_resource_config *wlan_res_cfg;
WMA_LOGD("%s: Enter", __func__);
tgt_hdl = wlan_psoc_get_tgt_if_handle(wma_handle->psoc);
if (!tgt_hdl) {
WMA_LOGE("%s: target psoc info is NULL", __func__);
return QDF_STATUS_E_INVAL;
return -EINVAL;
}
wlan_res_cfg = target_psoc_get_wlan_res_cfg(tgt_hdl);
tgt_cap_info = target_psoc_get_target_caps(tgt_hdl);
param_buf = (WMI_SERVICE_READY_EVENTID_param_tlvs *) cmd_param_info;
if (!(handle && param_buf)) {
WMA_LOGE("%s: Invalid arguments", __func__);
@ -5258,10 +5284,13 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info,
WMA_LOGE("%s: Memory allocation failed for DBS", __func__);
/* Continuing with the rest of the processing */
}
qdf_mem_copy(wma_handle->hw_mode.hw_mode_list,
ev_wlan_dbs_hw_mode_list,
(sizeof(*wma_handle->hw_mode.hw_mode_list) *
wma_handle->num_dbs_hw_modes));
if (wma_handle->hw_mode.hw_mode_list)
qdf_mem_copy(wma_handle->hw_mode.hw_mode_list,
ev_wlan_dbs_hw_mode_list,
(sizeof(*wma_handle->hw_mode.hw_mode_list) *
wma_handle->num_dbs_hw_modes));
policy_mgr_init_dbs_hw_mode(wma_handle->psoc,
ev->num_dbs_hw_modes, ev_wlan_dbs_hw_mode_list);
wma_dump_dbs_hw_mode(wma_handle);
@ -5274,27 +5303,30 @@ 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->phy_capability = ev->phy_capability;
wma_handle->max_frag_entry = ev->max_frag_entry;
wma_handle->num_rf_chains = ev->num_rf_chains;
wma_handle->phy_capability = tgt_cap_info->phy_capability;
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));
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 = ev->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,
ev->default_dbs_hw_mode_index);
wma_handle->fine_time_measurement_cap = ev->wmi_fw_sub_feat_caps;
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__, ev->default_dbs_hw_mode_index);
__func__, tgt_cap_info->default_dbs_hw_mode_index);
WMA_LOGI("%s: Firmware build version : %08x",
__func__, ev->fw_build_vers);
WMA_LOGD("FW fine time meas cap: 0x%x", ev->wmi_fw_sub_feat_caps);
WMA_LOGD("FW fine time meas cap: 0x%x",
tgt_cap_info->wmi_fw_sub_feat_caps);
if (ev->hw_bd_id) {
wma_handle->hw_bd_id = ev->hw_bd_id;
@ -5316,7 +5348,7 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info,
/* wmi service is ready */
qdf_mem_copy(wma_handle->wmi_service_bitmap,
param_buf->wmi_service_bitmap,
tgt_hdl->info.service_bitmap,
sizeof(wma_handle->wmi_service_bitmap));
cdp_cfg_tx_set_is_mgmt_over_wmi_enabled(soc,
@ -5330,7 +5362,7 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info,
WMA_RX_SERIALIZER_CTX);
if (status) {
WMA_LOGE("Failed to register swba beacon event cb");
return -EINVAL;
goto free_hw_mode_list;
}
#ifdef WLAN_FEATURE_LPSS
wma_handle->lpss_support =
@ -5360,7 +5392,7 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info,
WMA_RX_SERIALIZER_CTX);
if (status) {
WMA_LOGE("Failed to register CSA offload event cb");
return -EINVAL;
goto free_hw_mode_list;
}
}
@ -5378,7 +5410,7 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info,
WMA_RX_SERIALIZER_CTX);
if (status) {
WMA_LOGE("Failed to register MGMT over WMI completion handler");
return -EINVAL;
goto free_hw_mode_list;
}
status = wmi_unified_register_event_handler(
@ -5388,7 +5420,7 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info,
WMA_RX_SERIALIZER_CTX);
if (status) {
WMA_LOGE("Failed to register MGMT over WMI completion handler");
return -EINVAL;
goto free_hw_mode_list;
}
} else {
@ -5405,7 +5437,7 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info,
WMA_RX_WORK_CTX);
if (status) {
WMA_LOGE("Failed to register GTK offload event cb");
return -EINVAL;
goto free_hw_mode_list;
}
}
#endif /* WLAN_FEATURE_GTK_OFFLOAD */
@ -5416,7 +5448,7 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info,
WMA_RX_SERIALIZER_CTX);
if (status) {
WMA_LOGE("Failed to register WMI_TBTTOFFSET_UPDATE_EVENTID callback");
return -EINVAL;
goto free_hw_mode_list;
}
if (wmi_service_enabled(wma_handle->wmi_handle,
@ -5429,7 +5461,7 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info,
WMA_RX_SERIALIZER_CTX);
if (status) {
WMA_LOGE("Failed to register RCPI event handler");
return -EINVAL;
goto free_hw_mode_list;
}
wma_handle->rcpi_enabled = true;
}
@ -5444,12 +5476,11 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info,
*/
if (wmi_service_enabled(wma_handle->wmi_handle,
wmi_service_deprecated_replace))
wma_handle->wlan_resource_config.use_pdev_id = true;
wlan_res_cfg->use_pdev_id = true;
else
wma_handle->wlan_resource_config.use_pdev_id = false;
wlan_res_cfg->use_pdev_id = false;
wma_handle->wlan_resource_config.max_num_dbs_scan_duty_cycle =
CDS_DBS_SCAN_CLIENTS_MAX;
wlan_res_cfg->max_num_dbs_scan_duty_cycle = CDS_DBS_SCAN_CLIENTS_MAX;
/* register the Enhanced Green AP event handler */
wma_register_egap_event_handle(wma_handle);
@ -5461,7 +5492,7 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info,
WMA_RX_SERIALIZER_CTX);
if (status != QDF_STATUS_SUCCESS) {
WMA_LOGE("Failed to register log supported event cb");
return -EINVAL;
goto free_hw_mode_list;
}
cdp_mark_first_wakeup_packet(soc,
@ -5474,20 +5505,19 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info,
wmi_service_enabled(wma_handle->wmi_handle,
wmi_service_nan_data);
qdf_mem_copy(target_cap.wmi_service_bitmap,
param_buf->wmi_service_bitmap,
tgt_hdl->info.service_bitmap,
sizeof(wma_handle->wmi_service_bitmap));
target_cap.wlan_resource_config = wma_handle->wlan_resource_config;
target_cap.wlan_resource_config = tgt_hdl->info.wlan_res_cfg;
wma_update_fw_config(wma_handle, &target_cap);
qdf_mem_copy(wma_handle->wmi_service_bitmap,
target_cap.wmi_service_bitmap,
sizeof(wma_handle->wmi_service_bitmap));
wma_handle->wlan_resource_config = target_cap.wlan_resource_config;
status = wmi_unified_save_fw_version_cmd(wma_handle->wmi_handle,
param_buf);
if (status != EOK) {
WMA_LOGE("Failed to send WMI_INIT_CMDID command");
return -EINVAL;
goto free_hw_mode_list;
}
ret = qdf_mc_timer_start(&wma_handle->service_ready_ext_timer,
@ -5504,6 +5534,16 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info,
target_psoc_set_num_radios(tgt_hdl, 1);
return 0;
free_hw_mode_list:
if (wma_handle->hw_mode.hw_mode_list) {
qdf_mem_free(wma_handle->hw_mode.hw_mode_list);
wma_handle->hw_mode.hw_mode_list = NULL;
WMA_LOGD("%s: DBS list is freed", __func__);
}
return -EINVAL;
}
/**