blob: c919a68f941a95cf026d26b72d66f3aff86d7251 [file] [log] [blame]
Soumya Bhat604dae02016-12-14 16:31:10 +05301/*
Shiva Krishna Pittala66ae9be2019-01-14 18:32:13 +05302 * Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
Soumya Bhat604dae02016-12-14 16:31:10 +05303 *
4 *
5 * Permission to use, copy, modify, and/or distribute this software for
6 * any purpose with or without fee is hereby granted, provided that the
7 * above copyright notice and this permission notice appear in all
8 * copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17 * PERFORMANCE OF THIS SOFTWARE.
18 */
19
20#ifndef _WLAN_LMAC_IF_DEF_H_
21#define _WLAN_LMAC_IF_DEF_H_
22
Padma Raghunathan314a0f72017-03-07 12:01:00 +053023#include <qdf_time.h>
Himanshu Agarwalf8641b92016-12-17 19:33:08 +053024#include "qdf_status.h"
25#include "wlan_objmgr_cmn.h"
Arif Hussain9fba31e2017-03-06 15:14:44 -080026#ifdef DFS_COMPONENT_ENABLE
27#include <wlan_dfs_public_struct.h>
28#endif
Himanshu Agarwal009eee12017-01-05 14:23:18 +053029#include "wlan_mgmt_txrx_utils_api.h"
Om Prakash Tripathi22f95dc2016-12-19 10:45:59 +053030#include "wlan_scan_public_structs.h"
Naveen Rawata2a1eb12018-04-06 10:56:11 -070031
Subrat Mishra81c60e82017-03-02 14:23:37 +053032#ifdef WLAN_ATF_ENABLE
33#include "wlan_atf_utils_defs.h"
34#endif
Bharat Bhushan Chakravarty145d3932017-03-20 12:52:16 -070035#ifdef QCA_SUPPORT_SON
36#include <wlan_son_tgt_api.h>
37#endif
Venkateswara Swamy Bandaru0b9f5ec2017-05-11 10:45:35 +053038#ifdef WLAN_SA_API_ENABLE
39#include "wlan_sa_api_utils_defs.h"
40#endif
Edayilliam Jayadev642201f2017-04-05 14:29:18 +053041#ifdef WLAN_CONV_SPECTRAL_ENABLE
42#include "wlan_spectral_public_structs.h"
43#endif
Amar Singhale4079742017-02-10 15:24:40 -080044#include <reg_services_public_struct.h>
Himanshu Agarwalf8641b92016-12-17 19:33:08 +053045
Ashok Ponnaiahf8c31452017-03-24 06:22:24 +053046#ifdef WLAN_CONV_CRYPTO_SUPPORTED
Ashok Ponnaiah0d0a3682017-02-01 00:19:32 +053047#include "wlan_crypto_global_def.h"
48#endif
Dustin Brown3c777ef2017-05-12 14:01:44 -070049
Abhiram Jogadenub6923392019-02-12 13:54:42 +053050#ifdef WLAN_CFR_ENABLE
51#include "wlan_cfr_utils_api.h"
52#endif
53
Shaakir Mohameda1a7e162017-10-10 16:36:10 -070054#include <wlan_dfs_tgt_api.h>
Shashikala Prabhu2a9f2a02017-11-06 15:42:30 +053055#include <wlan_dfs_ioctl.h>
Shaakir Mohameda1a7e162017-10-10 16:36:10 -070056
Soumya Bhat604dae02016-12-14 16:31:10 +053057/* Number of dev type: Direct attach and Offload */
58#define MAX_DEV_TYPE 2
59
Naveen Rawat18ceca12017-03-06 16:04:45 -080060#ifdef WIFI_POS_CONVERGED
61/* forward declarations */
62struct oem_data_req;
63struct oem_data_rsp;
64#endif /* WIFI_POS_CONVERGED */
65
Sathish Kumar26190a12017-11-17 17:36:51 +053066#ifdef DIRECT_BUF_RX_ENABLE
67/* forward declarations for direct buf rx */
68struct direct_buf_rx_data;
Abhiram Jogadenudb3bb4b2019-02-20 12:29:03 +053069/* Forward declaration for module_ring_params */
70struct module_ring_params;
Abhiram Jogadenud2077da2019-03-14 10:26:35 +053071/*Forward declaration for dbr_module_config */
72struct dbr_module_config;
Sathish Kumar26190a12017-11-17 17:36:51 +053073#endif
74
Jeff Johnson6889ddf2019-02-08 07:22:01 -080075#ifdef FEATURE_WLAN_TDLS
Frank Liu9dd3c3e2017-04-11 22:37:03 +080076#include "wlan_tdls_public_structs.h"
77#endif
78
Nagaa3d37622018-02-28 20:18:21 +053079#ifdef QCA_SUPPORT_CP_STATS
Naveen Rawatd24bebb2018-04-06 11:04:26 -070080#include <wlan_cp_stats_mc_defs.h>
81#endif /* QCA_SUPPORT_CP_STATS */
Nagaa3d37622018-02-28 20:18:21 +053082
Nagaba29b562019-01-21 12:10:25 +053083#include <wlan_vdev_mgr_tgt_if_tx_defs.h>
84#include <wlan_vdev_mgr_tgt_if_rx_defs.h>
Nagaba29b562019-01-21 12:10:25 +053085
Nagaa3d37622018-02-28 20:18:21 +053086#ifdef QCA_SUPPORT_CP_STATS
87/**
88 * struct wlan_lmac_if_cp_stats_tx_ops - defines southbound tx callbacks for
89 * control plane statistics component
90 * @cp_stats_attach: function pointer to register events from FW
91 * @cp_stats_detach: function pointer to unregister events from FW
92 */
93struct wlan_lmac_if_cp_stats_tx_ops {
94 QDF_STATUS (*cp_stats_attach)(struct wlan_objmgr_psoc *psoc);
95 QDF_STATUS (*cp_stats_detach)(struct wlan_objmgr_psoc *posc);
Naveen Rawatd24bebb2018-04-06 11:04:26 -070096#ifdef CONFIG_MCL
97 void (*inc_wake_lock_stats)(uint32_t reason,
98 struct wake_lock_stats *stats,
99 uint32_t *unspecified_wake_count);
Naveen Rawata2a1eb12018-04-06 10:56:11 -0700100 QDF_STATUS (*send_req_stats)(struct wlan_objmgr_psoc *psoc,
101 enum stats_req_type type,
102 struct request_info *req);
Naveen Rawatd24bebb2018-04-06 11:04:26 -0700103#endif
Nagaa3d37622018-02-28 20:18:21 +0530104};
105
106/**
107 * struct wlan_lmac_if_cp_stats_rx_ops - defines southbound rx callbacks for
108 * control plane statistics component
109 * @cp_stats_rx_event_handler: function pointer to rx FW events
110 */
111struct wlan_lmac_if_cp_stats_rx_ops {
112 QDF_STATUS (*cp_stats_rx_event_handler)(struct wlan_objmgr_vdev *vdev);
Naveen Rawata2a1eb12018-04-06 10:56:11 -0700113#ifdef CONFIG_MCL
114 QDF_STATUS (*process_stats_event)(struct wlan_objmgr_psoc *psoc,
115 struct stats_event *ev);
116#endif
Nagaa3d37622018-02-28 20:18:21 +0530117};
118#endif
119
Himanshu Agarwalf8641b92016-12-17 19:33:08 +0530120/**
121 * struct wlan_lmac_if_mgmt_txrx_tx_ops - structure of tx function
122 * pointers for mgmt txrx component
123 * @mgmt_tx_send: function pointer to transmit mgmt tx frame
124 * @beacon_send: function pointer to transmit beacon frame
Subrat Mishrabf125872017-09-27 14:41:20 +0530125 * @fd_action_frame_send: function pointer to transmit FD action frame
Sravan Kumar Kairam516330b2018-09-10 17:09:12 +0530126 * @tx_drain_nbuf_op: function pointer for any umac nbuf realted ops for
127 * pending mgmt frames cleanup
Himanshu Agarwalf8641b92016-12-17 19:33:08 +0530128 */
129struct wlan_lmac_if_mgmt_txrx_tx_ops {
130 QDF_STATUS (*mgmt_tx_send)(struct wlan_objmgr_vdev *vdev,
131 qdf_nbuf_t nbuf, u_int32_t desc_id,
132 void *mgmt_tx_params);
133 QDF_STATUS (*beacon_send)(struct wlan_objmgr_vdev *vdev,
134 qdf_nbuf_t nbuf);
Subrat Mishrabf125872017-09-27 14:41:20 +0530135 QDF_STATUS (*fd_action_frame_send)(struct wlan_objmgr_vdev *vdev,
136 qdf_nbuf_t nbuf);
Sravan Kumar Kairam516330b2018-09-10 17:09:12 +0530137 void (*tx_drain_nbuf_op)(struct wlan_objmgr_pdev *pdev,
138 qdf_nbuf_t nbuf);
Himanshu Agarwalf8641b92016-12-17 19:33:08 +0530139};
140
Om Prakash Tripathi22f95dc2016-12-19 10:45:59 +0530141/**
142 * struct wlan_lmac_if_scan_tx_ops - south bound tx function pointers for scan
143 * @scan_start: function to start scan
144 * @scan_cancel: function to cancel scan
Abhishek Singh8c6e82d2017-03-03 21:57:29 +0530145 * @pno_start: start pno scan
146 * @pno_stop: stop pno scan
Om Prakash Tripathi22f95dc2016-12-19 10:45:59 +0530147 * @scan_reg_ev_handler: function to register for scan events
148 * @scan_unreg_ev_handler: function to unregister for scan events
149 *
150 * scan module uses these functions to avail ol/da lmac services
151 */
152struct wlan_lmac_if_scan_tx_ops {
Santosh Anbu9d32d1d2018-03-07 15:33:27 +0530153 QDF_STATUS (*scan_start)(struct wlan_objmgr_pdev *pdev,
Om Prakash Tripathi22f95dc2016-12-19 10:45:59 +0530154 struct scan_start_request *req);
Santosh Anbu9d32d1d2018-03-07 15:33:27 +0530155 QDF_STATUS (*scan_cancel)(struct wlan_objmgr_pdev *pdev,
Om Prakash Tripathi22f95dc2016-12-19 10:45:59 +0530156 struct scan_cancel_param *req);
Abhishek Singh8c6e82d2017-03-03 21:57:29 +0530157 QDF_STATUS (*pno_start)(struct wlan_objmgr_psoc *psoc,
158 struct pno_scan_req_params *req);
159 QDF_STATUS (*pno_stop)(struct wlan_objmgr_psoc *psoc,
160 uint8_t vdev_id);
Om Prakash Tripathi22f95dc2016-12-19 10:45:59 +0530161 QDF_STATUS (*scan_reg_ev_handler)(struct wlan_objmgr_psoc *psoc,
162 void *arg);
163 QDF_STATUS (*scan_unreg_ev_handler)(struct wlan_objmgr_psoc *psoc,
164 void *arg);
165 QDF_STATUS (*set_chan_list)(struct wlan_objmgr_pdev *pdev, void *arg);
166};
167
akosigifffcebf2017-11-15 18:29:32 +0530168/**
169 * struct wlan_lmac_if_ftm_tx_ops - south bound tx function pointers for ftm
170 * @ftm_attach: function to register event handlers with FW
171 * @ftm_detach: function to de-register event handlers with FW
172 * @ftm_cmd_send: function to send FTM commands to FW
173 *
174 * ftm module uses these functions to avail ol/da lmac services
175 */
176struct wlan_lmac_if_ftm_tx_ops {
177 QDF_STATUS (*ftm_attach)(struct wlan_objmgr_psoc *psoc);
178 QDF_STATUS (*ftm_detach)(struct wlan_objmgr_psoc *psoc);
179 QDF_STATUS (*ftm_cmd_send)(struct wlan_objmgr_pdev *pdev,
180 uint8_t *buf, uint32_t len, uint8_t mac_id);
181};
182
Jianmin Zhuce7b0472019-09-06 16:22:31 +0800183enum wlan_mlme_cfg_id;
Nagaba29b562019-01-21 12:10:25 +0530184/**
185 * struct wlan_lmac_if_mlme_tx_ops - south bound tx function pointers for mlme
186 * @scan_sta_power_events: function to handle STA power events
187 * @scan_connection_lost: function to get scan connection lost
188 * @scan_end: function to end scan
189 * @get_wifi_iface_id: function to get wifi interface id
190 * @vdev_mlme_attach: function to register events
191 * @vdev_mlme_detach: function to unregister events
Naga7dd88342019-02-05 22:34:24 +0530192 * @vdev_mgr_rsp_timer_init: function to initialize vdev response timer
Naga7dd88342019-02-05 22:34:24 +0530193 * @vdev_mgr_rsp_timer_mod: function to timer_mod vdev response timer
Nagaba29b562019-01-21 12:10:25 +0530194 * @vdev_create_send: function to send vdev create
Nagaba29b562019-01-21 12:10:25 +0530195 * @vdev_start_send: function to send vdev start
196 * @vdev_up_send: function to send vdev up
197 * @vdev_delete_send: function to send vdev delete
198 * @vdev_stop_send: function to send vdev stop
199 * @vdev_down_send: function to send vdev down
200 * @vdev_set_param_send: function to send vdev parameter
Jianmin Zhuce7b0472019-09-06 16:22:31 +0800201 * @vdev_set_tx_rx_decap_type: function to send vdev tx rx cap/decap type
Nagaba29b562019-01-21 12:10:25 +0530202 * @vdev_set_nac_rssi_send: function to send nac rssi
203 * @vdev_set_neighbour_rx_cmd_send: function to send vdev neighbour rx cmd
204 * @vdev_sifs_trigger_send: function to send vdev sifs trigger
205 * @vdev_set_custom_aggr_size_cmd_send: function to send custom aggr size
206 * @vdev_config_ratemask_cmd_send: function to send ratemask
207 * @peer_flush_tids_send: function to flush peer tids
208 * @multiple_vdev_restart_req_cmd: function to send multiple vdev restart
209 * @beacon_send_cmd: function to send beacon
210 * @beacon_tmpl_send: function to send beacon template
211 * @vdev_bcn_miss_offload_send: function to send beacon miss offload
212 * @vdev_sta_ps_param_send: function to sent STA power save config
Naga866a6682019-06-24 18:09:46 +0530213 * @peer_delete_all_send: function to send vdev delete all peer request
Nagaba29b562019-01-21 12:10:25 +0530214 */
Padma Raghunathan314a0f72017-03-07 12:01:00 +0530215struct wlan_lmac_if_mlme_tx_ops {
216 void (*scan_sta_power_events)(struct wlan_objmgr_pdev *pdev,
217 int event_type, int event_status);
218 void (*scan_connection_lost)(struct wlan_objmgr_pdev *pdev);
219 void (*scan_end)(struct wlan_objmgr_pdev *pdev);
Venkateswara Swamy Bandaru73c74692017-09-28 12:34:00 +0530220 uint32_t (*get_wifi_iface_id) (struct wlan_objmgr_pdev *pdev);
Nagaba29b562019-01-21 12:10:25 +0530221 QDF_STATUS (*vdev_mlme_attach)(struct wlan_objmgr_psoc *psoc);
222 QDF_STATUS (*vdev_mlme_detach)(struct wlan_objmgr_psoc *psoc);
Naga7dd88342019-02-05 22:34:24 +0530223 QDF_STATUS (*vdev_mgr_rsp_timer_init)(
224 struct wlan_objmgr_vdev *vdev,
225 qdf_timer_t *rsp_timer);
Naga7dd88342019-02-05 22:34:24 +0530226 QDF_STATUS (*vdev_mgr_rsp_timer_mod)(
227 struct wlan_objmgr_vdev *vdev,
228 struct vdev_response_timer *vdev_rsp,
229 int mseconds);
Nagaba29b562019-01-21 12:10:25 +0530230 QDF_STATUS (*vdev_create_send)(struct wlan_objmgr_vdev *vdev,
231 struct vdev_create_params *param);
Nagaba29b562019-01-21 12:10:25 +0530232 QDF_STATUS (*vdev_start_send)(struct wlan_objmgr_vdev *vdev,
233 struct vdev_start_params *param);
234 QDF_STATUS (*vdev_up_send)(struct wlan_objmgr_vdev *vdev,
235 struct vdev_up_params *param);
236 QDF_STATUS (*vdev_delete_send)(struct wlan_objmgr_vdev *vdev,
237 struct vdev_delete_params *param);
238 QDF_STATUS (*vdev_stop_send)(struct wlan_objmgr_vdev *vdev,
239 struct vdev_stop_params *param);
240 QDF_STATUS (*vdev_down_send)(struct wlan_objmgr_vdev *vdev,
241 struct vdev_down_params *param);
242 QDF_STATUS (*vdev_set_param_send)(struct wlan_objmgr_vdev *vdev,
243 struct vdev_set_params *param);
Jianmin Zhuce7b0472019-09-06 16:22:31 +0800244 QDF_STATUS (*vdev_set_tx_rx_decap_type)(struct wlan_objmgr_vdev *vdev,
245 enum wlan_mlme_cfg_id param_id,
246 uint32_t value);
Nagaba29b562019-01-21 12:10:25 +0530247 QDF_STATUS (*vdev_set_nac_rssi_send)(
248 struct wlan_objmgr_vdev *vdev,
249 struct vdev_scan_nac_rssi_params *param);
250 QDF_STATUS (*vdev_set_neighbour_rx_cmd_send)(
251 struct wlan_objmgr_vdev *vdev,
252 struct set_neighbour_rx_params *param,
253 uint8_t *mac);
254 QDF_STATUS (*vdev_sifs_trigger_send)(
255 struct wlan_objmgr_vdev *vdev,
256 struct sifs_trigger_param *param);
257 QDF_STATUS (*vdev_set_custom_aggr_size_cmd_send)(
258 struct wlan_objmgr_vdev *vdev,
259 struct set_custom_aggr_size_params *param);
260 QDF_STATUS (*vdev_config_ratemask_cmd_send)(
261 struct wlan_objmgr_vdev *vdev,
262 struct config_ratemask_params *param);
263 QDF_STATUS (*peer_flush_tids_send)(
264 struct wlan_objmgr_vdev *vdev,
265 struct peer_flush_params *param);
266 QDF_STATUS (*multiple_vdev_restart_req_cmd)(
267 struct wlan_objmgr_pdev *pdev,
268 struct multiple_vdev_restart_params *param);
269 QDF_STATUS (*beacon_cmd_send)(struct wlan_objmgr_vdev *vdev,
270 struct beacon_params *param);
271 QDF_STATUS (*beacon_tmpl_send)(struct wlan_objmgr_vdev *vdev,
272 struct beacon_tmpl_params *param);
273 QDF_STATUS (*vdev_bcn_miss_offload_send)(struct wlan_objmgr_vdev *vdev);
274 QDF_STATUS (*vdev_sta_ps_param_send)(struct wlan_objmgr_vdev *vdev,
275 struct sta_ps_params *param);
Naga866a6682019-06-24 18:09:46 +0530276 QDF_STATUS (*peer_delete_all_send)(
277 struct wlan_objmgr_vdev *vdev,
278 struct peer_delete_all_params *param);
Padma Raghunathan314a0f72017-03-07 12:01:00 +0530279};
280
Om Prakash Tripathi22f95dc2016-12-19 10:45:59 +0530281/**
282 * struct wlan_lmac_if_scan_rx_ops - south bound rx function pointers for scan
283 * @scan_ev_handler: scan event handler
Om Prakash Tripathi0078b782017-04-12 12:23:40 +0530284 * @scan_set_max_active_scans: set max active scans allowed
Om Prakash Tripathi22f95dc2016-12-19 10:45:59 +0530285 *
286 * lmac modules uses this API to post scan events to scan module
287 */
288struct wlan_lmac_if_scan_rx_ops {
289 QDF_STATUS (*scan_ev_handler)(struct wlan_objmgr_psoc *psoc,
290 struct scan_event_info *event_info);
Om Prakash Tripathi0078b782017-04-12 12:23:40 +0530291 QDF_STATUS (*scan_set_max_active_scans)(struct wlan_objmgr_psoc *psoc,
292 uint32_t max_active_scans);
Om Prakash Tripathi22f95dc2016-12-19 10:45:59 +0530293};
294
Wu Gao89c8a8a2017-03-22 12:54:13 +0800295#ifdef CONVERGED_P2P_ENABLE
Wu Gao396518b2017-03-15 19:12:20 +0800296
297/* forward declarations for p2p tx ops */
298struct p2p_ps_config;
299struct p2p_lo_start;
Liangwei Dongcc8676b2018-09-19 23:35:14 -0400300struct p2p_set_mac_filter;
Wu Gao396518b2017-03-15 19:12:20 +0800301
302/**
303 * struct wlan_lmac_if_p2p_tx_ops - structure of tx function pointers
304 * for P2P component
305 * @set_ps: function pointer to set power save
306 * @lo_start: function pointer to start listen offload
307 * @lo_stop: function pointer to stop listen offload
Rachit Kankane4475ff22017-04-19 11:49:18 +0530308 * @set_noa: function pointer to disable/enable NOA
Wu Gao396518b2017-03-15 19:12:20 +0800309 * @reg_lo_ev_handler: function pointer to register lo event handler
310 * @reg_noa_ev_handler: function pointer to register noa event handler
311 * @unreg_lo_ev_handler: function pointer to unregister lo event handler
312 * @unreg_noa_ev_handler:function pointer to unregister noa event handler
Liangwei Dongcc8676b2018-09-19 23:35:14 -0400313 * @reg_mac_addr_rx_filter_handler: function pointer to register/unregister
314 * set mac addr status event callback.
315 * @set_mac_addr_rx_filter_cmd: function pointer to set mac addr rx filter
Wu Gao396518b2017-03-15 19:12:20 +0800316 */
317struct wlan_lmac_if_p2p_tx_ops {
318 QDF_STATUS (*set_ps)(struct wlan_objmgr_psoc *psoc,
319 struct p2p_ps_config *ps_config);
Rachit Kankane898f6ff2018-07-31 16:26:38 +0530320#ifdef FEATURE_P2P_LISTEN_OFFLOAD
Wu Gao396518b2017-03-15 19:12:20 +0800321 QDF_STATUS (*lo_start)(struct wlan_objmgr_psoc *psoc,
322 struct p2p_lo_start *lo_start);
323 QDF_STATUS (*lo_stop)(struct wlan_objmgr_psoc *psoc,
324 uint32_t vdev_id);
325 QDF_STATUS (*reg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc,
326 void *arg);
Wu Gao396518b2017-03-15 19:12:20 +0800327 QDF_STATUS (*unreg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc,
328 void *arg);
Rachit Kankane898f6ff2018-07-31 16:26:38 +0530329#endif
330 QDF_STATUS (*set_noa)(struct wlan_objmgr_psoc *psoc,
331 uint32_t vdev_id, bool disable_noa);
332 QDF_STATUS (*reg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc,
333 void *arg);
Wu Gao396518b2017-03-15 19:12:20 +0800334 QDF_STATUS (*unreg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc,
335 void *arg);
Liangwei Dongcc8676b2018-09-19 23:35:14 -0400336 QDF_STATUS (*reg_mac_addr_rx_filter_handler)(
337 struct wlan_objmgr_psoc *psoc, bool reg);
338 QDF_STATUS (*set_mac_addr_rx_filter_cmd)(
339 struct wlan_objmgr_psoc *psoc,
340 struct p2p_set_mac_filter *param);
Wu Gao396518b2017-03-15 19:12:20 +0800341};
342#endif
343
Subrat Mishra81c60e82017-03-02 14:23:37 +0530344#ifdef WLAN_ATF_ENABLE
345
346/**
347 * struct wlan_lmac_if_atf_tx_ops - ATF specific tx function pointers
Jeffin Mammenc17d8ee2018-08-13 09:53:57 +0530348 * @atf_node_unblock: Resume node
Subrat Mishra81c60e82017-03-02 14:23:37 +0530349 * @atf_set_enable_disable: Set atf enable/disable
350 * @atf_tokens_used: Get used atf tokens
351 * @atf_get_unused_txtoken: Get unused atf tokens
352 * @atf_peer_resume: Resume peer
353 * @atf_tokens_unassigned: Set unassigned atf tockens
354 * @atf_capable_peer: Set atf state change
355 * @atf_airtime_estimate: Get estimated airtime
356 * @atf_debug_peerstate: Get peer state
357 * @atf_enable_disable: Set atf peer stats enable/disable
358 * @atf_ssid_sched_policy: Set ssid schedule policy
359 * @atf_set: Set atf
360 * @atf_set_grouping: Set atf grouping
Jeffin Mammenc17d8ee2018-08-13 09:53:57 +0530361 * @atf_set_group_ac: Set atf Group AC
Subrat Mishra81c60e82017-03-02 14:23:37 +0530362 * @atf_send_peer_request: Send peer requests
363 * @atf_set_bwf: Set bandwidth fairness
364 * @atf_peer_buf_held: Get buffer held
365 * @atf_get_peer_airtime: Get peer airtime
366 * @atf_get_chbusyper: Get channel busy
367 * @atf_open: ATF open
368 * @atf_register_event_handler ATF register wmi event handlers
369 * @atf_unregister_event_handler ATF unregister wmi event handlers
370 */
371struct wlan_lmac_if_atf_tx_ops {
Jeffin Mammenc17d8ee2018-08-13 09:53:57 +0530372 void (*atf_node_unblock)(struct wlan_objmgr_pdev *pdev,
373 struct wlan_objmgr_peer *peer);
Subrat Mishra81c60e82017-03-02 14:23:37 +0530374 void (*atf_set_enable_disable)(struct wlan_objmgr_pdev *pdev,
375 uint8_t value);
376 uint8_t (*atf_tokens_used)(struct wlan_objmgr_pdev *pdev,
377 struct wlan_objmgr_peer *peer);
378 void (*atf_get_unused_txtoken)(struct wlan_objmgr_pdev *pdev,
379 struct wlan_objmgr_peer *peer,
380 int *unused_token);
381 void (*atf_peer_resume)(struct wlan_objmgr_pdev *pdev,
382 struct wlan_objmgr_peer *peer);
383 void (*atf_tokens_unassigned)(struct wlan_objmgr_pdev *pdev,
384 uint32_t tokens_unassigned);
385 void (*atf_capable_peer)(struct wlan_objmgr_pdev *pdev,
386 struct wlan_objmgr_peer *peer,
387 uint8_t val, uint8_t atfstate_change);
388 uint32_t (*atf_airtime_estimate)(struct wlan_objmgr_pdev *pdev,
389 struct wlan_objmgr_peer *peer,
390 uint32_t tput,
391 uint32_t *possible_tput);
392 uint32_t (*atf_debug_peerstate)(struct wlan_objmgr_pdev *pdev,
Jeffin Mammenc17d8ee2018-08-13 09:53:57 +0530393 struct wlan_objmgr_peer *peer,
394 struct atf_peerstate *peerstate);
Subrat Mishra81c60e82017-03-02 14:23:37 +0530395 int32_t (*atf_enable_disable)(struct wlan_objmgr_vdev *vdev,
396 uint8_t value);
397 int32_t (*atf_ssid_sched_policy)(struct wlan_objmgr_vdev *vdev,
398 uint8_t value);
399 int32_t (*atf_set)(struct wlan_objmgr_pdev *pdev,
400 struct pdev_atf_req *atf_req,
401 uint8_t atf_tput_based);
402 int32_t (*atf_set_grouping)(struct wlan_objmgr_pdev *pdev,
403 struct pdev_atf_ssid_group_req *atf_grp_req,
404 uint8_t atf_tput_based);
Jeffin Mammenc17d8ee2018-08-13 09:53:57 +0530405 int32_t (*atf_set_group_ac)(struct wlan_objmgr_pdev *pdev,
406 struct pdev_atf_group_wmm_ac_req *atf_acreq,
407 uint8_t atf_tput_based);
Subrat Mishra81c60e82017-03-02 14:23:37 +0530408 int32_t (*atf_send_peer_request)(struct wlan_objmgr_pdev *pdev,
409 struct pdev_atf_peer_ext_request *atfr,
410 uint8_t atf_tput_based);
411 int32_t (*atf_set_bwf)(struct wlan_objmgr_pdev *pdev,
412 struct pdev_bwf_req *bwf_req);
413 uint32_t (*atf_peer_buf_held)(struct wlan_objmgr_peer *peer);
414 uint32_t (*atf_get_peer_airtime)(struct wlan_objmgr_peer *peer);
415 uint32_t (*atf_get_chbusyper)(struct wlan_objmgr_pdev *pdev);
416 void (*atf_open)(struct wlan_objmgr_psoc *psoc);
417 void (*atf_register_event_handler)(struct wlan_objmgr_psoc *psoc);
418 void (*atf_unregister_event_handler)(struct wlan_objmgr_psoc *psoc);
419};
420#endif
421
Subrat Mishrabf125872017-09-27 14:41:20 +0530422#ifdef WLAN_SUPPORT_FILS
423/**
424 * struct wlan_lmac_if_fd_tx_ops - FILS Discovery specific Tx function pointers
425 * @fd_vdev_config_fils: Enable and configure FILS Discovery
426 * @fd_register_event_handler: Register swfda WMI event handler
427 * @fd_unregister_event_handler: Un-register swfda WMI event handler
Rhythm Patwa25a0e882019-10-19 21:36:48 -0700428 * @fd_offload_tmpl_send: Send FD template to FW
Subrat Mishrabf125872017-09-27 14:41:20 +0530429 */
430struct wlan_lmac_if_fd_tx_ops {
431 QDF_STATUS (*fd_vdev_config_fils)(struct wlan_objmgr_vdev *vdev,
432 uint32_t fd_period);
433 void (*fd_register_event_handler)(struct wlan_objmgr_psoc *psoc);
434 void (*fd_unregister_event_handler)(struct wlan_objmgr_psoc *psoc);
Rhythm Patwa25a0e882019-10-19 21:36:48 -0700435 QDF_STATUS (*fd_offload_tmpl_send)(struct wlan_objmgr_pdev *pdev,
436 struct fils_discovery_tmpl_params *fd_tmpl_param);
Subrat Mishrabf125872017-09-27 14:41:20 +0530437};
438#endif
439
Venkateswara Swamy Bandaru0b9f5ec2017-05-11 10:45:35 +0530440#ifdef WLAN_SA_API_ENABLE
441
442/**
443 * struct wlan_lmac_if_sa_api_tx_ops - SA API specific tx function pointers
444 */
445
446struct wlan_lmac_if_sa_api_tx_ops {
447 void (*sa_api_register_event_handler)(struct wlan_objmgr_psoc *psoc);
448 void (*sa_api_unregister_event_handler)(struct wlan_objmgr_psoc *posc);
449 void (*sa_api_enable_sa) (struct wlan_objmgr_pdev *pdev,
450 uint32_t enable, uint32_t mode, uint32_t rx_antenna);
451 void (*sa_api_set_rx_antenna) (struct wlan_objmgr_pdev *pdev,
452 uint32_t antenna);
453 void (*sa_api_set_tx_antenna) (struct wlan_objmgr_peer *peer,
454 uint32_t *antenna_array);
455 void (*sa_api_set_tx_default_antenna) (struct wlan_objmgr_pdev *pdev,
456 u_int32_t antenna);
457 void (*sa_api_set_training_info) (struct wlan_objmgr_peer *peer,
458 uint32_t *rate_array,
459 uint32_t *antenna_array,
460 uint32_t numpkts);
461 void (*sa_api_prepare_rateset)(struct wlan_objmgr_pdev *pdev,
462 struct wlan_objmgr_peer *peer,
463 struct sa_rate_info *rate_info);
464 void (*sa_api_set_node_config_ops) (struct wlan_objmgr_peer *peer,
465 uint32_t cmd_id, uint16_t args_count,
466 u_int32_t args_arr[]);
467};
468
469#endif
470
Abhiram Jogadenub6923392019-02-12 13:54:42 +0530471#ifdef WLAN_CFR_ENABLE
472/**
473 * struct wlan_lmac_if_cfr_tx_ops - CFR specific tx function pointers
474 * @cfr_init_pdev: Initialize CFR
475 * @cfr_deinit_pdev: De-initialize CFR
476 * @cfr_enable_cfr_timer: Function to enable CFR timer
477 * @cfr_start_capture: Function to start CFR capture
478 * @cfr_stop_capture: Function to stop CFR capture
479 */
480struct wlan_lmac_if_cfr_tx_ops {
481 int (*cfr_init_pdev)(struct wlan_objmgr_psoc *psoc,
482 struct wlan_objmgr_pdev *pdev);
483 int (*cfr_deinit_pdev)(struct wlan_objmgr_psoc *psoc,
484 struct wlan_objmgr_pdev *pdev);
485 int (*cfr_enable_cfr_timer)(struct wlan_objmgr_pdev *pdev,
486 uint32_t cfr_timer);
487 int (*cfr_start_capture)(struct wlan_objmgr_pdev *pdev,
488 struct wlan_objmgr_peer *peer,
489 struct cfr_capture_params *params);
490 int (*cfr_stop_capture)(struct wlan_objmgr_pdev *pdev,
491 struct wlan_objmgr_peer *peer);
492};
493#endif /* WLAN_CFR_ENABLE */
494
Edayilliam Jayadev642201f2017-04-05 14:29:18 +0530495#ifdef WLAN_CONV_SPECTRAL_ENABLE
Shiva Krishna Pittalaa3d50e82017-11-24 17:24:55 +0530496struct wmi_spectral_cmd_ops;
Edayilliam Jayadev642201f2017-04-05 14:29:18 +0530497/**
498 * struct wlan_lmac_if_sptrl_tx_ops - Spectral south bound Tx operations
499 * @sptrlto_spectral_init: Initialize LMAC/target_if Spectral
500 * @sptrlto_spectral_deinit: De-initialize LMAC/target_if Spectral
501 * @sptrlto_set_spectral_config: Set Spectral configuration
502 * @sptrlto_get_spectral_config: Get Spectral configuration
503 * @sptrlto_start_spectral_scan: Start Spectral Scan
504 * @sptrlto_stop_spectral_scan: Stop Spectral Scan
505 * @sptrlto_is_spectral_active: Get whether Spectral is active
506 * @sptrlto_is_spectral_enabled: Get whether Spectral is enabled
507 * @sptrlto_set_icm_active: Set whether ICM is active or inactive
508 * @sptrlto_get_icm_active: Get whether ICM is active or inactive
509 * @sptrlto_get_nominal_nf: Get Nominal Noise Floor for the current
510 * frequency band
511 * @sptrlto_set_debug_level: Set Spectral debug level
512 * @sptrlto_get_debug_level: Get Spectral debug level
513 * @sptrlto_get_chaninfo: Get channel information
514 * @sptrlto_clear_chaninfo: Clear channel information
515 * @sptrlto_get_spectral_capinfo: Get Spectral capability information
516 * @sptrlto_get_spectral_diagstats: Get Spectral diagnostic statistics
Shiva Krishna Pittala10177862017-12-29 20:17:39 +0530517 * @sptrlto_register_netlink_cb: Register Spectral Netlink callbacks
518 * @sptrlto_use_nl_bcast: Get whether to use Netlink broadcast/unicast
Shiva Krishna Pittalaa143f832018-02-13 14:25:56 +0530519 * @sptrlto_deregister_netlink_cb: De-register Spectral Netlink callbacks
Edayilliam Jayadev01b49212018-03-29 17:24:02 +0530520 * @sptrlto_process_spectral_report: Process spectral report
Edayilliam Jayadev642201f2017-04-05 14:29:18 +0530521 **/
522struct wlan_lmac_if_sptrl_tx_ops {
Sandeep Puligilla1e1def72017-12-18 22:52:13 -0800523 void *(*sptrlto_pdev_spectral_init)(struct wlan_objmgr_pdev *pdev);
Edayilliam Jayadev642201f2017-04-05 14:29:18 +0530524 void (*sptrlto_pdev_spectral_deinit)(struct wlan_objmgr_pdev *pdev);
Edayilliam Jayadev8e74a622019-06-21 15:50:02 +0530525 QDF_STATUS (*sptrlto_set_spectral_config)
526 (struct wlan_objmgr_pdev *pdev,
527 const u_int32_t threshtype,
528 const u_int32_t value,
529 const enum spectral_scan_mode smode,
530 enum spectral_cp_error_code *err);
531 QDF_STATUS (*sptrlto_get_spectral_config)
532 (struct wlan_objmgr_pdev *pdev,
533 struct spectral_config *sptrl_config,
534 enum spectral_scan_mode smode);
535 QDF_STATUS (*sptrlto_start_spectral_scan)
536 (struct wlan_objmgr_pdev *pdev,
537 const enum spectral_scan_mode smode,
538 enum spectral_cp_error_code *err);
539 QDF_STATUS (*sptrlto_stop_spectral_scan)
540 (struct wlan_objmgr_pdev *pdev,
Edayilliam Jayadev9217a212019-08-26 14:32:33 +0530541 const enum spectral_scan_mode smode,
542 enum spectral_cp_error_code *err);
Edayilliam Jayadev8e74a622019-06-21 15:50:02 +0530543 bool (*sptrlto_is_spectral_active)(struct wlan_objmgr_pdev *pdev,
544 const enum spectral_scan_mode smode);
545 bool (*sptrlto_is_spectral_enabled)(struct wlan_objmgr_pdev *pdev,
546 enum spectral_scan_mode smode);
547 QDF_STATUS (*sptrlto_set_debug_level)(struct wlan_objmgr_pdev *pdev,
548 u_int32_t debug_level);
Edayilliam Jayadev642201f2017-04-05 14:29:18 +0530549 u_int32_t (*sptrlto_get_debug_level)(struct wlan_objmgr_pdev *pdev);
Edayilliam Jayadev8e74a622019-06-21 15:50:02 +0530550 QDF_STATUS (*sptrlto_get_spectral_capinfo)
551 (struct wlan_objmgr_pdev *pdev,
552 struct spectral_caps *scaps);
553 QDF_STATUS (*sptrlto_get_spectral_diagstats)
554 (struct wlan_objmgr_pdev *pdev,
555 struct spectral_diag_stats *stats);
Shiva Krishna Pittalaa3d50e82017-11-24 17:24:55 +0530556 void (*sptrlto_register_wmi_spectral_cmd_ops)(
557 struct wlan_objmgr_pdev *pdev,
558 struct wmi_spectral_cmd_ops *cmd_ops);
Shiva Krishna Pittala10177862017-12-29 20:17:39 +0530559 void (*sptrlto_register_netlink_cb)(
560 struct wlan_objmgr_pdev *pdev,
561 struct spectral_nl_cb *nl_cb);
562 bool (*sptrlto_use_nl_bcast)(struct wlan_objmgr_pdev *pdev);
Shiva Krishna Pittalaa143f832018-02-13 14:25:56 +0530563 void (*sptrlto_deregister_netlink_cb)(struct wlan_objmgr_pdev *pdev);
Edayilliam Jayadev01b49212018-03-29 17:24:02 +0530564 int (*sptrlto_process_spectral_report)(
565 struct wlan_objmgr_pdev *pdev,
566 void *payload);
Edayilliam Jayadev642201f2017-04-05 14:29:18 +0530567};
568#endif /* WLAN_CONV_SPECTRAL_ENABLE */
569
Naveen Rawat18ceca12017-03-06 16:04:45 -0800570#ifdef WIFI_POS_CONVERGED
571/*
572 * struct wlan_lmac_if_wifi_pos_tx_ops - structure of firmware tx function
573 * pointers for wifi_pos component
574 * @data_req_tx: function pointer to send wifi_pos req to firmware
Abhiram Jogadenu1c2b5832019-07-12 11:03:04 +0530575 * @wifi_pos_register_events: function pointer to register wifi_pos events
576 * @wifi_pos_deregister_events: function pointer to deregister wifi_pos events
Naveen Rawat18ceca12017-03-06 16:04:45 -0800577 */
578struct wlan_lmac_if_wifi_pos_tx_ops {
Kiran Venkatappa2e5d58d2019-07-23 17:42:51 +0530579 QDF_STATUS (*data_req_tx)(struct wlan_objmgr_pdev *pdev,
Naveen Rawat18ceca12017-03-06 16:04:45 -0800580 struct oem_data_req *req);
Abhiram Jogadenu1c2b5832019-07-12 11:03:04 +0530581 QDF_STATUS (*wifi_pos_register_events)(struct wlan_objmgr_psoc *psoc);
582 QDF_STATUS (*wifi_pos_deregister_events)(struct wlan_objmgr_psoc *psoc);
Naveen Rawat18ceca12017-03-06 16:04:45 -0800583};
584#endif
585
Sathish Kumar26190a12017-11-17 17:36:51 +0530586#ifdef DIRECT_BUF_RX_ENABLE
587/**
588 * struct wlan_lmac_if_direct_buf_rx_tx_ops - structire of direct buf rx txops
589 * @direct_buf_rx_module_register: Registration API callback for modules
590 * to register with direct buf rx framework
Edayilliam Jayadev2bee1aa2019-01-24 19:38:45 +0530591 * @direct_buf_rx_module_unregister: Unregistration API to clean up module
592 * specific resources in DBR
Sathish Kumar76071842018-01-05 15:33:25 +0530593 * @direct_buf_rx_register_events: Registration of WMI events for direct
594 * buffer rx framework
595 * @direct_buf_rx_unregister_events: Unregistraton of WMI events for direct
596 * buffer rx framework
Sathish Kumar5cf98052018-06-20 10:36:40 +0530597 * @direct_buf_rx_print_ring_stat: Print ring status per module per pdev
Abhiram Jogadenudb3bb4b2019-02-20 12:29:03 +0530598 *
599 * @direct_buf_rx_get_ring_params: Get ring parameters for module_id
Sathish Kumar26190a12017-11-17 17:36:51 +0530600 */
601struct wlan_lmac_if_direct_buf_rx_tx_ops {
602 QDF_STATUS (*direct_buf_rx_module_register)(
603 struct wlan_objmgr_pdev *pdev, uint8_t mod_id,
Abhiram Jogadenud2077da2019-03-14 10:26:35 +0530604 struct dbr_module_config *dbr_config,
Kiran Venkatappa503a7d32019-02-22 11:18:02 +0530605 bool (*dbr_rsp_handler)
606 (struct wlan_objmgr_pdev *pdev,
607 struct direct_buf_rx_data *dbr_data));
Edayilliam Jayadev2bee1aa2019-01-24 19:38:45 +0530608 QDF_STATUS (*direct_buf_rx_module_unregister)(
609 struct wlan_objmgr_pdev *pdev, uint8_t mod_id);
Sathish Kumar76071842018-01-05 15:33:25 +0530610 QDF_STATUS (*direct_buf_rx_register_events)(
611 struct wlan_objmgr_psoc *psoc);
612 QDF_STATUS (*direct_buf_rx_unregister_events)(
613 struct wlan_objmgr_psoc *psoc);
Sathish Kumar5cf98052018-06-20 10:36:40 +0530614 QDF_STATUS (*direct_buf_rx_print_ring_stat)(
615 struct wlan_objmgr_pdev *pdev);
Abhiram Jogadenudb3bb4b2019-02-20 12:29:03 +0530616 QDF_STATUS (*direct_buf_rx_get_ring_params)
617 (struct wlan_objmgr_pdev *pdev,
618 struct module_ring_params *param,
Wu Gaofe2a6182019-09-09 20:18:49 +0800619 uint8_t module_id, uint8_t srng_id);
Sathish Kumar26190a12017-11-17 17:36:51 +0530620};
621#endif
622
Jeff Johnson6889ddf2019-02-08 07:22:01 -0800623#ifdef FEATURE_WLAN_TDLS
Frank Liu9dd3c3e2017-04-11 22:37:03 +0800624/* fwd declarations for tdls tx ops */
625struct tdls_info;
626struct tdls_peer_update_state;
627struct tdls_channel_switch_params;
628struct sta_uapsd_trig_params;
629/**
630 * struct wlan_lmac_if_tdls_tx_ops - south bound tx function pointers for tdls
631 * @update_fw_state: function to update tdls firmware state
632 * @update_peer_state: function to update tdls peer state
633 * @set_offchan_mode: function to set tdls offchannel mode
634 * @tdls_reg_ev_handler: function to register for tdls events
635 * @tdls_unreg_ev_handler: function to unregister for tdls events
Frank Liu9dd3c3e2017-04-11 22:37:03 +0800636 *
637 * tdls module uses these functions to avail ol/da lmac services
638 */
639struct wlan_lmac_if_tdls_tx_ops {
Srinivas Pitlaee54aea2018-01-08 17:04:39 +0530640 QDF_STATUS (*update_fw_state)(struct wlan_objmgr_psoc *psoc,
Frank Liu9dd3c3e2017-04-11 22:37:03 +0800641 struct tdls_info *req);
Srinivas Pitlaee54aea2018-01-08 17:04:39 +0530642 QDF_STATUS (*update_peer_state)(struct wlan_objmgr_psoc *psoc,
Frank Liu9dd3c3e2017-04-11 22:37:03 +0800643 struct tdls_peer_update_state *param);
Srinivas Pitlaee54aea2018-01-08 17:04:39 +0530644 QDF_STATUS (*set_offchan_mode)(struct wlan_objmgr_psoc *psoc,
Frank Liu9dd3c3e2017-04-11 22:37:03 +0800645 struct tdls_channel_switch_params *param);
Srinivas Pitlaee54aea2018-01-08 17:04:39 +0530646 QDF_STATUS (*tdls_reg_ev_handler)(struct wlan_objmgr_psoc *psoc,
Frank Liu9dd3c3e2017-04-11 22:37:03 +0800647 void *arg);
Srinivas Pitlaee54aea2018-01-08 17:04:39 +0530648 QDF_STATUS (*tdls_unreg_ev_handler) (struct wlan_objmgr_psoc *psoc,
Frank Liu9dd3c3e2017-04-11 22:37:03 +0800649 void *arg);
Frank Liu9dd3c3e2017-04-11 22:37:03 +0800650};
651
652/* fwd declarations for tdls rx ops */
653struct tdls_event_info;
654/**
655 * struct wlan_lmac_if_tdls_rx_ops - south bound rx function pointers for tdls
656 * @tdls_ev_handler: function to handler tdls event
657 *
658 * lmac modules uses this API to post scan events to tdls module
659 */
660struct wlan_lmac_if_tdls_rx_ops {
Srinivas Pitlaee54aea2018-01-08 17:04:39 +0530661 QDF_STATUS (*tdls_ev_handler)(struct wlan_objmgr_psoc *psoc,
Frank Liu9dd3c3e2017-04-11 22:37:03 +0800662 struct tdls_event_info *info);
663};
664#endif
665
Soumya Bhat604dae02016-12-14 16:31:10 +0530666/**
akosigifffcebf2017-11-15 18:29:32 +0530667 * struct wlan_lmac_if_ftm_rx_ops - south bound rx function pointers for FTM
668 * @ftm_ev_handler: function to handle FTM event
669 *
670 * lmac modules uses this API to post FTM events to FTM module
671 */
672struct wlan_lmac_if_ftm_rx_ops {
673 QDF_STATUS (*ftm_ev_handler)(struct wlan_objmgr_pdev *pdev,
674 uint8_t *event_buf, uint32_t len);
675};
676
677/**
Amar Singhale4079742017-02-10 15:24:40 -0800678 * struct wlan_lmac_reg_if_tx_ops - structure of tx function
679 * pointers for regulatory component
680 * @register_master_handler: pointer to register event handler
681 * @unregister_master_handler: pointer to unregister event handler
Kiran Kumar Lokere82c86452017-04-26 19:51:29 -0700682 * @register_11d_new_cc_handler: pointer to register 11d cc event handler
683 * @unregister_11d_new_cc_handler: pointer to unregister 11d cc event handler
Amar Singhale4079742017-02-10 15:24:40 -0800684 */
685struct wlan_lmac_if_reg_tx_ops {
686 QDF_STATUS (*register_master_handler)(struct wlan_objmgr_psoc *psoc,
687 void *arg);
688 QDF_STATUS (*unregister_master_handler)(struct wlan_objmgr_psoc *psoc,
689 void *arg);
Kiran Kumar Lokere82c86452017-04-26 19:51:29 -0700690
Kiran Kumar Lokerea8436342017-04-24 00:56:03 -0700691 QDF_STATUS (*set_country_code)(struct wlan_objmgr_psoc *psoc,
692 void *arg);
Baila, Shashikala Prabhubc3efea2017-05-23 11:54:45 +0530693 QDF_STATUS (*fill_umac_legacy_chanlist)(struct wlan_objmgr_pdev *pdev,
694 struct regulatory_channel *cur_chan_list);
Kiran Kumar Lokere82c86452017-04-26 19:51:29 -0700695 QDF_STATUS (*register_11d_new_cc_handler)(
696 struct wlan_objmgr_psoc *psoc, void *arg);
697 QDF_STATUS (*unregister_11d_new_cc_handler)(
698 struct wlan_objmgr_psoc *psoc, void *arg);
699 QDF_STATUS (*start_11d_scan)(struct wlan_objmgr_psoc *psoc,
700 struct reg_start_11d_scan_req *reg_start_11d_scan_req);
701 QDF_STATUS (*stop_11d_scan)(struct wlan_objmgr_psoc *psoc,
702 struct reg_stop_11d_scan_req *reg_stop_11d_scan_req);
Amar Singhal2e55c112017-05-19 16:39:34 -0700703 bool (*is_there_serv_ready_extn)(struct wlan_objmgr_psoc *psoc);
Abhijit Pradhan59626eb2017-06-29 12:32:20 +0530704 QDF_STATUS (*set_user_country_code)(struct wlan_objmgr_psoc *psoc,
705 uint8_t pdev_id,
706 struct cc_regdmn_s *rd);
Shashikala Prabhu3519b962017-08-02 11:12:33 +0530707 QDF_STATUS (*set_country_failed)(struct wlan_objmgr_pdev *pdev);
Kiran Kumar Lokerea78b4bf2017-06-30 19:13:02 -0700708 QDF_STATUS (*register_ch_avoid_event_handler)(
709 struct wlan_objmgr_psoc *psoc, void *arg);
710 QDF_STATUS (*unregister_ch_avoid_event_handler)(
711 struct wlan_objmgr_psoc *psoc, void *arg);
Amar Singhale4079742017-02-10 15:24:40 -0800712};
713
714/**
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530715 * struct wlan_lmac_if_dfs_tx_ops - Function pointer to call offload/lmac
716 * functions from DFS module.
Shaakir Mohameda1a7e162017-10-10 16:36:10 -0700717 * @dfs_enable: Enable DFS.
718 * @dfs_get_caps: Get DFS capabilities.
719 * @dfs_disable: Disable DFS
720 * @dfs_gettsf64: Get tsf64 value.
721 * @dfs_set_use_cac_prssi: Set use_cac_prssi value.
722 * @dfs_get_dfsdomain: Get DFS domain.
723 * @dfs_is_countryCode_CHINA: Check is country code CHINA.
724 * @dfs_get_thresholds: Get thresholds.
725 * @dfs_get_ext_busy: Get ext_busy.
726 * @dfs_get_target_type: Get target type.
727 * @dfs_is_countryCode_KOREA_ROC3: Check is county code Korea.
Shaakir Mohameda1a7e162017-10-10 16:36:10 -0700728 * @dfs_get_ah_devid: Get ah devid.
729 * @dfs_get_phymode_info: Get phymode info.
730 * @dfs_reg_ev_handler: Register dfs event handler.
731 * @dfs_process_emulate_bang_radar_cmd: Process emulate bang radar test command.
Shaakir Mohamedadfc94c2019-02-22 11:26:15 -0800732 * @dfs_agile_ch_cfg_cmd: Send Agile Channel Configuration command
733 * @dfs_ocac_abort_cmd: Send Off-Channel CAC abort command.
Shashikala Prabhu153b2882017-12-12 20:53:32 +0530734 * @dfs_is_pdev_5ghz: Check if the given pdev is 5GHz.
bings9c524f52018-01-08 21:14:13 +0530735 * @dfs_set_phyerr_filter_offload: Config phyerr filter offload.
Arif Hussainc8fe4682018-02-02 11:34:15 -0800736 * @dfs_send_offload_enable_cmd: Send dfs offload enable command to fw.
Vignesh U0dc79352018-04-18 11:22:16 +0530737 * @dfs_host_dfs_check_support: To check Host DFS confirmation feature
738 * support.
739 * @dfs_send_avg_radar_params_to_fw: Send average radar parameters to FW.
Abhijit Pradhan9ef78462018-10-08 10:54:31 +0530740 * @dfs_send_usenol_pdev_param: Send usenol pdev param to FW.
Vignesh Mohancca9e9b2018-11-19 14:54:34 +0530741 * @dfs_send_subchan_marking_pdev_param: Send subchan marking pdev param to FW.
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530742 */
743
744struct wlan_lmac_if_dfs_tx_ops {
745 QDF_STATUS (*dfs_enable)(struct wlan_objmgr_pdev *pdev,
746 int *is_fastclk,
Abhijit Pradhanf9df7db2017-10-08 10:33:28 +0530747 struct wlan_dfs_phyerr_param *param,
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530748 uint32_t dfsdomain);
749 QDF_STATUS (*dfs_get_caps)(struct wlan_objmgr_pdev *pdev,
Abhijit Pradhanf9df7db2017-10-08 10:33:28 +0530750 struct wlan_dfs_caps *dfs_caps);
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530751 QDF_STATUS (*dfs_disable)(struct wlan_objmgr_pdev *pdev,
752 int no_cac);
753 QDF_STATUS (*dfs_gettsf64)(struct wlan_objmgr_pdev *pdev,
754 uint64_t *tsf64);
755 QDF_STATUS (*dfs_set_use_cac_prssi)(struct wlan_objmgr_pdev *pdev);
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530756 QDF_STATUS (*dfs_get_thresholds)(struct wlan_objmgr_pdev *pdev,
Abhijit Pradhanf9df7db2017-10-08 10:33:28 +0530757 struct wlan_dfs_phyerr_param *param);
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530758 QDF_STATUS (*dfs_get_ext_busy)(struct wlan_objmgr_pdev *pdev,
759 int *dfs_ext_chan_busy);
760 QDF_STATUS (*dfs_get_target_type)(struct wlan_objmgr_pdev *pdev,
761 uint32_t *target_type);
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530762 QDF_STATUS (*dfs_get_ah_devid)(struct wlan_objmgr_pdev *pdev,
763 uint16_t *devid);
764 QDF_STATUS (*dfs_get_phymode_info)(struct wlan_objmgr_pdev *pdev,
765 uint32_t chan_mode,
Edayilliam Jayadev2703faf2018-03-19 12:45:38 +0530766 uint32_t *mode_info,
767 bool is_2gvht_en);
Arif Hussainecef5a42018-06-01 15:57:51 -0700768 QDF_STATUS (*dfs_reg_ev_handler)(struct wlan_objmgr_psoc *psoc);
Shaakir Mohameda1a7e162017-10-10 16:36:10 -0700769 QDF_STATUS (*dfs_process_emulate_bang_radar_cmd)(
770 struct wlan_objmgr_pdev *pdev,
771 struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test);
Vignesh Mohana1a19452019-07-16 03:06:58 +0530772 QDF_STATUS (*dfs_agile_ch_cfg_cmd)(
773 struct wlan_objmgr_pdev *pdev,
774 struct dfs_agile_cac_params *adfs_params);
Shaakir Mohamedadfc94c2019-02-22 11:26:15 -0800775 QDF_STATUS (*dfs_ocac_abort_cmd)(struct wlan_objmgr_pdev *pdev);
Shashikala Prabhu153b2882017-12-12 20:53:32 +0530776 QDF_STATUS (*dfs_is_pdev_5ghz)(struct wlan_objmgr_pdev *pdev,
777 bool *is_5ghz);
bings9c524f52018-01-08 21:14:13 +0530778 QDF_STATUS (*dfs_set_phyerr_filter_offload)(
779 struct wlan_objmgr_pdev *pdev,
780 bool dfs_phyerr_filter_offload);
Arif Hussainecef5a42018-06-01 15:57:51 -0700781 bool (*dfs_is_tgt_offload)(struct wlan_objmgr_psoc *psoc);
Arif Hussainc8fe4682018-02-02 11:34:15 -0800782 QDF_STATUS (*dfs_send_offload_enable_cmd)(
783 struct wlan_objmgr_pdev *pdev,
784 bool enable);
Vignesh U0dc79352018-04-18 11:22:16 +0530785 QDF_STATUS (*dfs_host_dfs_check_support)(struct wlan_objmgr_pdev *pdev,
786 bool *enabled);
787 QDF_STATUS (*dfs_send_avg_radar_params_to_fw)(
788 struct wlan_objmgr_pdev *pdev,
789 struct dfs_radar_found_params *params);
Abhijit Pradhan9ef78462018-10-08 10:54:31 +0530790 QDF_STATUS (*dfs_send_usenol_pdev_param)(struct wlan_objmgr_pdev *pdev,
791 bool usenol);
Vignesh Mohancca9e9b2018-11-19 14:54:34 +0530792 QDF_STATUS (*dfs_send_subchan_marking_pdev_param)(
793 struct wlan_objmgr_pdev *pdev,
794 bool subchanmark);
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530795};
796
797/**
Shashikala Prabhu4f8130e2017-09-12 14:54:29 +0530798 * struct wlan_lmac_if_target_tx_ops - Function pointers to call target
799 * functions from other modules.
800 * @tgt_is_tgt_type_ar900b: To check AR900B target type.
801 * @tgt_is_tgt_type_ipq4019: To check IPQ4019 target type.
802 * @tgt_is_tgt_type_qca9984: To check QCA9984 target type.
803 * @tgt_is_tgt_type_qca9888: To check QCA9888 target type.
Hangtian Zhu62547ed2019-09-20 14:36:31 +0800804 * @tgt_is_tgt_type_adrastea: To check QCS40X target type.
Srinivas Pitlaee54aea2018-01-08 17:04:39 +0530805 * @tgt_get_tgt_type: Get target type
806 * @tgt_get_tgt_version: Get target version
807 * @tgt_get_tgt_revision: Get target revision
Shashikala Prabhu4f8130e2017-09-12 14:54:29 +0530808 */
809struct wlan_lmac_if_target_tx_ops {
810 bool (*tgt_is_tgt_type_ar900b)(uint32_t);
811 bool (*tgt_is_tgt_type_ipq4019)(uint32_t);
812 bool (*tgt_is_tgt_type_qca9984)(uint32_t);
813 bool (*tgt_is_tgt_type_qca9888)(uint32_t);
Hangtian Zhu62547ed2019-09-20 14:36:31 +0800814 bool (*tgt_is_tgt_type_adrastea)(uint32_t);
Srinivas Pitlaee54aea2018-01-08 17:04:39 +0530815 uint32_t (*tgt_get_tgt_type)(struct wlan_objmgr_psoc *psoc);
816 uint32_t (*tgt_get_tgt_version)(struct wlan_objmgr_psoc *psoc);
817 uint32_t (*tgt_get_tgt_revision)(struct wlan_objmgr_psoc *psoc);
Shashikala Prabhu4f8130e2017-09-12 14:54:29 +0530818};
819
Kiran Venkatappa303c1f62017-11-17 17:01:26 +0530820#ifdef WLAN_OFFCHAN_TXRX_ENABLE
821/**
822 * struct wlan_lmac_if_offchan_txrx_ops - Function pointers to check target
823 * capabilities related to offchan txrx.
Jeff Johnson4cee5cf2018-05-06 11:29:19 -0700824 * @offchan_data_tid_support: To check if target supports separate tid for
Kiran Venkatappa303c1f62017-11-17 17:01:26 +0530825 * offchan data tx.
826 */
827struct wlan_lmac_if_offchan_txrx_ops {
828 bool (*offchan_data_tid_support)(struct wlan_objmgr_pdev *pdev);
829};
830#endif
831
Himanshu Agarwalb3c81ac2018-01-10 14:21:53 +0530832#ifdef WLAN_SUPPORT_GREEN_AP
833struct wlan_green_ap_egap_params;
834/**
835 * struct wlan_lmac_if_green_ap_tx_ops - structure of tx function
836 * pointers for green ap component
837 * @enable_egap: function pointer to send enable egap indication to fw
838 * @ps_on_off_send: function pointer to send enable/disable green ap ps to fw
839 */
840struct wlan_lmac_if_green_ap_tx_ops {
841 QDF_STATUS (*enable_egap)(struct wlan_objmgr_pdev *pdev,
842 struct wlan_green_ap_egap_params *egap_params);
843 QDF_STATUS (*ps_on_off_send)(struct wlan_objmgr_pdev *pdev,
844 bool value, uint8_t pdev_id);
Soumya Bhat108f0902017-12-28 21:33:17 +0530845 QDF_STATUS (*reset_dev)(struct wlan_objmgr_pdev *pdev);
846 uint16_t (*get_current_channel)(struct wlan_objmgr_pdev *pdev);
847 uint64_t (*get_current_channel_flags)(struct wlan_objmgr_pdev *pdev);
848 QDF_STATUS (*get_capab)(struct wlan_objmgr_pdev *pdev);
Himanshu Agarwalb3c81ac2018-01-10 14:21:53 +0530849};
850#endif
851
Shashikala Prabhu4f8130e2017-09-12 14:54:29 +0530852/**
Soumya Bhat604dae02016-12-14 16:31:10 +0530853 * struct wlan_lmac_if_tx_ops - south bound tx function pointers
Om Prakash Tripathi22f95dc2016-12-19 10:45:59 +0530854 * @mgmt_txrx_tx_ops: mgmt txrx tx ops
855 * @scan: scan tx ops
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530856 * @dfs_tx_ops: dfs tx ops.
Himanshu Agarwalb3c81ac2018-01-10 14:21:53 +0530857 * @green_ap_tx_ops: green_ap tx_ops
Nagaa3d37622018-02-28 20:18:21 +0530858 * @cp_stats_tx_ops: cp stats tx_ops
Soumya Bhat604dae02016-12-14 16:31:10 +0530859 *
860 * Callback function tabled to be registered with umac.
861 * umac will use the functional table to send events/frames to lmac/wmi
862 */
863
864struct wlan_lmac_if_tx_ops {
865 /* Components to declare function pointers required by the module
866 * in component specific structure.
Soumya Bhat604dae02016-12-14 16:31:10 +0530867 * The component specific ops structure can be declared in this file
868 * only
Soumya Bhat604dae02016-12-14 16:31:10 +0530869 */
Himanshu Agarwalf8641b92016-12-17 19:33:08 +0530870 struct wlan_lmac_if_mgmt_txrx_tx_ops mgmt_txrx_tx_ops;
Om Prakash Tripathi22f95dc2016-12-19 10:45:59 +0530871 struct wlan_lmac_if_scan_tx_ops scan;
Wu Gao89c8a8a2017-03-22 12:54:13 +0800872#ifdef CONVERGED_P2P_ENABLE
Wu Gao396518b2017-03-15 19:12:20 +0800873 struct wlan_lmac_if_p2p_tx_ops p2p;
874#endif
Bharat Bhushan Chakravarty145d3932017-03-20 12:52:16 -0700875#ifdef QCA_SUPPORT_SON
876 struct wlan_lmac_if_son_tx_ops son_tx_ops;
877#endif
Amar Singhale4079742017-02-10 15:24:40 -0800878
Subrat Mishra81c60e82017-03-02 14:23:37 +0530879#ifdef WLAN_ATF_ENABLE
880 struct wlan_lmac_if_atf_tx_ops atf_tx_ops;
881#endif
Nagaa3d37622018-02-28 20:18:21 +0530882#ifdef QCA_SUPPORT_CP_STATS
883 struct wlan_lmac_if_cp_stats_tx_ops cp_stats_tx_ops;
884#endif
Venkateswara Swamy Bandaru0b9f5ec2017-05-11 10:45:35 +0530885#ifdef WLAN_SA_API_ENABLE
886 struct wlan_lmac_if_sa_api_tx_ops sa_api_tx_ops;
887#endif
Amar Singhale4079742017-02-10 15:24:40 -0800888
Abhiram Jogadenub6923392019-02-12 13:54:42 +0530889#ifdef WLAN_CFR_ENABLE
890 struct wlan_lmac_if_cfr_tx_ops cfr_tx_ops;
891#endif
892
Edayilliam Jayadev642201f2017-04-05 14:29:18 +0530893#ifdef WLAN_CONV_SPECTRAL_ENABLE
894 struct wlan_lmac_if_sptrl_tx_ops sptrl_tx_ops;
895#endif
896
Ashok Ponnaiahf8c31452017-03-24 06:22:24 +0530897#ifdef WLAN_CONV_CRYPTO_SUPPORTED
Ashok Ponnaiah0d0a3682017-02-01 00:19:32 +0530898 struct wlan_lmac_if_crypto_tx_ops crypto_tx_ops;
899#endif
Amar Singhale4079742017-02-10 15:24:40 -0800900
Naveen Rawat18ceca12017-03-06 16:04:45 -0800901#ifdef WIFI_POS_CONVERGED
902 struct wlan_lmac_if_wifi_pos_tx_ops wifi_pos_tx_ops;
903#endif
Amar Singhale4079742017-02-10 15:24:40 -0800904 struct wlan_lmac_if_reg_tx_ops reg_ops;
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530905 struct wlan_lmac_if_dfs_tx_ops dfs_tx_ops;
Frank Liu9dd3c3e2017-04-11 22:37:03 +0800906
Jeff Johnson6889ddf2019-02-08 07:22:01 -0800907#ifdef FEATURE_WLAN_TDLS
Frank Liu9dd3c3e2017-04-11 22:37:03 +0800908 struct wlan_lmac_if_tdls_tx_ops tdls_tx_ops;
909#endif
Subrat Mishrabf125872017-09-27 14:41:20 +0530910
911#ifdef WLAN_SUPPORT_FILS
912 struct wlan_lmac_if_fd_tx_ops fd_tx_ops;
913#endif
Padma Raghunathan314a0f72017-03-07 12:01:00 +0530914 struct wlan_lmac_if_mlme_tx_ops mops;
Shashikala Prabhu4f8130e2017-09-12 14:54:29 +0530915 struct wlan_lmac_if_target_tx_ops target_tx_ops;
akosigifffcebf2017-11-15 18:29:32 +0530916
Kiran Venkatappa303c1f62017-11-17 17:01:26 +0530917#ifdef WLAN_OFFCHAN_TXRX_ENABLE
918 struct wlan_lmac_if_offchan_txrx_ops offchan_txrx_ops;
919#endif
akosigifffcebf2017-11-15 18:29:32 +0530920
Sathish Kumar26190a12017-11-17 17:36:51 +0530921#ifdef DIRECT_BUF_RX_ENABLE
922 struct wlan_lmac_if_direct_buf_rx_tx_ops dbr_tx_ops;
923#endif
akosigifffcebf2017-11-15 18:29:32 +0530924
Himanshu Agarwalb3c81ac2018-01-10 14:21:53 +0530925#ifdef WLAN_SUPPORT_GREEN_AP
926 struct wlan_lmac_if_green_ap_tx_ops green_ap_tx_ops;
927#endif
akosigifffcebf2017-11-15 18:29:32 +0530928
929 struct wlan_lmac_if_ftm_tx_ops ftm_tx_ops;
Himanshu Agarwalf8641b92016-12-17 19:33:08 +0530930};
Soumya Bhat604dae02016-12-14 16:31:10 +0530931
Himanshu Agarwalf8641b92016-12-17 19:33:08 +0530932/**
933 * struct wlan_lmac_if_mgmt_txrx_rx_ops - structure of rx function
934 * pointers for mgmt txrx component
935 * @mgmt_tx_completion_handler: function pointer to give tx completions
936 * to mgmt txrx comp.
937 * @mgmt_rx_frame_handler: function pointer to give rx frame to mgmt txrx comp.
938 * @mgmt_txrx_get_nbuf_from_desc_id: function pointer to get nbuf from desc id
939 * @mgmt_txrx_get_peer_from_desc_id: function pointer to get peer from desc id
940 * @mgmt_txrx_get_vdev_id_from_desc_id: function pointer to get vdev id from
941 * desc id
942 */
943struct wlan_lmac_if_mgmt_txrx_rx_ops {
944 QDF_STATUS (*mgmt_tx_completion_handler)(
Vivek5747b782018-01-04 17:26:58 +0530945 struct wlan_objmgr_pdev *pdev,
Himanshu Agarwalf8641b92016-12-17 19:33:08 +0530946 uint32_t desc_id, uint32_t status,
947 void *tx_compl_params);
948 QDF_STATUS (*mgmt_rx_frame_handler)(
949 struct wlan_objmgr_psoc *psoc,
Himanshu Agarwal009eee12017-01-05 14:23:18 +0530950 qdf_nbuf_t buf,
951 struct mgmt_rx_event_params *mgmt_rx_params);
Himanshu Agarwalf8641b92016-12-17 19:33:08 +0530952 qdf_nbuf_t (*mgmt_txrx_get_nbuf_from_desc_id)(
Vivek5747b782018-01-04 17:26:58 +0530953 struct wlan_objmgr_pdev *pdev,
Himanshu Agarwalf8641b92016-12-17 19:33:08 +0530954 uint32_t desc_id);
955 struct wlan_objmgr_peer * (*mgmt_txrx_get_peer_from_desc_id)(
Vivek5747b782018-01-04 17:26:58 +0530956 struct wlan_objmgr_pdev *pdev, uint32_t desc_id);
Himanshu Agarwalf8641b92016-12-17 19:33:08 +0530957 uint8_t (*mgmt_txrx_get_vdev_id_from_desc_id)(
Vivek5747b782018-01-04 17:26:58 +0530958 struct wlan_objmgr_pdev *pdev,
Himanshu Agarwalf8641b92016-12-17 19:33:08 +0530959 uint32_t desc_id);
Vivek5747b782018-01-04 17:26:58 +0530960 uint32_t (*mgmt_txrx_get_free_desc_pool_count)(
961 struct wlan_objmgr_pdev *pdev);
Soumya Bhat604dae02016-12-14 16:31:10 +0530962};
963
Amar Singhale4079742017-02-10 15:24:40 -0800964struct wlan_lmac_if_reg_rx_ops {
965 QDF_STATUS (*master_list_handler)(struct cur_regulatory_info
966 *reg_info);
Kiran Kumar Lokere82c86452017-04-26 19:51:29 -0700967 QDF_STATUS (*reg_11d_new_cc_handler)(struct wlan_objmgr_psoc *psoc,
968 struct reg_11d_new_country *reg_11d_new_cc);
Abhijit Pradhanca7d77b2017-07-12 12:08:42 +0530969 QDF_STATUS (*reg_set_regdb_offloaded)(struct wlan_objmgr_psoc *psoc,
970 bool val);
971 QDF_STATUS (*reg_set_11d_offloaded)(struct wlan_objmgr_psoc *psoc,
972 bool val);
Abhijit Pradhanaf06bcb2017-07-18 13:34:15 +0530973 QDF_STATUS (*get_dfs_region)(struct wlan_objmgr_pdev *pdev,
974 enum dfs_reg *dfs_reg);
Kiran Kumar Lokerea78b4bf2017-06-30 19:13:02 -0700975 QDF_STATUS (*reg_ch_avoid_event_handler)(struct wlan_objmgr_psoc *psoc,
976 struct ch_avoid_ind_type *ch_avoid_ind);
Kai Chen7df3f4f2017-08-18 13:48:06 -0700977 uint32_t (*reg_freq_to_chan)(struct wlan_objmgr_pdev *pdev,
978 uint32_t freq);
Shashikala Prabhua7db8ce2017-12-18 15:35:08 +0530979 QDF_STATUS (*reg_set_chan_144)(struct wlan_objmgr_pdev *pdev,
980 bool enable_ch_144);
981 bool (*reg_get_chan_144)(struct wlan_objmgr_pdev *pdev);
982 QDF_STATUS (*reg_program_default_cc)(struct wlan_objmgr_pdev *pdev,
983 uint16_t regdmn);
984 QDF_STATUS (*reg_get_current_regdomain)(struct wlan_objmgr_pdev *pdev,
985 struct cur_regdmn_info *cur_regdmn);
Vignesh U94395f62019-05-13 13:05:31 +0530986 QDF_STATUS (*reg_enable_dfs_channels)(struct wlan_objmgr_pdev *pdev,
987 bool dfs_enable);
Priyadarshnee S9d2d6e92019-07-23 15:22:32 +0530988 QDF_STATUS (*reg_modify_pdev_chan_range)(struct
989 wlan_objmgr_pdev *pdev);
Rajeev Kumar Sirasanagandla816b5032019-08-05 21:35:14 +0530990 bool (*reg_ignore_fw_reg_offload_ind)(struct wlan_objmgr_psoc *psoc);
Amar Singhale4079742017-02-10 15:24:40 -0800991};
Mukul Sharma18ac01d2017-02-04 17:04:57 +0530992
Wu Gao89c8a8a2017-03-22 12:54:13 +0800993#ifdef CONVERGED_P2P_ENABLE
Wu Gao396518b2017-03-15 19:12:20 +0800994
995/* forward declarations for p2p rx ops */
996struct p2p_noa_info;
997struct p2p_lo_event;
Liangwei Dongcc8676b2018-09-19 23:35:14 -0400998struct p2p_set_mac_filter_evt;
Wu Gao396518b2017-03-15 19:12:20 +0800999
1000/**
1001 * struct wlan_lmac_if_p2p_rx_ops - structure of rx function pointers
1002 * for P2P component
1003 * @lo_ev_handler: function pointer to give listen offload event
1004 * @noa_ev_handler: function pointer to give noa event
Liangwei Dongcc8676b2018-09-19 23:35:14 -04001005 * @add_mac_addr_filter_evt_handler: function pointer to process add mac addr
1006 * rx filter event
Wu Gao396518b2017-03-15 19:12:20 +08001007 */
1008struct wlan_lmac_if_p2p_rx_ops {
Rachit Kankane898f6ff2018-07-31 16:26:38 +05301009#ifdef FEATURE_P2P_LISTEN_OFFLOAD
Wu Gao396518b2017-03-15 19:12:20 +08001010 QDF_STATUS (*lo_ev_handler)(struct wlan_objmgr_psoc *psoc,
1011 struct p2p_lo_event *event_info);
Rachit Kankane898f6ff2018-07-31 16:26:38 +05301012#endif
Wu Gao396518b2017-03-15 19:12:20 +08001013 QDF_STATUS (*noa_ev_handler)(struct wlan_objmgr_psoc *psoc,
1014 struct p2p_noa_info *event_info);
Liangwei Dongcc8676b2018-09-19 23:35:14 -04001015 QDF_STATUS (*add_mac_addr_filter_evt_handler)(
1016 struct wlan_objmgr_psoc *psoc,
1017 struct p2p_set_mac_filter_evt *event_info);
1018
Wu Gao396518b2017-03-15 19:12:20 +08001019};
1020#endif
1021
Subrat Mishra81c60e82017-03-02 14:23:37 +05301022#ifdef WLAN_ATF_ENABLE
1023
1024/**
1025 * struct wlan_lmac_if_atf_rx_ops - ATF south bound rx function pointers
1026 * @atf_get_atf_commit: Get ATF commit state
1027 * @atf_get_fmcap: Get firmware capability for ATF
1028 * @atf_get_obss_scale: Get OBSS scale
1029 * @atf_get_mode: Get mode of ATF
1030 * @atf_get_msdu_desc: Get msdu desc for ATF
1031 * @atf_get_max_vdevs: Get maximum vdevs for a Radio
1032 * @atf_get_peers: Get number of peers for a radio
1033 * @atf_get_tput_based: Get throughput based enabled/disabled
1034 * @atf_get_logging: Get logging enabled/disabled
Jeffin Mammenc17d8ee2018-08-13 09:53:57 +05301035 * @atf_update_buf_held: Set Num buf held by subgroup
Subrat Mishra81c60e82017-03-02 14:23:37 +05301036 * @atf_get_ssidgroup: Get ssid group state
Jeffin Mammen31320b32018-07-24 14:20:08 +05301037 * @atf_get_vdev_ac_blk_cnt: Get AC block count for vdev
1038 * @atf_get_peer_blk_txbitmap: Get peer tx traffic AC bitmap
Subrat Mishra81c60e82017-03-02 14:23:37 +05301039 * @atf_get_vdev_blk_txtraffic: Get vdev tx traffic block state
1040 * @atf_get_sched: Get ATF scheduled policy
1041 * @atf_get_tx_tokens: Get Tx tokens
Jeffin Mammenc17d8ee2018-08-13 09:53:57 +05301042 * @atf_buf_distribute: Distribute Buffers
Subrat Mishra81c60e82017-03-02 14:23:37 +05301043 * @atf_get_tx_tokens_common: Get common tx tokens
1044 * @atf_get_shadow_alloted_tx_tokens: Get shadow alloted tx tokens
1045 * @atf_get_peer_stats: Get atf peer stats
Jeffin Mammenc17d8ee2018-08-13 09:53:57 +05301046 * @atf_adjust_subgroup_txtokens: Adjust tokens based on actual duration
1047 * @atf_account_subgroup_txtokens: Estimate tx time & update subgroup tokens
1048 * @atf_subgroup_free_buf: On tx completion, update num buf held
1049 * @atf_update_subgroup_tidstate: TID state (Paused/unpaused) of node
1050 * @atf_get_subgroup_airtime: Get subgroup airtime
Subrat Mishra81c60e82017-03-02 14:23:37 +05301051 * @atf_get_token_allocated: Get atf token allocated
1052 * @atf_get_token_utilized: Get atf token utilized
1053 * @atf_set_sched: Set ATF schedule policy
1054 * @atf_set_fmcap: Set firmware capability for ATF
1055 * @atf_set_obss_scale: Set ATF obss scale
Subrat Mishra81c60e82017-03-02 14:23:37 +05301056 * @atf_set_msdu_desc: Set msdu desc
1057 * @atf_set_max_vdevs: Set maximum vdevs number
1058 * @atf_set_peers: Set peers number
1059 * @atf_set_peer_stats: Set peer stats
1060 * @atf_set_vdev_blk_txtraffic: Set Block/unblock vdev tx traffic
Jeffin Mammen31320b32018-07-24 14:20:08 +05301061 * @atf_peer_blk_txtraffic: Block peer tx traffic
1062 * @atf_peer_unblk_txtraffic: Unblock peer tx traffic
Subrat Mishra81c60e82017-03-02 14:23:37 +05301063 * @atf_set_token_allocated: Set atf token allocated
1064 * @atf_set_token_utilized: Set atf token utilized
1065 */
1066struct wlan_lmac_if_atf_rx_ops {
Subrat Mishra9c63fb72017-04-03 11:33:26 +05301067 uint8_t (*atf_get_atf_commit)(struct wlan_objmgr_pdev *pdev);
Subrat Mishra81c60e82017-03-02 14:23:37 +05301068 uint32_t (*atf_get_fmcap)(struct wlan_objmgr_psoc *psoc);
1069 uint32_t (*atf_get_obss_scale)(struct wlan_objmgr_pdev *pdev);
1070 uint32_t (*atf_get_mode)(struct wlan_objmgr_psoc *psoc);
1071 uint32_t (*atf_get_msdu_desc)(struct wlan_objmgr_psoc *psoc);
1072 uint32_t (*atf_get_max_vdevs)(struct wlan_objmgr_psoc *psoc);
1073 uint32_t (*atf_get_peers)(struct wlan_objmgr_psoc *psoc);
1074 uint32_t (*atf_get_tput_based)(struct wlan_objmgr_pdev *pdev);
1075 uint32_t (*atf_get_logging)(struct wlan_objmgr_pdev *pdev);
Jeffin Mammenc17d8ee2018-08-13 09:53:57 +05301076 void* (*atf_update_buf_held)(struct wlan_objmgr_peer *peer,
1077 int8_t ac);
Subrat Mishra81c60e82017-03-02 14:23:37 +05301078 uint32_t (*atf_get_ssidgroup)(struct wlan_objmgr_pdev *pdev);
Jeffin Mammen31320b32018-07-24 14:20:08 +05301079 uint32_t (*atf_get_vdev_ac_blk_cnt)(struct wlan_objmgr_vdev *vdev);
1080 uint8_t (*atf_get_peer_blk_txbitmap)(struct wlan_objmgr_peer *peer);
Subrat Mishra81c60e82017-03-02 14:23:37 +05301081 uint8_t (*atf_get_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev);
1082 uint32_t (*atf_get_sched)(struct wlan_objmgr_pdev *pdev);
1083 uint32_t (*atf_get_tx_tokens)(struct wlan_objmgr_peer *peer);
Jeffin Mammenc17d8ee2018-08-13 09:53:57 +05301084 uint32_t (*atf_buf_distribute)(struct wlan_objmgr_pdev *pdev,
1085 struct wlan_objmgr_peer *peer,
1086 int8_t ac);
Subrat Mishra81c60e82017-03-02 14:23:37 +05301087 uint32_t (*atf_get_txtokens_common)(struct wlan_objmgr_pdev *pdev);
1088 uint32_t (*atf_get_shadow_alloted_tx_tokens)(
1089 struct wlan_objmgr_pdev *pdev);
1090 void (*atf_get_peer_stats)(struct wlan_objmgr_peer *peer,
1091 struct atf_stats *stats);
Jeffin Mammenc17d8ee2018-08-13 09:53:57 +05301092 QDF_STATUS
1093 (*atf_adjust_subgroup_txtokens)(struct wlan_objmgr_peer *pr,
1094 uint8_t ac, uint32_t actual_duration,
1095 uint32_t est_duration);
1096 QDF_STATUS
1097 (*atf_account_subgroup_txtokens)(struct wlan_objmgr_peer *pr,
1098 uint8_t ac,
1099 uint32_t duration);
1100 QDF_STATUS
1101 (*atf_subgroup_free_buf)(uint16_t buf_acc_size, void *bf_atf_sg);
1102 QDF_STATUS
1103 (*atf_update_subgroup_tidstate)(struct wlan_objmgr_peer *peer,
1104 uint8_t atf_nodepaused);
1105 uint8_t (*atf_get_subgroup_airtime)(struct wlan_objmgr_peer *peer,
1106 uint8_t ac);
Subrat Mishra81c60e82017-03-02 14:23:37 +05301107 uint16_t (*atf_get_token_allocated)(struct wlan_objmgr_peer *peer);
1108 uint16_t (*atf_get_token_utilized)(struct wlan_objmgr_peer *peer);
Subrat Mishra81c60e82017-03-02 14:23:37 +05301109 void (*atf_set_sched)(struct wlan_objmgr_pdev *pdev, uint32_t value);
1110 void (*atf_set_fmcap)(struct wlan_objmgr_psoc *psoc, uint32_t value);
1111 void (*atf_set_obss_scale)(struct wlan_objmgr_pdev *pdev,
1112 uint32_t value);
Subrat Mishra81c60e82017-03-02 14:23:37 +05301113 void (*atf_set_msdu_desc)(struct wlan_objmgr_psoc *psoc,
1114 uint32_t value);
1115 void (*atf_set_max_vdevs)(struct wlan_objmgr_psoc *psoc,
1116 uint32_t value);
1117 void (*atf_set_peers)(struct wlan_objmgr_psoc *psoc, uint32_t value);
1118 void (*atf_set_peer_stats)(struct wlan_objmgr_peer *peer,
1119 struct atf_stats *stats);
1120 void (*atf_set_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev,
1121 uint8_t value);
Jeffin Mammen31320b32018-07-24 14:20:08 +05301122 void (*atf_peer_blk_txtraffic)(struct wlan_objmgr_peer *peer,
1123 int8_t ac_id);
1124 void (*atf_peer_unblk_txtraffic)(struct wlan_objmgr_peer *peer,
1125 int8_t ac_id);
Subrat Mishra81c60e82017-03-02 14:23:37 +05301126 void (*atf_set_token_allocated)(struct wlan_objmgr_peer *peer,
1127 uint16_t value);
1128 void (*atf_set_token_utilized)(struct wlan_objmgr_peer *peer,
1129 uint16_t value);
1130};
1131#endif
1132
Subrat Mishrabf125872017-09-27 14:41:20 +05301133#ifdef WLAN_SUPPORT_FILS
1134/**
1135 * struct wlan_lmac_if_fd_rx_ops - FILS Discovery specific Rx function pointers
Subrat Mishra172974d2018-02-03 08:30:13 +05301136 * @fd_is_fils_enable: FILS enabled or not
Subrat Mishrabf125872017-09-27 14:41:20 +05301137 * @fd_alloc: Allocate FD buffer
1138 * @fd_stop: Stop and free deferred FD buffer
1139 * @fd_free: Free FD frame buffer
1140 * @fd_get_valid_fd_period: Get valid FD period
1141 * @fd_swfda_handler: SWFDA event handler
Rhythm Patwa25a0e882019-10-19 21:36:48 -07001142 * @fd_offload: Offload FD frame
Subrat Mishrabf125872017-09-27 14:41:20 +05301143 */
1144struct wlan_lmac_if_fd_rx_ops {
Subrat Mishra172974d2018-02-03 08:30:13 +05301145 uint8_t (*fd_is_fils_enable)(struct wlan_objmgr_vdev *vdev);
Subrat Mishrabf125872017-09-27 14:41:20 +05301146 void (*fd_alloc)(struct wlan_objmgr_vdev *vdev);
1147 void (*fd_stop)(struct wlan_objmgr_vdev *vdev);
1148 void (*fd_free)(struct wlan_objmgr_vdev *vdev);
Subrat Mishra172974d2018-02-03 08:30:13 +05301149 uint32_t (*fd_get_valid_fd_period)(struct wlan_objmgr_vdev *vdev,
1150 uint8_t *is_modified);
Subrat Mishrabf125872017-09-27 14:41:20 +05301151 QDF_STATUS (*fd_swfda_handler)(struct wlan_objmgr_vdev *vdev);
Rhythm Patwa25a0e882019-10-19 21:36:48 -07001152 QDF_STATUS (*fd_offload)(struct wlan_objmgr_vdev *vdev,
1153 uint32_t vdev_id);
Subrat Mishrabf125872017-09-27 14:41:20 +05301154};
1155#endif
1156
Venkateswara Swamy Bandaru0b9f5ec2017-05-11 10:45:35 +05301157#ifdef WLAN_SA_API_ENABLE
1158
1159/**
1160 * struct wlan_lmac_if_sa_api_rx_ops - SA API south bound rx function pointers
1161 */
1162struct wlan_lmac_if_sa_api_rx_ops {
1163 uint32_t (*sa_api_get_sa_supported)(struct wlan_objmgr_psoc *psoc);
1164 uint32_t (*sa_api_get_validate_sw)(struct wlan_objmgr_psoc *psoc);
1165 void (*sa_api_enable_sa)(struct wlan_objmgr_psoc *psoc, uint32_t value);
1166 uint32_t (*sa_api_get_sa_enable)(struct wlan_objmgr_psoc *psoc);
1167 void (*sa_api_peer_assoc_hanldler)(struct wlan_objmgr_pdev *pdev,
1168 struct wlan_objmgr_peer *peer, struct sa_rate_cap *);
1169 uint32_t (*sa_api_update_tx_feedback)(struct wlan_objmgr_pdev *pdev,
1170 struct wlan_objmgr_peer *peer,
1171 struct sa_tx_feedback *feedback);
1172 uint32_t (*sa_api_update_rx_feedback)(struct wlan_objmgr_pdev *pdev,
1173 struct wlan_objmgr_peer *peer,
1174 struct sa_rx_feedback *feedback);
1175 uint32_t (*sa_api_ucfg_set_param)(struct wlan_objmgr_pdev *pdev,
1176 char *val);
1177 uint32_t (*sa_api_ucfg_get_param)(struct wlan_objmgr_pdev *pdev,
1178 char *val);
1179 uint32_t (*sa_api_is_tx_feedback_enabled)
1180 (struct wlan_objmgr_pdev *pdev);
1181 uint32_t (*sa_api_is_rx_feedback_enabled)
1182 (struct wlan_objmgr_pdev *pdev);
1183 uint32_t (*sa_api_convert_rate_2g)(uint32_t rate);
1184 uint32_t (*sa_api_convert_rate_5g)(uint32_t rate);
1185 uint32_t (*sa_api_get_sa_mode)(struct wlan_objmgr_pdev *pdev);
1186 uint32_t (*sa_api_get_beacon_txantenna)(struct wlan_objmgr_pdev *pdev);
1187 uint32_t (*sa_api_cwm_action)(struct wlan_objmgr_pdev *pdev);
1188};
1189#endif
1190
narayand9e53402019-02-18 11:24:04 +05301191#ifdef WLAN_CFR_ENABLE
1192
1193/**
1194 * struct wlan_lmac_if_cfr_rx_ops - CFR south bound rx function pointers
1195 * @cfr_support_set: Set the CFR support based on FW advert
1196 * @cfr_info_send: Send cfr info to upper layers
1197 */
1198struct wlan_lmac_if_cfr_rx_ops {
1199 void (*cfr_support_set)(struct wlan_objmgr_psoc *psoc, uint32_t value);
1200 uint32_t (*cfr_info_send)(struct wlan_objmgr_pdev *pdev, void *head,
1201 size_t hlen, void *data, size_t dlen,
1202 void *tail, size_t tlen);
1203};
1204#endif
1205
Edayilliam Jayadev642201f2017-04-05 14:29:18 +05301206#ifdef WLAN_CONV_SPECTRAL_ENABLE
1207/**
1208 * struct wlan_lmac_if_sptrl_rx_ops - Spectral south bound Rx operations
1209 *
Edayilliam Jayadev642201f2017-04-05 14:29:18 +05301210 * @sptrlro_get_target_handle: Get Spectral handle for target/LMAC private data
Edayilliam Jayadev499d29e2019-09-09 16:33:09 +05301211 * @sptrlro_vdev_get_chan_freq_seg2: Get secondary 80 center frequency
Shiva Krishna Pittala66ae9be2019-01-14 18:32:13 +05301212 * @sptrlro_spectral_is_feature_disabled: Check if spectral feature is disabled
Edayilliam Jayadev642201f2017-04-05 14:29:18 +05301213 */
1214struct wlan_lmac_if_sptrl_rx_ops {
Edayilliam Jayadev642201f2017-04-05 14:29:18 +05301215 void * (*sptrlro_get_target_handle)(struct wlan_objmgr_pdev *pdev);
Edayilliam Jayadeve0c7fbd2017-11-23 18:30:35 +05301216 int16_t (*sptrlro_vdev_get_chan_freq)(struct wlan_objmgr_vdev *vdev);
Edayilliam Jayadev499d29e2019-09-09 16:33:09 +05301217 int16_t (*sptrlro_vdev_get_chan_freq_seg2)
1218 (struct wlan_objmgr_vdev *vdev);
Edayilliam Jayadeve0c7fbd2017-11-23 18:30:35 +05301219 enum phy_ch_width (*sptrlro_vdev_get_ch_width)(
1220 struct wlan_objmgr_vdev *vdev);
1221 int (*sptrlro_vdev_get_sec20chan_freq_mhz)(
1222 struct wlan_objmgr_vdev *vdev,
1223 uint16_t *sec20chan_freq);
Shiva Krishna Pittala66ae9be2019-01-14 18:32:13 +05301224 bool (*sptrlro_spectral_is_feature_disabled)(
1225 struct wlan_objmgr_psoc *psoc);
Edayilliam Jayadev642201f2017-04-05 14:29:18 +05301226};
1227#endif /* WLAN_CONV_SPECTRAL_ENABLE */
Venkateswara Swamy Bandaru0b9f5ec2017-05-11 10:45:35 +05301228
Naveen Rawat18ceca12017-03-06 16:04:45 -08001229#ifdef WIFI_POS_CONVERGED
1230/**
1231 * struct wlan_lmac_if_wifi_pos_rx_ops - structure of rx function
1232 * pointers for wifi_pos component
1233 * @oem_rsp_event_rx: callback for WMI_OEM_RESPONSE_EVENTID
1234 */
1235struct wlan_lmac_if_wifi_pos_rx_ops {
1236 int (*oem_rsp_event_rx)(struct wlan_objmgr_psoc *psoc,
1237 struct oem_data_rsp *oem_rsp);
1238};
1239#endif
1240
Soumya Bhat604dae02016-12-14 16:31:10 +05301241/**
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +05301242 * struct wlan_lmac_if_dfs_rx_ops - Function pointers to call dfs functions
1243 * from lmac/offload.
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +05301244 * @dfs_get_radars: Calls init radar table functions.
1245 * @dfs_process_phyerr: Process phyerr.
1246 * @dfs_destroy_object: Destroys the DFS object.
1247 * @dfs_radar_enable: Enables the radar.
Vignesh U0dc79352018-04-18 11:22:16 +05301248 * @dfs_is_radar_enabled: Check if the radar is enabled.
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +05301249 * @dfs_control: Used to process ioctls related to DFS.
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +05301250 * @dfs_is_precac_timer_running: Check whether precac timer is running.
1251 * @dfs_find_vht80_chan_for_precac: Find VHT80 channel for precac.
1252 * @dfs_cancel_precac_timer: Cancel the precac timer.
1253 * @dfs_override_precac_timeout: Override the default precac timeout.
1254 * @dfs_set_precac_enable: Set precac enable flag.
Vignesh Mohanfe0b8b42019-09-12 18:50:50 +05301255 * @dfs_get_legacy_precac_enable: Get the precac enable flag for
1256 * partial offload (legacy) chipsets.
Shreedhar Parande62f2bb92018-05-29 11:13:24 +05301257 * @dfs_set_precac_intermediate_chan: Set intermediate channel for precac.
1258 * @dfs_get_precac_intermediate_chan: Get intermediate channel for precac.
1259 * @dfs_precac_preferred_chan: Configure preferred channel during
1260 * precac.
1261 * dfs_get_precac_chan_state: Get precac status for given channel.
1262 * dfs_start_precac_timer: Start precac timer.
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +05301263 * @dfs_get_override_precac_timeout: Get precac timeout.
1264 * @dfs_set_current_channel: Set DFS current channel.
Arif Hussain9fba31e2017-03-06 15:14:44 -08001265 * @dfs_process_radar_ind: Process radar found indication.
1266 * @dfs_dfs_cac_complete_ind: Process cac complete indication.
Shaakir Mohamedadfc94c2019-02-22 11:26:15 -08001267 * @dfs_agile_precac_start: Initiate Agile PreCAC run.
1268 * @dfs_set_agile_precac_state: Set agile precac state.
Priyadarshnee S9d2d6e92019-07-23 15:22:32 +05301269 * @dfs_reset_adfs_config: Reset agile dfs variables.
Shaakir Mohamedadfc94c2019-02-22 11:26:15 -08001270 * @dfs_dfs_ocac_complete_ind: Process offchan cac complete indication.
Abhijit Pradhanfe7233a2017-07-12 18:48:14 +05301271 * @dfs_stop: Clear dfs timers.
Priyadarshnee S9d2d6e92019-07-23 15:22:32 +05301272 * @dfs_reinit_timers: Reinitialize DFS timers.
Shashikala Prabhua38c0cd2018-10-24 08:35:13 +05301273 * @dfs_enable_stadfs: Enable/Disable STADFS capability.
1274 * @dfs_is_stadfs_enabled: Get STADFS capability value.
bings9c524f52018-01-08 21:14:13 +05301275 * @dfs_process_phyerr_filter_offload:Process radar event.
1276 * @dfs_is_phyerr_filter_offload: Check whether phyerr filter is offload.
Vignesh U0dc79352018-04-18 11:22:16 +05301277 * @dfs_action_on_status: Trigger the action to be taken based on
1278 * on host dfs status received from fw.
1279 * @dfs_override_status_timeout: Override the value of host dfs status
1280 * wait timeout.
1281 * @dfs_get_override_status_timeout: Get the value of host dfs status wait
1282 * timeout.
1283 * @dfs_reset_spoof_test: Checks if radar detection is enabled.
Abhijit Pradhan9ef78462018-10-08 10:54:31 +05301284 * @dfs_is_disable_radar_marking_set: Check if dis_radar_marking param is set.
Vignesh Ua0a995d2019-07-17 12:00:37 +05301285 * @dfs_allow_hw_pulses: Set or unset dfs_allow_hw_pulses which
1286 * allow or disallow HW pulses.
1287 * @dfs_is_hw_pulses_allowed: Check if HW pulses are allowed or not.
Vignesh U4898b2a2019-10-10 14:55:28 +05301288 * @dfs_set_fw_adfs_support: Set the agile DFS FW support in DFS.
1289 * @dfs_reset_dfs_prevchan: Reset DFS previous channel structure.
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +05301290 */
1291struct wlan_lmac_if_dfs_rx_ops {
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +05301292 QDF_STATUS (*dfs_get_radars)(struct wlan_objmgr_pdev *pdev);
1293 QDF_STATUS (*dfs_process_phyerr)(struct wlan_objmgr_pdev *pdev,
1294 void *buf,
1295 uint16_t datalen,
1296 uint8_t r_rssi,
1297 uint8_t r_ext_rssi,
1298 uint32_t r_rs_tstamp,
1299 uint64_t r_fulltsf);
1300 QDF_STATUS (*dfs_destroy_object)(struct wlan_objmgr_pdev *pdev);
1301 QDF_STATUS (*dfs_radar_enable)(struct wlan_objmgr_pdev *pdev,
1302 int no_cac,
1303 uint32_t opmode);
Vignesh U0dc79352018-04-18 11:22:16 +05301304 void (*dfs_is_radar_enabled)(struct wlan_objmgr_pdev *pdev,
1305 int *ignore_dfs);
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +05301306 QDF_STATUS (*dfs_control)(struct wlan_objmgr_pdev *pdev,
Vignesh U0dc79352018-04-18 11:22:16 +05301307 u_int id,
1308 void *indata,
1309 uint32_t insize,
1310 void *outdata,
1311 uint32_t *outsize,
1312 int *error);
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +05301313 QDF_STATUS (*dfs_is_precac_timer_running)(struct wlan_objmgr_pdev *pdev,
Vignesh U0dc79352018-04-18 11:22:16 +05301314 bool *is_precac_timer_running
1315 );
1316 QDF_STATUS
1317 (*dfs_find_vht80_chan_for_precac)(struct wlan_objmgr_pdev *pdev,
1318 uint32_t chan_mode,
1319 uint8_t ch_freq_seg1,
1320 uint32_t *cfreq1,
1321 uint32_t *cfreq2,
1322 uint32_t *phy_mode,
1323 bool *dfs_set_cfreq2,
1324 bool *set_agile);
Shaakir Mohamedadfc94c2019-02-22 11:26:15 -08001325 QDF_STATUS (*dfs_agile_precac_start)(struct wlan_objmgr_pdev *pdev);
1326 QDF_STATUS (*dfs_set_agile_precac_state)(struct wlan_objmgr_pdev *pdev,
1327 int agile_precac_state);
Priyadarshnee S9d2d6e92019-07-23 15:22:32 +05301328 QDF_STATUS (*dfs_reset_adfs_config)(struct wlan_objmgr_psoc *psoc);
Shaakir Mohamedadfc94c2019-02-22 11:26:15 -08001329 QDF_STATUS
1330 (*dfs_dfs_ocac_complete_ind)(struct wlan_objmgr_pdev *pdev,
1331 struct vdev_adfs_complete_status *ocac_st);
Shreedhar Parande62f2bb92018-05-29 11:13:24 +05301332 QDF_STATUS (*dfs_start_precac_timer)(struct wlan_objmgr_pdev *pdev);
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +05301333 QDF_STATUS (*dfs_cancel_precac_timer)(struct wlan_objmgr_pdev *pdev);
1334 QDF_STATUS (*dfs_override_precac_timeout)(
1335 struct wlan_objmgr_pdev *pdev,
1336 int precac_timeout);
1337 QDF_STATUS (*dfs_set_precac_enable)(struct wlan_objmgr_pdev *pdev,
1338 uint32_t value);
Vignesh Mohanfe0b8b42019-09-12 18:50:50 +05301339 QDF_STATUS
1340 (*dfs_get_legacy_precac_enable)(struct wlan_objmgr_pdev *pdev,
1341 bool *buff);
Shreedhar Parande45d12fa2019-08-02 14:56:37 +05301342 QDF_STATUS (*dfs_get_agile_precac_enable)(struct wlan_objmgr_pdev *pdev,
1343 bool *buff);
Shreedhar Parande62f2bb92018-05-29 11:13:24 +05301344#ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT
1345 QDF_STATUS (*dfs_set_precac_intermediate_chan)(struct wlan_objmgr_pdev *pdev,
1346 uint32_t value);
1347 QDF_STATUS (*dfs_get_precac_intermediate_chan)(struct wlan_objmgr_pdev *pdev,
1348 int *buff);
Shreedhar Parandebad46ee2019-02-08 12:15:11 +05301349 bool (*dfs_decide_precac_preferred_chan)(struct wlan_objmgr_pdev *pdev,
1350 uint8_t *pref_chan,
1351 enum wlan_phymode mode);
Shreedhar Parande62f2bb92018-05-29 11:13:24 +05301352 enum precac_chan_state (*dfs_get_precac_chan_state)(struct wlan_objmgr_pdev *pdev,
1353 uint8_t precac_chan);
1354#endif
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +05301355 QDF_STATUS (*dfs_get_override_precac_timeout)(
1356 struct wlan_objmgr_pdev *pdev,
1357 int *precac_timeout);
1358 QDF_STATUS (*dfs_set_current_channel)(struct wlan_objmgr_pdev *pdev,
1359 uint16_t ic_freq,
Shashikala Prabhu8c01b662017-07-19 18:53:33 +05301360 uint64_t ic_flags,
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +05301361 uint16_t ic_flagext,
1362 uint8_t ic_ieee,
1363 uint8_t ic_vhtop_ch_freq_seg1,
1364 uint8_t ic_vhtop_ch_freq_seg2);
Arif Hussain9fba31e2017-03-06 15:14:44 -08001365#ifdef DFS_COMPONENT_ENABLE
1366 QDF_STATUS (*dfs_process_radar_ind)(struct wlan_objmgr_pdev *pdev,
1367 struct radar_found_info *radar_found);
1368 QDF_STATUS (*dfs_dfs_cac_complete_ind)(struct wlan_objmgr_pdev *pdev,
1369 uint32_t vdev_id);
1370#endif
Abhijit Pradhanfe7233a2017-07-12 18:48:14 +05301371 QDF_STATUS (*dfs_stop)(struct wlan_objmgr_pdev *pdev);
Priyadarshnee S9d2d6e92019-07-23 15:22:32 +05301372 QDF_STATUS (*dfs_reinit_timers)(struct wlan_objmgr_pdev *pdev);
Shashikala Prabhua38c0cd2018-10-24 08:35:13 +05301373 void (*dfs_enable_stadfs)(struct wlan_objmgr_pdev *pdev, bool val);
1374 bool (*dfs_is_stadfs_enabled)(struct wlan_objmgr_pdev *pdev);
bings9c524f52018-01-08 21:14:13 +05301375 QDF_STATUS (*dfs_process_phyerr_filter_offload)(
1376 struct wlan_objmgr_pdev *pdev,
1377 struct radar_event_info *wlan_radar_info);
1378 QDF_STATUS (*dfs_is_phyerr_filter_offload)(
Arif Hussainc8fe4682018-02-02 11:34:15 -08001379 struct wlan_objmgr_psoc *psoc,
bings9c524f52018-01-08 21:14:13 +05301380 bool *is_phyerr_filter_offload);
Vignesh U0dc79352018-04-18 11:22:16 +05301381 QDF_STATUS (*dfs_action_on_status)(struct wlan_objmgr_pdev *pdev,
1382 u_int32_t *dfs_status_check);
1383 QDF_STATUS (*dfs_override_status_timeout)(
1384 struct wlan_objmgr_pdev *pdev,
1385 int status_timeout);
1386 QDF_STATUS (*dfs_get_override_status_timeout)(
1387 struct wlan_objmgr_pdev *pdev,
1388 int *status_timeout);
1389 QDF_STATUS (*dfs_reset_spoof_test)(struct wlan_objmgr_pdev *pdev);
Abhijit Pradhan9ef78462018-10-08 10:54:31 +05301390 QDF_STATUS (*dfs_is_disable_radar_marking_set)(struct wlan_objmgr_pdev
1391 *pdev,
1392 bool *disable_radar_marking);
Vignesh Uc0084542018-10-15 12:28:41 +05301393 QDF_STATUS (*dfs_set_nol_subchannel_marking)(
1394 struct wlan_objmgr_pdev *pdev,
1395 bool value);
1396 QDF_STATUS (*dfs_get_nol_subchannel_marking)(
1397 struct wlan_objmgr_pdev *pdev,
1398 bool *value);
Shaakir Mohamed25737a42018-08-23 17:05:35 -07001399 QDF_STATUS (*dfs_set_bw_reduction)(struct wlan_objmgr_pdev *pdev,
1400 bool value);
1401 QDF_STATUS (*dfs_is_bw_reduction_needed)(struct wlan_objmgr_pdev *pdev,
1402 bool *bw_reduce);
Vignesh Ua0a995d2019-07-17 12:00:37 +05301403 void (*dfs_allow_hw_pulses)(struct wlan_objmgr_pdev *pdev,
1404 bool allow_hw_pulses);
1405 bool (*dfs_is_hw_pulses_allowed)(struct wlan_objmgr_pdev *pdev);
Vignesh Mohanfe0b8b42019-09-12 18:50:50 +05301406 void (*dfs_set_fw_adfs_support)(struct wlan_objmgr_pdev *pdev,
1407 bool fw_adfs_support_160,
1408 bool fw_adfs_support_non_160);
Vignesh U4898b2a2019-10-10 14:55:28 +05301409 void (*dfs_reset_dfs_prevchan)(struct wlan_objmgr_pdev *pdev);
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +05301410};
1411
Nagaba29b562019-01-21 12:10:25 +05301412/**
1413 * struct wlan_lmac_if_mlme_rx_ops: Function pointer to call MLME functions
1414 * @wlan_mlme_scan_start: function to start scan
1415 * @wlan_mlme_register_pm_event_handler: function to register pm event
1416 * @wlan_mlme_unregister_pm_event_handler: function unregister for pm event
1417 * @wlan_mlme_register_vdev_event_handler: function to register for vdev event
1418 * @wlan_mlme_unregister_vdev_event_handler: functiont o unregister for vdev
1419 * event
1420 * @wlan_mlme_send_probe_request: function to send probe
1421 * @wlan_mlme_resmgr_request_bsschan: function to request bsschan
1422 * @wlan_mlme_resmgr_request_offchan: function to request offchan
1423 * @wlan_mlme_resmgr_active: function to check resmgr status
1424 * @wlan_mlme_get_cw_inter_found: function to get cw interference
1425 * @wlan_mlme_set_home_channel: function to set home channel
1426 * @wlan_mlme_set_channel: function to set channel
1427 * @wlan_mlme_start_record_stats: functiont to start record stats
1428 * @wlan_mlme_end_record_stats: function to end recording of stats
1429 * @wlan_mlme_get_enh_rpt_ind: function to get enhanced repeater index
1430 * @wlan_mlme_pause: function to pause mlme
1431 * @wlan_mlme_unpause: function to unpause mlme
1432 * @wlan_mlme_vdev_pause_control: function to set vdev pause control
1433 * @wlan_mlme_sta_power_pause: function to set sta power pause
1434 * @wlan_mlme_sta_power_unpause: function to set sta power pause
1435 * @wlan_mlme_set_vdev_sleep: function to sleep vdev sleep
1436 * @wlan_mlme_set_vdev_wakeup: function to set vdev wakeup
1437 * @wlan_mlme_get_traffic_indication_timestamp: function to get tid timestamp
1438 * @wlan_mlme_get_acs_in_progress: function to get ACS progress
1439 * @wlan_mlme_end_scan: function to end scan
Naga866a6682019-06-24 18:09:46 +05301440 * @vdev_mgr_get_response_timer_info: function to get response timer info
1441 * @vdev_mgr_start_response: function to handle start response
1442 * @vdev_mgr_stop_response: function to handle stop response
1443 * @vdev_mgr_delete_response: function to handle delete response
1444 * @vdev_mgr_offload_bcn_tx_status_event_handle: function to handle offload
1445 * beacon tx
1446 * @vdev_mgr_tbttoffset_update_handle: function to handle tbtt offset event
1447 * @vdev_mgr_peer_delete_all_response: function to handle vdev delete all peer
1448 * event
1449 * @vdev_mgr_get_wakelock_info: function to get wakelock info
Nagaba29b562019-01-21 12:10:25 +05301450 */
Padma Raghunathan314a0f72017-03-07 12:01:00 +05301451struct wlan_lmac_if_mlme_rx_ops {
1452
1453 void (*wlan_mlme_scan_start)(struct wlan_objmgr_pdev *pdev);
1454 void (*wlan_mlme_register_pm_event_handler)(
1455 struct wlan_objmgr_pdev *pdev,
1456 uint8_t vdev_id);
1457 void (*wlan_mlme_unregister_pm_event_handler)(
1458 struct wlan_objmgr_pdev *pdev,
1459 uint8_t vdev_id);
1460 QDF_STATUS (*wlan_mlme_register_vdev_event_handler)(
1461 struct wlan_objmgr_pdev *pdev,
1462 uint8_t vdev_id);
1463 QDF_STATUS (*wlan_mlme_unregister_vdev_event_handler)(
1464 struct wlan_objmgr_pdev *pdev,
1465 uint8_t vdev_id);
1466 int (*wlan_mlme_send_probe_request)(struct wlan_objmgr_pdev *pdev,
1467 uint8_t vdev_id,
1468 u_int8_t *destination,
1469 u_int8_t *bssid,
1470 u_int8_t *ssid,
1471 u_int32_t ssidlen,
1472 u_int8_t *ie,
1473 size_t len);
1474 int (*wlan_mlme_resmgr_request_bsschan)(struct wlan_objmgr_pdev *pdev);
1475 int (*wlan_mlme_resmgr_request_offchan)(struct wlan_objmgr_pdev *pdev,
1476 u_int32_t freq,
1477 u_int32_t flags,
1478 u_int32_t estimated_offchannel_time);
1479 int (*wlan_mlme_resmgr_active)(struct wlan_objmgr_pdev *pdev);
1480 int (*wlan_mlme_get_cw_inter_found)(struct wlan_objmgr_pdev *pdev);
1481 int (*wlan_mlme_set_home_channel)(struct wlan_objmgr_pdev *pdev,
1482 uint8_t vdev_id);
1483 int (*wlan_mlme_set_channel)(struct wlan_objmgr_pdev *pdev,
1484 u_int32_t freq,
1485 u_int32_t flags);
1486 void (*wlan_mlme_start_record_stats)(struct wlan_objmgr_pdev *pdev);
1487 void (*wlan_mlme_end_record_stats)(struct wlan_objmgr_pdev *pdev);
1488 int (*wlan_mlme_get_enh_rpt_ind)(struct wlan_objmgr_pdev *pdev);
1489 int (*wlan_mlme_pause)(struct wlan_objmgr_pdev *pdev);
1490 void (*wlan_mlme_unpause)(struct wlan_objmgr_pdev *pdev);
1491 int (*wlan_mlme_vdev_pause_control)(struct wlan_objmgr_pdev *pdev,
1492 uint8_t vdev_id);
1493 int (*wlan_mlme_sta_power_pause)(
1494 struct wlan_objmgr_pdev *pdev,
1495 uint8_t vdev_id,
1496 u_int32_t timeout);
1497 int (*wlan_mlme_sta_power_unpause)(struct wlan_objmgr_pdev *pdev,
1498 uint8_t vdev_id);
1499 int (*wlan_mlme_set_vdev_sleep)(struct wlan_objmgr_pdev *pdev,
1500 uint8_t vdev_id);
1501 int (*wlan_mlme_set_vdev_wakeup)(struct wlan_objmgr_pdev *pdev,
1502 uint8_t vdev_id);
1503 qdf_time_t (*wlan_mlme_get_traffic_indication_timestamp)(
1504 struct wlan_objmgr_pdev *pdev);
1505 int (*wlan_mlme_get_acs_in_progress)(struct wlan_objmgr_pdev *pdev,
1506 uint8_t vdev_id);
1507 void (*wlan_mlme_end_scan)(struct wlan_objmgr_pdev *pdev);
Nagaba29b562019-01-21 12:10:25 +05301508 struct vdev_response_timer *(*vdev_mgr_get_response_timer_info)(
1509 struct wlan_objmgr_vdev *vdev);
Nagaba29b562019-01-21 12:10:25 +05301510 QDF_STATUS (*vdev_mgr_start_response)(
1511 struct wlan_objmgr_psoc *psoc,
1512 struct vdev_start_response *rsp);
1513 QDF_STATUS (*vdev_mgr_stop_response)(
1514 struct wlan_objmgr_psoc *psoc,
1515 struct vdev_stop_response *rsp);
1516 QDF_STATUS (*vdev_mgr_delete_response)(
1517 struct wlan_objmgr_psoc *psoc,
1518 struct vdev_delete_response *rsp);
1519 QDF_STATUS (*vdev_mgr_offload_bcn_tx_status_event_handle)(
1520 uint32_t vdev_id,
1521 uint32_t tx_status);
1522 QDF_STATUS (*vdev_mgr_tbttoffset_update_handle)(
1523 uint32_t num_vdevs,
1524 bool is_ext);
Naga866a6682019-06-24 18:09:46 +05301525 QDF_STATUS (*vdev_mgr_peer_delete_all_response)(
1526 struct wlan_objmgr_psoc *psoc,
1527 struct peer_delete_all_response *rsp);
sandeep puligilla370e41c2019-04-12 16:07:24 -07001528#ifdef FEATURE_VDEV_RSP_WAKELOCK
1529 struct vdev_mlme_wakelock *(*vdev_mgr_get_wakelock_info)(
1530 struct wlan_objmgr_vdev *vdev);
1531#endif
Padma Raghunathan314a0f72017-03-07 12:01:00 +05301532};
Soumya Bhat108f0902017-12-28 21:33:17 +05301533
1534#ifdef WLAN_SUPPORT_GREEN_AP
1535struct wlan_lmac_if_green_ap_rx_ops {
1536 bool (*is_ps_enabled)(struct wlan_objmgr_pdev *pdev);
1537 bool (*is_dbg_print_enabled)(struct wlan_objmgr_pdev *pdev);
1538 QDF_STATUS (*ps_get)(struct wlan_objmgr_pdev *pdev, uint8_t *value);
1539 QDF_STATUS (*ps_set)(struct wlan_objmgr_pdev *pdev, uint8_t value);
1540 void (*suspend_handle)(struct wlan_objmgr_pdev *pdev);
1541};
1542#endif
1543
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +05301544/**
Soumya Bhat604dae02016-12-14 16:31:10 +05301545 * struct wlan_lmac_if_rx_ops - south bound rx function pointers
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +05301546 * @mgmt_txrx_tx_ops: mgmt txrx rx ops
1547 * @scan: scan rx ops
1548 * @dfs_rx_ops: dfs rx ops.
Nagaa3d37622018-02-28 20:18:21 +05301549 * @cp_stats_rx_ops: cp stats rx ops
narayand9e53402019-02-18 11:24:04 +05301550 * @cfr_rx_ops: cfr rx ops
Soumya Bhat604dae02016-12-14 16:31:10 +05301551 *
1552 * Callback function tabled to be registered with lmac/wmi.
1553 * lmac will use the functional table to send events/frames to umac
1554 */
1555struct wlan_lmac_if_rx_ops {
1556 /* Components to declare function pointers required by the module
1557 * in component specific structure.
Soumya Bhat604dae02016-12-14 16:31:10 +05301558 * The component specific ops structure can be declared in this file
1559 * only
Soumya Bhat604dae02016-12-14 16:31:10 +05301560 */
Himanshu Agarwalf8641b92016-12-17 19:33:08 +05301561 struct wlan_lmac_if_mgmt_txrx_rx_ops mgmt_txrx_rx_ops;
Om Prakash Tripathi22f95dc2016-12-19 10:45:59 +05301562 struct wlan_lmac_if_scan_rx_ops scan;
Wu Gao89c8a8a2017-03-22 12:54:13 +08001563#ifdef CONVERGED_P2P_ENABLE
Wu Gao396518b2017-03-15 19:12:20 +08001564 struct wlan_lmac_if_p2p_rx_ops p2p;
1565#endif
Amar Singhale4079742017-02-10 15:24:40 -08001566
Subrat Mishra81c60e82017-03-02 14:23:37 +05301567#ifdef WLAN_ATF_ENABLE
1568 struct wlan_lmac_if_atf_rx_ops atf_rx_ops;
1569#endif
Nagaa3d37622018-02-28 20:18:21 +05301570#ifdef QCA_SUPPORT_CP_STATS
1571 struct wlan_lmac_if_cp_stats_rx_ops cp_stats_rx_ops;
1572#endif
Venkateswara Swamy Bandaru0b9f5ec2017-05-11 10:45:35 +05301573#ifdef WLAN_SA_API_ENABLE
1574 struct wlan_lmac_if_sa_api_rx_ops sa_api_rx_ops;
1575#endif
Edayilliam Jayadev642201f2017-04-05 14:29:18 +05301576
narayand9e53402019-02-18 11:24:04 +05301577#ifdef WLAN_CFR_ENABLE
1578 struct wlan_lmac_if_cfr_rx_ops cfr_rx_ops;
1579#endif
1580
Edayilliam Jayadev642201f2017-04-05 14:29:18 +05301581#ifdef WLAN_CONV_SPECTRAL_ENABLE
1582 struct wlan_lmac_if_sptrl_rx_ops sptrl_rx_ops;
1583#endif
1584
Ashok Ponnaiahf8c31452017-03-24 06:22:24 +05301585#ifdef WLAN_CONV_CRYPTO_SUPPORTED
Ashok Ponnaiah0d0a3682017-02-01 00:19:32 +05301586 struct wlan_lmac_if_crypto_rx_ops crypto_rx_ops;
1587#endif
Naveen Rawat18ceca12017-03-06 16:04:45 -08001588#ifdef WIFI_POS_CONVERGED
1589 struct wlan_lmac_if_wifi_pos_rx_ops wifi_pos_rx_ops;
1590#endif
Amar Singhale4079742017-02-10 15:24:40 -08001591 struct wlan_lmac_if_reg_rx_ops reg_rx_ops;
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +05301592 struct wlan_lmac_if_dfs_rx_ops dfs_rx_ops;
Jeff Johnson6889ddf2019-02-08 07:22:01 -08001593#ifdef FEATURE_WLAN_TDLS
Frank Liu9dd3c3e2017-04-11 22:37:03 +08001594 struct wlan_lmac_if_tdls_rx_ops tdls_rx_ops;
1595#endif
Subrat Mishrabf125872017-09-27 14:41:20 +05301596
1597#ifdef WLAN_SUPPORT_FILS
1598 struct wlan_lmac_if_fd_rx_ops fd_rx_ops;
1599#endif
1600
Padma Raghunathan314a0f72017-03-07 12:01:00 +05301601 struct wlan_lmac_if_mlme_rx_ops mops;
akosigifffcebf2017-11-15 18:29:32 +05301602
Soumya Bhat108f0902017-12-28 21:33:17 +05301603#ifdef WLAN_SUPPORT_GREEN_AP
1604 struct wlan_lmac_if_green_ap_rx_ops green_ap_rx_ops;
1605#endif
akosigifffcebf2017-11-15 18:29:32 +05301606
1607 struct wlan_lmac_if_ftm_rx_ops ftm_rx_ops;
Soumya Bhat604dae02016-12-14 16:31:10 +05301608};
1609
Soumya Bhate2e54422017-02-17 10:44:54 +05301610/* Function pointer to call legacy tx_ops registration in OL/WMA.
1611 */
1612extern QDF_STATUS (*wlan_lmac_if_umac_tx_ops_register)
1613 (struct wlan_lmac_if_tx_ops *tx_ops);
Soumya Bhat604dae02016-12-14 16:31:10 +05301614#endif /* _WLAN_LMAC_IF_DEF_H_ */