xref: /wlan-driver/qcacld-3.0/core/hdd/inc/wlan_hdd_power.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2012, 2014-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name #ifndef __WLAN_HDD_POWER_H
21*5113495bSYour Name #define __WLAN_HDD_POWER_H
22*5113495bSYour Name 
23*5113495bSYour Name /**
24*5113495bSYour Name  * DOC: wlan_hdd_power.h
25*5113495bSYour Name  *
26*5113495bSYour Name  * HDD Power Management API
27*5113495bSYour Name  */
28*5113495bSYour Name 
29*5113495bSYour Name #include "wlan_hdd_main.h"
30*5113495bSYour Name #include <linux/pm_qos.h>
31*5113495bSYour Name #include <linux/pm_runtime.h>
32*5113495bSYour Name 
33*5113495bSYour Name #define HDD_WAKELOCK_TIMEOUT_CONNECT 1000
34*5113495bSYour Name #define HDD_WAKELOCK_TIMEOUT_RESUME 1000
35*5113495bSYour Name #define DISABLE_KRAIT_IDLE_PS_VAL      1
36*5113495bSYour Name 
37*5113495bSYour Name /*
38*5113495bSYour Name  * HDD_WAKELOCK_CONNECT_COMPLETE = CSR_JOIN_FAILURE_TIMEOUT_DEFAULT (3000) +
39*5113495bSYour Name  *                      WNI_CFG_AUTHENTICATE_FAILURE_TIMEOUT_STADEF (1000) +
40*5113495bSYour Name  *                      WNI_CFG_ASSOCIATION_FAILURE_TIMEOUT_STADEF  (2000)
41*5113495bSYour Name  */
42*5113495bSYour Name #define HDD_WAKELOCK_CONNECT_COMPLETE 6000
43*5113495bSYour Name 
44*5113495bSYour Name #ifdef WLAN_FEATURE_PACKET_FILTERING
45*5113495bSYour Name 
46*5113495bSYour Name #define HDD_MAX_CMP_PER_PACKET_FILTER	5
47*5113495bSYour Name 
48*5113495bSYour Name /**
49*5113495bSYour Name  * enum pkt_filter_protocol_layer - packet filter protocol layer
50*5113495bSYour Name  * @HDD_FILTER_PROTO_TYPE_INVALID: Invalid initial value
51*5113495bSYour Name  * @HDD_FILTER_PROTO_TYPE_MAC: MAC protocol
52*5113495bSYour Name  * @HDD_FILTER_PROTO_TYPE_ARP: ARP protocol
53*5113495bSYour Name  * @HDD_FILTER_PROTO_TYPE_IPV4: IP V4 protocol
54*5113495bSYour Name  * @HDD_FILTER_PROTO_TYPE_IPV6: IP V6 protocol
55*5113495bSYour Name  * @HDD_FILTER_PROTO_TYPE_UDP: UDP protocol
56*5113495bSYour Name  * @HDD_FILTER_PROTO_TYPE_MAX: Max place holder value
57*5113495bSYour Name  */
58*5113495bSYour Name enum pkt_filter_protocol_layer {
59*5113495bSYour Name 	HDD_FILTER_PROTO_TYPE_INVALID = 0,
60*5113495bSYour Name 	HDD_FILTER_PROTO_TYPE_MAC = 1,
61*5113495bSYour Name 	HDD_FILTER_PROTO_TYPE_ARP = 2,
62*5113495bSYour Name 	HDD_FILTER_PROTO_TYPE_IPV4 = 3,
63*5113495bSYour Name 	HDD_FILTER_PROTO_TYPE_IPV6 = 4,
64*5113495bSYour Name 	HDD_FILTER_PROTO_TYPE_UDP = 5,
65*5113495bSYour Name 	HDD_FILTER_PROTO_TYPE_MAX
66*5113495bSYour Name };
67*5113495bSYour Name 
68*5113495bSYour Name /**
69*5113495bSYour Name  * enum pkt_filter_action - packet filter action
70*5113495bSYour Name  * @HDD_RCV_FILTER_INVALID: Invalid initial value
71*5113495bSYour Name  * @HDD_RCV_FILTER_SET: Packet filter set
72*5113495bSYour Name  * @HDD_RCV_FILTER_CLEAR: Packet filter clear
73*5113495bSYour Name  * @HDD_RCV_FILTER_MAX: Max place holder value
74*5113495bSYour Name  */
75*5113495bSYour Name enum pkt_filter_action {
76*5113495bSYour Name 	HDD_RCV_FILTER_INVALID = 0,
77*5113495bSYour Name 	HDD_RCV_FILTER_SET = 1,
78*5113495bSYour Name 	HDD_RCV_FILTER_CLEAR = 2,
79*5113495bSYour Name 	HDD_RCV_FILTER_MAX
80*5113495bSYour Name };
81*5113495bSYour Name 
82*5113495bSYour Name /**
83*5113495bSYour Name  * enum pkt_filter_compare_flag - packet filter compare flag
84*5113495bSYour Name  * @HDD_FILTER_CMP_TYPE_INVALID: Invalid initial value
85*5113495bSYour Name  * @HDD_FILTER_CMP_TYPE_EQUAL: Compare if filter is equal
86*5113495bSYour Name  * @HDD_FILTER_CMP_TYPE_MASK_EQUAL: Compare if filter mask is equal
87*5113495bSYour Name  * @HDD_FILTER_CMP_TYPE_NOT_EQUAL: Compare if filter is not equal
88*5113495bSYour Name  * @HDD_FILTER_CMP_TYPE_MASK_NOT_EQUAL: Compare if filter mask is not equal
89*5113495bSYour Name  * @HDD_FILTER_CMP_TYPE_MAX: Max place holder value
90*5113495bSYour Name  */
91*5113495bSYour Name enum pkt_filter_compare_flag {
92*5113495bSYour Name 	HDD_FILTER_CMP_TYPE_INVALID = 0,
93*5113495bSYour Name 	HDD_FILTER_CMP_TYPE_EQUAL = 1,
94*5113495bSYour Name 	HDD_FILTER_CMP_TYPE_MASK_EQUAL = 2,
95*5113495bSYour Name 	HDD_FILTER_CMP_TYPE_NOT_EQUAL = 3,
96*5113495bSYour Name 	HDD_FILTER_CMP_TYPE_MASK_NOT_EQUAL = 4,
97*5113495bSYour Name 	HDD_FILTER_CMP_TYPE_MAX
98*5113495bSYour Name };
99*5113495bSYour Name 
100*5113495bSYour Name /**
101*5113495bSYour Name  * struct pkt_filter_param_cfg - packet filter parameter config
102*5113495bSYour Name  * @protocol_layer: Protocol layer
103*5113495bSYour Name  * @compare_flag: Compare flag
104*5113495bSYour Name  * @data_offset: Data offset
105*5113495bSYour Name  * @data_length: Data length
106*5113495bSYour Name  * @compare_data: Compare data
107*5113495bSYour Name  * @data_mask: Data mask
108*5113495bSYour Name  */
109*5113495bSYour Name struct pkt_filter_param_cfg {
110*5113495bSYour Name 	uint8_t protocol_layer;
111*5113495bSYour Name 	uint8_t compare_flag;
112*5113495bSYour Name 	uint8_t data_offset;
113*5113495bSYour Name 	uint8_t data_length;
114*5113495bSYour Name 	uint8_t compare_data[SIR_MAX_FILTER_TEST_DATA_LEN];
115*5113495bSYour Name 	uint8_t data_mask[SIR_MAX_FILTER_TEST_DATA_LEN];
116*5113495bSYour Name };
117*5113495bSYour Name 
118*5113495bSYour Name /**
119*5113495bSYour Name  * struct pkt_filter_cfg - packet filter config received from user space
120*5113495bSYour Name  * @filter_action: Filter action
121*5113495bSYour Name  * @filter_id: Filter id
122*5113495bSYour Name  * @num_params: Number of parameters
123*5113495bSYour Name  * @params_data: Packet filter parameters detail
124*5113495bSYour Name  */
125*5113495bSYour Name struct pkt_filter_cfg {
126*5113495bSYour Name 	uint8_t filter_action;
127*5113495bSYour Name 	uint8_t filter_id;
128*5113495bSYour Name 	uint8_t num_params;
129*5113495bSYour Name 	struct pkt_filter_param_cfg params_data[HDD_MAX_CMP_PER_PACKET_FILTER];
130*5113495bSYour Name };
131*5113495bSYour Name 
132*5113495bSYour Name #endif
133*5113495bSYour Name 
134*5113495bSYour Name #ifdef FEATURE_ANI_LEVEL_REQUEST
135*5113495bSYour Name /**
136*5113495bSYour Name  * struct ani_priv - structure to store the priv data for get ani request
137*5113495bSYour Name  * @num_freq: number of freq received from the FW
138*5113495bSYour Name  * @ani: data received from the FW
139*5113495bSYour Name  */
140*5113495bSYour Name struct ani_priv {
141*5113495bSYour Name 	uint32_t num_freq;
142*5113495bSYour Name 	struct wmi_host_ani_level_event *ani;
143*5113495bSYour Name };
144*5113495bSYour Name #endif
145*5113495bSYour Name 
146*5113495bSYour Name /**
147*5113495bSYour Name  * enum suspend_resume_state - Suspend resume state
148*5113495bSYour Name  * @HDD_WLAN_EARLY_SUSPEND: Early suspend state.
149*5113495bSYour Name  * @HDD_WLAN_SUSPEND: Suspend state.
150*5113495bSYour Name  * @HDD_WLAN_EARLY_RESUME: Early resume state.
151*5113495bSYour Name  * @HDD_WLAN_RESUME: Resume state.
152*5113495bSYour Name  *
153*5113495bSYour Name  * Suspend state to indicate in diag event of suspend resume.
154*5113495bSYour Name  */
155*5113495bSYour Name enum suspend_resume_state {
156*5113495bSYour Name 	 HDD_WLAN_EARLY_SUSPEND,
157*5113495bSYour Name 	 HDD_WLAN_SUSPEND,
158*5113495bSYour Name 	 HDD_WLAN_EARLY_RESUME,
159*5113495bSYour Name 	 HDD_WLAN_RESUME
160*5113495bSYour Name };
161*5113495bSYour Name 
162*5113495bSYour Name /**
163*5113495bSYour Name  * hdd_svc_fw_shutdown_ind() - API to send FW SHUTDOWN IND to Userspace
164*5113495bSYour Name  * @dev: Device Pointer
165*5113495bSYour Name  *
166*5113495bSYour Name  * Return: None
167*5113495bSYour Name  */
168*5113495bSYour Name void hdd_svc_fw_shutdown_ind(struct device *dev);
169*5113495bSYour Name 
170*5113495bSYour Name /**
171*5113495bSYour Name  * hdd_wlan_shutdown() - HDD SSR shutdown function
172*5113495bSYour Name  *
173*5113495bSYour Name  * This function is called by the HIF to shutdown the driver during SSR.
174*5113495bSYour Name  *
175*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS if the driver was shut down,
176*5113495bSYour Name  *	or an error status otherwise
177*5113495bSYour Name  */
178*5113495bSYour Name QDF_STATUS hdd_wlan_shutdown(void);
179*5113495bSYour Name 
180*5113495bSYour Name /**
181*5113495bSYour Name  * hdd_wlan_re_init() - HDD SSR re-init function
182*5113495bSYour Name  *
183*5113495bSYour Name  * This function is called by the HIF to re-initialize the driver after SSR.
184*5113495bSYour Name  *
185*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS if the driver was re-initialized,
186*5113495bSYour Name  *	or an error status otherwise
187*5113495bSYour Name  */
188*5113495bSYour Name QDF_STATUS hdd_wlan_re_init(void);
189*5113495bSYour Name 
190*5113495bSYour Name /**
191*5113495bSYour Name  * hdd_handle_cached_commands() - Handle north bound commands during SSR
192*5113495bSYour Name  *
193*5113495bSYour Name  * This api will be invoked afte SSR re-initialization to execute the north
194*5113495bSYour Name  * bound commands received during SSR.
195*5113495bSYour Name  *
196*5113495bSYour Name  * Return: None
197*5113495bSYour Name  */
198*5113495bSYour Name void hdd_handle_cached_commands(void);
199*5113495bSYour Name 
200*5113495bSYour Name /**
201*5113495bSYour Name  * hdd_enable_arp_offload() - API to enable ARP offload
202*5113495bSYour Name  * @adapter: Adapter context for which ARP offload is to be configured
203*5113495bSYour Name  * @vdev: VDEV objmgr pointer
204*5113495bSYour Name  * @trigger: trigger reason for request
205*5113495bSYour Name  *
206*5113495bSYour Name  * Return: None
207*5113495bSYour Name  */
208*5113495bSYour Name void hdd_enable_arp_offload(struct hdd_adapter *adapter,
209*5113495bSYour Name 			    struct wlan_objmgr_vdev *vdev,
210*5113495bSYour Name 			    enum pmo_offload_trigger trigger);
211*5113495bSYour Name 
212*5113495bSYour Name /**
213*5113495bSYour Name  * hdd_disable_arp_offload() - API to disable ARP offload
214*5113495bSYour Name  * @adapter: Adapter context for which ARP offload is to be configured
215*5113495bSYour Name  * @vdev: VDEV objmgr pointer
216*5113495bSYour Name  * @trigger: trigger reason for request
217*5113495bSYour Name  *
218*5113495bSYour Name  * Return: None
219*5113495bSYour Name  */
220*5113495bSYour Name void hdd_disable_arp_offload(struct hdd_adapter *adapter,
221*5113495bSYour Name 			     struct wlan_objmgr_vdev *vdev,
222*5113495bSYour Name 			     enum pmo_offload_trigger trigger);
223*5113495bSYour Name 
224*5113495bSYour Name /**
225*5113495bSYour Name  * hdd_enable_host_offloads() - Central API to enable the supported offloads
226*5113495bSYour Name  * @adapter:   pointer to the adapter
227*5113495bSYour Name  * @trigger: trigger reason for request
228*5113495bSYour Name  *
229*5113495bSYour Name  * Central function to enable the supported offloads
230*5113495bSYour Name  *
231*5113495bSYour Name  * Return: nothing
232*5113495bSYour Name  */
233*5113495bSYour Name void hdd_enable_host_offloads(struct hdd_adapter *adapter,
234*5113495bSYour Name 			      enum pmo_offload_trigger trigger);
235*5113495bSYour Name 
236*5113495bSYour Name /**
237*5113495bSYour Name  * hdd_disable_host_offloads() - Central API to disable the supported offloads
238*5113495bSYour Name  * @adapter:   pointer to the adapter
239*5113495bSYour Name  * @trigger: trigger reason for request
240*5113495bSYour Name  *
241*5113495bSYour Name  * Central function to disable the supported offloads
242*5113495bSYour Name  *
243*5113495bSYour Name  * Return: nothing
244*5113495bSYour Name  */
245*5113495bSYour Name void hdd_disable_host_offloads(struct hdd_adapter *adapter,
246*5113495bSYour Name 			       enum pmo_offload_trigger trigger);
247*5113495bSYour Name 
248*5113495bSYour Name /**
249*5113495bSYour Name  * hdd_set_grat_arp_keepalive() - Enable gratuitous ARP keepalive
250*5113495bSYour Name  * @adapter: the HDD adapter to configure
251*5113495bSYour Name  *
252*5113495bSYour Name  * This configures gratuitous ARP keepalive based on the adapter's current
253*5113495bSYour Name  * connection information, specifically IPv4 address and BSSID
254*5113495bSYour Name  *
255*5113495bSYour Name  * return: zero for success, non-zero for failure
256*5113495bSYour Name  */
257*5113495bSYour Name int hdd_set_grat_arp_keepalive(struct hdd_adapter *adapter);
258*5113495bSYour Name 
259*5113495bSYour Name /**
260*5113495bSYour Name  * hdd_enable_mc_addr_filtering() - enable MC address list in FW
261*5113495bSYour Name  * @adapter: adapter whose MC list is being set
262*5113495bSYour Name  * @trigger: trigger reason for request
263*5113495bSYour Name  *
264*5113495bSYour Name  * Return: nothing
265*5113495bSYour Name  */
266*5113495bSYour Name void hdd_enable_mc_addr_filtering(struct hdd_adapter *adapter,
267*5113495bSYour Name 				  enum pmo_offload_trigger trigger);
268*5113495bSYour Name 
269*5113495bSYour Name /**
270*5113495bSYour Name  * hdd_disable_mc_addr_filtering() - disable MC address list in FW
271*5113495bSYour Name  * @adapter: adapter whose MC list is being set
272*5113495bSYour Name  * @trigger: trigger reason for request
273*5113495bSYour Name  *
274*5113495bSYour Name  * Return: nothing
275*5113495bSYour Name  */
276*5113495bSYour Name void hdd_disable_mc_addr_filtering(struct hdd_adapter *adapter,
277*5113495bSYour Name 				   enum pmo_offload_trigger trigger);
278*5113495bSYour Name 
279*5113495bSYour Name /**
280*5113495bSYour Name  * hdd_cache_mc_addr_list() - API to cache MC address list
281*5113495bSYour Name  * @mc_list_config: set of mc address list configurations
282*5113495bSYour Name  *
283*5113495bSYour Name  * Return: 0 on success else error code
284*5113495bSYour Name  */
285*5113495bSYour Name int hdd_cache_mc_addr_list(struct pmo_mc_addr_list_params *mc_list_config);
286*5113495bSYour Name 
287*5113495bSYour Name /**
288*5113495bSYour Name  * hdd_disable_and_flush_mc_addr_list() - API to Disable & Flush cached MC list
289*5113495bSYour Name  * @adapter: adapter whose MC list is being set
290*5113495bSYour Name  * @trigger: trigger reason for request
291*5113495bSYour Name  *
292*5113495bSYour Name  * Return: nothing
293*5113495bSYour Name  */
294*5113495bSYour Name void hdd_disable_and_flush_mc_addr_list(struct hdd_adapter *adapter,
295*5113495bSYour Name 					enum pmo_offload_trigger trigger);
296*5113495bSYour Name 
297*5113495bSYour Name /**
298*5113495bSYour Name  * wlan_hdd_cfg80211_update_replay_counter_cb() - replay counter callback
299*5113495bSYour Name  * @cb_ctx: Callback context as void* as PMO do not about HDD adapter type
300*5113495bSYour Name  * @gtk_rsp_param: Pointer to gtk offload response parameter
301*5113495bSYour Name  *
302*5113495bSYour Name  * Callback routine called upon receiving of gtk offload rsp from fwr
303*5113495bSYour Name  *
304*5113495bSYour Name  * Return: none
305*5113495bSYour Name  */
306*5113495bSYour Name void wlan_hdd_cfg80211_update_replay_counter_cb(
307*5113495bSYour Name 	void *cb_ctx,
308*5113495bSYour Name 	struct pmo_gtk_rsp_params *gtk_rsp_param);
309*5113495bSYour Name 
310*5113495bSYour Name /**
311*5113495bSYour Name  * wlan_hdd_cfg80211_suspend_wlan() - cfg80211 suspend callback
312*5113495bSYour Name  * @wiphy: Pointer to wiphy
313*5113495bSYour Name  * @wow: Pointer to wow
314*5113495bSYour Name  *
315*5113495bSYour Name  * This API is called when cfg80211 driver suspends
316*5113495bSYour Name  *
317*5113495bSYour Name  * Return: integer status
318*5113495bSYour Name  */
319*5113495bSYour Name int wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy,
320*5113495bSYour Name 				   struct cfg80211_wowlan *wow);
321*5113495bSYour Name 
322*5113495bSYour Name /**
323*5113495bSYour Name  * wlan_hdd_cfg80211_resume_wlan() - cfg80211 resume callback
324*5113495bSYour Name  * @wiphy: Pointer to wiphy
325*5113495bSYour Name  *
326*5113495bSYour Name  * This API is called when cfg80211 driver resumes driver updates
327*5113495bSYour Name  * latest sched_scan scan result(if any) to cfg80211 database
328*5113495bSYour Name  *
329*5113495bSYour Name  * Return: integer status
330*5113495bSYour Name  */
331*5113495bSYour Name int wlan_hdd_cfg80211_resume_wlan(struct wiphy *wiphy);
332*5113495bSYour Name 
333*5113495bSYour Name /**
334*5113495bSYour Name  * hdd_ipv4_notifier_work_queue() - IP V4 change notifier work handler
335*5113495bSYour Name  * @work: Pointer to work context
336*5113495bSYour Name  *
337*5113495bSYour Name  * Return: none
338*5113495bSYour Name  */
339*5113495bSYour Name void hdd_ipv4_notifier_work_queue(struct work_struct *work);
340*5113495bSYour Name 
341*5113495bSYour Name #ifdef WLAN_NS_OFFLOAD
342*5113495bSYour Name /**
343*5113495bSYour Name  * hdd_enable_ns_offload() - enable NS offload
344*5113495bSYour Name  * @adapter: pointer to the adapter
345*5113495bSYour Name  * @vdev: VDEV objmgr pointer
346*5113495bSYour Name  * @trigger: trigger reason to enable ns offload
347*5113495bSYour Name  *
348*5113495bSYour Name  * Return: nothing
349*5113495bSYour Name  */
350*5113495bSYour Name void hdd_enable_ns_offload(struct hdd_adapter *adapter,
351*5113495bSYour Name 			   struct wlan_objmgr_vdev *vdev,
352*5113495bSYour Name 			   enum pmo_offload_trigger trigger);
353*5113495bSYour Name 
354*5113495bSYour Name /**
355*5113495bSYour Name  * hdd_disable_ns_offload() - disable NS offload
356*5113495bSYour Name  * @adapter: pointer to the adapter
357*5113495bSYour Name  * @vdev: VDEV objmgr pointer
358*5113495bSYour Name  * @trigger: trigger reason to enable ns offload
359*5113495bSYour Name  *
360*5113495bSYour Name  * Return: nothing
361*5113495bSYour Name  */
362*5113495bSYour Name void hdd_disable_ns_offload(struct hdd_adapter *adapter,
363*5113495bSYour Name 			    struct wlan_objmgr_vdev *vdev,
364*5113495bSYour Name 			    enum pmo_offload_trigger trigger);
365*5113495bSYour Name 
366*5113495bSYour Name /**
367*5113495bSYour Name  * hdd_send_ps_config_to_fw() - Check user pwr save config set/reset PS
368*5113495bSYour Name  * @adapter: pointer to hdd adapter
369*5113495bSYour Name  *
370*5113495bSYour Name  * This function checks the power save configuration saved in MAC context
371*5113495bSYour Name  * and sends power save config to FW.
372*5113495bSYour Name  *
373*5113495bSYour Name  * Return: None
374*5113495bSYour Name  */
375*5113495bSYour Name void hdd_send_ps_config_to_fw(struct hdd_adapter *adapter);
376*5113495bSYour Name #else /* WLAN_NS_OFFLOAD */
377*5113495bSYour Name static inline
hdd_enable_ns_offload(struct hdd_adapter * adapter,struct wlan_objmgr_vdev * vdev,enum pmo_offload_trigger trigger)378*5113495bSYour Name void hdd_enable_ns_offload(struct hdd_adapter *adapter,
379*5113495bSYour Name 			   struct wlan_objmgr_vdev *vdev,
380*5113495bSYour Name 			   enum pmo_offload_trigger trigger)
381*5113495bSYour Name {
382*5113495bSYour Name }
383*5113495bSYour Name 
384*5113495bSYour Name static inline
hdd_disable_ns_offload(struct hdd_adapter * adapter,struct wlan_objmgr_vdev * vdev,enum pmo_offload_trigger trigger)385*5113495bSYour Name void hdd_disable_ns_offload(struct hdd_adapter *adapter,
386*5113495bSYour Name 			    struct wlan_objmgr_vdev *vdev,
387*5113495bSYour Name 			    enum pmo_offload_trigger trigger)
388*5113495bSYour Name {
389*5113495bSYour Name }
390*5113495bSYour Name 
391*5113495bSYour Name static inline
hdd_send_ps_config_to_fw(struct hdd_adapter * adapter)392*5113495bSYour Name void hdd_send_ps_config_to_fw(struct hdd_adapter *adapter)
393*5113495bSYour Name {
394*5113495bSYour Name }
395*5113495bSYour Name #endif /* WLAN_NS_OFFLOAD */
396*5113495bSYour Name 
397*5113495bSYour Name /**
398*5113495bSYour Name  * hdd_ipv6_notifier_work_queue() - IP V6 change notifier work handler
399*5113495bSYour Name  * @work: Pointer to work context
400*5113495bSYour Name  *
401*5113495bSYour Name  * Return: none
402*5113495bSYour Name  */
403*5113495bSYour Name void hdd_ipv6_notifier_work_queue(struct work_struct *work);
404*5113495bSYour Name 
405*5113495bSYour Name /**
406*5113495bSYour Name  * wlan_hdd_cfg80211_get_txpower() - cfg80211 get power handler function
407*5113495bSYour Name  * @wiphy: Pointer to wiphy structure.
408*5113495bSYour Name  * @wdev: Pointer to wireless_dev structure.
409*5113495bSYour Name  * @dbm: dbm
410*5113495bSYour Name  *
411*5113495bSYour Name  * This is the cfg80211 get txpower handler function which invokes
412*5113495bSYour Name  * the internal function @__wlan_hdd_cfg80211_get_txpower with
413*5113495bSYour Name  * SSR protection.
414*5113495bSYour Name  *
415*5113495bSYour Name  * Return: 0 for success, error number on failure.
416*5113495bSYour Name  */
417*5113495bSYour Name int wlan_hdd_cfg80211_get_txpower(struct wiphy *wiphy,
418*5113495bSYour Name 				  struct wireless_dev *wdev,
419*5113495bSYour Name 				  int *dbm);
420*5113495bSYour Name 
421*5113495bSYour Name /**
422*5113495bSYour Name  * wlan_hdd_cfg80211_set_txpower() - set TX power
423*5113495bSYour Name  * @wiphy: Pointer to wiphy
424*5113495bSYour Name  * @wdev: Pointer to network device
425*5113495bSYour Name  * @type: TX power setting type
426*5113495bSYour Name  * @dbm: TX power in dbm
427*5113495bSYour Name  *
428*5113495bSYour Name  * Return: 0 for success, non-zero for failure
429*5113495bSYour Name  */
430*5113495bSYour Name int wlan_hdd_cfg80211_set_txpower(struct wiphy *wiphy,
431*5113495bSYour Name 				  struct wireless_dev *wdev,
432*5113495bSYour Name 				  enum nl80211_tx_power_setting type,
433*5113495bSYour Name 				  int dbm);
434*5113495bSYour Name 
435*5113495bSYour Name /**
436*5113495bSYour Name  * wlan_hdd_cfg80211_set_power_mgmt() - set cfg80211 power management config
437*5113495bSYour Name  * @wiphy: Pointer to wiphy
438*5113495bSYour Name  * @dev: Pointer to network device
439*5113495bSYour Name  * @allow_power_save: is wlan allowed to go into power save mode
440*5113495bSYour Name  * @timeout: Timeout value
441*5113495bSYour Name  *
442*5113495bSYour Name  * Return: 0 for success, non-zero for failure
443*5113495bSYour Name  */
444*5113495bSYour Name int wlan_hdd_cfg80211_set_power_mgmt(struct wiphy *wiphy,
445*5113495bSYour Name 				     struct net_device *dev,
446*5113495bSYour Name 				     bool allow_power_save,
447*5113495bSYour Name 				     int timeout);
448*5113495bSYour Name 
449*5113495bSYour Name /**
450*5113495bSYour Name  * wlan_hdd_ipv4_changed() - IPv4 change notifier callback
451*5113495bSYour Name  * @nb: pointer to notifier block
452*5113495bSYour Name  * @data: data
453*5113495bSYour Name  * @arg: arg
454*5113495bSYour Name  *
455*5113495bSYour Name  * This is the IPv4 notifier callback function gets invoked
456*5113495bSYour Name  * if any change in IP and then invoke the function @__wlan_hdd_ipv4_changed
457*5113495bSYour Name  * to reconfigure the offload parameters.
458*5113495bSYour Name  *
459*5113495bSYour Name  * Return: 0 on success, error number otherwise.
460*5113495bSYour Name  */
461*5113495bSYour Name int wlan_hdd_ipv4_changed(struct notifier_block *nb,
462*5113495bSYour Name 			  unsigned long data, void *arg);
463*5113495bSYour Name 
464*5113495bSYour Name #ifdef FEATURE_RUNTIME_PM
465*5113495bSYour Name /**
466*5113495bSYour Name  * wlan_hdd_pm_qos_notify() - PM QOS notifier call back function
467*5113495bSYour Name  * @nb: Pointer to notifier block kernel structure
468*5113495bSYour Name  * @curr_val: PM QOS current value
469*5113495bSYour Name  * @context: call back context
470*5113495bSYour Name  *
471*5113495bSYour Name  * This callback function for PM QOS change notification is used to setup
472*5113495bSYour Name  * dynamic runtime PM.
473*5113495bSYour Name  *
474*5113495bSYour Name  * Return: NOTIFY_DONE for success
475*5113495bSYour Name  */
476*5113495bSYour Name int wlan_hdd_pm_qos_notify(struct notifier_block *nb, unsigned long curr_val,
477*5113495bSYour Name 			   void *context);
478*5113495bSYour Name 
479*5113495bSYour Name /**
480*5113495bSYour Name  * wlan_hdd_is_cpu_pm_qos_in_progress() - WLAN HDD PM QoS Status Function
481*5113495bSYour Name  *
482*5113495bSYour Name  * This function check for PM QoS global vote.
483*5113495bSYour Name  *
484*5113495bSYour Name  * @hdd_ctx: hdd_context pointer
485*5113495bSYour Name  *
486*5113495bSYour Name  * Return: true if there is PM QoS global vote,
487*5113495bSYour Name  *	   or an false otherwise
488*5113495bSYour Name  */
489*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) && \
490*5113495bSYour Name 	defined(__ANDROID_COMMON_KERNEL__))
491*5113495bSYour Name bool wlan_hdd_is_cpu_pm_qos_in_progress(struct hdd_context *hdd_ctx);
492*5113495bSYour Name #else
493*5113495bSYour Name static inline bool
wlan_hdd_is_cpu_pm_qos_in_progress(struct hdd_context * hdd_ctx)494*5113495bSYour Name wlan_hdd_is_cpu_pm_qos_in_progress(struct hdd_context *hdd_ctx)
495*5113495bSYour Name {
496*5113495bSYour Name 	return false;
497*5113495bSYour Name }
498*5113495bSYour Name #endif
499*5113495bSYour Name #endif
500*5113495bSYour Name /**
501*5113495bSYour Name  * wlan_hdd_ipv6_changed() - IPv6 change notifier callback
502*5113495bSYour Name  * @nb: pointer to notifier block
503*5113495bSYour Name  * @data: data
504*5113495bSYour Name  * @arg: arg
505*5113495bSYour Name  *
506*5113495bSYour Name  * This is the IPv6 notifier callback function gets invoked
507*5113495bSYour Name  * if any change in IP and then invoke the function @__wlan_hdd_ipv6_changed
508*5113495bSYour Name  * to reconfigure the offload parameters.
509*5113495bSYour Name  *
510*5113495bSYour Name  * Return: 0 on success, error number otherwise.
511*5113495bSYour Name  */
512*5113495bSYour Name int wlan_hdd_ipv6_changed(struct notifier_block *nb,
513*5113495bSYour Name 			  unsigned long data, void *arg);
514*5113495bSYour Name 
515*5113495bSYour Name /**
516*5113495bSYour Name  * hdd_set_power_config() - set power config to firmware
517*5113495bSYour Name  * @hddctx: HDD context
518*5113495bSYour Name  * @adapter: HDD adapter
519*5113495bSYour Name  * @opm_mode: pointer to vendor opm_mode
520*5113495bSYour Name  *
521*5113495bSYour Name  * Return: 0 on success; Errno on failure
522*5113495bSYour Name  */
523*5113495bSYour Name int hdd_set_power_config(struct hdd_context *hddctx,
524*5113495bSYour Name 			 struct hdd_adapter *adapter,
525*5113495bSYour Name 			 enum qca_wlan_vendor_opm_mode *opm_mode);
526*5113495bSYour Name 
527*5113495bSYour Name /**
528*5113495bSYour Name  * hdd_set_power_config_params() - set power config parameters
529*5113495bSYour Name  * @hddctx: HDD context
530*5113495bSYour Name  * @adapter: HDD adapter
531*5113495bSYour Name  * @ps_ito: power save inactivitiy duration in ms
532*5113495bSYour Name  * @spec_wake: power save speculative wake duration in ms
533*5113495bSYour Name  *
534*5113495bSYour Name  * Return: 0 on success; Errno on failure
535*5113495bSYour Name  */
536*5113495bSYour Name int hdd_set_power_config_params(struct hdd_context *hddctx,
537*5113495bSYour Name 				struct hdd_adapter *adapter,
538*5113495bSYour Name 				uint16_t ps_ito, uint16_t spec_wake);
539*5113495bSYour Name #ifdef FEATURE_WLAN_DIAG_SUPPORT
540*5113495bSYour Name /**
541*5113495bSYour Name  * hdd_wlan_suspend_resume_event()- send suspend/resume state
542*5113495bSYour Name  * @state: suspend/resume state
543*5113495bSYour Name  *
544*5113495bSYour Name  * This Function sends suspend resume state diag event
545*5113495bSYour Name  *
546*5113495bSYour Name  * Return: void.
547*5113495bSYour Name  */
548*5113495bSYour Name void hdd_wlan_suspend_resume_event(uint8_t state);
549*5113495bSYour Name 
550*5113495bSYour Name #else
551*5113495bSYour Name static inline
hdd_wlan_suspend_resume_event(uint8_t state)552*5113495bSYour Name void hdd_wlan_suspend_resume_event(uint8_t state) {}
553*5113495bSYour Name #endif /* FEATURE_WLAN_DIAG_SUPPORT */
554*5113495bSYour Name 
555*5113495bSYour Name /**
556*5113495bSYour Name  * wlan_hdd_set_powersave() - Set powersave mode
557*5113495bSYour Name  * @link_info: Link inof pointer in HDD adapter
558*5113495bSYour Name  * @allow_power_save: is wlan allowed to go into power save mode
559*5113495bSYour Name  * @timeout: timeout period in ms
560*5113495bSYour Name  *
561*5113495bSYour Name  * Return: 0 on success, non-zero on any error
562*5113495bSYour Name  */
563*5113495bSYour Name int wlan_hdd_set_powersave(struct wlan_hdd_link_info *link_info,
564*5113495bSYour Name 			   bool allow_power_save, uint32_t timeout);
565*5113495bSYour Name 
566*5113495bSYour Name /**
567*5113495bSYour Name  * wlan_hdd_inc_suspend_stats() - Prints, then increments, then prints suspend
568*5113495bSYour Name  *	failed statistics.
569*5113495bSYour Name  * @hdd_ctx:	The HDD context to operate on
570*5113495bSYour Name  * @reason:	The suspend failed reason to increment
571*5113495bSYour Name  *
572*5113495bSYour Name  * This function prints all of the suspend failed statistics, increments the
573*5113495bSYour Name  * specified suspend fail reason statistic, and prints the them all again. This
574*5113495bSYour Name  * is for easily keeping track of the most common reasons suspend fails.
575*5113495bSYour Name  *
576*5113495bSYour Name  * Return: none
577*5113495bSYour Name  */
578*5113495bSYour Name void wlan_hdd_inc_suspend_stats(struct hdd_context *hdd_ctx,
579*5113495bSYour Name 				enum suspend_fail_reason reason);
580*5113495bSYour Name 
581*5113495bSYour Name /*
582*5113495bSYour Name  * Unit-test suspend/resume is a testing feature that allows putting firmware
583*5113495bSYour Name  * into WoW suspend irrespective of Apps suspend status. It emulates the chain
584*5113495bSYour Name  * of events that occur during normal system-level suspend/resume, such as
585*5113495bSYour Name  * initiating all of the suspend/resume stages in the correct order, and
586*5113495bSYour Name  * enabling/disabling appropriate copy engine irqs.
587*5113495bSYour Name  */
588*5113495bSYour Name #ifdef WLAN_SUSPEND_RESUME_TEST
589*5113495bSYour Name /**
590*5113495bSYour Name  * wlan_hdd_unit_test_bus_suspend() - suspend the wlan bus
591*5113495bSYour Name  * @wow_params: collection of wow enable override parameters
592*5113495bSYour Name  *
593*5113495bSYour Name  * This function does the same as wlan_hdd_bus_suspend, but additionally passes
594*5113495bSYour Name  * the appropriate flags to FW, indicating this is a unit-test suspend and it
595*5113495bSYour Name  * should use an HTC wakeup method to resume.
596*5113495bSYour Name  *
597*5113495bSYour Name  * Return: 0 for success or error code
598*5113495bSYour Name  */
599*5113495bSYour Name int wlan_hdd_unit_test_bus_suspend(struct wow_enable_params wow_params);
600*5113495bSYour Name 
601*5113495bSYour Name /**
602*5113495bSYour Name  * hdd_wlan_fake_apps_resume() - Resume from unit-test triggered suspend
603*5113495bSYour Name  * @wiphy: the kernel wiphy struct for the device being resumed
604*5113495bSYour Name  * @dev: the kernel net_device struct for the device being resumed
605*5113495bSYour Name  *
606*5113495bSYour Name  * Return: Zero on success, calls QDF_BUG() on failure
607*5113495bSYour Name  */
608*5113495bSYour Name int hdd_wlan_fake_apps_resume(struct wiphy *wiphy, struct net_device *dev);
609*5113495bSYour Name 
610*5113495bSYour Name /**
611*5113495bSYour Name  * hdd_wlan_fake_apps_suspend() - Initiate a unit-test triggered suspend
612*5113495bSYour Name  * @wiphy: the kernel wiphy struct for the device being suspended
613*5113495bSYour Name  * @dev: the kernel net_device struct for the device being suspended
614*5113495bSYour Name  * @pause_setting: interface pause override setting
615*5113495bSYour Name  * @resume_setting: resume trigger override setting
616*5113495bSYour Name  *
617*5113495bSYour Name  * Return: Zero on success, suspend related non-zero error code on failure
618*5113495bSYour Name  */
619*5113495bSYour Name int hdd_wlan_fake_apps_suspend(struct wiphy *wiphy, struct net_device *dev,
620*5113495bSYour Name 			       enum wow_interface_pause pause_setting,
621*5113495bSYour Name 			       enum wow_resume_trigger resume_setting);
622*5113495bSYour Name #else
623*5113495bSYour Name static inline int
hdd_wlan_fake_apps_resume(struct wiphy * wiphy,struct net_device * dev)624*5113495bSYour Name hdd_wlan_fake_apps_resume(struct wiphy *wiphy, struct net_device *dev)
625*5113495bSYour Name {
626*5113495bSYour Name 	return 0;
627*5113495bSYour Name }
628*5113495bSYour Name 
629*5113495bSYour Name static inline int
hdd_wlan_fake_apps_suspend(struct wiphy * wiphy,struct net_device * dev,enum wow_interface_pause pause_setting,enum wow_resume_trigger resume_setting)630*5113495bSYour Name hdd_wlan_fake_apps_suspend(struct wiphy *wiphy, struct net_device *dev,
631*5113495bSYour Name 			   enum wow_interface_pause pause_setting,
632*5113495bSYour Name 			   enum wow_resume_trigger resume_setting)
633*5113495bSYour Name {
634*5113495bSYour Name 	return 0;
635*5113495bSYour Name }
636*5113495bSYour Name #endif /* WLAN_SUSPEND_RESUME_TEST */
637*5113495bSYour Name 
638*5113495bSYour Name #ifdef WLAN_DP_LEGACY_OL_RX_THREAD
639*5113495bSYour Name /**
640*5113495bSYour Name  * wlan_hdd_rx_thread_resume() - Resume RX thread
641*5113495bSYour Name  * @hdd_ctx: HDD context
642*5113495bSYour Name  *
643*5113495bSYour Name  * Check if RX thread suspended, and resume if yes.
644*5113495bSYour Name  *
645*5113495bSYour Name  * Return: None
646*5113495bSYour Name  */
647*5113495bSYour Name void wlan_hdd_rx_thread_resume(struct hdd_context *hdd_ctx);
648*5113495bSYour Name 
649*5113495bSYour Name /**
650*5113495bSYour Name  * wlan_hdd_rx_thread_suspend() - Suspend RX thread
651*5113495bSYour Name  * @hdd_ctx: HDD context
652*5113495bSYour Name  *
653*5113495bSYour Name  * To suspend RX thread
654*5113495bSYour Name  *
655*5113495bSYour Name  * Return: 0 for success
656*5113495bSYour Name  */
657*5113495bSYour Name int wlan_hdd_rx_thread_suspend(struct hdd_context *hdd_ctx);
658*5113495bSYour Name 
659*5113495bSYour Name #else
wlan_hdd_rx_thread_resume(struct hdd_context * hdd_ctx)660*5113495bSYour Name static inline void wlan_hdd_rx_thread_resume(struct hdd_context *hdd_ctx) {}
wlan_hdd_rx_thread_suspend(struct hdd_context * hdd_ctx)661*5113495bSYour Name static inline int wlan_hdd_rx_thread_suspend(struct hdd_context *hdd_ctx)
662*5113495bSYour Name {
663*5113495bSYour Name 	return 0;
664*5113495bSYour Name }
665*5113495bSYour Name #endif
666*5113495bSYour Name 
667*5113495bSYour Name #ifdef FEATURE_ANI_LEVEL_REQUEST
668*5113495bSYour Name /**
669*5113495bSYour Name  * wlan_hdd_get_ani_level() - Wrapper to call API to fetch ani level
670*5113495bSYour Name  * @adapter: pointer to HDD adapter
671*5113495bSYour Name  * @ani: pointer to structure storing ani level for channels
672*5113495bSYour Name  * @parsed_freqs: parsed freqs from the get ani command
673*5113495bSYour Name  * @num_freqs: number of parsed channels
674*5113495bSYour Name  *
675*5113495bSYour Name  * Return: QDF_STATUS
676*5113495bSYour Name  */
677*5113495bSYour Name QDF_STATUS wlan_hdd_get_ani_level(struct hdd_adapter *adapter,
678*5113495bSYour Name 				  struct wmi_host_ani_level_event *ani,
679*5113495bSYour Name 				  uint32_t *parsed_freqs,
680*5113495bSYour Name 				  uint8_t num_freqs);
681*5113495bSYour Name #endif /* FEATURE_ANI_LEVEL_REQUEST */
682*5113495bSYour Name 
683*5113495bSYour Name #ifdef WLAN_FEATURE_ICMP_OFFLOAD
684*5113495bSYour Name /**
685*5113495bSYour Name  * hdd_enable_icmp_offload() - API to enable ICMP offload
686*5113495bSYour Name  * @adapter: Adapter context for which ICMP offload is to be configured
687*5113495bSYour Name  * @vdev: VDEV ojgmgr pointer
688*5113495bSYour Name  * @trigger: trigger reason for request
689*5113495bSYour Name  *
690*5113495bSYour Name  * Return: None
691*5113495bSYour Name  */
692*5113495bSYour Name void hdd_enable_icmp_offload(struct hdd_adapter *adapter,
693*5113495bSYour Name 			     struct wlan_objmgr_vdev *vdev,
694*5113495bSYour Name 			     enum pmo_offload_trigger trigger);
695*5113495bSYour Name #else
696*5113495bSYour Name static inline
hdd_enable_icmp_offload(struct hdd_adapter * adapter,struct wlan_objmgr_vdev * vdev,enum pmo_offload_trigger trigger)697*5113495bSYour Name void hdd_enable_icmp_offload(struct hdd_adapter *adapter,
698*5113495bSYour Name 			     struct wlan_objmgr_vdev *vdev,
699*5113495bSYour Name 			     enum pmo_offload_trigger trigger)
700*5113495bSYour Name {}
701*5113495bSYour Name #endif /* FEATURE_ICMP_OFFLOAD */
702*5113495bSYour Name 
703*5113495bSYour Name #if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC)
704*5113495bSYour Name int wlan_hdd_set_mlo_ps(struct hdd_adapter *adapter,
705*5113495bSYour Name 			bool allow_power_save, int timeout,
706*5113495bSYour Name 			int link_id);
707*5113495bSYour Name #else
708*5113495bSYour Name static inline
wlan_hdd_set_mlo_ps(struct hdd_adapter * adapter,bool allow_power_save,int timeout,int link_id)709*5113495bSYour Name int wlan_hdd_set_mlo_ps(struct hdd_adapter *adapter,
710*5113495bSYour Name 			bool allow_power_save, int timeout,
711*5113495bSYour Name 			int link_id)
712*5113495bSYour Name {
713*5113495bSYour Name         return 0;
714*5113495bSYour Name }
715*5113495bSYour Name #endif
716*5113495bSYour Name #endif /* __WLAN_HDD_POWER_H */
717