xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_tx_defs.h (revision 8cfe6b10058a04cafb17eed051f2ddf11bee8931)
1 /*
2  * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 /**
21  * DOC: wlan_vdev_mgr_tgt_if_tx_defs.h
22  *
23  * This file provides definitions to data structures required for vdev Tx ops
24  */
25 
26 #ifndef __WLAN_VDEV_MGR_TX_OPS_DEFS_H__
27 #define __WLAN_VDEV_MGR_TX_OPS_DEFS_H__
28 
29 #include <qdf_nbuf.h>
30 #ifdef WLAN_FEATURE_11BE_MLO
31 #include <wlan_mlo_mgr_public_structs.h>
32 #endif
33 #include <wlan_mlme_dbg.h>
34 
35 /* slot time long */
36 #define WLAN_MLME_VDEV_SLOT_TIME_LONG   0x1
37 /* slot time short */
38 #define WLAN_MLME_VDEV_SLOT_TIME_SHORT  0x2
39 
40 #define WLAN_MU_SNIF_MAX_AIDS 4
41 
42 /**
43  * enum mlme_dev_setparam - type of set params pdev/vdev
44  * @MLME_PDEV_SETPARAM: pdev param
45  * @MLME_VDEV_SETPARAM: vdev param
46  */
47 enum mlme_dev_setparam {
48 	MLME_PDEV_SETPARAM = 0,
49 	MLME_VDEV_SETPARAM,
50 };
51 
52 /**
53  * enum mlme_bcn_tx_rate_code - beacon tx rate code
54  * @MLME_BCN_TX_RATE_CODE_1_M:
55  * @MLME_BCN_TX_RATE_CODE_2_M:
56  * @MLME_BCN_TX_RATE_CODE_5_5_M:
57  * @MLME_BCN_TX_RATE_CODE_6_M:
58  * @MLME_BCN_TX_RATE_CODE_9_M:
59  * @MLME_BCN_TX_RATE_CODE_11M:
60  * @MLME_BCN_TX_RATE_CODE_12_M:
61  * @MLME_BCN_TX_RATE_CODE_18_M:
62  * @MLME_BCN_TX_RATE_CODE_24_M:
63  * @MLME_BCN_TX_RATE_CODE_36_M:
64  * @MLME_BCN_TX_RATE_CODE_48_M:
65  * @MLME_BCN_TX_RATE_CODE_54_M:
66  */
67 enum mlme_bcn_tx_rate_code {
68 	MLME_BCN_TX_RATE_CODE_1_M = 0x43,
69 	MLME_BCN_TX_RATE_CODE_2_M = 0x42,
70 	MLME_BCN_TX_RATE_CODE_5_5_M = 0x41,
71 	MLME_BCN_TX_RATE_CODE_6_M = 0x03,
72 	MLME_BCN_TX_RATE_CODE_9_M = 0x07,
73 	MLME_BCN_TX_RATE_CODE_11M = 0x40,
74 	MLME_BCN_TX_RATE_CODE_12_M = 0x02,
75 	MLME_BCN_TX_RATE_CODE_18_M = 0x06,
76 	MLME_BCN_TX_RATE_CODE_24_M = 0x01,
77 	MLME_BCN_TX_RATE_CODE_36_M = 0x05,
78 	MLME_BCN_TX_RATE_CODE_48_M = 0x00,
79 	MLME_BCN_TX_RATE_CODE_54_M = 0x04,
80 };
81 
82 /**
83  * enum wlan_mlme_host_sta_ps_param_uapsd - STA UPASD params
84  * @WLAN_MLME_HOST_STA_PS_UAPSD_AC0_DELIVERY_EN:
85  * @WLAN_MLME_HOST_STA_PS_UAPSD_AC0_TRIGGER_EN:
86  * @WLAN_MLME_HOST_STA_PS_UAPSD_AC1_DELIVERY_EN:
87  * @WLAN_MLME_HOST_STA_PS_UAPSD_AC1_TRIGGER_EN:
88  * @WLAN_MLME_HOST_STA_PS_UAPSD_AC2_DELIVERY_EN:
89  * @WLAN_MLME_HOST_STA_PS_UAPSD_AC2_TRIGGER_EN:
90  * @WLAN_MLME_HOST_STA_PS_UAPSD_AC3_DELIVERY_EN:
91  * @WLAN_MLME_HOST_STA_PS_UAPSD_AC3_TRIGGER_EN:
92  */
93 enum wlan_mlme_host_sta_ps_param_uapsd {
94 	WLAN_MLME_HOST_STA_PS_UAPSD_AC0_DELIVERY_EN = (1 << 0),
95 	WLAN_MLME_HOST_STA_PS_UAPSD_AC0_TRIGGER_EN  = (1 << 1),
96 	WLAN_MLME_HOST_STA_PS_UAPSD_AC1_DELIVERY_EN = (1 << 2),
97 	WLAN_MLME_HOST_STA_PS_UAPSD_AC1_TRIGGER_EN  = (1 << 3),
98 	WLAN_MLME_HOST_STA_PS_UAPSD_AC2_DELIVERY_EN = (1 << 4),
99 	WLAN_MLME_HOST_STA_PS_UAPSD_AC2_TRIGGER_EN  = (1 << 5),
100 	WLAN_MLME_HOST_STA_PS_UAPSD_AC3_DELIVERY_EN = (1 << 6),
101 	WLAN_MLME_HOST_STA_PS_UAPSD_AC3_TRIGGER_EN  = (1 << 7),
102 };
103 
104 /**
105  * enum wlan_mlme_host_vdev_start_status - vdev start status code
106  * @WLAN_MLME_HOST_VDEV_START_OK:
107  * @WLAN_MLME_HOST_VDEV_START_CHAN_INVALID:
108  * @WLAN_MLME_HOST_VDEV_START_CHAN_BLOCKED:
109  * @WLAN_MLME_HOST_VDEV_START_CHAN_DFS_VIOLATION:
110  * @WLAN_MLME_HOST_VDEV_START_CHAN_INVALID_REGDOMAIN:
111  * @WLAN_MLME_HOST_VDEV_START_CHAN_INVALID_BAND:
112  * @WLAN_MLME_HOST_VDEV_START_TIMEOUT:
113  * @WLAN_MLME_HOST_VDEV_START_MAX_REASON: Max enumeration
114  */
115 enum wlan_mlme_host_vdev_start_status {
116 	WLAN_MLME_HOST_VDEV_START_OK = 0,
117 	WLAN_MLME_HOST_VDEV_START_CHAN_INVALID,
118 	WLAN_MLME_HOST_VDEV_START_CHAN_BLOCKED,
119 	WLAN_MLME_HOST_VDEV_START_CHAN_DFS_VIOLATION,
120 	WLAN_MLME_HOST_VDEV_START_CHAN_INVALID_REGDOMAIN,
121 	WLAN_MLME_HOST_VDEV_START_CHAN_INVALID_BAND,
122 	WLAN_MLME_HOST_VDEV_START_TIMEOUT,
123 	/* Add new response status code from here */
124 	WLAN_MLME_HOST_VDEV_START_MAX_REASON,
125 };
126 
127 /**
128  * string_from_start_rsp_status() - Convert start response status to string
129  * @start_rsp: start response status
130  *
131  * Please note to add new string in the array at index equal to
132  * its enum value in wlan_mlme_host_vdev_start_status.
133  */
134 static inline char *string_from_start_rsp_status(
135 			enum wlan_mlme_host_vdev_start_status start_rsp)
136 {
137 	static const char *strings[] = { "START_OK",
138 					"CHAN_INVALID",
139 					"CHAN_BLOCKED",
140 					"CHAN_DFS_VIOLATION",
141 					"CHAN_INVALID_REGDOMAIN",
142 					"CHAN_INVALID_BAND",
143 					"START_RESPONSE_TIMEOUT",
144 					"START_RESPONSE_UNKNOWN"};
145 
146 	if (start_rsp >= WLAN_MLME_HOST_VDEV_START_MAX_REASON)
147 		start_rsp = WLAN_MLME_HOST_VDEV_START_MAX_REASON;
148 
149 	return (char *)strings[start_rsp];
150 }
151 
152 /**
153  * enum wlan_mlme_host_start_event_param - start/restart resp event
154  * @WLAN_MLME_HOST_VDEV_START_RESP_EVENT: Start response
155  * @WLAN_MLME_HOST_VDEV_RESTART_RESP_EVENT: Restart response
156  */
157 enum wlan_mlme_host_start_event_param {
158 	WLAN_MLME_HOST_VDEV_START_RESP_EVENT = 0,
159 	WLAN_MLME_HOST_VDEV_RESTART_RESP_EVENT,
160 };
161 
162 /**
163  * enum wlan_mlme_custom_aggr_type: custom aggregate type
164  * @WLAN_MLME_CUSTOM_AGGR_TYPE_AMPDU: A-MPDU aggregation
165  * @WLAN_MLME_CUSTOM_AGGR_TYPE_AMSDU: A-MSDU aggregation
166  * @WLAN_MLME_CUSTOM_AGGR_TYPE_MAX: Max type
167  */
168 enum wlan_mlme_custom_aggr_type {
169 	WLAN_MLME_CUSTOM_AGGR_TYPE_AMPDU = 0,
170 	WLAN_MLME_CUSTOM_AGGR_TYPE_AMSDU = 1,
171 	WLAN_MLME_CUSTOM_AGGR_TYPE_MAX,
172 };
173 
174 /**
175  * struct sta_ps_params - sta ps cmd parameter
176  * @vdev_id: vdev id
177  * @param_id: sta ps parameter
178  * @value: sta ps parameter value
179  */
180 struct sta_ps_params {
181 	uint32_t vdev_id;
182 	uint32_t param_id;
183 	uint32_t value;
184 };
185 
186 /**
187  * struct rnr_bss_tbtt_info_param: Reported Vdev info
188  * @bss_mac: Mac address
189  * @beacon_intval: Beacon interval of reported AP
190  * @opclass: Channel Opclass
191  * @chan_idx: Channel number
192  * @next_qtime_tbtt_high: Tbtt higher 32bit
193  * @next_qtime_tbtt_low: Tbtt lower 32bit
194  */
195 struct rnr_bss_tbtt_info_param {
196 	uint8_t bss_mac[QDF_MAC_ADDR_SIZE];
197 	uint32_t beacon_intval;
198 	uint32_t opclass;
199 	uint32_t chan_idx;
200 	uint32_t next_qtime_tbtt_high;
201 	uint32_t next_qtime_tbtt_low;
202 };
203 
204 /**
205  * struct rnr_tbtt_multisoc_sync_param - Params to
206  * sync tbtt with non self SoCs timers
207  * @pdev_id: Host pdev_id
208  * @rnr_vap_count: Count of Vap to be included in WMI cmd
209  * @cmd_type: Set/Get tbtt sync info
210  * @rnr_bss_tbtt: Reported AP Vap info
211  */
212 struct rnr_tbtt_multisoc_sync_param {
213 	uint32_t pdev_id;
214 	uint8_t rnr_vap_count;
215 	uint8_t cmd_type;
216 	struct rnr_bss_tbtt_info_param *rnr_bss_tbtt;
217 };
218 
219 /**
220  * struct tbttoffset_params - Tbttoffset event params
221  * @vdev_id: Virtual AP device identifier
222  * @tbttoffset : Tbttoffset for the virtual AP device
223  * @vdev_tbtt_qtime_lo: Tbtt qtime low value
224  * @vdev_tbtt_qtime_hi: Tbtt qtime high value
225  */
226 struct tbttoffset_params {
227 	uint32_t vdev_id;
228 	uint32_t tbttoffset;
229 	uint32_t vdev_tbtt_qtime_lo;
230 	uint32_t vdev_tbtt_qtime_hi;
231 };
232 
233 /* Follow bitmap for sending the CSA switch count event */
234 #define WLAN_CSA_EVENT_BMAP_VALID_MASK 0X80000000
235 /* Send only when the switch count becomes zero, added for backward
236  * compatibility same can also be achieved by setting bitmap to 0X80000001.
237  */
238 #define WLAN_CSA_EVENT_BMAP_SWITCH_COUNT_ZERO    0
239 /* Send CSA switch count event for every update to switch count */
240 #define WLAN_CSA_EVENT_BMAP_ALL                  0XFFFFFFFF
241 
242 #ifdef WLAN_FEATURE_11BE_MLO
243 /**
244  * struct ml_bcn_partner_info - Partner link beacon information
245  * @vdev_id: Vdev id
246  * @hw_link_id: Unique hw link id across SoCs
247  * @beacon_interval: Beacon interval
248  * @csa_switch_count_offset: CSA switch count offset in beacon frame
249  * @ext_csa_switch_count_offset: ECSA switch count offset in beacon frame
250  * @per_sta_profile_offset: Pointer to per-STA profile info
251  * @quiet_ie_offset: Quiet IE offset
252  * @is_other_ie_present: Set true if other IEs are present in per-STA profile.
253  *                       If the flag is set to false, FW will remove per-STA
254  *                       profile IE when Quiet count reaches to 0.
255  */
256 struct ml_bcn_partner_info {
257 	uint32_t vdev_id;
258 	uint32_t hw_link_id;
259 	uint32_t beacon_interval;
260 	uint32_t csa_switch_count_offset;
261 	uint32_t ext_csa_switch_count_offset;
262 	uint32_t per_sta_profile_offset;
263 	uint32_t quiet_ie_offset;
264 	uint32_t is_other_ie_present;
265 };
266 
267 /**
268  * struct mlo_bcn_templ_partner_links - ML partner links
269  * @num_links: Number of links
270  * @partner_info: Partner link info
271  */
272 struct mlo_bcn_templ_partner_links {
273 	uint8_t num_links;
274 	struct ml_bcn_partner_info partner_info[WLAN_UMAC_MLO_MAX_VDEVS];
275 };
276 
277 /**
278  * struct mlo_bcn_tmpl_ml_info - Impacted link critical update information
279  * @hw_link_id: Unique hw link id across SoCs
280  * CU vdev map for the Critical update category-1 (Inclusion of CU IES)
281  * @cu_vdev_map_cat1_lo: bits 31:0 to represent vdev ids 0 to 31
282  * @cu_vdev_map_cat1_hi: bits 63:32 to represent vdev ids 32 to 63
283  * CU vdev map for the Critical update category-2 (modification of CU IES)
284  * @cu_vdev_map_cat2_lo: bits 31:0 to represent vdev ids 0 to 31
285  * @cu_vdev_map_cat2_hi: bits 63:32 to represent vdev ids 32 to 63
286  */
287 struct mlo_bcn_tmpl_ml_info {
288 	uint32_t hw_link_id;
289 	uint32_t cu_vdev_map_cat1_lo;
290 	uint32_t cu_vdev_map_cat1_hi;
291 	uint32_t cu_vdev_map_cat2_lo;
292 	uint32_t cu_vdev_map_cat2_hi;
293 };
294 #endif
295 
296 /**
297  * struct beacon_tmpl_params - beacon template cmd parameter
298  * @vdev_id: vdev id
299  * @tim_ie_offset: tim ie offset
300  * @mbssid_ie_offset: mbssid ie offset
301  * @tmpl_len: beacon template length
302  * @tmpl_len_aligned: beacon template alignment
303  * @csa_switch_count_offset: CSA switch count offset in beacon frame
304  * @ext_csa_switch_count_offset: ECSA switch count offset in beacon frame
305  * @esp_ie_offset: ESP IE offset in beacon frame
306  * @mu_edca_ie_offset: Mu EDCA IE offset in beacon frame
307  * @ema_params: The 4 octets in this field respectively indicate
308  *     ema_beacon_profile_periodicity, ema_beacon_tmpl_idx,
309  *     ema_first_tmpl and ema_last_tmpl in the order of low
310  *     to high
311  * @csa_event_bitmap: Specify when to send the CSA switch count status from FW
312  *     to host. Example: if CSA switch count event is needed to be sent when the
313  *     switch count is 0, 1, 4, and 5, set the bitmap to (0X80000033)
314  * @enable_bigtk: enable bigtk or not
315  * @frm: beacon template parameter
316  * @mlo_partner: Partner link information
317  * @cu_ml_info: Impacted link critical update information
318  */
319 struct beacon_tmpl_params {
320 	uint8_t vdev_id;
321 	uint32_t tim_ie_offset;
322 	uint32_t mbssid_ie_offset;
323 	uint32_t tmpl_len;
324 	uint32_t tmpl_len_aligned;
325 	uint32_t csa_switch_count_offset;
326 	uint32_t ext_csa_switch_count_offset;
327 	uint32_t esp_ie_offset;
328 	uint32_t mu_edca_ie_offset;
329 	uint32_t ema_params;
330 	uint32_t csa_event_bitmap;
331 	bool enable_bigtk;
332 	uint8_t *frm;
333 #ifdef WLAN_FEATURE_11BE_MLO
334 	struct mlo_bcn_templ_partner_links mlo_partner;
335 	struct mlo_bcn_tmpl_ml_info cu_ml_info;
336 #endif
337 };
338 
339 /**
340  * struct beacon_params - beacon cmd parameter
341  * @vdev_id: vdev id
342  * @beacon_interval: Beacon interval
343  * @wbuf: beacon buffer
344  * @frame_ctrl: frame control field
345  * @bcn_txant: beacon antenna
346  * @is_dtim_count_zero: is it dtim beacon
347  * @is_bitctl_reqd: is Bit control required
348  * @is_high_latency: Is this high latency target
349  */
350 struct beacon_params {
351 	uint8_t vdev_id;
352 	uint16_t beacon_interval;
353 	qdf_nbuf_t wbuf;
354 	uint16_t frame_ctrl;
355 	uint32_t bcn_txant;
356 	bool is_dtim_count_zero;
357 	bool is_bitctl_reqd;
358 	bool is_high_latency;
359 };
360 
361 /* struct fils_discovery_tmpl_params - FILS Discovery template cmd parameter
362  * @vdev_id: vdev ID
363  * @tmpl_len: FILS Discovery template length
364  * @tmpl_aligned: FILS Discovery template alignment
365  * @frm: FILS Discovery template parameter
366  */
367 struct fils_discovery_tmpl_params {
368 	uint8_t vdev_id;
369 	uint32_t tmpl_len;
370 	uint32_t tmpl_len_aligned;
371 	uint8_t *frm;
372 };
373 
374 /**
375  * struct mlme_channel_param - Channel parameters with all
376  *			info required by target.
377  * @chan_id: channel id
378  * @pwr: channel power
379  * @mhz: channel frequency
380  * @half_rate: is half rate
381  * @quarter_rate: is quarter rate
382  * @dfs_set: is dfs channel
383  * @dfs_set_cfreq2: is secondary freq dfs channel
384  * @is_chan_passive: is this passive channel
385  * @allow_ht: HT allowed in chan
386  * @allow_vht: VHT allowed on chan
387  * @set_agile: is agile mode
388  * @is_stadfs_en: STA DFS enabled
389  * @phy_mode: phymode (vht80 or ht40 or ...)
390  * @cfreq1: centre frequency on primary
391  * @cfreq2: centre frequency on secondary
392  * @maxpower: max power for channel
393  * @minpower: min power for channel
394  * @maxregpower: Max regulatory power
395  * @antennamax: Max antenna
396  * @reg_class_id: Regulatory class id.
397  * @puncture_bitmap: 11be static puncture bitmap
398  */
399 struct mlme_channel_param {
400 	uint8_t chan_id;
401 	uint8_t pwr;
402 	uint32_t mhz;
403 	uint32_t half_rate:1,
404 		quarter_rate:1,
405 		dfs_set:1,
406 		dfs_set_cfreq2:1,
407 		is_chan_passive:1,
408 		allow_ht:1,
409 		allow_vht:1,
410 		set_agile:1,
411 		is_stadfs_en:1;
412 	enum wlan_phymode phy_mode;
413 	uint32_t cfreq1;
414 	uint32_t cfreq2;
415 	int8_t   maxpower;
416 	int8_t   minpower;
417 	int8_t   maxregpower;
418 	uint8_t  antennamax;
419 	uint8_t  reg_class_id;
420 #ifdef WLAN_FEATURE_11BE
421 	uint16_t puncture_bitmap;
422 #endif
423 };
424 
425 /**
426  * struct vdev_mlme_mvr_param - Multiple vdev restart params
427  * @phymode: phymode information
428  * @preferred_tx_streams: preferred tx streams for VAP
429  * @preferred_rx_streams: preferred rx streams for VAP
430  */
431 struct vdev_mlme_mvr_param {
432 	uint32_t phymode;
433 	uint32_t preferred_tx_streams;
434 	uint32_t preferred_rx_streams;
435 };
436 
437 /**
438  * struct multiple_vdev_restart_params - Multiple vdev restart cmd parameter
439  * @pdev_id: Pdev identifier
440  * @requestor_id: Unique id identifying the module
441  * @disable_hw_ack: Flag to indicate disabling HW ACK during CAC
442  * @cac_duration_ms: CAC duration on the given channel
443  * @num_vdevs: No. of vdevs that need to be restarted
444  * @ch_param: Pointer to channel_param
445  * @vdev_ids: Pointer to array of vdev_ids
446  * @mvr_param: Pointer to array of multi vdev restart param
447  * @max_vdevs: Maximum vdev count of this pdev
448  * @mvr_bmap_enabled: flag indicating mvr-bitmap support
449  */
450 struct multiple_vdev_restart_params {
451 	uint32_t pdev_id;
452 	uint32_t requestor_id;
453 	uint32_t disable_hw_ack;
454 	uint32_t cac_duration_ms;
455 	uint32_t num_vdevs;
456 	struct mlme_channel_param ch_param;
457 	uint32_t *vdev_ids;
458 	struct vdev_mlme_mvr_param *mvr_param;
459 	uint32_t max_vdevs;
460 	uint8_t mvr_bmap_enabled;
461 };
462 
463 /**
464  * struct multiple_vdev_set_param - Multiple vdev set param command parameter
465  * @pdev_id: Pdev identifier
466  * @param_id: parameter id
467  * @param_value: parameter value
468  * @num_vdevs: number of vdevs
469  * @vdev_ids: Pointer to array of vdev_ids
470  */
471 struct multiple_vdev_set_param {
472 	uint32_t pdev_id;
473 	uint32_t param_id;
474 	uint32_t param_value;
475 	uint32_t num_vdevs;
476 	uint32_t vdev_ids[WLAN_UMAC_PDEV_MAX_VDEVS];
477 };
478 
479 /**
480  * struct peer_flush_params - peer flush cmd parameter
481  * @peer_tid_bitmap: peer tid bitmap
482  * @vdev_id: vdev id
483  * @peer_mac: peer mac address
484  */
485 struct peer_flush_params {
486 	uint32_t peer_tid_bitmap;
487 	uint8_t vdev_id;
488 	uint8_t peer_mac[QDF_MAC_ADDR_SIZE];
489 };
490 
491 /**
492  * struct peer_delete_cmd_params - peer delete cmd parameter
493  * @vdev_id: vdev id
494  * @hw_link_id_bitmap: logical link id bitmap for peers
495  * not getting created
496  */
497 struct peer_delete_cmd_params {
498 	uint8_t vdev_id;
499 	uint32_t hw_link_id_bitmap;
500 };
501 
502 /* Default FILS DISCOVERY/probe response sent in period of 20TU */
503 #define DEFAULT_FILS_DISCOVERY_PERIOD 20
504 #define DEFAULT_PROBE_RESP_PERIOD 20
505 
506 /**
507  * struct config_fils_params - FILS config params
508  * @vdev_id:  vdev id
509  * @fd_period:  0 - Disabled, non-zero - Period in ms (mili seconds)
510  * @send_prb_rsp_frame: send broadcast prb resp frame
511  */
512 struct config_fils_params {
513 	uint8_t vdev_id;
514 	uint32_t fd_period;
515 	uint32_t send_prb_rsp_frame: 1;
516 };
517 
518 /**
519  * struct config_ratemask_params - ratemask config parameters
520  * @vdev_id: vdev id
521  * @type: Type
522  * @lower32: Lower 32 bits in the 1st 64-bit value
523  * @higher32: Higher 32 bits in the 1st 64-bit value
524  * @lower32_2: Lower 32 bits in the 2nd 64-bit value
525  * @higher32_2: Higher 32 bits in the 2nd 64-bit value
526  */
527 struct config_ratemask_params {
528 	uint8_t vdev_id;
529 	uint8_t type;
530 	uint32_t lower32;
531 	uint32_t higher32;
532 	uint32_t lower32_2;
533 	uint32_t higher32_2;
534 };
535 
536 /**
537  * struct set_custom_aggr_size_params - custom aggr size params
538  * @vdev_id : vdev id
539  * @tx_aggr_size : TX aggr size
540  * @rx_aggr_size : RX aggr size
541  * @ac:
542  * @aggr_type:
543  * @tx_aggr_size_disable:
544  * @rx_aggr_size_disable:
545  * @tx_ac_enable:
546  * @aggr_ba_enable:
547  * @reserved: spare bits
548  */
549 struct set_custom_aggr_size_params {
550 	uint32_t  vdev_id;
551 	uint32_t tx_aggr_size;
552 	uint32_t rx_aggr_size;
553 	uint32_t ac:2,
554 		 aggr_type:1,
555 		 tx_aggr_size_disable:1,
556 		 rx_aggr_size_disable:1,
557 		 tx_ac_enable:1,
558 		 aggr_ba_enable:1,
559 		 reserved:25;
560 };
561 
562 /**
563  * struct sifs_trigger_param - sifs_trigger cmd parameter
564  * @vdev_id: vdev id
565  * @param_value: parameter value
566  */
567 struct sifs_trigger_param {
568 	uint32_t vdev_id;
569 	uint32_t param_value;
570 };
571 
572 /**
573  * struct set_neighbour_rx_params - Neighbour RX params
574  * @vdev_id: vdev id
575  * @idx: index of param
576  * @action: action
577  * @type: Type of param
578  */
579 struct set_neighbour_rx_params {
580 	uint8_t vdev_id;
581 	uint32_t idx;
582 	uint32_t action;
583 	uint32_t type;
584 };
585 
586 /**
587  * struct set_tx_peer_filter - Set tx peer filter
588  * @vdev_id: vdev id
589  * @idx: index of param
590  * @action: action
591  */
592 struct set_tx_peer_filter {
593 	uint8_t vdev_id;
594 	uint32_t idx;
595 	uint32_t action;
596 };
597 
598 /**
599  * struct vdev_scan_nac_rssi_params - NAC_RSSI cmd parameter
600  * @vdev_id: vdev id
601  * @bssid_addr: BSSID address
602  * @client_addr: client address
603  * @chan_num: channel number
604  * @action:NAC_RSSI action,
605  */
606 struct vdev_scan_nac_rssi_params {
607 	uint32_t vdev_id;
608 	uint8_t bssid_addr[QDF_MAC_ADDR_SIZE];
609 	uint8_t client_addr[QDF_MAC_ADDR_SIZE];
610 	uint32_t chan_num;
611 	uint32_t action; /* WMI_FILTER_NAC_RSSI_ACTION */
612 };
613 
614 #ifdef WLAN_FEATURE_11BE_MLO
615 /**
616  * struct mlo_vdev_start_flags - MLO start flags
617  * @mlo_enabled: indicate is MLO enabled
618  * @mlo_assoc_link: indicate is the link used to initialize
619  *                  the association of mlo connection
620  * @mlo_mcast_vdev: MLO cast vdev
621  * @emlsr_support: indicate non AP MLD STA supports eMLSR mode
622  * @mlo_link_add: Dynamic link addition
623  * @rsvd: reserved bits
624  */
625 struct mlo_vdev_start_flags {
626 	uint32_t mlo_enabled:1,
627 		 mlo_assoc_link:1,
628 		 mlo_mcast_vdev:1,
629 		 emlsr_support:1,
630 		 mlo_link_add:1,
631 		 rsvd:27;
632 };
633 
634 /**
635  * struct ml_vdev_start_partner_info - partner link info
636  * @vdev_id: vdev id
637  * @hw_mld_link_id: unique hw link id across SoCs
638  * @mac_addr: Partner mac address
639  */
640 struct ml_vdev_start_partner_info {
641 	uint32_t vdev_id;
642 	uint32_t hw_mld_link_id;
643 	uint8_t mac_addr[QDF_MAC_ADDR_SIZE];
644 };
645 
646 /**
647  * struct mlo_vdev_start_partner_links - ML partner links
648  * @num_links: Number of links
649  * @partner_info: Partner link info
650  */
651 struct mlo_vdev_start_partner_links {
652 	uint8_t num_links;
653 	struct ml_vdev_start_partner_info partner_info[WLAN_UMAC_MLO_MAX_VDEVS];
654 };
655 #endif
656 /**
657  * struct vdev_start_params - vdev start cmd parameter
658  * @vdev_id: vdev id
659  * @beacon_interval: beacon interval
660  * @dtim_period: dtim period
661  * @is_restart: flag to check if it is vdev
662  * @disable_hw_ack: to update disable hw ack flag
663  * @hidden_ssid: hidden ssid
664  * @pmf_enabled: pmf enabled
665  * @ssid: ssid MAC
666  * @num_noa_descriptors: number of noa descriptors
667  * @preferred_tx_streams: preferred tx streams
668  * @preferred_rx_streams: preferred rx streams
669  * @cac_duration_ms: cac duration in milliseconds
670  * @regdomain: Regulatory domain
671  * @he_ops: HE ops
672  * @eht_ops: EHT ops
673  * @channel: Channel params required by target.
674  * @bcn_tx_rate_code: Beacon tx rate code.
675  * @ldpc_rx_enabled: Enable/Disable LDPC RX for this vdev
676  * @mbssid_flags: MBSSID flags to FW
677  * @vdevid_trans: Tx VDEV ID
678  * @mlo_flags: Flags for multi-link operation
679  * @mlo_partner: Partner links for multi-link operation
680  * @mbssid_multi_group_flag: Flag to identify multi group mbssid support
681  * @mbssid_multi_group_id: Group id of current vdev
682  */
683 struct vdev_start_params {
684 	uint8_t vdev_id;
685 	uint32_t beacon_interval;
686 	uint32_t dtim_period;
687 	bool is_restart;
688 	uint32_t disable_hw_ack;
689 	bool hidden_ssid;
690 	bool pmf_enabled;
691 	struct wlan_ssid ssid;
692 	uint32_t num_noa_descriptors;
693 	uint32_t preferred_rx_streams;
694 	uint32_t preferred_tx_streams;
695 	uint32_t cac_duration_ms;
696 	uint32_t regdomain;
697 	uint32_t he_ops;
698 #ifdef WLAN_FEATURE_11BE
699 	uint32_t eht_ops;
700 #endif
701 	struct mlme_channel_param channel;
702 	enum mlme_bcn_tx_rate_code bcn_tx_rate_code;
703 	bool ldpc_rx_enabled;
704 	uint32_t mbssid_flags;
705 	uint8_t vdevid_trans;
706 #ifdef WLAN_FEATURE_11BE_MLO
707 	struct mlo_vdev_start_flags mlo_flags;
708 	struct mlo_vdev_start_partner_links mlo_partner;
709 #endif
710 	uint8_t mbssid_multi_group_flag;
711 	uint32_t mbssid_multi_group_id;
712 };
713 
714 /**
715  * struct vdev_set_params - vdev set cmd parameter
716  * @vdev_id: vdev id
717  * @param_id: parameter id
718  * @param_value: parameter value
719  */
720 struct vdev_set_params {
721 	uint32_t vdev_id;
722 	uint32_t param_id;
723 	uint32_t param_value;
724 };
725 
726 /**
727  * struct dev_set_param - vdev/pdev set param info
728  * @param_id: parameter id
729  * @param_value: parameter value
730  */
731 struct dev_set_param {
732 	uint32_t param_id;
733 	uint32_t param_value;
734 };
735 
736 /**
737  * struct set_multiple_pdev_vdev_param
738  * @param_type: enum of type mlme_dev_setparam
739  * @is_host_pdev_id: to indicate @dev_id holds host pdev id in case of pdev set
740  * param, need conversion to target pdev id before sending to fw.
741  * @dev_id: unique dev_id identifying the VDEV/PDEV
742  * @n_params: Number of parambers to set
743  * @params: pointer to dev_set_param structure
744  */
745 struct set_multiple_pdev_vdev_param {
746 	enum mlme_dev_setparam param_type;
747 	uint8_t is_host_pdev_id;
748 	uint8_t dev_id;
749 	uint8_t n_params;
750 	struct dev_set_param *params;
751 };
752 
753 /**
754  * struct set_rx_mac_filter - Set rx mac filter command parameters
755  * @vdev_id: Vdev id
756  * @mac: mac addr
757  * @freq: frequency
758  * @set: set or clear
759  */
760 struct set_rx_mac_filter {
761 	uint32_t vdev_id;
762 	uint8_t mac[QDF_MAC_ADDR_SIZE];
763 	uint32_t freq;
764 	bool set;
765 };
766 
767 static inline
768 QDF_STATUS mlme_check_index_setparam(struct dev_set_param *param,
769 				     uint32_t paramid, uint32_t paramvalue,
770 				     uint8_t index, uint8_t n_params)
771 {
772 	if (index >= n_params) {
773 		mlme_err("Index:%d OOB to fill param", index);
774 		return QDF_STATUS_E_FAILURE;
775 	}
776 	param[index].param_id = paramid;
777 	param[index].param_value = paramvalue;
778 	return QDF_STATUS_SUCCESS;
779 }
780 
781 /**
782  * struct vdev_set_mu_snif_param - vdev set mu sniffer cmd parameter
783  * @vdev_id: vdev id
784  * @mode: mu snif mode
785  * @num_user: max number of user
786  * @num_aid: number of set sta aid
787  * @aid: sta aids
788  */
789 
790 struct vdev_set_mu_snif_param {
791 	uint32_t vdev_id;
792 	uint32_t mode;
793 	uint32_t num_user;
794 	uint32_t num_aid;
795 	uint32_t aid[WLAN_MU_SNIF_MAX_AIDS];
796 };
797 
798 /**
799  * struct vdev_create_params - vdev create cmd parameter
800  * @vdev_id: interface id
801  * @vdev_stats_id_valid: flag to indicate valid stats id
802  * @vdev_stats_id: stats_id for stats collection
803  * @type: interface type
804  * @subtype: interface subtype
805  * @nss_2g: NSS for 2G
806  * @nss_5g: NSS for 5G
807  * @pdev_id: pdev id on pdev for this vdev
808  * @mbssid_flags: MBSS IE flags indicating vdev type
809  * @vdevid_trans: id of transmitting vdev for MBSS IE
810  * @special_vdev_mode: indicates special vdev mode
811  * @mlo_mac: Multilink Operation MAC address
812  */
813 struct vdev_create_params {
814 	uint8_t vdev_id;
815 	bool vdev_stats_id_valid;
816 	uint8_t vdev_stats_id;
817 	uint32_t type;
818 	uint32_t subtype;
819 	uint8_t nss_2g;
820 	uint8_t nss_5g;
821 	uint32_t pdev_id;
822 	uint32_t mbssid_flags;
823 	uint8_t vdevid_trans;
824 	bool special_vdev_mode;
825 #ifdef WLAN_FEATURE_11BE_MLO
826 	uint8_t mlo_mac[QDF_MAC_ADDR_SIZE];
827 #endif
828 };
829 
830 /**
831  * struct vdev_delete_params - vdev delete cmd parameter
832  * @vdev_id: vdev id
833  */
834 struct vdev_delete_params {
835 	uint8_t vdev_id;
836 };
837 
838 /**
839  * struct vdev_stop_params - vdev stop cmd parameter
840  * @vdev_id: vdev id
841  */
842 struct vdev_stop_params {
843 	uint8_t vdev_id;
844 };
845 
846 /**
847  * struct vdev_up_params - vdev up cmd parameter
848  * @vdev_id: vdev id
849  * @assoc_id: association id
850  * @profile_idx: profile index of the connected non-trans ap (mbssid case).
851  *		0  means invalid.
852  * @profile_num: the total profile numbers of non-trans aps (mbssid case).
853  *		0 means non-MBSS AP.
854  * @trans_bssid: bssid of transmitted AP (MBSS IE case)
855  */
856 struct vdev_up_params {
857 	uint8_t vdev_id;
858 	uint16_t assoc_id;
859 	uint32_t profile_idx;
860 	uint32_t profile_num;
861 	uint8_t trans_bssid[QDF_MAC_ADDR_SIZE];
862 };
863 
864 /**
865  * struct vdev_down_params - vdev down cmd parameter
866  * @vdev_id: vdev id
867  */
868 struct vdev_down_params {
869 	uint8_t vdev_id;
870 };
871 
872 /**
873  * struct peer_delete_all_params - peer delete all request parameter
874  * @vdev_id: vdev id
875  * @peer_type_bitmap: Bitmap of type with bits corresponding to value from
876  * enum wlan_peer_type
877  */
878 struct peer_delete_all_params {
879 	uint8_t vdev_id;
880 	uint32_t peer_type_bitmap;
881 };
882 
883 #define AC_MAX 4
884 #define WMI_MUEDCA_PARAM_MASK 0xff
885 /**
886  * struct muedca_params - MU-EDCA parameters
887  * @pdev_id: pdev id
888  * @muedca_ecwmin: CWmin in exponential form
889  * @muedca_ecwmax: CWmax in exponential form
890  * @muedca_aifsn:  AIFSN parameter
891  * @muedca_acm:    ACM parameter
892  * @muedca_timer:  MU EDCA timer value
893  */
894 struct muedca_params {
895 	uint32_t pdev_id;
896 	uint8_t muedca_ecwmin[AC_MAX];      /* CWmin in exponential form */
897 	uint8_t muedca_ecwmax[AC_MAX];      /* CWmax in exponential form */
898 	uint8_t muedca_aifsn[AC_MAX];       /* AIFSN parameter */
899 	uint8_t muedca_acm[AC_MAX];         /* ACM parameter */
900 	uint8_t muedca_timer[AC_MAX];       /* MU EDCA timer value */
901 };
902 
903 /* Total 10 BSSIDs can be packed in a single measurement request buffer */
904 #define RTT_MAX_BSSIDS_TO_SCAN  10
905 
906 /**
907  * struct rtt_bssid_info - Store the parsed macaddr and BW from the measurement
908  *                         request buffer.
909  * @macaddr: Destination macaddr to scan
910  * @bw: packet bandwidth
911  */
912 struct rtt_bssid_info {
913 	uint8_t macaddr[QDF_MAC_ADDR_SIZE];
914 	uint8_t bw;
915 };
916 
917 /**
918  * struct rtt_channel_info - Store the parsed channel info from LOWI measurement
919  *                           request buffer.
920  * @freq: Channel frequency
921  * @cfreq1: Center frequency1
922  * @cfreq2: Center frequency2
923  * @phymode: Phymode
924  * @num_bssids: Number of bssids present in the measurement request buffer
925  * @bssid_info: Array to store BW and macaddr present in the measurement request
926  *              buffer.
927  */
928 struct rtt_channel_info {
929 	uint16_t freq;
930 	uint16_t cfreq1;
931 	uint16_t cfreq2;
932 	uint16_t phymode;
933 	uint16_t num_bssids;
934 	struct rtt_bssid_info bssid_info[RTT_MAX_BSSIDS_TO_SCAN];
935 };
936 
937 /**
938  * struct sr_prohibit_param - SR prohibit command parameter
939  *
940  * @vdev_id: vdev id
941  * @sr_he_siga_val15_allowed: HE_SIG_A_VAL15_ALLOWED is enabled/disabled
942  */
943 struct sr_prohibit_param {
944 	uint8_t vdev_id;
945 	bool sr_he_siga_val15_allowed;
946 };
947 #endif /* __WLAN_VDEV_MGR_TX_OPS_DEFS_H__ */
948