blob: f7e6fc0f9f7323c86767d27b70118ffdfa4d864d [file] [log] [blame]
Soumya Bhat604dae02016-12-14 16:31:10 +05301/*
Shashikala Prabhu7517a8d2018-12-13 18:02:45 +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#include "qdf_mem.h"
Manikandan Mohana2993a52018-03-01 16:21:55 -080021#include <qdf_module.h>
Soumya Bhat604dae02016-12-14 16:31:10 +053022#include "wlan_lmac_if_def.h"
23#include "wlan_lmac_if_api.h"
Himanshu Agarwalf8641b92016-12-17 19:33:08 +053024#include "wlan_mgmt_txrx_tgt_api.h"
Abhishek Singhf94beaa2017-03-08 11:07:17 +053025#include "wlan_scan_tgt_api.h"
Abhijit Pradhan7383ef92017-11-01 11:14:15 +053026#include <wlan_reg_services_api.h>
Shashikala Prabhua7db8ce2017-12-18 15:35:08 +053027#include <wlan_reg_ucfg_api.h>
Subrat Mishra81c60e82017-03-02 14:23:37 +053028#ifdef WLAN_ATF_ENABLE
29#include "wlan_atf_tgt_api.h"
30#endif
Venkateswara Swamy Bandaru0b9f5ec2017-05-11 10:45:35 +053031#ifdef WLAN_SA_API_ENABLE
32#include "wlan_sa_api_tgt_api.h"
33#endif
Naveen Rawat18ceca12017-03-06 16:04:45 -080034#ifdef WIFI_POS_CONVERGED
35#include "target_if_wifi_pos.h"
36#endif /* WIFI_POS_CONVERGED */
Amar Singhale4079742017-02-10 15:24:40 -080037#include "wlan_reg_tgt_api.h"
Wu Gao849fd2c2017-03-23 10:14:39 +080038#ifdef CONVERGED_P2P_ENABLE
39#include "wlan_p2p_tgt_api.h"
40#endif
Jeff Johnson6889ddf2019-02-08 07:22:01 -080041#ifdef FEATURE_WLAN_TDLS
Frank Liu9dd3c3e2017-04-11 22:37:03 +080042#include "wlan_tdls_tgt_api.h"
43#endif
Soumya Bhat604dae02016-12-14 16:31:10 +053044
Ashok Ponnaiahf8c31452017-03-24 06:22:24 +053045#ifdef WLAN_CONV_CRYPTO_SUPPORTED
Ashok Ponnaiah0d0a3682017-02-01 00:19:32 +053046#include "wlan_crypto_global_api.h"
47#endif
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +053048#ifdef DFS_COMPONENT_ENABLE
49#include <wlan_dfs_tgt_api.h>
Shashikala Prabhu7517a8d2018-12-13 18:02:45 +053050#include <wlan_objmgr_vdev_obj.h>
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +053051#include <wlan_dfs_utils_api.h>
52#endif
akosigifffcebf2017-11-15 18:29:32 +053053
Soumya Bhat108f0902017-12-28 21:33:17 +053054#ifdef WLAN_SUPPORT_GREEN_AP
55#include <wlan_green_ap_api.h>
56#include <wlan_green_ap_ucfg_api.h>
57#endif
akosigifffcebf2017-11-15 18:29:32 +053058#include <wlan_ftm_ucfg_api.h>
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +053059
Subrat Mishrabf125872017-09-27 14:41:20 +053060#ifdef WLAN_SUPPORT_FILS
61#include <wlan_fd_tgt_api.h>
62#endif
63
Nagaa3d37622018-02-28 20:18:21 +053064#ifdef QCA_SUPPORT_CP_STATS
65#include <wlan_cp_stats_tgt_api.h>
66#endif /* QCA_SUPPORT_CP_STATS */
Nagaba29b562019-01-21 12:10:25 +053067#include <wlan_vdev_mgr_tgt_if_rx_api.h>
Nagaba29b562019-01-21 12:10:25 +053068
narayand9e53402019-02-18 11:24:04 +053069#ifdef WLAN_CFR_ENABLE
70#include "wlan_cfr_tgt_api.h"
71#endif
72
Abhiram Jogadenu1c2b5832019-07-12 11:03:04 +053073#ifdef WIFI_POS_CONVERGED
74#include "wifi_pos_api.h"
75#endif
76
Soumya Bhate2e54422017-02-17 10:44:54 +053077/* Function pointer for OL/WMA specific UMAC tx_ops
78 * registration.
79 */
80QDF_STATUS (*wlan_lmac_if_umac_tx_ops_register)
Soumya Bhat604dae02016-12-14 16:31:10 +053081 (struct wlan_lmac_if_tx_ops *tx_ops);
Manikandan Mohana2993a52018-03-01 16:21:55 -080082qdf_export_symbol(wlan_lmac_if_umac_tx_ops_register);
Soumya Bhat604dae02016-12-14 16:31:10 +053083
Nagaba29b562019-01-21 12:10:25 +053084static void
85tgt_vdev_mgr_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
86{
87 tgt_vdev_mgr_register_rx_ops(rx_ops);
88}
Nagaba29b562019-01-21 12:10:25 +053089
Nagaa3d37622018-02-28 20:18:21 +053090#ifdef QCA_SUPPORT_CP_STATS
91/**
92 * wlan_lmac_if_cp_stats_rx_ops_register() - API to register cp stats Rx Ops
93 * @rx_ops: pointer to lmac rx ops
94 *
95 * This API will be used to register function pointers for FW events
96 *
97 * Return: void
98 */
99static void
100wlan_lmac_if_cp_stats_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
101{
Naveen Rawat8f4c9082018-04-21 09:22:23 -0700102 tgt_cp_stats_register_rx_ops(rx_ops);
Nagaa3d37622018-02-28 20:18:21 +0530103}
104#else
105static void
106wlan_lmac_if_cp_stats_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
107{
108}
Naveen Rawata2a1eb12018-04-06 10:56:11 -0700109#endif /* QCA_SUPPORT_CP_STATS */
Nagaa3d37622018-02-28 20:18:21 +0530110
Subrat Mishra81c60e82017-03-02 14:23:37 +0530111#ifdef WLAN_ATF_ENABLE
112/**
113 * wlan_lmac_if_atf_rx_ops_register() - Function to register ATF RX ops.
114 */
115static void
116wlan_lmac_if_atf_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
117{
118 struct wlan_lmac_if_atf_rx_ops *atf_rx_ops = &rx_ops->atf_rx_ops;
119
120 /* ATF rx ops */
121 atf_rx_ops->atf_get_atf_commit = tgt_atf_get_atf_commit;
122 atf_rx_ops->atf_get_fmcap = tgt_atf_get_fmcap;
123 atf_rx_ops->atf_get_obss_scale = tgt_atf_get_obss_scale;
124 atf_rx_ops->atf_get_mode = tgt_atf_get_mode;
125 atf_rx_ops->atf_get_msdu_desc = tgt_atf_get_msdu_desc;
126 atf_rx_ops->atf_get_max_vdevs = tgt_atf_get_max_vdevs;
127 atf_rx_ops->atf_get_peers = tgt_atf_get_peers;
128 atf_rx_ops->atf_get_tput_based = tgt_atf_get_tput_based;
129 atf_rx_ops->atf_get_logging = tgt_atf_get_logging;
Jeffin Mammenc17d8ee2018-08-13 09:53:57 +0530130 atf_rx_ops->atf_update_buf_held = tgt_atf_update_buf_held;
Subrat Mishra81c60e82017-03-02 14:23:37 +0530131 atf_rx_ops->atf_get_ssidgroup = tgt_atf_get_ssidgroup;
Jeffin Mammen31320b32018-07-24 14:20:08 +0530132 atf_rx_ops->atf_get_vdev_ac_blk_cnt = tgt_atf_get_vdev_ac_blk_cnt;
133 atf_rx_ops->atf_get_peer_blk_txbitmap = tgt_atf_get_peer_blk_txbitmap;
Subrat Mishra81c60e82017-03-02 14:23:37 +0530134 atf_rx_ops->atf_get_vdev_blk_txtraffic = tgt_atf_get_vdev_blk_txtraffic;
135 atf_rx_ops->atf_get_sched = tgt_atf_get_sched;
136 atf_rx_ops->atf_get_tx_tokens = tgt_atf_get_tx_tokens;
Jeffin Mammenc17d8ee2018-08-13 09:53:57 +0530137 atf_rx_ops->atf_account_subgroup_txtokens =
138 tgt_atf_account_subgroup_txtokens;
139 atf_rx_ops->atf_adjust_subgroup_txtokens =
140 tgt_atf_adjust_subgroup_txtokens;
141 atf_rx_ops->atf_get_subgroup_airtime = tgt_atf_get_subgroup_airtime;
142 atf_rx_ops->atf_subgroup_free_buf = tgt_atf_subgroup_free_buf;
143 atf_rx_ops->atf_update_subgroup_tidstate =
144 tgt_atf_update_subgroup_tidstate;
145 atf_rx_ops->atf_buf_distribute = tgt_atf_buf_distribute;
Subrat Mishra81c60e82017-03-02 14:23:37 +0530146 atf_rx_ops->atf_get_shadow_alloted_tx_tokens =
147 tgt_atf_get_shadow_alloted_tx_tokens;
148 atf_rx_ops->atf_get_txtokens_common = tgt_atf_get_txtokens_common;
149 atf_rx_ops->atf_get_peer_stats = tgt_atf_get_peer_stats;
150 atf_rx_ops->atf_get_token_allocated = tgt_atf_get_token_allocated;
151 atf_rx_ops->atf_get_token_utilized = tgt_atf_get_token_utilized;
152
153 atf_rx_ops->atf_set_sched = tgt_atf_set_sched;
154 atf_rx_ops->atf_set_fmcap = tgt_atf_set_fmcap;
155 atf_rx_ops->atf_set_obss_scale = tgt_atf_set_obss_scale;
Subrat Mishra81c60e82017-03-02 14:23:37 +0530156 atf_rx_ops->atf_set_msdu_desc = tgt_atf_set_msdu_desc;
157 atf_rx_ops->atf_set_max_vdevs = tgt_atf_set_max_vdevs;
158 atf_rx_ops->atf_set_peers = tgt_atf_set_peers;
159 atf_rx_ops->atf_set_peer_stats = tgt_atf_set_peer_stats;
160 atf_rx_ops->atf_set_vdev_blk_txtraffic = tgt_atf_set_vdev_blk_txtraffic;
Jeffin Mammen31320b32018-07-24 14:20:08 +0530161 atf_rx_ops->atf_peer_blk_txtraffic = tgt_atf_peer_blk_txtraffic;
162 atf_rx_ops->atf_peer_unblk_txtraffic = tgt_atf_peer_unblk_txtraffic;
Subrat Mishra81c60e82017-03-02 14:23:37 +0530163 atf_rx_ops->atf_set_token_allocated = tgt_atf_set_token_allocated;
164 atf_rx_ops->atf_set_token_utilized = tgt_atf_set_token_utilized;
165}
166#else
167static void
168wlan_lmac_if_atf_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
169{
170}
171#endif
172
Subrat Mishrabf125872017-09-27 14:41:20 +0530173#ifdef WLAN_SUPPORT_FILS
174static void
175wlan_lmac_if_fd_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
176{
177 struct wlan_lmac_if_fd_rx_ops *fd_rx_ops = &rx_ops->fd_rx_ops;
178
Subrat Mishra172974d2018-02-03 08:30:13 +0530179 fd_rx_ops->fd_is_fils_enable = tgt_fd_is_fils_enable;
Subrat Mishrabf125872017-09-27 14:41:20 +0530180 fd_rx_ops->fd_alloc = tgt_fd_alloc;
181 fd_rx_ops->fd_stop = tgt_fd_stop;
182 fd_rx_ops->fd_free = tgt_fd_free;
183 fd_rx_ops->fd_get_valid_fd_period = tgt_fd_get_valid_fd_period;
184 fd_rx_ops->fd_swfda_handler = tgt_fd_swfda_handler;
Rhythm Patwa25a0e882019-10-19 21:36:48 -0700185 fd_rx_ops->fd_offload = tgt_fd_offload;
Subrat Mishrabf125872017-09-27 14:41:20 +0530186}
187#else
188static void
189wlan_lmac_if_fd_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
190{
191}
192#endif
193
Venkateswara Swamy Bandaru0b9f5ec2017-05-11 10:45:35 +0530194#ifdef WLAN_SA_API_ENABLE
195/**
196 * wlan_lmac_if_sa_api_rx_ops_register() - Function to register SA_API RX ops.
197 */
198static void
199wlan_lmac_if_sa_api_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
200{
201 struct wlan_lmac_if_sa_api_rx_ops *sa_api_rx_ops = &rx_ops->sa_api_rx_ops;
202
203 /* SA API rx ops */
204 sa_api_rx_ops->sa_api_get_sa_supported = tgt_sa_api_get_sa_supported;
205 sa_api_rx_ops->sa_api_get_validate_sw = tgt_sa_api_get_validate_sw;
206 sa_api_rx_ops->sa_api_enable_sa = tgt_sa_api_enable_sa;
207 sa_api_rx_ops->sa_api_get_sa_enable = tgt_sa_api_get_sa_enable;
208
209 sa_api_rx_ops->sa_api_peer_assoc_hanldler = tgt_sa_api_peer_assoc_hanldler;
210 sa_api_rx_ops->sa_api_update_tx_feedback = tgt_sa_api_update_tx_feedback;
211 sa_api_rx_ops->sa_api_update_rx_feedback = tgt_sa_api_update_rx_feedback;
212
213 sa_api_rx_ops->sa_api_ucfg_set_param = tgt_sa_api_ucfg_set_param;
214 sa_api_rx_ops->sa_api_ucfg_get_param = tgt_sa_api_ucfg_get_param;
215
216 sa_api_rx_ops->sa_api_is_tx_feedback_enabled = tgt_sa_api_is_tx_feedback_enabled;
217 sa_api_rx_ops->sa_api_is_rx_feedback_enabled = tgt_sa_api_is_rx_feedback_enabled;
218
219 sa_api_rx_ops->sa_api_convert_rate_2g = tgt_sa_api_convert_rate_2g;
220 sa_api_rx_ops->sa_api_convert_rate_5g = tgt_sa_api_convert_rate_5g;
221 sa_api_rx_ops->sa_api_get_sa_mode = tgt_sa_api_get_sa_mode;
222
223 sa_api_rx_ops->sa_api_get_beacon_txantenna = tgt_sa_api_get_beacon_txantenna;
224 sa_api_rx_ops->sa_api_cwm_action = tgt_sa_api_cwm_action;
225}
226#else
227static void
228wlan_lmac_if_sa_api_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
229{
230}
231#endif
232
narayand9e53402019-02-18 11:24:04 +0530233#ifdef WLAN_CFR_ENABLE
234/**
235 * wlan_lmac_if_cfr_rx_ops_register() - Function to register CFR RX ops
236 */
237static void
238wlan_lmac_if_cfr_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
239{
240 struct wlan_lmac_if_cfr_rx_ops *cfr_rx_ops = &rx_ops->cfr_rx_ops;
241
242 /* CFR rx ops */
243 cfr_rx_ops->cfr_support_set = tgt_cfr_support_set;
244 cfr_rx_ops->cfr_info_send = tgt_cfr_info_send;
245}
246#else
247static void
248wlan_lmac_if_cfr_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
249{
250}
251#endif
Venkateswara Swamy Bandaru0b9f5ec2017-05-11 10:45:35 +0530252
Ashok Ponnaiahf8c31452017-03-24 06:22:24 +0530253#ifdef WLAN_CONV_CRYPTO_SUPPORTED
254static void
255wlan_lmac_if_crypto_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
256{
257 wlan_crypto_register_crypto_rx_ops(&rx_ops->crypto_rx_ops);
258}
259#else
260static void
261wlan_lmac_if_crypto_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
262{
263}
264#endif
265
Naveen Rawat18ceca12017-03-06 16:04:45 -0800266#ifdef WIFI_POS_CONVERGED
267static void wlan_lmac_if_umac_rx_ops_register_wifi_pos(
268 struct wlan_lmac_if_rx_ops *rx_ops)
269{
Abhiram Jogadenu1c2b5832019-07-12 11:03:04 +0530270 wifi_pos_register_rx_ops(rx_ops);
Naveen Rawat18ceca12017-03-06 16:04:45 -0800271}
272#else
273static void wlan_lmac_if_umac_rx_ops_register_wifi_pos(
274 struct wlan_lmac_if_rx_ops *rx_ops)
275{
276}
277#endif /* WIFI_POS_CONVERGED */
278
Abhijit Pradhanca7d77b2017-07-12 12:08:42 +0530279static void wlan_lmac_if_umac_reg_rx_ops_register(
280 struct wlan_lmac_if_rx_ops *rx_ops)
281{
282 rx_ops->reg_rx_ops.master_list_handler =
283 tgt_reg_process_master_chan_list;
284
285 rx_ops->reg_rx_ops.reg_11d_new_cc_handler =
286 tgt_reg_process_11d_new_country;
287
288 rx_ops->reg_rx_ops.reg_set_regdb_offloaded =
289 tgt_reg_set_regdb_offloaded;
290
291 rx_ops->reg_rx_ops.reg_set_11d_offloaded =
292 tgt_reg_set_11d_offloaded;
Abhijit Pradhanaf06bcb2017-07-18 13:34:15 +0530293
294 rx_ops->reg_rx_ops.get_dfs_region =
295 wlan_reg_get_dfs_region;
Kiran Kumar Lokerea78b4bf2017-06-30 19:13:02 -0700296
297 rx_ops->reg_rx_ops.reg_ch_avoid_event_handler =
298 tgt_reg_process_ch_avoid_event;
Kai Chen7df3f4f2017-08-18 13:48:06 -0700299
300 rx_ops->reg_rx_ops.reg_freq_to_chan =
301 wlan_reg_freq_to_chan;
Shashikala Prabhua7db8ce2017-12-18 15:35:08 +0530302
303 rx_ops->reg_rx_ops.reg_set_chan_144 =
304 ucfg_reg_modify_chan_144;
305
306 rx_ops->reg_rx_ops.reg_get_chan_144 =
307 ucfg_reg_get_en_chan_144;
308
309 rx_ops->reg_rx_ops.reg_program_default_cc =
310 ucfg_reg_program_default_cc;
311
312 rx_ops->reg_rx_ops.reg_get_current_regdomain =
313 wlan_reg_get_curr_regdomain;
Vignesh U94395f62019-05-13 13:05:31 +0530314
315 rx_ops->reg_rx_ops.reg_enable_dfs_channels =
316 ucfg_reg_enable_dfs_channels;
Priyadarshnee S9d2d6e92019-07-23 15:22:32 +0530317
318 rx_ops->reg_rx_ops.reg_modify_pdev_chan_range =
319 wlan_reg_modify_pdev_chan_range;
Rajeev Kumar Sirasanagandla816b5032019-08-05 21:35:14 +0530320
321 rx_ops->reg_rx_ops.reg_ignore_fw_reg_offload_ind =
322 tgt_reg_ignore_fw_reg_offload_ind;
Abhijit Pradhanca7d77b2017-07-12 12:08:42 +0530323}
324
Wu Gao849fd2c2017-03-23 10:14:39 +0800325#ifdef CONVERGED_P2P_ENABLE
Rachit Kankane898f6ff2018-07-31 16:26:38 +0530326#ifdef FEATURE_P2P_LISTEN_OFFLOAD
Wu Gao849fd2c2017-03-23 10:14:39 +0800327static void wlan_lmac_if_umac_rx_ops_register_p2p(
328 struct wlan_lmac_if_rx_ops *rx_ops)
329{
330 rx_ops->p2p.lo_ev_handler = tgt_p2p_lo_event_cb;
331 rx_ops->p2p.noa_ev_handler = tgt_p2p_noa_event_cb;
Liangwei Dongcc8676b2018-09-19 23:35:14 -0400332 rx_ops->p2p.add_mac_addr_filter_evt_handler =
333 tgt_p2p_add_mac_addr_status_event_cb;
Wu Gao849fd2c2017-03-23 10:14:39 +0800334}
335#else
336static void wlan_lmac_if_umac_rx_ops_register_p2p(
337 struct wlan_lmac_if_rx_ops *rx_ops)
338{
Rachit Kankane898f6ff2018-07-31 16:26:38 +0530339 rx_ops->p2p.noa_ev_handler = tgt_p2p_noa_event_cb;
Liangwei Dongcc8676b2018-09-19 23:35:14 -0400340 rx_ops->p2p.add_mac_addr_filter_evt_handler =
341 tgt_p2p_add_mac_addr_status_event_cb;
Rachit Kankane898f6ff2018-07-31 16:26:38 +0530342}
343#endif
344#else
345static void wlan_lmac_if_umac_rx_ops_register_p2p(
346 struct wlan_lmac_if_rx_ops *rx_ops)
347{
Wu Gao849fd2c2017-03-23 10:14:39 +0800348}
349#endif
350
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530351#ifdef DFS_COMPONENT_ENABLE
Shreedhar Parande62f2bb92018-05-29 11:13:24 +0530352#ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT
353static inline void
354register_precac_auto_chan_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
355{
356 if (!rx_ops)
357 return;
358 rx_ops->dfs_set_precac_intermediate_chan =
359 ucfg_dfs_set_precac_intermediate_chan;
360 rx_ops->dfs_get_precac_intermediate_chan =
361 ucfg_dfs_get_precac_intermediate_chan;
362 rx_ops->dfs_get_precac_chan_state = ucfg_dfs_get_precac_chan_state;
363}
364#else
365static inline void
366register_precac_auto_chan_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
367{
368}
369#endif
370
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530371static QDF_STATUS
372wlan_lmac_if_umac_dfs_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
373{
374 struct wlan_lmac_if_dfs_rx_ops *dfs_rx_ops;
375
376 dfs_rx_ops = &rx_ops->dfs_rx_ops;
377
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530378 dfs_rx_ops->dfs_get_radars = tgt_dfs_get_radars;
379 dfs_rx_ops->dfs_process_phyerr = tgt_dfs_process_phyerr;
380 dfs_rx_ops->dfs_destroy_object = tgt_dfs_destroy_object;
381 dfs_rx_ops->dfs_radar_enable = tgt_dfs_radar_enable;
Vignesh U0dc79352018-04-18 11:22:16 +0530382 dfs_rx_ops->dfs_is_radar_enabled = tgt_dfs_is_radar_enabled;
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530383 dfs_rx_ops->dfs_control = tgt_dfs_control;
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530384 dfs_rx_ops->dfs_is_precac_timer_running =
385 tgt_dfs_is_precac_timer_running;
386 dfs_rx_ops->dfs_find_vht80_chan_for_precac =
387 tgt_dfs_find_vht80_chan_for_precac;
Shaakir Mohamedadfc94c2019-02-22 11:26:15 -0800388 dfs_rx_ops->dfs_agile_precac_start =
389 tgt_dfs_agile_precac_start;
390 dfs_rx_ops->dfs_set_agile_precac_state =
391 tgt_dfs_set_agile_precac_state;
Shreedhar Parande62f2bb92018-05-29 11:13:24 +0530392 dfs_rx_ops->dfs_start_precac_timer = utils_dfs_start_precac_timer;
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530393 dfs_rx_ops->dfs_cancel_precac_timer = utils_dfs_cancel_precac_timer;
Priyadarshnee S9d2d6e92019-07-23 15:22:32 +0530394 dfs_rx_ops->dfs_reset_adfs_config = ucfg_dfs_reset_agile_config;
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530395 dfs_rx_ops->dfs_override_precac_timeout =
396 ucfg_dfs_override_precac_timeout;
397 dfs_rx_ops->dfs_set_precac_enable = ucfg_dfs_set_precac_enable;
Vignesh Mohanfe0b8b42019-09-12 18:50:50 +0530398 dfs_rx_ops->dfs_get_legacy_precac_enable =
399 ucfg_dfs_get_legacy_precac_enable;
400 dfs_rx_ops->dfs_get_agile_precac_enable =
401 ucfg_dfs_get_agile_precac_enable;
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530402 dfs_rx_ops->dfs_get_override_precac_timeout =
403 ucfg_dfs_get_override_precac_timeout;
404 dfs_rx_ops->dfs_set_current_channel = tgt_dfs_set_current_channel;
Arif Hussain9fba31e2017-03-06 15:14:44 -0800405 dfs_rx_ops->dfs_process_radar_ind = tgt_dfs_process_radar_ind;
406 dfs_rx_ops->dfs_dfs_cac_complete_ind = tgt_dfs_cac_complete;
Shaakir Mohamedadfc94c2019-02-22 11:26:15 -0800407 dfs_rx_ops->dfs_dfs_ocac_complete_ind = tgt_dfs_ocac_complete;
Abhijit Pradhanfe7233a2017-07-12 18:48:14 +0530408 dfs_rx_ops->dfs_stop = tgt_dfs_stop;
Priyadarshnee S9d2d6e92019-07-23 15:22:32 +0530409 dfs_rx_ops->dfs_reinit_timers = ucfg_dfs_reinit_timers;
Shashikala Prabhua38c0cd2018-10-24 08:35:13 +0530410 dfs_rx_ops->dfs_enable_stadfs = tgt_dfs_enable_stadfs;
411 dfs_rx_ops->dfs_is_stadfs_enabled = tgt_dfs_is_stadfs_enabled;
bings9c524f52018-01-08 21:14:13 +0530412 dfs_rx_ops->dfs_process_phyerr_filter_offload =
413 tgt_dfs_process_phyerr_filter_offload;
414 dfs_rx_ops->dfs_is_phyerr_filter_offload =
415 tgt_dfs_is_phyerr_filter_offload;
Vignesh U0dc79352018-04-18 11:22:16 +0530416 dfs_rx_ops->dfs_action_on_status = tgt_dfs_action_on_status_from_fw;
417 dfs_rx_ops->dfs_override_status_timeout =
418 ucfg_dfs_set_override_status_timeout;
419 dfs_rx_ops->dfs_get_override_status_timeout =
420 ucfg_dfs_get_override_status_timeout;
421 dfs_rx_ops->dfs_reset_spoof_test =
422 tgt_dfs_reset_spoof_test;
Abhijit Pradhan9ef78462018-10-08 10:54:31 +0530423 dfs_rx_ops->dfs_is_disable_radar_marking_set =
424 utils_dfs_get_disable_radar_marking;
Vignesh Uc0084542018-10-15 12:28:41 +0530425 dfs_rx_ops->dfs_set_nol_subchannel_marking =
426 ucfg_dfs_set_nol_subchannel_marking;
427 dfs_rx_ops->dfs_get_nol_subchannel_marking =
428 ucfg_dfs_get_nol_subchannel_marking;
Shaakir Mohamed25737a42018-08-23 17:05:35 -0700429 dfs_rx_ops->dfs_set_bw_reduction =
430 utils_dfs_bw_reduce;
431 dfs_rx_ops->dfs_is_bw_reduction_needed =
432 utils_dfs_is_bw_reduce;
Vignesh Ua0a995d2019-07-17 12:00:37 +0530433 dfs_rx_ops->dfs_allow_hw_pulses =
434 ucfg_dfs_allow_hw_pulses;
435 dfs_rx_ops->dfs_is_hw_pulses_allowed =
436 ucfg_dfs_is_hw_pulses_allowed;
Vignesh Mohanfe0b8b42019-09-12 18:50:50 +0530437 dfs_rx_ops->dfs_set_fw_adfs_support =
438 tgt_dfs_set_fw_adfs_support;
Vignesh U4898b2a2019-10-10 14:55:28 +0530439 dfs_rx_ops->dfs_reset_dfs_prevchan =
440 utils_dfs_reset_dfs_prevchan;
Shaakir Mohamed25737a42018-08-23 17:05:35 -0700441
Shreedhar Parande62f2bb92018-05-29 11:13:24 +0530442 register_precac_auto_chan_rx_ops(dfs_rx_ops);
443
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530444 return QDF_STATUS_SUCCESS;
445}
446#else
447static QDF_STATUS
448wlan_lmac_if_umac_dfs_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
449{
450 return QDF_STATUS_SUCCESS;
451}
452#endif
453
Jeff Johnson6889ddf2019-02-08 07:22:01 -0800454#ifdef FEATURE_WLAN_TDLS
Frank Liu9dd3c3e2017-04-11 22:37:03 +0800455static QDF_STATUS
456wlan_lmac_if_umac_tdls_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
457{
458 rx_ops->tdls_rx_ops.tdls_ev_handler = tgt_tdls_event_handler;
459
460 return QDF_STATUS_SUCCESS;
461}
462#else
463static QDF_STATUS
464wlan_lmac_if_umac_tdls_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
465{
466 return QDF_STATUS_SUCCESS;
467}
468#endif
469
Soumya Bhat108f0902017-12-28 21:33:17 +0530470#ifdef WLAN_SUPPORT_GREEN_AP
471static QDF_STATUS
472wlan_lmac_if_umac_green_ap_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
473{
474 rx_ops->green_ap_rx_ops.is_ps_enabled = wlan_green_ap_is_ps_enabled;
475 rx_ops->green_ap_rx_ops.is_dbg_print_enabled =
476 ucfg_green_ap_get_debug_prints;
477 rx_ops->green_ap_rx_ops.ps_set = ucfg_green_ap_set_ps_config;
478 rx_ops->green_ap_rx_ops.ps_get = ucfg_green_ap_get_ps_config;
479 rx_ops->green_ap_rx_ops.suspend_handle = wlan_green_ap_suspend_handle;
480
481 return QDF_STATUS_SUCCESS;
482}
483#else
484static QDF_STATUS
485wlan_lmac_if_umac_green_ap_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
486{
487 return QDF_STATUS_SUCCESS;
488}
489#endif
490
Akshay Kosigi0987f2d2018-05-07 15:56:47 +0530491#ifdef QCA_WIFI_FTM
akosigifffcebf2017-11-15 18:29:32 +0530492static QDF_STATUS
493wlan_lmac_if_umac_ftm_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
494{
495 struct wlan_lmac_if_ftm_rx_ops *ftm_rx_ops;
496
497 ftm_rx_ops = &rx_ops->ftm_rx_ops;
498
499 ftm_rx_ops->ftm_ev_handler = wlan_ftm_process_utf_event;
500
501 return QDF_STATUS_SUCCESS;
502}
Akshay Kosigi0987f2d2018-05-07 15:56:47 +0530503#else
504static QDF_STATUS
505wlan_lmac_if_umac_ftm_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
506{
507 return QDF_STATUS_SUCCESS;
508}
509#endif
Soumya Bhat604dae02016-12-14 16:31:10 +0530510/**
Soumya Bhate2e54422017-02-17 10:44:54 +0530511 * wlan_lmac_if_umac_rx_ops_register() - UMAC rx handler register
Soumya Bhat604dae02016-12-14 16:31:10 +0530512 * @rx_ops: Pointer to rx_ops structure to be populated
513 *
514 * Register umac RX callabacks which will be called by DA/OL/WMA/WMI
515 *
516 * Return: QDF_STATUS_SUCCESS - in case of success
517 */
518QDF_STATUS
Soumya Bhate2e54422017-02-17 10:44:54 +0530519wlan_lmac_if_umac_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
Soumya Bhat604dae02016-12-14 16:31:10 +0530520{
521 /* Component specific public api's to be called to register
522 * respective callbacks
523 * Ex: rx_ops->fp = function;
524 */
Himanshu Agarwalf8641b92016-12-17 19:33:08 +0530525 struct wlan_lmac_if_mgmt_txrx_rx_ops *mgmt_txrx_rx_ops;
526
527 if (!rx_ops) {
528 qdf_print("%s: lmac if rx ops pointer is NULL", __func__);
529 return QDF_STATUS_E_INVAL;
530 }
531
532 /* mgmt txrx rx ops */
533 mgmt_txrx_rx_ops = &rx_ops->mgmt_txrx_rx_ops;
534
535 mgmt_txrx_rx_ops->mgmt_tx_completion_handler =
536 tgt_mgmt_txrx_tx_completion_handler;
537 mgmt_txrx_rx_ops->mgmt_rx_frame_handler =
538 tgt_mgmt_txrx_rx_frame_handler;
539 mgmt_txrx_rx_ops->mgmt_txrx_get_nbuf_from_desc_id =
540 tgt_mgmt_txrx_get_nbuf_from_desc_id;
541 mgmt_txrx_rx_ops->mgmt_txrx_get_peer_from_desc_id =
542 tgt_mgmt_txrx_get_peer_from_desc_id;
543 mgmt_txrx_rx_ops->mgmt_txrx_get_vdev_id_from_desc_id =
544 tgt_mgmt_txrx_get_vdev_id_from_desc_id;
Vivek5747b782018-01-04 17:26:58 +0530545 mgmt_txrx_rx_ops->mgmt_txrx_get_free_desc_pool_count =
546 tgt_mgmt_txrx_get_free_desc_pool_count;
Amar Singhale4079742017-02-10 15:24:40 -0800547
Abhishek Singhf94beaa2017-03-08 11:07:17 +0530548 /* scan rx ops */
549 rx_ops->scan.scan_ev_handler = tgt_scan_event_handler;
Om Prakash Tripathi0078b782017-04-12 12:23:40 +0530550 rx_ops->scan.scan_set_max_active_scans = tgt_scan_set_max_active_scans;
Amar Singhale4079742017-02-10 15:24:40 -0800551
Subrat Mishra81c60e82017-03-02 14:23:37 +0530552 wlan_lmac_if_atf_rx_ops_register(rx_ops);
Abhishek Singhf94beaa2017-03-08 11:07:17 +0530553
Nagaa3d37622018-02-28 20:18:21 +0530554 wlan_lmac_if_cp_stats_rx_ops_register(rx_ops);
555
Venkateswara Swamy Bandaru0b9f5ec2017-05-11 10:45:35 +0530556 wlan_lmac_if_sa_api_rx_ops_register(rx_ops);
557
narayand9e53402019-02-18 11:24:04 +0530558 wlan_lmac_if_cfr_rx_ops_register(rx_ops);
559
Ashok Ponnaiahf8c31452017-03-24 06:22:24 +0530560 wlan_lmac_if_crypto_rx_ops_register(rx_ops);
Naveen Rawat18ceca12017-03-06 16:04:45 -0800561 /* wifi_pos rx ops */
562 wlan_lmac_if_umac_rx_ops_register_wifi_pos(rx_ops);
563
Frank Liu9dd3c3e2017-04-11 22:37:03 +0800564 /* tdls rx ops */
565 wlan_lmac_if_umac_tdls_rx_ops_register(rx_ops);
566
Abhijit Pradhanca7d77b2017-07-12 12:08:42 +0530567 wlan_lmac_if_umac_reg_rx_ops_register(rx_ops);
Kiran Kumar Lokere82c86452017-04-26 19:51:29 -0700568
Wu Gao849fd2c2017-03-23 10:14:39 +0800569 /* p2p rx ops */
570 wlan_lmac_if_umac_rx_ops_register_p2p(rx_ops);
571
Abhijit Pradhan5ae2b3a2017-03-31 08:52:58 +0530572 /* DFS rx_ops */
573 wlan_lmac_if_umac_dfs_rx_ops_register(rx_ops);
574
Soumya Bhat108f0902017-12-28 21:33:17 +0530575 wlan_lmac_if_umac_green_ap_rx_ops_register(rx_ops);
576
akosigifffcebf2017-11-15 18:29:32 +0530577 /* FTM rx_ops */
578 wlan_lmac_if_umac_ftm_rx_ops_register(rx_ops);
579
Subrat Mishrabf125872017-09-27 14:41:20 +0530580 /* FILS Discovery */
581 wlan_lmac_if_fd_rx_ops_register(rx_ops);
582
Nagaba29b562019-01-21 12:10:25 +0530583 /* MLME rx_ops */
584 tgt_vdev_mgr_rx_ops_register(rx_ops);
585
Soumya Bhat604dae02016-12-14 16:31:10 +0530586 return QDF_STATUS_SUCCESS;
587}
588
589/**
Soumya Bhate2e54422017-02-17 10:44:54 +0530590 * wlan_lmac_if_set_umac_txops_registration_cb() - tx registration
591 * callback assignment
Soumya Bhat604dae02016-12-14 16:31:10 +0530592 * @dev_type: Dev type can be either Direct attach or Offload
593 * @handler: handler to be called for LMAC tx ops registration
594 *
595 * API to assign appropriate tx registration callback handler based on the
596 * device type(Offload or Direct attach)
597 *
598 * Return: QDF_STATUS_SUCCESS - in case of success
599 */
Soumya Bhate2e54422017-02-17 10:44:54 +0530600QDF_STATUS wlan_lmac_if_set_umac_txops_registration_cb(QDF_STATUS (*handler)
601 (struct wlan_lmac_if_tx_ops *))
Soumya Bhat604dae02016-12-14 16:31:10 +0530602{
Soumya Bhate2e54422017-02-17 10:44:54 +0530603 wlan_lmac_if_umac_tx_ops_register = handler;
Soumya Bhat604dae02016-12-14 16:31:10 +0530604 return QDF_STATUS_SUCCESS;
605}
Manikandan Mohana2993a52018-03-01 16:21:55 -0800606qdf_export_symbol(wlan_lmac_if_set_umac_txops_registration_cb);
Soumya Bhate2e54422017-02-17 10:44:54 +0530607