diff options
| -rw-r--r-- | core/utils/fwlog/dbglog_host.c | 84 | ||||
| -rw-r--r-- | core/wma/inc/wma.h | 23 | ||||
| -rw-r--r-- | core/wma/inc/wma_api.h | 15 | ||||
| -rw-r--r-- | core/wma/inc/wma_internal.h | 37 | ||||
| -rw-r--r-- | core/wma/src/wma_data.c | 26 | ||||
| -rw-r--r-- | core/wma/src/wma_dev_if.c | 579 | ||||
| -rw-r--r-- | core/wma/src/wma_features.c | 186 | ||||
| -rw-r--r-- | core/wma/src/wma_main.c | 424 | ||||
| -rw-r--r-- | core/wma/src/wma_mgmt.c | 79 | ||||
| -rw-r--r-- | core/wma/src/wma_ocb.c | 15 | ||||
| -rw-r--r-- | core/wma/src/wma_power.c | 376 | ||||
| -rw-r--r-- | core/wma/src/wma_scan_roam.c | 69 | ||||
| -rw-r--r-- | core/wma/src/wma_utils.c | 189 |
13 files changed, 809 insertions, 1293 deletions
diff --git a/core/utils/fwlog/dbglog_host.c b/core/utils/fwlog/dbglog_host.c index 977d0517e3a2..b233dc8f5d4a 100644 --- a/core/utils/fwlog/dbglog_host.c +++ b/core/utils/fwlog/dbglog_host.c @@ -79,11 +79,6 @@ module_dbg_print mod_print[WLAN_MODULE_ID_MAX]; A_UINT32 dbglog_process_type = DBGLOG_PROCESS_NET_RAW; -A_STATUS -wmi_config_debug_module_cmd(wmi_unified_t wmi_handle, A_UINT32 param, - A_UINT32 val, A_UINT32 *module_id_bitmap, - A_UINT32 bitmap_len); - const char *dbglog_get_module_str(A_UINT32 module_id) { switch (module_id) { @@ -1284,7 +1279,7 @@ int dbglog_module_log_enable(wmi_unified_t wmi_handle, A_UINT32 mod_id, /* set it to ERROR level */ WMI_DBGLOG_SET_LOG_LEVEL(val, DBGLOG_ERR); } - wmi_config_debug_module_cmd(wmi_handle, WMI_DEBUG_LOG_PARAM_LOG_LEVEL, + wma_config_debug_module_cmd(wmi_handle, WMI_DEBUG_LOG_PARAM_LOG_LEVEL, val, NULL, 0); return 0; @@ -1300,7 +1295,7 @@ int dbglog_vap_log_enable(wmi_unified_t wmi_handle, A_UINT16 vap_id, return -EINVAL; } - wmi_config_debug_module_cmd(wmi_handle, + wma_config_debug_module_cmd(wmi_handle, isenable ? WMI_DEBUG_LOG_PARAM_VDEV_ENABLE : WMI_DEBUG_LOG_PARAM_VDEV_DISABLE, vap_id, NULL, 0); @@ -1321,7 +1316,7 @@ int dbglog_set_log_lvl(wmi_unified_t wmi_handle, DBGLOG_LOG_LVL log_lvl) WMI_DBGLOG_SET_MODULE_ID(val, WMI_DEBUG_LOG_MODULE_ALL); WMI_DBGLOG_SET_LOG_LEVEL(val, log_lvl); - wmi_config_debug_module_cmd(wmi_handle, WMI_DEBUG_LOG_PARAM_LOG_LEVEL, + wma_config_debug_module_cmd(wmi_handle, WMI_DEBUG_LOG_PARAM_LOG_LEVEL, val, NULL, 0); return 0; @@ -1333,75 +1328,17 @@ int dbglog_set_mod_log_lvl(wmi_unified_t wmi_handle, A_UINT32 mod_log_lvl) /* set the global module level to log_lvl */ WMI_DBGLOG_SET_MODULE_ID(val, (mod_log_lvl / 10)); WMI_DBGLOG_SET_LOG_LEVEL(val, (mod_log_lvl % 10)); - wmi_config_debug_module_cmd(wmi_handle, WMI_DEBUG_LOG_PARAM_LOG_LEVEL, + wma_config_debug_module_cmd(wmi_handle, WMI_DEBUG_LOG_PARAM_LOG_LEVEL, val, NULL, 0); return 0; } -A_STATUS -wmi_config_debug_module_cmd(wmi_unified_t wmi_handle, A_UINT32 param, - A_UINT32 val, A_UINT32 *module_id_bitmap, - A_UINT32 bitmap_len) -{ - wmi_buf_t buf; - wmi_debug_log_config_cmd_fixed_param *configmsg; - A_STATUS status = A_OK; - int i; - int len; - int8_t *buf_ptr; - int32_t *module_id_bitmap_array; /* Used to fomr the second tlv */ - - ASSERT(bitmap_len < MAX_MODULE_ID_BITMAP_WORDS); - - /* Allocate size for 2 tlvs - including tlv hdr space for second tlv */ - len = sizeof(wmi_debug_log_config_cmd_fixed_param) + WMI_TLV_HDR_SIZE + - (sizeof(int32_t) * MAX_MODULE_ID_BITMAP_WORDS); - buf = wmi_buf_alloc(wmi_handle, len); - if (buf == NULL) - return A_NO_MEMORY; - - configmsg = - (wmi_debug_log_config_cmd_fixed_param *) (wmi_buf_data(buf)); - buf_ptr = (int8_t *) configmsg; - WMITLV_SET_HDR(&configmsg->tlv_header, - WMITLV_TAG_STRUC_wmi_debug_log_config_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (wmi_debug_log_config_cmd_fixed_param)); - configmsg->dbg_log_param = param; - configmsg->value = val; - /* Filling in the data part of second tlv -- should follow first tlv _ WMI_TLV_HDR_SIZE */ - module_id_bitmap_array = (A_UINT32 *) (buf_ptr + - sizeof - (wmi_debug_log_config_cmd_fixed_param) - + WMI_TLV_HDR_SIZE); - WMITLV_SET_HDR(buf_ptr + sizeof(wmi_debug_log_config_cmd_fixed_param), - WMITLV_TAG_ARRAY_UINT32, - sizeof(A_UINT32) * MAX_MODULE_ID_BITMAP_WORDS); - if (module_id_bitmap) { - for (i = 0; i < bitmap_len; ++i) { - module_id_bitmap_array[i] = module_id_bitmap[i]; - } - } - - AR_DEBUG_PRINTF(ATH_DEBUG_ERR, - ("wmi_dbg_cfg_send: param 0x%x val 0x%x \n ", param, - val)); - - status = wmi_unified_cmd_send(wmi_handle, buf, - len, WMI_DBGLOG_CFG_CMDID); - - if (status != A_OK) - qdf_nbuf_free(buf); - - return status; -} - void dbglog_set_vap_enable_bitmap(wmi_unified_t wmi_handle, A_UINT32 vap_enable_bitmap) { - wmi_config_debug_module_cmd(wmi_handle, + wma_config_debug_module_cmd(wmi_handle, WMI_DEBUG_LOG_PARAM_VDEV_ENABLE_BITMAP, vap_enable_bitmap, NULL, 0); } @@ -1410,7 +1347,7 @@ void dbglog_set_mod_enable_bitmap(wmi_unified_t wmi_handle, A_UINT32 log_level, A_UINT32 *mod_enable_bitmap, A_UINT32 bitmap_len) { - wmi_config_debug_module_cmd(wmi_handle, + wma_config_debug_module_cmd(wmi_handle, WMI_DEBUG_LOG_PARAM_MOD_ENABLE_BITMAP, log_level, mod_enable_bitmap, bitmap_len); } @@ -4408,20 +4345,23 @@ int dbglog_init(wmi_unified_t wmi_handle) res = wmi_unified_register_event_handler(wmi_handle, WMI_DEBUG_MESG_EVENTID, - dbglog_parse_debug_logs); + dbglog_parse_debug_logs, + WMA_RX_WORK_CTX); if (res != 0) return res; /* Register handler for FW diag events */ res = wmi_unified_register_event_handler(wmi_handle, WMI_DIAG_DATA_CONTAINER_EVENTID, - fw_diag_data_event_handler); + fw_diag_data_event_handler, + WMA_RX_SERIALIZER_CTX); if (res != 0) return res; /* Register handler for new FW diag Event, LOG, MSG combined */ res = wmi_unified_register_event_handler(wmi_handle, WMI_DIAG_EVENTID, - diag_fw_handler); + diag_fw_handler, + WMA_RX_SERIALIZER_CTX); if (res != 0) return res; diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index 7f25d757fa0d..a83c1947be6f 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -114,6 +114,7 @@ #define ALIGNED_WORD_SIZE 4 #define WLAN_HAL_MSG_TYPE_MAX_ENUM_SIZE 0x7FFF +#define WMA_WILDCARD_PDEV_ID 0x0 /* Prefix used by scan req ids generated on the host */ #define WMA_HOST_SCAN_REQID_PREFIX 0xA000 @@ -453,6 +454,18 @@ enum wma_tdls_peer_reason { #endif /* FEATURE_WLAN_TDLS */ /** + * enum wma_rx_exec_ctx - wma rx execution context + * @WMA_RX_WORK_CTX: work queue context execution + * @WMA_RX_TASKLET_CTX: tasklet context execution + * @WMA_RX_SERIALIZER_CTX: MC thread context execution + * + */ +enum wma_rx_exec_ctx { + WMA_RX_WORK_CTX, + WMA_RX_TASKLET_CTX, + WMA_RX_SERIALIZER_CTX +}; +/** * struct wma_mem_chunk - memory chunks * @vaddr: virtual address * @paddr: physical address @@ -1916,8 +1929,7 @@ typedef struct { void *evt_buf; } wma_process_fw_event_params; -int wma_process_fw_event_handler(struct wmi_unified *wmi_handle, - wmi_buf_t evt_buf); +int wma_process_fw_event_handler(void *ctx, void *ev, uint8_t rx_ctx); A_UINT32 e_csr_auth_type_to_rsn_authmode(eCsrAuthType authtype, eCsrEncryptionType encr); @@ -1971,7 +1983,7 @@ QDF_STATUS wma_get_scan_id(uint32_t *scan_id); QDF_STATUS wma_send_soc_set_dual_mac_config(tp_wma_handle wma_handle, struct sir_dual_mac_config *msg); -int wma_crash_inject(tp_wma_handle wma_handle, uint32_t type, +QDF_STATUS wma_crash_inject(tp_wma_handle wma_handle, uint32_t type, uint32_t delay_time_ms); struct wma_target_req *wma_fill_vdev_req(tp_wma_handle wma, @@ -1997,7 +2009,10 @@ int wma_mgmt_tx_completion_handler(void *handle, uint8_t *cmpl_event_params, uint32_t len); void wma_set_dfs_region(tp_wma_handle wma, uint8_t dfs_region); uint32_t wma_get_vht_ch_width(void); - +QDF_STATUS +wma_config_debug_module_cmd(wmi_unified_t wmi_handle, A_UINT32 param, + A_UINT32 val, A_UINT32 *module_id_bitmap, + A_UINT32 bitmap_len); #ifdef FEATURE_LFR_SUBNET_DETECTION QDF_STATUS wma_set_gateway_params(tp_wma_handle wma, struct gateway_param_update_req *req); diff --git a/core/wma/inc/wma_api.h b/core/wma/inc/wma_api.h index 164ec4d5f52e..f97eb1b6b6b1 100644 --- a/core/wma/inc/wma_api.h +++ b/core/wma/inc/wma_api.h @@ -92,11 +92,11 @@ QDF_STATUS wma_wmi_service_close(void *cds_context); QDF_STATUS wma_wmi_work_close(void *cds_context); -void wma_rx_ready_event(WMA_HANDLE handle, void *ev); +int wma_rx_ready_event(void *handle, uint8_t *ev, uint32_t len); -void wma_rx_service_ready_event(WMA_HANDLE handle, void *ev); +int wma_rx_service_ready_event(void *handle, uint8_t *ev, uint32_t len); -void wma_rx_service_ready_ext_event(WMA_HANDLE handle, void *ev); +int wma_rx_service_ready_ext_event(void *handle, uint8_t *ev, uint32_t len); void wma_setneedshutdown(void *cds_context); @@ -120,10 +120,10 @@ QDF_STATUS wma_get_wcnss_software_version(void *p_cds_gctx, int wma_runtime_suspend(void); int wma_runtime_resume(void); int wma_bus_suspend(void); -int wma_suspend_target(WMA_HANDLE handle, int disable_target_intr); +QDF_STATUS wma_suspend_target(WMA_HANDLE handle, int disable_target_intr); void wma_target_suspend_acknowledge(void *context); int wma_bus_resume(void); -int wma_resume_target(WMA_HANDLE handle); +QDF_STATUS wma_resume_target(WMA_HANDLE handle); QDF_STATUS wma_disable_wow_in_fw(WMA_HANDLE handle); QDF_STATUS wma_disable_d0wow_in_fw(WMA_HANDLE handle); bool wma_is_wow_mode_selected(WMA_HANDLE handle); @@ -131,8 +131,9 @@ QDF_STATUS wma_enable_wow_in_fw(WMA_HANDLE handle); QDF_STATUS wma_enable_d0wow_in_fw(WMA_HANDLE handle); bool wma_check_scan_in_progress(WMA_HANDLE handle); void wma_set_peer_authorized_cb(void *wma_ctx, wma_peer_authorized_fp auth_cb); -int wma_set_peer_param(void *wma_ctx, uint8_t *peer_addr, uint32_t param_id, - uint32_t param_value, uint32_t vdev_id); +QDF_STATUS wma_set_peer_param(void *wma_ctx, uint8_t *peer_addr, + uint32_t param_id, + uint32_t param_value, uint32_t vdev_id); #ifdef NOT_YET QDF_STATUS wma_update_channel_list(WMA_HANDLE handle, void *scan_chan_info); #endif diff --git a/core/wma/inc/wma_internal.h b/core/wma/inc/wma_internal.h index 1e563b0e4935..82a777e90f1b 100644 --- a/core/wma/inc/wma_internal.h +++ b/core/wma/inc/wma_internal.h @@ -532,10 +532,6 @@ static inline uint8_t *wma_find_bssid_by_vdev_id(tp_wma_handle wma, void *wma_find_vdev_by_bssid(tp_wma_handle wma, uint8_t *bssid, uint8_t *vdev_id); -int wma_unified_vdev_create_send(wmi_unified_t wmi_handle, uint8_t if_id, - uint32_t type, uint32_t subtype, - uint8_t macaddr[IEEE80211_ADDR_LEN]); - QDF_STATUS wma_vdev_detach(tp_wma_handle wma_handle, struct del_sta_self_params *pdel_sta_self_req_param, uint8_t generateRsp); @@ -543,15 +539,9 @@ QDF_STATUS wma_vdev_detach(tp_wma_handle wma_handle, int wma_vdev_start_resp_handler(void *handle, uint8_t *cmd_param_info, uint32_t len); -int wmi_unified_vdev_set_param_send(wmi_unified_t wmi_handle, uint32_t if_id, +QDF_STATUS wma_vdev_set_param(wmi_unified_t wmi_handle, uint32_t if_id, uint32_t param_id, uint32_t param_value); -int32_t wmi_unified_peer_flush_tids_send(wmi_unified_t wmi, - uint8_t peer_addr - [IEEE80211_ADDR_LEN], - uint32_t peer_tid_bitmap, - uint8_t vdev_id); - void wma_remove_peer(tp_wma_handle wma, uint8_t *bssid, uint8_t vdev_id, ol_txrx_peer_handle peer, bool roam_synch_in_progress); @@ -590,16 +580,10 @@ void wma_remove_vdev_req(tp_wma_handle wma, uint8_t vdev_id, void wma_add_bss(tp_wma_handle wma, tpAddBssParams params); -int wmi_unified_vdev_up_send(wmi_unified_t wmi, - uint8_t vdev_id, uint16_t aid, - uint8_t bssid[IEEE80211_ADDR_LEN]); - void wma_add_sta(tp_wma_handle wma, tpAddStaParams add_sta); void wma_delete_sta(tp_wma_handle wma, tpDeleteStaParams del_sta); -int32_t wmi_unified_vdev_stop_send(wmi_unified_t wmi, uint8_t vdev_id); - void wma_delete_bss(tp_wma_handle wma, tpDeleteBssParams params); int32_t wma_find_vdev_by_type(tp_wma_handle wma, int32_t type); @@ -693,14 +677,14 @@ void wma_hidden_ssid_vdev_restart(tp_wma_handle wma_handle, void wma_enable_sta_ps_mode(tp_wma_handle wma, tpEnablePsParams ps_req); -int32_t wmi_unified_set_sta_ps_param(wmi_unified_t wmi_handle, +QDF_STATUS wma_unified_set_sta_ps_param(wmi_unified_t wmi_handle, uint32_t vdev_id, uint32_t param, uint32_t value); QDF_STATUS wma_set_ibss_pwrsave_params(tp_wma_handle wma, uint8_t vdev_id); -int32_t wma_set_ap_peer_uapsd(tp_wma_handle wma, uint32_t vdev_id, +QDF_STATUS wma_set_ap_peer_uapsd(tp_wma_handle wma, uint32_t vdev_id, uint8_t *peer_addr, uint8_t uapsd_value, uint8_t max_sp); @@ -713,9 +697,6 @@ void wma_set_tx_power(WMA_HANDLE handle, void wma_set_max_tx_power(WMA_HANDLE handle, tMaxTxPowerParams *tx_pwr_params); -int32_t wmi_unified_set_sta_ps(wmi_unified_t wmi_handle, - uint32_t vdev_id, uint8_t val); - void wma_disable_sta_ps_mode(tp_wma_handle wma, tpDisablePsParams ps_req); void wma_enable_uapsd_mode(tp_wma_handle wma, tpEnableUapsdParams ps_req); @@ -880,9 +861,6 @@ int32_t wma_txrx_fw_stats_reset(tp_wma_handle wma_handle, int32_t wma_set_txrx_fw_stats_level(tp_wma_handle wma_handle, uint8_t vdev_id, uint32_t value); -int wmi_crash_inject(wmi_unified_t wmi_handle, uint32_t type, - uint32_t delay_time_ms); - void wma_get_stats_req(WMA_HANDLE handle, tAniGetPEStatsReq *get_stats_param); @@ -917,11 +895,6 @@ WLAN_PHY_MODE wma_chan_to_mode(u8 chan, phy_ch_width chan_width, QDF_STATUS wma_get_link_speed(WMA_HANDLE handle, tSirLinkSpeedInfo *pLinkSpeed); -#ifdef FEATURE_GREEN_AP -int32_t wmi_unified_pdev_green_ap_ps_enable_cmd(wmi_unified_t wmi_handle, - uint32_t value); -#endif - int wma_profile_data_report_event_handler(void *handle, uint8_t *event_buf, uint32_t len); @@ -932,7 +905,7 @@ void wma_wow_tx_complete(void *wma); int wmi_unified_nat_keepalive_enable(tp_wma_handle wma, uint8_t vdev_id); -int wmi_unified_csa_offload_enable(tp_wma_handle wma, uint8_t vdev_id); +int wma_unified_csa_offload_enable(tp_wma_handle wma, uint8_t vdev_id); #ifdef WLAN_FEATURE_NAN int wma_nan_rsp_event_handler(void *handle, uint8_t *event_buf, uint32_t len); @@ -1104,7 +1077,7 @@ QDF_STATUS wma_process_ch_avoid_update_req(tp_wma_handle wma_handle, ch_avoid_update_req); #endif -int wma_suspend_target(WMA_HANDLE handle, int disable_target_intr); +QDF_STATUS wma_suspend_target(WMA_HANDLE handle, int disable_target_intr); #ifdef FEATURE_WLAN_TDLS diff --git a/core/wma/src/wma_data.c b/core/wma/src/wma_data.c index 889c3724e712..12f52ccc0d29 100644 --- a/core/wma/src/wma_data.c +++ b/core/wma/src/wma_data.c @@ -788,7 +788,7 @@ int32_t wmi_unified_send_txbf(tp_wma_handle wma, tpAddStaParams params) WMA_LOGD("txbf_en.sutxbfee %d txbf_en.mutxbfee %d, sutxbfer %d", txbf_en.sutxbfee, txbf_en.mutxbfee, txbf_en.sutxbfer); - return wmi_unified_vdev_set_param_send(wma->wmi_handle, + return wma_vdev_set_param(wma->wmi_handle, params->smesessionId, WMI_VDEV_PARAM_TXBF, *((A_UINT8 *) &txbf_en)); @@ -1403,6 +1403,7 @@ QDF_STATUS wma_process_rate_update_indicate(tp_wma_handle wma, uint8_t rate = 0; uint32_t short_gi; struct wma_txrx_node *intr = wma->interfaces; + QDF_STATUS status; /* Get the vdev id */ pdev = wma_find_vdev_by_addr(wma, pRateUpdateParams->bssid.bytes, @@ -1449,20 +1450,20 @@ QDF_STATUS wma_process_rate_update_indicate(tp_wma_handle wma, qdf_mem_free(pRateUpdateParams); return ret; } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + status = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_SGI, short_gi); - if (ret) { - WMA_LOGE("%s: Failed to Set WMI_VDEV_PARAM_SGI (%d), ret = %d", - __func__, short_gi, ret); + if (QDF_IS_STATUS_ERROR(status)) { + WMA_LOGE("%s: Failed to Set WMI_VDEV_PARAM_SGI (%d), status = %d", + __func__, short_gi, status); qdf_mem_free(pRateUpdateParams); - return QDF_STATUS_E_FAILURE; + return status; } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, + status = wma_vdev_set_param(wma->wmi_handle, vdev_id, paramId, rate); qdf_mem_free(pRateUpdateParams); - if (ret) { - WMA_LOGE("%s: Failed to Set rate, ret = %d", __func__, ret); - return QDF_STATUS_E_FAILURE; + if (QDF_IS_STATUS_ERROR(status)) { + WMA_LOGE("%s: Failed to Set rate, status = %d", __func__, status); + return status; } return QDF_STATUS_SUCCESS; @@ -2965,6 +2966,7 @@ void wma_tx_abort(uint8_t vdev_id) tp_wma_handle wma; uint32_t peer_tid_bitmap = PEER_ALL_TID_BITMASK; struct wma_txrx_node *iface; + struct peer_flush_params param = {0}; wma = cds_get_context(QDF_MODULE_ID_WMA); if (NULL == wma) { @@ -2984,8 +2986,10 @@ void wma_tx_abort(uint8_t vdev_id) /* Flush all TIDs except MGMT TID for this peer in Target */ peer_tid_bitmap &= ~(0x1 << WMI_MGMT_TID); + param.peer_tid_bitmap = peer_tid_bitmap; + param.vdev_id = vdev_id; wmi_unified_peer_flush_tids_send(wma->wmi_handle, iface->bssid, - peer_tid_bitmap, vdev_id); + ¶m); } #if defined(FEATURE_LRO) diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index a6745f84a240..655507323b12 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -212,86 +212,6 @@ enum wlan_op_mode wma_get_txrx_vdev_type(uint32_t type) } /** - * wma_unified_vdev_create_send() - send VDEV create command to fw - * @wmi_handle: wmi handle - * @if_id: vdev id - * @type: vdev type - * @subtype: vdev subtype - * @macaddr: vdev mac address - * - * Return: 0 for success or error code - */ -int wma_unified_vdev_create_send(wmi_unified_t wmi_handle, uint8_t if_id, - uint32_t type, uint32_t subtype, - uint8_t macaddr[IEEE80211_ADDR_LEN]) -{ - wmi_vdev_create_cmd_fixed_param *cmd; - wmi_buf_t buf; - int len = sizeof(*cmd); - int ret; - - buf = wmi_buf_alloc(wmi_handle, len); - if (!buf) { - WMA_LOGP("%s:wmi_buf_alloc failed", __FUNCTION__); - return -ENOMEM; - } - cmd = (wmi_vdev_create_cmd_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_vdev_create_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (wmi_vdev_create_cmd_fixed_param)); - cmd->vdev_id = if_id; - cmd->vdev_type = type; - cmd->vdev_subtype = subtype; - WMI_CHAR_ARRAY_TO_MAC_ADDR(macaddr, &cmd->vdev_macaddr); - WMA_LOGE("%s: ID = %d VAP Addr = %02x:%02x:%02x:%02x:%02x:%02x", - __func__, if_id, - macaddr[0], macaddr[1], macaddr[2], - macaddr[3], macaddr[4], macaddr[5]); - ret = wmi_unified_cmd_send(wmi_handle, buf, len, WMI_VDEV_CREATE_CMDID); - if (ret != EOK) { - WMA_LOGE("Failed to send WMI_VDEV_CREATE_CMDID"); - wmi_buf_free(buf); - } - return ret; -} - -/** - * wma_unified_vdev_delete_send() - send VDEV delete command to fw - * @wmi_handle: wmi handle - * @if_id: vdev id - * - * Return: 0 for success or error code - */ -static int wma_unified_vdev_delete_send(wmi_unified_t wmi_handle, uint8_t if_id) -{ - wmi_vdev_delete_cmd_fixed_param *cmd; - wmi_buf_t buf; - int ret; - - buf = wmi_buf_alloc(wmi_handle, sizeof(*cmd)); - if (!buf) { - WMA_LOGP("%s:wmi_buf_alloc failed", __FUNCTION__); - return -ENOMEM; - } - - cmd = (wmi_vdev_delete_cmd_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_vdev_delete_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (wmi_vdev_delete_cmd_fixed_param)); - cmd->vdev_id = if_id; - ret = wmi_unified_cmd_send(wmi_handle, buf, - sizeof(wmi_vdev_delete_cmd_fixed_param), - WMI_VDEV_DELETE_CMDID); - if (ret != EOK) { - WMA_LOGE("Failed to send WMI_VDEV_DELETE_CMDID"); - wmi_buf_free(buf); - } - return ret; -} - -/** * wma_find_req() - find target request for vdev id * @wma: wma handle * @vdev_id: vdev id @@ -606,9 +526,9 @@ static QDF_STATUS wma_handle_vdev_detach(tp_wma_handle wma_handle, struct wma_target_req *msg = NULL; cds_msg_t sme_msg = { 0 }; - if (wma_unified_vdev_delete_send(wma_handle->wmi_handle, vdev_id)) { + status = wmi_unified_vdev_delete_send(wma_handle->wmi_handle, vdev_id); + if (QDF_IS_STATUS_ERROR(status)) { WMA_LOGE("Unable to remove an interface"); - status = QDF_STATUS_E_FAILURE; goto out; } @@ -721,45 +641,6 @@ QDF_STATUS wma_vdev_detach(tp_wma_handle wma_handle, } /** - * wmi_unified_peer_delete_send() - send PEER delete command to fw - * @wmi: wmi handle - * @peer_addr: peer mac addr - * @vdev_id: vdev id - * - * Return: 0 for success or error code - */ -static int32_t wmi_unified_peer_delete_send(wmi_unified_t wmi, - uint8_t - peer_addr[IEEE80211_ADDR_LEN], - uint8_t vdev_id) -{ - wmi_peer_delete_cmd_fixed_param *cmd; - wmi_buf_t buf; - int32_t len = sizeof(*cmd); - - buf = wmi_buf_alloc(wmi, len); - if (!buf) { - WMA_LOGP("%s: wmi_buf_alloc failed", __func__); - return -ENOMEM; - } - cmd = (wmi_peer_delete_cmd_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_peer_delete_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (wmi_peer_delete_cmd_fixed_param)); - WMI_CHAR_ARRAY_TO_MAC_ADDR(peer_addr, &cmd->peer_macaddr); - cmd->vdev_id = vdev_id; - - if (wmi_unified_cmd_send(wmi, buf, len, WMI_PEER_DELETE_CMDID)) { - WMA_LOGP("%s: Failed to send peer delete command", __func__); - qdf_nbuf_free(buf); - return -EIO; - } - WMA_LOGD("%s: peer_addr %pM vdev_id %d", __func__, peer_addr, vdev_id); - return 0; -} - -/** * wma_vdev_start_rsp() - send vdev start response to upper layer * @wma: wma handle * @add_bss: add bss params @@ -905,6 +786,9 @@ int wma_vdev_start_resp_handler(void *handle, uint8_t *cmd_param_info, wmi_vdev_start_response_event_fixed_param *resp_event; struct wma_target_req *req_msg; struct wma_txrx_node *iface; + struct vdev_up_params param = {0}; + QDF_STATUS status; + #ifdef FEATURE_AP_MCC_CH_AVOIDANCE tpAniSirGlobal mac_ctx = cds_get_context(QDF_MODULE_ID_PE); if (NULL == mac_ctx) { @@ -957,9 +841,12 @@ int wma_vdev_start_resp_handler(void *handle, uint8_t *cmd_param_info, WMA_LOGE("%s: vdev restart event recevied for hidden ssid set using IOCTL", __func__); + param.vdev_id = resp_event->vdev_id; + param.assoc_id = 0; if (wmi_unified_vdev_up_send - (wma->wmi_handle, resp_event->vdev_id, 0, - wma->interfaces[resp_event->vdev_id].bssid) < 0) { + (wma->wmi_handle, + wma->interfaces[resp_event->vdev_id].bssid, + ¶m) != QDF_STATUS_SUCCESS) { WMA_LOGE("%s : failed to send vdev up", __func__); return -EEXIST; } @@ -1007,10 +894,12 @@ int wma_vdev_start_resp_handler(void *handle, uint8_t *cmd_param_info, params->status = resp_event->status; if (resp_event->resp_type == WMI_VDEV_RESTART_RESP_EVENT && (iface->type == WMI_VDEV_TYPE_STA)) { - if (wmi_unified_vdev_up_send(wma->wmi_handle, - resp_event->vdev_id, - iface->aid, - iface->bssid)) { + param.vdev_id = resp_event->vdev_id; + param.assoc_id = iface->aid; + status = wmi_unified_vdev_up_send(wma->wmi_handle, + iface->bssid, + ¶m); + if (QDF_IS_STATUS_ERROR(status)) { WMA_LOGE("%s:vdev_up failed vdev_id %d", __func__, resp_event->vdev_id); wma->interfaces[resp_event->vdev_id].vdev_up = @@ -1028,9 +917,11 @@ int wma_vdev_start_resp_handler(void *handle, uint8_t *cmd_param_info, IEEE80211_ADDR_LEN); wma_vdev_start_rsp(wma, bssParams, resp_event); } else if (req_msg->msg_type == WMA_OCB_SET_CONFIG_CMD) { + param.vdev_id = resp_event->vdev_id; + param.assoc_id = iface->aid; if (wmi_unified_vdev_up_send(wma->wmi_handle, - resp_event->vdev_id, iface->aid, - iface->bssid) < 0) { + iface->bssid, + ¶m) != QDF_STATUS_SUCCESS) { WMA_LOGE(FL("failed to send vdev up")); return -EEXIST; } @@ -1050,86 +941,24 @@ int wma_vdev_start_resp_handler(void *handle, uint8_t *cmd_param_info, } /** - * wmi_unified_vdev_set_param_send() - set per vdev params in fw + * wma_vdev_set_param() - set per vdev params in fw * @wmi_handle: wmi handle * @if_if: vdev id * @param_id: parameter id * @param_value: parameter value * - * Return: 0 for success or error code + * Return: QDF_STATUS_SUCCESS for success or error code */ -int -wmi_unified_vdev_set_param_send(wmi_unified_t wmi_handle, uint32_t if_id, +QDF_STATUS +wma_vdev_set_param(wmi_unified_t wmi_handle, uint32_t if_id, uint32_t param_id, uint32_t param_value) { - int ret; - wmi_vdev_set_param_cmd_fixed_param *cmd; - wmi_buf_t buf; - uint16_t len = sizeof(*cmd); + struct vdev_set_params param = {0}; + param.if_id = if_id; + param.param_id = param_id; + param.param_value = param_value; - buf = wmi_buf_alloc(wmi_handle, len); - if (!buf) { - WMA_LOGE("%s:wmi_buf_alloc failed", __func__); - return -ENOMEM; - } - cmd = (wmi_vdev_set_param_cmd_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_vdev_set_param_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (wmi_vdev_set_param_cmd_fixed_param)); - cmd->vdev_id = if_id; - cmd->param_id = param_id; - cmd->param_value = param_value; - WMA_LOGD("Setting vdev %d param = %x, value = %u", - if_id, param_id, param_value); - ret = wmi_unified_cmd_send(wmi_handle, buf, len, - WMI_VDEV_SET_PARAM_CMDID); - if (ret < 0) { - WMA_LOGE("Failed to send set param command ret = %d", ret); - wmi_buf_free(buf); - } - return ret; -} - -/** - * wmi_unified_peer_flush_tids_send() - flush peer tids packets in fw - * @wmi: wmi handle - * @peer_addr: peer mac address - * @peer_tid_bitmap: peer tid bitmap - * @vdev_id: vdev id - * - * Return: 0 for sucess or error code - */ -int32_t wmi_unified_peer_flush_tids_send(wmi_unified_t wmi, - uint8_t peer_addr[IEEE80211_ADDR_LEN], - uint32_t peer_tid_bitmap, - uint8_t vdev_id) -{ - wmi_peer_flush_tids_cmd_fixed_param *cmd; - wmi_buf_t buf; - int32_t len = sizeof(*cmd); - - buf = wmi_buf_alloc(wmi, len); - if (!buf) { - WMA_LOGP("%s: wmi_buf_alloc failed", __func__); - return -ENOMEM; - } - cmd = (wmi_peer_flush_tids_cmd_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_peer_flush_tids_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (wmi_peer_flush_tids_cmd_fixed_param)); - WMI_CHAR_ARRAY_TO_MAC_ADDR(peer_addr, &cmd->peer_macaddr); - cmd->peer_tid_bitmap = peer_tid_bitmap; - cmd->vdev_id = vdev_id; - - if (wmi_unified_cmd_send(wmi, buf, len, WMI_PEER_FLUSH_TIDS_CMDID)) { - WMA_LOGP("%s: Failed to send flush tid command", __func__); - qdf_nbuf_free(buf); - return -EIO; - } - WMA_LOGD("%s: peer_addr %pM vdev_id %d", __func__, peer_addr, vdev_id); - return 0; + return wmi_unified_vdev_set_param_send(wmi_handle, ¶m); } /** @@ -1153,39 +982,24 @@ void wma_set_peer_authorized_cb(void *wma_ctx, wma_peer_authorized_fp auth_cb) * @param_value: parameter value * @vdev_id: vdev id * - * Return: 0 for success or error code + * Return: QDF_STATUS_SUCCESS for success or error code */ -int wma_set_peer_param(void *wma_ctx, uint8_t *peer_addr, uint32_t param_id, - uint32_t param_value, uint32_t vdev_id) +QDF_STATUS wma_set_peer_param(void *wma_ctx, uint8_t *peer_addr, + uint32_t param_id, uint32_t param_value, + uint32_t vdev_id) { tp_wma_handle wma_handle = (tp_wma_handle) wma_ctx; - wmi_peer_set_param_cmd_fixed_param *cmd; - wmi_buf_t buf; + struct peer_set_params param = {0}; int err; - buf = wmi_buf_alloc(wma_handle->wmi_handle, sizeof(*cmd)); - if (!buf) { - WMA_LOGE("Failed to allocate buffer to send set_param cmd"); - return -ENOMEM; - } - cmd = (wmi_peer_set_param_cmd_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_peer_set_param_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (wmi_peer_set_param_cmd_fixed_param)); - cmd->vdev_id = vdev_id; - WMI_CHAR_ARRAY_TO_MAC_ADDR(peer_addr, &cmd->peer_macaddr); - cmd->param_id = param_id; - cmd->param_value = param_value; - err = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, - sizeof(wmi_peer_set_param_cmd_fixed_param), - WMI_PEER_SET_PARAM_CMDID); - if (err) { - WMA_LOGE("Failed to send set_param cmd"); - qdf_mem_free(buf); - return -EIO; - } - return 0; + param.vdev_id = vdev_id; + param.param_value = param_value; + param.param_id = param_id; + + err = wmi_set_peer_param_send(wma_handle->wmi_handle, peer_addr, + ¶m); + + return err; } /** @@ -1205,6 +1019,8 @@ void wma_remove_peer(tp_wma_handle wma, uint8_t *bssid, #define PEER_ALL_TID_BITMASK 0xffffffff uint32_t peer_tid_bitmap = PEER_ALL_TID_BITMASK; uint8_t *peer_addr = bssid; + struct peer_flush_params param = {0}; + if (!wma->interfaces[vdev_id].peer_count) { WMA_LOGE("%s: Can't remove peer with peer_addr %pM vdevid %d peer_count %d", __func__, bssid, vdev_id, @@ -1221,8 +1037,10 @@ void wma_remove_peer(tp_wma_handle wma, uint8_t *bssid, return; /* Flush all TIDs except MGMT TID for this peer in Target */ peer_tid_bitmap &= ~(0x1 << WMI_MGMT_TID); + param.peer_tid_bitmap = peer_tid_bitmap; + param.vdev_id = vdev_id; wmi_unified_peer_flush_tids_send(wma->wmi_handle, bssid, - peer_tid_bitmap, vdev_id); + ¶m); if ((peer) && (wma_is_vdev_in_ibss_mode(wma, vdev_id))) { WMA_LOGD("%s: bssid %pM peer->mac_addr %pM", __func__, @@ -1235,46 +1053,6 @@ void wma_remove_peer(tp_wma_handle wma, uint8_t *bssid, } /** - * wmi_unified_peer_create_send() - send peer create command to fw - * @wmi: wmi handle - * @peer_addr: peer mac address - * @peer_type: peer type - * @vdev_id: vdev id - * - * Return: 0 for success or error code - */ -static int wmi_unified_peer_create_send(wmi_unified_t wmi, - const uint8_t *peer_addr, - uint32_t peer_type, uint32_t vdev_id) -{ - wmi_peer_create_cmd_fixed_param *cmd; - wmi_buf_t buf; - int32_t len = sizeof(*cmd); - - buf = wmi_buf_alloc(wmi, len); - if (!buf) { - WMA_LOGP("%s: wmi_buf_alloc failed", __func__); - return -ENOMEM; - } - cmd = (wmi_peer_create_cmd_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_peer_create_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (wmi_peer_create_cmd_fixed_param)); - WMI_CHAR_ARRAY_TO_MAC_ADDR(peer_addr, &cmd->peer_macaddr); - cmd->peer_type = peer_type; - cmd->vdev_id = vdev_id; - - if (wmi_unified_cmd_send(wmi, buf, len, WMI_PEER_CREATE_CMDID)) { - WMA_LOGP("%s: failed to send WMI_PEER_CREATE_CMDID", __func__); - qdf_nbuf_free(buf); - return -EIO; - } - WMA_LOGD("%s: peer_addr %pM vdev_id %d", __func__, peer_addr, vdev_id); - return 0; -} - -/** * wma_create_peer() - send peer create command to fw * @wma: wma handle * @pdev: txrx pdev ptr @@ -1293,6 +1071,7 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma, ol_txrx_pdev_handle pdev, bool roam_synch_in_progress) { ol_txrx_peer_handle peer; + struct peer_create_params param = {0}; if (++wma->interfaces[vdev_id].peer_count > wma->wlan_resource_config.num_peers) { @@ -1312,8 +1091,11 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma, ol_txrx_pdev_handle pdev, wma->interfaces[vdev_id].peer_count); return QDF_STATUS_SUCCESS; } - if (wmi_unified_peer_create_send(wma->wmi_handle, peer_addr, - peer_type, vdev_id) < 0) { + param.peer_addr = peer_addr; + param.peer_type = peer_type; + param.vdev_id = vdev_id; + if (wmi_unified_peer_create_send(wma->wmi_handle, + ¶m) != QDF_STATUS_SUCCESS) { WMA_LOGP("%s : Unable to create peer in Target", __func__); ol_txrx_peer_detach(peer); goto err; @@ -1344,38 +1126,6 @@ err: return QDF_STATUS_E_FAILURE; } -/** - * wmi_unified_vdev_down_send() - send vdev down command to fw - * @wmi: wmi handle - * @vdev_id: vdev id - * - * Return: 0 for success or error code - */ -static int wmi_unified_vdev_down_send(wmi_unified_t wmi, uint8_t vdev_id) -{ - wmi_vdev_down_cmd_fixed_param *cmd; - wmi_buf_t buf; - int32_t len = sizeof(*cmd); - - buf = wmi_buf_alloc(wmi, len); - if (!buf) { - WMA_LOGP("%s : wmi_buf_alloc failed", __func__); - return -ENOMEM; - } - cmd = (wmi_vdev_down_cmd_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_vdev_down_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN(wmi_vdev_down_cmd_fixed_param)); - cmd->vdev_id = vdev_id; - if (wmi_unified_cmd_send(wmi, buf, len, WMI_VDEV_DOWN_CMDID)) { - WMA_LOGP("%s: Failed to send vdev down", __func__); - qdf_nbuf_free(buf); - return -EIO; - } - WMA_LOGE("%s: vdev_id %d", __func__, vdev_id); - return 0; -} - #ifdef QCA_IBSS_SUPPORT /** @@ -1753,8 +1503,9 @@ int wma_vdev_stop_resp_handler(void *handle, uint8_t *cmd_param_info, peer, false); } - if (wmi_unified_vdev_down_send - (wma->wmi_handle, resp_event->vdev_id) < 0) { + if (wmi_unified_vdev_down_send(wma->wmi_handle, + resp_event->vdev_id) != + QDF_STATUS_SUCCESS) { WMA_LOGE("Failed to send vdev down cmd: vdev %d", resp_event->vdev_id); } else { @@ -1841,24 +1592,27 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, struct sAniSirGlobal *mac = cds_get_context(QDF_MODULE_ID_PE); uint32_t cfg_val; uint16_t val16; - int ret; + QDF_STATUS ret; tSirMacHTCapabilityInfo *phtCapInfo; cds_msg_t sme_msg = { 0 }; + struct vdev_create_params params = { 0 }; if (NULL == mac) { WMA_LOGE("%s: Failed to get mac", __func__); goto end; } + params.if_id = self_sta_req->session_id; + params.type = self_sta_req->type; + params.subtype = self_sta_req->sub_type; + /* Create a vdev in target */ - if (wma_unified_vdev_create_send(wma_handle->wmi_handle, - self_sta_req->session_id, - self_sta_req->type, - self_sta_req->sub_type, - self_sta_req->self_mac_addr)) { + status = wmi_unified_vdev_create_send(wma_handle->wmi_handle, + self_sta_req->self_mac_addr, + ¶ms); + if (QDF_IS_STATUS_ERROR(status)) { WMA_LOGP("%s: Unable to add an interface for ath_dev", __func__); - status = QDF_STATUS_E_RESOURCES; goto end; } @@ -1866,7 +1620,7 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, if (wlan_op_mode_unknown == txrx_vdev_type) { WMA_LOGE("Failed to get txrx vdev type"); - wma_unified_vdev_delete_send(wma_handle->wmi_handle, + wmi_unified_vdev_delete_send(wma_handle->wmi_handle, self_sta_req->session_id); goto end; } @@ -1883,7 +1637,7 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, if (NULL == txrx_vdev_handle) { WMA_LOGP("%s: ol_txrx_vdev_attach failed", __func__); status = QDF_STATUS_E_FAILURE; - wma_unified_vdev_delete_send(wma_handle->wmi_handle, + wmi_unified_vdev_delete_send(wma_handle->wmi_handle, self_sta_req->session_id); goto end; } @@ -1958,32 +1712,32 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, if (status != QDF_STATUS_SUCCESS) { WMA_LOGE("%s: Failed to create peer", __func__); status = QDF_STATUS_E_FAILURE; - wma_unified_vdev_delete_send(wma_handle->wmi_handle, + wmi_unified_vdev_delete_send(wma_handle->wmi_handle, self_sta_req->session_id); } } - ret = wmi_unified_vdev_set_param_send(wma_handle->wmi_handle, + ret = wma_vdev_set_param(wma_handle->wmi_handle, self_sta_req->session_id, WMI_VDEV_PARAM_MCC_RTSCTS_PROTECTION_ENABLE, mac->roam.configParam.mcc_rts_cts_prot_enable); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("Failed to set WMI VDEV MCC_RTSCTS_PROTECTION_ENABLE"); - ret = wmi_unified_vdev_set_param_send(wma_handle->wmi_handle, + ret = wma_vdev_set_param(wma_handle->wmi_handle, self_sta_req->session_id, WMI_VDEV_PARAM_MCC_BROADCAST_PROBE_ENABLE, mac->roam.configParam.mcc_bcast_prob_resp_enable); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("Failed to set WMI VDEV MCC_BROADCAST_PROBE_ENABLE"); if (wlan_cfg_get_int(mac, WNI_CFG_RTS_THRESHOLD, &cfg_val) == eSIR_SUCCESS) { - ret = wmi_unified_vdev_set_param_send(wma_handle->wmi_handle, + ret = wma_vdev_set_param(wma_handle->wmi_handle, self_sta_req->session_id, WMI_VDEV_PARAM_RTS_THRESHOLD, cfg_val); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("Failed to set WMI_VDEV_PARAM_RTS_THRESHOLD"); } else { WMA_LOGE("Failed to get value for WNI_CFG_RTS_THRESHOLD, leaving unchanged"); @@ -1991,11 +1745,11 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, if (wlan_cfg_get_int(mac, WNI_CFG_FRAGMENTATION_THRESHOLD, &cfg_val) == eSIR_SUCCESS) { - ret = wmi_unified_vdev_set_param_send(wma_handle->wmi_handle, + ret = wma_vdev_set_param(wma_handle->wmi_handle, self_sta_req->session_id, WMI_VDEV_PARAM_FRAGMENTATION_THRESHOLD, cfg_val); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("Failed to set WMI_VDEV_PARAM_FRAGMENTATION_THRESHOLD"); } else { WMA_LOGE("Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD, leaving unchanged"); @@ -2004,11 +1758,11 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, if (wlan_cfg_get_int(mac, WNI_CFG_HT_CAP_INFO, &cfg_val) == eSIR_SUCCESS) { val16 = (uint16_t) cfg_val; phtCapInfo = (tSirMacHTCapabilityInfo *) &cfg_val; - ret = wmi_unified_vdev_set_param_send(wma_handle->wmi_handle, + ret = wma_vdev_set_param(wma_handle->wmi_handle, self_sta_req->session_id, WMI_VDEV_PARAM_TX_STBC, phtCapInfo->txSTBC); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("Failed to set WMI_VDEV_PARAM_TX_STBC"); } else { WMA_LOGE("Failed to get value of HT_CAP, TX STBC unchanged"); @@ -2017,11 +1771,13 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, if ((self_sta_req->type == WMI_VDEV_TYPE_STA) && (self_sta_req->sub_type == 0)) { wma_handle->roam_offload_enabled = true; - wmi_unified_vdev_set_param_send(wma_handle->wmi_handle, + ret = wma_vdev_set_param(wma_handle->wmi_handle, self_sta_req->session_id, WMI_VDEV_PARAM_ROAM_FW_OFFLOAD, (WMI_ROAM_FW_OFFLOAD_ENABLE_FLAG | WMI_ROAM_BMISS_FINAL_SCAN_ENABLE_FLAG)); + if (QDF_IS_STATUS_ERROR(ret)) + WMA_LOGE("Failed to set WMI_VDEV_PARAM_ROAM_FW_OFFLOAD"); } /* Initialize BMISS parameters */ @@ -2761,7 +2517,7 @@ void wma_vdev_resp_timer(void *data) } if (wmi_unified_vdev_down_send(wma->wmi_handle, - tgt_req->vdev_id) < 0) { + tgt_req->vdev_id) != QDF_STATUS_SUCCESS) { WMA_LOGE("Failed to send vdev down cmd: vdev %d", tgt_req->vdev_id); } else { @@ -2995,37 +2751,37 @@ wma_vdev_set_bss_params(tp_wma_handle wma, int vdev_id, uint8_t dtimPeriod, uint8_t shortSlotTimeSupported, uint8_t llbCoexist, int8_t maxTxPower) { - int ret; + QDF_STATUS ret; uint32_t slot_time; struct wma_txrx_node *intr = wma->interfaces; /* Beacon Interval setting */ - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_BEACON_INTERVAL, beaconInterval); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("failed to set WMI_VDEV_PARAM_BEACON_INTERVAL"); ret = wmi_unified_vdev_set_gtx_cfg_send(wma->wmi_handle, vdev_id, &intr[vdev_id].config.gtx_info); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("failed to set WMI_VDEV_PARAM_DTIM_PERIOD"); - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_DTIM_PERIOD, dtimPeriod); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("failed to set WMI_VDEV_PARAM_DTIM_PERIOD"); if (!maxTxPower) { WMA_LOGW("Setting Tx power limit to 0"); } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_TX_PWRLIMIT, maxTxPower); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("failed to set WMI_VDEV_PARAM_TX_PWRLIMIT"); else intr[vdev_id].max_tx_power = maxTxPower; @@ -3036,10 +2792,10 @@ wma_vdev_set_bss_params(tp_wma_handle wma, int vdev_id, else slot_time = WMI_VDEV_SLOT_TIME_LONG; - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_SLOT_TIME, slot_time); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("failed to set WMI_VDEV_PARAM_SLOT_TIME"); /* Initialize protection mode in case of coexistence */ @@ -3063,8 +2819,9 @@ static void wma_add_bss_ap_mode(tp_wma_handle wma, tpAddBssParams add_bss) uint8_t vdev_id, peer_id; QDF_STATUS status; int8_t maxTxPower; + struct pdev_params param = {0}; #ifdef WLAN_FEATURE_11W - int ret = 0; + QDF_STATUS ret; #endif /* WLAN_FEATURE_11W */ struct sir_hw_mode_params hw_mode = {0}; @@ -3128,9 +2885,11 @@ static void wma_add_bss_ap_mode(tp_wma_handle wma, tpAddBssParams add_bss) * when 802.11w PMF is enabled for hw encr/decr * use hw MFP Qos bits 0x10 */ - ret = wmi_unified_pdev_set_param(wma->wmi_handle, - WMI_PDEV_PARAM_PMF_QOS, true); - if (ret) { + param.param_id = WMI_PDEV_PARAM_PMF_QOS; + param.param_value = true; + ret = wmi_unified_pdev_param_send(wma->wmi_handle, + ¶m, WMA_WILDCARD_PDEV_ID); + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("%s: Failed to set QOS MFP/PMF (%d)", __func__, ret); } else { @@ -3365,11 +3124,11 @@ static void wma_add_bss_ibss_mode(tp_wma_handle wma, tpAddBssParams add_bss) WMA_LOGD("%s: vdev start request for IBSS sent to target", __func__); /* Initialize protection mode to no protection */ - if (wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, - WMI_VDEV_PARAM_PROTECTION_MODE, - IEEE80211_PROT_NONE)) { + status = wma_vdev_set_param(wma->wmi_handle, vdev_id, + WMI_VDEV_PARAM_PROTECTION_MODE, + IEEE80211_PROT_NONE); + if (QDF_IS_STATUS_ERROR(status)) WMA_LOGE("Failed to initialize protection mode"); - } return; @@ -3399,12 +3158,12 @@ static void wma_add_bss_sta_mode(tp_wma_handle wma, tpAddBssParams add_bss) ol_txrx_peer_handle peer; QDF_STATUS status; struct wma_txrx_node *iface; - int ret = 0; int pps_val = 0; bool roam_synch_in_progress = false; tpAniSirGlobal pMac = cds_get_context(QDF_MODULE_ID_PE); struct sir_hw_mode_params hw_mode = {0}; bool peer_assoc_sent = false; + struct pdev_params param = {0}; if (NULL == pMac) { WMA_LOGE("%s: Unable to get PE context", __func__); @@ -3596,14 +3355,14 @@ static void wma_add_bss_sta_mode(tp_wma_handle wma, tpAddBssParams add_bss) ((pMac-> enable5gEBT << 31) & 0xffff0000) | (PKT_PWR_SAVE_5G_EBT & 0xffff); - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + status = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_PACKET_POWERSAVE, pps_val); - if (ret) + if (QDF_IS_STATUS_ERROR(status)) WMA_LOGE("Failed to send wmi packet power save cmd"); else - WMA_LOGD("Sent PKT_PWR_SAVE_5G_EBT cmd to target, val = %x, ret = %d", - pps_val, ret); + WMA_LOGD("Sent PKT_PWR_SAVE_5G_EBT cmd to target, val = %x, status = %d", + pps_val, status); wmi_unified_send_peer_assoc(wma, add_bss->nwType, &add_bss->staContext); @@ -3612,12 +3371,14 @@ static void wma_add_bss_sta_mode(tp_wma_handle wma, tpAddBssParams add_bss) if (add_bss->rmfEnabled) { /* when 802.11w PMF is enabled for hw encr/decr use hw MFP Qos bits 0x10 */ - ret = wmi_unified_pdev_set_param(wma->wmi_handle, - WMI_PDEV_PARAM_PMF_QOS, - true); - if (ret) { + param.param_id = WMI_PDEV_PARAM_PMF_QOS; + param.param_value = true; + status = wmi_unified_pdev_param_send(wma->wmi_handle, + ¶m, + WMA_WILDCARD_PDEV_ID); + if (QDF_IS_STATUS_ERROR(status)) { WMA_LOGE("%s: Failed to set QOS MFP/PMF (%d)", - __func__, ret); + __func__, status); } else { WMA_LOGI("%s: QOS MFP/PMF set to %d", __func__, true); @@ -3725,46 +3486,6 @@ void wma_add_bss(tp_wma_handle wma, tpAddBssParams params) } /** - * wmi_unified_vdev_up_send() - send vdev up command in fw - * @wmi: wmi handle - * @vdev_id: vdev id - * @aid: association ID - * @bssid: bssid - * - * Return: 0 for success or error code - */ -int wmi_unified_vdev_up_send(wmi_unified_t wmi, - uint8_t vdev_id, uint16_t aid, - uint8_t bssid[IEEE80211_ADDR_LEN]) -{ - wmi_vdev_up_cmd_fixed_param *cmd; - wmi_buf_t buf; - int32_t len = sizeof(*cmd); - - WMA_LOGD("%s: VDEV_UP", __func__); - WMA_LOGD("%s: vdev_id %d aid %d bssid %pM", __func__, - vdev_id, aid, bssid); - buf = wmi_buf_alloc(wmi, len); - if (!buf) { - WMA_LOGP("%s: wmi_buf_alloc failed", __func__); - return -ENOMEM; - } - cmd = (wmi_vdev_up_cmd_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_vdev_up_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN(wmi_vdev_up_cmd_fixed_param)); - cmd->vdev_id = vdev_id; - cmd->vdev_assoc_id = aid; - WMI_CHAR_ARRAY_TO_MAC_ADDR(bssid, &cmd->vdev_bssid); - if (wmi_unified_cmd_send(wmi, buf, len, WMI_VDEV_UP_CMDID)) { - WMA_LOGP("%s: Failed to send vdev up command", __func__); - qdf_nbuf_free(buf); - return -EIO; - } - return 0; -} - -/** * wma_add_sta_req_ap_mode() - process add sta request in ap mode * @wma: wma handle * @add_sta: add sta params @@ -3783,6 +3504,7 @@ static void wma_add_sta_req_ap_mode(tp_wma_handle wma, tpAddStaParams add_sta) struct wma_txrx_node *iface = NULL; struct wma_target_req *msg; bool peer_assoc_cnf = false; + struct pdev_params param; pdev = cds_get_context(QDF_MODULE_ID_TXRX); @@ -3915,11 +3637,13 @@ static void wma_add_sta_req_ap_mode(tp_wma_handle wma, tpAddStaParams add_sta) * when 802.11w PMF is enabled for hw encr/decr * use hw MFP Qos bits 0x10 */ - ret = wmi_unified_pdev_set_param(wma->wmi_handle, - WMI_PDEV_PARAM_PMF_QOS, true); - if (ret) { + param.param_id = WMI_PDEV_PARAM_PMF_QOS; + param.param_value = true; + status = wmi_unified_pdev_param_send(wma->wmi_handle, + ¶m, WMA_WILDCARD_PDEV_ID); + if (QDF_IS_STATUS_ERROR(status)) { WMA_LOGE("%s: Failed to set QOS MFP/PMF (%d)", - __func__, ret); + __func__, status); } else { WMA_LOGI("%s: QOS MFP/PMF set to %d", __func__, true); } @@ -3927,10 +3651,10 @@ static void wma_add_sta_req_ap_mode(tp_wma_handle wma, tpAddStaParams add_sta) #endif /* WLAN_FEATURE_11W */ if (add_sta->uAPSD) { - ret = wma_set_ap_peer_uapsd(wma, add_sta->smesessionId, + status = wma_set_ap_peer_uapsd(wma, add_sta->smesessionId, add_sta->staMac, add_sta->uAPSD, add_sta->maxSPLen); - if (ret) { + if (QDF_IS_STATUS_ERROR(status)) { WMA_LOGE("Failed to set peer uapsd param for %pM", add_sta->staMac); add_sta->status = QDF_STATUS_E_FAILURE; @@ -4124,6 +3848,8 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params) int ret = 0; struct wma_target_req *msg; bool peer_assoc_cnf = false; + struct vdev_up_params param = {0}; + struct pdev_params pdev_param = {0}; #ifdef FEATURE_WLAN_TDLS if (STA_ENTRY_TDLS_PEER == params->staType) { @@ -4233,12 +3959,14 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params) if (params->rmfEnabled) { /* when 802.11w PMF is enabled for hw encr/decr use hw MFP Qos bits 0x10 */ - ret = wmi_unified_pdev_set_param(wma->wmi_handle, - WMI_PDEV_PARAM_PMF_QOS, - true); - if (ret) { + pdev_param.param_id = WMI_PDEV_PARAM_PMF_QOS; + pdev_param.param_value = true; + status = wmi_unified_pdev_param_send(wma->wmi_handle, + &pdev_param, + WMA_WILDCARD_PDEV_ID); + if (QDF_IS_STATUS_ERROR(status)) { WMA_LOGE("%s: Failed to set QOS MFP/PMF (%d)", - __func__, ret); + __func__, status); } else { WMA_LOGI("%s: QOS MFP/PMF set to %d", __func__, true); @@ -4269,7 +3997,7 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params) if (WMI_SERVICE_IS_ENABLED(wma->wmi_service_bitmap, WMI_SERVICE_CSA_OFFLOAD)) { params->csaOffloadEnable = 1; - if (wmi_unified_csa_offload_enable(wma, params->smesessionId) < + if (wma_unified_csa_offload_enable(wma, params->smesessionId) < 0) { WMA_LOGE("Unable to enable CSA offload for vdev_id:%d", params->smesessionId); @@ -4285,8 +4013,10 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params) } } - if (wmi_unified_vdev_up_send(wma->wmi_handle, params->smesessionId, - params->assocId, params->bssId) < 0) { + param.vdev_id = params->smesessionId; + param.assoc_id = params->assocId; + if (wmi_unified_vdev_up_send(wma->wmi_handle, params->bssId, + ¶m) != QDF_STATUS_SUCCESS) { WMA_LOGP("%s: Failed to send vdev up cmd: vdev %d bssid %pM", __func__, params->smesessionId, params->bssId); status = QDF_STATUS_E_FAILURE; @@ -4593,37 +4323,6 @@ void wma_delete_sta(tp_wma_handle wma, tpDeleteStaParams del_sta) } /** - * wmi_unified_vdev_stop_send() - send vdev stop command to fw - * @wmi: wmi handle - * @vdev_id: vdev id - * - * Return: 0 for success or erro code - */ -int32_t wmi_unified_vdev_stop_send(wmi_unified_t wmi, uint8_t vdev_id) -{ - wmi_vdev_stop_cmd_fixed_param *cmd; - wmi_buf_t buf; - int32_t len = sizeof(*cmd); - - buf = wmi_buf_alloc(wmi, len); - if (!buf) { - WMA_LOGP("%s : wmi_buf_alloc failed", __func__); - return -ENOMEM; - } - cmd = (wmi_vdev_stop_cmd_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_vdev_stop_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN(wmi_vdev_stop_cmd_fixed_param)); - cmd->vdev_id = vdev_id; - if (wmi_unified_cmd_send(wmi, buf, len, WMI_VDEV_STOP_CMDID)) { - WMA_LOGP("%s: Failed to send vdev stop command", __func__); - qdf_nbuf_free(buf); - return -EIO; - } - return 0; -} - -/** * wma_delete_bss() - process delete bss request from upper layer * @wma: wma handle * @params: del bss parameters diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c index 8c92bb7eb2f1..8ec2c2c26ca1 100644 --- a/core/wma/src/wma_features.c +++ b/core/wma/src/wma_features.c @@ -1079,15 +1079,16 @@ void wma_setup_egap_support(struct wma_tgt_cfg *tgt_cfg, WMA_HANDLE handle) void wma_register_egap_event_handle(WMA_HANDLE handle) { tp_wma_handle wma_handle = (tp_wma_handle) handle; - int status; + QDF_STATUS status; if (WMI_SERVICE_IS_ENABLED(wma_handle->wmi_service_bitmap, WMI_SERVICE_EGAP)) { status = wmi_unified_register_event_handler( wma_handle->wmi_handle, WMI_AP_PS_EGAP_INFO_EVENTID, - wma_egap_info_status_event); - if (status) { + wma_egap_info_status_event, + WMA_RX_SERIALIZER_CTX); + if (QDF_IS_STATUS_ERROR(status)) { WMA_LOGE("Failed to register Enhance Green AP event"); wma_handle->egap_support = false; } else { @@ -1097,45 +1098,6 @@ void wma_register_egap_event_handle(WMA_HANDLE handle) } else wma_handle->egap_support = false; } - -/** - * wmi_unified_pdev_green_ap_ps_enable_cmd() - enable green ap powersave command - * @wmi_handle: wmi handle - * @value: value - * - * Return: 0 for success or error code - */ -int32_t wmi_unified_pdev_green_ap_ps_enable_cmd(wmi_unified_t wmi_handle, - uint32_t value) -{ - wmi_pdev_green_ap_ps_enable_cmd_fixed_param *cmd; - wmi_buf_t buf; - int32_t len = sizeof(*cmd); - - WMA_LOGD("Set Green AP PS val %d", value); - - buf = wmi_buf_alloc(wmi_handle, len); - if (!buf) { - WMA_LOGP("%s: Green AP PS Mem Alloc Failed", __func__); - return -ENOMEM; - } - - cmd = (wmi_pdev_green_ap_ps_enable_cmd_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_pdev_green_ap_ps_enable_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (wmi_pdev_green_ap_ps_enable_cmd_fixed_param)); - cmd->reserved0 = 0; - cmd->enable = value; - - if (wmi_unified_cmd_send(wmi_handle, buf, len, - WMI_PDEV_GREEN_AP_PS_ENABLE_CMDID)) { - WMA_LOGE("Set Green AP PS param Failed val %d", value); - qdf_nbuf_free(buf); - return -EIO; - } - return 0; -} #endif /* FEATURE_GREEN_AP */ /** @@ -1450,13 +1412,13 @@ int wmi_unified_nat_keepalive_enable(tp_wma_handle wma, uint8_t vdev_id) } /** - * wmi_unified_csa_offload_enable() - sen CSA offload enable command + * wma_unified_csa_offload_enable() - sen CSA offload enable command * @wma: wma handle * @vdev_id: vdev id * * Return: 0 for success or error code */ -int wmi_unified_csa_offload_enable(tp_wma_handle wma, uint8_t vdev_id) +int wma_unified_csa_offload_enable(tp_wma_handle wma, uint8_t vdev_id) { wmi_csa_offload_enable_cmd_fixed_param *cmd; wmi_buf_t buf; @@ -2375,16 +2337,18 @@ void wma_register_dfs_event_handler(tp_wma_handle wma_handle) WMA_LOGD("%s:Phyerror Filtering offload is Disabled in ini", __func__); wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_PHYERR_EVENTID, - wma_unified_phyerr_rx_event_handler); + WMI_PHYERR_EVENTID, + wma_unified_phyerr_rx_event_handler, + WMA_RX_WORK_CTX); WMA_LOGD("%s: WMI_PHYERR_EVENTID event handler registered", __func__); } else { WMA_LOGD("%s:Phyerror Filtering offload is Enabled in ini", __func__); wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_DFS_RADAR_EVENTID, - wma_unified_dfs_radar_rx_event_handler); + WMI_DFS_RADAR_EVENTID, + wma_unified_dfs_radar_rx_event_handler, + WMA_RX_WORK_CTX); WMA_LOGD("%s:WMI_DFS_RADAR_EVENTID event handler registered", __func__); } @@ -2554,7 +2518,7 @@ QDF_STATUS wma_pktlog_wmi_send_cmd(WMA_HANDLE handle, WMITLV_TAG_STRUC_wmi_pdev_pktlog_disable_cmd_fixed_param, WMITLV_GET_STRUCT_TLVLEN (wmi_pdev_pktlog_disable_cmd_fixed_param)); - disable_cmd->reserved0 = 0; + disable_cmd->pdev_id = 0; if (wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len, WMI_PDEV_PKTLOG_DISABLE_CMDID)) { WMA_LOGE("failed to send pktlog disable cmdid"); @@ -3537,13 +3501,12 @@ void wma_enable_disable_wakeup_event(WMA_HANDLE handle, QDF_STATUS wma_enable_wow_in_fw(WMA_HANDLE handle) { tp_wma_handle wma = handle; - wmi_wow_enable_cmd_fixed_param *cmd; - wmi_buf_t buf; - int32_t len; int ret; struct hif_opaque_softc *scn; int host_credits; int wmi_pending_cmds; + struct wow_cmd_params param = {0}; + #ifdef CONFIG_CNSS tpAniSirGlobal pMac = cds_get_context(QDF_MODULE_ID_PE); @@ -3553,29 +3516,6 @@ QDF_STATUS wma_enable_wow_in_fw(WMA_HANDLE handle) } #endif /* CONFIG_CNSS */ - len = sizeof(wmi_wow_enable_cmd_fixed_param); - - buf = wmi_buf_alloc(wma->wmi_handle, len); - if (!buf) { - WMA_LOGE("%s: Failed allocate wmi buffer", __func__); - return QDF_STATUS_E_NOMEM; - } - - cmd = (wmi_wow_enable_cmd_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_wow_enable_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (wmi_wow_enable_cmd_fixed_param)); - cmd->enable = true; - if (htc_can_suspend_link(wma->htc_handle)) - cmd->pause_iface_config = WOW_IFACE_PAUSE_ENABLED; - else - cmd->pause_iface_config = WOW_IFACE_PAUSE_DISABLED; - - WMA_LOGI("suspend type: %s", - cmd->pause_iface_config == WOW_IFACE_PAUSE_ENABLED ? - "WOW_IFACE_PAUSE_ENABLED" : "WOW_IFACE_PAUSE_DISABLED"); - qdf_event_reset(&wma->target_suspend); wma->wow_nack = 0; @@ -3594,8 +3534,10 @@ QDF_STATUS wma_enable_wow_in_fw(WMA_HANDLE handle) #endif } - ret = wmi_unified_cmd_send(wma->wmi_handle, buf, len, - WMI_WOW_ENABLE_CMDID); + param.enable = true; + param.can_suspend_link = hif_can_suspend_link(wma->htc_handle); + ret = wmi_unified_wow_enable_send(wma->wmi_handle, ¶m, + WMA_WILDCARD_PDEV_ID); if (ret) { WMA_LOGE("Failed to enable wow in fw"); goto error; @@ -3665,7 +3607,6 @@ QDF_STATUS wma_enable_wow_in_fw(WMA_HANDLE handle) return QDF_STATUS_SUCCESS; error: - wmi_buf_free(buf); return QDF_STATUS_E_FAILURE; } @@ -6288,6 +6229,7 @@ void wma_send_regdomain_info_to_fw(uint32_t reg_dmn, uint16_t regdmn2G, tp_wma_handle wma = cds_get_context(QDF_MODULE_ID_WMA); int32_t cck_mask_val = 0; int ret = 0; + struct pdev_params pdev_param = {0}; if (NULL == wma) { WMA_LOGE("%s: wma context is NULL", __func__); @@ -6323,9 +6265,12 @@ void wma_send_regdomain_info_to_fw(uint32_t reg_dmn, uint16_t regdmn2G, cck_mask_val = 1; cck_mask_val |= (wma->self_gen_frm_pwr << 16); - ret = wmi_unified_pdev_set_param(wma->wmi_handle, - WMI_PDEV_PARAM_TX_CHAIN_MASK_CCK, - cck_mask_val); + pdev_param.param_id = WMI_PDEV_PARAM_TX_CHAIN_MASK_CCK; + pdev_param.param_value = cck_mask_val; + ret = wmi_unified_pdev_param_send(wma->wmi_handle, + &pdev_param, + WMA_WILDCARD_PDEV_ID); + if (ret) WMA_LOGE("failed to set PDEV tx_chain_mask_cck %d", ret); @@ -6526,58 +6471,37 @@ int wma_bus_resume(void) * @handle: wma handle * @disable_target_intr: disable target interrupt * - * Return: 0 for success or error code + * Return: QDF_STATUS_SUCCESS for success or error code */ -int wma_suspend_target(WMA_HANDLE handle, int disable_target_intr) +QDF_STATUS wma_suspend_target(WMA_HANDLE handle, int disable_target_intr) { tp_wma_handle wma_handle = (tp_wma_handle) handle; - wmi_pdev_suspend_cmd_fixed_param *cmd; - wmi_buf_t wmibuf; - uint32_t len = sizeof(*cmd); struct hif_opaque_softc *scn; - int ret; + QDF_STATUS status; + struct suspend_params param = {0}; + #ifdef CONFIG_CNSS tpAniSirGlobal pmac = cds_get_context(QDF_MODULE_ID_PE); #endif if (!wma_handle || !wma_handle->wmi_handle) { WMA_LOGE("WMA is closed. can not issue suspend cmd"); - return -EINVAL; + return QDF_STATUS_E_INVAL; } #ifdef CONFIG_CNSS if (NULL == pmac) { WMA_LOGE("%s: Unable to get PE context", __func__); - return -EINVAL; + return QDF_STATUS_E_INVAL; } #endif - - /* - * send the comand to Target to ignore the - * PCIE reset so as to ensure that Host and target - * states are in sync - */ - wmibuf = wmi_buf_alloc(wma_handle->wmi_handle, len); - if (wmibuf == NULL) - return -ENOMEM; - - cmd = (wmi_pdev_suspend_cmd_fixed_param *) wmi_buf_data(wmibuf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_pdev_suspend_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (wmi_pdev_suspend_cmd_fixed_param)); - if (disable_target_intr) { - cmd->suspend_opt = WMI_PDEV_SUSPEND_AND_DISABLE_INTR; - } else { - cmd->suspend_opt = WMI_PDEV_SUSPEND; - } qdf_event_reset(&wma_handle->target_suspend); - ret = wmi_unified_cmd_send(wma_handle->wmi_handle, wmibuf, len, - WMI_PDEV_SUSPEND_CMDID); - if (ret < 0) { - qdf_nbuf_free(wmibuf); - return ret; - } + param.disable_target_intr = disable_target_intr; + status = wmi_unified_suspend_send(wma_handle->wmi_handle, + ¶m, + WMA_WILDCARD_PDEV_ID); + if (QDF_IS_STATUS_ERROR(status)) + return status; wmi_set_target_suspend(wma_handle->wmi_handle, true); @@ -6597,7 +6521,7 @@ int wma_suspend_target(WMA_HANDLE handle, int disable_target_intr) WMA_LOGE("%s: LOGP is in progress, ignore!", __func__); } #endif - return -EFAULT; + return QDF_STATUS_E_FAULT; } scn = cds_get_context(QDF_MODULE_ID_HIF); @@ -6605,10 +6529,10 @@ int wma_suspend_target(WMA_HANDLE handle, int disable_target_intr) if (scn == NULL) { WMA_LOGE("%s: Failed to get HIF context", __func__); QDF_ASSERT(0); - return -EFAULT; + return QDF_STATUS_E_FAULT; } - return 0; + return QDF_STATUS_SUCCESS; } /** @@ -6639,40 +6563,26 @@ void wma_target_suspend_acknowledge(void *context) * wma_resume_target() - resume target * @handle: wma handle * - * Return: 0 for success or error code + * Return: QDF_STATUS_SUCCESS for success or error code */ -int wma_resume_target(WMA_HANDLE handle) +QDF_STATUS wma_resume_target(WMA_HANDLE handle) { int ret; tp_wma_handle wma = (tp_wma_handle) handle; - wmi_buf_t wmibuf; - wmi_pdev_resume_cmd_fixed_param *cmd; QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; #ifdef CONFIG_CNSS tpAniSirGlobal pMac = cds_get_context(QDF_MODULE_ID_PE); if (NULL == pMac) { WMA_LOGE("%s: Unable to get PE context", __func__); - return -EINVAL; + return QDF_STATUS_E_INVAL; } #endif /* CONFIG_CNSS */ - wmibuf = wmi_buf_alloc(wma->wmi_handle, sizeof(*cmd)); - if (wmibuf == NULL) { - return -ENOMEM; - } - cmd = (wmi_pdev_resume_cmd_fixed_param *) wmi_buf_data(wmibuf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_pdev_resume_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (wmi_pdev_resume_cmd_fixed_param)); - cmd->reserved0 = 0; qdf_event_reset(&wma->wma_resume_event); - ret = wmi_unified_cmd_send(wma->wmi_handle, wmibuf, sizeof(*cmd), - WMI_PDEV_RESUME_CMDID); - if (ret != EOK) { + qdf_status = wmi_unified_resume_send(wma->wmi_handle, + WMA_WILDCARD_PDEV_ID); + if (QDF_IS_STATUS_ERROR(qdf_status)) WMA_LOGE("Failed to send WMI_PDEV_RESUME_CMDID command"); - wmi_buf_free(wmibuf); - } qdf_status = qdf_wait_single_event(&(wma->wma_resume_event), WMA_RESUME_TIMEOUT); diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index b13523458f65..a4fe3fef8ec8 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -65,10 +65,7 @@ #endif /* REMOVE_PKT_LOG */ #include "dbglog_host.h" -/* FIXME: Inclusion of .c looks odd - * but this is how it is in internal codebase - */ -#include "wmi_version_whitelist.c" +#include "wmi_version_whitelist.h" #include "csr_api.h" #include "ol_fw.h" @@ -749,46 +746,6 @@ static int32_t wma_set_priv_cfg(tp_wma_handle wma_handle, } /** - * wmi_unified_pdev_set_param() - set pdev parameters - * @wmi_handle: wmi handle - * @param_id: parameter id - * @param_value: parameter value - * - * Return: 0 on success, errno on failure - */ -int -wmi_unified_pdev_set_param(wmi_unified_t wmi_handle, WMI_PDEV_PARAM param_id, - uint32_t param_value) -{ - int ret; - wmi_pdev_set_param_cmd_fixed_param *cmd; - wmi_buf_t buf; - uint16_t len = sizeof(*cmd); - - buf = wmi_buf_alloc(wmi_handle, len); - if (!buf) { - WMA_LOGE("%s:wmi_buf_alloc failed", __func__); - return -ENOMEM; - } - cmd = (wmi_pdev_set_param_cmd_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_pdev_set_param_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (wmi_pdev_set_param_cmd_fixed_param)); - cmd->reserved0 = 0; - cmd->param_id = param_id; - cmd->param_value = param_value; - WMA_LOGD("Setting pdev param = %x, value = %u", param_id, param_value); - ret = wmi_unified_cmd_send(wmi_handle, buf, len, - WMI_PDEV_SET_PARAM_CMDID); - if (ret != EOK) { - WMA_LOGE("Failed to send set param command ret = %d", ret); - wmi_buf_free(buf); - } - return ret; -} - -/** * wma_set_modulated_dtim() - function to configure modulated dtim * @wma: wma handle * @privcmd: structure containing parameters @@ -805,7 +762,7 @@ static void wma_set_modulated_dtim(tp_wma_handle wma, &wma->interfaces[vdev_id]; bool prev_dtim_enabled; uint32_t listen_interval; - int ret; + QDF_STATUS ret; iface->alt_modulated_dtim = privcmd->param_value; @@ -822,20 +779,20 @@ static void wma_set_modulated_dtim(tp_wma_handle wma, listen_interval = iface->alt_modulated_dtim * iface->dtimPeriod; - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, + ret = wma_vdev_set_param(wma->wmi_handle, privcmd->param_vdev_id, WMI_VDEV_PARAM_LISTEN_INTERVAL, listen_interval); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) /* Even if it fails, continue */ WMA_LOGW("Failed to set listen interval %d", listen_interval); - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, + ret = wma_vdev_set_param(wma->wmi_handle, privcmd->param_vdev_id, WMI_VDEV_PARAM_DTIM_POLICY , NORMAL_DTIM); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("Failed to Set to Normal DTIM policy"); } } @@ -851,10 +808,12 @@ static void wma_set_modulated_dtim(tp_wma_handle wma, static void wma_process_cli_set_cmd(tp_wma_handle wma, wma_cli_set_cmd_t *privcmd) { - int ret = 0, vid = privcmd->param_vdev_id, pps_val = 0; + int vid = privcmd->param_vdev_id, pps_val = 0; + QDF_STATUS ret; struct wma_txrx_node *intr = wma->interfaces; tpAniSirGlobal pMac = cds_get_context(QDF_MODULE_ID_PE); struct qpower_params *qparams = &intr[vid].config.qpower_params; + struct pdev_params pdev_param; WMA_LOGD("wmihandle %p", wma->wmi_handle); @@ -877,12 +836,12 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, case VDEV_CMD: WMA_LOGD("vdev id %d pid %d pval %d", privcmd->param_vdev_id, privcmd->param_id, privcmd->param_value); - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, + ret = wma_vdev_set_param(wma->wmi_handle, privcmd->param_vdev_id, privcmd->param_id, privcmd->param_value); - if (ret) { - WMA_LOGE("wmi_unified_vdev_set_param_send failed ret %d", + if (QDF_IS_STATUS_ERROR(ret)) { + WMA_LOGE("wma_vdev_set_param failed ret %d", ret); return; } @@ -895,11 +854,13 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, wma_update_txrx_chainmask(wma->num_rf_chains, &privcmd->param_value); } - ret = wmi_unified_pdev_set_param(wma->wmi_handle, - privcmd->param_id, - privcmd->param_value); - if (ret) { - WMA_LOGE("wmi_unified_vdev_set_param_send failed ret %d", + pdev_param.param_id = privcmd->param_id; + pdev_param.param_value = privcmd->param_value; + ret = wmi_unified_pdev_param_send(wma->wmi_handle, + &pdev_param, + WMA_WILDCARD_PDEV_ID); + if (QDF_IS_STATUS_ERROR(ret)) { + WMA_LOGE("wma_vdev_set_param failed ret %d", ret); return; } @@ -953,7 +914,7 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, htc_dump(wma->htc_handle, WD_DUMP, false); break; case GEN_PARAM_CRASH_INJECT: - ret = wmi_crash_inject(wma->wmi_handle, + ret = wma_crash_inject(wma, privcmd->param_value, privcmd->param_sec_value); break; @@ -1078,17 +1039,16 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, WMI_WLAN_PROFILE_GET_PROFILE_DATA_CMDID, ret); break; -#ifdef FEATURE_GREEN_AP case WMI_PDEV_GREEN_AP_PS_ENABLE_CMDID: /* Set the Green AP */ - ret = wmi_unified_pdev_green_ap_ps_enable_cmd - (wma->wmi_handle, privcmd->param_value); + ret = wmi_unified_green_ap_ps_send + (wma->wmi_handle, privcmd->param_value, + WMA_WILDCARD_PDEV_ID); if (ret) { WMA_LOGE("Set GreenAP Failed val %d", privcmd->param_value); } break; -#endif /* FEATURE_GREEN_AP */ default: WMA_LOGE("Invalid param id 0x%x", privcmd->param_id); @@ -1174,7 +1134,7 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, WMA_LOGD("QPOWER CLI CMD:Ps Poll Cnt val %d", privcmd->param_value); /* Set the QPower Ps Poll Count */ - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vid, WMI_STA_PS_PARAM_QPOWER_PSPOLL_COUNT, privcmd->param_value); if (ret) { @@ -1188,7 +1148,7 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, WMA_LOGD("QPOWER CLI CMD:Max Tx Before wake val %d", privcmd->param_value); /* Set the QPower Max Tx Before Wake */ - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vid, WMI_STA_PS_PARAM_QPOWER_MAX_TX_BEFORE_WAKE, privcmd->param_value); if (ret) { @@ -1203,7 +1163,7 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, WMA_LOGD("QPOWER CLI CMD:Ps Poll Wake Inv val %d", privcmd->param_value); /* Set the QPower Spec Ps Poll Wake Inv */ - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vid, WMI_STA_PS_PARAM_QPOWER_SPEC_PSPOLL_WAKE_INTERVAL, privcmd->param_value); if (ret) { @@ -1218,7 +1178,7 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, WMA_LOGD("QPOWER CLI CMD:Spec NoData Ps Poll val %d", privcmd->param_value); /* Set the QPower Spec NoData PsPoll */ - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vid, WMI_STA_PS_PARAM_QPOWER_SPEC_MAX_SPEC_NODATA_PSPOLL, privcmd->param_value); if (ret) { @@ -1301,7 +1261,7 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, privcmd->param_vdev_id, &intr[vid].config.gtx_info); if (ret) { - WMA_LOGE("wmi_unified_vdev_set_param_send" + WMA_LOGE("wma_vdev_set_param" " failed ret %d", ret); return; } @@ -1445,7 +1405,7 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, break; } } else if (5 == privcmd->param_vp_dev) { - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, + ret = wma_vdev_set_param(wma->wmi_handle, privcmd->param_vdev_id, WMI_VDEV_PARAM_PACKET_POWERSAVE, pps_val); @@ -1476,15 +1436,32 @@ static int wma_process_fw_event(tp_wma_handle wma, } /** + * wmi_process_fw_event_tasklet_ctx() - process in tasklet context + * @ctx: handle to wmi + * @ev: wmi event buffer + * + * Event process by below function will be in tasket context, + * need to use this method only for time sensitive functions. + * + * Return: none + */ +static int wma_process_fw_event_tasklet_ctx(void *ctx, void *ev) +{ + wmi_process_fw_event(ctx, ev); + + return 0; +} + +/** * wma_process_fw_event_handler() - common event handler to serialize * event processing through mc_thread - * @wmi_handle: wmi handle - * @evt_buf: event buffer + * @ctx: wmi context + * @ev: event buffer + * @rx_ctx: rx execution context * * Return: 0 on success, errno on failure */ -int wma_process_fw_event_handler(struct wmi_unified *wmi_handle, - wmi_buf_t evt_buf) +static int wma_process_fw_event_mc_thread_ctx(void *ctx, void *ev) { wma_process_fw_event_params *params_buf; cds_msg_t cds_msg = { 0 }; @@ -1492,12 +1469,12 @@ int wma_process_fw_event_handler(struct wmi_unified *wmi_handle, params_buf = qdf_mem_malloc(sizeof(wma_process_fw_event_params)); if (!params_buf) { WMA_LOGE("%s: Failed alloc memory for params_buf", __func__); - qdf_nbuf_free(evt_buf); + qdf_nbuf_free(ev); return -ENOMEM; } - params_buf->wmi_handle = wmi_handle; - params_buf->evt_buf = evt_buf; + params_buf->wmi_handle = (struct wmi_unified *)ctx; + params_buf->evt_buf = (wmi_buf_t *)ev; cds_msg.type = WMA_PROCESS_FW_EVENT; cds_msg.bodyptr = params_buf; @@ -1507,7 +1484,7 @@ int wma_process_fw_event_handler(struct wmi_unified *wmi_handle, cds_mq_post_message(CDS_MQ_ID_WMA, &cds_msg)) { WMA_LOGP("%s: Failed to post WMA_PROCESS_FW_EVENT msg", __func__); - qdf_nbuf_free(evt_buf); + qdf_nbuf_free(ev); qdf_mem_free(params_buf); return -EFAULT; } @@ -1516,6 +1493,31 @@ int wma_process_fw_event_handler(struct wmi_unified *wmi_handle, } +/** + * wma_process_fw_event_handler() - common event handler to serialize + * event processing through mc_thread + * @ctx: wmi context + * @ev: event buffer + * @rx_ctx: rx execution context + * + * Return: 0 on success, errno on failure + */ +int wma_process_fw_event_handler(void *ctx, void *ev, uint8_t rx_ctx) +{ + int err = 0; + + if (rx_ctx == WMA_RX_SERIALIZER_CTX) { + err = wma_process_fw_event_mc_thread_ctx(ctx, ev); + } else if (rx_ctx == WMA_RX_TASKLET_CTX) { + wma_process_fw_event_tasklet_ctx(ctx, ev); + } else { + WMA_LOGE("%s: invalid wmi event execution context", __func__); + qdf_nbuf_free(ev); + } + + return err; +} + #ifdef QCA_LL_TX_FLOW_CONTROL_V2 /** * ol_cfg_set_flow_control_parameters() - set flow control parameters @@ -1597,6 +1599,9 @@ QDF_STATUS wma_open(void *cds_context, void *wmi_handle; QDF_STATUS qdf_status; struct txrx_pdev_cfg_param_t olCfg = { 0 }; + struct wmi_rx_ops ops; + + bool use_cookie = false; WMA_LOGD("%s: Enter", __func__); @@ -1632,9 +1637,11 @@ QDF_STATUS wma_open(void *cds_context, qdf_wake_lock_create(&wma_handle->wow_wake_lock, "wlan_wow_wl"); } + /* Attach mc_thread context processing function */ + ops.wma_process_fw_event_handler_cbk = wma_process_fw_event_handler; /* attach the wmi */ - wmi_handle = wmi_unified_attach(wma_handle, - wma_process_fw_event_handler); + wmi_handle = wmi_unified_attach(wma_handle, NULL, + WMI_TLV_TARGET, use_cookie, &ops); if (!wmi_handle) { WMA_LOGP("%s: failed to attach WMI", __func__); qdf_status = QDF_STATUS_E_NOMEM; @@ -1642,7 +1649,18 @@ QDF_STATUS wma_open(void *cds_context, } WMA_LOGA("WMA --> wmi_unified_attach - success"); - + wmi_unified_register_event_handler(wmi_handle, + WMI_SERVICE_READY_EVENTID, + wma_rx_service_ready_event, + WMA_RX_SERIALIZER_CTX); + wmi_unified_register_event_handler(wmi_handle, + WMI_SERVICE_READY_EXT_EVENTID, + wma_rx_service_ready_ext_event, + WMA_RX_SERIALIZER_CTX); + wmi_unified_register_event_handler(wmi_handle, + WMI_READY_EVENTID, + wma_rx_ready_event, + WMA_RX_SERIALIZER_CTX); /* Save the WMI & HTC handle */ wma_handle->wmi_handle = wmi_handle; wma_handle->htc_handle = htc_handle; @@ -1763,12 +1781,14 @@ QDF_STATUS wma_open(void *cds_context, wma_handle->max_bssid); /* Register the debug print event handler */ wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_DEBUG_PRINT_EVENTID, - wma_unified_debug_print_event_handler); + WMI_DEBUG_PRINT_EVENTID, + wma_unified_debug_print_event_handler, + WMA_RX_SERIALIZER_CTX); /* Register profiling event Handler */ wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_WLAN_PROFILE_DATA_EVENTID, - wma_profile_data_report_event_handler); + wma_profile_data_report_event_handler, + WMA_RX_SERIALIZER_CTX); wma_handle->tgt_cfg_update_cb = tgt_cfg_cb; wma_handle->dfs_radar_indication_cb = radar_ind_cb; @@ -1845,43 +1865,52 @@ QDF_STATUS wma_open(void *cds_context, /* Register vdev start response event handler */ wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_VDEV_START_RESP_EVENTID, - wma_vdev_start_resp_handler); + wma_vdev_start_resp_handler, + WMA_RX_SERIALIZER_CTX); /* Register vdev stop response event handler */ wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_VDEV_STOPPED_EVENTID, - wma_vdev_stop_resp_handler); + wma_vdev_stop_resp_handler, + WMA_RX_SERIALIZER_CTX); /* register for STA kickout function */ wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_PEER_STA_KICKOUT_EVENTID, - wma_peer_sta_kickout_event_handler); + wma_peer_sta_kickout_event_handler, + WMA_RX_SERIALIZER_CTX); /* register for stats response event */ wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_UPDATE_STATS_EVENTID, - wma_stats_event_handler); + wma_stats_event_handler, + WMA_RX_SERIALIZER_CTX); /* register for linkspeed response event */ wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_PEER_ESTIMATED_LINKSPEED_EVENTID, - wma_link_speed_event_handler); + wma_link_speed_event_handler, + WMA_RX_SERIALIZER_CTX); #ifdef FEATURE_OEM_DATA_SUPPORT wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_OEM_CAPABILITY_EVENTID, - wma_oem_capability_event_callback); + wma_oem_capability_event_callback, + WMA_RX_SERIALIZER_CTX); wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_OEM_MEASUREMENT_REPORT_EVENTID, - wma_oem_measurement_report_event_callback); + WMI_OEM_MEASUREMENT_REPORT_EVENTID, + wma_oem_measurement_report_event_callback, + WMA_RX_SERIALIZER_CTX); wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_OEM_ERROR_REPORT_EVENTID, - wma_oem_error_report_event_callback); + wma_oem_error_report_event_callback, + WMA_RX_SERIALIZER_CTX); wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_OEM_RESPONSE_EVENTID, - wma_oem_data_response_handler); + wma_oem_data_response_handler, + WMA_RX_SERIALIZER_CTX); #endif /* FEATURE_OEM_DATA_SUPPORT */ /* * Register appropriate DFS phyerr event handler for @@ -1893,18 +1922,21 @@ QDF_STATUS wma_open(void *cds_context, /* Register peer change event handler */ wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_PEER_STATE_EVENTID, - wma_peer_state_change_event_handler); + wma_peer_state_change_event_handler, + WMA_RX_WORK_CTX); /* Register beacon tx complete event id. The event is required * for sending channel switch announcement frames */ wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_OFFLOAD_BCN_TX_STATUS_EVENTID, - wma_unified_bcntx_status_event_handler); + WMI_OFFLOAD_BCN_TX_STATUS_EVENTID, + wma_unified_bcntx_status_event_handler, + WMA_RX_SERIALIZER_CTX); wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_UPDATE_VDEV_RATE_STATS_EVENTID, - wma_link_status_event_handler); + wma_link_status_event_handler, + WMA_RX_SERIALIZER_CTX); #ifdef WLAN_FEATURE_LINK_LAYER_STATS /* Register event handler for processing Link Layer Stats * response from the FW @@ -1919,7 +1951,8 @@ QDF_STATUS wma_open(void *cds_context, */ wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_UPDATE_FW_MEM_DUMP_EVENTID, - wma_fw_mem_dump_event_handler); + wma_fw_mem_dump_event_handler, + WMA_RX_SERIALIZER_CTX); /* Firmware debug log */ qdf_status = dbglog_init(wma_handle->wmi_handle); @@ -1956,25 +1989,29 @@ QDF_STATUS wma_open(void *cds_context, #ifdef FEATURE_WLAN_TDLS wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_TDLS_PEER_EVENTID, - wma_tdls_event_handler); + wma_tdls_event_handler, + WMA_RX_SERIALIZER_CTX); #endif /* FEATURE_WLAN_TDLS */ /* register for install key completion event */ wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID, - wma_vdev_install_key_complete_event_handler); + WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID, + wma_vdev_install_key_complete_event_handler, + WMA_RX_SERIALIZER_CTX); #ifdef WLAN_FEATURE_NAN /* register for nan response event */ wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_NAN_EVENTID, - wma_nan_rsp_event_handler); + wma_nan_rsp_event_handler, + WMA_RX_SERIALIZER_CTX); #endif /* WLAN_FEATURE_NAN */ #ifdef WLAN_FEATURE_STATS_EXT /* register for extended stats event */ wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_STATS_EXT_EVENTID, - wma_stats_ext_event_handler); + wma_stats_ext_event_handler, + WMA_RX_SERIALIZER_CTX); #endif /* WLAN_FEATURE_STATS_EXT */ #ifdef FEATURE_WLAN_EXTSCAN wma_register_extscan_event_handler(wma_handle); @@ -1985,27 +2022,32 @@ QDF_STATUS wma_open(void *cds_context, #ifdef WLAN_FEATURE_ROAM_OFFLOAD wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_ROAM_SYNCH_EVENTID, - wma_roam_synch_event_handler); + wma_roam_synch_event_handler, + WMA_RX_SERIALIZER_CTX); #endif /* WLAN_FEATURE_ROAM_OFFLOAD */ wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_RSSI_BREACH_EVENTID, - wma_rssi_breached_event_handler); + wma_rssi_breached_event_handler, + WMA_RX_SERIALIZER_CTX); qdf_wake_lock_create(&wma_handle->wmi_cmd_rsp_wake_lock, - "wlan_fw_rsp_wakelock"); + "wlan_fw_rsp_wakelock"); wma_handle->wmi_cmd_rsp_runtime_lock = qdf_runtime_lock_init("wlan_fw_rsp_runtime_lock"); /* Register peer assoc conf event handler */ wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_PEER_ASSOC_CONF_EVENTID, - wma_peer_assoc_conf_handler); + wma_peer_assoc_conf_handler, + WMA_RX_SERIALIZER_CTX); wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_VDEV_DELETE_RESP_EVENTID, - wma_vdev_delete_handler); + wma_vdev_delete_handler, + WMA_RX_SERIALIZER_CTX); wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_PEER_DELETE_RESP_EVENTID, - wma_peer_delete_handler); + wma_peer_delete_handler, + WMA_RX_SERIALIZER_CTX); return QDF_STATUS_SUCCESS; err_dbglog_init: @@ -2638,7 +2680,8 @@ QDF_STATUS wma_start(void *cds_ctx) status = wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_SCAN_EVENTID, - wma_scan_event_callback); + wma_scan_event_callback, + WMA_RX_SERIALIZER_CTX); if (0 != status) { WMA_LOGP("%s: Failed to register scan callback", __func__); qdf_status = QDF_STATUS_E_FAILURE; @@ -2647,7 +2690,8 @@ QDF_STATUS wma_start(void *cds_ctx) status = wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_ROAM_EVENTID, - wma_roam_event_callback); + wma_roam_event_callback, + WMA_RX_WORK_CTX); if (0 != status) { WMA_LOGP("%s: Failed to register Roam callback", __func__); qdf_status = QDF_STATUS_E_FAILURE; @@ -2656,7 +2700,8 @@ QDF_STATUS wma_start(void *cds_ctx) status = wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_WOW_WAKEUP_HOST_EVENTID, - wma_wow_wakeup_host_event); + wma_wow_wakeup_host_event, + WMA_RX_TASKLET_CTX); if (status) { WMA_LOGP("%s: Failed to register wow wakeup host event handler", __func__); @@ -2666,7 +2711,8 @@ QDF_STATUS wma_start(void *cds_ctx) status = wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_PDEV_RESUME_EVENTID, - wma_pdev_resume_event_handler); + wma_pdev_resume_event_handler, + WMA_RX_TASKLET_CTX); if (status) { WMA_LOGP("%s: Failed to register PDEV resume event handler", __func__); @@ -2681,8 +2727,9 @@ QDF_STATUS wma_start(void *cds_ctx) WMA_LOGD("FW supports pno offload, registering nlo match handler"); status = wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_NLO_MATCH_EVENTID, - wma_nlo_match_evt_handler); + WMI_NLO_MATCH_EVENTID, + wma_nlo_match_evt_handler, + WMA_RX_SERIALIZER_CTX); if (status) { WMA_LOGE("Failed to register nlo match event cb"); qdf_status = QDF_STATUS_E_FAILURE; @@ -2690,8 +2737,9 @@ QDF_STATUS wma_start(void *cds_ctx) } status = wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_NLO_SCAN_COMPLETE_EVENTID, - wma_nlo_scan_cmp_evt_handler); + WMI_NLO_SCAN_COMPLETE_EVENTID, + wma_nlo_scan_cmp_evt_handler, + WMA_RX_SERIALIZER_CTX); if (status) { WMA_LOGE("Failed to register nlo scan comp event cb"); qdf_status = QDF_STATUS_E_FAILURE; @@ -2703,16 +2751,18 @@ QDF_STATUS wma_start(void *cds_ctx) #if defined(QCA_LL_LEGACY_TX_FLOW_CONTROL) || defined(QCA_LL_TX_FLOW_CONTROL_V2) WMA_LOGE("MCC TX Pause Event Handler register"); status = wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_TX_PAUSE_EVENTID, - wma_mcc_vdev_tx_pause_evt_handler); + WMI_TX_PAUSE_EVENTID, + wma_mcc_vdev_tx_pause_evt_handler, + WMA_RX_TASKLET_CTX); #endif /* QCA_LL_LEGACY_TX_FLOW_CONTROL */ #ifdef FEATURE_WLAN_CH_AVOID WMA_LOGD("Registering channel to avoid handler"); status = wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_WLAN_FREQ_AVOID_EVENTID, - wma_channel_avoid_evt_handler); + WMI_WLAN_FREQ_AVOID_EVENTID, + wma_channel_avoid_evt_handler, + WMA_RX_SERIALIZER_CTX); if (status) { WMA_LOGE("Failed to register channel to avoid event cb"); qdf_status = QDF_STATUS_E_FAILURE; @@ -2722,8 +2772,9 @@ QDF_STATUS wma_start(void *cds_ctx) #ifdef FEATURE_WLAN_AUTO_SHUTDOWN WMA_LOGD("Registering auto shutdown handler"); status = wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_HOST_AUTO_SHUTDOWN_EVENTID, - wma_auto_shutdown_event_handler); + WMI_HOST_AUTO_SHUTDOWN_EVENTID, + wma_auto_shutdown_event_handler, + WMA_RX_SERIALIZER_CTX); if (status) { WMA_LOGE("Failed to register WMI Auto shutdown event handler"); qdf_status = QDF_STATUS_E_FAILURE; @@ -2731,8 +2782,9 @@ QDF_STATUS wma_start(void *cds_ctx) } #endif /* FEATURE_WLAN_AUTO_SHUTDOWN */ status = wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_THERMAL_MGMT_EVENTID, - wma_thermal_mgmt_evt_handler); + WMI_THERMAL_MGMT_EVENTID, + wma_thermal_mgmt_evt_handler, + WMA_RX_SERIALIZER_CTX); if (status) { WMA_LOGE("Failed to register thermal mitigation event cb"); qdf_status = QDF_STATUS_E_FAILURE; @@ -2775,8 +2827,9 @@ QDF_STATUS wma_start(void *cds_ctx) /* Initialize the get temperature event handler */ status = wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_PDEV_TEMPERATURE_EVENTID, - wma_pdev_temperature_evt_handler); + WMI_PDEV_TEMPERATURE_EVENTID, + wma_pdev_temperature_evt_handler, + WMA_RX_SERIALIZER_CTX); if (status != QDF_STATUS_SUCCESS) { WMA_LOGE("Failed to register get_temperature event cb"); qdf_status = QDF_STATUS_E_FAILURE; @@ -2786,7 +2839,8 @@ QDF_STATUS wma_start(void *cds_ctx) /* Initialize the log flush complete event handler */ status = wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_DEBUG_MESG_FLUSH_COMPLETE_EVENTID, - wma_flush_complete_evt_handler); + wma_flush_complete_evt_handler, + WMA_RX_SERIALIZER_CTX); if (status != QDF_STATUS_SUCCESS) { WMA_LOGE("Failed to register log flush complete event cb"); qdf_status = QDF_STATUS_E_FAILURE; @@ -2796,7 +2850,8 @@ QDF_STATUS wma_start(void *cds_ctx) /* Initialize the WMI_SOC_SET_HW_MODE_RESP_EVENTID event handler */ status = wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_SOC_SET_HW_MODE_RESP_EVENTID, - wma_soc_set_hw_mode_resp_evt_handler); + wma_soc_set_hw_mode_resp_evt_handler, + WMA_RX_SERIALIZER_CTX); if (status != QDF_STATUS_SUCCESS) { WMA_LOGE("Failed to register set hw mode resp event cb"); qdf_status = QDF_STATUS_E_FAILURE; @@ -2806,7 +2861,8 @@ QDF_STATUS wma_start(void *cds_ctx) /* Initialize the WMI_SOC_HW_MODE_TRANSITION_EVENTID event handler */ status = wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_SOC_HW_MODE_TRANSITION_EVENTID, - wma_soc_hw_mode_transition_evt_handler); + wma_soc_hw_mode_transition_evt_handler, + WMA_RX_SERIALIZER_CTX); if (status != QDF_STATUS_SUCCESS) { WMA_LOGE("Failed to register hw mode transition event cb"); qdf_status = QDF_STATUS_E_FAILURE; @@ -2816,7 +2872,8 @@ QDF_STATUS wma_start(void *cds_ctx) /* Initialize the set dual mac configuration event handler */ status = wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_SOC_SET_DUAL_MAC_CONFIG_RESP_EVENTID, - wma_soc_set_dual_mode_config_resp_evt_handler); + wma_soc_set_dual_mode_config_resp_evt_handler, + WMA_RX_SERIALIZER_CTX); if (status != QDF_STATUS_SUCCESS) { WMA_LOGE("Failed to register hw mode transition event cb"); qdf_status = QDF_STATUS_E_FAILURE; @@ -3800,7 +3857,8 @@ done: * * Return: none */ -void wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info) +int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info, + uint32_t length) { wmi_buf_t buf; uint32_t len; @@ -3817,13 +3875,13 @@ void wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info) param_buf = (WMI_SERVICE_READY_EVENTID_param_tlvs *) cmd_param_info; if (!(handle && param_buf)) { WMA_LOGP("%s: Invalid arguments", __func__); - return; + return -EINVAL; } ev = param_buf->fixed_param; if (!ev) { WMA_LOGP("%s: Invalid buffer", __func__); - return; + return -EINVAL; } WMA_LOGA("WMA <-- WMI_SERVICE_READY_EVENTID"); @@ -3906,10 +3964,11 @@ void wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info) /* SWBA event handler for beacon transmission */ status = wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_HOST_SWBA_EVENTID, - wma_beacon_swba_handler); + wma_beacon_swba_handler, + WMA_RX_SERIALIZER_CTX); if (status) { WMA_LOGE("Failed to register swba beacon event cb"); - return; + return -EINVAL; } #ifdef WLAN_FEATURE_LPSS wma_handle->lpss_support = @@ -3930,11 +3989,12 @@ void wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info) WMA_LOGD("%s: FW support CSA offload capability", __func__); status = wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_CSA_HANDLING_EVENTID, - wma_csa_offload_handler); + WMI_CSA_HANDLING_EVENTID, + wma_csa_offload_handler, + WMA_RX_SERIALIZER_CTX); if (status) { WMA_LOGE("Failed to register CSA offload event cb"); - return; + return -EINVAL; } } @@ -3944,7 +4004,7 @@ void wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info) status = wmi_desc_pool_init(wma_handle, WMI_DESC_POOL_MAX); if (status) { WMA_LOGE("Failed to initialize wmi descriptor pool"); - return; + return -EINVAL; } /* * Register Tx completion event handler for MGMT Tx over WMI @@ -3953,10 +4013,11 @@ void wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info) status = wmi_unified_register_event_handler( wma_handle->wmi_handle, WMI_MGMT_TX_COMPLETION_EVENTID, - wma_mgmt_tx_completion_handler); + wma_mgmt_tx_completion_handler, + WMA_RX_SERIALIZER_CTX); if (status) { WMA_LOGE("Failed to register MGMT over WMI completion handler"); - return; + return -EINVAL; } } else { @@ -3967,29 +4028,32 @@ void wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info) WMI_SERVICE_GTK_OFFLOAD)) { status = wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_GTK_OFFLOAD_STATUS_EVENTID, - wma_gtk_offload_status_event); + WMI_GTK_OFFLOAD_STATUS_EVENTID, + wma_gtk_offload_status_event, + WMA_RX_SERIALIZER_CTX); if (status) { WMA_LOGE("Failed to register GTK offload event cb"); - return; + return -EINVAL; } } #endif /* WLAN_FEATURE_GTK_OFFLOAD */ status = wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_P2P_NOA_EVENTID, - wma_p2p_noa_event_handler); + wma_p2p_noa_event_handler, + WMA_RX_SERIALIZER_CTX); if (status) { WMA_LOGE("Failed to register WMI_P2P_NOA_EVENTID callback"); - return; + return -EINVAL; } status = wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_TBTTOFFSET_UPDATE_EVENTID, - wma_tbttoffset_update_event_handler); + WMI_TBTTOFFSET_UPDATE_EVENTID, + wma_tbttoffset_update_event_handler, + WMA_RX_SERIALIZER_CTX); if (status) { WMA_LOGE ("Failed to register WMI_TBTTOFFSET_UPDATE_EVENTID callback"); - return; + return -EINVAL; } /* register the Enhanced Green AP event handler */ @@ -3998,10 +4062,11 @@ void wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info) /* Initialize the log supported event handler */ status = wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_DIAG_EVENT_LOG_SUPPORTED_EVENTID, - wma_log_supported_evt_handler); + wma_log_supported_evt_handler, + WMA_RX_SERIALIZER_CTX); if (status != QDF_STATUS_SUCCESS) { WMA_LOGE("Failed to register log supported event cb"); - return; + return -EINVAL; } qdf_mem_copy(target_cap.wmi_service_bitmap, @@ -4017,7 +4082,7 @@ void wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info) buf = wma_setup_wmi_init_msg(wma_handle, ev, param_buf, &len); if (!buf) { WMA_LOGE("Failed to setup buffer for wma init command"); - return; + return -EINVAL; } /* A host, which supports WMI_SERVICE_READY_EXT_EVENTID, would need to @@ -4036,7 +4101,7 @@ void wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info) if (status != EOK) { WMA_LOGE("Failed to send WMI_INIT_CMDID command"); wmi_buf_free(buf); - return; + return -EINVAL; } } else { /* Need to save and send the WMI INIT command only after @@ -4055,16 +4120,20 @@ void wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info) WMA_LOGA("%s: WMA waiting for WMI_SERVICE_READY_EXT_EVENTID", __func__); } + + return 0; } /** * wma_rx_service_ready_ext_event() - evt handler for sevice ready ext event. * @handle: wma handle * @event: params of the service ready extended event + * @length: param length * * Return: none */ -void wma_rx_service_ready_ext_event(WMA_HANDLE handle, void *event) +int wma_rx_service_ready_ext_event(void *handle, uint8_t *event, + uint32_t length) { tp_wma_handle wma_handle = (tp_wma_handle) handle; WMI_SERVICE_READY_EXT_EVENTID_param_tlvs *param_buf; @@ -4076,26 +4145,26 @@ void wma_rx_service_ready_ext_event(WMA_HANDLE handle, void *event) if (!wma_handle) { WMA_LOGP("%s: Invalid WMA handle", __func__); - return; + return -EINVAL; } param_buf = (WMI_SERVICE_READY_EXT_EVENTID_param_tlvs *) event; if (!param_buf) { WMA_LOGP("%s: Invalid event", __func__); - return; + return -EINVAL; } ev = param_buf->fixed_param; if (!ev) { WMA_LOGP("%s: Invalid buffer", __func__); - return; + return -EINVAL; } WMA_LOGA("WMA <-- WMI_SERVICE_READY_EXT_EVENTID"); if (!wma_handle->saved_wmi_init_cmd.buf) { WMA_LOGP("Service ready ext event w/o WMI_SERVICE_EXT_MSG!"); - return; + return -EINVAL; } WMA_LOGA("%s: Defaults: scan config:%x FW mode config:%x", @@ -4105,7 +4174,7 @@ void wma_rx_service_ready_ext_event(WMA_HANDLE handle, void *event) ret = qdf_mc_timer_stop(&wma_handle->service_ready_ext_timer); if (!QDF_IS_STATUS_SUCCESS(ret)) { WMA_LOGP("Failed to stop the service ready ext timer"); - return; + return -EINVAL; } WMA_LOGA("WMA --> WMI_INIT_CMDID"); @@ -4126,6 +4195,8 @@ void wma_rx_service_ready_ext_event(WMA_HANDLE handle, void *event) wma_init_scan_fw_mode_config(wma_handle, ev->default_conc_scan_config_bits, ev->default_fw_config_bits); + + return 0; } /** @@ -4133,10 +4204,12 @@ void wma_rx_service_ready_ext_event(WMA_HANDLE handle, void *event) * wmi rx ready event. * @handle: wma handle * @cmd_param_info: command params info + * @length: param length * * Return: none */ -void wma_rx_ready_event(WMA_HANDLE handle, void *cmd_param_info) +int wma_rx_ready_event(void *handle, uint8_t *cmd_param_info, + uint32_t length) { tp_wma_handle wma_handle = (tp_wma_handle) handle; WMI_READY_EVENTID_param_tlvs *param_buf = NULL; @@ -4148,7 +4221,7 @@ void wma_rx_ready_event(WMA_HANDLE handle, void *cmd_param_info) if (!(wma_handle && param_buf)) { WMA_LOGP("%s: Invalid arguments", __func__); QDF_ASSERT(0); - return; + return -EINVAL; } WMA_LOGA("WMA <-- WMI_READY_EVENTID"); @@ -4206,6 +4279,8 @@ void wma_rx_ready_event(WMA_HANDLE handle, void *cmd_param_info) qdf_event_set(&wma_handle->wma_ready_event); WMA_LOGD("Exit"); + + return 0; } /** @@ -4345,7 +4420,7 @@ QDF_STATUS wma_set_ppsconfig(uint8_t vdev_id, uint16_t pps_param, pkt_pwr_save_config: WMA_LOGD("vdev_id:%d val:0x%x pps_val:0x%x", vdev_id, val, pps_val); - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_PACKET_POWERSAVE, pps_val); break; @@ -4424,18 +4499,18 @@ QDF_STATUS wma_process_set_miracast(tp_wma_handle wma, uint32_t *miracast_val) static QDF_STATUS wma_config_stats_factor(tp_wma_handle wma, struct sir_stats_avg_factor *avg_factor) { - int ret; + QDF_STATUS ret; if (NULL == wma || NULL == avg_factor) { WMA_LOGE("%s: Invalid input of stats avg factor", __func__); return QDF_STATUS_E_FAILURE; } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, + ret = wma_vdev_set_param(wma->wmi_handle, avg_factor->vdev_id, WMI_VDEV_PARAM_STATS_AVG_FACTOR, avg_factor->stats_avg_factor); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE(" failed to set avg_factor for vdev_id %d", avg_factor->vdev_id); } @@ -4459,18 +4534,18 @@ static QDF_STATUS wma_config_stats_factor(tp_wma_handle wma, static QDF_STATUS wma_config_guard_time(tp_wma_handle wma, struct sir_guard_time_request *guard_time) { - int ret; + QDF_STATUS ret; if (NULL == wma || NULL == guard_time) { WMA_LOGE("%s: Invalid input of guard time", __func__); return QDF_STATUS_E_FAILURE; } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, + ret = wma_vdev_set_param(wma->wmi_handle, guard_time->vdev_id, WMI_VDEV_PARAM_RX_LEAK_WINDOW, guard_time->guard_time); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE(" failed to set guard time for vdev_id %d", guard_time->vdev_id); } @@ -5635,13 +5710,18 @@ QDF_STATUS wma_send_soc_set_dual_mac_config(tp_wma_handle wma_handle, * This function will send a command to FW in order to simulate different * kinds of FW crashes. * - * Return: 0 for success or reasons for failure + * Return: QDF_STATUS_SUCCESS for success or error code */ -int wma_crash_inject(tp_wma_handle wma_handle, uint32_t type, +QDF_STATUS wma_crash_inject(tp_wma_handle wma_handle, uint32_t type, uint32_t delay_time_ms) { - return wmi_crash_inject(wma_handle->wmi_handle, type, delay_time_ms); + struct crash_inject param; + param.type = type; + param.delay_time_ms = delay_time_ms; + + return wmi_crash_inject(wma_handle->wmi_handle, ¶m); } + #if defined(FEATURE_LRO) /** * wma_lro_init() - sends LRO configuration to FW diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index 9945f9c8e670..1d4804e8ae5d 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -566,6 +566,7 @@ void wma_set_sap_keepalive(tp_wma_handle wma, uint8_t vdev_id) { uint32_t min_inactive_time, max_inactive_time, max_unresponsive_time; struct sAniSirGlobal *mac = cds_get_context(QDF_MODULE_ID_PE); + QDF_STATUS status; if (NULL == mac) { WMA_LOGE("%s: Failed to get mac", __func__); @@ -577,19 +578,25 @@ void wma_set_sap_keepalive(tp_wma_handle wma, uint8_t vdev_id) min_inactive_time = max_inactive_time / 2; - if (wmi_unified_vdev_set_param_send(wma->wmi_handle, - vdev_id, WMI_VDEV_PARAM_AP_KEEPALIVE_MIN_IDLE_INACTIVE_TIME_SECS, - min_inactive_time)) + status = wma_vdev_set_param(wma->wmi_handle, + vdev_id, + WMI_VDEV_PARAM_AP_KEEPALIVE_MIN_IDLE_INACTIVE_TIME_SECS, + min_inactive_time); + if (QDF_IS_STATUS_ERROR(status)) WMA_LOGE("Failed to Set AP MIN IDLE INACTIVE TIME"); - if (wmi_unified_vdev_set_param_send(wma->wmi_handle, - vdev_id, WMI_VDEV_PARAM_AP_KEEPALIVE_MAX_IDLE_INACTIVE_TIME_SECS, - max_inactive_time)) + status = wma_vdev_set_param(wma->wmi_handle, + vdev_id, + WMI_VDEV_PARAM_AP_KEEPALIVE_MAX_IDLE_INACTIVE_TIME_SECS, + max_inactive_time); + if (QDF_IS_STATUS_ERROR(status)) WMA_LOGE("Failed to Set AP MAX IDLE INACTIVE TIME"); - if (wmi_unified_vdev_set_param_send(wma->wmi_handle, - vdev_id, WMI_VDEV_PARAM_AP_KEEPALIVE_MAX_UNRESPONSIVE_TIME_SECS, - max_unresponsive_time)) + status = wma_vdev_set_param(wma->wmi_handle, + vdev_id, + WMI_VDEV_PARAM_AP_KEEPALIVE_MAX_UNRESPONSIVE_TIME_SECS, + max_unresponsive_time); + if (QDF_IS_STATUS_ERROR(status)) WMA_LOGE("Failed to Set MAX UNRESPONSIVE TIME"); WMA_LOGD("%s:vdev_id:%d min_inactive_time: %u max_inactive_time: %u" @@ -1061,7 +1068,7 @@ int32_t wmi_unified_send_peer_assoc(tp_wma_handle wma, #ifdef FEATURE_WLAN_WAPI if (params->encryptType == eSIR_ED_WPI) { - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, + ret = wma_vdev_set_param(wma->wmi_handle, params->smesessionId, WMI_VDEV_PARAM_DROP_UNENCRY, false); @@ -1228,16 +1235,16 @@ int wmi_unified_vdev_set_gtx_cfg_send(wmi_unified_t wmi_handle, uint32_t if_id, void wma_update_protection_mode(tp_wma_handle wma, uint8_t vdev_id, uint8_t llbcoexist) { - int ret; + QDF_STATUS ret; enum ieee80211_protmode prot_mode; prot_mode = llbcoexist ? IEEE80211_PROT_CTSONLY : IEEE80211_PROT_NONE; - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_PROTECTION_MODE, prot_mode); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("Failed to send wmi protection mode cmd"); else WMA_LOGD("Updated protection mode %d to target", prot_mode); @@ -1255,13 +1262,13 @@ static void wma_update_beacon_interval(tp_wma_handle wma, uint8_t vdev_id, uint16_t beaconInterval) { - int ret; + QDF_STATUS ret; - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_BEACON_INTERVAL, beaconInterval); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("Failed to update beacon interval"); else WMA_LOGI("Updated beacon interval %d for vdev %d", @@ -1311,7 +1318,7 @@ void wma_update_cfg_params(tp_wma_handle wma, tSirMsgQ *cfgParam) uint8_t vdev_id; uint32_t param_id; uint32_t cfg_val; - int ret; + QDF_STATUS ret; /* get mac to acess CFG data base */ struct sAniSirGlobal *pmac; @@ -1343,10 +1350,10 @@ void wma_update_cfg_params(tp_wma_handle wma, tSirMsgQ *cfgParam) for (vdev_id = 0; vdev_id < wma->max_bssid; vdev_id++) { if (wma->interfaces[vdev_id].handle != 0) { - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, param_id, cfg_val); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("Update cfg params failed for vdevId %d", vdev_id); } @@ -1739,6 +1746,7 @@ void wma_adjust_ibss_heart_beat_timer(tp_wma_handle wma, int16_t new_peer_num; uint16_t new_timer_value_sec; uint32_t new_timer_value_ms; + QDF_STATUS status; if (peer_num_delta != 1 && peer_num_delta != -1) { WMA_LOGE("Invalid peer_num_delta value %d", peer_num_delta); @@ -1784,9 +1792,10 @@ void wma_adjust_ibss_heart_beat_timer(tp_wma_handle wma, new_timer_value_ms = ((uint32_t) new_timer_value_sec) * 1000; - if (wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, - WMI_VDEV_PARAM_IBSS_MAX_BCN_LOST_MS, - new_timer_value_ms)) { + status = wma_vdev_set_param(wma->wmi_handle, vdev_id, + WMI_VDEV_PARAM_IBSS_MAX_BCN_LOST_MS, + new_timer_value_ms); + if (QDF_IS_STATUS_ERROR(status)) { WMA_LOGE("Failed to set IBSS link monitoring timer value"); return; } @@ -2568,6 +2577,7 @@ void wma_send_beacon(tp_wma_handle wma, tpSendbeaconParams bcn_info) QDF_STATUS status; uint8_t *p2p_ie; tpAniBeaconStruct beacon; + struct vdev_up_params param = {0}; beacon = (tpAniBeaconStruct) (bcn_info->beacon); vdev = wma_find_vdev_by_addr(wma, beacon->macHdr.sa, &vdev_id); @@ -2604,8 +2614,12 @@ void wma_send_beacon(tp_wma_handle wma, tpSendbeaconParams bcn_info) return; } if (!wma->interfaces[vdev_id].vdev_up) { - if (wmi_unified_vdev_up_send(wma->wmi_handle, vdev_id, 0, - bcn_info->bssId) < 0) { + param.vdev_id = vdev_id; + param.assoc_id = 0; + status = wmi_unified_vdev_up_send(wma->wmi_handle, + bcn_info->bssId, + ¶m); + if (QDF_IS_STATUS_ERROR(status)) { WMA_LOGE("%s : failed to send vdev up", __func__); return; } @@ -2813,7 +2827,7 @@ void wma_process_update_userpos(tp_wma_handle wma_handle, QDF_STATUS wma_set_htconfig(uint8_t vdev_id, uint16_t ht_capab, int value) { tp_wma_handle wma = cds_get_context(QDF_MODULE_ID_WMA); - int ret = -EIO; + QDF_STATUS ret = QDF_STATUS_E_FAILURE; if (NULL == wma) { WMA_LOGE("%s: Failed to get wma", __func__); @@ -2822,17 +2836,17 @@ QDF_STATUS wma_set_htconfig(uint8_t vdev_id, uint16_t ht_capab, int value) switch (ht_capab) { case WNI_CFG_HT_CAP_INFO_ADVANCE_CODING: - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_LDPC, value); break; case WNI_CFG_HT_CAP_INFO_TX_STBC: - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_TX_STBC, value); break; case WNI_CFG_HT_CAP_INFO_RX_STBC: - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_RX_STBC, value); break; @@ -2840,16 +2854,16 @@ QDF_STATUS wma_set_htconfig(uint8_t vdev_id, uint16_t ht_capab, int value) case WNI_CFG_HT_CAP_INFO_SHORT_GI_40MHZ: WMA_LOGE("%s: ht_capab = %d, value = %d", __func__, ht_capab, value); - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_SGI, value); - if (ret == 0) + if (ret == QDF_STATUS_SUCCESS) wma->interfaces[vdev_id].config.shortgi = value; break; default: WMA_LOGE("%s:INVALID HT CONFIG", __func__); } - return (ret) ? QDF_STATUS_E_FAILURE : QDF_STATUS_SUCCESS; + return ret; } /** @@ -3380,7 +3394,8 @@ QDF_STATUS wma_register_mgmt_frm_client( if (wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_MGMT_RX_EVENTID, - wma_mgmt_rx_process) != 0) { + wma_mgmt_rx_process, + WMA_RX_WORK_CTX) != 0) { WMA_LOGE("Failed to register rx mgmt handler with wmi"); return QDF_STATUS_E_FAILURE; } diff --git a/core/wma/src/wma_ocb.c b/core/wma/src/wma_ocb.c index 3a63ca5ef977..818dadc61f21 100644 --- a/core/wma/src/wma_ocb.c +++ b/core/wma/src/wma_ocb.c @@ -1087,34 +1087,39 @@ int wma_ocb_register_event_handlers(tp_wma_handle wma_handle) /* Initialize the members in WMA used by wma_ocb */ status = wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_OCB_SET_CONFIG_RESP_EVENTID, - wma_ocb_set_config_event_handler); + wma_ocb_set_config_event_handler, + WMA_RX_SERIALIZER_CTX); if (status) return status; status = wmi_unified_register_event_handler( wma_handle->wmi_handle, WMI_OCB_GET_TSF_TIMER_RESP_EVENTID, - wma_ocb_get_tsf_timer_resp_event_handler); + wma_ocb_get_tsf_timer_resp_event_handler, + WMA_RX_SERIALIZER_CTX); if (status) return status; status = wmi_unified_register_event_handler( wma_handle->wmi_handle, WMI_DCC_GET_STATS_RESP_EVENTID, - wma_dcc_get_stats_resp_event_handler); + wma_dcc_get_stats_resp_event_handler, + WMA_RX_SERIALIZER_CTX); if (status) return status; status = wmi_unified_register_event_handler( wma_handle->wmi_handle, WMI_DCC_UPDATE_NDL_RESP_EVENTID, - wma_dcc_update_ndl_resp_event_handler); + wma_dcc_update_ndl_resp_event_handler, + WMA_RX_SERIALIZER_CTX); if (status) return status; status = wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_DCC_STATS_EVENTID, - wma_dcc_stats_event_handler); + wma_dcc_stats_event_handler, + WMA_RX_SERIALIZER_CTX); if (status) return status; diff --git a/core/wma/src/wma_power.c b/core/wma/src/wma_power.c index 4330b4dede17..a618b3fbd603 100644 --- a/core/wma/src/wma_power.c +++ b/core/wma/src/wma_power.c @@ -70,14 +70,14 @@ #include "wma_internal.h" /** - * wmi_unified_modem_power_state() - set modem power state to fw + * wma_unified_modem_power_state() - set modem power state to fw * @wmi_handle: wmi handle * @param_value: parameter value * * Return: 0 for success or error code */ static int -wmi_unified_modem_power_state(wmi_unified_t wmi_handle, uint32_t param_value) +wma_unified_modem_power_state(wmi_unified_t wmi_handle, uint32_t param_value) { int ret; wmi_modem_power_state_cmd_param *cmd; @@ -107,59 +107,42 @@ wmi_unified_modem_power_state(wmi_unified_t wmi_handle, uint32_t param_value) } /** - * wmi_unified_set_sta_ps_param() - set sta power save parameter to fw + * wma_unified_set_sta_ps_param() - set sta power save parameter to fw * @wmi_handle: wmi handle * @vdev_id: vdev id * @param: param * @value: parameter value * - * Return: 0 for success or error code. + * Return: QDF_STATUS_SUCCESS for success or error code */ -int32_t wmi_unified_set_sta_ps_param(wmi_unified_t wmi_handle, +QDF_STATUS wma_unified_set_sta_ps_param(wmi_unified_t wmi_handle, uint32_t vdev_id, uint32_t param, uint32_t value) { - wmi_sta_powersave_param_cmd_fixed_param *cmd; - wmi_buf_t buf; - int32_t len = sizeof(*cmd); tp_wma_handle wma; struct wma_txrx_node *iface; + struct sta_ps_params sta_ps_param = {0}; + QDF_STATUS status; wma = cds_get_context(QDF_MODULE_ID_WMA); if (NULL == wma) { WMA_LOGE("%s: wma is NULL", __func__); - return -EIO; + return QDF_STATUS_E_FAILURE; } - iface = &wma->interfaces[vdev_id]; - WMA_LOGD("Set Sta Ps param vdevId %d Param %d val %d", vdev_id, param, value); + iface = &wma->interfaces[vdev_id]; - buf = wmi_buf_alloc(wmi_handle, len); - if (!buf) { - WMA_LOGP("%s: Set Sta Ps param Mem Alloc Failed", __func__); - return -ENOMEM; - } - - cmd = (wmi_sta_powersave_param_cmd_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_sta_powersave_param_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (wmi_sta_powersave_param_cmd_fixed_param)); - cmd->vdev_id = vdev_id; - cmd->param = param; - cmd->value = value; - - if (wmi_unified_cmd_send(wmi_handle, buf, len, - WMI_STA_POWERSAVE_PARAM_CMDID)) { - WMA_LOGE("Set Sta Ps param Failed vdevId %d Param %d val %d", - vdev_id, param, value); - qdf_nbuf_free(buf); - return -EIO; - } + sta_ps_param.vdev_id = vdev_id; + sta_ps_param.param = param; + sta_ps_param.value = value; + status = wmi_unified_sta_ps_cmd_send(wmi_handle, &sta_ps_param); + if (QDF_IS_STATUS_ERROR(status)) + return status; /* Store the PS Status */ iface->ps_enabled = value ? true : false; - return 0; + + return status; } #ifdef QCA_IBSS_SUPPORT @@ -173,75 +156,75 @@ int32_t wmi_unified_set_sta_ps_param(wmi_unified_t wmi_handle, QDF_STATUS wma_set_ibss_pwrsave_params(tp_wma_handle wma, uint8_t vdev_id) { - int ret; + QDF_STATUS ret; - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_ATIM_WINDOW_LENGTH, wma->wma_ibss_power_save_params.atimWindowLength); - if (ret < 0) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Failed to set WMI_VDEV_PARAM_ATIM_WINDOW_LENGTH ret = %d", ret); return QDF_STATUS_E_FAILURE; } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_IS_IBSS_POWER_SAVE_ALLOWED, wma->wma_ibss_power_save_params.isPowerSaveAllowed); - if (ret < 0) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Failed, set WMI_VDEV_PARAM_IS_IBSS_POWER_SAVE_ALLOWED ret=%d", ret); return QDF_STATUS_E_FAILURE; } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_IS_POWER_COLLAPSE_ALLOWED, wma->wma_ibss_power_save_params.isPowerCollapseAllowed); - if (ret < 0) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Failed, set WMI_VDEV_PARAM_IS_POWER_COLLAPSE_ALLOWED ret=%d", ret); return QDF_STATUS_E_FAILURE; } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_IS_AWAKE_ON_TXRX_ENABLED, wma->wma_ibss_power_save_params.isAwakeonTxRxEnabled); - if (ret < 0) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Failed, set WMI_VDEV_PARAM_IS_AWAKE_ON_TXRX_ENABLED ret=%d", ret); return QDF_STATUS_E_FAILURE; } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_INACTIVITY_CNT, wma->wma_ibss_power_save_params.inactivityCount); - if (ret < 0) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Failed, set WMI_VDEV_PARAM_INACTIVITY_CNT ret=%d", ret); return QDF_STATUS_E_FAILURE; } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_TXSP_END_INACTIVITY_TIME_MS, wma->wma_ibss_power_save_params.txSPEndInactivityTime); - if (ret < 0) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Failed, set WMI_VDEV_PARAM_TXSP_END_INACTIVITY_TIME_MS ret=%d", ret); return QDF_STATUS_E_FAILURE; } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_IBSS_PS_WARMUP_TIME_SECS, wma->wma_ibss_power_save_params.ibssPsWarmupTime); - if (ret < 0) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Failed, set WMI_VDEV_PARAM_IBSS_PS_WARMUP_TIME_SECS ret=%d", ret); return QDF_STATUS_E_FAILURE; } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW_ENABLE, wma->wma_ibss_power_save_params.ibssPs1RxChainInAtimEnable); - if (ret < 0) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Failed to set IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW_ENABLE ret=%d", ret); return QDF_STATUS_E_FAILURE; @@ -252,49 +235,6 @@ wma_set_ibss_pwrsave_params(tp_wma_handle wma, uint8_t vdev_id) #endif /* QCA_IBSS_SUPPORT */ /** - * wmi_unified_set_ap_ps_param() - set ap powersave parameters - * @wma_ctx: wma context - * @vdev_id: vdev id - * @peer_addr: peer mac address - * @param: parameter - * @value: prameter value - * - * Return: 0 for success or error code - */ -static int32_t wmi_unified_set_ap_ps_param(void *wma_ctx, uint32_t vdev_id, - uint8_t *peer_addr, uint32_t param, - uint32_t value) -{ - tp_wma_handle wma_handle = (tp_wma_handle) wma_ctx; - wmi_ap_ps_peer_cmd_fixed_param *cmd; - wmi_buf_t buf; - int32_t err; - - buf = wmi_buf_alloc(wma_handle->wmi_handle, sizeof(*cmd)); - if (!buf) { - WMA_LOGE("Failed to allocate buffer to send set_ap_ps_param cmd"); - return -ENOMEM; - } - cmd = (wmi_ap_ps_peer_cmd_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_ap_ps_peer_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (wmi_ap_ps_peer_cmd_fixed_param)); - cmd->vdev_id = vdev_id; - WMI_CHAR_ARRAY_TO_MAC_ADDR(peer_addr, &cmd->peer_macaddr); - cmd->param = param; - cmd->value = value; - err = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, - sizeof(*cmd), WMI_AP_PS_PEER_PARAM_CMDID); - if (err) { - WMA_LOGE("Failed to send set_ap_ps_param cmd"); - qdf_mem_free(buf); - return -EIO; - } - return 0; -} - -/** * wma_set_ap_peer_uapsd() - set powersave parameters in ap mode to fw * @wma: wma handle * @vdev_id: vdev id @@ -302,15 +242,16 @@ static int32_t wmi_unified_set_ap_ps_param(void *wma_ctx, uint32_t vdev_id, * @uapsd_value: uapsd value * @max_sp: maximum service period * - * Return: 0 for success or error code. + * Return: QDF_STATUS_SUCCESS for success or error code */ -int32_t wma_set_ap_peer_uapsd(tp_wma_handle wma, uint32_t vdev_id, +QDF_STATUS wma_set_ap_peer_uapsd(tp_wma_handle wma, uint32_t vdev_id, uint8_t *peer_addr, uint8_t uapsd_value, uint8_t max_sp) { uint32_t uapsd = 0; uint32_t max_sp_len = 0; - int32_t ret = 0; + QDF_STATUS ret; + struct ap_ps_params param = {0}; if (uapsd_value & UAPSD_VO_ENABLED) { uapsd |= WMI_AP_PS_UAPSD_AC3_DELIVERY_EN | @@ -349,11 +290,12 @@ int32_t wma_set_ap_peer_uapsd(tp_wma_handle wma, uint32_t vdev_id, WMA_LOGD("Set WMI_AP_PS_PEER_PARAM_UAPSD 0x%x for %pM", uapsd, peer_addr); - - ret = wmi_unified_set_ap_ps_param(wma, vdev_id, - peer_addr, - WMI_AP_PS_PEER_PARAM_UAPSD, uapsd); - if (ret) { + param.vdev_id = vdev_id; + param.param = WMI_AP_PS_PEER_PARAM_UAPSD; + param.value = uapsd; + ret = wmi_unified_ap_ps_cmd_send(wma->wmi_handle, peer_addr, + ¶m); + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Failed to set WMI_AP_PS_PEER_PARAM_UAPSD for %pM", peer_addr); return ret; @@ -362,16 +304,18 @@ int32_t wma_set_ap_peer_uapsd(tp_wma_handle wma, uint32_t vdev_id, WMA_LOGD("Set WMI_AP_PS_PEER_PARAM_MAX_SP 0x%x for %pM", max_sp_len, peer_addr); - ret = wmi_unified_set_ap_ps_param(wma, vdev_id, - peer_addr, - WMI_AP_PS_PEER_PARAM_MAX_SP, - max_sp_len); - if (ret) { + param.vdev_id = vdev_id; + param.param = WMI_AP_PS_PEER_PARAM_MAX_SP; + param.value = max_sp_len; + ret = wmi_unified_ap_ps_cmd_send(wma->wmi_handle, peer_addr, + ¶m); + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Failed to set WMI_AP_PS_PEER_PARAM_MAX_SP for %pM", peer_addr); return ret; } - return 0; + + return QDF_STATUS_SUCCESS; } /** @@ -412,7 +356,7 @@ void wma_set_tx_power(WMA_HANDLE handle, { tp_wma_handle wma_handle = (tp_wma_handle) handle; uint8_t vdev_id; - int ret = -1; + QDF_STATUS ret = QDF_STATUS_E_FAILURE; void *pdev; if (tx_pwr_params->dev_mode == QDF_SAP_MODE || @@ -459,20 +403,20 @@ void wma_set_tx_power(WMA_HANDLE handle, /* tx_power changed, Push the tx_power to FW */ WMA_LOGW("%s: Set TX power limit [WMI_VDEV_PARAM_TX_PWRLIMIT] to %d", __func__, tx_pwr_params->power); - ret = wmi_unified_vdev_set_param_send(wma_handle->wmi_handle, + ret = wma_vdev_set_param(wma_handle->wmi_handle, vdev_id, WMI_VDEV_PARAM_TX_PWRLIMIT, tx_pwr_params->power); - if (ret == 0) + if (ret == QDF_STATUS_SUCCESS) wma_handle->interfaces[vdev_id].tx_power = tx_pwr_params->power; } else { /* no tx_power change */ - ret = 0; + ret = QDF_STATUS_SUCCESS; } end: qdf_mem_free(tx_pwr_params); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("Failed to set vdev param WMI_VDEV_PARAM_TX_PWRLIMIT"); } @@ -488,7 +432,7 @@ void wma_set_max_tx_power(WMA_HANDLE handle, { tp_wma_handle wma_handle = (tp_wma_handle) handle; uint8_t vdev_id; - int ret = -1; + QDF_STATUS ret = QDF_STATUS_E_FAILURE; void *pdev; int8_t prev_max_power; @@ -515,28 +459,28 @@ void wma_set_max_tx_power(WMA_HANDLE handle, if (wma_handle->interfaces[vdev_id].max_tx_power == tx_pwr_params->power) { - ret = 0; + ret = QDF_STATUS_SUCCESS; goto end; } prev_max_power = wma_handle->interfaces[vdev_id].max_tx_power; wma_handle->interfaces[vdev_id].max_tx_power = tx_pwr_params->power; if (wma_handle->interfaces[vdev_id].max_tx_power == 0) { - ret = 0; + ret = QDF_STATUS_SUCCESS; goto end; } WMA_LOGW("Set MAX TX power limit [WMI_VDEV_PARAM_TX_PWRLIMIT] to %d", wma_handle->interfaces[vdev_id].max_tx_power); - ret = wmi_unified_vdev_set_param_send(wma_handle->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma_handle->wmi_handle, vdev_id, WMI_VDEV_PARAM_TX_PWRLIMIT, wma_handle->interfaces[vdev_id].max_tx_power); - if (ret == 0) + if (ret == QDF_STATUS_SUCCESS) wma_handle->interfaces[vdev_id].tx_power = wma_handle->interfaces[vdev_id].max_tx_power; else wma_handle->interfaces[vdev_id].max_tx_power = prev_max_power; end: qdf_mem_free(tx_pwr_params); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("%s: Failed to set vdev param WMI_VDEV_PARAM_TX_PWRLIMIT", __func__); } @@ -628,14 +572,14 @@ static inline uint32_t wma_get_uapsd_mask(tpUapsd_Params uapsd_params) * @enable: enable/disable * @qpower_config: qpower configuration * - * Return: 0 for success or error code + * Return: QDF_STATUS_SUCCESS for success or error code */ -static int32_t wma_set_force_sleep(tp_wma_handle wma, +static QDF_STATUS wma_set_force_sleep(tp_wma_handle wma, uint32_t vdev_id, uint8_t enable, enum powersave_qpower_mode qpower_config) { - int32_t ret; + QDF_STATUS ret; uint32_t cfg_data_val = 0; /* get mac to acess CFG data base */ struct sAniSirGlobal *mac = cds_get_context(QDF_MODULE_ID_PE); @@ -649,7 +593,7 @@ static int32_t wma_set_force_sleep(tp_wma_handle wma, if (NULL == mac) { WMA_LOGE("%s: Unable to get PE context", __func__); - return -ENOMEM; + return QDF_STATUS_E_NOMEM; } /* Set Tx/Rx Data InActivity Timeout */ @@ -701,21 +645,21 @@ static int32_t wma_set_force_sleep(tp_wma_handle wma, * QPower is enabled by default in Firmware * So Disable QPower explicitly */ - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, WMI_STA_PS_ENABLE_QPOWER, qpower_config); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Disable QPower Failed vdevId %d", vdev_id); return ret; } WMA_LOGD("QPower Disabled vdevId %d", vdev_id); /* Set the Wake Policy to WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD */ - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, WMI_STA_PS_PARAM_RX_WAKE_POLICY, rx_wake_policy); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Setting wake policy Failed vdevId %d", vdev_id); return ret; } @@ -723,11 +667,11 @@ static int32_t wma_set_force_sleep(tp_wma_handle wma, rx_wake_policy, vdev_id); /* Set the Tx Wake Threshold */ - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD, tx_wake_threshold); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Setting TxWake Threshold vdevId %d", vdev_id); return ret; } @@ -735,11 +679,11 @@ static int32_t wma_set_force_sleep(tp_wma_handle wma, tx_wake_threshold, vdev_id); /* Set the Ps Poll Count */ - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, WMI_STA_PS_PARAM_PSPOLL_COUNT, pspoll_count); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Set Ps Poll Count Failed vdevId %d ps poll cnt %d", vdev_id, pspoll_count); return ret; @@ -748,11 +692,11 @@ static int32_t wma_set_force_sleep(tp_wma_handle wma, vdev_id, pspoll_count); /* Set the Tx/Rx InActivity */ - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, WMI_STA_PS_PARAM_INACTIVITY_TIME, inactivity_time); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Setting Tx/Rx InActivity Failed vdevId %d InAct %d", vdev_id, inactivity_time); return ret; @@ -763,7 +707,7 @@ static int32_t wma_set_force_sleep(tp_wma_handle wma, /* Enable Sta Mode Power save */ ret = wmi_unified_set_sta_ps(wma->wmi_handle, vdev_id, true); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Enable Sta Mode Ps Failed vdevId %d", vdev_id); return ret; } @@ -776,16 +720,17 @@ static int32_t wma_set_force_sleep(tp_wma_handle wma, cfg_data_val = POWERSAVE_DEFAULT_LISTEN_INTERVAL; } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_LISTEN_INTERVAL, cfg_data_val); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { /* Even it fails continue Fw will take default LI */ WMA_LOGE("Failed to Set Listen Interval vdevId %d", vdev_id); } WMA_LOGD("Set Listen Interval vdevId %d Listen Intv %d", vdev_id, cfg_data_val); - return 0; + + return QDF_STATUS_SUCCESS; } /** @@ -794,12 +739,12 @@ static int32_t wma_set_force_sleep(tp_wma_handle wma, * @vdev_id: vdev id * @enable: value * - * Return: 0 for success or error code. + * Return: QDF_STATUS_SUCCESS for success or error code */ -int32_t wma_set_qpower_force_sleep(tp_wma_handle wma, uint32_t vdev_id, +QDF_STATUS wma_set_qpower_force_sleep(tp_wma_handle wma, uint32_t vdev_id, uint8_t enable) { - int32_t ret; + QDF_STATUS ret; uint32_t cfg_data_val = 0; /* get mac to acess CFG data base */ struct sAniSirGlobal *mac = cds_get_context(QDF_MODULE_ID_PE); @@ -810,7 +755,7 @@ int32_t wma_set_qpower_force_sleep(tp_wma_handle wma, uint32_t vdev_id, if (NULL == mac) { WMA_LOGE("%s: Unable to get PE context", __func__); - return -ENOMEM; + return QDF_STATUS_E_NOMEM; } /* Get Configured Ps Poll Count */ @@ -824,21 +769,21 @@ int32_t wma_set_qpower_force_sleep(tp_wma_handle wma, uint32_t vdev_id, } /* Enable QPower */ - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, WMI_STA_PS_ENABLE_QPOWER, 1); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Enable QPower Failed vdevId %d", vdev_id); return ret; } WMA_LOGD("QPower Enabled vdevId %d", vdev_id); /* Set the Wake Policy to WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD */ - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, WMI_STA_PS_PARAM_RX_WAKE_POLICY, WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Setting wake policy to pspoll/uapsd Failed vdevId %d", vdev_id); return ret; @@ -847,11 +792,11 @@ int32_t wma_set_qpower_force_sleep(tp_wma_handle wma, uint32_t vdev_id, if (enable) { /* Set the Tx Wake Threshold */ - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD, WMI_STA_PS_TX_WAKE_THRESHOLD_NEVER); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Setting TxWake Threshold vdevId %d", vdev_id); return ret; } @@ -860,11 +805,11 @@ int32_t wma_set_qpower_force_sleep(tp_wma_handle wma, uint32_t vdev_id, } /* Set the QPower Ps Poll Count */ - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, WMI_STA_PS_PARAM_QPOWER_PSPOLL_COUNT, pspoll_count); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Set QPower Ps Poll Count Failed vdevId %d ps poll cnt %d", vdev_id, pspoll_count); return ret; @@ -875,7 +820,7 @@ int32_t wma_set_qpower_force_sleep(tp_wma_handle wma, uint32_t vdev_id, /* Enable Sta Mode Power save */ ret = wmi_unified_set_sta_ps(wma->wmi_handle, vdev_id, true); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Enable Sta Mode Ps Failed vdevId %d", vdev_id); return ret; } @@ -888,16 +833,17 @@ int32_t wma_set_qpower_force_sleep(tp_wma_handle wma, uint32_t vdev_id, cfg_data_val = POWERSAVE_DEFAULT_LISTEN_INTERVAL; } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_LISTEN_INTERVAL, cfg_data_val); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { /* Even it fails continue Fw will take default LI */ WMA_LOGE("Failed to Set Listen Interval vdevId %d", vdev_id); } WMA_LOGD("Set Listen Interval vdevId %d Listen Intv %d", vdev_id, cfg_data_val); - return 0; + + return QDF_STATUS_SUCCESS; } /** @@ -947,25 +893,26 @@ static enum powersave_qpower_mode wma_get_qpower_config(tp_wma_handle wma) void wma_enable_sta_ps_mode(tp_wma_handle wma, tpEnablePsParams ps_req) { uint32_t vdev_id = ps_req->sessionid; - int32_t ret; + QDF_STATUS ret; enum powersave_qpower_mode qpower_config = wma_get_qpower_config(wma); struct wma_txrx_node *iface = &wma->interfaces[vdev_id]; + if (!iface->handle) { WMA_LOGE("vdev id %d is not active", vdev_id); return; } if (eSIR_ADDON_NOTHING == ps_req->psSetting) { WMA_LOGD("Enable Sta Mode Ps vdevId %d", vdev_id); - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, WMI_STA_PS_PARAM_UAPSD, 0); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Set Uapsd param 0 Failed vdevId %d", vdev_id); return; } ret = wma_set_force_sleep(wma, vdev_id, false, qpower_config); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Enable Sta Ps Failed vdevId %d", vdev_id); return; } @@ -976,11 +923,11 @@ void wma_enable_sta_ps_mode(tp_wma_handle wma, tpEnablePsParams ps_req) if (uapsd_val != iface->uapsd_cached_val) { WMA_LOGD("Enable Uapsd vdevId %d Mask %d", vdev_id, uapsd_val); - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, WMI_STA_PS_PARAM_UAPSD, uapsd_val); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Enable Uapsd Failed vdevId %d", vdev_id); return; @@ -996,7 +943,7 @@ void wma_enable_sta_ps_mode(tp_wma_handle wma, tpEnablePsParams ps_req) ret = wma_set_force_sleep(wma, vdev_id, true, qpower_config); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Enable Forced Sleep Failed vdevId %d", vdev_id); return; @@ -1014,14 +961,14 @@ void wma_enable_sta_ps_mode(tp_wma_handle wma, tpEnablePsParams ps_req) */ void wma_disable_sta_ps_mode(tp_wma_handle wma, tpDisablePsParams ps_req) { - int32_t ret; + QDF_STATUS ret; uint32_t vdev_id = ps_req->sessionid; WMA_LOGD("Disable Sta Mode Ps vdevId %d", vdev_id); /* Disable Sta Mode Power save */ ret = wmi_unified_set_sta_ps(wma->wmi_handle, vdev_id, false); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Disable Sta Mode Ps Failed vdevId %d", vdev_id); return; } @@ -1029,9 +976,9 @@ void wma_disable_sta_ps_mode(tp_wma_handle wma, tpDisablePsParams ps_req) /* Disable UAPSD incase if additional Req came */ if (eSIR_ADDON_DISABLE_UAPSD == ps_req->psSetting) { WMA_LOGD("Disable Uapsd vdevId %d", vdev_id); - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, WMI_STA_PS_PARAM_UAPSD, 0); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Disable Uapsd Failed vdevId %d", vdev_id); /* * Even this fails we can proceed as success @@ -1050,14 +997,14 @@ void wma_disable_sta_ps_mode(tp_wma_handle wma, tpDisablePsParams ps_req) */ void wma_enable_uapsd_mode(tp_wma_handle wma, tpEnableUapsdParams ps_req) { - int32_t ret; + QDF_STATUS ret; uint32_t vdev_id = ps_req->sessionid; uint32_t uapsd_val = 0; enum powersave_qpower_mode qpower_config = wma_get_qpower_config(wma); /* Disable Sta Mode Power save */ ret = wmi_unified_set_sta_ps(wma->wmi_handle, vdev_id, false); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Disable Sta Mode Ps Failed vdevId %d", vdev_id); return; } @@ -1065,9 +1012,9 @@ void wma_enable_uapsd_mode(tp_wma_handle wma, tpEnableUapsdParams ps_req) uapsd_val = wma_get_uapsd_mask(&ps_req->uapsdParams); WMA_LOGD("Enable Uapsd vdevId %d Mask %d", vdev_id, uapsd_val); - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, WMI_STA_PS_PARAM_UAPSD, uapsd_val); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Enable Uapsd Failed vdevId %d", vdev_id); return; } @@ -1075,7 +1022,7 @@ void wma_enable_uapsd_mode(tp_wma_handle wma, tpEnableUapsdParams ps_req) WMA_LOGD("Enable Forced Sleep vdevId %d", vdev_id); ret = wma_set_force_sleep(wma, vdev_id, true, qpower_config); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Enable Forced Sleep Failed vdevId %d", vdev_id); return; } @@ -1092,7 +1039,7 @@ void wma_enable_uapsd_mode(tp_wma_handle wma, tpEnableUapsdParams ps_req) void wma_disable_uapsd_mode(tp_wma_handle wma, tpDisableUapsdParams ps_req) { - int32_t ret; + QDF_STATUS ret; uint32_t vdev_id = ps_req->sessionid; enum powersave_qpower_mode qpower_config = wma_get_qpower_config(wma); @@ -1100,14 +1047,14 @@ void wma_disable_uapsd_mode(tp_wma_handle wma, /* Disable Sta Mode Power save */ ret = wmi_unified_set_sta_ps(wma->wmi_handle, vdev_id, false); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Disable Sta Mode Ps Failed vdevId %d", vdev_id); return; } - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, WMI_STA_PS_PARAM_UAPSD, 0); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Disable Uapsd Failed vdevId %d", vdev_id); return; } @@ -1115,14 +1062,14 @@ void wma_disable_uapsd_mode(tp_wma_handle wma, /* Re enable Sta Mode Powersave with proper configuration */ ret = wma_set_force_sleep(wma, vdev_id, false, qpower_config); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { WMA_LOGE("Disable Forced Sleep Failed vdevId %d", vdev_id); return; } } /** - * wmi_unified_set_sta_uapsd_auto_trig_cmd() - set uapsd auto trigger command + * wma_unified_set_sta_uapsd_auto_trig_cmd() - set uapsd auto trigger command * @wmi_handle: wma handle * @vdevid: vdev id * @peer_addr: peer mac address @@ -1138,7 +1085,7 @@ void wma_disable_uapsd_mode(tp_wma_handle wma, * Return: 0 for success or error code. */ int32_t -wmi_unified_set_sta_uapsd_auto_trig_cmd(wmi_unified_t wmi_handle, +wma_unified_set_sta_uapsd_auto_trig_cmd(wmi_unified_t wmi_handle, uint32_t vdevid, uint8_t peer_addr[IEEE80211_ADDR_LEN], uint8_t *autoTriggerparam, @@ -1244,7 +1191,7 @@ QDF_STATUS wma_trigger_uapsd_params(tp_wma_handle wma_handle, uint32_t vdev_id, uapsd_trigger_param.delay_interval = trigger_uapsd_params->delay_interval; - ret = wmi_unified_set_sta_uapsd_auto_trig_cmd(wma_handle->wmi_handle, + ret = wma_unified_set_sta_uapsd_auto_trig_cmd(wma_handle->wmi_handle, vdev_id, wma_handle->interfaces[vdev_id].bssid, (uint8_t *) (&uapsd_trigger_param), 1); if (ret) { @@ -1313,7 +1260,7 @@ QDF_STATUS wma_disable_uapsd_per_ac(tp_wma_handle wma_handle, uapsd_trigger_param.suspend_interval = 0; uapsd_trigger_param.delay_interval = 0; - ret = wmi_unified_set_sta_uapsd_auto_trig_cmd(wma_handle->wmi_handle, + ret = wma_unified_set_sta_uapsd_auto_trig_cmd(wma_handle->wmi_handle, vdev_id, wma_handle->interfaces[vdev_id].bssid, (uint8_t *)(&uapsd_trigger_param), 1); if (ret) { @@ -1322,7 +1269,7 @@ QDF_STATUS wma_disable_uapsd_per_ac(tp_wma_handle wma_handle, return QDF_STATUS_E_FAILURE; } - ret = wmi_unified_set_sta_ps_param(wma_handle->wmi_handle, vdev_id, + ret = wma_unified_set_sta_ps_param(wma_handle->wmi_handle, vdev_id, WMI_STA_PS_PARAM_UAPSD, iface->uapsd_cached_val); if (ret) { @@ -1427,6 +1374,7 @@ QDF_STATUS wma_process_tx_power_limits(WMA_HANDLE handle, int32_t ret = 0; uint32_t txpower_params2g = 0; uint32_t txpower_params5g = 0; + struct pdev_params pdevparam; if (!wma || !wma->wmi_handle) { WMA_LOGE("%s: WMA is closed, can not issue tx power limit", @@ -1446,16 +1394,20 @@ QDF_STATUS wma_process_tx_power_limits(WMA_HANDLE handle, WMA_LOGD("%s: txpower2g: %x txpower5g: %x", __func__, txpower_params2g, txpower_params5g); - ret = wmi_unified_pdev_set_param(wma->wmi_handle, - WMI_PDEV_PARAM_TXPOWER_LIMIT2G, - txpower_params2g); + pdevparam.param_id = WMI_PDEV_PARAM_TXPOWER_LIMIT2G; + pdevparam.param_value = txpower_params2g; + ret = wmi_unified_pdev_param_send(wma->wmi_handle, + &pdevparam, + WMA_WILDCARD_PDEV_ID); if (ret) { WMA_LOGE("%s: Failed to set txpower 2g (%d)", __func__, ret); return QDF_STATUS_E_FAILURE; } - ret = wmi_unified_pdev_set_param(wma->wmi_handle, - WMI_PDEV_PARAM_TXPOWER_LIMIT5G, - txpower_params5g); + pdevparam.param_id = WMI_PDEV_PARAM_TXPOWER_LIMIT5G; + pdevparam.param_value = txpower_params5g; + ret = wmi_unified_pdev_param_send(wma->wmi_handle, + &pdevparam, + WMA_WILDCARD_PDEV_ID); if (ret) { WMA_LOGE("%s: Failed to set txpower 5g (%d)", __func__, ret); return QDF_STATUS_E_FAILURE; @@ -1976,7 +1928,7 @@ QDF_STATUS wma_notify_modem_power_state(void *wma_ptr, WMA_LOGD("%s: WMA notify Modem Power State %d", __func__, pReq->param); - ret = wmi_unified_modem_power_state(wma->wmi_handle, pReq->param); + ret = wma_unified_modem_power_state(wma->wmi_handle, pReq->param); if (ret) { WMA_LOGE("%s: Fail to notify Modem Power State %d", __func__, pReq->param); @@ -1998,13 +1950,17 @@ QDF_STATUS wma_set_idle_ps_config(void *wma_ptr, uint32_t idle_ps) { int32_t ret; tp_wma_handle wma = (tp_wma_handle) wma_ptr; + struct pdev_params pdevparam; WMA_LOGD("WMA Set Idle Ps Config [1:set 0:clear] val %d", idle_ps); /* Set Idle Mode Power Save Config */ - ret = wmi_unified_pdev_set_param(wma->wmi_handle, - WMI_PDEV_PARAM_IDLE_PS_CONFIG, - idle_ps); + pdevparam.param_id = WMI_PDEV_PARAM_IDLE_PS_CONFIG; + pdevparam.param_value = idle_ps; + ret = wmi_unified_pdev_param_send(wma->wmi_handle, + &pdevparam, + WMA_WILDCARD_PDEV_ID); + if (ret) { WMA_LOGE("Fail to Set Idle Ps Config %d", idle_ps); return QDF_STATUS_E_FAILURE; @@ -2074,7 +2030,7 @@ static void wma_set_vdev_suspend_dtim(tp_wma_handle wma, uint8_t vdev_id) if ((iface->type == WMI_VDEV_TYPE_STA) && (iface->ps_enabled == true) && (iface->dtimPeriod != 0)) { - int32_t ret; + QDF_STATUS ret; uint32_t listen_interval; uint32_t max_mod_dtim; @@ -2105,10 +2061,10 @@ static void wma_set_vdev_suspend_dtim(tp_wma_handle wma, uint8_t vdev_id) return; } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_LISTEN_INTERVAL, listen_interval); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { /* Even it fails continue Fw will take default LI */ WMA_LOGE("Failed to Set Listen Interval vdevId %d", vdev_id); @@ -2119,20 +2075,20 @@ static void wma_set_vdev_suspend_dtim(tp_wma_handle wma, uint8_t vdev_id) if (qpower_config) { WMA_LOGD("disable Qpower in suspend mode!"); - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, WMI_STA_PS_ENABLE_QPOWER, 0); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("Failed to disable Qpower in suspend mode!"); iface->ps_enabled = true; } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_DTIM_POLICY, NORMAL_DTIM); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("Failed to Set to Normal DTIM vdevId %d", vdev_id); @@ -2180,7 +2136,7 @@ static void wma_set_vdev_resume_dtim(tp_wma_handle wma, uint8_t vdev_id) if ((iface->type == WMI_VDEV_TYPE_STA) && (iface->ps_enabled == true) && (iface->dtim_policy == NORMAL_DTIM)) { - int32_t ret; + QDF_STATUS ret; uint32_t cfg_data_val = 0; /* get mac to acess CFG data base */ struct sAniSirGlobal *mac = cds_get_context(QDF_MODULE_ID_PE); @@ -2194,10 +2150,10 @@ static void wma_set_vdev_resume_dtim(tp_wma_handle wma, uint8_t vdev_id) cfg_data_val = POWERSAVE_DEFAULT_LISTEN_INTERVAL; } - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_LISTEN_INTERVAL, cfg_data_val); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { /* Even it fails continue Fw will take default LI */ WMA_LOGE("Failed to Set Listen Interval vdevId %d", vdev_id); @@ -2206,10 +2162,10 @@ static void wma_set_vdev_resume_dtim(tp_wma_handle wma, uint8_t vdev_id) WMA_LOGD("Set Listen Interval vdevId %d Listen Intv %d", vdev_id, cfg_data_val); - ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_DTIM_POLICY, STICK_DTIM); - if (ret) { + if (QDF_IS_STATUS_ERROR(ret)) { /* Set it back to Stick DTIM */ WMA_LOGE("Failed to Set to Stick DTIM vdevId %d", vdev_id); @@ -2219,11 +2175,11 @@ static void wma_set_vdev_resume_dtim(tp_wma_handle wma, uint8_t vdev_id) if (qpower_config) { WMA_LOGD("enable Qpower in resume mode!"); - ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, + ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id, WMI_STA_PS_ENABLE_QPOWER, 1); - if (ret) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("Failed to enable Qpower in resume mode!"); } } @@ -2261,9 +2217,10 @@ void wma_set_resume_dtim(tp_wma_handle wma) */ QDF_STATUS wma_set_tx_power_scale(uint8_t vdev_id, int value) { - int ret = QDF_STATUS_SUCCESS; + QDF_STATUS ret = QDF_STATUS_SUCCESS; tp_wma_handle wma_handle = (tp_wma_handle)cds_get_context(QDF_MODULE_ID_WMA); + if (NULL == wma_handle) { WMA_LOGE("%s: wma_handle is NULL", __func__); return QDF_STATUS_E_FAILURE; @@ -2274,9 +2231,9 @@ QDF_STATUS wma_set_tx_power_scale(uint8_t vdev_id, int value) return QDF_STATUS_E_FAILURE; } - ret = wmi_unified_vdev_set_param_send(wma_handle->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma_handle->wmi_handle, vdev_id, WMI_VDEV_PARAM_TXPOWER_SCALE, value); - if (ret != 0) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("Set tx power scale failed"); return ret; @@ -2291,9 +2248,10 @@ QDF_STATUS wma_set_tx_power_scale(uint8_t vdev_id, int value) */ QDF_STATUS wma_set_tx_power_scale_decr_db(uint8_t vdev_id, int value) { - int ret = QDF_STATUS_SUCCESS; + QDF_STATUS ret = QDF_STATUS_SUCCESS; tp_wma_handle wma_handle = (tp_wma_handle)cds_get_context(QDF_MODULE_ID_WMA); + if (NULL == wma_handle) { WMA_LOGE("%s: wma_handle is NULL", __func__); return QDF_STATUS_E_FAILURE; @@ -2304,9 +2262,9 @@ QDF_STATUS wma_set_tx_power_scale_decr_db(uint8_t vdev_id, int value) return QDF_STATUS_E_FAILURE; } - ret = wmi_unified_vdev_set_param_send(wma_handle->wmi_handle, vdev_id, + ret = wma_vdev_set_param(wma_handle->wmi_handle, vdev_id, WMI_VDEV_PARAM_TXPOWER_SCALE_DECR_DB, value); - if (ret != 0) + if (QDF_IS_STATUS_ERROR(ret)) WMA_LOGE("Decrease tx power value failed"); return ret; diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index 7889c078f23b..26fc2bca2c15 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -2021,32 +2021,32 @@ QDF_STATUS wma_roam_scan_bmiss_cnt(tp_wma_handle wma_handle, A_INT32 first_bcnt, A_UINT32 final_bcnt, uint32_t vdev_id) { - int status = 0; + QDF_STATUS status; WMA_LOGI("%s: first_bcnt=%d, final_bcnt=%d", __func__, first_bcnt, final_bcnt); - status = wmi_unified_vdev_set_param_send(wma_handle->wmi_handle, + status = wma_vdev_set_param(wma_handle->wmi_handle, vdev_id, WMI_VDEV_PARAM_BMISS_FIRST_BCNT, first_bcnt); - if (status != EOK) { - WMA_LOGE("wmi_unified_vdev_set_param_send WMI_VDEV_PARAM_BMISS_FIRST_BCNT returned Error %d", + if (QDF_IS_STATUS_ERROR(status)) { + WMA_LOGE("wma_vdev_set_param WMI_VDEV_PARAM_BMISS_FIRST_BCNT returned Error %d", status); - return QDF_STATUS_E_FAILURE; + return status; } - status = wmi_unified_vdev_set_param_send(wma_handle->wmi_handle, + status = wma_vdev_set_param(wma_handle->wmi_handle, vdev_id, WMI_VDEV_PARAM_BMISS_FINAL_BCNT, final_bcnt); - if (status != EOK) { - WMA_LOGE("wmi_unified_vdev_set_param_send WMI_VDEV_PARAM_BMISS_FINAL_BCNT returned Error %d", + if (QDF_IS_STATUS_ERROR(status)) { + WMA_LOGE("wma_vdev_set_param WMI_VDEV_PARAM_BMISS_FINAL_BCNT returned Error %d", status); - return QDF_STATUS_E_FAILURE; + return status; } - return QDF_STATUS_SUCCESS; + return status; } /** @@ -4121,39 +4121,48 @@ void wma_register_extscan_event_handler(tp_wma_handle wma_handle) } wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_EXTSCAN_START_STOP_EVENTID, - wma_extscan_start_stop_event_handler); + wma_extscan_start_stop_event_handler, + WMA_RX_SERIALIZER_CTX); wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_EXTSCAN_CAPABILITIES_EVENTID, - wma_extscan_capabilities_event_handler); + WMI_EXTSCAN_CAPABILITIES_EVENTID, + wma_extscan_capabilities_event_handler, + WMA_RX_SERIALIZER_CTX); wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_EXTSCAN_HOTLIST_MATCH_EVENTID, - wma_extscan_hotlist_match_event_handler); + WMI_EXTSCAN_HOTLIST_MATCH_EVENTID, + wma_extscan_hotlist_match_event_handler, + WMA_RX_SERIALIZER_CTX); wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_EXTSCAN_WLAN_CHANGE_RESULTS_EVENTID, - wma_extscan_change_results_event_handler); + WMI_EXTSCAN_WLAN_CHANGE_RESULTS_EVENTID, + wma_extscan_change_results_event_handler, + WMA_RX_SERIALIZER_CTX); wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_EXTSCAN_OPERATION_EVENTID, - wma_extscan_operations_event_handler); + WMI_EXTSCAN_OPERATION_EVENTID, + wma_extscan_operations_event_handler, + WMA_RX_SERIALIZER_CTX); wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_EXTSCAN_TABLE_USAGE_EVENTID, - wma_extscan_table_usage_event_handler); + WMI_EXTSCAN_TABLE_USAGE_EVENTID, + wma_extscan_table_usage_event_handler, + WMA_RX_SERIALIZER_CTX); wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_EXTSCAN_CACHED_RESULTS_EVENTID, - wma_extscan_cached_results_event_handler); + WMI_EXTSCAN_CACHED_RESULTS_EVENTID, + wma_extscan_cached_results_event_handler, + WMA_RX_SERIALIZER_CTX); wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_PASSPOINT_MATCH_EVENTID, - wma_passpoint_match_event_handler); + wma_passpoint_match_event_handler, + WMA_RX_SERIALIZER_CTX); wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_EXTSCAN_HOTLIST_SSID_MATCH_EVENTID, - wma_extscan_hotlist_ssid_match_event_handler); + wma_extscan_hotlist_ssid_match_event_handler, + WMA_RX_SERIALIZER_CTX); return; } @@ -6040,6 +6049,7 @@ QDF_STATUS wma_ipa_offload_enable_disable(tp_wma_handle wma, ol_txrx_vdev_handle vdev; struct txrx_pdev_cfg_t *cfg; int32_t intra_bss_fwd = 0; + QDF_STATUS status; if (!wma || !wma->wmi_handle) { WMA_LOGE("%s: WMA is closed, can not issue cmd", @@ -6109,14 +6119,15 @@ QDF_STATUS wma_ipa_offload_enable_disable(tp_wma_handle wma, } /* Disable/enable WMI_VDEV_PARAM_INTRA_BSS_FWD */ - if (wmi_unified_vdev_set_param_send(wma->wmi_handle, + status = wma_vdev_set_param(wma->wmi_handle, ipa_offload->vdev_id, WMI_VDEV_PARAM_INTRA_BSS_FWD, - intra_bss_fwd)) { + intra_bss_fwd); + if (QDF_IS_STATUS_ERROR(status)) { WMA_LOGE("Failed to disable WMI_VDEV_PARAM_INTRA_BSS_FWD"); - return QDF_STATUS_E_FAILURE; + return status; } - return QDF_STATUS_SUCCESS; + return status; } /** wma_set_epno_network_list() - set epno network list diff --git a/core/wma/src/wma_utils.c b/core/wma/src/wma_utils.c index fd54008db815..0d0e7327d76a 100644 --- a/core/wma/src/wma_utils.c +++ b/core/wma/src/wma_utils.c @@ -69,7 +69,7 @@ #include "dfs.h" #include "wma_internal.h" #include "cds_concurrency.h" - +#include "wmi_unified_param.h" #include "linux/ieee80211.h" /* MCS Based rate table */ @@ -764,14 +764,17 @@ void wma_register_ll_stats_event_handler(tp_wma_handle wma_handle) } wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_IFACE_LINK_STATS_EVENTID, - wma_unified_link_iface_stats_event_handler); + WMI_IFACE_LINK_STATS_EVENTID, + wma_unified_link_iface_stats_event_handler, + WMA_RX_SERIALIZER_CTX); wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_PEER_LINK_STATS_EVENTID, - wma_unified_link_peer_stats_event_handler); + WMI_PEER_LINK_STATS_EVENTID, + wma_unified_link_peer_stats_event_handler, + WMA_RX_SERIALIZER_CTX); wmi_unified_register_event_handler(wma_handle->wmi_handle, - WMI_RADIO_LINK_STATS_EVENTID, - wma_unified_link_radio_stats_event_handler); + WMI_RADIO_LINK_STATS_EVENTID, + wma_unified_link_radio_stats_event_handler, + WMA_RX_SERIALIZER_CTX); return; } @@ -1953,46 +1956,6 @@ int32_t wma_set_txrx_fw_stats_level(tp_wma_handle wma_handle, } /** - * wmi_crash_inject() - inject fw crash - * @wma_handle: wma handle - * @type: type - * @delay_time_ms: delay time in ms - * - * Return: 0 for success or return error - */ -int wmi_crash_inject(wmi_unified_t wmi_handle, uint32_t type, - uint32_t delay_time_ms) -{ - int ret = 0; - WMI_FORCE_FW_HANG_CMD_fixed_param *cmd; - uint16_t len = sizeof(*cmd); - wmi_buf_t buf; - - buf = wmi_buf_alloc(wmi_handle, len); - if (!buf) { - WMA_LOGE("%s: wmi_buf_alloc failed!", __func__); - return -ENOMEM; - } - - cmd = (WMI_FORCE_FW_HANG_CMD_fixed_param *) wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_WMI_FORCE_FW_HANG_CMD_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (WMI_FORCE_FW_HANG_CMD_fixed_param)); - cmd->type = type; - cmd->delay_time_ms = delay_time_ms; - - ret = wmi_unified_cmd_send(wmi_handle, buf, len, WMI_FORCE_FW_HANG_CMDID); - if (ret < 0) { - WMA_LOGE("%s: Failed to send set param command, ret = %d", - __func__, ret); - wmi_buf_free(buf); - } - - return ret; -} - -/** * wma_get_stats_rsp_buf() - fill get stats response buffer * @get_stats_param: get stats parameters * @@ -2333,7 +2296,7 @@ static int wma_process_utf_event(WMA_HANDLE handle, uint8_t *datap, uint32_t dataplen) { tp_wma_handle wma_handle = (tp_wma_handle) handle; - SEG_HDR_INFO_STRUCT segHdrInfo; + struct seg_hdr_info segHdrInfo; uint8_t totalNumOfSegments, currentSeq; WMI_PDEV_UTF_EVENTID_param_tlvs *param_buf; uint8_t *data; @@ -2347,7 +2310,7 @@ wma_process_utf_event(WMA_HANDLE handle, uint8_t *datap, uint32_t dataplen) data = param_buf->data; datalen = param_buf->num_data; - segHdrInfo = *(SEG_HDR_INFO_STRUCT *) &(data[0]); + segHdrInfo = *(struct seg_hdr_info *) &(data[0]); wma_handle->utf_event_info.currentSeq = (segHdrInfo.segmentInfo & 0xF); @@ -2423,113 +2386,31 @@ void wma_utf_attach(tp_wma_handle wma_handle) ret = wmi_unified_register_event_handler(wma_handle->wmi_handle, WMI_PDEV_UTF_EVENTID, - wma_process_utf_event); + wma_process_utf_event, + WMA_RX_SERIALIZER_CTX); if (ret) WMA_LOGP("%s: Failed to register UTF event callback", __func__); } /** - * wmi_unified_pdev_utf_cmd() - send utf command to fw - * @wmi_handle: wmi handle - * @utf_payload: utf payload - * @len: length - * - * Return: 0 for success or error code - */ -static int -wmi_unified_pdev_utf_cmd(wmi_unified_t wmi_handle, uint8_t *utf_payload, - uint16_t len) -{ - wmi_buf_t buf; - uint8_t *cmd; - int ret = 0; - static uint8_t msgref = 1; - uint8_t segNumber = 0, segInfo, numSegments; - uint16_t chunk_len, total_bytes; - uint8_t *bufpos; - SEG_HDR_INFO_STRUCT segHdrInfo; - - bufpos = utf_payload; - total_bytes = len; - ASSERT(total_bytes / MAX_WMI_UTF_LEN == - (uint8_t) (total_bytes / MAX_WMI_UTF_LEN)); - numSegments = (uint8_t) (total_bytes / MAX_WMI_UTF_LEN); - - if (len - (numSegments * MAX_WMI_UTF_LEN)) - numSegments++; - - while (len) { - if (len > MAX_WMI_UTF_LEN) - chunk_len = MAX_WMI_UTF_LEN; /* MAX messsage */ - else - chunk_len = len; - - buf = wmi_buf_alloc(wmi_handle, - (chunk_len + sizeof(segHdrInfo) + - WMI_TLV_HDR_SIZE)); - if (!buf) { - WMA_LOGE("%s:wmi_buf_alloc failed", __func__); - return -ENOMEM; - } - - cmd = (uint8_t *) wmi_buf_data(buf); - - segHdrInfo.len = total_bytes; - segHdrInfo.msgref = msgref; - segInfo = ((numSegments << 4) & 0xF0) | (segNumber & 0xF); - segHdrInfo.segmentInfo = segInfo; - segHdrInfo.pad = 0; - - WMA_LOGD("%s:segHdrInfo.len = %d, segHdrInfo.msgref = %d," - " segHdrInfo.segmentInfo = %d", - __func__, segHdrInfo.len, segHdrInfo.msgref, - segHdrInfo.segmentInfo); - - WMA_LOGD("%s:total_bytes %d segNumber %d totalSegments %d" - "chunk len %d", __func__, total_bytes, segNumber, - numSegments, chunk_len); - - segNumber++; - - WMITLV_SET_HDR(cmd, WMITLV_TAG_ARRAY_BYTE, - (chunk_len + sizeof(segHdrInfo))); - cmd += WMI_TLV_HDR_SIZE; - memcpy(cmd, &segHdrInfo, sizeof(segHdrInfo)); /* 4 bytes */ - memcpy(&cmd[sizeof(segHdrInfo)], bufpos, chunk_len); - - ret = wmi_unified_cmd_send(wmi_handle, buf, - (chunk_len + sizeof(segHdrInfo) + - WMI_TLV_HDR_SIZE), - WMI_PDEV_UTF_CMDID); - - if (ret != EOK) { - WMA_LOGE("Failed to send WMI_PDEV_UTF_CMDID command"); - wmi_buf_free(buf); - break; - } - - len -= chunk_len; - bufpos += chunk_len; - } - - msgref++; - - return ret; -} - -/** * wma_utf_cmd() - utf command * @wma_handle: wma handle * @data: data * @len: length * - * Return: 0 for success or error code + * Return: QDF_STATUS_SUCCESS for success or error code */ -int wma_utf_cmd(tp_wma_handle wma_handle, uint8_t *data, uint16_t len) +QDF_STATUS wma_utf_cmd(tp_wma_handle wma_handle, uint8_t *data, uint16_t len) { + struct pdev_utf_params param = {0}; + wma_handle->utf_event_info.length = 0; - return wmi_unified_pdev_utf_cmd(wma_handle->wmi_handle, data, len); + param.utf_payload = data; + param.len = len; + + return wmi_unified_pdev_utf_cmd_send(wma_handle->wmi_handle, ¶m, + WMA_WILDCARD_PDEV_ID); } /** @@ -3636,3 +3517,27 @@ uint32_t wma_get_vht_ch_width(void) return fw_ch_wd; } + +/** + * wma_config_debug_module_cmd - set debug log config + * @wmi_handle: wmi layer handle + * @param: debug log parameter + * @val: debug log value + * @module_id_bitmap: debug module id bitmap + * @bitmap_len: debug module bitmap length + * + * Return: QDF_STATUS_SUCCESS for success or error code + */ +QDF_STATUS +wma_config_debug_module_cmd(wmi_unified_t wmi_handle, A_UINT32 param, + A_UINT32 val, A_UINT32 *module_id_bitmap, + A_UINT32 bitmap_len) +{ + struct dbglog_params dbg_param; + dbg_param.param = param; + dbg_param.val = val; + dbg_param.module_id_bitmap = module_id_bitmap; + dbg_param.bitmap_len = bitmap_len; + + return wmi_unified_dbglog_cmd_send(wmi_handle, &dbg_param); +} |
