diff --git a/target_if/core/inc/target_if.h b/target_if/core/inc/target_if.h index 053ac2274959..b6da65b831a5 100644 --- a/target_if/core/inc/target_if.h +++ b/target_if/core/inc/target_if.h @@ -49,9 +49,6 @@ #define TARGET_IF_ENTER() target_if_logfl(QDF_TRACE_LEVEL_INFO, "enter") #define TARGET_IF_EXIT() target_if_logfl(QDF_TRACE_LEVEL_INFO, "exit") -#define GET_WMI_HDL_FROM_PSOC(psoc) \ - (((struct target_psoc_info *)(psoc->tgt_if_handle))->wmi_handle) - #ifdef CONFIG_MCL #define GET_WMI_HDL_FROM_PDEV(pdev) \ (((struct target_psoc_info *)(pdev->tgt_if_handle))->wmi_handle) @@ -174,6 +171,23 @@ QDF_STATUS target_if_register_legacy_service_ready_cb( void *target_if_get_wmi_handle(struct wlan_objmgr_psoc *psoc); +static inline void *GET_WMI_HDL_FROM_PSOC(struct wlan_objmgr_psoc *psoc) +{ + void *tgt_if_handle; + + if (psoc) { + tgt_if_handle = psoc->tgt_if_handle; + + if (tgt_if_handle) + return ((struct target_psoc_info *) + tgt_if_handle)->wmi_handle; + else + return NULL; + } + + return NULL; +} + /** * target_is_tgt_type_ar900b() - Check if the target type is AR900B * @target_type: target type to be checked. diff --git a/target_if/regulatory/src/target_if_reg.c b/target_if/regulatory/src/target_if_reg.c index c9d06a9ea42d..f05ec16e6d63 100644 --- a/target_if/regulatory/src/target_if_reg.c +++ b/target_if/regulatory/src/target_if_reg.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. * * * Permission to use, copy, modify, and/or distribute this software for @@ -30,29 +30,11 @@ #include #include -#ifdef CONFIG_MCL -static bool tgt_if_regulatory_is_11d_offloaded(struct wlan_objmgr_psoc - *psoc) +static inline uint32_t get_chan_list_cc_event_id(void) { - return WMI_SERVICE_IS_ENABLED(psoc->service_param.service_bitmap, - WMI_SERVICE_11D_OFFLOAD); + return wmi_reg_chan_list_cc_event_id; } -static bool tgt_if_regulatory_is_regdb_offloaded(struct wlan_objmgr_psoc - *psoc) -{ - return WMI_SERVICE_IS_ENABLED(psoc->service_param.service_bitmap, - WMI_SERVICE_REGULATORY_DB); -} - -static bool tgt_if_regulatory_is_there_serv_ready_extn(struct wlan_objmgr_psoc - *psoc) -{ - return WMI_SERVICE_IS_ENABLED(psoc->service_param.service_bitmap, - WMI_SERVICE_EXT_MSG); -} - -#else static bool tgt_if_regulatory_is_11d_offloaded(struct wlan_objmgr_psoc *psoc) { @@ -80,8 +62,6 @@ static bool tgt_if_regulatory_is_there_serv_ready_extn(struct wlan_objmgr_psoc wmi_service_ext_msg); } -#endif - static inline struct wlan_lmac_if_reg_rx_ops * target_if_regulatory_get_rx_ops(struct wlan_objmgr_psoc *psoc) { diff --git a/target_if/tdls/src/target_if_tdls.c b/target_if/tdls/src/target_if_tdls.c index cff486f375ad..e0a0ef23f916 100644 --- a/target_if/tdls/src/target_if_tdls.c +++ b/target_if/tdls/src/target_if_tdls.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -122,11 +122,12 @@ target_if_tdls_set_uapsd(struct wlan_objmgr_psoc *psoc, struct sta_uapsd_trig_params *params) { QDF_STATUS ret; + wmi_unified_t wmi_handle = GET_WMI_HDL_FROM_PSOC(psoc); - if (!WMI_SERVICE_IS_ENABLED(psoc->service_param.service_bitmap, - WMI_STA_UAPSD_BASIC_AUTO_TRIG) || - !WMI_SERVICE_IS_ENABLED(psoc->service_param.service_bitmap, - WMI_STA_UAPSD_VAR_AUTO_TRIG)) { + if (!wmi_service_enabled(wmi_handle, + wmi_sta_uapsd_basic_auto_trig) || + !wmi_service_enabled(wmi_handle, + wmi_sta_uapsd_var_auto_trig)) { target_if_debug("Trigger uapsd is not supported vdev id %d", params->vdevid); return QDF_STATUS_SUCCESS; diff --git a/umac/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h b/umac/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h index 493b6fef2bea..7e3c9dc532f9 100644 --- a/umac/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h +++ b/umac/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h @@ -857,13 +857,10 @@ struct policy_mgr_dp_cbacks { * from policy manager * @wma_get_connection_info: Get the connection related info * from wma table - * @wma_is_service_enabled: check if certain service is enabled - * by FW */ struct policy_mgr_wma_cbacks { QDF_STATUS (*wma_get_connection_info)(uint8_t vdev_id, struct policy_mgr_vdev_entry_info *conn_table_entry); - bool (*wma_is_service_enabled)(WMI_SERVICE service_type); }; /** diff --git a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c index 41a9a8025028..dc2588ed8ca9 100644 --- a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c +++ b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c @@ -33,7 +33,7 @@ */ /* Include files */ - +#include "target_if.h" #include "wlan_policy_mgr_api.h" #include "wlan_policy_mgr_i.h" #include "qdf_types.h" @@ -524,8 +524,10 @@ bool policy_mgr_is_hw_dbs_capable(struct wlan_objmgr_psoc *psoc) { uint32_t param, i, found = 0; struct policy_mgr_psoc_priv_obj *pm_ctx; + void *wmi_handle; pm_ctx = policy_mgr_get_context(psoc); + if (!pm_ctx) { policy_mgr_err("Invalid Context"); return false; @@ -535,19 +537,23 @@ bool policy_mgr_is_hw_dbs_capable(struct wlan_objmgr_psoc *psoc) policy_mgr_debug("DBS is disabled"); return false; } - if (pm_ctx->wma_cbacks.wma_is_service_enabled) { - policy_mgr_debug("DBS service bit map: %d", - pm_ctx->wma_cbacks.wma_is_service_enabled( - WMI_SERVICE_DUAL_BAND_SIMULTANEOUS_SUPPORT)); - /* The agreement with FW is that: To know if the target is DBS - * capable, DBS needs to be supported both in the HW mode list - * and in the service ready event - */ - if (!(pm_ctx->wma_cbacks.wma_is_service_enabled( - WMI_SERVICE_DUAL_BAND_SIMULTANEOUS_SUPPORT))) - return false; - } else + wmi_handle = GET_WMI_HDL_FROM_PSOC(psoc); + if (!wmi_handle) { + policy_mgr_debug("Invalid WMA context"); + return false; + } + + policy_mgr_debug("DBS service bit map: %d", + wmi_service_enabled(wmi_handle, + wmi_service_dual_band_simultaneous_support)); + + /* The agreement with FW is that: To know if the target is DBS + * capable, DBS needs to be supported both in the HW mode list + * and in the service ready event + */ + if (!(wmi_service_enabled(wmi_handle, + wmi_service_dual_band_simultaneous_support))) return false; for (i = 0; i < pm_ctx->num_dbs_hw_modes; i++) { @@ -570,25 +576,26 @@ bool policy_mgr_is_hw_sbs_capable(struct wlan_objmgr_psoc *psoc) { uint32_t param, i, found = 0; struct policy_mgr_psoc_priv_obj *pm_ctx; + void *wmi_handle; pm_ctx = policy_mgr_get_context(psoc); if (!pm_ctx) { policy_mgr_err("Invalid Context"); return false; } - if (pm_ctx->wma_cbacks.wma_is_service_enabled) { - policy_mgr_debug("DBS service bit map: %d", - pm_ctx->wma_cbacks.wma_is_service_enabled( - WMI_SERVICE_DUAL_BAND_SIMULTANEOUS_SUPPORT)); - /* The agreement with FW is that: To know if the target is SBS - * capable, SBS needs to be supported both in the HW mode list - * and DBS needs to be supported in the service ready event - */ - if (!(pm_ctx->wma_cbacks.wma_is_service_enabled( - WMI_SERVICE_DUAL_BAND_SIMULTANEOUS_SUPPORT))) - return false; - } else + wmi_handle = GET_WMI_HDL_FROM_PSOC(psoc); + + policy_mgr_debug("DBS service bit map: %d", + wmi_service_enabled(wmi_handle, + wmi_service_dual_band_simultaneous_support)); + + /* The agreement with FW is that: To know if the target is SBS + * capable, SBS needs to be supported both in the HW mode list + * and DBS needs to be supported in the service ready event + */ + if (!(wmi_service_enabled(wmi_handle, + wmi_service_dual_band_simultaneous_support))) return false; for (i = 0; i < pm_ctx->num_dbs_hw_modes; i++) { diff --git a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_init_deinit.c b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_init_deinit.c index 74f9e54892a5..44bde60ec7f5 100644 --- a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_init_deinit.c +++ b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_init_deinit.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -610,8 +610,6 @@ QDF_STATUS policy_mgr_register_wma_cb(struct wlan_objmgr_psoc *psoc, pm_ctx->wma_cbacks.wma_get_connection_info = wma_cbacks->wma_get_connection_info; - pm_ctx->wma_cbacks.wma_is_service_enabled = - wma_cbacks->wma_is_service_enabled; return QDF_STATUS_SUCCESS; } diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index 85ad42992f84..35c51dc85237 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -6108,6 +6108,10 @@ typedef enum { wmi_service_bcn_offload_start_stop_support, wmi_service_offchan_data_tid_support, wmi_service_support_dma, + wmi_service_8ss_tx_bfee, + wmi_service_fils_support, + wmi_service_mawc_support, + wmi_service_wow_wakeup_by_timer_pattern, wmi_services_max, } wmi_conv_service_ids; diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index ef9432864099..feb27c41d187 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -1595,8 +1595,8 @@ struct wmi_unified { #ifndef CONFIG_MCL uint32_t *pdev_param; uint32_t *vdev_param; - uint32_t *services; #endif + uint32_t *services; struct wmi_soc *soc; }; @@ -1623,8 +1623,9 @@ struct wmi_soc { #ifndef CONFIG_MCL uint32_t pdev_param[wmi_pdev_param_max]; uint32_t vdev_param[wmi_vdev_param_max]; - uint32_t services[wmi_services_max]; #endif + uint32_t services[wmi_services_max]; + }; #ifdef WMI_NON_TLV_SUPPORT diff --git a/wmi/src/wmi_unified.c b/wmi/src/wmi_unified.c index 1e13d85ef511..ec22a3a9c1ae 100644 --- a/wmi/src/wmi_unified.c +++ b/wmi/src/wmi_unified.c @@ -2034,7 +2034,6 @@ static inline void wmi_target_params_init(struct wmi_soc *soc, { wmi_handle->pdev_param = soc->pdev_param; wmi_handle->vdev_param = soc->vdev_param; - wmi_handle->services = soc->services; } #else static inline void wmi_target_params_init(struct wmi_soc *soc, @@ -2148,6 +2147,7 @@ void *wmi_unified_attach(void *scn_handle, wmi_handle->ctx = soc->ctx; wmi_handle->wmi_events = soc->wmi_events; wmi_target_params_init(soc, wmi_handle); + wmi_handle->services = soc->services; wmi_handle->scn_handle = scn_handle; soc->scn_handle = scn_handle; qdf_atomic_init(&wmi_handle->pending_cmds); diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c index 802a4e64a8ac..87418bade0c4 100644 --- a/wmi/src/wmi_unified_api.c +++ b/wmi/src/wmi_unified_api.c @@ -4649,7 +4649,6 @@ QDF_STATUS wmi_check_and_update_fw_version(void *wmi_hdl, void *evt_buf) * * Return: 1 enabled, 0 disabled */ -#ifndef CONFIG_MCL bool wmi_service_enabled(void *wmi_hdl, uint32_t service_id) { wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; @@ -4663,9 +4662,9 @@ bool wmi_service_enabled(void *wmi_hdl, uint32_t service_id) } else { qdf_print("Support not added yet for Service %d\n", service_id); } + return false; } -#endif /** * wmi_get_target_cap_from_service_ready() - extract service ready event diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 6aae665d0c79..45bc7cd28b72 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -17598,7 +17598,6 @@ QDF_STATUS save_ext_service_bitmap_tlv(wmi_unified_t wmi_handle, void *evt_buf, * * Return: 1 enabled, 0 disabled */ -#ifndef CONFIG_MCL static bool is_service_enabled_tlv(wmi_unified_t wmi_handle, uint32_t service_id) { @@ -17609,8 +17608,8 @@ static bool is_service_enabled_tlv(wmi_unified_t wmi_handle, return false; } - /* if WMI_EXTENDED_SERVICE_AVAILABLE was received with extended bitmap, - * use WMI_SERVICE_EXT_ENABLE to check the services. + /* if wmi_service_enabled was received with extended bitmap, + * use WMI_SERVICE_EXT_IS_ENABLED to check the services. */ if (soc->wmi_ext_service_bitmap) return WMI_SERVICE_EXT_IS_ENABLED(soc->wmi_service_bitmap, @@ -17620,13 +17619,6 @@ static bool is_service_enabled_tlv(wmi_unified_t wmi_handle, return WMI_SERVICE_IS_ENABLED(soc->wmi_service_bitmap, service_id); } -#else -static bool is_service_enabled_tlv(wmi_unified_t wmi_handle, - uint32_t service_id) -{ - return false; -} -#endif static inline void copy_ht_cap_info(uint32_t ev_target_cap, struct wlan_psoc_target_capability_info *cap) @@ -22050,7 +22042,6 @@ static void populate_tlv_events_id(uint32_t *event_ids) event_ids[wmi_sar_get_limits_event_id] = WMI_SAR_GET_LIMITS_EVENTID; } -#ifndef CONFIG_MCL /** * populate_tlv_service() - populates wmi services * @@ -22248,8 +22239,14 @@ static void populate_tlv_service(uint32_t *wmi_service) WMI_SERVICE_OFFCHAN_DATA_TID_SUPPORT; wmi_service[wmi_service_support_dma] = WMI_SERVICE_SUPPORT_DIRECT_DMA; + wmi_service[wmi_service_8ss_tx_bfee] = WMI_SERVICE_8SS_TX_BFEE; + wmi_service[wmi_service_fils_support] = WMI_SERVICE_FILS_SUPPORT; + wmi_service[wmi_service_mawc_support] = WMI_SERVICE_MAWC_SUPPORT; + } +#ifndef CONFIG_MCL + /** * populate_pdev_param_tlv() - populates pdev params * @@ -22664,7 +22661,6 @@ static void populate_vdev_param_tlv(uint32_t *vdev_param) #ifndef CONFIG_MCL static void populate_target_defines_tlv(struct wmi_unified *wmi_handle) { - populate_tlv_service(wmi_handle->services); populate_pdev_param_tlv(wmi_handle->pdev_param); populate_vdev_param_tlv(wmi_handle->vdev_param); } @@ -22748,5 +22744,6 @@ void wmi_tlv_attach(wmi_unified_t wmi_handle) wmi_handle->log_info.buf_offset_event = 4; #endif populate_tlv_events_id(wmi_handle->wmi_events); + populate_tlv_service(wmi_handle->services); populate_target_defines_tlv(wmi_handle); }