xref: /wlan-driver/qcacld-3.0/core/hdd/inc/wlan_hdd_twt.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2022-2023 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 /**
21*5113495bSYour Name  * DOC: wlan_hdd_twt.h
22*5113495bSYour Name  *
23*5113495bSYour Name  * WLAN Host Device Driver file for TWT (Target Wake Time) support.
24*5113495bSYour Name  *
25*5113495bSYour Name  */
26*5113495bSYour Name 
27*5113495bSYour Name #if !defined(WLAN_HDD_TWT_H)
28*5113495bSYour Name #define WLAN_HDD_TWT_H
29*5113495bSYour Name 
30*5113495bSYour Name #include "qdf_types.h"
31*5113495bSYour Name #include "qdf_status.h"
32*5113495bSYour Name #include "qca_vendor.h"
33*5113495bSYour Name #include <net/cfg80211.h>
34*5113495bSYour Name 
35*5113495bSYour Name struct hdd_context;
36*5113495bSYour Name struct hdd_adapter;
37*5113495bSYour Name struct wlan_hdd_link_info;
38*5113495bSYour Name struct wma_tgt_cfg;
39*5113495bSYour Name struct wmi_twt_add_dialog_param;
40*5113495bSYour Name struct wmi_twt_del_dialog_param;
41*5113495bSYour Name struct wmi_twt_pause_dialog_cmd_param;
42*5113495bSYour Name struct wmi_twt_resume_dialog_cmd_param;
43*5113495bSYour Name 
44*5113495bSYour Name extern const struct nla_policy
45*5113495bSYour Name wlan_hdd_wifi_twt_config_policy[QCA_WLAN_VENDOR_ATTR_CONFIG_TWT_MAX + 1];
46*5113495bSYour Name 
47*5113495bSYour Name #define FEATURE_TWT_VENDOR_EVENTS                                   \
48*5113495bSYour Name [QCA_NL80211_VENDOR_SUBCMD_CONFIG_TWT_INDEX] = {                    \
49*5113495bSYour Name 	.vendor_id = QCA_NL80211_VENDOR_ID,                         \
50*5113495bSYour Name 	.subcmd = QCA_NL80211_VENDOR_SUBCMD_CONFIG_TWT,             \
51*5113495bSYour Name },
52*5113495bSYour Name 
53*5113495bSYour Name /**
54*5113495bSYour Name  * enum twt_role - TWT role definitions
55*5113495bSYour Name  * @TWT_REQUESTOR: Individual/Bcast TWT requestor role
56*5113495bSYour Name  * @TWT_REQUESTOR_INDV: Individual TWT requestor role
57*5113495bSYour Name  * @TWT_REQUESTOR_BCAST: Broadcast TWT requestor role
58*5113495bSYour Name  * @TWT_RESPONDER: Individual/Bcast TWT responder role
59*5113495bSYour Name  * @TWT_RESPONDER_INDV: Individual TWT responder role
60*5113495bSYour Name  * @TWT_RESPONDER_BCAST: Broadcast TWT responder role
61*5113495bSYour Name  * @TWT_ROLE_ALL: All TWT roles
62*5113495bSYour Name  * @TWT_ROLE_MAX: Place holder for max mode
63*5113495bSYour Name  */
64*5113495bSYour Name enum twt_role {
65*5113495bSYour Name 	TWT_REQUESTOR,
66*5113495bSYour Name 	TWT_REQUESTOR_INDV,
67*5113495bSYour Name 	/* Bcast alone cannot be enabled, but can be disabled */
68*5113495bSYour Name 	TWT_REQUESTOR_BCAST,
69*5113495bSYour Name 	TWT_RESPONDER,
70*5113495bSYour Name 	TWT_RESPONDER_INDV,
71*5113495bSYour Name 	/* Bcast alone cannot be enabled, but can be disabled */
72*5113495bSYour Name 	TWT_RESPONDER_BCAST,
73*5113495bSYour Name 	TWT_ROLE_ALL,
74*5113495bSYour Name 	TWT_ROLE_MAX,
75*5113495bSYour Name };
76*5113495bSYour Name 
77*5113495bSYour Name #ifdef WLAN_SUPPORT_TWT
78*5113495bSYour Name /**
79*5113495bSYour Name  * enum twt_status - TWT target state
80*5113495bSYour Name  * @TWT_INIT: Init State
81*5113495bSYour Name  * @TWT_DISABLED: TWT is disabled
82*5113495bSYour Name  * @TWT_FW_TRIGGER_ENABLE_REQUESTED: FW triggered enable requested
83*5113495bSYour Name  * @TWT_FW_TRIGGER_ENABLED: FW triggered twt enabled
84*5113495bSYour Name  * @TWT_HOST_TRIGGER_ENABLE_REQUESTED: Host triggered TWT requested
85*5113495bSYour Name  * @TWT_HOST_TRIGGER_ENABLED: Host triggered TWT enabled
86*5113495bSYour Name  * @TWT_DISABLE_REQUESTED: TWT disable requested
87*5113495bSYour Name  * @TWT_SUSPEND_REQUESTED: TWT suspend requested
88*5113495bSYour Name  * @TWT_SUSPENDED: Successfully suspended TWT
89*5113495bSYour Name  * @TWT_RESUME_REQUESTED: TWT Resume requested
90*5113495bSYour Name  * @TWT_RESUMED: Successfully resumed TWT
91*5113495bSYour Name  * @TWT_CLOSED: Deinitialized TWT feature and closed
92*5113495bSYour Name  */
93*5113495bSYour Name enum twt_status {
94*5113495bSYour Name 	TWT_INIT,
95*5113495bSYour Name 	TWT_DISABLED,
96*5113495bSYour Name 	TWT_FW_TRIGGER_ENABLE_REQUESTED,
97*5113495bSYour Name 	TWT_FW_TRIGGER_ENABLED,
98*5113495bSYour Name 	TWT_HOST_TRIGGER_ENABLE_REQUESTED,
99*5113495bSYour Name 	TWT_HOST_TRIGGER_ENABLED,
100*5113495bSYour Name 	TWT_DISABLE_REQUESTED,
101*5113495bSYour Name 	TWT_SUSPEND_REQUESTED,
102*5113495bSYour Name 	TWT_SUSPENDED,
103*5113495bSYour Name 	TWT_RESUME_REQUESTED,
104*5113495bSYour Name 	TWT_RESUMED,
105*5113495bSYour Name 	TWT_CLOSED,
106*5113495bSYour Name };
107*5113495bSYour Name 
108*5113495bSYour Name /**
109*5113495bSYour Name  * struct twt_conc_arg: TWT concurrency args
110*5113495bSYour Name  * @hdd_ctx: pointer to hdd context
111*5113495bSYour Name  */
112*5113495bSYour Name struct twt_conc_arg {
113*5113495bSYour Name 	struct hdd_context *hdd_ctx;
114*5113495bSYour Name };
115*5113495bSYour Name 
116*5113495bSYour Name /**
117*5113495bSYour Name  * struct twt_ack_info_priv - twt ack private info
118*5113495bSYour Name  * @vdev_id: vdev id
119*5113495bSYour Name  * @peer_macaddr: peer mac address
120*5113495bSYour Name  * @dialog_id: dialog id
121*5113495bSYour Name  * @twt_cmd_ack: twt ack command
122*5113495bSYour Name  * @status: twt command status
123*5113495bSYour Name  */
124*5113495bSYour Name struct twt_ack_info_priv {
125*5113495bSYour Name 	uint32_t vdev_id;
126*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
127*5113495bSYour Name 	uint32_t dialog_id;
128*5113495bSYour Name 	uint32_t twt_cmd_ack;
129*5113495bSYour Name 	uint32_t status;
130*5113495bSYour Name };
131*5113495bSYour Name 
132*5113495bSYour Name /**
133*5113495bSYour Name  * wlan_hdd_cfg80211_wifi_twt_config() - Wifi twt configuration
134*5113495bSYour Name  * vendor command
135*5113495bSYour Name  * @wiphy: wiphy device pointer
136*5113495bSYour Name  * @wdev: wireless device pointer
137*5113495bSYour Name  * @data: Vendor command data buffer
138*5113495bSYour Name  * @data_len: Buffer length
139*5113495bSYour Name  *
140*5113495bSYour Name  * Handles QCA_NL80211_VENDOR_SUBCMD_CONFIG_TWT
141*5113495bSYour Name  *
142*5113495bSYour Name  * Return: 0 for success, negative errno for failure.
143*5113495bSYour Name  */
144*5113495bSYour Name int wlan_hdd_cfg80211_wifi_twt_config(struct wiphy *wiphy,
145*5113495bSYour Name 				      struct wireless_dev *wdev,
146*5113495bSYour Name 				      const void *data,
147*5113495bSYour Name 				      int data_len);
148*5113495bSYour Name 
149*5113495bSYour Name /**
150*5113495bSYour Name  * hdd_update_tgt_twt_cap() - Update TWT target capabilities
151*5113495bSYour Name  * @hdd_ctx: HDD Context
152*5113495bSYour Name  * @cfg: Pointer to target configuration
153*5113495bSYour Name  *
154*5113495bSYour Name  * Return: None
155*5113495bSYour Name  */
156*5113495bSYour Name void hdd_update_tgt_twt_cap(struct hdd_context *hdd_ctx,
157*5113495bSYour Name 			    struct wma_tgt_cfg *cfg);
158*5113495bSYour Name 
159*5113495bSYour Name /**
160*5113495bSYour Name  * hdd_send_twt_requestor_enable_cmd() - Send TWT requestor enable command to
161*5113495bSYour Name  * target
162*5113495bSYour Name  * @hdd_ctx: HDD Context
163*5113495bSYour Name  *
164*5113495bSYour Name  * Return: QDF_STATUS
165*5113495bSYour Name  */
166*5113495bSYour Name QDF_STATUS hdd_send_twt_requestor_enable_cmd(struct hdd_context *hdd_ctx);
167*5113495bSYour Name 
168*5113495bSYour Name /**
169*5113495bSYour Name  * hdd_send_twt_responder_enable_cmd() - Send TWT responder enable command to
170*5113495bSYour Name  * target
171*5113495bSYour Name  * @hdd_ctx: HDD Context
172*5113495bSYour Name  *
173*5113495bSYour Name  * Return: QDF_STATUS
174*5113495bSYour Name  */
175*5113495bSYour Name QDF_STATUS hdd_send_twt_responder_enable_cmd(struct hdd_context *hdd_ctx);
176*5113495bSYour Name 
177*5113495bSYour Name /**
178*5113495bSYour Name  * hdd_send_twt_requestor_disable_cmd() - Send TWT requestor disable command
179*5113495bSYour Name  * to target
180*5113495bSYour Name  * @hdd_ctx: HDD Context
181*5113495bSYour Name  * @reason: Disable reason code
182*5113495bSYour Name  *
183*5113495bSYour Name  * Return: QDF_STATUS
184*5113495bSYour Name  */
185*5113495bSYour Name QDF_STATUS hdd_send_twt_requestor_disable_cmd(struct hdd_context *hdd_ctx,
186*5113495bSYour Name 					      uint32_t reason);
187*5113495bSYour Name 
188*5113495bSYour Name /**
189*5113495bSYour Name  * hdd_send_twt_responder_disable_cmd() - Send TWT responder disable command
190*5113495bSYour Name  * to target
191*5113495bSYour Name  * @hdd_ctx: HDD Context
192*5113495bSYour Name  * @reason: Disable reason code
193*5113495bSYour Name  *
194*5113495bSYour Name  * Return: QDF_STATUS
195*5113495bSYour Name  */
196*5113495bSYour Name QDF_STATUS hdd_send_twt_responder_disable_cmd(struct hdd_context *hdd_ctx,
197*5113495bSYour Name 					      uint32_t reason);
198*5113495bSYour Name 
199*5113495bSYour Name /**
200*5113495bSYour Name  * wlan_hdd_twt_init() - Initialize TWT
201*5113495bSYour Name  * @hdd_ctx: pointer to global HDD Context
202*5113495bSYour Name  *
203*5113495bSYour Name  * Initialize the TWT feature by registering the callbacks
204*5113495bSYour Name  * with the lower layers.
205*5113495bSYour Name  *
206*5113495bSYour Name  * Return: None
207*5113495bSYour Name  */
208*5113495bSYour Name void wlan_hdd_twt_init(struct hdd_context *hdd_ctx);
209*5113495bSYour Name 
210*5113495bSYour Name /**
211*5113495bSYour Name  * wlan_hdd_twt_deinit() - Deinitialize TWT
212*5113495bSYour Name  * @hdd_ctx: pointer to global HDD Context
213*5113495bSYour Name  *
214*5113495bSYour Name  * Deinitialize the TWT feature by deregistering the
215*5113495bSYour Name  * callbacks with the lower layers.
216*5113495bSYour Name  *
217*5113495bSYour Name  * Return: None
218*5113495bSYour Name  */
219*5113495bSYour Name void wlan_hdd_twt_deinit(struct hdd_context *hdd_ctx);
220*5113495bSYour Name 
221*5113495bSYour Name /**
222*5113495bSYour Name  * hdd_test_config_twt_setup_session() - Process TWT setup
223*5113495bSYour Name  * operation in the received test config vendor command and
224*5113495bSYour Name  * send it to firmware
225*5113495bSYour Name  * @adapter: adapter pointer
226*5113495bSYour Name  * @tb: nl attributes
227*5113495bSYour Name  *
228*5113495bSYour Name  * Handles QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_TWT_SETUP
229*5113495bSYour Name  *
230*5113495bSYour Name  * Return: 0 for Success and negative value for failure
231*5113495bSYour Name  */
232*5113495bSYour Name int hdd_test_config_twt_setup_session(struct hdd_adapter *adapter,
233*5113495bSYour Name 				      struct nlattr **tb);
234*5113495bSYour Name 
235*5113495bSYour Name /**
236*5113495bSYour Name  * hdd_test_config_twt_terminate_session() - Process TWT terminate
237*5113495bSYour Name  * operation in the received test config vendor command and send
238*5113495bSYour Name  * it to firmware
239*5113495bSYour Name  * @adapter: adapter pointer
240*5113495bSYour Name  * @tb: nl attributes
241*5113495bSYour Name  *
242*5113495bSYour Name  * Handles QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_TWT_TERMINATE
243*5113495bSYour Name  *
244*5113495bSYour Name  * Return: 0 for Success and negative value for failure
245*5113495bSYour Name  */
246*5113495bSYour Name int hdd_test_config_twt_terminate_session(struct hdd_adapter *adapter,
247*5113495bSYour Name 					  struct nlattr **tb);
248*5113495bSYour Name /**
249*5113495bSYour Name  * hdd_send_twt_role_disable_cmd() - Send a specific TWT role
250*5113495bSYour Name  * disable to firmware
251*5113495bSYour Name  * @hdd_ctx: hdd context pointer
252*5113495bSYour Name  * @role : TWT role to be disabled
253*5113495bSYour Name  *
254*5113495bSYour Name  * Return: None
255*5113495bSYour Name  */
256*5113495bSYour Name void hdd_send_twt_role_disable_cmd(struct hdd_context *hdd_ctx,
257*5113495bSYour Name 				   enum twt_role role);
258*5113495bSYour Name 
259*5113495bSYour Name /**
260*5113495bSYour Name  * hdd_send_twt_del_all_sessions_to_userspace() - Terminate all TWT sessions
261*5113495bSYour Name  * @link_info: Link info pointer in HDD adapter
262*5113495bSYour Name  *
263*5113495bSYour Name  * This function checks if association exists and TWT session is setup,
264*5113495bSYour Name  * then send the TWT teardown vendor NL event to the user space.
265*5113495bSYour Name  *
266*5113495bSYour Name  * Return: None
267*5113495bSYour Name  */
268*5113495bSYour Name void
269*5113495bSYour Name hdd_send_twt_del_all_sessions_to_userspace(struct wlan_hdd_link_info *link_info);
270*5113495bSYour Name 
271*5113495bSYour Name /**
272*5113495bSYour Name  * hdd_twt_concurrency_update_on_scc() - Send TWT disable command to fw if
273*5113495bSYour Name  * SCC exists in two vdevs
274*5113495bSYour Name  * @pdev: pdev pointer
275*5113495bSYour Name  * @object: object pointer
276*5113495bSYour Name  * @arg: argument pointer
277*5113495bSYour Name  *
278*5113495bSYour Name  * Return: None
279*5113495bSYour Name  */
280*5113495bSYour Name void hdd_twt_concurrency_update_on_scc(struct wlan_objmgr_pdev *pdev,
281*5113495bSYour Name 				       void *object, void *arg);
282*5113495bSYour Name 
283*5113495bSYour Name /**
284*5113495bSYour Name  * hdd_twt_concurrency_update_on_mcc() - Send TWT disable command to fw if
285*5113495bSYour Name  * MCC exists in two vdevs
286*5113495bSYour Name  * @pdev: pdev pointer
287*5113495bSYour Name  * @object: object pointer
288*5113495bSYour Name  * @arg: argument pointer
289*5113495bSYour Name  *
290*5113495bSYour Name  * Return: None
291*5113495bSYour Name  */
292*5113495bSYour Name void hdd_twt_concurrency_update_on_mcc(struct wlan_objmgr_pdev *pdev,
293*5113495bSYour Name 				       void *object, void *arg);
294*5113495bSYour Name 
295*5113495bSYour Name /**
296*5113495bSYour Name  * hdd_twt_concurrency_update_on_dbs() - Send TWT enable command to fw if DBS
297*5113495bSYour Name  * exists in two vdevs
298*5113495bSYour Name  * @pdev: pdev pointer
299*5113495bSYour Name  * @object: object pointer
300*5113495bSYour Name  * @arg: argument pointer
301*5113495bSYour Name  *
302*5113495bSYour Name  * Return: None
303*5113495bSYour Name  */
304*5113495bSYour Name void hdd_twt_concurrency_update_on_dbs(struct wlan_objmgr_pdev *pdev,
305*5113495bSYour Name 				       void *object, void *arg);
306*5113495bSYour Name 
307*5113495bSYour Name /**
308*5113495bSYour Name  * __hdd_twt_update_work_handler() - TWT work handler to send TWT enable/disable
309*5113495bSYour Name  * command to fw
310*5113495bSYour Name  * @hdd_ctx: HDD pointer context
311*5113495bSYour Name  *
312*5113495bSYour Name  * Return: None
313*5113495bSYour Name  */
314*5113495bSYour Name void __hdd_twt_update_work_handler(struct hdd_context *hdd_ctx);
315*5113495bSYour Name 
316*5113495bSYour Name /**
317*5113495bSYour Name  * hdd_twt_update_work_handler() - Wrapper function
318*5113495bSYour Name  * @data: data pointer
319*5113495bSYour Name  *
320*5113495bSYour Name  * Return: None
321*5113495bSYour Name  */
322*5113495bSYour Name void hdd_twt_update_work_handler(void *data);
323*5113495bSYour Name 
324*5113495bSYour Name /**
325*5113495bSYour Name  * wlan_twt_concurrency_update() - Handles twt concurrency in case of SCC/MCC
326*5113495bSYour Name  * or DBS
327*5113495bSYour Name  * @hdd_ctx: hdd context pointer
328*5113495bSYour Name  *
329*5113495bSYour Name  * Return: None
330*5113495bSYour Name  */
331*5113495bSYour Name void wlan_twt_concurrency_update(struct hdd_context *hdd_ctx);
332*5113495bSYour Name 
333*5113495bSYour Name /**
334*5113495bSYour Name  * hdd_twt_del_dialog_in_ps_disable() - TWT teardown in case of ps disable
335*5113495bSYour Name  * @hdd_ctx: hdd context pointer
336*5113495bSYour Name  * @mac_addr: STA mac address
337*5113495bSYour Name  * @vdev_id: vdev id
338*5113495bSYour Name  *
339*5113495bSYour Name  * Return: None
340*5113495bSYour Name  */
341*5113495bSYour Name void hdd_twt_del_dialog_in_ps_disable(struct hdd_context *hdd_ctx,
342*5113495bSYour Name 				      struct qdf_mac_addr *mac_addr,
343*5113495bSYour Name 				      uint8_t vdev_id);
344*5113495bSYour Name 
345*5113495bSYour Name #define FEATURE_VENDOR_SUBCMD_WIFI_CONFIG_TWT                            \
346*5113495bSYour Name {                                                                        \
347*5113495bSYour Name 	.info.vendor_id = QCA_NL80211_VENDOR_ID,                         \
348*5113495bSYour Name 	.info.subcmd =                                                   \
349*5113495bSYour Name 		QCA_NL80211_VENDOR_SUBCMD_CONFIG_TWT,                    \
350*5113495bSYour Name 	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |                            \
351*5113495bSYour Name 		WIPHY_VENDOR_CMD_NEED_NETDEV |                           \
352*5113495bSYour Name 		WIPHY_VENDOR_CMD_NEED_RUNNING,                           \
353*5113495bSYour Name 	.doit = wlan_hdd_cfg80211_wifi_twt_config,                       \
354*5113495bSYour Name 	vendor_command_policy(wlan_hdd_wifi_twt_config_policy,           \
355*5113495bSYour Name 			      QCA_WLAN_VENDOR_ATTR_CONFIG_TWT_MAX)       \
356*5113495bSYour Name },
357*5113495bSYour Name 
358*5113495bSYour Name /**
359*5113495bSYour Name  * hdd_get_twt_requestor() - Get TWT requestor config
360*5113495bSYour Name  * @psoc: global psoc object
361*5113495bSYour Name  * @val: output variable to store the value
362*5113495bSYour Name  *
363*5113495bSYour Name  * Return: QDF_STATUS
364*5113495bSYour Name  */
365*5113495bSYour Name QDF_STATUS hdd_get_twt_requestor(struct wlan_objmgr_psoc *psoc, bool *val);
366*5113495bSYour Name 
367*5113495bSYour Name /**
368*5113495bSYour Name  * hdd_get_twt_responder() - Get TWT responder config
369*5113495bSYour Name  * @psoc: global psoc object
370*5113495bSYour Name  * @val: output variable to store the value
371*5113495bSYour Name  *
372*5113495bSYour Name  * Return: QDF_STATUS
373*5113495bSYour Name  */
374*5113495bSYour Name QDF_STATUS hdd_get_twt_responder(struct wlan_objmgr_psoc *psoc, bool *val);
375*5113495bSYour Name 
376*5113495bSYour Name /**
377*5113495bSYour Name  * wlan_hdd_resume_pmo_twt() - resume twt worker
378*5113495bSYour Name  * @hdd_ctx: hdd context
379*5113495bSYour Name  *
380*5113495bSYour Name  * Return: None
381*5113495bSYour Name  */
382*5113495bSYour Name void wlan_hdd_resume_pmo_twt(struct hdd_context *hdd_ctx);
383*5113495bSYour Name /**
384*5113495bSYour Name  * wlan_hdd_suspend_pmo_twt() - suspend twt worker
385*5113495bSYour Name  * @hdd_ctx: hdd context
386*5113495bSYour Name  *
387*5113495bSYour Name  * Return: None
388*5113495bSYour Name  */
389*5113495bSYour Name void wlan_hdd_suspend_pmo_twt(struct hdd_context *hdd_ctx);
390*5113495bSYour Name /**
391*5113495bSYour Name  * wlan_hdd_is_twt_pmo_allowed() - check twt disabled
392*5113495bSYour Name  * @hdd_ctx: hdd context
393*5113495bSYour Name  *
394*5113495bSYour Name  * Return: true if twt pmo is allowed otherwise false
395*5113495bSYour Name  */
396*5113495bSYour Name bool wlan_hdd_is_twt_pmo_allowed(struct hdd_context *hdd_ctx);
397*5113495bSYour Name #else
hdd_update_tgt_twt_cap(struct hdd_context * hdd_ctx,struct wma_tgt_cfg * cfg)398*5113495bSYour Name static inline void hdd_update_tgt_twt_cap(struct hdd_context *hdd_ctx,
399*5113495bSYour Name 					  struct wma_tgt_cfg *cfg)
400*5113495bSYour Name {
401*5113495bSYour Name }
402*5113495bSYour Name 
403*5113495bSYour Name static inline
hdd_send_twt_requestor_enable_cmd(struct hdd_context * hdd_ctx)404*5113495bSYour Name QDF_STATUS hdd_send_twt_requestor_enable_cmd(struct hdd_context *hdd_ctx)
405*5113495bSYour Name {
406*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
407*5113495bSYour Name }
408*5113495bSYour Name 
409*5113495bSYour Name static inline
hdd_send_twt_responder_enable_cmd(struct hdd_context * hdd_ctx)410*5113495bSYour Name QDF_STATUS hdd_send_twt_responder_enable_cmd(struct hdd_context *hdd_ctx)
411*5113495bSYour Name {
412*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
413*5113495bSYour Name }
414*5113495bSYour Name 
415*5113495bSYour Name static inline
hdd_send_twt_requestor_disable_cmd(struct hdd_context * hdd_ctx,uint32_t reason)416*5113495bSYour Name QDF_STATUS hdd_send_twt_requestor_disable_cmd(struct hdd_context *hdd_ctx,
417*5113495bSYour Name 					      uint32_t reason)
418*5113495bSYour Name {
419*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
420*5113495bSYour Name }
421*5113495bSYour Name 
422*5113495bSYour Name static inline
hdd_send_twt_responder_disable_cmd(struct hdd_context * hdd_ctx,uint32_t reason)423*5113495bSYour Name QDF_STATUS hdd_send_twt_responder_disable_cmd(struct hdd_context *hdd_ctx,
424*5113495bSYour Name 					      uint32_t reason)
425*5113495bSYour Name {
426*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
427*5113495bSYour Name }
428*5113495bSYour Name 
wlan_hdd_twt_init(struct hdd_context * hdd_ctx)429*5113495bSYour Name static inline void wlan_hdd_twt_init(struct hdd_context *hdd_ctx)
430*5113495bSYour Name {
431*5113495bSYour Name }
432*5113495bSYour Name 
wlan_hdd_twt_deinit(struct hdd_context * hdd_ctx)433*5113495bSYour Name static inline void wlan_hdd_twt_deinit(struct hdd_context *hdd_ctx)
434*5113495bSYour Name {
435*5113495bSYour Name }
436*5113495bSYour Name 
437*5113495bSYour Name static inline
hdd_test_config_twt_setup_session(struct hdd_adapter * adapter,struct nlattr ** tb)438*5113495bSYour Name int hdd_test_config_twt_setup_session(struct hdd_adapter *adapter,
439*5113495bSYour Name 				      struct nlattr **tb)
440*5113495bSYour Name {
441*5113495bSYour Name 	return -EINVAL;
442*5113495bSYour Name }
443*5113495bSYour Name 
444*5113495bSYour Name static inline
hdd_test_config_twt_terminate_session(struct hdd_adapter * adapter,struct nlattr ** tb)445*5113495bSYour Name int hdd_test_config_twt_terminate_session(struct hdd_adapter *adapter,
446*5113495bSYour Name 					  struct nlattr **tb)
447*5113495bSYour Name {
448*5113495bSYour Name 	return -EINVAL;
449*5113495bSYour Name }
450*5113495bSYour Name 
451*5113495bSYour Name static inline
hdd_send_twt_role_disable_cmd(struct hdd_context * hdd_ctx,enum twt_role role)452*5113495bSYour Name void hdd_send_twt_role_disable_cmd(struct hdd_context *hdd_ctx,
453*5113495bSYour Name 				   enum twt_role role)
454*5113495bSYour Name {
455*5113495bSYour Name }
456*5113495bSYour Name 
457*5113495bSYour Name static inline void
hdd_send_twt_del_all_sessions_to_userspace(struct wlan_hdd_link_info * link_info)458*5113495bSYour Name hdd_send_twt_del_all_sessions_to_userspace(struct wlan_hdd_link_info *link_info)
459*5113495bSYour Name {
460*5113495bSYour Name }
461*5113495bSYour Name 
462*5113495bSYour Name static inline
hdd_twt_concurrency_update_on_scc(struct wlan_objmgr_pdev * pdev,void * object,void * arg)463*5113495bSYour Name void hdd_twt_concurrency_update_on_scc(struct wlan_objmgr_pdev *pdev,
464*5113495bSYour Name 				       void *object, void *arg)
465*5113495bSYour Name {
466*5113495bSYour Name }
467*5113495bSYour Name 
468*5113495bSYour Name static inline
hdd_twt_concurrency_update_on_mcc(struct wlan_objmgr_pdev * pdev,void * object,void * arg)469*5113495bSYour Name void hdd_twt_concurrency_update_on_mcc(struct wlan_objmgr_pdev *pdev,
470*5113495bSYour Name 				       void *object, void *arg)
471*5113495bSYour Name {
472*5113495bSYour Name }
473*5113495bSYour Name 
474*5113495bSYour Name static inline
hdd_twt_concurrency_update_on_dbs(struct wlan_objmgr_pdev * pdev,void * object,void * arg)475*5113495bSYour Name void hdd_twt_concurrency_update_on_dbs(struct wlan_objmgr_pdev *pdev,
476*5113495bSYour Name 				       void *object, void *arg)
477*5113495bSYour Name {
478*5113495bSYour Name }
479*5113495bSYour Name 
480*5113495bSYour Name static inline
__hdd_twt_update_work_handler(struct hdd_context * hdd_ctx)481*5113495bSYour Name void __hdd_twt_update_work_handler(struct hdd_context *hdd_ctx)
482*5113495bSYour Name {
483*5113495bSYour Name }
484*5113495bSYour Name 
hdd_twt_update_work_handler(void * data)485*5113495bSYour Name static inline void hdd_twt_update_work_handler(void *data)
486*5113495bSYour Name {
487*5113495bSYour Name }
488*5113495bSYour Name 
wlan_twt_concurrency_update(struct hdd_context * hdd_ctx)489*5113495bSYour Name static inline void wlan_twt_concurrency_update(struct hdd_context *hdd_ctx)
490*5113495bSYour Name {
491*5113495bSYour Name }
492*5113495bSYour Name 
493*5113495bSYour Name static inline
hdd_twt_del_dialog_in_ps_disable(struct hdd_context * hdd_ctx,struct qdf_mac_addr * mac_addr,uint8_t vdev_id)494*5113495bSYour Name void hdd_twt_del_dialog_in_ps_disable(struct hdd_context *hdd_ctx,
495*5113495bSYour Name 				      struct qdf_mac_addr *mac_addr,
496*5113495bSYour Name 				      uint8_t vdev_id)
497*5113495bSYour Name {
498*5113495bSYour Name }
499*5113495bSYour Name 
500*5113495bSYour Name static inline
hdd_get_twt_requestor(struct wlan_objmgr_psoc * psoc,bool * val)501*5113495bSYour Name QDF_STATUS hdd_get_twt_requestor(struct wlan_objmgr_psoc *psoc, bool *val)
502*5113495bSYour Name {
503*5113495bSYour Name 	*val = false;
504*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
505*5113495bSYour Name }
506*5113495bSYour Name 
507*5113495bSYour Name static inline
hdd_get_twt_responder(struct wlan_objmgr_psoc * psoc,bool * val)508*5113495bSYour Name QDF_STATUS hdd_get_twt_responder(struct wlan_objmgr_psoc *psoc, bool *val)
509*5113495bSYour Name {
510*5113495bSYour Name 	*val = false;
511*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
512*5113495bSYour Name }
513*5113495bSYour Name 
wlan_hdd_resume_pmo_twt(struct hdd_context * hdd_ctx)514*5113495bSYour Name static inline void wlan_hdd_resume_pmo_twt(struct hdd_context *hdd_ctx)
515*5113495bSYour Name {
516*5113495bSYour Name }
517*5113495bSYour Name 
wlan_hdd_suspend_pmo_twt(struct hdd_context * hdd_ctx)518*5113495bSYour Name static inline void wlan_hdd_suspend_pmo_twt(struct hdd_context *hdd_ctx)
519*5113495bSYour Name {
520*5113495bSYour Name }
521*5113495bSYour Name 
wlan_hdd_is_twt_pmo_allowed(struct hdd_context * hdd_ctx)522*5113495bSYour Name static inline bool wlan_hdd_is_twt_pmo_allowed(struct hdd_context *hdd_ctx)
523*5113495bSYour Name {
524*5113495bSYour Name 	return true;
525*5113495bSYour Name }
526*5113495bSYour Name 
527*5113495bSYour Name #define FEATURE_VENDOR_SUBCMD_WIFI_CONFIG_TWT
528*5113495bSYour Name 
529*5113495bSYour Name #endif
530*5113495bSYour Name 
531*5113495bSYour Name #endif /* if !defined(WLAN_HDD_TWT_H)*/
532