1 /*
2 * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3 * Copyright (c) 2022-2024 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 #ifndef _WLAN_MGMT_TXRX_UTILS_API_H_
21 #define _WLAN_MGMT_TXRX_UTILS_API_H_
22
23 /**
24 * DOC: wlan_mgmt_txrx_utils_api.h
25 *
26 * management tx/rx layer public API and structures
27 * for umac converged components.
28 *
29 */
30
31 #include "wlan_objmgr_cmn.h"
32 #include "qdf_nbuf.h"
33 #include "wlan_mgmt_txrx_rx_reo_public_structs.h"
34
35 #define mgmt_txrx_alert(params...) \
36 QDF_TRACE_FATAL(QDF_MODULE_ID_MGMT_TXRX, params)
37 #define mgmt_txrx_err(params...) \
38 QDF_TRACE_ERROR(QDF_MODULE_ID_MGMT_TXRX, params)
39 #define mgmt_txrx_warn(params...) \
40 QDF_TRACE_WARN(QDF_MODULE_ID_MGMT_TXRX, params)
41 #define mgmt_txrx_notice(params...) \
42 QDF_TRACE_INFO(QDF_MODULE_ID_MGMT_TXRX, params)
43 #define mgmt_txrx_info(params...) \
44 QDF_TRACE_INFO(QDF_MODULE_ID_MGMT_TXRX, params)
45 #define mgmt_txrx_debug(params...) \
46 QDF_TRACE_DEBUG(QDF_MODULE_ID_MGMT_TXRX, params)
47 #define mgmt_txrx_err_rl(params...) \
48 QDF_TRACE_ERROR_RL(QDF_MODULE_ID_MGMT_TXRX, params)
49 #define mgmt_txrx_debug_rl(params...) \
50 QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_MGMT_TXRX, params)
51
52 #define mgmttxrx_nofl_alert(params...) \
53 QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_MGMT_TXRX, params)
54 #define mgmttxrx_nofl_err(params...) \
55 QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_MGMT_TXRX, params)
56 #define mgmttxrx_nofl_warn(params...) \
57 QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_MGMT_TXRX, params)
58 #define mgmttxrx_nofl_info(params...) \
59 QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_MGMT_TXRX, params)
60 #define mgmttxrx_nofl_debug(params...) \
61 QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_MGMT_TXRX, params)
62
63 /**
64 * mgmt_txrx_frame_hex_dump() - Print the type and dump the rx tx frame
65 * @frame_data: The base address of the mgmt frame data to be logged.
66 * @frame_len: The size of the frame to be logged.
67 * @is_tx: is tx frame
68 *
69 * Return: None
70 */
71 void mgmt_txrx_frame_hex_dump(void *frame_data, int frame_len, bool is_tx);
72
73 /**
74 * enum mgmt_subtype - enum of mgmt. subtypes
75 * @MGMT_SUBTYPE_ASSOC_REQ: association request frame
76 * @MGMT_SUBTYPE_ASSOC_RESP: association response frame
77 * @MGMT_SUBTYPE_REASSOC_REQ: reassociation request frame
78 * @MGMT_SUBTYPE_REASSOC_RESP: reassociation response frame
79 * @MGMT_SUBTYPE_PROBE_REQ: probe request frame
80 * @MGMT_SUBTYPE_PROBE_RESP: probe response frame
81 * @MGMT_SUBTYPE_BEACON: beacon frame
82 * @MGMT_SUBTYPE_ATIM: ATIM frame
83 * @MGMT_SUBTYPE_DISASSOC: disassociation frame
84 * @MGMT_SUBTYPE_AUTH: authentication frame
85 * @MGMT_SUBTYPE_DEAUTH: deauthentication frame
86 * @MGMT_SUBTYPE_ACTION: action frame
87 * @MGMT_SUBTYPE_ACTION_NO_ACK: action no ack frame
88 */
89 enum mgmt_subtype {
90 MGMT_SUBTYPE_ASSOC_REQ = 0x00,
91 MGMT_SUBTYPE_ASSOC_RESP = 0x10,
92 MGMT_SUBTYPE_REASSOC_REQ = 0x20,
93 MGMT_SUBTYPE_REASSOC_RESP = 0x30,
94 MGMT_SUBTYPE_PROBE_REQ = 0x40,
95 MGMT_SUBTYPE_PROBE_RESP = 0x50,
96 MGMT_SUBTYPE_BEACON = 0x80,
97 MGMT_SUBTYPE_ATIM = 0x90,
98 MGMT_SUBTYPE_DISASSOC = 0xa0,
99 MGMT_SUBTYPE_AUTH = 0xb0,
100 MGMT_SUBTYPE_DEAUTH = 0xc0,
101 MGMT_SUBTYPE_ACTION = 0xd0,
102 MGMT_SUBTYPE_ACTION_NO_ACK = 0xe0,
103 };
104
105 /**
106 * enum mgmt_action_category - mgmt. action categories
107 * @ACTION_CATEGORY_SPECTRUM_MGMT: spectrum mgmt. action category
108 * @ACTION_CATEGORY_QOS: qos action category
109 * @ACTION_CATEGORY_DLS: dls action category
110 * @ACTION_CATEGORY_BACK: block ack action category
111 * @ACTION_CATEGORY_PUBLIC: public action category
112 * @ACTION_CATEGORY_RRM: rrm action category
113 * @ACTION_FAST_BSS_TRNST: trnst action category
114 * @ACTION_CATEGORY_HT: ht actipon category
115 * @ACTION_CATEGORY_SA_QUERY: sa query action category
116 * @ACTION_CATEGORY_PROTECTED_DUAL_OF_PUBLIC_ACTION: protected
117 * public action category
118 * @ACTION_CATEGORY_WNM: wnm action category
119 * @ACTION_CATEGORY_WNM_UNPROTECTED: wnm protected action category
120 * @ACTION_CATEGORY_TDLS: tdls action category
121 * @ACTION_CATEGORY_MESH_ACTION: mesh action category
122 * @ACTION_CATEGORY_MULTIHOP_ACTION: multihop action category
123 * @ACTION_CATEGORY_SELF_PROTECTED: self protected action category
124 * @ACTION_CATEGORY_DMG: unprotected dmg action category
125 * @ACTION_CATEGORY_WMM: wmm action category
126 * @ACTION_CATEGORY_FST: fst action category
127 * @ACTION_CATEGORY_RVS: robust av streaming action category
128 * @ACTION_CATEGORY_UNPROT_DMG: dmg action category
129 * @ACTION_CATEGORY_VHT: vht action category
130 * @ACTION_CATEGORY_USIG: Unprotected S1G Action frame
131 * @ACTION_CATEGORY_SIG: S1G Action frame
132 * @ACTION_CATEGORY_FLOW_CONTROL: Flow Control Action frame
133 * @ACTION_CATEGORY_CONTROL_RSP_MCS_NEGO: Control Response MCS Negotiation frame
134 * @ACTION_CATEGORY_FILS: FILS Action frame
135 * @ACTION_CATEGORY_CDMG: CDMG Action frame
136 * @ACTION_CATEGORY_CMMG: CMMG Action frame
137 * @ACTION_CATEGORY_GLK: GLK Action frame
138 * @ACTION_CATEGORY_PROTECTED_EHT: Protected EHT Action frame
139 * @ACTION_CATEGORY_VENDOR_SPECIFIC_PROTECTED: vendor specific protected
140 * action category
141 * @ACTION_CATEGORY_VENDOR_SPECIFIC: vendor specific action category
142 */
143 enum mgmt_action_category {
144 ACTION_CATEGORY_SPECTRUM_MGMT = 0,
145 ACTION_CATEGORY_QOS = 1,
146 ACTION_CATEGORY_DLS = 2,
147 ACTION_CATEGORY_BACK = 3,
148 ACTION_CATEGORY_PUBLIC = 4,
149 ACTION_CATEGORY_RRM = 5,
150 ACTION_FAST_BSS_TRNST = 6,
151 ACTION_CATEGORY_HT = 7,
152 ACTION_CATEGORY_SA_QUERY = 8,
153 ACTION_CATEGORY_PROTECTED_DUAL_OF_PUBLIC_ACTION = 9,
154 ACTION_CATEGORY_WNM = 10,
155 ACTION_CATEGORY_WNM_UNPROTECTED = 11,
156 ACTION_CATEGORY_TDLS = 12,
157 ACTION_CATEGORY_MESH_ACTION = 13,
158 ACTION_CATEGORY_MULTIHOP_ACTION = 14,
159 ACTION_CATEGORY_SELF_PROTECTED = 15,
160 ACTION_CATEGORY_DMG = 16,
161 ACTION_CATEGORY_WMM = 17,
162 ACTION_CATEGORY_FST = 18,
163 ACTION_CATEGORY_RVS = 19,
164 ACTION_CATEGORY_UNPROT_DMG = 20,
165 ACTION_CATEGORY_VHT = 21,
166 ACTION_CATEGORY_USIG = 22,
167 ACTION_CATEGORY_SIG = 23,
168 ACTION_CATEGORY_FLOW_CONTROL = 24,
169 ACTION_CATEGORY_CONTROL_RSP_MCS_NEGO = 25,
170 ACTION_CATEGORY_FILS = 26,
171 ACTION_CATEGORY_CDMG = 27,
172 ACTION_CATEGORY_CMMG = 28,
173 ACTION_CATEGORY_GLK = 29,
174 ACTION_CATEGORY_PROTECTED_EHT = 37,
175 ACTION_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126,
176 ACTION_CATEGORY_VENDOR_SPECIFIC = 127,
177 };
178
179 /**
180 * enum spectrum_mgmt_actioncode - spectrum mgmt. action frms
181 * @ACTION_SPCT_MSR_REQ: spectrum measurement request frame
182 * @ACTION_SPCT_MSR_RPRT: spectrum measurement report frame
183 * @ACTION_SPCT_TPC_REQ: spectrum tpc request frame
184 * @ACTION_SPCT_TPC_RPRT: spectrum tpc report frame
185 * @ACTION_SPCT_CHL_SWITCH: spectrum channel switch frame
186 */
187 enum spectrum_mgmt_actioncode {
188 ACTION_SPCT_MSR_REQ,
189 ACTION_SPCT_MSR_RPRT,
190 ACTION_SPCT_TPC_REQ,
191 ACTION_SPCT_TPC_RPRT,
192 ACTION_SPCT_CHL_SWITCH,
193 };
194
195 /**
196 * enum qos_actioncode - qos action frames
197 * @QOS_ADD_TS_REQ: qos add ts request frame
198 * @QOS_ADD_TS_RSP: qos add ts response frame
199 * @QOS_DEL_TS_REQ: qos del ts request frame
200 * @QOS_SCHEDULE: qos schecule frame
201 * @QOS_MAP_CONFIGURE: qos map configure frame
202 */
203 enum qos_actioncode {
204 QOS_ADD_TS_REQ,
205 QOS_ADD_TS_RSP,
206 QOS_DEL_TS_REQ,
207 QOS_SCHEDULE,
208 QOS_MAP_CONFIGURE,
209 };
210
211 /**
212 * enum dls_actioncode - dls action frames
213 * @DLS_REQUEST: dls request frame
214 * @DLS_RESPONSE: dls response frame
215 * @DLS_TEARDOWN: dls teardown frame
216 */
217 enum dls_actioncode {
218 DLS_REQUEST,
219 DLS_RESPONSE,
220 DLS_TEARDOWN,
221 };
222
223 /**
224 * enum block_ack_actioncode - block ack action frames
225 * @ADDBA_REQUEST: add block ack request frame
226 * @ADDBA_RESPONSE: add block ack response frame
227 * @DELBA: delete block ack frame
228 */
229 enum block_ack_actioncode {
230 ADDBA_REQUEST,
231 ADDBA_RESPONSE,
232 DELBA,
233 };
234
235 /**
236 * enum pub_actioncode - public action frames
237 * Reference IEEE Std 802.11-2020 Table 9-364—Public Action field values
238 * @PUB_ACTION_2040_BSS_COEXISTENCE: public 20-40 bss coex action frame
239 * @PUB_ACTION_EXT_CHANNEL_SWITCH_ID: public ext channel switch id action frame
240 * @PUB_ACTION_VENDOR_SPECIFIC: vendor specific public action frame
241 * @PUB_ACTION_GAS_INITIAL_REQUEST: GAS initial request action frame
242 * @PUB_ACTION_GAS_INITIAL_RESPONSE: GAS initial response action frame
243 * @PUB_ACTION_GAS_COMEBACK_REQUEST: GAS comeback request action frame
244 * @PUB_ACTION_GAS_COMEBACK_RESPONSE: GAS comeback response action frame
245 * @PUB_ACTION_TDLS_DISCRESP: tdls discovery response public action frame
246 * @PUB_ACTION_FTM_REQUEST: FTM request action frame
247 * @PUB_ACTION_FTM_RESPONSE: FTM response action frame
248 * @PUB_ACTION_FILS_DISCOVERY: FILS Discovery action frame
249 */
250 enum pub_actioncode {
251 PUB_ACTION_2040_BSS_COEXISTENCE = 0,
252 PUB_ACTION_EXT_CHANNEL_SWITCH_ID = 4,
253 PUB_ACTION_VENDOR_SPECIFIC = 9,
254 PUB_ACTION_GAS_INITIAL_REQUEST = 10,
255 PUB_ACTION_GAS_INITIAL_RESPONSE = 11,
256 PUB_ACTION_GAS_COMEBACK_REQUEST = 12,
257 PUB_ACTION_GAS_COMEBACK_RESPONSE = 13,
258 PUB_ACTION_TDLS_DISCRESP = 14,
259 PUB_ACTION_FTM_REQUEST = 32,
260 PUB_ACTION_FTM_RESPONSE = 33,
261 PUB_ACTION_FILS_DISCOVERY = 34,
262 };
263
264 /**
265 * enum rrm_actioncode - rrm action frames
266 * @RRM_RADIO_MEASURE_REQ: rrm radio meas. request frame
267 * @RRM_RADIO_MEASURE_RPT: rrm radio meas. report frame
268 * @RRM_LINK_MEASUREMENT_REQ: rrm link meas. request frmae
269 * @RRM_LINK_MEASUREMENT_RPT: rrm link meas. report frame
270 * @RRM_NEIGHBOR_REQ: rrm neighbor request frame
271 * @RRM_NEIGHBOR_RPT: rrm neighbor report frame
272 */
273 enum rrm_actioncode {
274 RRM_RADIO_MEASURE_REQ,
275 RRM_RADIO_MEASURE_RPT,
276 RRM_LINK_MEASUREMENT_REQ,
277 RRM_LINK_MEASUREMENT_RPT,
278 RRM_NEIGHBOR_REQ,
279 RRM_NEIGHBOR_RPT,
280 };
281
282 /**
283 * enum ft_actioncode - ft action frames
284 * @FT_FAST_BSS_TRNST_REQ: ft request frame
285 * @FT_FAST_BSS_TRNST_RES: ft response frame
286 * @FT_FAST_BSS_TRNST_CONFIRM: ft confirm frame
287 * @FT_FAST_BSS_TRNST_ACK: ft ACK frame
288 */
289 enum ft_actioncode {
290 FT_FAST_BSS_TRNST_REQ = 1,
291 FT_FAST_BSS_TRNST_RES,
292 FT_FAST_BSS_TRNST_CONFIRM,
293 FT_FAST_BSS_TRNST_ACK,
294 };
295
296 /**
297 * enum ht_actioncode - ht action frames
298 * @HT_ACTION_NOTIFY_CHANWIDTH: ht notify bw action frame
299 * @HT_ACTION_SMPS: ht smps action frame
300 * @HT_ACTION_PSMP: ht psmp action frame
301 * @HT_ACTION_PCO_PHASE: ht pco phase action frame
302 * @HT_ACTION_CSI: ht csi action frame
303 * @HT_ACTION_NONCOMPRESSED_BF: ht noncompressed bf action frame
304 * @HT_ACTION_COMPRESSED_BF: ht compressed bf action frame
305 * @HT_ACTION_ASEL_IDX_FEEDBACK: ht asel idx feedback action frame
306 */
307 enum ht_actioncode {
308 HT_ACTION_NOTIFY_CHANWIDTH,
309 HT_ACTION_SMPS,
310 HT_ACTION_PSMP,
311 HT_ACTION_PCO_PHASE,
312 HT_ACTION_CSI,
313 HT_ACTION_NONCOMPRESSED_BF,
314 HT_ACTION_COMPRESSED_BF,
315 HT_ACTION_ASEL_IDX_FEEDBACK,
316 };
317
318 /**
319 * enum sa_query_action - sa query action frames
320 * @SA_QUERY_REQUEST: sa query request frame
321 * @SA_QUERY_RESPONSE: sa query response frame
322 */
323 enum sa_query_action {
324 SA_QUERY_REQUEST,
325 SA_QUERY_RESPONSE,
326 };
327
328 /**
329 * enum protected_dual_actioncode - protected dual action frames
330 * @PDPA_ACTION_VENDOR_SPECIFIC: PDPA action vendor specific frame
331 * @PDPA_GAS_INIT_REQ: pdpa gas init request frame
332 * @PDPA_GAS_INIT_RSP: pdpa gas init response frame
333 * @PDPA_GAS_COMEBACK_REQ: pdpa gas comeback request frame
334 * @PDPA_GAS_COMEBACK_RSP: pdpa gas comeback response frame
335 */
336 enum protected_dual_actioncode {
337 PDPA_ACTION_VENDOR_SPECIFIC = 9,
338 PDPA_GAS_INIT_REQ = 10,
339 PDPA_GAS_INIT_RSP = 11,
340 PDPA_GAS_COMEBACK_REQ = 12,
341 PDPA_GAS_COMEBACK_RSP = 13,
342 };
343
344 /**
345 * enum wnm_actioncode - wnm action frames
346 * @WNM_BSS_TM_QUERY: wnm bss tm query frame
347 * @WNM_BSS_TM_REQUEST: wnm bss tm request frame
348 * @WNM_BSS_TM_RESPONSE: wnm bss tm response frame
349 * @WNM_FMS_REQ: wnm fms request frame
350 * @WNM_FMS_RESP: wnm fms response frame
351 * @WNM_TFS_REQ: wnm tfs request frame
352 * @WNM_TFS_RESP: wnm tfs response frame
353 * @WNM_TFS_NOTIFY: wnm tfs notify frame
354 * @WNM_SLEEP_REQ: wnm sleep request frame
355 * @WNM_SLEEP_RESP: wnm sleep response frame
356 * @WNM_TIM_REQ: wnm Tim broadcast request frame
357 * @WNM_TIM_RESP: wnm Tim broadcast response frame
358 * @WNM_NOTIF_REQUEST: wnm notify request frame
359 * @WNM_NOTIF_RESPONSE: wnm notify response frame
360 */
361 enum wnm_actioncode {
362 WNM_BSS_TM_QUERY = 6,
363 WNM_BSS_TM_REQUEST = 7,
364 WNM_BSS_TM_RESPONSE = 8,
365 WNM_FMS_REQ = 9,
366 WNM_FMS_RESP = 10,
367 WNM_TFS_REQ = 13,
368 WNM_TFS_RESP = 14,
369 WNM_TFS_NOTIFY = 15,
370 WNM_SLEEP_REQ = 16,
371 WNM_SLEEP_RESP = 17,
372 WNM_TIM_REQ = 18,
373 WNM_TIM_RESP = 19,
374 WNM_NOTIF_REQUEST = 26,
375 WNM_NOTIF_RESPONSE = 27,
376 };
377
378 /**
379 * enum tdls_actioncode - tdls action frames
380 * @TDLS_SETUP_REQUEST: tdls setup request frame
381 * @TDLS_SETUP_RESPONSE: tdls setup response frame
382 * @TDLS_SETUP_CONFIRM: tdls setup confirm frame
383 * @TDLS_TEARDOWN: tdls teardown frame
384 * @TDLS_PEER_TRAFFIC_INDICATION: tdls peer traffic indication frame
385 * @TDLS_CHANNEL_SWITCH_REQUEST: tdls channel switch req. frame
386 * @TDLS_CHANNEL_SWITCH_RESPONSE: tdls channel switch response frame
387 * @TDLS_PEER_PSM_REQUEST: tdls peer psm request frame
388 * @TDLS_PEER_PSM_RESPONSE: tdls peer psm response frame
389 * @TDLS_PEER_TRAFFIC_RESPONSE: tdls peer traffic response frame
390 * @TDLS_DISCOVERY_REQUEST: tdls discovery request frame
391 * @TDLS_DISCOVERY_RESPONSE: tdls discovery response frame
392 * @TDLS_MAX_ACTION_CODE: tdls max number of invalid action
393 */
394 enum tdls_actioncode {
395 TDLS_SETUP_REQUEST = 0,
396 TDLS_SETUP_RESPONSE = 1,
397 TDLS_SETUP_CONFIRM = 2,
398 TDLS_TEARDOWN = 3,
399 TDLS_PEER_TRAFFIC_INDICATION = 4,
400 TDLS_CHANNEL_SWITCH_REQUEST = 5,
401 TDLS_CHANNEL_SWITCH_RESPONSE = 6,
402 TDLS_PEER_PSM_REQUEST = 7,
403 TDLS_PEER_PSM_RESPONSE = 8,
404 TDLS_PEER_TRAFFIC_RESPONSE = 9,
405 TDLS_DISCOVERY_REQUEST = 10,
406 TDLS_DISCOVERY_RESPONSE = 14,
407 /* keep last one */
408 TDLS_MAX_ACTION_CODE,
409 };
410
411 /**
412 * enum mesh_actioncode - mesh action frames
413 * @MESH_ACTION_LINK_METRIC_REPORT: mesh link metric report action frame
414 * @MESH_ACTION_HWMP_PATH_SELECTION: mesh hwmp path selection action frame
415 * @MESH_ACTION_GATE_ANNOUNCEMENT: mesh gate announcement action frame
416 * @MESH_ACTION_CONGESTION_CONTROL_NOTIFICATION: mesh congestion control frame
417 * @MESH_ACTION_MCCA_SETUP_REQUEST: mesh mcca setup request action frame
418 * @MESH_ACTION_MCCA_SETUP_REPLY: mesh mcca setup reply action frame
419 * @MESH_ACTION_MCCA_ADVERTISEMENT_REQUEST: mesh mcca advertisement req. frame
420 * @MESH_ACTION_MCCA_ADVERTISEMENT: mesh mcca advertisement action frame
421 * @MESH_ACTION_MCCA_TEARDOWN: mesh mcca teardown action frame
422 * @MESH_ACTION_TBTT_ADJUSTMENT_REQUEST: mesh tbtt adjustment req. frame
423 * @MESH_ACTION_TBTT_ADJUSTMENT_RESPONSE: mesh tbtt adjustment rsp. frame
424 */
425 enum mesh_actioncode {
426 MESH_ACTION_LINK_METRIC_REPORT,
427 MESH_ACTION_HWMP_PATH_SELECTION,
428 MESH_ACTION_GATE_ANNOUNCEMENT,
429 MESH_ACTION_CONGESTION_CONTROL_NOTIFICATION,
430 MESH_ACTION_MCCA_SETUP_REQUEST,
431 MESH_ACTION_MCCA_SETUP_REPLY,
432 MESH_ACTION_MCCA_ADVERTISEMENT_REQUEST,
433 MESH_ACTION_MCCA_ADVERTISEMENT,
434 MESH_ACTION_MCCA_TEARDOWN,
435 MESH_ACTION_TBTT_ADJUSTMENT_REQUEST,
436 MESH_ACTION_TBTT_ADJUSTMENT_RESPONSE,
437 };
438
439 /**
440 * enum self_protected_actioncode - self protected action frames
441 * @SP_RESERVED: self protected reserved
442 * @SP_MESH_PEERING_OPEN: self protected mesh peering open frame
443 * @SP_MESH_PEERING_CONFIRM: self protected mesh peering confirm frame
444 * @SP_MESH_PEERING_CLOSE: self protected mesh peering close frame
445 * @SP_MGK_INFORM: self protected mgk inform frame
446 * @SP_MGK_ACK: self protected mgk ack frame
447 */
448 enum self_protected_actioncode {
449 SP_RESERVED,
450 SP_MESH_PEERING_OPEN,
451 SP_MESH_PEERING_CONFIRM,
452 SP_MESH_PEERING_CLOSE,
453 SP_MGK_INFORM,
454 SP_MGK_ACK,
455 };
456
457 /**
458 * enum wmm_actioncode - wmm action frames
459 * @WMM_QOS_SETUP_REQ: wmm qos setup request frame
460 * @WMM_QOS_SETUP_RESP: q wmm qos setup response frame
461 * @WMM_QOS_TEARDOWN: wmm qos teardown frame
462 */
463 enum wmm_actioncode {
464 WMM_QOS_SETUP_REQ,
465 WMM_QOS_SETUP_RESP,
466 WMM_QOS_TEARDOWN,
467 };
468
469 /**
470 * enum fst_actioncode - fst action frames
471 * @FST_SETUP_REQ: fst setup request frame
472 * @FST_SETUP_RSP: fst setup response frame
473 * @FST_TEAR_DOWN: fst qos teardown frame
474 * @FST_ACK_REQ: fst ack frame for request
475 * @FST_ACK_RSP: fst ack frame for response
476 * @FST_ON_CHANNEL_TUNNEL: fst on channel tunnel frame
477 */
478 enum fst_actioncode {
479 FST_SETUP_REQ,
480 FST_SETUP_RSP,
481 FST_TEAR_DOWN,
482 FST_ACK_REQ,
483 FST_ACK_RSP,
484 FST_ON_CHANNEL_TUNNEL,
485 };
486
487 /**
488 * enum rvs_actioncode - Robust av streaming action frames
489 * @SCS_REQ: scs request frame
490 * @SCS_RSP: scs response frame
491 * @GROUP_MEMBERSHIP_REQ: Group Membership Request frame
492 * @GROUP_MEMBERSHIP_RSP: Group Membership Response frame
493 * @MCSC_REQ: mcsc request frame
494 * @MCSC_RSP: mcsc response frame
495 */
496 enum rvs_actioncode {
497 SCS_REQ,
498 SCS_RSP,
499 GROUP_MEMBERSHIP_REQ,
500 GROUP_MEMBERSHIP_RSP,
501 MCSC_REQ,
502 MCSC_RSP,
503 };
504
505 /**
506 * enum vht_actioncode - vht action frames
507 * @VHT_ACTION_COMPRESSED_BF: vht compressed bf action frame
508 * @VHT_ACTION_GID_NOTIF: vht gid notification action frame
509 * @VHT_ACTION_OPMODE_NOTIF: vht opmode notification action frame
510 */
511 enum vht_actioncode {
512 VHT_ACTION_COMPRESSED_BF,
513 VHT_ACTION_GID_NOTIF,
514 VHT_ACTION_OPMODE_NOTIF,
515 };
516
517 /**
518 * enum twt_actioncode - twt action frames
519 * @TWT_SETUP: twt set up action frame
520 * @TWT_TEARDOWN: twt teardown action frame
521 * @TWT_INFORMATION: twt information action frame
522 */
523 enum twt_actioncode {
524 TWT_SETUP = 6,
525 TWT_TEARDOWN = 7,
526 TWT_INFORMATION = 11,
527 };
528
529 /**
530 * enum eht_actioncode - Protected EHT action frames
531 * @EHT_T2LM_REQUEST: T2LM request action frame
532 * @EHT_T2LM_RESPONSE: T2LM response action frame
533 * @EHT_T2LM_TEARDOWN: T2LM teardown action frame
534 * @EHT_EPCS_REQUEST: EPCS request action frame
535 * @EHT_EPCS_RESPONSE: EPCS response action frame
536 * @EHT_EPCS_TEARDOWN: EPCS teardown action frame
537 */
538 enum eht_actioncode {
539 EHT_T2LM_REQUEST = 0,
540 EHT_T2LM_RESPONSE = 1,
541 EHT_T2LM_TEARDOWN = 2,
542 EHT_EPCS_REQUEST = 3,
543 EHT_EPCS_RESPONSE = 4,
544 EHT_EPCS_TEARDOWN = 5,
545 };
546
547 /**
548 * struct action_frm_hdr - action frame header
549 * @action_category: action category
550 * @action_code: action code
551 */
552 struct action_frm_hdr {
553 uint8_t action_category;
554 uint8_t action_code;
555 };
556
557 /**
558 * enum mgmt_frame_type - enum of mgmt. frames
559 * @MGMT_FRM_UNSPECIFIED: unspecified
560 * @MGMT_ASSOC_REQ: association request frame
561 * @MGMT_ASSOC_RESP: association response frame
562 * @MGMT_REASSOC_REQ: reassociation request frame
563 * @MGMT_REASSOC_RESP: reassociation response frame
564 * @MGMT_PROBE_REQ: probe request frame
565 * @MGMT_PROBE_RESP: probe response frame
566 * @MGMT_BEACON: beacon frame
567 * @MGMT_ATIM: ATIM frame
568 * @MGMT_DISASSOC: disassociation frame
569 * @MGMT_AUTH: authentication frame
570 * @MGMT_DEAUTH: deauthentication frame
571 * @MGMT_ACTION_MEAS_REQUEST: measure channels request action frame
572 * @MGMT_ACTION_MEAS_REPORT: measure channels response action frame
573 * @MGMT_ACTION_TPC_REQUEST: transmit power control request action frame
574 * @MGMT_ACTION_TPC_REPORT: transmit power control response action frame
575 * @MGMT_ACTION_CHAN_SWITCH: 802.11 channel switch announcement frame
576 * @MGMT_ACTION_QOS_ADD_TS_REQ: qos add ts request frame
577 * @MGMT_ACTION_QOS_ADD_TS_RSP: qos add ts response frame
578 * @MGMT_ACTION_QOS_DEL_TS_REQ: qos del ts request frame
579 * @MGMT_ACTION_QOS_SCHEDULE: qos schedule frame
580 * @MGMT_ACTION_QOS_MAP_CONFIGURE: qos map configure frame
581 * @MGMT_ACTION_DLS_REQUEST: DLS request action frame
582 * @MGMT_ACTION_DLS_RESPONSE: DLS response action frame
583 * @MGMT_ACTION_DLS_TEARDOWN: DLS taerdown action frame
584 * @MGMT_ACTION_BA_ADDBA_REQUEST: ADDBA request action frame
585 * @MGMT_ACTION_BA_ADDBA_RESPONSE: ADDBA response action frame
586 * @MGMT_ACTION_BA_DELBA: DELBA action frame
587 * @MGMT_ACTION_2040_BSS_COEXISTENCE: 20-40 bss coex action frame
588 * @MGMT_ACTION_CATEGORY_VENDOR_SPECIFIC: category vendor specific action frame
589 * @MGMT_ACTION_CATEGORY_VENDOR_SPECIFIC_PROTECTED: category vendor specific
590 * protected action frame
591 * @MGMT_ACTION_EXT_CHANNEL_SWITCH_ID: ext channel switch id action frame
592 * @MGMT_ACTION_VENDOR_SPECIFIC: vendor specific action frame
593 * @MGMT_ACTION_TDLS_DISCRESP: TDLS discovery response frame
594 * @MGMT_ACTION_RRM_RADIO_MEASURE_REQ: rrm radio meas. req. action frame
595 * @MGMT_ACTION_RRM_RADIO_MEASURE_RPT: rrm radio meas. report action frame
596 * @MGMT_ACTION_RRM_LINK_MEASUREMENT_REQ: rrm link meas. req. action frame
597 * @MGMT_ACTION_RRM_LINK_MEASUREMENT_RPT: rrm link meas. report action frame
598 * @MGMT_ACTION_RRM_NEIGHBOR_REQ: rrm neighbor request action frame
599 * @MGMT_ACTION_RRM_NEIGHBOR_RPT: rrm neighbor response action frame
600 * @MGMT_ACTION_FT_REQUEST: ft request action frame
601 * @MGMT_ACTION_FT_RESPONSE: ft response action frame
602 * @MGMT_ACTION_FT_CONFIRM: ft confirm action frame
603 * @MGMT_ACTION_FT_ACK: ft ack action frame
604 * @MGMT_ACTION_HT_NOTIFY_CHANWIDTH: notify channel width action frame
605 * @MGMT_ACTION_HT_SMPS: spatial multiplexing power save action frame
606 * @MGMT_ACTION_HT_PSMP: psmp action frame
607 * @MGMT_ACTION_HT_PCO_PHASE: pco phase action frame
608 * @MGMT_ACTION_HT_CSI: CSI action frame
609 * @MGMT_ACTION_HT_NONCOMPRESSED_BF: non-compressed beamforming action frame
610 * @MGMT_ACTION_HT_COMPRESSED_BF: compressed beamforming action frame
611 * @MGMT_ACTION_HT_ASEL_IDX_FEEDBACK: asel idx feedback action frame
612 * @MGMT_ACTION_SA_QUERY_REQUEST: SA query request frame
613 * @MGMT_ACTION_SA_QUERY_RESPONSE: SA query response frame
614 * @MGMT_ACTION_PDPA_GAS_INIT_REQ: pdpa gas init request action frame
615 * @MGMT_ACTION_PDPA_GAS_INIT_RSP: pdpa gas init response frame
616 * @MGMT_ACTION_PDPA_GAS_COMEBACK_REQ: pdpa gas comeback req. action frame
617 * @MGMT_ACTION_PDPA_GAS_COMEBACK_RSP: pdpa gas comeback rsp. action frame
618 * @MGMT_ACTION_WNM_BSS_TM_QUERY: wnm bss tm query action frame
619 * @MGMT_ACTION_WNM_BSS_TM_REQUEST: wnm bss tm request action frame
620 * @MGMT_ACTION_WNM_BSS_TM_RESPONSE: wnm bss tm response action frame
621 * @MGMT_ACTION_WNM_NOTIF_REQUEST: wnm notification request action frame
622 * @MGMT_ACTION_WNM_NOTIF_RESPONSE: wnm notification response action frame
623 * @MGMT_ACTION_WNM_FMS_REQ: wnm fms request frame
624 * @MGMT_ACTION_WNM_FMS_RESP: wnm fms response frame
625 * @MGMT_ACTION_WNM_TFS_REQ: wnm tfs request frame
626 * @MGMT_ACTION_WNM_TFS_RESP: wnm tfs response frame
627 * @MGMT_ACTION_WNM_TFS_NOTIFY: wnm tfs notify frame
628 * @MGMT_ACTION_WNM_SLEEP_REQ: wnm sleep request frame
629 * @MGMT_ACTION_WNM_SLEEP_RESP: wnm sleep response frame
630 * @MGMT_ACTION_WNM_TIM_REQ: wnm Tim broadcast request frame
631 * @MGMT_ACTION_WNM_TIM_RESP: wnm Tim broadcast response frame
632 * @MGMT_ACTION_TDLS_SETUP_REQ: tdls setup request action frame
633 * @MGMT_ACTION_TDLS_SETUP_RSP: tdls setup response frame
634 * @MGMT_ACTION_TDLS_SETUP_CNF: tdls setup confirm frame
635 * @MGMT_ACTION_TDLS_TEARDOWN: tdls teardown frame
636 * @MGMT_ACTION_TDLS_PEER_TRAFFIC_IND: tdls peer traffic indication frame
637 * @MGMT_ACTION_TDLS_CH_SWITCH_REQ: tdls channel switch req. frame
638 * @MGMT_ACTION_TDLS_CH_SWITCH_RSP: tdls channel switch response frame
639 * @MGMT_ACTION_TDLS_PEER_PSM_REQUEST: tdls peer psm request frame
640 * @MGMT_ACTION_TDLS_PEER_PSM_RESPONSE: tdls peer psm response frame
641 * @MGMT_ACTION_TDLS_PEER_TRAFFIC_RSP: tdls peer traffic response frame
642 * @MGMT_ACTION_TDLS_DIS_REQ: tdls discovery request frame
643 * @MGMT_ACTION_MESH_LINK_METRIC_REPORT: mesh link metric report action frame
644 * @MGMT_ACTION_MESH_HWMP_PATH_SELECTION: mesh hwmp path selection action frame
645 * @MGMT_ACTION_MESH_GATE_ANNOUNCEMENT: mesh gate announcement action frame
646 * @MGMT_ACTION_MESH_CONGESTION_CONTROL_NOTIFICATION: mesh congestion control
647 * @MGMT_ACTION_MESH_MCCA_SETUP_REQUEST: mesh mcca setup request action frame
648 * @MGMT_ACTION_MESH_MCCA_SETUP_REPLY: mesh mcca setup reply action frame
649 * @MGMT_ACTION_MESH_MCCA_ADVERTISEMENT_REQUEST: mesh mcca advertisement req.
650 * @MGMT_ACTION_MESH_MCCA_ADVERTISEMENT: mesh mcca advertisement action frame
651 * @MGMT_ACTION_MESH_MCCA_TEARDOWN: mesh mcca teardown action fram
652 * @MGMT_ACTION_MESH_TBTT_ADJUSTMENT_REQUEST: mesh tbtt adjustment req. frame
653 * @MGMT_ACTION_MESH_TBTT_ADJUSTMENT_RESPONSE: mesh tbtt adjustment rsp. frame
654 * @MGMT_ACTION_SP_MESH_PEERING_OPEN: self protected mesh peering open frame
655 * @MGMT_ACTION_SP_MESH_PEERING_CONFIRM: self protected mesh peering confirm
656 * @MGMT_ACTION_SP_MESH_PEERING_CLOSE: self protected mesh peering close frame
657 * @MGMT_ACTION_SP_MGK_INFORM: self protected mgk inform frame
658 * @MGMT_ACTION_SP_MGK_ACK: self protected mgk ack frame
659 * @MGMT_ACTION_WMM_QOS_SETUP_REQ: WMM qos setup request action frame
660 * @MGMT_ACTION_WMM_QOS_SETUP_RESP: WMM qos setup response action frame
661 * @MGMT_ACTION_WMM_QOS_TEARDOWN: WMM qos teardown action frame
662 * @MGMT_ACTION_VHT_COMPRESSED_BF: vht compressed bf action frame
663 * @MGMT_ACTION_VHT_GID_NOTIF: vht gid notification action frame
664 * @MGMT_ACTION_VHT_OPMODE_NOTIF: vht opmode notification action frame
665 * @MGMT_ACTION_GAS_INITIAL_REQUEST: GAS Initial request action frame
666 * @MGMT_ACTION_GAS_INITIAL_RESPONSE: GAS Initial response action frame
667 * @MGMT_ACTION_GAS_COMEBACK_REQUEST: GAS Comeback request action frame
668 * @MGMT_ACTION_GAS_COMEBACK_RESPONSE: GAS Comeback response action frame
669 * @MGMT_ACTION_FST_SETUP_REQ: FST setup request frame
670 * @MGMT_ACTION_FST_SETUP_RSP: FST setup response frame
671 * @MGMT_ACTION_FST_TEAR_DOWN: FST qos teardown frame
672 * @MGMT_ACTION_FST_ACK_REQ: FST ack frame for request
673 * @MGMT_ACTION_FST_ACK_RSP: FST ack frame for response
674 * @MGMT_ACTION_FST_ON_CHANNEL_TUNNEL: FST on channel tunnel frame
675 * @MGMT_ACTION_SCS_REQ: SCS request frame
676 * @MGMT_ACTION_SCS_RSP: SCS response frame
677 * @MGMT_ACTION_GROUP_MEMBERSHIP_REQ: group membership request frame
678 * @MGMT_ACTION_GROUP_MEMBERSHIP_RSP: group membership response frame
679 * @MGMT_ACTION_MCSC_REQ: MCSC request frame
680 * @MGMT_ACTION_MCSC_RSP: MCSC response frame
681 * @MGMT_FRAME_TYPE_ALL: mgmt frame type for all type of frames
682 * @MGMT_CTRL_FRAME: Control Frames
683 * @MGMT_ACTION_TWT_SETUP: TWT setup frame
684 * @MGMT_ACTION_TWT_TEARDOWN: TWT teardown frame
685 * @MGMT_ACTION_TWT_INFORMATION: TWT information frame
686 * @MGMT_ACTION_EHT_T2LM_REQUEST: T2LM request frame
687 * @MGMT_ACTION_EHT_T2LM_RESPONSE: T2LM response frame
688 * @MGMT_ACTION_EHT_T2LM_TEARDOWN: T2LM teardown frame
689 * @MGMT_ACTION_EHT_EPCS_REQUEST: EPCS request frame
690 * @MGMT_ACTION_EHT_EPCS_RESPONSE: EPCS response frame
691 * @MGMT_ACTION_EHT_EPCS_TEARDOWN: EPCS teardown frame
692 * @MGMT_ACTION_FTM_REQUEST: FTM request frame
693 * @MGMT_ACTION_FTM_RESPONSE: FTM response frame
694 * @MGMT_ACTION_FILS_DISCOVERY: FILS Discovery frame
695 * @MGMT_MAX_FRAME_TYPE: max. mgmt frame types
696 */
697 enum mgmt_frame_type {
698 MGMT_FRM_UNSPECIFIED = -1,
699 MGMT_ASSOC_REQ,
700 MGMT_ASSOC_RESP,
701 MGMT_REASSOC_REQ,
702 MGMT_REASSOC_RESP,
703 MGMT_PROBE_REQ,
704 MGMT_PROBE_RESP,
705 MGMT_BEACON,
706 MGMT_ATIM,
707 MGMT_DISASSOC,
708 MGMT_AUTH,
709 MGMT_DEAUTH,
710 MGMT_ACTION_MEAS_REQUEST,
711 MGMT_ACTION_MEAS_REPORT,
712 MGMT_ACTION_TPC_REQUEST,
713 MGMT_ACTION_TPC_REPORT,
714 MGMT_ACTION_CHAN_SWITCH,
715 MGMT_ACTION_QOS_ADD_TS_REQ,
716 MGMT_ACTION_QOS_ADD_TS_RSP,
717 MGMT_ACTION_QOS_DEL_TS_REQ,
718 MGMT_ACTION_QOS_SCHEDULE,
719 MGMT_ACTION_QOS_MAP_CONFIGURE,
720 MGMT_ACTION_DLS_REQUEST,
721 MGMT_ACTION_DLS_RESPONSE,
722 MGMT_ACTION_DLS_TEARDOWN,
723 MGMT_ACTION_BA_ADDBA_REQUEST,
724 MGMT_ACTION_BA_ADDBA_RESPONSE,
725 MGMT_ACTION_BA_DELBA,
726 MGMT_ACTION_2040_BSS_COEXISTENCE,
727 MGMT_ACTION_CATEGORY_VENDOR_SPECIFIC,
728 MGMT_ACTION_CATEGORY_VENDOR_SPECIFIC_PROTECTED,
729 MGMT_ACTION_EXT_CHANNEL_SWITCH_ID,
730 MGMT_ACTION_VENDOR_SPECIFIC,
731 MGMT_ACTION_TDLS_DISCRESP,
732 MGMT_ACTION_RRM_RADIO_MEASURE_REQ,
733 MGMT_ACTION_RRM_RADIO_MEASURE_RPT,
734 MGMT_ACTION_RRM_LINK_MEASUREMENT_REQ,
735 MGMT_ACTION_RRM_LINK_MEASUREMENT_RPT,
736 MGMT_ACTION_RRM_NEIGHBOR_REQ,
737 MGMT_ACTION_RRM_NEIGHBOR_RPT,
738 MGMT_ACTION_FT_REQUEST,
739 MGMT_ACTION_FT_RESPONSE,
740 MGMT_ACTION_FT_CONFIRM,
741 MGMT_ACTION_FT_ACK,
742 MGMT_ACTION_HT_NOTIFY_CHANWIDTH,
743 MGMT_ACTION_HT_SMPS,
744 MGMT_ACTION_HT_PSMP,
745 MGMT_ACTION_HT_PCO_PHASE,
746 MGMT_ACTION_HT_CSI,
747 MGMT_ACTION_HT_NONCOMPRESSED_BF,
748 MGMT_ACTION_HT_COMPRESSED_BF,
749 MGMT_ACTION_HT_ASEL_IDX_FEEDBACK,
750 MGMT_ACTION_SA_QUERY_REQUEST,
751 MGMT_ACTION_SA_QUERY_RESPONSE,
752 MGMT_ACTION_PDPA_GAS_INIT_REQ,
753 MGMT_ACTION_PDPA_GAS_INIT_RSP,
754 MGMT_ACTION_PDPA_GAS_COMEBACK_REQ,
755 MGMT_ACTION_PDPA_GAS_COMEBACK_RSP,
756 MGMT_ACTION_WNM_BSS_TM_QUERY,
757 MGMT_ACTION_WNM_BSS_TM_REQUEST,
758 MGMT_ACTION_WNM_BSS_TM_RESPONSE,
759 MGMT_ACTION_WNM_NOTIF_REQUEST,
760 MGMT_ACTION_WNM_NOTIF_RESPONSE,
761 MGMT_ACTION_WNM_FMS_REQ,
762 MGMT_ACTION_WNM_FMS_RESP,
763 MGMT_ACTION_WNM_TFS_REQ,
764 MGMT_ACTION_WNM_TFS_RESP,
765 MGMT_ACTION_WNM_TFS_NOTIFY,
766 MGMT_ACTION_WNM_SLEEP_REQ,
767 MGMT_ACTION_WNM_SLEEP_RESP,
768 MGMT_ACTION_WNM_TIM_REQ,
769 MGMT_ACTION_WNM_TIM_RESP,
770 MGMT_ACTION_TDLS_SETUP_REQ,
771 MGMT_ACTION_TDLS_SETUP_RSP,
772 MGMT_ACTION_TDLS_SETUP_CNF,
773 MGMT_ACTION_TDLS_TEARDOWN,
774 MGMT_ACTION_TDLS_PEER_TRAFFIC_IND,
775 MGMT_ACTION_TDLS_CH_SWITCH_REQ,
776 MGMT_ACTION_TDLS_CH_SWITCH_RSP,
777 MGMT_ACTION_TDLS_PEER_PSM_REQUEST,
778 MGMT_ACTION_TDLS_PEER_PSM_RESPONSE,
779 MGMT_ACTION_TDLS_PEER_TRAFFIC_RSP,
780 MGMT_ACTION_TDLS_DIS_REQ,
781 MGMT_ACTION_MESH_LINK_METRIC_REPORT,
782 MGMT_ACTION_MESH_HWMP_PATH_SELECTION,
783 MGMT_ACTION_MESH_GATE_ANNOUNCEMENT,
784 MGMT_ACTION_MESH_CONGESTION_CONTROL_NOTIFICATION,
785 MGMT_ACTION_MESH_MCCA_SETUP_REQUEST,
786 MGMT_ACTION_MESH_MCCA_SETUP_REPLY,
787 MGMT_ACTION_MESH_MCCA_ADVERTISEMENT_REQUEST,
788 MGMT_ACTION_MESH_MCCA_ADVERTISEMENT,
789 MGMT_ACTION_MESH_MCCA_TEARDOWN,
790 MGMT_ACTION_MESH_TBTT_ADJUSTMENT_REQUEST,
791 MGMT_ACTION_MESH_TBTT_ADJUSTMENT_RESPONSE,
792 MGMT_ACTION_SP_MESH_PEERING_OPEN,
793 MGMT_ACTION_SP_MESH_PEERING_CONFIRM,
794 MGMT_ACTION_SP_MESH_PEERING_CLOSE,
795 MGMT_ACTION_SP_MGK_INFORM,
796 MGMT_ACTION_SP_MGK_ACK,
797 MGMT_ACTION_WMM_QOS_SETUP_REQ,
798 MGMT_ACTION_WMM_QOS_SETUP_RESP,
799 MGMT_ACTION_WMM_QOS_TEARDOWN,
800 MGMT_ACTION_VHT_COMPRESSED_BF,
801 MGMT_ACTION_VHT_GID_NOTIF,
802 MGMT_ACTION_VHT_OPMODE_NOTIF,
803 MGMT_ACTION_GAS_INITIAL_REQUEST,
804 MGMT_ACTION_GAS_INITIAL_RESPONSE,
805 MGMT_ACTION_GAS_COMEBACK_REQUEST,
806 MGMT_ACTION_GAS_COMEBACK_RESPONSE,
807 MGMT_ACTION_FST_SETUP_REQ,
808 MGMT_ACTION_FST_SETUP_RSP,
809 MGMT_ACTION_FST_TEAR_DOWN,
810 MGMT_ACTION_FST_ACK_REQ,
811 MGMT_ACTION_FST_ACK_RSP,
812 MGMT_ACTION_FST_ON_CHANNEL_TUNNEL,
813 MGMT_ACTION_SCS_REQ,
814 MGMT_ACTION_SCS_RSP,
815 MGMT_ACTION_GROUP_MEMBERSHIP_REQ,
816 MGMT_ACTION_GROUP_MEMBERSHIP_RSP,
817 MGMT_ACTION_MCSC_REQ,
818 MGMT_ACTION_MCSC_RSP,
819 MGMT_FRAME_TYPE_ALL,
820 MGMT_CTRL_FRAME,
821 MGMT_ACTION_TWT_SETUP,
822 MGMT_ACTION_TWT_TEARDOWN,
823 MGMT_ACTION_TWT_INFORMATION,
824 MGMT_ACTION_EHT_T2LM_REQUEST,
825 MGMT_ACTION_EHT_T2LM_RESPONSE,
826 MGMT_ACTION_EHT_T2LM_TEARDOWN,
827 MGMT_ACTION_EHT_EPCS_REQUEST,
828 MGMT_ACTION_EHT_EPCS_RESPONSE,
829 MGMT_ACTION_EHT_EPCS_TEARDOWN,
830 MGMT_ACTION_FTM_REQUEST,
831 MGMT_ACTION_FTM_RESPONSE,
832 MGMT_ACTION_FILS_DISCOVERY,
833 MGMT_MAX_FRAME_TYPE,
834 };
835
836 #define WLAN_MGMT_TXRX_HOST_MAX_ANTENNA 4
837 #define WLAN_MGMT_TXRX_HOST_MAX_PN_LEN 8
838 #define WLAN_INVALID_PER_CHAIN_RSSI 0xFF
839 #define WLAN_INVALID_PER_CHAIN_SNR 0x80
840 #define WLAN_NOISE_FLOOR_DBM_DEFAULT -96
841
842 /**
843 * struct frame_pn_params - host PN params
844 * @curr_pn: current running PN of rx frames
845 * @prev_pn: previous PN of rx frames
846 */
847 struct frame_pn_params {
848 uint8_t curr_pn[WLAN_MGMT_TXRX_HOST_MAX_PN_LEN];
849 uint8_t prev_pn[WLAN_MGMT_TXRX_HOST_MAX_PN_LEN];
850 };
851
852 /**
853 * struct frm_conn_ap - connected ap
854 * @mgmt_frm_sub_type: type of frame
855 * @is_conn_ap_frm: set if frm is from connected ap
856 */
857 struct frm_conn_ap {
858 uint8_t mgmt_frm_sub_type;
859 uint8_t is_conn_ap_frm;
860 };
861
862 /**
863 * enum mgmt_rx_evt_ext_meta_id - Identifier to rx_params ext data
864 * @MGMT_RX_PARAMS_EXT_META_ADDBA: Tag id to indicate ADDBA meta info
865 * @MGMT_RX_PARAMS_EXT_META_TWT: Tag id to indicate TWT IE in meta info
866 */
867 enum mgmt_rx_evt_ext_meta_id {
868 MGMT_RX_PARAMS_EXT_META_ADDBA,
869 MGMT_RX_PARAMS_EXT_META_TWT,
870 };
871
872 #define MAX_TWT_IE_RX_PARAMS_LEN 255
873 /**
874 * struct mgmt_rx_event_ext_params - Host mgmt extended params
875 * @meta_id: Meta id to identify if this is ADDBA or TWT related info
876 * @add_ba_params: set for meta_id MGMT_RX_PARAMS_EXT_META_ADDBA
877 * @ba_win_size: Block-Ack window size
878 * @reo_win_size: Reo win size
879 * @twt_ie: Set when meta_id is MGMT_RX_PARAMS_EXT_META_TWT
880 * @ie_len: IE len of TWT IE from FW
881 * @ie_data: IE data of TWT IE from FW
882 * @u: union of above two params as it is mutually exclusive.
883 */
884 struct mgmt_rx_event_ext_params {
885 enum mgmt_rx_evt_ext_meta_id meta_id;
886 union {
887 struct add_ba_params {
888 uint16_t ba_win_size;
889 uint16_t reo_win_size;
890 } addba;
891 struct twt_ie {
892 uint16_t ie_len;
893 uint8_t ie_data[MAX_TWT_IE_RX_PARAMS_LEN];
894 } twt;
895 } u;
896 };
897
898 #ifdef WLAN_FEATURE_11BE_MLO
899 #define CU_VDEV_MAP_MASK 0xFFFF
900 /*
901 * Maximum number of CU LINKS across the system.
902 * this is not the CU links within and AP MLD.
903 */
904 #define CU_MAX_MLO_LINKS 6
905 #define MAX_AP_MLDS_PER_LINK 16
906 /**
907 * struct mlo_mgmt_ml_info - Ongoing Critical Update information.
908 * @cu_vdev_map: Per link critical update ap vdev bit map.
909 * bit 0 Indicate vap with least vdev id in a link
910 * bit 15 Indicate vap with max vdev id in a link
911 * @vdev_bpcc: Each byte contains BPCC value per MLO VAP
912 * 16 byte entries for each link corresponding to AP MLD in a link.
913 * Max number of byte entries will be
914 * (max MLO links supported * max AP MLDs in a link).
915 *
916 * The mlo_mgmt_ml_info contain AP MLD CU indication and latest copies of BSS
917 * parameter change count BPCC values of all AP MLDs in an available MLO links.
918 * Per-link contains 16 AP MLDs at max.
919 * 16 bits to indicate respective AP MLD VDEVs in a link.
920 * Number of max links supported are 6.
921 */
922 struct mlo_mgmt_ml_info {
923 uint16_t cu_vdev_map[CU_MAX_MLO_LINKS];
924 uint8_t vdev_bpcc[MAX_AP_MLDS_PER_LINK * CU_MAX_MLO_LINKS];
925 };
926
927 /**
928 * struct mlo_bcast_t2lm_info - TID-to-link mapping broadcast info
929 * @num_vdevs: Number of vdevs for which FW populated the expected duration
930 * @vdev_id: Array of vdev ids
931 * @expected_duration: Array of expected duration for vdev ids
932 */
933 struct mlo_bcast_t2lm_info {
934 uint8_t num_vdevs;
935 uint8_t vdev_id[MAX_AP_MLDS_PER_LINK];
936 uint32_t expected_duration[MAX_AP_MLDS_PER_LINK];
937 };
938
939 /**
940 * struct mlo_vdev_pause - ML vdev pause info
941 * @vdev_id: vdev id of vdev to be paused
942 * @vdev_pause_duration: vdev pause duration
943 */
944 struct mlo_vdev_pause {
945 uint16_t vdev_id;
946 uint32_t vdev_pause_duration;
947 };
948 #endif
949
950 /**
951 * struct mgmt_rx_event_params - host mgmt header params
952 * @chan_freq: channel frequency on which this frame is received
953 * @channel: channel on which this frame is received
954 * @snr: snr information used to call rssi
955 * @rssi_ctl: RSSI of PRI 20MHz for each chain
956 * @rate: Rate kbps
957 * @phy_mode: rx phy mode
958 * @buf_len: length of the frame
959 * @status: rx status. It is a bitfield being used based on below defines
960 * WMI_HOST_RXERR_CRC = 0x01
961 * WMI_HOST_RXERR_DECRYPT = 0x08
962 * WMI_HOST_RXERR_MIC = 0x10
963 * WMI_HOST_RXERR_KEY_CACHE_MISS = 0x20
964 * WMI_HOST_RXERR_PN = 0x80
965 * @flags: information about the management frame e.g. can give a
966 * scan source for a scan result mgmt frame
967 * @rssi: combined RSSI, i.e. the sum of the snr + noise floor (dBm units)
968 * @tsf_delta: tsf delta
969 * @tsf_l32: tsf value
970 * @pdev_id: pdev id
971 * @rx_params: pointer to other rx params
972 * (win specific, will be removed in phase 4)
973 * @reo_params: Pointer to MGMT Rx REO params
974 * @pn_params: Frame PN params
975 * @ext_params: Extended params
976 * @is_conn_ap: Frame is from connected ap
977 * @cu_params: MLO MGMT Critical Update params
978 * @link_removal_info: MLO link removal information array
979 * @num_link_removal_info: Number of elements in @link_removal_info
980 * @t2lm_params: T2LM related info received from FW
981 */
982 struct mgmt_rx_event_params {
983 uint32_t chan_freq;
984 uint32_t channel;
985 uint32_t snr;
986 uint8_t rssi_ctl[WLAN_MGMT_TXRX_HOST_MAX_ANTENNA];
987 uint32_t rate;
988 enum wlan_phymode phy_mode;
989 uint32_t buf_len;
990 uint8_t status;
991 uint32_t flags;
992 int32_t rssi;
993 uint32_t tsf_delta;
994 uint32_t tsf_l32;
995 uint8_t pdev_id;
996 void *rx_params;
997 #ifdef WLAN_MGMT_RX_REO_SUPPORT
998 struct mgmt_rx_reo_params *reo_params;
999 #endif
1000 struct frame_pn_params pn_params;
1001 struct mgmt_rx_event_ext_params *ext_params;
1002 struct frm_conn_ap is_conn_ap;
1003 #ifdef WLAN_FEATURE_11BE_MLO
1004 struct mlo_mgmt_ml_info cu_params;
1005 struct mgmt_rx_mlo_link_removal_info *link_removal_info;
1006 int num_link_removal_info;
1007 struct mlo_bcast_t2lm_info t2lm_params;
1008 #endif
1009 };
1010
1011 #ifdef WLAN_FEATURE_11BE_MLO
1012 #define free_mgmt_rx_mlo_link_removal_info(rx_params) \
1013 qdf_mem_free((rx_params)->link_removal_info)
1014 #else
1015 #define free_mgmt_rx_mlo_link_removal_info(rx_params)
1016 #endif
1017
1018 #ifdef WLAN_MGMT_RX_REO_SUPPORT
1019 static inline
alloc_mgmt_rx_event_params(void)1020 struct mgmt_rx_event_params *alloc_mgmt_rx_event_params(void)
1021 {
1022 struct mgmt_rx_event_params *rx_params;
1023
1024 rx_params = qdf_mem_malloc(sizeof(struct mgmt_rx_event_params));
1025 if (!rx_params)
1026 return NULL;
1027
1028 rx_params->reo_params =
1029 qdf_mem_malloc(sizeof(struct mgmt_rx_reo_params));
1030
1031 if (!rx_params->reo_params) {
1032 qdf_mem_free(rx_params);
1033 return NULL;
1034 }
1035
1036 rx_params->ext_params =
1037 qdf_mem_malloc(sizeof(struct mgmt_rx_event_ext_params));
1038
1039 if (!rx_params->ext_params) {
1040 qdf_mem_free(rx_params->reo_params);
1041 qdf_mem_free(rx_params);
1042 return NULL;
1043 }
1044
1045 return rx_params;
1046 }
1047
1048 static inline void
free_mgmt_rx_event_params(struct mgmt_rx_event_params * rx_params)1049 free_mgmt_rx_event_params(struct mgmt_rx_event_params *rx_params)
1050 {
1051 if (rx_params) {
1052 qdf_mem_free(rx_params->ext_params);
1053 qdf_mem_free(rx_params->reo_params);
1054 free_mgmt_rx_mlo_link_removal_info(rx_params);
1055 }
1056
1057 qdf_mem_free(rx_params);
1058 }
1059 #else
1060 static inline
alloc_mgmt_rx_event_params(void)1061 struct mgmt_rx_event_params *alloc_mgmt_rx_event_params(void)
1062 {
1063 struct mgmt_rx_event_params *rx_params;
1064
1065 rx_params = qdf_mem_malloc(sizeof(struct mgmt_rx_event_params));
1066 if (!rx_params)
1067 return NULL;
1068
1069 rx_params->ext_params =
1070 qdf_mem_malloc(sizeof(struct mgmt_rx_event_ext_params));
1071
1072 if (!rx_params->ext_params) {
1073 qdf_mem_free(rx_params);
1074 return NULL;
1075 }
1076
1077 return rx_params;
1078 }
1079
1080 static inline void
free_mgmt_rx_event_params(struct mgmt_rx_event_params * rx_params)1081 free_mgmt_rx_event_params(struct mgmt_rx_event_params *rx_params)
1082 {
1083 if (rx_params) {
1084 qdf_mem_free(rx_params->ext_params);
1085 free_mgmt_rx_mlo_link_removal_info(rx_params);
1086 }
1087
1088 qdf_mem_free(rx_params);
1089 }
1090 #endif
1091
1092 /**
1093 * typedef mgmt_tx_download_comp_cb() - function pointer for tx download
1094 * completions.
1095 * @context: caller component specific context
1096 * @buf: buffer
1097 * @free: to free/not free the buffer
1098 *
1099 * This is the function pointer to be called on tx download completion
1100 * if download complete is required.
1101 *
1102 * Return: QDF_STATUS_SUCCESS - in case of success
1103 */
1104 typedef QDF_STATUS (*mgmt_tx_download_comp_cb)(void *context,
1105 qdf_nbuf_t buf, bool free);
1106
1107 /**
1108 * typedef mgmt_ota_comp_cb() - function pointer for tx ota completions.
1109 * @context: caller component specific context
1110 * @buf: buffer
1111 * @status: tx completion status
1112 * @tx_compl_params: tx completion params
1113 *
1114 * This is the function pointer to be called on tx ota completion.
1115 *
1116 * Return: QDF_STATUS_SUCCESS - in case of success
1117 */
1118 typedef QDF_STATUS (*mgmt_ota_comp_cb)(void *context, qdf_nbuf_t buf,
1119 uint32_t status, void *tx_compl_params);
1120
1121 /**
1122 * typedef mgmt_frame_rx_callback() - function pointer for receiving mgmt
1123 * rx frames
1124 * @psoc: psoc context
1125 * @peer: peer
1126 * @buf: buffer
1127 * @mgmt_rx_params: rx params
1128 * @frm_type: mgmt rx frame type
1129 *
1130 * This is the function pointer to be called on receiving mgmt rx frames.
1131 *
1132 * Return: QDF_STATUS_SUCCESS - in case of success
1133 */
1134 typedef QDF_STATUS (*mgmt_frame_rx_callback)(
1135 struct wlan_objmgr_psoc *psoc,
1136 struct wlan_objmgr_peer *peer,
1137 qdf_nbuf_t buf,
1138 struct mgmt_rx_event_params *mgmt_rx_params,
1139 enum mgmt_frame_type frm_type);
1140
1141 /**
1142 * typedef mgmt_frame_fill_peer_cb() - Function pointer to fill peer in the buf
1143 * @peer: peer
1144 * @buf: buffer
1145 *
1146 * This is the function pointer to be called during drain to fill the
1147 * peer into the buf's cb structure.
1148 *
1149 * Return: QDF_STATUS_SUCCESS - in case of success
1150 */
1151 typedef QDF_STATUS (*mgmt_frame_fill_peer_cb)(
1152 struct wlan_objmgr_peer *peer,
1153 qdf_nbuf_t buf);
1154
1155 /**
1156 * struct mgmt_txrx_mgmt_frame_cb_info - frm and corresponding rx cb info
1157 * @frm_type: mgmt frm type
1158 * @mgmt_rx_cb: corresponding rx callback
1159 */
1160 struct mgmt_txrx_mgmt_frame_cb_info {
1161 enum mgmt_frame_type frm_type;
1162 mgmt_frame_rx_callback mgmt_rx_cb;
1163 };
1164
1165
1166 /**
1167 * wlan_mgmt_txrx_init() - initialize mgmt txrx context.
1168 *
1169 * This function initializes the mgmt txrx context,
1170 * mgmt descriptor pool, etc.
1171 *
1172 * Return: QDF_STATUS_SUCCESS - in case of success
1173 */
1174 QDF_STATUS wlan_mgmt_txrx_init(void);
1175
1176 /**
1177 * wlan_mgmt_txrx_deinit() - deinitialize mgmt txrx context.
1178 *
1179 * This function deinitializes the mgmt txrx context,
1180 * mgmt descriptor pool, etc.
1181 *
1182 * Return: QDF_STATUS_SUCCESS - in case of success
1183 */
1184 QDF_STATUS wlan_mgmt_txrx_deinit(void);
1185
1186 /**
1187 * wlan_mgmt_txrx_mgmt_frame_tx() - transmits mgmt. frame
1188 * @peer: peer
1189 * @context: caller component specific context
1190 * @buf: buffer to be transmitted
1191 * @tx_comp_cb: download completion cb function
1192 * @tx_ota_comp_cb: post processing cb function
1193 * @comp_id: umac component id
1194 * @mgmt_tx_params: mgmt tx params
1195 *
1196 * This function transmits the mgmt. frame to southbound interface.
1197 *
1198 * Return: QDF_STATUS_SUCCESS - in case of success
1199 */
1200 QDF_STATUS wlan_mgmt_txrx_mgmt_frame_tx(struct wlan_objmgr_peer *peer,
1201 void *context,
1202 qdf_nbuf_t buf,
1203 mgmt_tx_download_comp_cb tx_comp_cb,
1204 mgmt_ota_comp_cb tx_ota_comp_cb,
1205 enum wlan_umac_comp_id comp_id,
1206 void *mgmt_tx_params);
1207 /**
1208 * wlan_mgmt_is_rmf_mgmt_action_frame() - API to check action category is rmf
1209 * @action_category: action category to check
1210 *
1211 * Return: true if action category is rmf else false
1212 */
1213 bool wlan_mgmt_is_rmf_mgmt_action_frame(uint8_t action_category);
1214
1215 /**
1216 * wlan_mgmt_txrx_beacon_frame_tx() - transmits mgmt. beacon
1217 * @peer: peer context
1218 * @buf: buffer to be transmitted
1219 * @comp_id: umac component id
1220 *
1221 * This function transmits the mgmt. beacon to southbound interface.
1222 *
1223 * Return: QDF_STATUS_SUCCESS - in case of success
1224 */
1225 QDF_STATUS wlan_mgmt_txrx_beacon_frame_tx(struct wlan_objmgr_peer *peer,
1226 qdf_nbuf_t buf,
1227 enum wlan_umac_comp_id comp_id);
1228
1229 #ifdef WLAN_SUPPORT_FILS
1230 /**
1231 * wlan_mgmt_txrx_fd_action_frame_tx() - transmits mgmt. FD Action frame
1232 * @vdev: vdev object
1233 * @buf: buffer to be transmitted
1234 * @comp_id: umac component id
1235 *
1236 * This function transmits the FILS Discovery Action frame to
1237 * southbound interface.
1238 *
1239 * Return: QDF_STATUS_SUCCESS - in case of success
1240 */
1241 QDF_STATUS wlan_mgmt_txrx_fd_action_frame_tx(struct wlan_objmgr_vdev *vdev,
1242 qdf_nbuf_t buf,
1243 enum wlan_umac_comp_id comp_id);
1244 #endif /* WLAN_SUPPORT_FILS */
1245
1246 /**
1247 * wlan_mgmt_txrx_register_rx_cb() - registers the rx cb for mgmt. frames
1248 * @psoc: psoc context
1249 * @comp_id: umac component id
1250 * @frm_cb_info: pointer to array of structure containing frm type and callback
1251 * @num_entries: num of frames for which cb to be registered
1252 *
1253 * This function registers rx callback for mgmt. frames for
1254 * the corresponding umac component passed in the func.
1255 *
1256 * Return: QDF_STATUS_SUCCESS - in case of success
1257 */
1258 QDF_STATUS wlan_mgmt_txrx_register_rx_cb(
1259 struct wlan_objmgr_psoc *psoc,
1260 enum wlan_umac_comp_id comp_id,
1261 struct mgmt_txrx_mgmt_frame_cb_info *frm_cb_info,
1262 uint8_t num_entries);
1263
1264 /**
1265 * wlan_mgmt_txrx_vdev_drain() - Function to drain all mgmt packets
1266 * specific to a vdev
1267 * @vdev: vdev context
1268 * @mgmt_fill_peer_cb: callback func to UMAC to fill peer into buf
1269 * @status: opaque pointer about the status of the pkts passed to UMAC
1270 *
1271 * This function drains all mgmt packets of a vdev. This can be used in the
1272 * event of target going down without sending completions.
1273 *
1274 * Return: QDF_STATUS_SUCCESS - in case of success
1275 */
1276 QDF_STATUS wlan_mgmt_txrx_vdev_drain(
1277 struct wlan_objmgr_vdev *vdev,
1278 mgmt_frame_fill_peer_cb mgmt_fill_peer_cb,
1279 void *status);
1280
1281 /**
1282 * wlan_mgmt_txrx_deregister_rx_cb() - deregisters the rx cb for mgmt. frames
1283 * @psoc: psoc context
1284 * @comp_id: umac component id
1285 * @frm_cb_info: pointer to array of structure containing frm type and callback
1286 * @num_entries: num of frames for which cb to be deregistered
1287 *
1288 * This function deregisters rx callback for mgmt. frames for
1289 * the corresponding umac component passed in the func.
1290 *
1291 * Return: QDF_STATUS_SUCCESS - in case of success
1292 */
1293 QDF_STATUS wlan_mgmt_txrx_deregister_rx_cb(
1294 struct wlan_objmgr_psoc *psoc,
1295 enum wlan_umac_comp_id comp_id,
1296 struct mgmt_txrx_mgmt_frame_cb_info *frm_cb_info,
1297 uint8_t num_entries);
1298
1299 /**
1300 * wlan_mgmt_txrx_psoc_open() - mgmt txrx module psoc open API
1301 * @psoc: psoc context
1302 *
1303 * Return: QDF_STATUS_SUCCESS - in case of success
1304 */
1305 QDF_STATUS wlan_mgmt_txrx_psoc_open(struct wlan_objmgr_psoc *psoc);
1306
1307 /**
1308 * wlan_mgmt_txrx_psoc_close() - mgmt txrx module psoc close API
1309 * @psoc: psoc context
1310 *
1311 * Return: QDF_STATUS_SUCCESS - in case of success
1312 */
1313 QDF_STATUS wlan_mgmt_txrx_psoc_close(struct wlan_objmgr_psoc *psoc);
1314
1315 /**
1316 * wlan_mgmt_txrx_pdev_open() - mgmt txrx module pdev open API
1317 * @pdev: pdev context
1318 *
1319 * Return: QDF_STATUS_SUCCESS - in case of success
1320 */
1321 QDF_STATUS wlan_mgmt_txrx_pdev_open(struct wlan_objmgr_pdev *pdev);
1322
1323
1324 /**
1325 * wlan_mgmt_txrx_pdev_close() - mgmt txrx module pdev close API
1326 * @pdev: pdev context
1327 *
1328 * Return: QDF_STATUS_SUCCESS - in case of success
1329 */
1330 QDF_STATUS wlan_mgmt_txrx_pdev_close(struct wlan_objmgr_pdev *pdev);
1331
1332 /**
1333 * wlan_mgmt_txrx_psoc_enable() - mgmt txrx module psoc enable API
1334 * @psoc: psoc context
1335 *
1336 * Return: QDF_STATUS_SUCCESS - in case of success
1337 */
1338 QDF_STATUS wlan_mgmt_txrx_psoc_enable(struct wlan_objmgr_psoc *psoc);
1339
1340 /**
1341 * wlan_mgmt_txrx_psoc_disable() - mgmt txrx module psoc disable API
1342 * @psoc: psoc context
1343 *
1344 * Return: QDF_STATUS_SUCCESS - in case of success
1345 */
1346 QDF_STATUS wlan_mgmt_txrx_psoc_disable(struct wlan_objmgr_psoc *psoc);
1347 #endif
1348
1349
1350