Browse Source

qcacmn: Add new WMI API

Add new API to allow components to move to common eventid space.

Change-Id: Ieab2019a0fb96817833266236073cffb3aaeab2c
CRs-Fixed: 2023157
Soumya Bhat 8 years ago
parent
commit
8b71edb772
4 changed files with 206 additions and 150 deletions
  1. 15 5
      wmi/inc/wmi_unified_api.h
  2. 2 2
      wmi/inc/wmi_unified_priv.h
  3. 47 1
      wmi/src/wmi_unified.c
  4. 142 142
      wmi/src/wmi_unified_tlv.c

+ 15 - 5
wmi/inc/wmi_unified_api.h

@@ -73,11 +73,6 @@ typedef qdf_nbuf_t wmi_buf_t;
 #define WMI_LOGA(args ...)
 #endif
 
-/* wrapper to keep WMI agnostic of event handler execution context */
-#define wmi_unified_register_event(wmi_handle, event_id, handler_func) \
-		wmi_unified_register_event_handler(wmi_handle, \
-		 event_id, handler_func, WMI_RX_UMAC_CTX)
-
 struct wmi_soc;
 /**
  * struct wmi_ops - service callbacks to upper layer
@@ -192,6 +187,21 @@ QDF_STATUS
 wmi_unified_cmd_send(wmi_unified_t wmi_handle, wmi_buf_t buf, uint32_t buflen,
 			uint32_t cmd_id);
 
+/**
+ * wmi_unified_register_event() - WMI event handler
+ * registration function for converged components
+ *
+ * @wmi_handle:   handle to WMI.
+ * @event_id:     WMI event ID
+ * @handler_func: Event handler call back function
+ *
+ *  @return 0  on success and -ve on failure.
+ */
+int
+wmi_unified_register_event(wmi_unified_t wmi_handle,
+				   uint32_t event_id,
+				   wmi_unified_event_handler handler_func);
+
 /**
  * wmi_unified_register_event_handler() - WMI event handler
  * registration function

+ 2 - 2
wmi/inc/wmi_unified_priv.h

@@ -1347,10 +1347,10 @@ struct wmi_unified {
 	struct wmi_ops *ops;
 	bool use_cookie;
 	bool wmi_stopinprogress;
+	uint32_t *wmi_events;
 #ifndef CONFIG_MCL
 	/* WMI service bitmap recieved from target */
 	uint32_t *wmi_service_bitmap;
-	uint32_t *wmi_events;
 	uint32_t *pdev_param;
 	uint32_t *vdev_param;
 	uint32_t *services;
@@ -1374,10 +1374,10 @@ struct wmi_soc {
 	HTC_ENDPOINT_ID wmi_endpoint_id[WMI_MAX_RADIOS];
 	uint16_t max_msg_len[WMI_MAX_RADIOS];
 	struct wmi_ops *ops;
+	uint32_t wmi_events[wmi_events_max];
 #ifndef CONFIG_MCL
 	/* WMI service bitmap recieved from target */
 	uint32_t wmi_service_bitmap[wmi_services_max];
-	uint32_t wmi_events[wmi_events_max];
 	uint32_t pdev_param[wmi_pdev_param_max];
 	uint32_t vdev_param[wmi_vdev_param_max];
 	uint32_t services[wmi_services_max];

+ 47 - 1
wmi/src/wmi_unified.c

@@ -1864,6 +1864,50 @@ static int wmi_unified_get_event_handler_ix(wmi_unified_t wmi_handle,
 	return invalid_idx;
 }
 
+/**
+ * wmi_unified_register_event() - register wmi event handler
+ * @wmi_handle: handle to wmi
+ * @event_id: wmi event id
+ * @handler_func: wmi event handler function
+ *
+ * Return: 0 on success
+ */
+int wmi_unified_register_event(wmi_unified_t wmi_handle,
+				       uint32_t event_id,
+				       wmi_unified_event_handler handler_func)
+{
+	uint32_t idx = 0;
+	uint32_t evt_id;
+	struct wmi_soc *soc = wmi_handle->soc;
+
+	if (event_id >= wmi_events_max ||
+		wmi_handle->wmi_events[event_id] == WMI_EVENT_ID_INVALID) {
+		qdf_print("%s: Event id %d is unavailable\n",
+				 __func__, event_id);
+		return QDF_STATUS_E_FAILURE;
+	}
+	evt_id = wmi_handle->wmi_events[event_id];
+	if (wmi_unified_get_event_handler_ix(wmi_handle, evt_id) != -1) {
+		qdf_print("%s : event handler already registered 0x%x\n",
+		       __func__, evt_id);
+		return QDF_STATUS_E_FAILURE;
+	}
+	if (soc->max_event_idx == WMI_UNIFIED_MAX_EVENT) {
+		qdf_print("%s : no more event handlers 0x%x\n",
+		       __func__, evt_id);
+		return QDF_STATUS_E_FAILURE;
+	}
+	idx = soc->max_event_idx;
+	wmi_handle->event_handler[idx] = handler_func;
+	wmi_handle->event_id[idx] = evt_id;
+	qdf_spin_lock_bh(&soc->ctx_lock);
+	wmi_handle->ctx[idx] = WMI_RX_UMAC_CTX;
+	qdf_spin_unlock_bh(&soc->ctx_lock);
+	soc->max_event_idx++;
+
+	return 0;
+}
+
 /**
  * wmi_unified_register_event_handler() - register wmi event handler
  * @wmi_handle: handle to wmi
@@ -1871,6 +1915,7 @@ static int wmi_unified_get_event_handler_ix(wmi_unified_t wmi_handle,
  * @handler_func: wmi event handler function
  * @rx_ctx: rx execution context for wmi rx events
  *
+ * This API is to support legacy requirements. Will be deprecated in future.
  * Return: 0 on success
  */
 int wmi_unified_register_event_handler(wmi_unified_t wmi_handle,
@@ -2297,7 +2342,6 @@ static inline void wmi_target_params_init(struct wmi_soc *soc,
 {
 	/* WMI service bitmap recieved from target */
 	wmi_handle->wmi_service_bitmap = soc->wmi_service_bitmap;
-	wmi_handle->wmi_events = soc->wmi_events;
 	wmi_handle->pdev_param = soc->pdev_param;
 	wmi_handle->vdev_param = soc->vdev_param;
 	wmi_handle->services   = soc->services;
@@ -2344,6 +2388,7 @@ void *wmi_unified_get_pdev_handle(struct wmi_soc *soc, uint32_t pdev_idx)
 	qdf_spinlock_create(&wmi_handle->eventq_lock);
 	qdf_nbuf_queue_init(&wmi_handle->event_queue);
 	INIT_WORK(&wmi_handle->rx_event_work, wmi_rx_event_work);
+	wmi_handle->wmi_events = soc->wmi_events;
 	wmi_target_params_init(soc, wmi_handle);
 	wmi_interface_logging_init(wmi_handle);
 	qdf_atomic_init(&wmi_handle->pending_cmds);
@@ -2405,6 +2450,7 @@ void *wmi_unified_attach(void *scn_handle,
 	wmi_handle->event_id = soc->event_id;
 	wmi_handle->event_handler = soc->event_handler;
 	wmi_handle->ctx = soc->ctx;
+	wmi_handle->wmi_events = soc->wmi_events;
 	wmi_target_params_init(soc, wmi_handle);
 	wmi_handle->scn_handle = scn_handle;
 	soc->scn_handle = scn_handle;

+ 142 - 142
wmi/src/wmi_unified_tlv.c

@@ -16357,147 +16357,6 @@ struct wmi_ops tlv_ops =  {
 	.send_dfs_phyerr_offload_dis_cmd = send_dfs_phyerr_offload_dis_cmd_tlv,
 };
 
-#ifndef CONFIG_MCL
-/**
- * populate_tlv_service() - populates wmi services
- *
- * @param wmi_service: Pointer to hold wmi_service
- * Return: None
- */
-static void populate_tlv_service(uint32_t *wmi_service)
-{
-	wmi_service[wmi_service_beacon_offload] = WMI_SERVICE_BEACON_OFFLOAD;
-	wmi_service[wmi_service_scan_offload] = WMI_SERVICE_SCAN_OFFLOAD;
-	wmi_service[wmi_service_roam_scan_offload] =
-					WMI_SERVICE_ROAM_SCAN_OFFLOAD;
-	wmi_service[wmi_service_bcn_miss_offload] =
-					WMI_SERVICE_BCN_MISS_OFFLOAD;
-	wmi_service[wmi_service_sta_pwrsave] = WMI_SERVICE_STA_PWRSAVE;
-	wmi_service[wmi_service_sta_advanced_pwrsave] =
-				WMI_SERVICE_STA_ADVANCED_PWRSAVE;
-	wmi_service[wmi_service_ap_uapsd] = WMI_SERVICE_AP_UAPSD;
-	wmi_service[wmi_service_ap_dfs] = WMI_SERVICE_AP_DFS;
-	wmi_service[wmi_service_11ac] = WMI_SERVICE_11AC;
-	wmi_service[wmi_service_blockack] = WMI_SERVICE_BLOCKACK;
-	wmi_service[wmi_service_phyerr] = WMI_SERVICE_PHYERR;
-	wmi_service[wmi_service_bcn_filter] = WMI_SERVICE_BCN_FILTER;
-	wmi_service[wmi_service_rtt] = WMI_SERVICE_RTT;
-	wmi_service[wmi_service_wow] = WMI_SERVICE_WOW;
-	wmi_service[wmi_service_ratectrl_cache] = WMI_SERVICE_RATECTRL_CACHE;
-	wmi_service[wmi_service_iram_tids] = WMI_SERVICE_IRAM_TIDS;
-	wmi_service[wmi_service_arpns_offload] = WMI_SERVICE_ARPNS_OFFLOAD;
-	wmi_service[wmi_service_nlo] = WMI_SERVICE_NLO;
-	wmi_service[wmi_service_gtk_offload] = WMI_SERVICE_GTK_OFFLOAD;
-	wmi_service[wmi_service_scan_sch] = WMI_SERVICE_SCAN_SCH;
-	wmi_service[wmi_service_csa_offload] = WMI_SERVICE_CSA_OFFLOAD;
-	wmi_service[wmi_service_chatter] = WMI_SERVICE_CHATTER;
-	wmi_service[wmi_service_coex_freqavoid] = WMI_SERVICE_COEX_FREQAVOID;
-	wmi_service[wmi_service_packet_power_save] =
-					WMI_SERVICE_PACKET_POWER_SAVE;
-	wmi_service[wmi_service_force_fw_hang] = WMI_SERVICE_FORCE_FW_HANG;
-	wmi_service[wmi_service_gpio] = WMI_SERVICE_GPIO;
-	wmi_service[wmi_service_sta_dtim_ps_modulated_dtim] =
-				WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM;
-	wmi_service[wmi_sta_uapsd_basic_auto_trig] =
-					WMI_STA_UAPSD_BASIC_AUTO_TRIG;
-	wmi_service[wmi_sta_uapsd_var_auto_trig] = WMI_STA_UAPSD_VAR_AUTO_TRIG;
-	wmi_service[wmi_service_sta_keep_alive] = WMI_SERVICE_STA_KEEP_ALIVE;
-	wmi_service[wmi_service_tx_encap] = WMI_SERVICE_TX_ENCAP;
-	wmi_service[wmi_service_ap_ps_detect_out_of_sync] =
-				WMI_SERVICE_AP_PS_DETECT_OUT_OF_SYNC;
-	wmi_service[wmi_service_early_rx] = WMI_SERVICE_EARLY_RX;
-	wmi_service[wmi_service_sta_smps] = WMI_SERVICE_STA_SMPS;
-	wmi_service[wmi_service_fwtest] = WMI_SERVICE_FWTEST;
-	wmi_service[wmi_service_sta_wmmac] = WMI_SERVICE_STA_WMMAC;
-	wmi_service[wmi_service_tdls] = WMI_SERVICE_TDLS;
-	wmi_service[wmi_service_burst] = WMI_SERVICE_BURST;
-	wmi_service[wmi_service_mcc_bcn_interval_change] =
-				WMI_SERVICE_MCC_BCN_INTERVAL_CHANGE;
-	wmi_service[wmi_service_adaptive_ocs] = WMI_SERVICE_ADAPTIVE_OCS;
-	wmi_service[wmi_service_ba_ssn_support] = WMI_SERVICE_BA_SSN_SUPPORT;
-	wmi_service[wmi_service_filter_ipsec_natkeepalive] =
-				WMI_SERVICE_FILTER_IPSEC_NATKEEPALIVE;
-	wmi_service[wmi_service_wlan_hb] = WMI_SERVICE_WLAN_HB;
-	wmi_service[wmi_service_lte_ant_share_support] =
-				WMI_SERVICE_LTE_ANT_SHARE_SUPPORT;
-	wmi_service[wmi_service_batch_scan] = WMI_SERVICE_BATCH_SCAN;
-	wmi_service[wmi_service_qpower] = WMI_SERVICE_QPOWER;
-	wmi_service[wmi_service_plmreq] = WMI_SERVICE_PLMREQ;
-	wmi_service[wmi_service_thermal_mgmt] = WMI_SERVICE_THERMAL_MGMT;
-	wmi_service[wmi_service_rmc] = WMI_SERVICE_RMC;
-	wmi_service[wmi_service_mhf_offload] = WMI_SERVICE_MHF_OFFLOAD;
-	wmi_service[wmi_service_coex_sar] = WMI_SERVICE_COEX_SAR;
-	wmi_service[wmi_service_bcn_txrate_override] =
-				WMI_SERVICE_BCN_TXRATE_OVERRIDE;
-	wmi_service[wmi_service_nan] = WMI_SERVICE_NAN;
-	wmi_service[wmi_service_l1ss_stat] = WMI_SERVICE_L1SS_STAT;
-	wmi_service[wmi_service_estimate_linkspeed] =
-				WMI_SERVICE_ESTIMATE_LINKSPEED;
-	wmi_service[wmi_service_obss_scan] = WMI_SERVICE_OBSS_SCAN;
-	wmi_service[wmi_service_tdls_offchan] = WMI_SERVICE_TDLS_OFFCHAN;
-	wmi_service[wmi_service_tdls_uapsd_buffer_sta] =
-				WMI_SERVICE_TDLS_UAPSD_BUFFER_STA;
-	wmi_service[wmi_service_tdls_uapsd_sleep_sta] =
-				WMI_SERVICE_TDLS_UAPSD_SLEEP_STA;
-	wmi_service[wmi_service_ibss_pwrsave] = WMI_SERVICE_IBSS_PWRSAVE;
-	wmi_service[wmi_service_lpass] = WMI_SERVICE_LPASS;
-	wmi_service[wmi_service_extscan] = WMI_SERVICE_EXTSCAN;
-	wmi_service[wmi_service_d0wow] = WMI_SERVICE_D0WOW;
-	wmi_service[wmi_service_hsoffload] = WMI_SERVICE_HSOFFLOAD;
-	wmi_service[wmi_service_roam_ho_offload] = WMI_SERVICE_ROAM_HO_OFFLOAD;
-	wmi_service[wmi_service_rx_full_reorder] = WMI_SERVICE_RX_FULL_REORDER;
-	wmi_service[wmi_service_dhcp_offload] = WMI_SERVICE_DHCP_OFFLOAD;
-	wmi_service[wmi_service_sta_rx_ipa_offload_support] =
-				WMI_SERVICE_STA_RX_IPA_OFFLOAD_SUPPORT;
-	wmi_service[wmi_service_mdns_offload] = WMI_SERVICE_MDNS_OFFLOAD;
-	wmi_service[wmi_service_sap_auth_offload] =
-					WMI_SERVICE_SAP_AUTH_OFFLOAD;
-	wmi_service[wmi_service_dual_band_simultaneous_support] =
-				WMI_SERVICE_DUAL_BAND_SIMULTANEOUS_SUPPORT;
-	wmi_service[wmi_service_ocb] = WMI_SERVICE_OCB;
-	wmi_service[wmi_service_ap_arpns_offload] =
-					WMI_SERVICE_AP_ARPNS_OFFLOAD;
-	wmi_service[wmi_service_per_band_chainmask_support] =
-				WMI_SERVICE_PER_BAND_CHAINMASK_SUPPORT;
-	wmi_service[wmi_service_packet_filter_offload] =
-				WMI_SERVICE_PACKET_FILTER_OFFLOAD;
-	wmi_service[wmi_service_mgmt_tx_htt] = WMI_SERVICE_MGMT_TX_HTT;
-	wmi_service[wmi_service_mgmt_tx_wmi] = WMI_SERVICE_MGMT_TX_WMI;
-	wmi_service[wmi_service_ext_msg] = WMI_SERVICE_EXT_MSG;
-	wmi_service[wmi_service_mawc] = WMI_SERVICE_MAWC;
-	wmi_service[wmi_service_multiple_vdev_restart] =
-			WMI_SERVICE_MULTIPLE_VDEV_RESTART;
-
-	wmi_service[wmi_service_roam_offload] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_ratectrl] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_smart_antenna_sw_support] =
-				WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_smart_antenna_hw_support] =
-				WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_enhanced_proxy_sta] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_tt] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_atf] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_peer_caching] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_coex_gpio] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_aux_spectral_intf] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_aux_chan_load_intf] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_bss_channel_info_64] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_ext_res_cfg_support] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_mesh] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_restrt_chnl_support] = WMI_SERVICE_UNAVAILABLE;
-
-	wmi_service[wmi_service_peer_stats] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_mesh_11s] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_periodic_chan_stat_support] =
-			WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_tx_mode_push_only] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_tx_mode_push_pull] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_tx_mode_dynamic] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_btcoex_duty_cycle] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_4_wire_coex_support] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_mesh] = WMI_SERVICE_ENTERPRISE_MESH;
-}
-
 /**
  * populate_tlv_event_id() - populates wmi event ids
  *
@@ -16712,6 +16571,147 @@ static void populate_tlv_events_id(uint32_t *event_ids)
 				WMI_PDEV_CSA_SWITCH_COUNT_STATUS_EVENTID;
 }
 
+#ifndef CONFIG_MCL
+/**
+ * populate_tlv_service() - populates wmi services
+ *
+ * @param wmi_service: Pointer to hold wmi_service
+ * Return: None
+ */
+static void populate_tlv_service(uint32_t *wmi_service)
+{
+	wmi_service[wmi_service_beacon_offload] = WMI_SERVICE_BEACON_OFFLOAD;
+	wmi_service[wmi_service_scan_offload] = WMI_SERVICE_SCAN_OFFLOAD;
+	wmi_service[wmi_service_roam_scan_offload] =
+					WMI_SERVICE_ROAM_SCAN_OFFLOAD;
+	wmi_service[wmi_service_bcn_miss_offload] =
+					WMI_SERVICE_BCN_MISS_OFFLOAD;
+	wmi_service[wmi_service_sta_pwrsave] = WMI_SERVICE_STA_PWRSAVE;
+	wmi_service[wmi_service_sta_advanced_pwrsave] =
+				WMI_SERVICE_STA_ADVANCED_PWRSAVE;
+	wmi_service[wmi_service_ap_uapsd] = WMI_SERVICE_AP_UAPSD;
+	wmi_service[wmi_service_ap_dfs] = WMI_SERVICE_AP_DFS;
+	wmi_service[wmi_service_11ac] = WMI_SERVICE_11AC;
+	wmi_service[wmi_service_blockack] = WMI_SERVICE_BLOCKACK;
+	wmi_service[wmi_service_phyerr] = WMI_SERVICE_PHYERR;
+	wmi_service[wmi_service_bcn_filter] = WMI_SERVICE_BCN_FILTER;
+	wmi_service[wmi_service_rtt] = WMI_SERVICE_RTT;
+	wmi_service[wmi_service_wow] = WMI_SERVICE_WOW;
+	wmi_service[wmi_service_ratectrl_cache] = WMI_SERVICE_RATECTRL_CACHE;
+	wmi_service[wmi_service_iram_tids] = WMI_SERVICE_IRAM_TIDS;
+	wmi_service[wmi_service_arpns_offload] = WMI_SERVICE_ARPNS_OFFLOAD;
+	wmi_service[wmi_service_nlo] = WMI_SERVICE_NLO;
+	wmi_service[wmi_service_gtk_offload] = WMI_SERVICE_GTK_OFFLOAD;
+	wmi_service[wmi_service_scan_sch] = WMI_SERVICE_SCAN_SCH;
+	wmi_service[wmi_service_csa_offload] = WMI_SERVICE_CSA_OFFLOAD;
+	wmi_service[wmi_service_chatter] = WMI_SERVICE_CHATTER;
+	wmi_service[wmi_service_coex_freqavoid] = WMI_SERVICE_COEX_FREQAVOID;
+	wmi_service[wmi_service_packet_power_save] =
+					WMI_SERVICE_PACKET_POWER_SAVE;
+	wmi_service[wmi_service_force_fw_hang] = WMI_SERVICE_FORCE_FW_HANG;
+	wmi_service[wmi_service_gpio] = WMI_SERVICE_GPIO;
+	wmi_service[wmi_service_sta_dtim_ps_modulated_dtim] =
+				WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM;
+	wmi_service[wmi_sta_uapsd_basic_auto_trig] =
+					WMI_STA_UAPSD_BASIC_AUTO_TRIG;
+	wmi_service[wmi_sta_uapsd_var_auto_trig] = WMI_STA_UAPSD_VAR_AUTO_TRIG;
+	wmi_service[wmi_service_sta_keep_alive] = WMI_SERVICE_STA_KEEP_ALIVE;
+	wmi_service[wmi_service_tx_encap] = WMI_SERVICE_TX_ENCAP;
+	wmi_service[wmi_service_ap_ps_detect_out_of_sync] =
+				WMI_SERVICE_AP_PS_DETECT_OUT_OF_SYNC;
+	wmi_service[wmi_service_early_rx] = WMI_SERVICE_EARLY_RX;
+	wmi_service[wmi_service_sta_smps] = WMI_SERVICE_STA_SMPS;
+	wmi_service[wmi_service_fwtest] = WMI_SERVICE_FWTEST;
+	wmi_service[wmi_service_sta_wmmac] = WMI_SERVICE_STA_WMMAC;
+	wmi_service[wmi_service_tdls] = WMI_SERVICE_TDLS;
+	wmi_service[wmi_service_burst] = WMI_SERVICE_BURST;
+	wmi_service[wmi_service_mcc_bcn_interval_change] =
+				WMI_SERVICE_MCC_BCN_INTERVAL_CHANGE;
+	wmi_service[wmi_service_adaptive_ocs] = WMI_SERVICE_ADAPTIVE_OCS;
+	wmi_service[wmi_service_ba_ssn_support] = WMI_SERVICE_BA_SSN_SUPPORT;
+	wmi_service[wmi_service_filter_ipsec_natkeepalive] =
+				WMI_SERVICE_FILTER_IPSEC_NATKEEPALIVE;
+	wmi_service[wmi_service_wlan_hb] = WMI_SERVICE_WLAN_HB;
+	wmi_service[wmi_service_lte_ant_share_support] =
+				WMI_SERVICE_LTE_ANT_SHARE_SUPPORT;
+	wmi_service[wmi_service_batch_scan] = WMI_SERVICE_BATCH_SCAN;
+	wmi_service[wmi_service_qpower] = WMI_SERVICE_QPOWER;
+	wmi_service[wmi_service_plmreq] = WMI_SERVICE_PLMREQ;
+	wmi_service[wmi_service_thermal_mgmt] = WMI_SERVICE_THERMAL_MGMT;
+	wmi_service[wmi_service_rmc] = WMI_SERVICE_RMC;
+	wmi_service[wmi_service_mhf_offload] = WMI_SERVICE_MHF_OFFLOAD;
+	wmi_service[wmi_service_coex_sar] = WMI_SERVICE_COEX_SAR;
+	wmi_service[wmi_service_bcn_txrate_override] =
+				WMI_SERVICE_BCN_TXRATE_OVERRIDE;
+	wmi_service[wmi_service_nan] = WMI_SERVICE_NAN;
+	wmi_service[wmi_service_l1ss_stat] = WMI_SERVICE_L1SS_STAT;
+	wmi_service[wmi_service_estimate_linkspeed] =
+				WMI_SERVICE_ESTIMATE_LINKSPEED;
+	wmi_service[wmi_service_obss_scan] = WMI_SERVICE_OBSS_SCAN;
+	wmi_service[wmi_service_tdls_offchan] = WMI_SERVICE_TDLS_OFFCHAN;
+	wmi_service[wmi_service_tdls_uapsd_buffer_sta] =
+				WMI_SERVICE_TDLS_UAPSD_BUFFER_STA;
+	wmi_service[wmi_service_tdls_uapsd_sleep_sta] =
+				WMI_SERVICE_TDLS_UAPSD_SLEEP_STA;
+	wmi_service[wmi_service_ibss_pwrsave] = WMI_SERVICE_IBSS_PWRSAVE;
+	wmi_service[wmi_service_lpass] = WMI_SERVICE_LPASS;
+	wmi_service[wmi_service_extscan] = WMI_SERVICE_EXTSCAN;
+	wmi_service[wmi_service_d0wow] = WMI_SERVICE_D0WOW;
+	wmi_service[wmi_service_hsoffload] = WMI_SERVICE_HSOFFLOAD;
+	wmi_service[wmi_service_roam_ho_offload] = WMI_SERVICE_ROAM_HO_OFFLOAD;
+	wmi_service[wmi_service_rx_full_reorder] = WMI_SERVICE_RX_FULL_REORDER;
+	wmi_service[wmi_service_dhcp_offload] = WMI_SERVICE_DHCP_OFFLOAD;
+	wmi_service[wmi_service_sta_rx_ipa_offload_support] =
+				WMI_SERVICE_STA_RX_IPA_OFFLOAD_SUPPORT;
+	wmi_service[wmi_service_mdns_offload] = WMI_SERVICE_MDNS_OFFLOAD;
+	wmi_service[wmi_service_sap_auth_offload] =
+					WMI_SERVICE_SAP_AUTH_OFFLOAD;
+	wmi_service[wmi_service_dual_band_simultaneous_support] =
+				WMI_SERVICE_DUAL_BAND_SIMULTANEOUS_SUPPORT;
+	wmi_service[wmi_service_ocb] = WMI_SERVICE_OCB;
+	wmi_service[wmi_service_ap_arpns_offload] =
+					WMI_SERVICE_AP_ARPNS_OFFLOAD;
+	wmi_service[wmi_service_per_band_chainmask_support] =
+				WMI_SERVICE_PER_BAND_CHAINMASK_SUPPORT;
+	wmi_service[wmi_service_packet_filter_offload] =
+				WMI_SERVICE_PACKET_FILTER_OFFLOAD;
+	wmi_service[wmi_service_mgmt_tx_htt] = WMI_SERVICE_MGMT_TX_HTT;
+	wmi_service[wmi_service_mgmt_tx_wmi] = WMI_SERVICE_MGMT_TX_WMI;
+	wmi_service[wmi_service_ext_msg] = WMI_SERVICE_EXT_MSG;
+	wmi_service[wmi_service_mawc] = WMI_SERVICE_MAWC;
+	wmi_service[wmi_service_multiple_vdev_restart] =
+			WMI_SERVICE_MULTIPLE_VDEV_RESTART;
+
+	wmi_service[wmi_service_roam_offload] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_ratectrl] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_smart_antenna_sw_support] =
+				WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_smart_antenna_hw_support] =
+				WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_enhanced_proxy_sta] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_tt] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_atf] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_peer_caching] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_coex_gpio] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_aux_spectral_intf] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_aux_chan_load_intf] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_bss_channel_info_64] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_ext_res_cfg_support] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_mesh] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_restrt_chnl_support] = WMI_SERVICE_UNAVAILABLE;
+
+	wmi_service[wmi_service_peer_stats] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_mesh_11s] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_periodic_chan_stat_support] =
+			WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_tx_mode_push_only] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_tx_mode_push_pull] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_tx_mode_dynamic] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_btcoex_duty_cycle] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_4_wire_coex_support] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_mesh] = WMI_SERVICE_ENTERPRISE_MESH;
+}
+
 /**
  * populate_pdev_param_tlv() - populates pdev params
  *
@@ -17066,7 +17066,6 @@ static void populate_vdev_param_tlv(uint32_t *vdev_param)
 static void populate_target_defines_tlv(struct wmi_unified *wmi_handle)
 {
 	populate_tlv_service(wmi_handle->services);
-	populate_tlv_events_id(wmi_handle->wmi_events);
 	populate_pdev_param_tlv(wmi_handle->pdev_param);
 	populate_vdev_param_tlv(wmi_handle->vdev_param);
 }
@@ -17087,5 +17086,6 @@ void wmi_tlv_attach(wmi_unified_t wmi_handle)
 	wmi_handle->log_info.buf_offset_command = 2;
 	wmi_handle->log_info.buf_offset_event = 4;
 #endif
+	populate_tlv_events_id(wmi_handle->wmi_events);
 	populate_target_defines_tlv(wmi_handle);
 }