Browse Source

qcacmn: Add MLME Tx & Rx Ops for vdev mgmt ops

Add Tx & Rx callbacks in LMAC structure and
the same will be (de)initialized through psoc
disable and enable from init_deinit component

Change-Id: I346c9076f0966545fb779dc150f5d6498c793308
CRs-Fixed: 2383346
Naga 6 years ago
parent
commit
ba29b56cd6

+ 149 - 0
umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h

@@ -72,6 +72,11 @@ struct direct_buf_rx_data;
 #include <wlan_cp_stats_mc_defs.h>
 #endif /* QCA_SUPPORT_CP_STATS */
 
+#ifdef CMN_VDEV_MGR_TGT_IF_ENABLE
+#include <wlan_vdev_mgr_tgt_if_tx_defs.h>
+#include <wlan_vdev_mgr_tgt_if_rx_defs.h>
+#endif /* CMN_VDEV_MGR_TGT_IF_ENABLE */
+
 #ifdef QCA_SUPPORT_CP_STATS
 /**
  * struct wlan_lmac_if_cp_stats_tx_ops - defines southbound tx callbacks for
@@ -170,12 +175,98 @@ struct wlan_lmac_if_ftm_tx_ops {
 };
 
 
+/**
+ * struct wlan_lmac_if_mlme_tx_ops - south bound tx function pointers for mlme
+ * @scan_sta_power_events: function to handle STA power events
+ * @scan_connection_lost: function to get scan connection lost
+ * @scan_end: function to end scan
+ * @get_wifi_iface_id: function to get wifi interface id
+ * @vdev_mlme_attach: function to register events
+ * @vdev_mlme_detach: function to unregister events
+ * @vdev_mlme_rsp_timer_mgmt: function to manage vdev response timer
+ * @vdev_create_send: function to send vdev create
+ * @vdev_create_complete: function to send WMI cfg required for create
+ * @vdev_start_send: function to send vdev start
+ * @vdev_up_send: function to send vdev up
+ * @vdev_delete_send: function to send vdev delete
+ * @vdev_stop_send: function to send vdev stop
+ * @vdev_down_send: function to send vdev down
+ * @vdev_set_param_send: function to send vdev parameter
+ * @vdev_set_nac_rssi_send: function to send nac rssi
+ * @vdev_set_neighbour_rx_cmd_send: function to send vdev neighbour rx cmd
+ * @vdev_sifs_trigger_send: function to send vdev sifs trigger
+ * @vdev_set_custom_aggr_size_cmd_send: function to send custom aggr size
+ * @vdev_config_ratemask_cmd_send: function to send ratemask
+ * @peer_flush_tids_send: function to flush peer tids
+ * @multiple_vdev_restart_req_cmd: function to send multiple vdev restart
+ * @beacon_send_cmd: function to send beacon
+ * @beacon_tmpl_send: function to send beacon template
+ * @vdev_bcn_miss_offload_send: function to send beacon miss offload
+ * @vdev_sta_ps_param_send: function to sent STA power save config
+ * @target_is_pre_lithium: function to get target type status
+ * @vdev_mgr_resp_timer_mgmt: function to manage response timer
+ */
 struct wlan_lmac_if_mlme_tx_ops {
 	void (*scan_sta_power_events)(struct wlan_objmgr_pdev *pdev,
 			int event_type, int event_status);
 	void (*scan_connection_lost)(struct wlan_objmgr_pdev *pdev);
 	void (*scan_end)(struct wlan_objmgr_pdev *pdev);
 	uint32_t (*get_wifi_iface_id) (struct wlan_objmgr_pdev *pdev);
+#ifdef CMN_VDEV_MGR_TGT_IF_ENABLE
+	QDF_STATUS (*vdev_mlme_attach)(struct wlan_objmgr_psoc *psoc);
+	QDF_STATUS (*vdev_mlme_detach)(struct wlan_objmgr_psoc *psoc);
+	QDF_STATUS (*vdev_mlme_rsp_timer_mgmt)(struct wlan_objmgr_vdev *vdev,
+					       qdf_timer_t *rsp_timer,
+					       bool flag);
+	QDF_STATUS (*vdev_create_send)(struct wlan_objmgr_vdev *vdev,
+				       struct vdev_create_params *param);
+	QDF_STATUS (*vdev_create_complete)(struct wlan_objmgr_vdev *vdev);
+	QDF_STATUS (*vdev_start_send)(struct wlan_objmgr_vdev *vdev,
+				      struct vdev_start_params *param);
+	QDF_STATUS (*vdev_up_send)(struct wlan_objmgr_vdev *vdev,
+				   struct vdev_up_params *param);
+	QDF_STATUS (*vdev_delete_send)(struct wlan_objmgr_vdev *vdev,
+				       struct vdev_delete_params *param);
+	QDF_STATUS (*vdev_stop_send)(struct wlan_objmgr_vdev *vdev,
+				     struct vdev_stop_params *param);
+	QDF_STATUS (*vdev_down_send)(struct wlan_objmgr_vdev *vdev,
+				     struct vdev_down_params *param);
+	QDF_STATUS (*vdev_set_param_send)(struct wlan_objmgr_vdev *vdev,
+					  struct vdev_set_params *param);
+	QDF_STATUS (*vdev_set_nac_rssi_send)(
+				struct wlan_objmgr_vdev *vdev,
+				struct vdev_scan_nac_rssi_params *param);
+	QDF_STATUS (*vdev_set_neighbour_rx_cmd_send)(
+					struct wlan_objmgr_vdev *vdev,
+					struct set_neighbour_rx_params *param,
+					uint8_t *mac);
+	QDF_STATUS (*vdev_sifs_trigger_send)(
+					struct wlan_objmgr_vdev *vdev,
+					struct sifs_trigger_param *param);
+	QDF_STATUS (*vdev_set_custom_aggr_size_cmd_send)(
+				struct wlan_objmgr_vdev *vdev,
+				struct set_custom_aggr_size_params *param);
+	QDF_STATUS (*vdev_config_ratemask_cmd_send)(
+					struct wlan_objmgr_vdev *vdev,
+					struct config_ratemask_params *param);
+	QDF_STATUS (*peer_flush_tids_send)(
+					struct wlan_objmgr_vdev *vdev,
+					struct peer_flush_params *param);
+	QDF_STATUS (*multiple_vdev_restart_req_cmd)(
+				struct wlan_objmgr_pdev *pdev,
+				struct multiple_vdev_restart_params *param);
+	QDF_STATUS (*beacon_cmd_send)(struct wlan_objmgr_vdev *vdev,
+				      struct beacon_params *param);
+	QDF_STATUS (*beacon_tmpl_send)(struct wlan_objmgr_vdev *vdev,
+				       struct beacon_tmpl_params *param);
+	QDF_STATUS (*vdev_bcn_miss_offload_send)(struct wlan_objmgr_vdev *vdev);
+	QDF_STATUS (*vdev_sta_ps_param_send)(struct wlan_objmgr_vdev *vdev,
+					     struct sta_ps_params *param);
+	QDF_STATUS (*target_is_pre_lithium)(struct wlan_objmgr_psoc *psoc);
+	QDF_STATUS (*vdev_mgr_resp_timer_mgmt)(struct wlan_objmgr_vdev *vdev,
+					     qdf_timer_t *rsp_timer,
+					     bool init);
+#endif
 };
 
 /**
@@ -1191,6 +1282,43 @@ struct wlan_lmac_if_dfs_rx_ops {
 			bool *bw_reduce);
 };
 
+/**
+ * struct wlan_lmac_if_mlme_rx_ops: Function pointer to call MLME functions
+ * @wlan_mlme_scan_start: function to start scan
+ * @wlan_mlme_register_pm_event_handler: function to register pm event
+ * @wlan_mlme_unregister_pm_event_handler: function unregister for pm event
+ * @wlan_mlme_register_vdev_event_handler: function to register for vdev event
+ * @wlan_mlme_unregister_vdev_event_handler: functiont o unregister for vdev
+ * event
+ * @wlan_mlme_send_probe_request: function to send probe
+ * @wlan_mlme_resmgr_request_bsschan: function to request bsschan
+ * @wlan_mlme_resmgr_request_offchan: function to request offchan
+ * @wlan_mlme_resmgr_active: function to check resmgr status
+ * @wlan_mlme_get_cw_inter_found: function to get cw interference
+ * @wlan_mlme_set_home_channel: function to set home channel
+ * @wlan_mlme_set_channel: function to set channel
+ * @wlan_mlme_start_record_stats: functiont to start record stats
+ * @wlan_mlme_end_record_stats: function to end recording of stats
+ * @wlan_mlme_get_enh_rpt_ind: function to get enhanced repeater index
+ * @wlan_mlme_pause: function to pause mlme
+ * @wlan_mlme_unpause: function to unpause mlme
+ * @wlan_mlme_vdev_pause_control: function to set vdev pause control
+ * @wlan_mlme_sta_power_pause: function to set sta power pause
+ * @wlan_mlme_sta_power_unpause: function to set sta power pause
+ * @wlan_mlme_set_vdev_sleep: function to sleep vdev sleep
+ * @wlan_mlme_set_vdev_wakeup: function to set vdev wakeup
+ * @wlan_mlme_get_traffic_indication_timestamp: function to get tid timestamp
+ * @wlan_mlme_get_acs_in_progress: function to get ACS progress
+ * @wlan_mlme_end_scan: function to end scan
+ * @mlme_get_rsp_timer: function to get vdev mgr response timer
+ * @mlme_response_timeout_cb: function to trigger on response time expiry
+ * @mlme_start_response: function to handle vdev start response
+ * @mlme_stop_response: function to handle vdev stop response
+ * @mlme_delete_response: function to handle vdev delete response
+ * @mlme_offload_bcn_tx_status_event_handle: function to get offload beacon tx
+ * status
+ * @mlme_tbttoffset_update_handle: function to handle tbttoffset event
+ */
 struct wlan_lmac_if_mlme_rx_ops {
 
 	void (*wlan_mlme_scan_start)(struct wlan_objmgr_pdev *pdev);
@@ -1248,6 +1376,27 @@ struct wlan_lmac_if_mlme_rx_ops {
 	int (*wlan_mlme_get_acs_in_progress)(struct wlan_objmgr_pdev *pdev,
 			uint8_t vdev_id);
 	void (*wlan_mlme_end_scan)(struct wlan_objmgr_pdev *pdev);
+
+#ifdef CMN_VDEV_MGR_TGT_IF_ENABLE
+	struct vdev_response_timer *(*vdev_mgr_get_response_timer_info)(
+					struct wlan_objmgr_vdev *vdev);
+	void (*vdev_mgr_response_timeout_cb)(struct wlan_objmgr_vdev *vdev);
+	QDF_STATUS (*vdev_mgr_start_response)(
+					struct wlan_objmgr_psoc *psoc,
+					struct vdev_start_response *rsp);
+	QDF_STATUS (*vdev_mgr_stop_response)(
+					struct wlan_objmgr_psoc *psoc,
+					struct vdev_stop_response *rsp);
+	QDF_STATUS (*vdev_mgr_delete_response)(
+					struct wlan_objmgr_psoc *psoc,
+					struct vdev_delete_response *rsp);
+	QDF_STATUS (*vdev_mgr_offload_bcn_tx_status_event_handle)(
+							uint32_t vdev_id,
+							uint32_t tx_status);
+	QDF_STATUS (*vdev_mgr_tbttoffset_update_handle)(
+						uint32_t num_vdevs,
+						bool is_ext);
+#endif
 };
 
 #ifdef WLAN_SUPPORT_GREEN_AP

+ 20 - 0
umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c

@@ -65,6 +65,10 @@
 #include <wlan_cp_stats_tgt_api.h>
 #endif /* QCA_SUPPORT_CP_STATS */
 
+#ifdef CMN_VDEV_MGR_TGT_IF_ENABLE
+#include <wlan_vdev_mgr_tgt_if_rx_api.h>
+#endif
+
 /* Function pointer for OL/WMA specific UMAC tx_ops
  * registration.
  */
@@ -72,6 +76,19 @@ QDF_STATUS (*wlan_lmac_if_umac_tx_ops_register)
 				(struct wlan_lmac_if_tx_ops *tx_ops);
 qdf_export_symbol(wlan_lmac_if_umac_tx_ops_register);
 
+#ifdef CMN_VDEV_MGR_TGT_IF_ENABLE
+static void
+tgt_vdev_mgr_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
+{
+	tgt_vdev_mgr_register_rx_ops(rx_ops);
+}
+#else
+static void
+tgt_vdev_mgr_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
+{
+}
+#endif
+
 #ifdef QCA_SUPPORT_CP_STATS
 /**
  * wlan_lmac_if_cp_stats_rx_ops_register() - API to register cp stats Rx Ops
@@ -516,6 +533,9 @@ wlan_lmac_if_umac_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
 	/* FILS Discovery */
 	wlan_lmac_if_fd_rx_ops_register(rx_ops);
 
+	/* MLME rx_ops */
+	tgt_vdev_mgr_rx_ops_register(rx_ops);
+
 	return QDF_STATUS_SUCCESS;
 }