1 /*
2  * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
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  * DOC: Declare public API for pmo to interact with target/WMI
21  */
22 
23 #ifndef _WLAN_PMO_TGT_API_H_
24 #define _WLAN_PMO_TGT_API_H_
25 
26 #include "wlan_pmo_common_public_struct.h"
27 #include "wlan_pmo_arp_public_struct.h"
28 #include "wlan_pmo_ns_public_struct.h"
29 #include "wlan_pmo_gtk_public_struct.h"
30 #include "wlan_pmo_wow_public_struct.h"
31 #include "wlan_pmo_mc_addr_filtering_public_struct.h"
32 #include "wlan_pmo_hw_filter_public_struct.h"
33 #include "wlan_pmo_pkt_filter_public_struct.h"
34 
35 #define GET_PMO_TX_OPS_FROM_PSOC(psoc) \
36 	(pmo_psoc_get_priv(psoc)->pmo_tx_ops)
37 
38 /**
39  * pmo_tgt_conf_hw_filter() - configure hardware filter mode in firmware
40  * @psoc: the psoc to use to communicate with firmware
41  * @req: the configuration request
42  *
43  * Return: QDF_STATUS
44  */
45 QDF_STATUS pmo_tgt_conf_hw_filter(struct wlan_objmgr_psoc *psoc,
46 				  struct pmo_hw_filter_params *req);
47 
48 /**
49  * pmo_tgt_set_pkt_filter() - Set packet filter
50  * @vdev: objmgr vdev
51  * @pmo_set_pkt_fltr_req:
52  * @vdev_id: vdev id
53  *
54  * API to set packet filter
55  *
56  * Return: QDF_STATUS_SUCCESS in case of success else return error
57  */
58 QDF_STATUS pmo_tgt_set_pkt_filter(struct wlan_objmgr_vdev *vdev,
59 		struct pmo_rcv_pkt_fltr_cfg *pmo_set_pkt_fltr_req,
60 		uint8_t vdev_id);
61 
62 /**
63  * pmo_tgt_clear_pkt_filter() - Clear packet filter
64  * @vdev: objmgr vdev
65  * @pmo_clr_pkt_fltr_param:
66  * @vdev_id: vdev id
67  *
68  * API to clear packet filter
69  *
70  * Return: QDF_STATUS_SUCCESS in case of success else return error
71  */
72 QDF_STATUS pmo_tgt_clear_pkt_filter(struct wlan_objmgr_vdev *vdev,
73 		struct pmo_rcv_pkt_fltr_clear_param *pmo_clr_pkt_fltr_param,
74 		uint8_t vdev_id);
75 
76 /**
77  * pmo_tgt_enable_arp_offload_req() - Enable arp offload req to target
78  * @vdev: objmgr vdev
79  * @vdev_id: vdev id
80  *
81  * Return: QDF status
82  */
83 QDF_STATUS pmo_tgt_enable_arp_offload_req(struct wlan_objmgr_vdev *vdev,
84 		uint8_t vdev_id);
85 
86 /**
87  * pmo_tgt_disable_arp_offload_req() - Disable arp offload req to target
88  * @vdev: objmgr vdev
89  * @vdev_id: vdev id
90  *
91  * Return: QDF status
92  */
93 QDF_STATUS pmo_tgt_disable_arp_offload_req(struct wlan_objmgr_vdev *vdev,
94 		uint8_t vdev_id);
95 
96 #ifdef WLAN_NS_OFFLOAD
97 /**
98  * pmo_tgt_enable_ns_offload_req() -  Send ns offload req to targe
99  * @vdev: objmgr vdev
100  * @vdev_id: vdev id
101  *
102  * Return: QDF status
103  */
104 QDF_STATUS pmo_tgt_enable_ns_offload_req(struct wlan_objmgr_vdev *vdev,
105 		uint8_t vdev_id);
106 
107 /**
108  * pmo_tgt_disable_ns_offload_req() - Disable arp offload req to target
109  * @vdev: objmgr vdev
110  * @vdev_id: vdev id
111  *
112  * Return: QDF status
113  */
114 QDF_STATUS pmo_tgt_disable_ns_offload_req(struct wlan_objmgr_vdev *vdev,
115 		uint8_t vdev_id);
116 #endif /* WLAN_NS_OFFLOAD */
117 
118 /**
119  * pmo_tgt_enable_wow_wakeup_event() - Send Enable wow wakeup events req to fwr
120  * @vdev: objmgr vdev handle
121  * @bitmap: Event bitmap
122  *
123  * Return: QDF status
124  */
125 QDF_STATUS pmo_tgt_enable_wow_wakeup_event(struct wlan_objmgr_vdev *vdev,
126 		uint32_t *bitmap);
127 
128 /**
129  * pmo_tgt_disable_wow_wakeup_event() - Send Disable wow wakeup events to fwr
130  * @vdev: objmgr vdev handle
131  * @bitmap: Event bitmap
132  *
133  * Return: QDF status
134  */
135 QDF_STATUS pmo_tgt_disable_wow_wakeup_event(struct wlan_objmgr_vdev *vdev,
136 		uint32_t *bitmap);
137 
138 /**
139  * pmo_tgt_send_wow_patterns_to_fw() - Sends WOW patterns to FW.
140  * @vdev: objmgr vdev
141  * @ptrn_id: pattern id
142  * @ptrn: pattern
143  * @ptrn_len: pattern length
144  * @ptrn_offset: pattern offset
145  * @mask: mask
146  * @mask_len: mask length
147  * @user: true for user configured pattern and false for default pattern
148  *
149  * Return: QDF status
150  */
151 QDF_STATUS pmo_tgt_send_wow_patterns_to_fw(struct wlan_objmgr_vdev *vdev,
152 		uint8_t ptrn_id, const uint8_t *ptrn, uint8_t ptrn_len,
153 		uint8_t ptrn_offset, const uint8_t *mask,
154 		uint8_t mask_len, bool user);
155 
156 QDF_STATUS pmo_tgt_del_wow_pattern(
157 		struct wlan_objmgr_vdev *vdev, uint8_t ptrn_id,
158 		bool user);
159 
160 /**
161  * pmo_tgt_set_mc_filter_req() - Set mcast filter command to fw
162  * @vdev: objmgr vdev
163  * @multicast_addr: mcast address
164  *
165  * Return: QDF_STATUS_SUCCESS for success or error code
166  */
167 QDF_STATUS pmo_tgt_set_mc_filter_req(struct wlan_objmgr_vdev *vdev,
168 		struct qdf_mac_addr multicast_addr);
169 
170 /**
171  * pmo_tgt_clear_mc_filter_req() - Clear mcast filter command to fw
172  * @vdev: objmgr vdev
173  * @multicast_addr: mcast address
174  *
175  * Return: QDF_STATUS_SUCCESS for success or error code
176  */
177 QDF_STATUS pmo_tgt_clear_mc_filter_req(struct wlan_objmgr_vdev *vdev,
178 		struct qdf_mac_addr multicast_addr);
179 
180 /**
181  * pmo_tgt_get_multiple_mc_filter_support() - get multiple mcast filter support
182  * @vdev: objmgr vdev
183  *
184  * Return: true if FW supports else false
185  */
186 bool pmo_tgt_get_multiple_mc_filter_support(struct wlan_objmgr_vdev *vdev);
187 
188 /**
189  * pmo_tgt_set_multiple_mc_filter_req() - Set multiple mcast filter cmd to fw
190  * @vdev: objmgr vdev
191  * @mc_list: mcast address list
192  *
193  * Return: QDF_STATUS_SUCCESS for success or error code
194  */
195 QDF_STATUS pmo_tgt_set_multiple_mc_filter_req(struct wlan_objmgr_vdev *vdev,
196 		struct pmo_mc_addr_list *mc_list);
197 
198 /**
199  * pmo_tgt_clear_multiple_mc_filter_req() - clear multiple mcast filter
200  *					    to fw
201  * @vdev: objmgr vdev
202  * @mc_list: mcast address list
203  *
204  * Return: QDF_STATUS_SUCCESS for success or error code
205  */
206 QDF_STATUS pmo_tgt_clear_multiple_mc_filter_req(struct wlan_objmgr_vdev *vdev,
207 		struct pmo_mc_addr_list *mc_list);
208 
209 /**
210  * pmo_tgt_send_enhance_multicast_offload_req() - send enhance mc offload req
211  * @vdev: the vdev to configure
212  * @action: enable or disable enhance multicast offload
213  *
214  * Return: QDF_STATUS_SUCCESS on success else error code
215  */
216 QDF_STATUS pmo_tgt_send_enhance_multicast_offload_req(
217 		struct wlan_objmgr_vdev *vdev,
218 		uint8_t action);
219 
220 /**
221  * pmo_tgt_send_ra_filter_req() - send ra filter request to target
222  * @vdev: objmgr vdev handle
223  *
224  * Return: QDF_STATUS_SUCCESS on success else error code
225  */
226 QDF_STATUS pmo_tgt_send_ra_filter_req(struct wlan_objmgr_vdev *vdev);
227 
228 /**
229  * pmo_tgt_send_action_frame_pattern_req - send wow action frame patterns req
230  * @vdev: objmgr vdev handle
231  * @cmd: action frame pattern cmd
232  *
233  * Return: QDF_STATUS_SUCCESS on success else error code
234  */
235 QDF_STATUS pmo_tgt_send_action_frame_pattern_req(
236 		struct wlan_objmgr_vdev *vdev,
237 		struct pmo_action_wakeup_set_params *cmd);
238 
239 /**
240  * pmo_tgt_send_gtk_offload_req() - send GTK offload command to fw
241  * @vdev: objmgr vdev
242  * @gtk_req: pmo gtk req
243  *
244  * Return: QDF status
245  */
246 QDF_STATUS pmo_tgt_send_gtk_offload_req(struct wlan_objmgr_vdev *vdev,
247 		struct pmo_gtk_req *gtk_req);
248 
249 /**
250  * pmo_tgt_get_gtk_rsp() - send get gtk rsp command to fw
251  * @vdev: objmgr vdev
252  *
253  * Return: QDF status
254  */
255 QDF_STATUS pmo_tgt_get_gtk_rsp(struct wlan_objmgr_vdev *vdev);
256 
257 /**
258  * pmo_tgt_gtk_rsp_evt() - receive gtk rsp event from fwr
259  * @psoc: objmgr psoc
260  * @rsp_param: gtk response parameters
261  *
262  * Return: QDF status
263  */
264 QDF_STATUS pmo_tgt_gtk_rsp_evt(struct wlan_objmgr_psoc *psoc,
265 		struct pmo_gtk_rsp_params *rsp_param);
266 
267 /**
268  * pmo_tgt_send_lphb_enable() - enable command of LPHB configuration requests
269  * @psoc: objmgr psoc handle
270  * @ts_lphb_enable: lphb enable request which needs to configure in fwr
271  *
272  * Return: QDF status
273  */
274 QDF_STATUS pmo_tgt_send_lphb_enable(struct wlan_objmgr_psoc *psoc,
275 			struct pmo_lphb_enable_req *ts_lphb_enable);
276 
277 /**
278  * pmo_tgt_send_lphb_tcp_params() - set tcp params of LPHB configuration req
279  * @psoc: objmgr psoc handle
280  * @ts_lphb_tcp_param: lphb tcp params which needs to configure in fwr
281  *
282  * Return: QDF status
283  */
284 QDF_STATUS pmo_tgt_send_lphb_tcp_params(struct wlan_objmgr_psoc *psoc,
285 			struct pmo_lphb_tcp_params *ts_lphb_tcp_param);
286 
287 /**
288  * pmo_tgt_send_lphb_tcp_pkt_filter() - send tcp packet filter command of LPHB
289  * @psoc: objmgr psoc handle
290  * @ts_lphb_tcp_filter: lphb tcp filter request which needs to configure in fwr
291  *
292  * Return: QDF status
293  */
294 QDF_STATUS pmo_tgt_send_lphb_tcp_pkt_filter(struct wlan_objmgr_psoc *psoc,
295 			struct pmo_lphb_tcp_filter_req *ts_lphb_tcp_filter);
296 
297 /**
298  * pmo_tgt_send_lphb_udp_params() - Send udp param command of LPHB
299  * @psoc: objmgr psoc handle
300  * @ts_lphb_udp_param: lphb udp params which needs to configure in fwr
301  *
302  * Return: QDF status
303  */
304 QDF_STATUS pmo_tgt_send_lphb_udp_params(struct wlan_objmgr_psoc *psoc,
305 			struct pmo_lphb_udp_params *ts_lphb_udp_param);
306 
307 /**
308  * pmo_tgt_send_lphb_udp_pkt_filter() - Send udp pkt filter command of LPHB
309  * @psoc: objmgr psoc handle
310  * @ts_lphb_udp_filter: lphb udp filter request which needs to configure in fwr
311  *
312  * Return: QDF status
313  */
314 QDF_STATUS pmo_tgt_send_lphb_udp_pkt_filter(struct wlan_objmgr_psoc *psoc,
315 			struct pmo_lphb_udp_filter_req *ts_lphb_udp_filter);
316 
317 
318 /**
319  * pmo_tgt_lphb_rsp_evt() - receive lphb rsp event from fwr
320  * @psoc: objmgr psoc
321  * @rsp_param: lphb response parameters
322  *
323  * Return: QDF_STATUS
324  */
325 QDF_STATUS pmo_tgt_lphb_rsp_evt(struct wlan_objmgr_psoc *psoc,
326 			struct pmo_lphb_rsp *rsp_param);
327 
328 /**
329  * pmo_tgt_vdev_update_param_req() - Update vdev param value to fwr
330  * @vdev: objmgr vdev
331  * @param_id: tell vdev param id which needs to be updated in fwr
332  * @param_value: vdev parameter value
333  *
334  * Return: QDF status
335  */
336 QDF_STATUS pmo_tgt_vdev_update_param_req(struct wlan_objmgr_vdev *vdev,
337 		enum pmo_vdev_param_id param_id, uint32_t param_value);
338 
339 /**
340  * pmo_tgt_send_vdev_sta_ps_param() - Send vdev sta power save param to fwr
341  * @vdev: objmgr vdev
342  * @ps_param: sta mode ps power save params type
343  * @param_value: power save parameter value
344  *
345  * Return: QDF status
346  */
347 QDF_STATUS pmo_tgt_send_vdev_sta_ps_param(struct wlan_objmgr_vdev *vdev,
348 		enum pmo_sta_powersave_param ps_param, uint32_t param_value);
349 
350 #ifdef WLAN_FEATURE_IGMP_OFFLOAD
351 /**
352  * pmo_tgt_send_igmp_offload_req() - Send igmp offload request to fw
353  * @vdev: objmgr vdev
354  * @pmo_igmp_req: igmp offload params
355  *
356  * Return: QDF status
357  */
358 QDF_STATUS
359 pmo_tgt_send_igmp_offload_req(struct wlan_objmgr_vdev *vdev,
360 			      struct pmo_igmp_offload_req *pmo_igmp_req);
361 #else
362 static inline QDF_STATUS
pmo_tgt_send_igmp_offload_req(struct wlan_objmgr_vdev * vdev,struct pmo_igmp_offload_req * pmo_igmp_req)363 pmo_tgt_send_igmp_offload_req(struct wlan_objmgr_vdev *vdev,
364 			      struct pmo_igmp_offload_req *pmo_igmp_req)
365 {
366 	return QDF_STATUS_SUCCESS;
367 }
368 #endif
369 
370 /**
371  * pmo_tgt_psoc_update_wow_bus_suspend_state() - update wow bus suspend state
372  *                                               flag
373  * @psoc: objmgr psoc
374  * @val: true for setting wow suspend flag to set else false
375  *
376  * Return: None
377  */
378 void pmo_tgt_psoc_update_wow_bus_suspend_state(struct wlan_objmgr_psoc *psoc,
379 		uint8_t val);
380 
381 /**
382  * pmo_tgt_psoc_get_host_credits() - Get host credits
383  * @psoc: objmgr psoc
384  *
385  * Return: Pending WMI commands on success else EAGAIN on error
386  */
387 int pmo_tgt_psoc_get_host_credits(struct wlan_objmgr_psoc *psoc);
388 
389 /**
390  * pmo_tgt_psoc_get_pending_cmnds() - Get pending commands
391  * @psoc: objmgr psoc
392  *
393  * Return: Pending WMI commands on success else EAGAIN on error
394  */
395 int pmo_tgt_psoc_get_pending_cmnds(struct wlan_objmgr_psoc *psoc);
396 
397 /**
398  * pmo_tgt_update_target_suspend_flag() - Set WMI target Suspend flag
399  * @psoc: objmgr psoc
400  * @val: true on suspend false for resume
401  *
402  * Return: None
403  */
404 void pmo_tgt_update_target_suspend_flag(struct wlan_objmgr_psoc *psoc,
405 					uint8_t val);
406 
407 /**
408  * pmo_tgt_update_target_suspend_acked_flag() - Set WMI target Suspend acked
409  *                                              flag
410  * @psoc: objmgr psoc
411  * @val: true on suspend false for resume
412  *
413  * Return: None
414  */
415 void pmo_tgt_update_target_suspend_acked_flag(struct wlan_objmgr_psoc *psoc,
416 					      uint8_t val);
417 
418 /**
419  * pmo_tgt_is_target_suspended() - Get WMI target Suspend flag
420  * @psoc: objmgr psoc
421  *
422  * Return: true if target suspended, false otherwise.
423  */
424 bool pmo_tgt_is_target_suspended(struct wlan_objmgr_psoc *psoc);
425 
426 /**
427  * pmo_tgt_psoc_send_wow_enable_req() -Send wow enable request
428  * @psoc: objmgr psoc
429  * @param: WOW enable request buffer
430  *
431  * Return: QDF_STATUS_SUCCESS on success else error code
432  */
433 QDF_STATUS pmo_tgt_psoc_send_wow_enable_req(struct wlan_objmgr_psoc *psoc,
434 	struct pmo_wow_cmd_params *param);
435 
436 /**
437  * pmo_tgt_psoc_send_supend_req() -Send target suspend request to fwr
438  * @psoc: objmgr psoc
439  * @param: suspend request buffer
440  *
441  * Return: QDF_STATUS_SUCCESS on success else error code
442  */
443 QDF_STATUS pmo_tgt_psoc_send_supend_req(struct wlan_objmgr_psoc *psoc,
444 		struct pmo_suspend_params *param);
445 
446 /**
447  * pmo_tgt_psoc_set_runtime_pm_inprogress() -set runtime status
448  * @psoc: objmgr psoc
449  * @value: set runtime pm in progress true or false
450  *
451  * Return: none
452  */
453 QDF_STATUS pmo_tgt_psoc_set_runtime_pm_inprogress(struct wlan_objmgr_psoc *psoc,
454 						  bool value);
455 
456 /**
457  * pmo_tgt_psoc_get_runtime_pm_in_progress() -get runtime status
458  * @psoc: objmgr psoc
459  *
460  * Return: true if runtime pm is in progress else false
461  */
462 bool pmo_tgt_psoc_get_runtime_pm_in_progress(struct wlan_objmgr_psoc *psoc);
463 
464 /**
465  * pmo_tgt_psoc_send_host_wakeup_ind() -Send host wake up indication to fwr
466  * @psoc: objmgr psoc
467  *
468  * Return: QDF_STATUS_SUCCESS on success else error code
469  */
470 QDF_STATUS pmo_tgt_psoc_send_host_wakeup_ind(struct wlan_objmgr_psoc *psoc);
471 
472 /**
473  * pmo_tgt_psoc_send_target_resume_req() -Send target resume request
474  * @psoc: objmgr psoc
475  *
476  * Return: QDF_STATUS_SUCCESS on success else error code
477  */
478 QDF_STATUS pmo_tgt_psoc_send_target_resume_req(struct wlan_objmgr_psoc *psoc);
479 
480 /**
481  * pmo_tgt_psoc_send_idle_roam_monitor() - Send idle roam set suspend mode
482  * command to firmware
483  * @psoc: objmgr psoc
484  * @val: Set suspend mode value
485  *
486  * Return: QDF_STATUS_SUCCESS on success else error code
487  */
488 QDF_STATUS pmo_tgt_psoc_send_idle_roam_monitor(struct wlan_objmgr_psoc *psoc,
489 					       uint8_t val);
490 
491 #ifdef WLAN_FEATURE_ICMP_OFFLOAD
492 /**
493  * pmo_tgt_config_icmp_offload_req() - Configure icmp offload req to target
494  * @psoc: objmgr psoc
495  * @pmo_icmp_req: ICMP offload parameters
496  *
497  * Return: QDF status
498  */
499 QDF_STATUS
500 pmo_tgt_config_icmp_offload_req(struct wlan_objmgr_psoc *psoc,
501 				struct pmo_icmp_offload *pmo_icmp_req);
502 #endif
503 
504 /**
505  * pmo_tgt_psoc_set_wow_enable_ack_failed() -set wow enable ack failure status
506  * @psoc: objmgr psoc
507  *
508  * Return: none
509  */
510 QDF_STATUS
511 pmo_tgt_psoc_set_wow_enable_ack_failed(struct wlan_objmgr_psoc *psoc);
512 
513 #endif /* end  of _WLAN_PMO_TGT_API_H_ */
514