1 /*
2  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 /**
20  * DOC: This file contains various structures, macros used by the TWT
21  * component and other components interfacing with TWT component.
22  */
23 
24 #ifndef _WLAN_TWT_PUBLIC_STRUCTS_H_
25 #define _WLAN_TWT_PUBLIC_STRUCTS_H_
26 
27 #include <qdf_types.h>
28 
29 #define WLAN_MAX_TWT_SESSIONS_PER_PEER 1
30 #define TWT_ALL_SESSIONS_DIALOG_ID 255
31 
32 /**
33  * enum wlan_twt_commands  - TWT commands
34  * @WLAN_TWT_NONE: Indicates none of the TWT commands are active.
35  * @WLAN_TWT_SETUP: TWT setup
36  * @WLAN_TWT_TERMINATE: TWT terminate
37  * @WLAN_TWT_SUSPEND: TWT suspend
38  * @WLAN_TWT_RESUME: TWT resume
39  * @WLAN_TWT_NUDGE: TWT nudge
40  * @WLAN_TWT_STATISTICS: TWT statistics
41  * @WLAN_TWT_CLEAR_STATISTICS: TWT clear statistics
42  * @WLAN_TWT_ANY: Indicates one of the commands is in progress.
43  */
44 enum wlan_twt_commands {
45 	WLAN_TWT_NONE             = 0,
46 	WLAN_TWT_SETUP            = BIT(0),
47 	WLAN_TWT_TERMINATE        = BIT(1),
48 	WLAN_TWT_SUSPEND          = BIT(2),
49 	WLAN_TWT_RESUME           = BIT(3),
50 	WLAN_TWT_NUDGE            = BIT(4),
51 	WLAN_TWT_STATISTICS       = BIT(5),
52 	WLAN_TWT_CLEAR_STATISTICS = BIT(6),
53 	WLAN_TWT_ANY              = 0xFF,
54 };
55 
56 /**
57  * enum wlan_twt_capabilities  - Represents the Bitmap of TWT capabilities
58  * supported by device and peer.
59  * @WLAN_TWT_CAPA_REQUESTOR: TWT requestor support is advertised by TWT
60  * non-scheduling STA.
61  * @WLAN_TWT_CAPA_RESPONDER: TWT responder support is advertised by TWT
62  * AP.
63  * @WLAN_TWT_CAPA_BROADCAST: This indicates support for the role of broadcast
64  * TWT scheduling/receiving functionality.
65  * @WLAN_TWT_CAPA_FLEXIBLE: Device supports flexible TWT schedule.
66  * @WLAN_TWT_CAPA_REQUIRED: The TWT Required is advertised by AP to indicate
67  * that it mandates the associated HE STAs to support TWT.
68  */
69 enum wlan_twt_capabilities {
70 	WLAN_TWT_CAPA_REQUESTOR = BIT(0),
71 	WLAN_TWT_CAPA_RESPONDER = BIT(1),
72 	WLAN_TWT_CAPA_BROADCAST = BIT(2),
73 	WLAN_TWT_CAPA_FLEXIBLE =  BIT(3),
74 	WLAN_TWT_CAPA_REQUIRED =  BIT(4),
75 };
76 
77 /**
78  * enum wlan_twt_session_state  - TWT session state for a dialog id
79  * @WLAN_TWT_SETUP_STATE_NOT_ESTABLISHED: Session doesn't exist
80  * @WLAN_TWT_SETUP_STATE_ACTIVE: TWT session is active
81  * @WLAN_TWT_SETUP_STATE_SUSPEND: TWT session is suspended
82  */
83 enum wlan_twt_session_state {
84 	WLAN_TWT_SETUP_STATE_NOT_ESTABLISHED = 0,
85 	WLAN_TWT_SETUP_STATE_ACTIVE          = 1,
86 	WLAN_TWT_SETUP_STATE_SUSPEND         = 2,
87 };
88 
89 /**
90  * enum TWT_ROLE - role specified in ext conf in wmi_twt_enable/disable_cmd
91  * @TWT_ROLE_REQUESTOR: TWT role is requestor
92  * @TWT_ROLE_RESPONDER: TWT role is responder
93  */
94 enum TWT_ROLE {
95 	TWT_ROLE_REQUESTOR,
96 	TWT_ROLE_RESPONDER,
97 };
98 
99 /**
100  * enum TWT_OPERATION - specified in ext conf in wmi_twt_enable/disable_cmd
101  * @TWT_OPERATION_INDIVIDUAL: Individual TWT operation
102  * @TWT_OPERATION_BROADCAST: Broadcast TWT operation
103  */
104 enum TWT_OPERATION {
105 	TWT_OPERATION_INDIVIDUAL,
106 	TWT_OPERATION_BROADCAST,
107 };
108 
109 /**
110  * struct twt_enable_param:
111  * @pdev_id: pdev_id for identifying the MAC.
112  * @sta_cong_timer_ms: STA TWT congestion timer TO value in terms of ms
113  * @mbss_support: Flag indicating if AP TWT feature supported in
114  *                MBSS mode or not.
115  * @default_slot_size: This is the default value for the TWT slot setup
116  *                by AP (units = microseconds)
117  * @congestion_thresh_setup: Minimum congestion required to start setting
118  *                up TWT sessions
119  * @congestion_thresh_teardown: Minimum congestion below which TWT will be
120  *                torn down (in percent of occupied airtime)
121  * @congestion_thresh_critical: Threshold above which TWT will not be active
122  *                (in percent of occupied airtime)
123  * @interference_thresh_teardown: Minimum interference above that TWT
124  *                 will not be active. The interference parameters use an
125  *                 abstract method of evaluating interference.
126  *                 The parameters are in percent, ranging from 0 for no
127  *                 interference, to 100 for interference extreme enough
128  *                 to completely block the signal of interest.
129  * @interference_thresh_setup: Minimum interference below that TWT session
130  *                 can be setup. The interference parameters use an
131  *                 abstract method of evaluating interference.
132  *                 The parameters are in percent, ranging from 0 for no
133  *                 interference, to 100 for interference extreme enough
134  *                 to completely block the signal of interest.
135  * @min_no_sta_setup: Minimum no of STA required to start TWT setup
136  * @min_no_sta_teardown: Minimum no of STA below which TWT will be torn down
137  * @no_of_bcast_mcast_slots: Number of default slot sizes reserved for
138  *                 BCAST/MCAST delivery
139  * @min_no_twt_slots: Minimum no of available slots for TWT to be operational
140  * @max_no_sta_twt: Max no of STA with which TWT is possible
141  *                 (must be <= the wmi_resource_config's twt_ap_sta_count value)
142  *      * The below interval parameters have units of milliseconds.
143  * @mode_check_interval: Interval between two successive check to decide the
144  *                 mode of TWT. (units = milliseconds)
145  * @add_sta_slot_interval: Interval between decisions making to create
146  *                 TWT slots for STAs. (units = milliseconds)
147  * @remove_sta_slot_interval: Inrerval between decisions making to remove TWT
148  *                 slot of STAs. (units = milliseconds)
149  * @twt_role: values from enum TWT_ROLE.
150  * @twt_oper: values from enum TWT_OPERATION.
151  * @ext_conf_present: If requestor/responder extend config is present.
152  * @b_twt_enable: Enable or disable broadcast TWT.
153  * @b_twt_legacy_mbss_enable: Enable or disable legacy MBSSID TWT.
154  * @b_twt_ax_mbss_enable: Enable or disable 11AX MBSSID TWT.
155  * @r_twt_enable: Restricted TWT enable or disable.
156  */
157 struct twt_enable_param {
158 	uint32_t pdev_id;
159 	uint32_t sta_cong_timer_ms;
160 	uint32_t mbss_support;
161 	uint32_t default_slot_size;
162 	uint32_t congestion_thresh_setup;
163 	uint32_t congestion_thresh_teardown;
164 	uint32_t congestion_thresh_critical;
165 	uint32_t interference_thresh_teardown;
166 	uint32_t interference_thresh_setup;
167 	uint32_t min_no_sta_setup;
168 	uint32_t min_no_sta_teardown;
169 	uint32_t no_of_bcast_mcast_slots;
170 	uint32_t min_no_twt_slots;
171 	uint32_t max_no_sta_twt;
172 	uint32_t mode_check_interval;
173 	uint32_t add_sta_slot_interval;
174 	uint32_t remove_sta_slot_interval;
175 	enum TWT_ROLE twt_role;
176 	enum TWT_OPERATION twt_oper;
177 	bool ext_conf_present;
178 	uint32_t b_twt_enable:1,
179 		 b_twt_legacy_mbss_enable:1,
180 		 b_twt_ax_mbss_enable:1;
181 	bool r_twt_enable;
182 };
183 
184 /**
185  * enum HOST_TWT_DISABLE_REASON - reason code of disable TWT
186  * @HOST_TWT_DISABLE_REASON_NONE: Host sends TWT disable command to firmware
187  *                              in normal case.
188  * @HOST_TWT_DISABLE_REASON_CONCURRENCY_SCC: Host sends TWT disable command
189  *                              to firmware when SCC concurrency exist.
190  * @HOST_TWT_DISABLE_REASON_CONCURRENCY_MCC: Host sends TWT disable command
191  *                              to firmware when MCC concurrency exist.
192  * @HOST_TWT_DISABLE_REASON_CHANGE_CONGESTION_TIMEOUT: Host sends TWT disable
193  *                              command to firmware to change congestion timeout
194  * @HOST_TWT_DISABLE_REASON_P2P_GO_NOA: Host sends TWT disable command to
195  *                              firmware when P2P GO NOA exist.
196  */
197 enum HOST_TWT_DISABLE_REASON {
198 	HOST_TWT_DISABLE_REASON_NONE,
199 	HOST_TWT_DISABLE_REASON_CONCURRENCY_SCC,
200 	HOST_TWT_DISABLE_REASON_CONCURRENCY_MCC,
201 	HOST_TWT_DISABLE_REASON_CHANGE_CONGESTION_TIMEOUT,
202 	HOST_TWT_DISABLE_REASON_P2P_GO_NOA,
203 };
204 
205 /**
206  * struct twt_disable_param:
207  * @pdev_id: pdev_id for identifying the MAC.
208  * @ext_conf_present: If requestor/responder extend config is present.
209  * @twt_role: values from enum TWT_ROLE.
210  * @twt_oper: values from enum TWT_OPERATION.
211  * @dis_reason_code: values from disable reason code.
212  */
213 struct twt_disable_param {
214 	uint32_t pdev_id;
215 	bool ext_conf_present;
216 	enum TWT_ROLE twt_role;
217 	enum TWT_OPERATION twt_oper;
218 	enum HOST_TWT_DISABLE_REASON dis_reason_code;
219 };
220 
221 /**
222  * enum HOST_TWT_ENABLE_STATUS - status code of enabling TWT
223  * @HOST_TWT_ENABLE_STATUS_OK: enabling TWT successfully completed
224  * @HOST_TWT_ENABLE_STATUS_ALREADY_ENABLED: TWT already enabled
225  * @HOST_TWT_ENABLE_STATUS_NOT_READY: FW not ready for enabling TWT
226  * @HOST_TWT_ENABLE_INVALID_PARAM: invalid parameters
227  * @HOST_TWT_ENABLE_STATUS_UNKNOWN_ERROR: enabling TWT failed with an
228  *                                      unknown reason
229  */
230 enum HOST_TWT_ENABLE_STATUS {
231 	HOST_TWT_ENABLE_STATUS_OK,
232 	HOST_TWT_ENABLE_STATUS_ALREADY_ENABLED,
233 	HOST_TWT_ENABLE_STATUS_NOT_READY,
234 	HOST_TWT_ENABLE_INVALID_PARAM,
235 	HOST_TWT_ENABLE_STATUS_UNKNOWN_ERROR,
236 };
237 
238 /**
239  * enum HOST_ADD_TWT_STATUS - status code of adding TWT dialog
240  * @HOST_ADD_TWT_STATUS_OK: adding TWT dialog successfully completed
241  * @HOST_ADD_TWT_STATUS_TWT_NOT_ENABLED: TWT not enabled
242  * @HOST_ADD_TWT_STATUS_USED_DIALOG_ID: TWT dialog ID is already used
243  * @HOST_ADD_TWT_STATUS_INVALID_PARAM: invalid parameters
244  * @HOST_ADD_TWT_STATUS_NOT_READY: FW not ready
245  * @HOST_ADD_TWT_STATUS_NO_RESOURCE: FW resource exhausted
246  * @HOST_ADD_TWT_STATUS_NO_ACK: peer AP/STA did not ACK the
247  * request/response frame
248  * @HOST_ADD_TWT_STATUS_NO_RESPONSE: peer AP did not send the response frame
249  * @HOST_ADD_TWT_STATUS_DENIED: AP did not accept the request
250  * @HOST_ADD_TWT_STATUS_UNKNOWN_ERROR: adding TWT dialog failed with
251  * an unknown reason
252  * @HOST_ADD_TWT_STATUS_AP_PARAMS_NOT_IN_RANGE: peer AP wake interval,
253  * duration not in range
254  * @HOST_ADD_TWT_STATUS_AP_IE_VALIDATION_FAILED: peer AP IE Validation
255  * Failed
256  * @HOST_ADD_TWT_STATUS_ROAM_IN_PROGRESS: Roaming in progress
257  * @HOST_ADD_TWT_STATUS_CHAN_SW_IN_PROGRESS: Channel switch in progress
258  * @HOST_ADD_TWT_STATUS_SCAN_IN_PROGRESS: Scan is in progress
259  * @HOST_ADD_TWT_STATUS_LINK_SWITCH_IN_PROGRESS: Link switch is in progress
260  * @HOST_ADD_TWT_STATUS_UNSUPPORTED_MODE_MLMR: MLMR mode is not supported
261  */
262 enum HOST_ADD_TWT_STATUS {
263 	HOST_ADD_TWT_STATUS_OK,
264 	HOST_ADD_TWT_STATUS_TWT_NOT_ENABLED,
265 	HOST_ADD_TWT_STATUS_USED_DIALOG_ID,
266 	HOST_ADD_TWT_STATUS_INVALID_PARAM,
267 	HOST_ADD_TWT_STATUS_NOT_READY,
268 	HOST_ADD_TWT_STATUS_NO_RESOURCE,
269 	HOST_ADD_TWT_STATUS_NO_ACK,
270 	HOST_ADD_TWT_STATUS_NO_RESPONSE,
271 	HOST_ADD_TWT_STATUS_DENIED,
272 	HOST_ADD_TWT_STATUS_UNKNOWN_ERROR,
273 	HOST_ADD_TWT_STATUS_AP_PARAMS_NOT_IN_RANGE,
274 	HOST_ADD_TWT_STATUS_AP_IE_VALIDATION_FAILED,
275 	HOST_ADD_TWT_STATUS_ROAM_IN_PROGRESS,
276 	HOST_ADD_TWT_STATUS_CHAN_SW_IN_PROGRESS,
277 	HOST_ADD_TWT_STATUS_SCAN_IN_PROGRESS,
278 	HOST_ADD_TWT_STATUS_LINK_SWITCH_IN_PROGRESS,
279 	HOST_ADD_TWT_STATUS_UNSUPPORTED_MODE_MLMR,
280 };
281 
282 /**
283  * struct twt_enable_complete_event_param:
284  * @pdev_id: pdev_id for identifying the MAC.
285  * @status: From enum TWT_ENABLE_STATUS
286  */
287 struct twt_enable_complete_event_param {
288 	uint32_t pdev_id;
289 	uint32_t status;
290 };
291 
292 /**
293  * enum HOST_TWT_DISABLE_STATUS  - status code of disable TWT
294  * @HOST_TWT_DISABLE_STATUS_OK: TWT disable is successfully completed
295  * @HOST_TWT_DISABLE_STATUS_ROAM_IN_PROGRESS: roaming in progress
296  * @HOST_TWT_DISABLE_STATUS_CHAN_SW_IN_PROGRESS: channel switch in progress
297  * @HOST_TWT_DISABLE_STATUS_SCAN_IN_PROGRESS: scan in progress
298  * @HOST_TWT_DISABLE_STATUS_UNKNOWN_ERROR: unknown error
299  */
300 enum HOST_TWT_DISABLE_STATUS {
301 	HOST_TWT_DISABLE_STATUS_OK,
302 	HOST_TWT_DISABLE_STATUS_ROAM_IN_PROGRESS,
303 	HOST_TWT_DISABLE_STATUS_CHAN_SW_IN_PROGRESS,
304 	HOST_TWT_DISABLE_STATUS_SCAN_IN_PROGRESS,
305 	HOST_TWT_DISABLE_STATUS_UNKNOWN_ERROR,
306 };
307 
308 /**
309  * struct twt_disable_complete_event_param:
310  * @pdev_id: pdev_id for identifying the MAC.
311  * @status: From enum HOST_TWT_DISABLE_STATUS
312  */
313 struct twt_disable_complete_event_param {
314 	uint32_t pdev_id;
315 	uint32_t status;
316 };
317 
318 /**
319  * struct twt_ack_context: twt ack private context
320  * @vdev_id: vdev id
321  * @peer_macaddr: peer mac address
322  * @dialog_id: dialog id
323  * @twt_cmd_ack: twt ack command
324  * @status: twt command status
325  */
326 struct twt_ack_context {
327 	uint32_t vdev_id;
328 	struct qdf_mac_addr peer_macaddr;
329 	uint32_t dialog_id;
330 	uint32_t twt_cmd_ack;
331 	uint32_t status;
332 };
333 
334 /**
335  * struct twt_en_dis_context:  twt enable/disable private context
336  * @twt_role: twt role. When the upper layer is invoking requestor/responder
337  * enable/disable command via the TWT component API, Firmware WMI event
338  * doesn't have the info in the event params to distinguish if this enable or
339  * disable is for requestor or responder, hence TWT component stores this role
340  * before the request is sent to the firmware.
341  * @context: cookie. This is the cookie information passed back to the upper
342  * layer to help identify the request structure
343  */
344 struct twt_en_dis_context {
345 	enum TWT_ROLE twt_role;
346 	void *context;
347 };
348 
349 /**
350  * struct twt_ack_complete_event_param:
351  * @vdev_id: vdev id
352  * @peer_macaddr: peer mac address
353  * @dialog_id: dialog id
354  * @twt_cmd_ack: ack event to the corresponding twt command
355  * @status: twt command status
356  */
357 struct twt_ack_complete_event_param {
358 	uint32_t vdev_id;
359 	struct qdf_mac_addr peer_macaddr;
360 	uint32_t dialog_id;
361 	uint32_t twt_cmd_ack;
362 	uint32_t status;
363 };
364 
365 /**
366  * struct twt_session_stats_info:
367  * @vdev_id: id of VDEV for twt session
368  * @peer_mac: MAC address of node
369  * @event_type: Indicates TWT session type (SETUP/TEARDOWN/UPDATE)
370  * @flow_id: TWT flow identifier established with TWT peer
371  * @bcast:  If this is a broadcast TWT session
372  * @trig: If the TWT session is trigger enabled
373  * @announ: If the flow type is announced/unannounced
374  * @protection: If the TWT protection field is set
375  * @info_frame_disabled: If the TWT Information frame is disabled
376  * @pm_responder_bit_valid: is pm_responder_bit valid
377  * @pm_responder_bit: set pm_responder_bit
378  * @dialog_id: Dialog_id of current session
379  * @wake_dura_us: wake duration in us
380  * @wake_intvl_us: wake time interval in us
381  * @sp_offset_us: Time until initial TWT SP occurs
382  * @sp_tsf_us_lo: TWT wake time TSF in usecs lower bits - 31:0
383  * @sp_tsf_us_hi: TWT wake time TSF in usecs higher bits - 63:32
384  */
385 struct twt_session_stats_info {
386 	uint32_t vdev_id;
387 	struct qdf_mac_addr peer_mac;
388 	uint32_t event_type;
389 	uint32_t flow_id:16,
390 		 bcast:1,
391 		 trig:1,
392 		 announ:1,
393 		 protection:1,
394 		 info_frame_disabled:1,
395 		 pm_responder_bit_valid:1,
396 		 pm_responder_bit:1;
397 	uint32_t dialog_id;
398 	uint32_t wake_dura_us;
399 	uint32_t wake_intvl_us;
400 	uint32_t sp_offset_us;
401 	uint32_t sp_tsf_us_lo;
402 	uint32_t sp_tsf_us_hi;
403 };
404 
405 /**
406  * struct twt_session_stats_event_param:
407  * @pdev_id: pdev_id for identifying the MAC.
408  * @num_sessions: number of TWT sessions
409  * @twt_sessions: received TWT sessions
410  */
411 struct twt_session_stats_event_param {
412 	uint32_t pdev_id;
413 	uint32_t num_sessions;
414 };
415 
416 /* from IEEE 802.11ah section 9.4.2.200 */
417 enum HOST_TWT_COMMAND {
418 	HOST_TWT_COMMAND_REQUEST_TWT    = 0,
419 	HOST_TWT_COMMAND_SUGGEST_TWT    = 1,
420 	HOST_TWT_COMMAND_DEMAND_TWT     = 2,
421 	HOST_TWT_COMMAND_TWT_GROUPING   = 3,
422 	HOST_TWT_COMMAND_ACCEPT_TWT     = 4,
423 	HOST_TWT_COMMAND_ALTERNATE_TWT  = 5,
424 	HOST_TWT_COMMAND_DICTATE_TWT    = 6,
425 	HOST_TWT_COMMAND_REJECT_TWT     = 7,
426 };
427 
428 /**
429  * struct twt_add_dialog_param -
430  * @vdev_id: VDEV identifier
431  * @peer_macaddr: peer MAC address when vdev is AP VDEV
432  * @dialog_id: diaglog_id (TWT dialog ID)
433  *             This dialog ID must be unique within its vdev.
434  * @wake_intvl_us: TWT Wake Interval in units of us
435  * @wake_intvl_mantis: TWT Wake Interval Mantissa
436  *                 - wake_intvl_mantis must be <= 0xFFFF
437  *                 - wake_intvl_us must be divided evenly by wake_intvl_mantis,
438  *                   i.e., wake_intvl_us % wake_intvl_mantis == 0
439  *                 - the quotient of wake_intvl_us/wake_intvl_mantis must be
440  *                   2 to N-th(0<=N<=31) power,
441  *                   i.e., wake_intvl_us/wake_intvl_mantis == 2^N, 0<=N<=31
442  * @min_wake_intvl_us: Min tolerance limit of TWT wake interval
443  * @max_wake_intvl_us: Max tolerance limit of TWT wake interval
444  * @wake_dura_us: TWT Wake Duration in units of us, must be <= 0xFFFF
445  *                wake_dura_us must be divided evenly by 256,
446  *                i.e., wake_dura_us % 256 == 0
447  * @min_wake_dura_us: Min tolerance limit of TWT wake duration.
448  * @max_wake_dura_us: Max tolerance limit of TWT wake duration.
449  * @sp_offset_us: this long time after TWT setup the 1st SP will start.
450  * @twt_cmd: cmd from enum HOST_TWT_COMMAND
451  * @flag_bcast: 0 means Individual TWT,
452  *              1 means Broadcast TWT
453  * @flag_trigger: 0 means non-Trigger-enabled TWT,
454  *                1 means  means Trigger-enabled TWT
455  * @flag_flow_type:  0 means announced TWT,
456  *                   1 means un-announced TWT
457  * @flag_protection: 0 means TWT protection is required,
458  *                   1 means TWT protection is not required
459  * @b_twt_id0: 0 means BTWT recommendation will not be used
460  *             1 means BTWT recommendation will be used
461  * @flag_reserved: unused bits
462  * @b_twt_recommendation: defines types of frames tx during bTWT SP
463  * @b_twt_persistence: Countdown VAL frames to param update/teardown
464  * @wake_time_tsf: Absolute TSF value to start first TWT service period
465  * @announce_timeout_us: Timeout value before sending QoS NULL frame.
466  * @link_id_bitmap: MLD links to which R-TWT element applies
467  * @r_twt_dl_tid_bitmap: DL TIDs for R-TWT scheduling
468  * @r_twt_ul_tid_bitmap: UL TIDs for R-TWT scheduling
469  */
470 struct twt_add_dialog_param {
471 	uint32_t vdev_id;
472 	struct qdf_mac_addr peer_macaddr;
473 	uint32_t dialog_id;
474 	uint32_t wake_intvl_us;
475 	uint32_t wake_intvl_mantis;
476 	uint32_t min_wake_intvl_us;
477 	uint32_t max_wake_intvl_us;
478 	uint32_t wake_dura_us;
479 	uint32_t min_wake_dura_us;
480 	uint32_t max_wake_dura_us;
481 	uint32_t sp_offset_us;
482 	enum HOST_TWT_COMMAND twt_cmd;
483 	uint32_t
484 		flag_bcast:1,
485 		flag_trigger:1,
486 		flag_flow_type:1,
487 		flag_protection:1,
488 		flag_b_twt_id0:1,
489 		flag_reserved:11,
490 		b_twt_persistence:8,
491 		b_twt_recommendation:3;
492 	uint64_t wake_time_tsf;
493 	uint32_t announce_timeout_us;
494 	uint32_t link_id_bitmap;
495 	uint32_t r_twt_dl_tid_bitmap;
496 	uint32_t r_twt_ul_tid_bitmap;
497 };
498 
499 /**
500  * enum HOST_TWT_GET_STATS_STATUS - status code of TWT Get stats dialog id
501  * @HOST_TWT_GET_STATS_STATUS_OK: Get status TWT dialog successfully completed
502  * @HOST_TWT_GET_STATS_STATUS_DIALOG_ID_NOT_EXIST: TWT dialog ID does not exist
503  * @HOST_TWT_GET_STATS_STATUS_INVALID_PARAM: Invalid parameters
504  * @HOST_TWT_GET_STATS_STATUS_UNKNOWN_ERROR: Unknown error
505  */
506 enum HOST_TWT_GET_STATS_STATUS {
507 	HOST_TWT_GET_STATS_STATUS_OK,
508 	HOST_TWT_GET_STATS_STATUS_DIALOG_ID_NOT_EXIST,
509 	HOST_TWT_GET_STATS_STATUS_INVALID_PARAM,
510 	HOST_TWT_GET_STATS_STATUS_UNKNOWN_ERROR,
511 };
512 
513 /**
514  * enum HOST_TWT_ADD_STATUS - status code of TWT add dialog
515  * @HOST_TWT_ADD_STATUS_OK: add TWT dialog successfully completed
516  * @HOST_TWT_ADD_STATUS_TWT_NOT_ENABLED: TWT not enabled
517  * @HOST_TWT_ADD_STATUS_USED_DIALOG_ID: TWT dialog ID is already used
518  * @HOST_TWT_ADD_STATUS_INVALID_PARAM: invalid parameters
519  * @HOST_TWT_ADD_STATUS_NOT_READY: FW not ready
520  * @HOST_TWT_ADD_STATUS_NO_RESOURCE: FW resource exhausted
521  * @HOST_TWT_ADD_STATUS_NO_ACK: peer AP/STA did not ACK the
522  * request/response frame
523  * @HOST_TWT_ADD_STATUS_NO_RESPONSE: peer AP did not send the response frame
524  * @HOST_TWT_ADD_STATUS_DENIED: AP did not accept the request
525  * @HOST_TWT_ADD_STATUS_UNKNOWN_ERROR: adding TWT dialog failed with
526  * an unknown reason
527  * @HOST_TWT_ADD_STATUS_AP_PARAMS_NOT_IN_RANGE: peer AP wake interval,
528  * duration not in range
529  * @HOST_TWT_ADD_STATUS_AP_IE_VALIDATION_FAILED: peer AP IE Validation
530  * Failed
531  * @HOST_TWT_ADD_STATUS_ROAM_IN_PROGRESS: Roaming in progress
532  * @HOST_TWT_ADD_STATUS_CHAN_SW_IN_PROGRESS: Channel switch in progress
533  * @HOST_TWT_ADD_STATUS_SCAN_IN_PROGRESS: Scan is in progress
534  * @HOST_TWT_ADD_STATUS_LINK_SWITCH_IN_PROGRESS: link switch is in progress
535  * @HOST_TWT_ADD_STATUS_UNSUPPORTED_MODE_MLMR: MLMR not supported
536  */
537 enum HOST_TWT_ADD_STATUS {
538 	HOST_TWT_ADD_STATUS_OK,
539 	HOST_TWT_ADD_STATUS_TWT_NOT_ENABLED,
540 	HOST_TWT_ADD_STATUS_USED_DIALOG_ID,
541 	HOST_TWT_ADD_STATUS_INVALID_PARAM,
542 	HOST_TWT_ADD_STATUS_NOT_READY,
543 	HOST_TWT_ADD_STATUS_NO_RESOURCE,
544 	HOST_TWT_ADD_STATUS_NO_ACK,
545 	HOST_TWT_ADD_STATUS_NO_RESPONSE,
546 	HOST_TWT_ADD_STATUS_DENIED,
547 	HOST_TWT_ADD_STATUS_UNKNOWN_ERROR,
548 	HOST_TWT_ADD_STATUS_AP_PARAMS_NOT_IN_RANGE,
549 	HOST_TWT_ADD_STATUS_AP_IE_VALIDATION_FAILED,
550 	HOST_TWT_ADD_STATUS_ROAM_IN_PROGRESS,
551 	HOST_TWT_ADD_STATUS_CHAN_SW_IN_PROGRESS,
552 	HOST_TWT_ADD_STATUS_SCAN_IN_PROGRESS,
553 	HOST_TWT_ADD_STATUS_LINK_SWITCH_IN_PROGRESS,
554 	HOST_TWT_ADD_STATUS_UNSUPPORTED_MODE_MLMR,
555 };
556 
557 /**
558  * struct twt_add_dialog_additional_params -
559  * @twt_cmd: TWT command
560  * @bcast: 0 means Individual TWT
561  *         1 means Broadcast TWT
562  * @trig_en: 0 means non-Trigger-enabled TWT
563  *           1 means Trigger-enabled TWT
564  * @announce: 0 means announced TWT
565  *            1 means un-announced TWT
566  * @protection: 0 means TWT protection is required
567  *              1 means TWT protection is not required
568  * @b_twt_id0: 0 means non-0 B-TWT ID or I-TWT
569  *             1 means B-TWT ID 0
570  * @info_frame_disabled: 0 means TWT Information frame is enabled
571  *                       1 means TWT Information frame is disabled
572  * @pm_responder_bit_valid: 1 means responder pm mode field is valid
573  *                          0 means responder pm mode field is not valid
574  * @pm_responder_bit: 1 means that responder set responder pm mode to 1
575  *                    0 means that responder set responder pm mode to 0
576  * @wake_dur_us: wake duration in us
577  * @wake_intvl_us: wake time interval in us
578  * @sp_offset_us: Time until initial TWT SP occurs
579  * @sp_tsf_us_lo: TWT service period tsf in usecs lower bits - 31:0
580  * @sp_tsf_us_hi: TWT service period tsf in usecs higher bits - 63:32
581  */
582 struct twt_add_dialog_additional_params {
583 	uint32_t twt_cmd:8,
584 		 bcast:1,
585 		 trig_en:1,
586 		 announce:1,
587 		 protection:1,
588 		 b_twt_id0:1,
589 		 info_frame_disabled:1,
590 		 pm_responder_bit_valid:1,
591 		 pm_responder_bit:1;
592 	uint32_t wake_dur_us;
593 	uint32_t wake_intvl_us;
594 	uint32_t sp_offset_us;
595 	uint32_t sp_tsf_us_lo;
596 	uint32_t sp_tsf_us_hi;
597 };
598 
599 /**
600  * struct twt_add_dialog_complete_event_param:
601  * @vdev_id: VDEV identifier
602  * @peer_macaddr: Peer mac address
603  * @dialog_id: TWT dialog ID
604  * @status: refer to HOST_TWT_ADD_STATUS enum
605  * @num_additional_twt_params: no of additional_twt_params available
606  */
607 struct twt_add_dialog_complete_event_param {
608 	uint32_t vdev_id;
609 	struct qdf_mac_addr peer_macaddr;
610 	uint32_t dialog_id;
611 	uint32_t status;
612 	uint32_t num_additional_twt_params;
613 };
614 
615 /**
616  * struct twt_add_dialog_complete_event - TWT add dialog complete event
617  * @params: Fixed parameters for TWT add dialog complete event
618  * @additional_params: additional parameters for TWT add dialog complete event
619  *
620  * Holds the fixed and additional parameters from add dialog
621  * complete event
622  */
623 struct twt_add_dialog_complete_event {
624 	struct twt_add_dialog_complete_event_param params;
625 	struct twt_add_dialog_additional_params additional_params;
626 };
627 
628 /**
629  * struct twt_del_dialog_param -
630  * @vdev_id: VDEV identifier
631  * @peer_macaddr: Peer mac address
632  * @dialog_id: TWT dialog ID
633  * @b_twt_persistence: persistence val for b-twt
634  */
635 struct twt_del_dialog_param {
636 	uint32_t vdev_id;
637 	struct qdf_mac_addr peer_macaddr;
638 	uint32_t dialog_id;
639 #ifdef WLAN_SUPPORT_BCAST_TWT
640 	uint32_t b_twt_persistence;
641 #endif
642 };
643 
644 /**
645  * enum HOST_TWT_DEL_STATUS - status code of delete TWT dialog
646  * @HOST_TWT_DEL_STATUS_OK: deleting TWT dialog successfully completed
647  * @HOST_TWT_DEL_STATUS_DIALOG_ID_NOT_EXIST: TWT dialog ID not exists
648  * @HOST_TWT_DEL_STATUS_INVALID_PARAM: invalid parameters
649  * @HOST_TWT_DEL_STATUS_DIALOG_ID_BUSY: FW is in the process of handling
650  * this dialog
651  * @HOST_TWT_DEL_STATUS_NO_RESOURCE: FW resource exhausted
652  * @HOST_TWT_DEL_STATUS_NO_ACK: peer AP/STA did not ACK the request/response
653  * frame
654  * @HOST_TWT_DEL_STATUS_UNKNOWN_ERROR: deleting TWT dialog failed with an
655  * unknown reason
656  * @HOST_TWT_DEL_STATUS_PEER_INIT_TEARDOWN: Peer initiated TWT teardown
657  * @HOST_TWT_DEL_STATUS_ROAMING: TWT teardown due to roaming.
658  * @HOST_TWT_DEL_STATUS_CONCURRENCY: TWT session teardown due to
659  * concurrent session coming up.
660  * @HOST_TWT_DEL_STATUS_CHAN_SW_IN_PROGRESS: Channel switch in progress
661  * @HOST_TWT_DEL_STATUS_SCAN_IN_PROGRESS: Scan is in progress
662  * @HOST_TWT_DEL_STATUS_PS_DISABLE_TEARDOWN: PS disable TWT teardown
663  */
664 enum HOST_TWT_DEL_STATUS {
665 	HOST_TWT_DEL_STATUS_OK,
666 	HOST_TWT_DEL_STATUS_DIALOG_ID_NOT_EXIST,
667 	HOST_TWT_DEL_STATUS_INVALID_PARAM,
668 	HOST_TWT_DEL_STATUS_DIALOG_ID_BUSY,
669 	HOST_TWT_DEL_STATUS_NO_RESOURCE,
670 	HOST_TWT_DEL_STATUS_NO_ACK,
671 	HOST_TWT_DEL_STATUS_UNKNOWN_ERROR,
672 	HOST_TWT_DEL_STATUS_PEER_INIT_TEARDOWN,
673 	HOST_TWT_DEL_STATUS_ROAMING,
674 	HOST_TWT_DEL_STATUS_CONCURRENCY,
675 	HOST_TWT_DEL_STATUS_CHAN_SW_IN_PROGRESS,
676 	HOST_TWT_DEL_STATUS_SCAN_IN_PROGRESS,
677 	HOST_TWT_DEL_STATUS_PS_DISABLE_TEARDOWN,
678 };
679 
680 /**
681  * struct twt_del_dialog_complete_event_param -
682  * @vdev_id: VDEV identifier
683  * @peer_macaddr: Peer mac address
684  * @dialog_id: TWT dialog ID
685  * @b_twt_persistence: persistence val for b-twt
686  * @status: refer to HOST_TWT_DEL_STATUS enum
687  */
688 struct twt_del_dialog_complete_event_param {
689 	uint32_t vdev_id;
690 	struct qdf_mac_addr peer_macaddr;
691 	uint32_t dialog_id;
692 #ifdef WLAN_SUPPORT_BCAST_TWT
693 	uint32_t b_twt_persistence;
694 #endif
695 	uint32_t status;
696 };
697 
698 /**
699  * struct twt_pause_dialog_cmd_param -
700  * @vdev_id: VDEV identifier
701  * @peer_macaddr: Peer mac address
702  * @dialog_id: TWT dialog ID
703  */
704 struct twt_pause_dialog_cmd_param {
705 	uint32_t vdev_id;
706 	struct qdf_mac_addr peer_macaddr;
707 	uint32_t dialog_id;
708 };
709 
710 /**
711  * struct twt_nudge_dialog_cmd_param -
712  * @vdev_id: VDEV identifier
713  * @peer_macaddr: Peer mac address
714  * @dialog_id: TWT dialog ID
715  * @suspend_duration: TWT suspend duration in microseconds
716  * @next_twt_size: next TWT size
717  * @sp_start_offset: value to offset the start of service period
718  */
719 struct twt_nudge_dialog_cmd_param {
720 	uint32_t vdev_id;
721 	struct qdf_mac_addr peer_macaddr;
722 	uint32_t dialog_id;
723 	uint32_t suspend_duration;
724 	uint32_t next_twt_size;
725 	int32_t sp_start_offset;
726 };
727 
728 /**
729  * enum HOST_TWT_PAUSE_STATUS - status code of pause TWT dialog
730  * @HOST_TWT_PAUSE_STATUS_OK: pausing TWT dialog successfully completed
731  * @HOST_TWT_PAUSE_STATUS_DIALOG_ID_NOT_EXIST: TWT dialog ID not exists
732  * @HOST_TWT_PAUSE_STATUS_INVALID_PARAM: invalid parameters
733  * @HOST_TWT_PAUSE_STATUS_DIALOG_ID_BUSY: FW is in the process of handling
734  * this dialog
735  * @HOST_TWT_PAUSE_STATUS_NO_RESOURCE: FW resource exhausted
736  * @HOST_TWT_PAUSE_STATUS_NO_ACK: peer AP/STA did not ACK the
737  * request/response frame
738  * @HOST_TWT_PAUSE_STATUS_UNKNOWN_ERROR: pausing TWT dialog failed with an
739  * unknown reason
740  * @HOST_TWT_PAUSE_STATUS_ALREADY_PAUSED: TWT dialog already in paused state
741  * @HOST_TWT_PAUSE_STATUS_CHAN_SW_IN_PROGRESS: Channel switch in progress
742  * @HOST_TWT_PAUSE_STATUS_ROAM_IN_PROGRESS: Roaming is in progress
743  * @HOST_TWT_PAUSE_STATUS_SCAN_IN_PROGRESS: Scan is in progress
744  */
745 enum HOST_TWT_PAUSE_STATUS {
746 	HOST_TWT_PAUSE_STATUS_OK,
747 	HOST_TWT_PAUSE_STATUS_DIALOG_ID_NOT_EXIST,
748 	HOST_TWT_PAUSE_STATUS_INVALID_PARAM,
749 	HOST_TWT_PAUSE_STATUS_DIALOG_ID_BUSY,
750 	HOST_TWT_PAUSE_STATUS_NO_RESOURCE,
751 	HOST_TWT_PAUSE_STATUS_NO_ACK,
752 	HOST_TWT_PAUSE_STATUS_UNKNOWN_ERROR,
753 	HOST_TWT_PAUSE_STATUS_ALREADY_PAUSED,
754 	HOST_TWT_PAUSE_STATUS_CHAN_SW_IN_PROGRESS,
755 	HOST_TWT_PAUSE_STATUS_ROAM_IN_PROGRESS,
756 	HOST_TWT_PAUSE_STATUS_SCAN_IN_PROGRESS,
757 };
758 
759 /**
760  * struct twt_pause_dialog_complete_event_param -
761  * @vdev_id: VDEV identifier
762  * @peer_macaddr: Peer mac address
763  * @dialog_id: TWT dialog ID
764  * @status: refer to HOST_TWT_PAUSE_STATUS
765  */
766 struct twt_pause_dialog_complete_event_param {
767 	uint32_t vdev_id;
768 	struct qdf_mac_addr peer_macaddr;
769 	uint32_t dialog_id;
770 	enum HOST_TWT_PAUSE_STATUS status;
771 };
772 
773 /**
774  * enum HOST_TWT_NUDGE_STATUS - status code of nudge TWT dialog
775  * @HOST_TWT_NUDGE_STATUS_OK: nudge TWT dialog successfully completed
776  * @HOST_TWT_NUDGE_STATUS_DIALOG_ID_NOT_EXIST: TWT dialog ID not exists
777  * @HOST_TWT_NUDGE_STATUS_INVALID_PARAM: invalid parameters
778  * @HOST_TWT_NUDGE_STATUS_DIALOG_ID_BUSY: FW is in the process of handling
779  * this dialog
780  * @HOST_TWT_NUDGE_STATUS_NO_RESOURCE: FW resource exhausted
781  * @HOST_TWT_NUDGE_STATUS_NO_ACK: peer AP/STA did not ACK the
782  * request/response frame
783  * @HOST_TWT_NUDGE_STATUS_UNKNOWN_ERROR: nudge TWT dialog failed with an
784  * unknown reason
785  * @HOST_TWT_NUDGE_STATUS_ALREADY_PAUSED: TWT dialog already in paused state
786  * @HOST_TWT_NUDGE_STATUS_CHAN_SW_IN_PROGRESS: Channel switch in progress
787  * @HOST_TWT_NUDGE_STATUS_ROAM_IN_PROGRESS: Roaming in progress
788  * @HOST_TWT_NUDGE_STATUS_SCAN_IN_PROGRESS: Scan is in progress
789  */
790 enum HOST_TWT_NUDGE_STATUS {
791 	HOST_TWT_NUDGE_STATUS_OK,
792 	HOST_TWT_NUDGE_STATUS_DIALOG_ID_NOT_EXIST,
793 	HOST_TWT_NUDGE_STATUS_INVALID_PARAM,
794 	HOST_TWT_NUDGE_STATUS_DIALOG_ID_BUSY,
795 	HOST_TWT_NUDGE_STATUS_NO_RESOURCE,
796 	HOST_TWT_NUDGE_STATUS_NO_ACK,
797 	HOST_TWT_NUDGE_STATUS_UNKNOWN_ERROR,
798 	HOST_TWT_NUDGE_STATUS_ALREADY_PAUSED,
799 	HOST_TWT_NUDGE_STATUS_CHAN_SW_IN_PROGRESS,
800 	HOST_TWT_NUDGE_STATUS_ROAM_IN_PROGRESS,
801 	HOST_TWT_NUDGE_STATUS_SCAN_IN_PROGRESS,
802 };
803 
804 /**
805  * struct twt_nudge_dialog_complete_event_param -
806  * @vdev_id: VDEV identifier
807  * @peer_macaddr: Peer mac address
808  * @dialog_id: TWT dialog ID
809  * @status: refer to HOST_TWT_PAUSE_STATUS
810  * @next_twt_tsf_us_lo: TSF lower bits (31:0) of next wake time
811  * @next_twt_tsf_us_hi: TSF higher bits (32:63) of next wake time
812  */
813 struct twt_nudge_dialog_complete_event_param {
814 	uint32_t vdev_id;
815 	struct qdf_mac_addr peer_macaddr;
816 	uint32_t dialog_id;
817 	enum     HOST_TWT_NUDGE_STATUS status;
818 	uint32_t next_twt_tsf_us_lo;
819 	uint32_t next_twt_tsf_us_hi;
820 };
821 
822 /**
823  * struct twt_resume_dialog_cmd_param -
824  * @vdev_id: VDEV identifier
825  * @peer_macaddr: Peer mac address
826  * @dialog_id: TWT dialog ID
827  * @sp_offset_us: this long time after TWT resumed the 1st SP will start
828  * @next_twt_size: Next TWT subfield Size.
829  *                 Refer IEEE 802.11ax section "9.4.1.60 TWT Information field"
830  */
831 struct twt_resume_dialog_cmd_param {
832 	uint32_t vdev_id;
833 	struct qdf_mac_addr peer_macaddr;
834 	uint32_t dialog_id;
835 	uint32_t sp_offset_us;
836 	uint32_t next_twt_size;
837 };
838 
839 /**
840  * enum HOST_TWT_RESUME_STATUS - status code of resume TWT dialog
841  * @HOST_TWT_RESUME_STATUS_OK: resuming TWT dialog successfully completed
842  * @HOST_TWT_RESUME_STATUS_DIALOG_ID_NOT_EXIST: TWT dialog ID not exists
843  * @HOST_TWT_RESUME_STATUS_INVALID_PARAM: invalid parameters
844  * @HOST_TWT_RESUME_STATUS_DIALOG_ID_BUSY: FW is in the process of handling
845  * this dialog
846  * @HOST_TWT_RESUME_STATUS_NOT_PAUSED: dialog not paused currently
847  * @HOST_TWT_RESUME_STATUS_NO_RESOURCE: FW resource exhausted
848  * @HOST_TWT_RESUME_STATUS_NO_ACK: peer AP/STA did not ACK the
849  * request/response frame
850  * @HOST_TWT_RESUME_STATUS_UNKNOWN_ERROR: resuming TWT dialog failed with an
851  * unknown reason
852  * @HOST_TWT_RESUME_STATUS_CHAN_SW_IN_PROGRESS: Channel switch in progress
853  * @HOST_TWT_RESUME_STATUS_ROAM_IN_PROGRESS: Roaming in progress
854  * @HOST_TWT_RESUME_STATUS_SCAN_IN_PROGRESS: Scan is in progress
855  */
856 enum HOST_TWT_RESUME_STATUS {
857 	HOST_TWT_RESUME_STATUS_OK,
858 	HOST_TWT_RESUME_STATUS_DIALOG_ID_NOT_EXIST,
859 	HOST_TWT_RESUME_STATUS_INVALID_PARAM,
860 	HOST_TWT_RESUME_STATUS_DIALOG_ID_BUSY,
861 	HOST_TWT_RESUME_STATUS_NOT_PAUSED,
862 	HOST_TWT_RESUME_STATUS_NO_RESOURCE,
863 	HOST_TWT_RESUME_STATUS_NO_ACK,
864 	HOST_TWT_RESUME_STATUS_UNKNOWN_ERROR,
865 	HOST_TWT_RESUME_STATUS_CHAN_SW_IN_PROGRESS,
866 	HOST_TWT_RESUME_STATUS_ROAM_IN_PROGRESS,
867 	HOST_TWT_RESUME_STATUS_SCAN_IN_PROGRESS,
868 };
869 
870 /**
871  * struct twt_resume_dialog_complete_event_param -
872  * @vdev_id: VDEV identifier
873  * @peer_macaddr: Peer mac address
874  * @dialog_id: TWT dialog ID
875  * @status: refer to HOST_TWT_RESUME_STATUS
876  */
877 struct twt_resume_dialog_complete_event_param {
878 	uint32_t vdev_id;
879 	struct qdf_mac_addr peer_macaddr;
880 	uint32_t dialog_id;
881 	uint32_t status;
882 };
883 
884 /**
885  * enum HOST_TWT_NOTIFY_STATUS - status code of notify TWT event
886  * @HOST_TWT_NOTIFY_EVENT_READY: FW is ready to process the TWT setup request.
887  * @HOST_TWT_NOTIFY_EVENT_AP_TWT_REQ_BIT_SET: AP set the TWT required bit
888  * @HOST_TWT_NOTIFY_EVENT_AP_TWT_REQ_BIT_CLEAR: AP cleared the TWT required bit
889  */
890 enum HOST_TWT_NOTIFY_STATUS {
891 	HOST_TWT_NOTIFY_EVENT_READY,
892 	HOST_TWT_NOTIFY_EVENT_AP_TWT_REQ_BIT_SET,
893 	HOST_TWT_NOTIFY_EVENT_AP_TWT_REQ_BIT_CLEAR,
894 };
895 
896 /**
897  * struct twt_notify_event_param -
898  * @vdev_id: VDEV identifier
899  * @status: refer to HOST_TWT_NOTIFY_STATUS
900  */
901 struct twt_notify_event_param {
902 	uint32_t vdev_id;
903 	enum HOST_TWT_NOTIFY_STATUS status;
904 };
905 
906 /**
907  * enum HOST_TWT_NEXT_WORK_ACTION - next action of TWT worker thread
908  * @HOST_TWT_SEND_DELETE_CMD: Send TWT delete command request
909  */
910 enum HOST_TWT_NEXT_WORK_ACTION {
911 	HOST_TWT_SEND_DELETE_CMD = 1,
912 };
913 
914 /**
915  * struct twt_work_params
916  * @peer_macaddr: peer mac address
917  * @dialog_id: Dialog ID
918  * @is_ps_disabled: Whether power save is disabled or not.
919  */
920 struct twt_work_params {
921 	struct qdf_mac_addr peer_macaddr;
922 	uint32_t dialog_id;
923 	bool is_ps_disabled;
924 };
925 #ifdef WLAN_SUPPORT_BCAST_TWT
926 /**
927  * struct twt_btwt_invite_sta_cmd_param -
928  * @vdev_id: VDEV identifier
929  * @peer_macaddr: Peer mac address
930  * @dialog_id: TWT dialog ID
931  * @r_twt_dl_tid_bitmap: rTWT DL tids bitmap
932  * @r_twt_ul_tid_bitmap: rTWT UL tids bitmap
933  */
934 struct twt_btwt_invite_sta_cmd_param {
935 	uint32_t vdev_id;
936 	struct qdf_mac_addr peer_macaddr;
937 	uint32_t dialog_id;
938 	uint32_t r_twt_dl_tid_bitmap;
939 	uint32_t r_twt_ul_tid_bitmap;
940 };
941 
942 /**
943  * enum HOST_TWT_INVITATION_BTWT_STATUS - status code of TWT Invitation
944  *                              dialog
945  * @HOST_TWT_INVITATION_BTWT_STATUS_OK: BTWT invitation successfully
946  *                              completed
947  * @HOST_TWT_INVITATION_BTWT_STATUS_DIALOG_ID_NOT_EXIST: BTWT dialog ID not
948  *                              exists
949  * @HOST_TWT_INVITATION_BTWT_STATUS_INVALID_PARAM: invalid parameters
950  * @HOST_TWT_INVITATION_BTWT_STATUS_DIALOG_ID_BUSY: FW is in the process of
951  *                              handling this dialog
952  * @HOST_TWT_INVITATION_BTWT_STATUS_NO_RESOURCE: FW resource exhausted
953  * @HOST_TWT_INVITATION_BTWT_STATUS_NO_ACK: peer AP/STA did not ACK the
954  *                              request/response frame
955  * @HOST_TWT_INVITATION_BTWT_STATUS_UNKNOWN_ERROR: BTWT invitation failed
956  *                              with an unknown reason
957  */
958 enum HOST_TWT_INVITATION_BTWT_STATUS {
959 	HOST_TWT_INVITATION_BTWT_STATUS_OK,
960 	HOST_TWT_INVITATION_BTWT_STATUS_DIALOG_ID_NOT_EXIST,
961 	HOST_TWT_INVITATION_BTWT_STATUS_INVALID_PARAM,
962 	HOST_TWT_INVITATION_BTWT_STATUS_DIALOG_ID_BUSY,
963 	HOST_TWT_INVITATION_BTWT_STATUS_NO_RESOURCE,
964 	HOST_TWT_INVITATION_BTWT_STATUS_NO_ACK,
965 	HOST_TWT_INVITATION_BTWT_STATUS_UNKNOWN_ERROR,
966 };
967 
968 /**
969  * struct twt_btwt_invite_sta_complete_event_param -
970  * @vdev_id: VDEV identifier
971  * @peer_macaddr: Peer mac address
972  * @dialog_id: BTWT dialog ID
973  * @status: refer to HOST_TWT_INVITATION_BTWT_STATUS
974  */
975 struct twt_btwt_invite_sta_complete_event_param {
976 	uint32_t vdev_id;
977 	struct qdf_mac_addr peer_macaddr;
978 	uint32_t dialog_id;
979 	uint32_t status;
980 };
981 
982 /**
983  * struct twt_btwt_remove_sta_cmd_param -
984  * @vdev_id: VDEV identifier
985  * @peer_macaddr: Peer mac address
986  * @dialog_id: BTWT dialog ID
987  * @r_twt_dl_tid_bitmap: rTWT DL tids bitmap
988  * @r_twt_ul_tid_bitmap: rTWT UL tids bitmap
989  */
990 struct twt_btwt_remove_sta_cmd_param {
991 	uint32_t vdev_id;
992 	struct qdf_mac_addr peer_macaddr;
993 	uint32_t dialog_id;
994 	uint32_t r_twt_dl_tid_bitmap;
995 	uint32_t r_twt_ul_tid_bitmap;
996 };
997 
998 /**
999  * enum HOST_TWT_KICKOFF_BTWT_STATUS - status code of kickoff BTWT dialog
1000  * @HOST_TWT_KICKOFF_BTWT_STATUS_OK: TWT kickoff successfully completed
1001  * @HOST_TWT_KICKOFF_BTWT_STATUS_DIALOG_ID_NOT_EXIST: BTWT dialog ID not
1002  *                              exists
1003  * @HOST_TWT_KICKOFF_BTWT_STATUS_INVALID_PARAM: invalid parameters
1004  * @HOST_TWT_KICKOFF_BTWT_STATUS_DIALOG_ID_BUSY: FW is in the process of
1005  *                              handling this dialog
1006  * @HOST_TWT_KICKOFF_BTWT_STATUS_NOT_PAUSED: Dialog not currently paused
1007  * @HOST_TWT_KICKOFF_BTWT_STATUS_NO_RESOURCE: FW resource exhausted
1008  * @HOST_TWT_KICKOFF_BTWT_STATUS_NO_ACK: peer AP/STA did not ACK the
1009  *                              request/response frame
1010  * @HOST_TWT_KICKOFF_BTWT_STATUS_UNKNOWN_ERROR: BTWT kickoff failed with an
1011  *                              unknown reason
1012  */
1013 enum HOST_TWT_KICKOFF_BTWT_STATUS {
1014 	HOST_TWT_KICKOFF_BTWT_STATUS_OK,
1015 	HOST_TWT_KICKOFF_BTWT_STATUS_DIALOG_ID_NOT_EXIST,
1016 	HOST_TWT_KICKOFF_BTWT_STATUS_INVALID_PARAM,
1017 	HOST_TWT_KICKOFF_BTWT_STATUS_DIALOG_ID_BUSY,
1018 	HOST_TWT_KICKOFF_BTWT_STATUS_NOT_PAUSED,
1019 	HOST_TWT_KICKOFF_BTWT_STATUS_NO_RESOURCE,
1020 	HOST_TWT_KICKOFF_BTWT_STATUS_NO_ACK,
1021 	HOST_TWT_KICKOFF_BTWT_STATUS_UNKNOWN_ERROR,
1022 };
1023 
1024 /**
1025  * struct twt_btwt_remove_sta_complete_event_param -
1026  * @vdev_id: VDEV identifier
1027  * @peer_macaddr: Peer mac address
1028  * @dialog_id: BTWT dialog ID
1029  * @status: refer to HOST_TWT_KICKOFF_BTWT_STATUS
1030  */
1031 struct twt_btwt_remove_sta_complete_event_param {
1032 	uint32_t vdev_id;
1033 	struct qdf_mac_addr peer_macaddr;
1034 	uint32_t dialog_id;
1035 	uint32_t status;
1036 };
1037 #endif
1038 
1039 /**
1040  * enum HOST_TWT_CMD_FOR_ACK_EVENT - Ack event for different TWT command
1041  * @HOST_TWT_ADD_DIALOG_CMDID: Ack event for add dialog command
1042  * @HOST_TWT_DEL_DIALOG_CMDID: Ack event for delete dialog command
1043  * @HOST_TWT_PAUSE_DIALOG_CMDID: Ack event for pause command
1044  * @HOST_TWT_RESUME_DIALOG_CMDID: Ack event for resume command
1045  * @HOST_TWT_NUDGE_DIALOG_CMDID: Ack event for nudge command
1046  * @HOST_TWT_UNKNOWN_CMDID: Ack event for unknown TWT command
1047  */
1048 enum HOST_TWT_CMD_FOR_ACK_EVENT {
1049 	HOST_TWT_ADD_DIALOG_CMDID = 0,
1050 	HOST_TWT_DEL_DIALOG_CMDID,
1051 	HOST_TWT_PAUSE_DIALOG_CMDID,
1052 	HOST_TWT_RESUME_DIALOG_CMDID,
1053 	HOST_TWT_NUDGE_DIALOG_CMDID,
1054 	HOST_TWT_UNKNOWN_CMDID,
1055 };
1056 
1057 /* access categories */
1058 enum twt_traffic_ac {
1059 	TWT_AC_VO  = 0,
1060 	TWT_AC_VI  = 1,
1061 	TWT_AC_BE  = 2,
1062 	TWT_AC_BK  = 3,
1063 	TWT_AC_MAX = 4,
1064 };
1065 
1066 /**
1067  * enum twt_disable_reason - twt disable/enable reason
1068  * @REASON_PMO_SUSPEND: reason is suspended
1069  */
1070 enum twt_disable_reason {
1071 	REASON_PMO_SUSPEND  = 0x1,
1072 };
1073 
1074 #endif /* _WLAN_TWT_PUBLIC_STRUCTS_H_ */
1075 
1076