mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 07:03:09 -04:00
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:
parent
a6305a33b6
commit
cfde2719f5
3 changed files with 182 additions and 117 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
¶m) != 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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue