xref: /wlan-driver/qca-wifi-host-cmn/umac/mlme/include/wlan_vdev_mlme.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for any
6*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
7*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
8*5113495bSYour Name  *
9*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*5113495bSYour Name  */
17*5113495bSYour Name 
18*5113495bSYour Name /**
19*5113495bSYour Name  * DOC: Define VDEV MLME structure and APIs
20*5113495bSYour Name  */
21*5113495bSYour Name #ifndef _WLAN_VDEV_MLME_H_
22*5113495bSYour Name #define _WLAN_VDEV_MLME_H_
23*5113495bSYour Name 
24*5113495bSYour Name #include <wlan_vdev_mgr_tgt_if_rx_defs.h>
25*5113495bSYour Name #include <wlan_objmgr_vdev_obj.h>
26*5113495bSYour Name #include <wlan_vdev_mlme_api.h>
27*5113495bSYour Name #include <wlan_ext_mlme_obj_types.h>
28*5113495bSYour Name 
29*5113495bSYour Name struct vdev_mlme_obj;
30*5113495bSYour Name struct cnx_mgr;
31*5113495bSYour Name struct ml_rv_info;
32*5113495bSYour Name 
33*5113495bSYour Name /* Requestor ID for multiple vdev restart */
34*5113495bSYour Name #define MULTIPLE_VDEV_RESTART_REQ_ID 0x1234
35*5113495bSYour Name 
36*5113495bSYour Name /* values for vdev_type */
37*5113495bSYour Name #define WLAN_VDEV_MLME_TYPE_UNKNOWN   0x0
38*5113495bSYour Name #define WLAN_VDEV_MLME_TYPE_AP   0x1
39*5113495bSYour Name #define WLAN_VDEV_MLME_TYPE_STA  0x2
40*5113495bSYour Name #define WLAN_VDEV_MLME_TYPE_IBSS 0x3
41*5113495bSYour Name #define WLAN_VDEV_MLME_TYPE_MONITOR 0x4
42*5113495bSYour Name #define WLAN_VDEV_MLME_TYPE_NAN 0x5
43*5113495bSYour Name #define WLAN_VDEV_MLME_TYPE_OCB 0x6
44*5113495bSYour Name #define WLAN_VDEV_MLME_TYPE_NDI 0x7
45*5113495bSYour Name 
46*5113495bSYour Name /* values for vdev_subtype */
47*5113495bSYour Name #define WLAN_VDEV_MLME_SUBTYPE_UNKNOWN   0x0
48*5113495bSYour Name #define WLAN_VDEV_MLME_SUBTYPE_P2P_DEVICE 0x1
49*5113495bSYour Name #define WLAN_VDEV_MLME_SUBTYPE_P2P_CLIENT 0x2
50*5113495bSYour Name #define WLAN_VDEV_MLME_SUBTYPE_P2P_GO 0x3
51*5113495bSYour Name #define WLAN_VDEV_MLME_SUBTYPE_PROXY_STA 0x4
52*5113495bSYour Name #define WLAN_VDEV_MLME_SUBTYPE_MESH 0x5
53*5113495bSYour Name #define WLAN_VDEV_MLME_SUBTYPE_MESH_11S   0x6
54*5113495bSYour Name #define WLAN_VDEV_MLME_SUBTYPE_SMART_MONITOR 0x7
55*5113495bSYour Name #define WLAN_VDEV_MLME_SUBTYPE_MLO_BRIDGE 0x8
56*5113495bSYour Name 
57*5113495bSYour Name /* vdev control flags (per bits) */
58*5113495bSYour Name #define WLAN_VDEV_MLME_FLAGS_NON_MBSSID_AP      0x00000001
59*5113495bSYour Name #define WLAN_VDEV_MLME_FLAGS_TRANSMIT_AP        0x00000002
60*5113495bSYour Name #define WLAN_VDEV_MLME_FLAGS_NON_TRANSMIT_AP    0x00000004
61*5113495bSYour Name #define WLAN_VDEV_MLME_FLAGS_EMA_MODE           0x00000008
62*5113495bSYour Name #define WLAN_VDEV_MLME_FLAGS_MBSS_CMN_PARAM     0x00000010
63*5113495bSYour Name 
64*5113495bSYour Name /**
65*5113495bSYour Name  * struct vdev_mlme_proto_generic - generic mlme proto structure
66*5113495bSYour Name  * sent in frames
67*5113495bSYour Name  * @dtim_period: frequency of data transmissions per beacon 1-255
68*5113495bSYour Name  * @slot_time: slot time
69*5113495bSYour Name  * @protection_mode: rts cts protection mode
70*5113495bSYour Name  * @beacon_interval: beacon interval
71*5113495bSYour Name  * @ldpc: low density parity check value
72*5113495bSYour Name  * @nss: number of spatial stream
73*5113495bSYour Name  * @nss_2g: 2.4GHz number of spatial stream
74*5113495bSYour Name  * @nss_5g: 5GHz number of spatial stream
75*5113495bSYour Name  * @tsfadjust: adjusted timer sync value
76*5113495bSYour Name  */
77*5113495bSYour Name struct vdev_mlme_proto_generic {
78*5113495bSYour Name 	uint8_t dtim_period;
79*5113495bSYour Name 	uint32_t slot_time;
80*5113495bSYour Name 	uint32_t protection_mode;
81*5113495bSYour Name 	uint16_t beacon_interval;
82*5113495bSYour Name 	uint8_t ldpc;
83*5113495bSYour Name 	uint8_t nss;
84*5113495bSYour Name 	uint8_t nss_2g;
85*5113495bSYour Name 	uint8_t nss_5g;
86*5113495bSYour Name 	uint64_t tsfadjust;
87*5113495bSYour Name };
88*5113495bSYour Name 
89*5113495bSYour Name /**
90*5113495bSYour Name  * struct vdev_mlme_proto_ap - ap specific mlme protocol
91*5113495bSYour Name  * @mapping_switch_time: Mapping switch time of T2LM
92*5113495bSYour Name  */
93*5113495bSYour Name struct vdev_mlme_proto_ap {
94*5113495bSYour Name 	uint16_t mapping_switch_time;
95*5113495bSYour Name };
96*5113495bSYour Name 
97*5113495bSYour Name /**
98*5113495bSYour Name  * struct vdev_mlme_proto_sta - sta specific mlme protocol
99*5113495bSYour Name  * @assoc_id: association id of station
100*5113495bSYour Name  * @uapsd_cfg: uapsd configuration
101*5113495bSYour Name  */
102*5113495bSYour Name struct vdev_mlme_proto_sta {
103*5113495bSYour Name 	uint16_t assoc_id;
104*5113495bSYour Name 	uint16_t uapsd_cfg;
105*5113495bSYour Name };
106*5113495bSYour Name 
107*5113495bSYour Name /**
108*5113495bSYour Name  * struct vdev_mlme_proto_bss_color - bss color cfg
109*5113495bSYour Name  * @flags: proposed for future use cases, currently not used.
110*5113495bSYour Name  * @evt_type: bss color collision event.
111*5113495bSYour Name  * @current_bss_color: current bss color.
112*5113495bSYour Name  * @detection_period_ms: scan interval for both AP and STA mode.
113*5113495bSYour Name  * @scan_period_ms: scan period for passive scan to detect collision.
114*5113495bSYour Name  * @free_slot_expiry_time_ms: FW to notify host at timer expiry after
115*5113495bSYour Name  *                            which Host will disable the bss color.
116*5113495bSYour Name  */
117*5113495bSYour Name struct vdev_mlme_proto_bss_color {
118*5113495bSYour Name 	uint32_t flags;
119*5113495bSYour Name 	uint8_t  evt_type;
120*5113495bSYour Name 	uint32_t current_bss_color;
121*5113495bSYour Name 	uint32_t detection_period_ms;
122*5113495bSYour Name 	uint32_t scan_period_ms;
123*5113495bSYour Name 	uint32_t free_slot_expiry_time_ms;
124*5113495bSYour Name };
125*5113495bSYour Name 
126*5113495bSYour Name /**
127*5113495bSYour Name  * struct vdev_mlme_vht_info - vdev VHT information
128*5113495bSYour Name  * @caps: vht capabilities
129*5113495bSYour Name  * @subfer: su beam former capability
130*5113495bSYour Name  * @subfee: su beam formee capability
131*5113495bSYour Name  * @mubfer: mu beam former capability
132*5113495bSYour Name  * @mubfee: mu beam formee capability
133*5113495bSYour Name  * @implicit_bf: Implicit BF support
134*5113495bSYour Name  * @sounding_dimension: Beamformer number of sounding dimension
135*5113495bSYour Name  * @bfee_sts_cap: beam formee STA capability
136*5113495bSYour Name  * @allow_vht: vht capability status
137*5113495bSYour Name  */
138*5113495bSYour Name struct vdev_mlme_vht_info {
139*5113495bSYour Name 	uint32_t caps;
140*5113495bSYour Name 	uint8_t  subfer;
141*5113495bSYour Name 	uint8_t  mubfer;
142*5113495bSYour Name 	uint8_t  subfee;
143*5113495bSYour Name 	uint8_t  mubfee;
144*5113495bSYour Name 	uint8_t  implicit_bf;
145*5113495bSYour Name 	uint8_t  sounding_dimension;
146*5113495bSYour Name 	uint8_t  bfee_sts_cap;
147*5113495bSYour Name 	bool     allow_vht;
148*5113495bSYour Name };
149*5113495bSYour Name 
150*5113495bSYour Name /**
151*5113495bSYour Name  * struct vdev_mlme_ht_info - vdev HT information
152*5113495bSYour Name  * @ht_caps: HT capabilities
153*5113495bSYour Name  * @allow_ht: HT capability status
154*5113495bSYour Name  */
155*5113495bSYour Name struct vdev_mlme_ht_info {
156*5113495bSYour Name 	uint32_t ht_caps;
157*5113495bSYour Name 	bool     allow_ht;
158*5113495bSYour Name };
159*5113495bSYour Name 
160*5113495bSYour Name /**
161*5113495bSYour Name  * struct vdev_mlme_he_ops_info - vdev mlme HEOPS information
162*5113495bSYour Name  * @he_ops: he ops
163*5113495bSYour Name  */
164*5113495bSYour Name struct vdev_mlme_he_ops_info {
165*5113495bSYour Name 	uint32_t he_ops;
166*5113495bSYour Name };
167*5113495bSYour Name 
168*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
169*5113495bSYour Name 
170*5113495bSYour Name /**
171*5113495bSYour Name  * struct vdev_mlme_eht_caps_info - vdev mlme EHT capability information
172*5113495bSYour Name  * @eht_maccap_epcspriaccess_support : EPCS Priority Access Supported
173*5113495bSYour Name  * @eht_maccap_ehtomctrl_support     : EHT OM Control Support
174*5113495bSYour Name  * @eht_maccap_trigtxop_sharing_mode1: Triggered TXOP Sharing mode1 Support
175*5113495bSYour Name  * @eht_maccap_trigtxop_sharing_mode2: Triggered TXOP Sharing mode2 Support
176*5113495bSYour Name  * @eht_maccap_rtwt_support          : Restricted TWT Support
177*5113495bSYour Name  * @eht_maccap_scs_traffic_description : SCS Traffic Description Support
178*5113495bSYour Name  * @eht_maccap_max_mpdu_len          : Maximum MPDU Length
179*5113495bSYour Name  * @eht_maccap_max_ampdu_len_exp_etn : Maximum A-MPDU Length Exponent Extension
180*5113495bSYour Name  * @eht_maccap_trs_support           : EHT TRS Support
181*5113495bSYour Name  * @eht_maccap_txop_ret_supp_in_txop_mode2: TXOP Return Support In TXOP
182*5113495bSYour Name  *                                          Sharing Mode 2
183*5113495bSYour Name  * @eht_phycap_reserved              : Reserved
184*5113495bSYour Name  * @eht_phycap_320mhzin6ghz          : Support For 320 MHz In 6 GHz
185*5113495bSYour Name  * @eht_phycap_242tonerubwlt20mhz    : Support for 242-tone RU In BW Wider Than
186*5113495bSYour Name  *                                     20 MHz
187*5113495bSYour Name  * @eht_phycap_ndp4xehtltfand320nsgi : NDP With 4. EHT-LTF And 3.2 .s GI
188*5113495bSYour Name  * @eht_phycap_partialbwulmu         : Partial Bandwidth UL MU-MIMO
189*5113495bSYour Name  * @eht_phycap_subfmr                : SU Beamformer
190*5113495bSYour Name  * @eht_phycap_subfme                : SU Beamformee
191*5113495bSYour Name  * @eht_phycap_bfmesslt80mhz         : Beamformee SS (<= 80 MHz)
192*5113495bSYour Name  * @eht_phycap_bfmess160mhz          : Beamformee SS (= 160 MHz)
193*5113495bSYour Name  * @eht_phycap_bfmess320mhz          : Beamformee SS (= 320 MHz)
194*5113495bSYour Name  * @eht_phycap_numsoundlt80mhz       : Number Of Sounding Dimensions (<=80 MHz)
195*5113495bSYour Name  * @eht_phycap_numsound160mhz        : Number Of Sounding Dimensions (=160 MHz)
196*5113495bSYour Name  * @eht_phycap_numsound320mhz        : Number Of Sounding Dimensions (=320 MHz)
197*5113495bSYour Name  * @eht_phycap_ng16sufb              : Ng = 16 SU Feedback
198*5113495bSYour Name  * @eht_phycap_ng16mufb              : Ng = 16 MU Feedback
199*5113495bSYour Name  * @eht_phycap_codbk42sufb           : Codebook Size {4,2} SU Feedback
200*5113495bSYour Name  * @eht_phycap_codbk75mufb           : Codebook Size {4,2} MU Feedback
201*5113495bSYour Name  * @eht_phycap_trigsubffb            : Triggered SU Beamforming Feedback
202*5113495bSYour Name  * @eht_phycap_trigmubfpartbwfb      : Triggered MU Beamforming Partial B
203*5113495bSYour Name  *                                     Feedback
204*5113495bSYour Name  * @eht_phycap_trigcqifb             : Triggered CQI Feedback
205*5113495bSYour Name  * @eht_phycap_partbwdlmumimo        : Partial Bandwidth DL MU-MIMO
206*5113495bSYour Name  * @eht_phycap_psrsr                 : PSR-Based SR Support
207*5113495bSYour Name  * @eht_phycap_pwrbstfactor          : Power Boost Factor Support
208*5113495bSYour Name  * @eht_phycap_4xehtltfand800nsgi    : EHT MU PPDU With 4xEHT-LTF And 0.8 .s GI
209*5113495bSYour Name  * @eht_phycap_maxnc                 : Max Nc
210*5113495bSYour Name  * @eht_phycap_nontrigcqifb          : Non-Triggered CQI Feedback
211*5113495bSYour Name  * @eht_phycap_tx1024and4096qamls242toneru : Tx 1024-QAM And 4096-QAM <
212*5113495bSYour Name  *                                           242-tone RU Support
213*5113495bSYour Name  * @eht_phycap_rx1024and4096qamls242toneru : Rx 1024-QAM And 4096-QAM <
214*5113495bSYour Name  *                                           242-tone RU Support
215*5113495bSYour Name  * @eht_phycap_ppethrespresent       : PPE Thresholds Present
216*5113495bSYour Name  * @eht_phycap_cmnnompktpad          : Common Nominal Packet Padding
217*5113495bSYour Name  * @eht_phycap_maxnumehtltf          : Maximum Number Of Supported EHT-LTFs
218*5113495bSYour Name  * @eht_phycap_supmcs15              : Support of MCS 15
219*5113495bSYour Name  * @eht_phycap_ehtdupin6ghz          : Support Of EHT DUP In 6 GHz
220*5113495bSYour Name  * @eht_phycap_20mhzopstarxndpwiderbw : Support For 20 MHz Operating STA
221*5113495bSYour Name  *                                      Receiving NDP With Wider Bandwidth
222*5113495bSYour Name  * @eht_phycap_nonofdmaulmumimolt80mhz : Non-OFDMA UL MU-MIMO (BW <= 80 MHz)
223*5113495bSYour Name  * @eht_phycap_nonofdmaulmumimo160mhz : Non-OFDMA UL MU-MIMO (BW = 160 MHz)
224*5113495bSYour Name  * @eht_phycap_nonofdmaulmumimo320mhz : Non-OFDMA UL MU-MIMO (BW = 320 MHz)
225*5113495bSYour Name  * @eht_phycap_mubfmrlt80mhz         : MU Beamformer (BW <= 80 MHz)
226*5113495bSYour Name  * @eht_phycap_mubfmr160mhz          : MU Beamformer (BW = 160 MHz)
227*5113495bSYour Name  * @eht_phycap_mubfmr320mhz          : MU Beamformer (BW = 320 MHz)
228*5113495bSYour Name  * @eht_phycap_tb_sounding_feedback_rl:
229*5113495bSYour Name  * @eht_phycap_rx1024qamwiderbwdlofdma:
230*5113495bSYour Name  * @eht_phycap_rx4096qamwiderbwdlofdma:
231*5113495bSYour Name  */
232*5113495bSYour Name struct vdev_mlme_eht_caps_info {
233*5113495bSYour Name 	uint32_t eht_maccap_epcspriaccess_support :1,
234*5113495bSYour Name 		 eht_maccap_ehtomctrl_support     :1,
235*5113495bSYour Name 		 eht_maccap_trigtxop_sharing_mode1      :1,
236*5113495bSYour Name 		 eht_maccap_trigtxop_sharing_mode2      :1,
237*5113495bSYour Name 		 eht_maccap_rtwt_support                :1,
238*5113495bSYour Name 		 eht_maccap_scs_traffic_description     :1,
239*5113495bSYour Name 		 eht_maccap_max_mpdu_len                :2,
240*5113495bSYour Name 		 eht_maccap_max_ampdu_len_exp_etn       :1,
241*5113495bSYour Name 		 eht_maccap_trs_support                 :1,
242*5113495bSYour Name 		 eht_maccap_txop_ret_supp_in_txop_mode2 :1;
243*5113495bSYour Name 	uint32_t eht_phycap_reserved                    :1,
244*5113495bSYour Name 		 eht_phycap_320mhzin6ghz                :1,
245*5113495bSYour Name 		 eht_phycap_242tonerubwlt20mhz          :1,
246*5113495bSYour Name 		 eht_phycap_ndp4xehtltfand320nsgi       :1,
247*5113495bSYour Name 		 eht_phycap_partialbwulmu               :1,
248*5113495bSYour Name 		 eht_phycap_subfmr                      :1,
249*5113495bSYour Name 		 eht_phycap_subfme                      :1,
250*5113495bSYour Name 		 eht_phycap_bfmesslt80mhz               :3,
251*5113495bSYour Name 		 eht_phycap_bfmess160mhz                :3,
252*5113495bSYour Name 		 eht_phycap_bfmess320mhz                :3,
253*5113495bSYour Name 		 eht_phycap_numsoundlt80mhz             :3,
254*5113495bSYour Name 		 eht_phycap_numsound160mhz              :3,
255*5113495bSYour Name 		 eht_phycap_numsound320mhz              :3,
256*5113495bSYour Name 		 eht_phycap_ng16sufb                    :1,
257*5113495bSYour Name 		 eht_phycap_ng16mufb                    :1,
258*5113495bSYour Name 		 eht_phycap_codbk42sufb                 :1,
259*5113495bSYour Name 		 eht_phycap_codbk75mufb                 :1,
260*5113495bSYour Name 		 eht_phycap_trigsubffb                  :1,
261*5113495bSYour Name 		 eht_phycap_trigmubfpartbwfb            :1,
262*5113495bSYour Name 		 eht_phycap_trigcqifb                   :1;
263*5113495bSYour Name 	uint32_t eht_phycap_partbwdlmumimo              :1,
264*5113495bSYour Name 		 eht_phycap_psrsr                       :1,
265*5113495bSYour Name 		 eht_phycap_pwrbstfactor                :1,
266*5113495bSYour Name 		 eht_phycap_4xehtltfand800nsgi          :1,
267*5113495bSYour Name 		 eht_phycap_maxnc                       :4,
268*5113495bSYour Name 		 eht_phycap_nontrigcqifb                :1,
269*5113495bSYour Name 		 eht_phycap_tx1024and4096qamls242toneru :1,
270*5113495bSYour Name 		 eht_phycap_rx1024and4096qamls242toneru :1,
271*5113495bSYour Name 		 eht_phycap_ppethrespresent             :1,
272*5113495bSYour Name 		 eht_phycap_cmnnompktpad                :2,
273*5113495bSYour Name 		 eht_phycap_maxnumehtltf                :5,
274*5113495bSYour Name 		 eht_phycap_supmcs15                    :4,
275*5113495bSYour Name 		 eht_phycap_ehtdupin6ghz                :1,
276*5113495bSYour Name 		 eht_phycap_20mhzopstarxndpwiderbw      :1,
277*5113495bSYour Name 		 eht_phycap_nonofdmaulmumimolt80mhz     :1,
278*5113495bSYour Name 		 eht_phycap_nonofdmaulmumimo160mhz      :1,
279*5113495bSYour Name 		 eht_phycap_nonofdmaulmumimo320mhz      :1,
280*5113495bSYour Name 		 eht_phycap_mubfmrlt80mhz               :1,
281*5113495bSYour Name 		 eht_phycap_mubfmr160mhz                :1,
282*5113495bSYour Name 		 eht_phycap_mubfmr320mhz                :1,
283*5113495bSYour Name 		 eht_phycap_tb_sounding_feedback_rl     :1;
284*5113495bSYour Name 	uint32_t eht_phycap_rx1024qamwiderbwdlofdma     :1,
285*5113495bSYour Name 		 eht_phycap_rx4096qamwiderbwdlofdma     :1;
286*5113495bSYour Name };
287*5113495bSYour Name 
288*5113495bSYour Name /**
289*5113495bSYour Name  * struct vdev_mlme_eht_ops_info - vdev mlme EHTOPS information
290*5113495bSYour Name  * @eht_ops: eht ops
291*5113495bSYour Name  */
292*5113495bSYour Name struct vdev_mlme_eht_ops_info {
293*5113495bSYour Name 	uint32_t eht_ops;
294*5113495bSYour Name };
295*5113495bSYour Name #endif
296*5113495bSYour Name 
297*5113495bSYour Name /**
298*5113495bSYour Name  * enum mlme_vdev_dot11_mode - Dot11 mode of the vdev
299*5113495bSYour Name  * @MLME_VDEV_DOT11_MODE_AUTO: vdev uses mlme_dot11_mode
300*5113495bSYour Name  * @MLME_VDEV_DOT11_MODE_11N: vdev supports 11N mode
301*5113495bSYour Name  * @MLME_VDEV_DOT11_MODE_11AC: vdev supports 11AC mode
302*5113495bSYour Name  * @MLME_VDEV_DOT11_MODE_11AX: vdev supports 11AX mode
303*5113495bSYour Name  * @MLME_VDEV_DOT11_MODE_11BE: vdev supports 11BE mode
304*5113495bSYour Name  */
305*5113495bSYour Name enum mlme_vdev_dot11_mode {
306*5113495bSYour Name 	MLME_VDEV_DOT11_MODE_AUTO,
307*5113495bSYour Name 	MLME_VDEV_DOT11_MODE_11N,
308*5113495bSYour Name 	MLME_VDEV_DOT11_MODE_11AC,
309*5113495bSYour Name 	MLME_VDEV_DOT11_MODE_11AX,
310*5113495bSYour Name 	MLME_VDEV_DOT11_MODE_11BE,
311*5113495bSYour Name };
312*5113495bSYour Name 
313*5113495bSYour Name /**
314*5113495bSYour Name  * struct vdev_mlme_proto - vdev protocol structure holding information
315*5113495bSYour Name  * that is used in frames
316*5113495bSYour Name  * @vdev_dot11_mode: supported dot11 mode
317*5113495bSYour Name  * @generic: generic protocol information
318*5113495bSYour Name  * @ap: ap specific protocol information
319*5113495bSYour Name  * @sta: sta specific protocol information
320*5113495bSYour Name  * @vht_info: vht information
321*5113495bSYour Name  * @ht_info: ht capabilities information
322*5113495bSYour Name  * @he_ops_info: he ops information
323*5113495bSYour Name  * @eht_cap_info: EHT capability information
324*5113495bSYour Name  * @eht_ops_info: EHT operation information
325*5113495bSYour Name  * @bss_color: 11ax HE BSS Color information
326*5113495bSYour Name  */
327*5113495bSYour Name struct vdev_mlme_proto {
328*5113495bSYour Name 	enum mlme_vdev_dot11_mode vdev_dot11_mode;
329*5113495bSYour Name 	struct vdev_mlme_proto_generic generic;
330*5113495bSYour Name 	struct vdev_mlme_proto_ap ap;
331*5113495bSYour Name 	struct vdev_mlme_proto_sta sta;
332*5113495bSYour Name 	struct vdev_mlme_vht_info vht_info;
333*5113495bSYour Name 	struct vdev_mlme_ht_info ht_info;
334*5113495bSYour Name 	struct vdev_mlme_he_ops_info he_ops_info;
335*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
336*5113495bSYour Name 	struct vdev_mlme_eht_caps_info eht_cap_info;
337*5113495bSYour Name 	struct vdev_mlme_eht_ops_info eht_ops_info;
338*5113495bSYour Name #endif
339*5113495bSYour Name 	struct vdev_mlme_proto_bss_color bss_color;
340*5113495bSYour Name };
341*5113495bSYour Name 
342*5113495bSYour Name /**
343*5113495bSYour Name  * struct vdev_mlme_mgmt_generic - generic vdev mlme mgmt cfg
344*5113495bSYour Name  * @rts_threshold: RTS threshold
345*5113495bSYour Name  * @frag_threshold: Fragmentation threshold
346*5113495bSYour Name  * @probe_delay: time in msec for delaying to send first probe request
347*5113495bSYour Name  * @repeat_probe_time: probe request transmission time
348*5113495bSYour Name  * @drop_unencry: drop unencrypted status
349*5113495bSYour Name  * @tx_pwrlimit: Tx power limit
350*5113495bSYour Name  * @tx_power: Tx power
351*5113495bSYour Name  * @minpower: Min power
352*5113495bSYour Name  * @maxpower: Max power
353*5113495bSYour Name  * @maxregpower: max regulatory power
354*5113495bSYour Name  * @antennamax: max antenna
355*5113495bSYour Name  * @reg_class_id: reg domain class id
356*5113495bSYour Name  * @ampdu: ampdu limit
357*5113495bSYour Name  * @amsdu: amsdu limit
358*5113495bSYour Name  * @ssid: service set identifier
359*5113495bSYour Name  * @ssid_len: ssid length
360*5113495bSYour Name  * @type: vdev type
361*5113495bSYour Name  * @subtype: vdev subtype
362*5113495bSYour Name  * @rx_decap_type: rx decap type
363*5113495bSYour Name  * @tx_encap_type: tx encap type
364*5113495bSYour Name  * @disable_hw_ack: disable ha ack flag
365*5113495bSYour Name  * @bssid: bssid
366*5113495bSYour Name  * @phy_mode: phy mode
367*5113495bSYour Name  * @special_vdev_mode: indicates special vdev mode
368*5113495bSYour Name  * @is_sap_go_moved_1st_on_csa: Indicates if STA receives
369*5113495bSYour Name  *				CSA to a DFS channel
370*5113495bSYour Name  * @he_spr_sr_ctrl:     Spatial reuse SR control
371*5113495bSYour Name  * @he_spr_non_srg_pd_max_offset: Non-SRG PD max offset
372*5113495bSYour Name  * @he_spr_srg_max_pd_offset: SRG PD max offset
373*5113495bSYour Name  * @he_spr_srg_min_pd_offset: SRG PD min offset
374*5113495bSYour Name  * @he_spr_enabled:     Spatial reuse enabled or not
375*5113495bSYour Name  * @he_spr_disabled_due_conc: spr disabled due to concurrency
376*5113495bSYour Name  * @sr_prohibit_enabled:
377*5113495bSYour Name  * @srg_bss_color: srg bss color
378*5113495bSYour Name  * @srg_partial_bssid: srg partial bssid
379*5113495bSYour Name  * @he_curr_non_srg_pd_threshold: current configured NON-SRG PD threshold
380*5113495bSYour Name  * @he_curr_srg_pd_threshold: current configured SRG PD threshold
381*5113495bSYour Name  * @is_pd_threshold_present: PD threshold is present in SR enable command or not
382*5113495bSYour Name  * @disable_fd_in_6ghz_band: Disable FD in 6 GHz if OOB discovery is enabled
383*5113495bSYour Name  */
384*5113495bSYour Name struct vdev_mlme_mgmt_generic {
385*5113495bSYour Name 	uint32_t rts_threshold;
386*5113495bSYour Name 	uint32_t frag_threshold;
387*5113495bSYour Name 	uint32_t probe_delay;
388*5113495bSYour Name 	uint32_t repeat_probe_time;
389*5113495bSYour Name 	uint32_t drop_unencry;
390*5113495bSYour Name 	uint32_t tx_pwrlimit;
391*5113495bSYour Name 	uint8_t tx_power;
392*5113495bSYour Name 	uint8_t minpower;
393*5113495bSYour Name 	uint8_t maxpower;
394*5113495bSYour Name 	uint8_t maxregpower;
395*5113495bSYour Name 	uint8_t antennamax;
396*5113495bSYour Name 	uint8_t reg_class_id;
397*5113495bSYour Name 	uint16_t ampdu;
398*5113495bSYour Name 	uint8_t amsdu;
399*5113495bSYour Name 	char ssid[WLAN_SSID_MAX_LEN + 1];
400*5113495bSYour Name 	uint8_t ssid_len;
401*5113495bSYour Name 	uint8_t type;
402*5113495bSYour Name 	uint8_t subtype;
403*5113495bSYour Name 	uint8_t rx_decap_type;
404*5113495bSYour Name 	uint8_t tx_encap_type;
405*5113495bSYour Name 	bool disable_hw_ack;
406*5113495bSYour Name 	uint8_t bssid[QDF_MAC_ADDR_SIZE];
407*5113495bSYour Name 	uint32_t phy_mode;
408*5113495bSYour Name 	bool special_vdev_mode;
409*5113495bSYour Name 	bool is_sap_go_moved_1st_on_csa;
410*5113495bSYour Name #ifdef WLAN_FEATURE_SR
411*5113495bSYour Name 	uint8_t he_spr_sr_ctrl;
412*5113495bSYour Name 	uint8_t he_spr_non_srg_pd_max_offset;
413*5113495bSYour Name 	uint8_t he_spr_srg_max_pd_offset;
414*5113495bSYour Name 	uint8_t he_spr_srg_min_pd_offset;
415*5113495bSYour Name 	bool he_spr_enabled;
416*5113495bSYour Name 	bool he_spr_disabled_due_conc;
417*5113495bSYour Name 	bool sr_prohibit_enabled;
418*5113495bSYour Name 	uint64_t srg_bss_color;
419*5113495bSYour Name 	uint64_t srg_partial_bssid;
420*5113495bSYour Name 	int32_t he_curr_non_srg_pd_threshold;
421*5113495bSYour Name 	int32_t he_curr_srg_pd_threshold;
422*5113495bSYour Name 	bool is_pd_threshold_present;
423*5113495bSYour Name #endif
424*5113495bSYour Name 	bool disable_fd_in_6ghz_band;
425*5113495bSYour Name };
426*5113495bSYour Name 
427*5113495bSYour Name /**
428*5113495bSYour Name  * struct wlan_vdev_aid_mgr - AID manager
429*5113495bSYour Name  * @aid_bitmap: AID bitmap array
430*5113495bSYour Name  * @start_aid: start of AID index
431*5113495bSYour Name  * @max_aid: Max allowed AID
432*5113495bSYour Name  * @ref_cnt:  to share AID across VDEVs for MBSSID
433*5113495bSYour Name  */
434*5113495bSYour Name struct wlan_vdev_aid_mgr {
435*5113495bSYour Name 	qdf_bitmap(aid_bitmap, WLAN_UMAC_MAX_AID);
436*5113495bSYour Name 	uint16_t start_aid;
437*5113495bSYour Name 	uint16_t max_aid;
438*5113495bSYour Name 	qdf_atomic_t ref_cnt;
439*5113495bSYour Name };
440*5113495bSYour Name 
441*5113495bSYour Name /**
442*5113495bSYour Name  * struct vdev_mlme_mgmt_ap - ap specific vdev mlme mgmt cfg
443*5113495bSYour Name  * @hidden_ssid: flag to indicate whether it is hidden ssid
444*5113495bSYour Name  * @cac_duration_ms: cac duration in milliseconds
445*5113495bSYour Name  * @aid_mgr: AID bitmap mgr
446*5113495bSYour Name  * @max_chan_switch_time: Max channel switch time in milliseconds.
447*5113495bSYour Name  * @last_bcn_ts_ms: Timestamp (in milliseconds) of the last beacon sent on the
448*5113495bSYour Name  *                  CSA triggered channel.
449*5113495bSYour Name  * @is_acs_mode: True if SAP is started in ACS mode
450*5113495bSYour Name  */
451*5113495bSYour Name struct vdev_mlme_mgmt_ap {
452*5113495bSYour Name 	bool hidden_ssid;
453*5113495bSYour Name 	uint32_t cac_duration_ms;
454*5113495bSYour Name 	struct wlan_vdev_aid_mgr *aid_mgr;
455*5113495bSYour Name 	uint32_t max_chan_switch_time;
456*5113495bSYour Name 	unsigned long last_bcn_ts_ms;
457*5113495bSYour Name 	bool is_acs_mode;
458*5113495bSYour Name };
459*5113495bSYour Name 
460*5113495bSYour Name /**
461*5113495bSYour Name  * struct vdev_mlme_mgmt_sta - sta specific vdev mlme mgmt cfg
462*5113495bSYour Name  * @he_mcs_12_13_map: map to indicate mcs12/13 caps of peer&dut
463*5113495bSYour Name  */
464*5113495bSYour Name struct vdev_mlme_mgmt_sta {
465*5113495bSYour Name 	uint16_t he_mcs_12_13_map;
466*5113495bSYour Name };
467*5113495bSYour Name 
468*5113495bSYour Name /**
469*5113495bSYour Name  * struct vdev_mlme_inactivity_params - vdev mlme inactivity parameters
470*5113495bSYour Name  * @bmiss_first_bcnt: bmiss first time
471*5113495bSYour Name  * @bmiss_final_bcnt: bmiss final time
472*5113495bSYour Name  * @keepalive_min_idle_inactive_time_secs: min time AP consider STA to be
473*5113495bSYour Name  * inactive
474*5113495bSYour Name  * @keepalive_max_idle_inactive_time_secs: max inactive idle time for AP to send
475*5113495bSYour Name  * data-null
476*5113495bSYour Name  * @keepalive_max_unresponsive_time_secs: max time to send WMI_STA_KICKOUT
477*5113495bSYour Name  */
478*5113495bSYour Name struct vdev_mlme_inactivity_params {
479*5113495bSYour Name 	uint32_t bmiss_first_bcnt;
480*5113495bSYour Name 	uint32_t bmiss_final_bcnt;
481*5113495bSYour Name 	uint32_t keepalive_min_idle_inactive_time_secs;
482*5113495bSYour Name 	uint32_t keepalive_max_idle_inactive_time_secs;
483*5113495bSYour Name 	uint32_t keepalive_max_unresponsive_time_secs;
484*5113495bSYour Name };
485*5113495bSYour Name 
486*5113495bSYour Name /**
487*5113495bSYour Name  * enum vdev_ratemask_type - ratemask phy type
488*5113495bSYour Name  * @WLAN_VDEV_RATEMASK_TYPE_CCK: phy type CCK
489*5113495bSYour Name  * @WLAN_VDEV_RATEMASK_TYPE_HT: phy type ht
490*5113495bSYour Name  * @WLAN_VDEV_RATEMASK_TYPE_VHT: phy type vht
491*5113495bSYour Name  * @WLAN_VDEV_RATEMASK_TYPE_HE: phy type he
492*5113495bSYour Name  * @WLAN_VDEV_RATEMASK_TYPE_EHT: phy type eht
493*5113495bSYour Name  * @WLAN_VDEV_RATEMASK_TYPE_MAX: Maximum enumeration
494*5113495bSYour Name  */
495*5113495bSYour Name enum vdev_ratemask_type {
496*5113495bSYour Name 	WLAN_VDEV_RATEMASK_TYPE_CCK,
497*5113495bSYour Name 	WLAN_VDEV_RATEMASK_TYPE_HT,
498*5113495bSYour Name 	WLAN_VDEV_RATEMASK_TYPE_VHT,
499*5113495bSYour Name 	WLAN_VDEV_RATEMASK_TYPE_HE,
500*5113495bSYour Name 	WLAN_VDEV_RATEMASK_TYPE_EHT,
501*5113495bSYour Name 	WLAN_VDEV_RATEMASK_TYPE_MAX,
502*5113495bSYour Name };
503*5113495bSYour Name 
504*5113495bSYour Name /**
505*5113495bSYour Name  * struct vdev_ratemask_params -  vdev ratemask parameters
506*5113495bSYour Name  * @type: ratemask phy type
507*5113495bSYour Name  * @lower32: ratemask lower32 bitmask
508*5113495bSYour Name  * @higher32: ratemask higher32 bitmask
509*5113495bSYour Name  * @lower32_2: ratemask lower32_2 bitmask
510*5113495bSYour Name  * @higher32_2: rtaemask higher32_2 bitmask
511*5113495bSYour Name  */
512*5113495bSYour Name struct vdev_ratemask_params {
513*5113495bSYour Name 	uint32_t lower32;
514*5113495bSYour Name 	uint32_t higher32;
515*5113495bSYour Name 	uint32_t lower32_2;
516*5113495bSYour Name 	uint32_t higher32_2;
517*5113495bSYour Name };
518*5113495bSYour Name 
519*5113495bSYour Name /**
520*5113495bSYour Name  * struct vdev_mlme_rate_info - vdev mlme rate information
521*5113495bSYour Name  * @rate_flags: dynamic bandwidth info
522*5113495bSYour Name  * @per_band_tx_mgmt_rate: per band Tx mgmt rate
523*5113495bSYour Name  * @max_rate: max bandwidth rate
524*5113495bSYour Name  * @tx_mgmt_rate: Tx Mgmt rate
525*5113495bSYour Name  * @bcn_tx_rate: beacon Tx rate
526*5113495bSYour Name  * @bcn_tx_rate_code: beacon Tx rate code
527*5113495bSYour Name  * @rtscts_tx_rate: RTS/CTS Tx rate
528*5113495bSYour Name  * @ratemask_params: vdev ratemask params per phy type
529*5113495bSYour Name  * @half_rate: Half rate
530*5113495bSYour Name  * @quarter_rate: quarter rate
531*5113495bSYour Name  */
532*5113495bSYour Name struct vdev_mlme_rate_info {
533*5113495bSYour Name 	uint32_t rate_flags;
534*5113495bSYour Name 	uint32_t per_band_tx_mgmt_rate;
535*5113495bSYour Name 	uint32_t max_rate;
536*5113495bSYour Name 	uint32_t tx_mgmt_rate;
537*5113495bSYour Name 	uint32_t bcn_tx_rate;
538*5113495bSYour Name #ifdef WLAN_BCN_RATECODE_ENABLE
539*5113495bSYour Name 	uint32_t bcn_tx_rate_code;
540*5113495bSYour Name #endif
541*5113495bSYour Name 	uint32_t rtscts_tx_rate;
542*5113495bSYour Name 	struct vdev_ratemask_params ratemask_params[
543*5113495bSYour Name 					WLAN_VDEV_RATEMASK_TYPE_MAX];
544*5113495bSYour Name 	bool     half_rate;
545*5113495bSYour Name 	bool     quarter_rate;
546*5113495bSYour Name };
547*5113495bSYour Name 
548*5113495bSYour Name /**
549*5113495bSYour Name  * struct vdev_mlme_chainmask_info - vdev mlme chainmask information
550*5113495bSYour Name  * @tx_chainmask: Tx chainmask
551*5113495bSYour Name  * @rx_chainmask: Rx Chainmask
552*5113495bSYour Name  * @num_rx_chain: Num of bits set in Rx chain
553*5113495bSYour Name  * @num_tx_chain: Num of bits set in Tx chain
554*5113495bSYour Name  */
555*5113495bSYour Name struct vdev_mlme_chainmask_info {
556*5113495bSYour Name 	uint8_t tx_chainmask;
557*5113495bSYour Name 	uint8_t rx_chainmask;
558*5113495bSYour Name 	uint8_t num_rx_chain;
559*5113495bSYour Name 	uint8_t num_tx_chain;
560*5113495bSYour Name };
561*5113495bSYour Name 
562*5113495bSYour Name /**
563*5113495bSYour Name  * struct vdev_mlme_powersave_info - vdev mlme powersave information
564*5113495bSYour Name  * @packet_powersave: packet powersave
565*5113495bSYour Name  * @max_li_of_moddtim: max mod dtim
566*5113495bSYour Name  * @dyndtim_cnt: dynamic dtim count
567*5113495bSYour Name  * @listen_interval: listen interval
568*5113495bSYour Name  * @moddtim_cnt: mod dtim count
569*5113495bSYour Name  */
570*5113495bSYour Name struct vdev_mlme_powersave_info {
571*5113495bSYour Name 	uint32_t packet_powersave;
572*5113495bSYour Name 	uint32_t max_li_of_moddtim;
573*5113495bSYour Name 	uint32_t dyndtim_cnt;
574*5113495bSYour Name 	uint32_t listen_interval;
575*5113495bSYour Name 	uint32_t moddtim_cnt;
576*5113495bSYour Name };
577*5113495bSYour Name 
578*5113495bSYour Name /**
579*5113495bSYour Name  * struct vdev_mlme_beacon_info - vdev mlme beacon information
580*5113495bSYour Name  * @beacon_buffer: buffer allocated for beacon frame
581*5113495bSYour Name  * @beacon_offsets: beacon IE's offsets
582*5113495bSYour Name  */
583*5113495bSYour Name struct vdev_mlme_beacon_info {
584*5113495bSYour Name 	qdf_nbuf_t beacon_buffer;
585*5113495bSYour Name 	void *beacon_offsets;
586*5113495bSYour Name };
587*5113495bSYour Name 
588*5113495bSYour Name /**
589*5113495bSYour Name  * struct vdev_mlme_mbss_11ax - mbss 11ax fields required for up cmd
590*5113495bSYour Name  * @profile_idx: profile index of the connected non-trans ap (mbssid case).
591*5113495bSYour Name  *              0  means invalid.
592*5113495bSYour Name  * @profile_num: the total profile numbers of non-trans aps (mbssid case).
593*5113495bSYour Name  *              0 means non-MBSS AP.
594*5113495bSYour Name  * @mbssid_flags: MBSS IE flags indicating vdev type
595*5113495bSYour Name  * @vdevid_trans: id of transmitting vdev for MBSS IE
596*5113495bSYour Name  * @vdev_bmap: vdev bitmap of VAPs in MBSS group
597*5113495bSYour Name  * @is_cmn_param: flag to check mbss common param
598*5113495bSYour Name  * @trans_bssid: bssid of transmitted AP (MBSS IE case)
599*5113495bSYour Name  * @non_trans_bssid: bssid of non transmitted AP (MBSS IE case)
600*5113495bSYour Name  * @is_multi_mbssid: Flag to identify multi group mbssid support
601*5113495bSYour Name  * @grp_id: Group id of current vdev
602*5113495bSYour Name  */
603*5113495bSYour Name struct vdev_mlme_mbss_11ax {
604*5113495bSYour Name 	uint32_t profile_idx;
605*5113495bSYour Name 	uint32_t profile_num;
606*5113495bSYour Name 	uint32_t mbssid_flags;
607*5113495bSYour Name 	uint8_t vdevid_trans;
608*5113495bSYour Name 	unsigned long vdev_bmap;
609*5113495bSYour Name 	bool is_cmn_param;
610*5113495bSYour Name 	uint8_t trans_bssid[QDF_MAC_ADDR_SIZE];
611*5113495bSYour Name 	uint8_t non_trans_bssid[QDF_MAC_ADDR_SIZE];
612*5113495bSYour Name 	bool is_multi_mbssid;
613*5113495bSYour Name 	uint32_t grp_id;
614*5113495bSYour Name };
615*5113495bSYour Name 
616*5113495bSYour Name /**
617*5113495bSYour Name  * struct vdev_mlme_mgmt - vdev mlme mgmt related cfg
618*5113495bSYour Name  * @generic: generic mgmt information
619*5113495bSYour Name  * @ap: ap specific mgmt information
620*5113495bSYour Name  * @sta: sta specific mgmt information
621*5113495bSYour Name  * @inactivity_params: inactivity parameters
622*5113495bSYour Name  * @rate_info: bandwidth rate information
623*5113495bSYour Name  * @chainmask_info: Chainmask information
624*5113495bSYour Name  * @powersave_info: Power save parameters
625*5113495bSYour Name  * @beacon_info: beacon buffer information
626*5113495bSYour Name  * @mbss_11ax: MBSS 11ax information
627*5113495bSYour Name  */
628*5113495bSYour Name struct vdev_mlme_mgmt {
629*5113495bSYour Name 	struct vdev_mlme_mgmt_generic generic;
630*5113495bSYour Name 	struct vdev_mlme_mgmt_ap ap;
631*5113495bSYour Name 	struct vdev_mlme_mgmt_sta sta;
632*5113495bSYour Name 	struct vdev_mlme_inactivity_params inactivity_params;
633*5113495bSYour Name 	struct vdev_mlme_rate_info rate_info;
634*5113495bSYour Name 	struct vdev_mlme_chainmask_info chainmask_info;
635*5113495bSYour Name 	struct vdev_mlme_powersave_info powersave_info;
636*5113495bSYour Name 	struct vdev_mlme_beacon_info beacon_info;
637*5113495bSYour Name 	struct vdev_mlme_mbss_11ax mbss_11ax;
638*5113495bSYour Name };
639*5113495bSYour Name 
640*5113495bSYour Name /**
641*5113495bSYour Name  * enum beacon_update_op - Beacon update op type
642*5113495bSYour Name  * @BEACON_INIT:      Initialize beacon
643*5113495bSYour Name  * @BEACON_REINIT:    Re-initialize beacon
644*5113495bSYour Name  * @BEACON_UPDATE:    Update dynamic fields of beacon
645*5113495bSYour Name  * @BEACON_CSA:       Enable CSA IE
646*5113495bSYour Name  * @BEACON_FREE:      Beacon buffer free
647*5113495bSYour Name  */
648*5113495bSYour Name enum beacon_update_op {
649*5113495bSYour Name 	BEACON_INIT,
650*5113495bSYour Name 	BEACON_REINIT,
651*5113495bSYour Name 	BEACON_UPDATE,
652*5113495bSYour Name 	BEACON_CSA,
653*5113495bSYour Name 	BEACON_FREE,
654*5113495bSYour Name };
655*5113495bSYour Name 
656*5113495bSYour Name /**
657*5113495bSYour Name  * enum vdev_cmd_type - Command type
658*5113495bSYour Name  * @START_REQ:      Start request
659*5113495bSYour Name  * @RESTART_REQ:    Restart request
660*5113495bSYour Name  * @STOP_REQ: STOP request
661*5113495bSYour Name  * @DELETE_REQ: DELETE request
662*5113495bSYour Name  */
663*5113495bSYour Name enum vdev_cmd_type {
664*5113495bSYour Name 	START_REQ,
665*5113495bSYour Name 	RESTART_REQ,
666*5113495bSYour Name 	STOP_REQ,
667*5113495bSYour Name 	DELETE_REQ,
668*5113495bSYour Name };
669*5113495bSYour Name 
670*5113495bSYour Name /**
671*5113495bSYour Name  * enum vdev_start_resp_type - start respone type
672*5113495bSYour Name  * @START_RESPONSE:  Start response
673*5113495bSYour Name  * @RESTART_RESPONSE: Restart response
674*5113495bSYour Name  */
675*5113495bSYour Name enum vdev_start_resp_type {
676*5113495bSYour Name 	START_RESPONSE = 0,
677*5113495bSYour Name 	RESTART_RESPONSE,
678*5113495bSYour Name };
679*5113495bSYour Name 
680*5113495bSYour Name /**
681*5113495bSYour Name  * struct vdev_mlme_ops - VDEV MLME operation callbacks structure
682*5113495bSYour Name  * @mlme_vdev_validate_basic_params:    callback to validate VDEV basic params
683*5113495bSYour Name  * @mlme_vdev_reset_proto_params:       callback to Reset protocol params
684*5113495bSYour Name  * @mlme_vdev_start_send:               callback to initiate actions of VDEV
685*5113495bSYour Name  *                                      MLME start operation
686*5113495bSYour Name  * @mlme_vdev_restart_send:             callback to initiate actions of VDEV
687*5113495bSYour Name  *                                      MLME restart operation
688*5113495bSYour Name  * @mlme_vdev_stop_start_send:          callback to block start/restart VDEV
689*5113495bSYour Name  *                                      request command
690*5113495bSYour Name  * @mlme_vdev_start_continue:           callback to initiate operations on
691*5113495bSYour Name  *                                      LMAC/FW start response
692*5113495bSYour Name  * @mlme_vdev_sta_conn_start:           callback to initiate STA connection
693*5113495bSYour Name  * @mlme_vdev_start_req_failed:
694*5113495bSYour Name  * @mlme_vdev_up_send:                  callback to initiate actions of VDEV
695*5113495bSYour Name  *                                      MLME up operation
696*5113495bSYour Name  * @mlme_vdev_notify_up_complete:       callback to notify VDEV MLME on moving
697*5113495bSYour Name  *                                      to UP state
698*5113495bSYour Name  * @mlme_vdev_notify_roam_start:        callback to initiate roaming
699*5113495bSYour Name  * @mlme_vdev_update_beacon:            callback to initiate beacon update
700*5113495bSYour Name  * @mlme_vdev_disconnect_peers:         callback to initiate disconnection of
701*5113495bSYour Name  *                                      peers
702*5113495bSYour Name  * @mlme_vdev_dfs_cac_timer_stop:       callback to stop the DFS CAC timer
703*5113495bSYour Name  * @mlme_vdev_stop_send:                callback to initiate actions of VDEV
704*5113495bSYour Name  *                                      MLME stop operation
705*5113495bSYour Name  * @mlme_vdev_stop_continue:            callback to initiate operations on
706*5113495bSYour Name  *                                      LMAC/FW stop response
707*5113495bSYour Name  * @mlme_vdev_bss_peer_delete_continue: callback to initiate operations on BSS
708*5113495bSYour Name  *                                      peer delete completion
709*5113495bSYour Name  * @mlme_vdev_down_send:                callback to initiate actions of VDEV
710*5113495bSYour Name  *                                      MLME down operation
711*5113495bSYour Name  * @mlme_vdev_notify_down_complete:
712*5113495bSYour Name  * @mlme_vdev_ext_stop_rsp:
713*5113495bSYour Name  * @mlme_vdev_ext_start_rsp:
714*5113495bSYour Name  * @mlme_vdev_notify_start_state_exit:  callback to notify on vdev start
715*5113495bSYour Name  *                                      start state exit
716*5113495bSYour Name  * @mlme_vdev_is_newchan_no_cac:        callback to check CAC is required
717*5113495bSYour Name  * @mlme_vdev_ext_peer_delete_all_rsp:  callback to initiate actions for
718*5113495bSYour Name  *                                      vdev mlme peer delete all response
719*5113495bSYour Name  * @mlme_vdev_dfs_cac_wait_notify:      callback to notify about CAC state
720*5113495bSYour Name  * @mlme_vdev_csa_complete:             callback to indicate CSA complete
721*5113495bSYour Name  * @mlme_vdev_sta_disconn_start:        callback to initiate STA disconnection
722*5113495bSYour Name  * @mlme_vdev_reconfig_notify:          callback to notify ml reconfing link
723*5113495bSYour Name  *                                      delete start operation after receive
724*5113495bSYour Name  *                                      the first ml reconfig IE
725*5113495bSYour Name  * @mlme_vdev_reconfig_timer_complete:  callback to process ml reconfing
726*5113495bSYour Name  *                                      operation
727*5113495bSYour Name  * @mlme_vdev_reconfig_notify_standby: callback to notify to process standby
728*5113495bSYour Name  *                                      link removal
729*5113495bSYour Name  * @mlme_vdev_notify_mlo_sync_wait_entry:
730*5113495bSYour Name  */
731*5113495bSYour Name struct vdev_mlme_ops {
732*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_validate_basic_params)(
733*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
734*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
735*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_reset_proto_params)(
736*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
737*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
738*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_start_send)(
739*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
740*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
741*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_restart_send)(
742*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
743*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
744*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_stop_start_send)(
745*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
746*5113495bSYour Name 				enum vdev_cmd_type type,
747*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
748*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_start_continue)(
749*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
750*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
751*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_sta_conn_start)(
752*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
753*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
754*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_start_req_failed)(
755*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
756*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
757*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_up_send)(
758*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
759*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
760*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_notify_up_complete)(
761*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
762*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
763*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_notify_roam_start)(
764*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
765*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
766*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_update_beacon)(
767*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
768*5113495bSYour Name 				enum beacon_update_op op,
769*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
770*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_disconnect_peers)(
771*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
772*5113495bSYour Name 				uint16_t event_data_len, void *event_data,
773*5113495bSYour Name 				bool discon_legacy_only);
774*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_dfs_cac_timer_stop)(
775*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
776*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
777*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_stop_send)(
778*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
779*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
780*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_stop_continue)(
781*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
782*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
783*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_down_send)(
784*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
785*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
786*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_notify_down_complete)(
787*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
788*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
789*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_ext_stop_rsp)(
790*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
791*5113495bSYour Name 				struct vdev_stop_response *rsp);
792*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_ext_start_rsp)(
793*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
794*5113495bSYour Name 				struct vdev_start_response *rsp);
795*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_notify_start_state_exit)(
796*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme);
797*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_is_newchan_no_cac)(
798*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme);
799*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_ext_peer_delete_all_rsp)(
800*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
801*5113495bSYour Name 				struct peer_delete_all_response *rsp);
802*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_dfs_cac_wait_notify)(
803*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme);
804*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_csa_complete)(
805*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme);
806*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_sta_disconn_start)(
807*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
808*5113495bSYour Name 				uint16_t event_data_len, void *event_data);
809*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_reconfig_notify)(
810*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
811*5113495bSYour Name 				uint16_t *tbtt_count, uint16_t bcn_int);
812*5113495bSYour Name 	void (*mlme_vdev_reconfig_timer_complete)(
813*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme);
814*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_reconfig_notify_standby)(
815*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme,
816*5113495bSYour Name 				struct ml_rv_info *reconfig_info);
817*5113495bSYour Name 	QDF_STATUS (*mlme_vdev_notify_mlo_sync_wait_entry)(
818*5113495bSYour Name 				struct vdev_mlme_obj *vdev_mlme);
819*5113495bSYour Name };
820*5113495bSYour Name 
821*5113495bSYour Name /**
822*5113495bSYour Name  * struct vdev_mlme_obj - VDEV MLME component object
823*5113495bSYour Name  * @proto: VDEV MLME proto substructure
824*5113495bSYour Name  * @mgmt: VDEV MLME mgmt substructure
825*5113495bSYour Name  * @sm_lock:              VDEV SM lock
826*5113495bSYour Name  * @vdev_cmd_lock:        VDEV MLME command atomicity
827*5113495bSYour Name  * @sm_hdl:               VDEV SM handle
828*5113495bSYour Name  * @cnx_mgr_ctx: connection manager context, valid for STA and P2P-CLI mode only
829*5113495bSYour Name  * @vdev: Pointer to vdev objmgr
830*5113495bSYour Name  * @ops:                  VDEV MLME callback table
831*5113495bSYour Name  * @ext_vdev_ptr:         VDEV MLME legacy pointer
832*5113495bSYour Name  * @reg_tpc_obj:          Regulatory transmit power info
833*5113495bSYour Name  * @ml_reconfig_timer: VDEV ml reconfig timer
834*5113495bSYour Name  * @ml_reconfig_started:  Flag to indicate reconfig status for vdev
835*5113495bSYour Name  */
836*5113495bSYour Name struct vdev_mlme_obj {
837*5113495bSYour Name 	struct vdev_mlme_proto proto;
838*5113495bSYour Name 	struct vdev_mlme_mgmt  mgmt;
839*5113495bSYour Name #ifdef VDEV_SM_LOCK_SUPPORT
840*5113495bSYour Name 	qdf_spinlock_t sm_lock;
841*5113495bSYour Name 	qdf_mutex_t vdev_cmd_lock;
842*5113495bSYour Name #endif
843*5113495bSYour Name 	struct wlan_sm *sm_hdl;
844*5113495bSYour Name 	union {
845*5113495bSYour Name 		struct cnx_mgr *cnx_mgr_ctx;
846*5113495bSYour Name 	};
847*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev;
848*5113495bSYour Name 	struct vdev_mlme_ops *ops;
849*5113495bSYour Name 	mlme_vdev_ext_t *ext_vdev_ptr;
850*5113495bSYour Name 	struct reg_tpc_power_info reg_tpc_obj;
851*5113495bSYour Name 	qdf_timer_t ml_reconfig_timer;
852*5113495bSYour Name 	bool ml_reconfig_started;
853*5113495bSYour Name };
854*5113495bSYour Name 
855*5113495bSYour Name /**
856*5113495bSYour Name  * wlan_vdev_mlme_set_ssid() - set ssid
857*5113495bSYour Name  * @vdev: VDEV object
858*5113495bSYour Name  * @ssid: SSID (input)
859*5113495bSYour Name  * @ssid_len: Length of SSID
860*5113495bSYour Name  *
861*5113495bSYour Name  * API to set the SSID of VDEV
862*5113495bSYour Name  *
863*5113495bSYour Name  * Caller need to acquire lock with wlan_vdev_obj_lock()
864*5113495bSYour Name  *
865*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS, if update is done
866*5113495bSYour Name  *         QDF_STATUS error, if ssid length is > max ssid len
867*5113495bSYour Name  */
wlan_vdev_mlme_set_ssid(struct wlan_objmgr_vdev * vdev,const uint8_t * ssid,uint8_t ssid_len)868*5113495bSYour Name static inline QDF_STATUS wlan_vdev_mlme_set_ssid(
869*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev,
870*5113495bSYour Name 				const uint8_t *ssid, uint8_t ssid_len)
871*5113495bSYour Name {
872*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
873*5113495bSYour Name 
874*5113495bSYour Name 	/* This API is invoked with lock acquired, do not add log prints */
875*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
876*5113495bSYour Name 	if (!vdev_mlme)
877*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
878*5113495bSYour Name 
879*5113495bSYour Name 	if (ssid_len <= WLAN_SSID_MAX_LEN) {
880*5113495bSYour Name 		qdf_mem_copy(vdev_mlme->mgmt.generic.ssid, ssid, ssid_len);
881*5113495bSYour Name 		vdev_mlme->mgmt.generic.ssid_len = ssid_len;
882*5113495bSYour Name 	} else {
883*5113495bSYour Name 		vdev_mlme->mgmt.generic.ssid_len = 0;
884*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
885*5113495bSYour Name 	}
886*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
887*5113495bSYour Name }
888*5113495bSYour Name 
889*5113495bSYour Name /**
890*5113495bSYour Name  * wlan_vdev_mlme_get_ssid() - get ssid
891*5113495bSYour Name  * @vdev: VDEV object
892*5113495bSYour Name  * @ssid: SSID
893*5113495bSYour Name  * @ssid_len: Length of SSID
894*5113495bSYour Name  *
895*5113495bSYour Name  * API to get the SSID of VDEV, it updates the SSID and its length
896*5113495bSYour Name  * in @ssid, @ssid_len respectively
897*5113495bSYour Name  *
898*5113495bSYour Name  * Caller need to acquire lock with wlan_vdev_obj_lock()
899*5113495bSYour Name  *
900*5113495bSYour Name  * Return: SUCCESS, if update is done
901*5113495bSYour Name  *          FAILURE, if ssid length is > max ssid len
902*5113495bSYour Name  */
wlan_vdev_mlme_get_ssid(struct wlan_objmgr_vdev * vdev,uint8_t * ssid,uint8_t * ssid_len)903*5113495bSYour Name static inline QDF_STATUS wlan_vdev_mlme_get_ssid(
904*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev,
905*5113495bSYour Name 				 uint8_t *ssid, uint8_t *ssid_len)
906*5113495bSYour Name {
907*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
908*5113495bSYour Name 
909*5113495bSYour Name 	/* This API is invoked with lock acquired, do not add log prints */
910*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
911*5113495bSYour Name 	if (!vdev_mlme)
912*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
913*5113495bSYour Name 
914*5113495bSYour Name 	if (vdev_mlme->mgmt.generic.ssid_len > 0) {
915*5113495bSYour Name 		*ssid_len = vdev_mlme->mgmt.generic.ssid_len;
916*5113495bSYour Name 		qdf_mem_copy(ssid, vdev_mlme->mgmt.generic.ssid, *ssid_len);
917*5113495bSYour Name 	} else {
918*5113495bSYour Name 		*ssid_len = 0;
919*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
920*5113495bSYour Name 	}
921*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
922*5113495bSYour Name }
923*5113495bSYour Name 
924*5113495bSYour Name /**
925*5113495bSYour Name  * wlan_vdev_mlme_set_nss() - set NSS
926*5113495bSYour Name  * @vdev: VDEV object
927*5113495bSYour Name  * @nss: nss configured by user
928*5113495bSYour Name  *
929*5113495bSYour Name  * API to set the Number of Spatial streams
930*5113495bSYour Name  *
931*5113495bSYour Name  * Return: void
932*5113495bSYour Name  */
wlan_vdev_mlme_set_nss(struct wlan_objmgr_vdev * vdev,uint8_t nss)933*5113495bSYour Name static inline void wlan_vdev_mlme_set_nss(
934*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev,
935*5113495bSYour Name 				uint8_t nss)
936*5113495bSYour Name {
937*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
938*5113495bSYour Name 
939*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
940*5113495bSYour Name 	if (!vdev_mlme)
941*5113495bSYour Name 		return;
942*5113495bSYour Name 
943*5113495bSYour Name 	vdev_mlme->proto.generic.nss = nss;
944*5113495bSYour Name }
945*5113495bSYour Name 
946*5113495bSYour Name /**
947*5113495bSYour Name  * wlan_vdev_mlme_get_nss() - get NSS
948*5113495bSYour Name  * @vdev: VDEV object
949*5113495bSYour Name  *
950*5113495bSYour Name  * API to get the Number of Spatial Streams
951*5113495bSYour Name  *
952*5113495bSYour Name  * Return: nss value
953*5113495bSYour Name  */
wlan_vdev_mlme_get_nss(struct wlan_objmgr_vdev * vdev)954*5113495bSYour Name static inline uint8_t wlan_vdev_mlme_get_nss(
955*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev)
956*5113495bSYour Name {
957*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
958*5113495bSYour Name 
959*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
960*5113495bSYour Name 	if (!vdev_mlme)
961*5113495bSYour Name 		return 0;
962*5113495bSYour Name 
963*5113495bSYour Name 	return vdev_mlme->proto.generic.nss;
964*5113495bSYour Name }
965*5113495bSYour Name 
966*5113495bSYour Name /**
967*5113495bSYour Name  * wlan_vdev_mlme_set_txchainmask() - set Tx chainmask
968*5113495bSYour Name  * @vdev: VDEV object
969*5113495bSYour Name  * @chainmask : chainmask either configured by user or max supported
970*5113495bSYour Name  *
971*5113495bSYour Name  * API to set the Tx chainmask
972*5113495bSYour Name  *
973*5113495bSYour Name  * Return: void
974*5113495bSYour Name  */
wlan_vdev_mlme_set_txchainmask(struct wlan_objmgr_vdev * vdev,uint8_t chainmask)975*5113495bSYour Name static inline void wlan_vdev_mlme_set_txchainmask(
976*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev,
977*5113495bSYour Name 				uint8_t chainmask)
978*5113495bSYour Name {
979*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
980*5113495bSYour Name 
981*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
982*5113495bSYour Name 
983*5113495bSYour Name 	if (!vdev_mlme)
984*5113495bSYour Name 		return;
985*5113495bSYour Name 
986*5113495bSYour Name 	vdev_mlme->mgmt.chainmask_info.tx_chainmask = chainmask;
987*5113495bSYour Name }
988*5113495bSYour Name 
989*5113495bSYour Name /**
990*5113495bSYour Name  * wlan_vdev_mlme_get_txchainmask() - get Tx chainmask
991*5113495bSYour Name  * @vdev: VDEV object
992*5113495bSYour Name  *
993*5113495bSYour Name  * API to get the Tx chainmask
994*5113495bSYour Name  *
995*5113495bSYour Name  * Return: Tx chainmask either configured by user or max supported
996*5113495bSYour Name  */
wlan_vdev_mlme_get_txchainmask(struct wlan_objmgr_vdev * vdev)997*5113495bSYour Name static inline uint8_t wlan_vdev_mlme_get_txchainmask(
998*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev)
999*5113495bSYour Name {
1000*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1001*5113495bSYour Name 
1002*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1003*5113495bSYour Name 	if (!vdev_mlme)
1004*5113495bSYour Name 		return 0;
1005*5113495bSYour Name 
1006*5113495bSYour Name 	return vdev_mlme->mgmt.chainmask_info.tx_chainmask;
1007*5113495bSYour Name }
1008*5113495bSYour Name 
1009*5113495bSYour Name /**
1010*5113495bSYour Name  * wlan_vdev_mlme_set_rxchainmask() - set Rx chainmask
1011*5113495bSYour Name  * @vdev: VDEV object
1012*5113495bSYour Name  * @chainmask : Rx chainmask either configured by user or max supported
1013*5113495bSYour Name  *
1014*5113495bSYour Name  * API to set the Rx chainmask
1015*5113495bSYour Name  *
1016*5113495bSYour Name  * Return: void
1017*5113495bSYour Name  */
wlan_vdev_mlme_set_rxchainmask(struct wlan_objmgr_vdev * vdev,uint8_t chainmask)1018*5113495bSYour Name static inline void wlan_vdev_mlme_set_rxchainmask(
1019*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev,
1020*5113495bSYour Name 				uint8_t chainmask)
1021*5113495bSYour Name {
1022*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1023*5113495bSYour Name 
1024*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1025*5113495bSYour Name 	if (!vdev_mlme)
1026*5113495bSYour Name 		return;
1027*5113495bSYour Name 
1028*5113495bSYour Name 	vdev_mlme->mgmt.chainmask_info.rx_chainmask = chainmask;
1029*5113495bSYour Name }
1030*5113495bSYour Name 
1031*5113495bSYour Name /**
1032*5113495bSYour Name  * wlan_vdev_mlme_get_rxchainmask() - get Rx chainmask
1033*5113495bSYour Name  * @vdev: VDEV object
1034*5113495bSYour Name  *
1035*5113495bSYour Name  * API to get the Rx chainmask
1036*5113495bSYour Name  *
1037*5113495bSYour Name  * Return: Rx chainmask either configured by user or max supported
1038*5113495bSYour Name  */
wlan_vdev_mlme_get_rxchainmask(struct wlan_objmgr_vdev * vdev)1039*5113495bSYour Name static inline uint8_t wlan_vdev_mlme_get_rxchainmask(
1040*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev)
1041*5113495bSYour Name {
1042*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1043*5113495bSYour Name 
1044*5113495bSYour Name 	/* This API is invoked with lock acquired, do not add log prints */
1045*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1046*5113495bSYour Name 	if (!vdev_mlme)
1047*5113495bSYour Name 		return 0;
1048*5113495bSYour Name 
1049*5113495bSYour Name 	return vdev_mlme->mgmt.chainmask_info.rx_chainmask;
1050*5113495bSYour Name }
1051*5113495bSYour Name 
1052*5113495bSYour Name /**
1053*5113495bSYour Name  * wlan_vdev_mlme_set_txpower() - set tx power
1054*5113495bSYour Name  * @vdev: VDEV object
1055*5113495bSYour Name  * @txpow: tx power either configured by used or max allowed
1056*5113495bSYour Name  *
1057*5113495bSYour Name  * API to set the tx power
1058*5113495bSYour Name  *
1059*5113495bSYour Name  * Return: void
1060*5113495bSYour Name  */
wlan_vdev_mlme_set_txpower(struct wlan_objmgr_vdev * vdev,uint8_t txpow)1061*5113495bSYour Name static inline void wlan_vdev_mlme_set_txpower(
1062*5113495bSYour Name 					struct wlan_objmgr_vdev *vdev,
1063*5113495bSYour Name 					uint8_t txpow)
1064*5113495bSYour Name {
1065*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1066*5113495bSYour Name 
1067*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1068*5113495bSYour Name 	if (!vdev_mlme)
1069*5113495bSYour Name 		return;
1070*5113495bSYour Name 
1071*5113495bSYour Name 	vdev_mlme->mgmt.generic.tx_power = txpow;
1072*5113495bSYour Name }
1073*5113495bSYour Name 
1074*5113495bSYour Name /**
1075*5113495bSYour Name  * wlan_vdev_mlme_get_txpower() - get tx power
1076*5113495bSYour Name  * @vdev: VDEV object
1077*5113495bSYour Name  *
1078*5113495bSYour Name  * API to get the tx power
1079*5113495bSYour Name  *
1080*5113495bSYour Name  * Return: tx power either configured by used or max allowed
1081*5113495bSYour Name  */
wlan_vdev_mlme_get_txpower(struct wlan_objmgr_vdev * vdev)1082*5113495bSYour Name static inline uint8_t wlan_vdev_mlme_get_txpower(
1083*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev)
1084*5113495bSYour Name {
1085*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1086*5113495bSYour Name 
1087*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1088*5113495bSYour Name 	if (!vdev_mlme)
1089*5113495bSYour Name 		return 0;
1090*5113495bSYour Name 
1091*5113495bSYour Name 	return vdev_mlme->mgmt.generic.tx_power;
1092*5113495bSYour Name }
1093*5113495bSYour Name 
1094*5113495bSYour Name /**
1095*5113495bSYour Name  * wlan_vdev_mlme_set_maxrate() - set max rate
1096*5113495bSYour Name  * @vdev: VDEV object
1097*5113495bSYour Name  * @maxrate: configured by used or based on configured mode
1098*5113495bSYour Name  *
1099*5113495bSYour Name  * API to set the max rate the vdev supports
1100*5113495bSYour Name  *
1101*5113495bSYour Name  * Return: void
1102*5113495bSYour Name  */
wlan_vdev_mlme_set_maxrate(struct wlan_objmgr_vdev * vdev,uint32_t maxrate)1103*5113495bSYour Name static inline void wlan_vdev_mlme_set_maxrate(
1104*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev,
1105*5113495bSYour Name 				uint32_t maxrate)
1106*5113495bSYour Name {
1107*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1108*5113495bSYour Name 
1109*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1110*5113495bSYour Name 	if (!vdev_mlme)
1111*5113495bSYour Name 		return;
1112*5113495bSYour Name 
1113*5113495bSYour Name 	vdev_mlme->mgmt.rate_info.max_rate = maxrate;
1114*5113495bSYour Name }
1115*5113495bSYour Name 
1116*5113495bSYour Name /**
1117*5113495bSYour Name  * wlan_vdev_mlme_get_maxrate() - get max rate
1118*5113495bSYour Name  * @vdev: VDEV object
1119*5113495bSYour Name  *
1120*5113495bSYour Name  * API to get the max rate the vdev supports
1121*5113495bSYour Name  *
1122*5113495bSYour Name  * Return: configured by used or based on configured mode
1123*5113495bSYour Name  */
wlan_vdev_mlme_get_maxrate(struct wlan_objmgr_vdev * vdev)1124*5113495bSYour Name static inline uint32_t wlan_vdev_mlme_get_maxrate(
1125*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev)
1126*5113495bSYour Name {
1127*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1128*5113495bSYour Name 
1129*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1130*5113495bSYour Name 	if (!vdev_mlme)
1131*5113495bSYour Name 		return 0;
1132*5113495bSYour Name 
1133*5113495bSYour Name 	return vdev_mlme->mgmt.rate_info.max_rate;
1134*5113495bSYour Name }
1135*5113495bSYour Name 
1136*5113495bSYour Name /**
1137*5113495bSYour Name  * wlan_vdev_mlme_set_txmgmtrate() - set txmgmtrate
1138*5113495bSYour Name  * @vdev: VDEV object
1139*5113495bSYour Name  * @txmgmtrate: Tx Mgmt rate
1140*5113495bSYour Name  *
1141*5113495bSYour Name  * API to set Mgmt Tx rate
1142*5113495bSYour Name  *
1143*5113495bSYour Name  * Return: void
1144*5113495bSYour Name  */
wlan_vdev_mlme_set_txmgmtrate(struct wlan_objmgr_vdev * vdev,uint32_t txmgmtrate)1145*5113495bSYour Name static inline void wlan_vdev_mlme_set_txmgmtrate(
1146*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev,
1147*5113495bSYour Name 				uint32_t txmgmtrate)
1148*5113495bSYour Name {
1149*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1150*5113495bSYour Name 
1151*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1152*5113495bSYour Name 	if (!vdev_mlme)
1153*5113495bSYour Name 		return;
1154*5113495bSYour Name 
1155*5113495bSYour Name 	vdev_mlme->mgmt.rate_info.tx_mgmt_rate = txmgmtrate;
1156*5113495bSYour Name }
1157*5113495bSYour Name 
1158*5113495bSYour Name /**
1159*5113495bSYour Name  * wlan_vdev_mlme_get_txmgmtrate() - get txmgmtrate
1160*5113495bSYour Name  * @vdev: VDEV object
1161*5113495bSYour Name  *
1162*5113495bSYour Name  * API to get Mgmt Tx rate
1163*5113495bSYour Name  *
1164*5113495bSYour Name  * Return: Tx Mgmt rate
1165*5113495bSYour Name  */
wlan_vdev_mlme_get_txmgmtrate(struct wlan_objmgr_vdev * vdev)1166*5113495bSYour Name static inline uint32_t wlan_vdev_mlme_get_txmgmtrate(
1167*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev)
1168*5113495bSYour Name {
1169*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1170*5113495bSYour Name 
1171*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1172*5113495bSYour Name 	if (!vdev_mlme)
1173*5113495bSYour Name 		return 0;
1174*5113495bSYour Name 
1175*5113495bSYour Name 	return vdev_mlme->mgmt.rate_info.tx_mgmt_rate;
1176*5113495bSYour Name }
1177*5113495bSYour Name 
1178*5113495bSYour Name /**
1179*5113495bSYour Name  * wlan_vdev_mlme_is_special_vdev() - check given vdev is a special vdev
1180*5113495bSYour Name  * @vdev: VDEV object
1181*5113495bSYour Name  *
1182*5113495bSYour Name  * API to check given vdev is a special vdev.
1183*5113495bSYour Name  *
1184*5113495bSYour Name  * Return: true if given vdev is special vdev, else false
1185*5113495bSYour Name  */
wlan_vdev_mlme_is_special_vdev(struct wlan_objmgr_vdev * vdev)1186*5113495bSYour Name static inline bool wlan_vdev_mlme_is_special_vdev(
1187*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev)
1188*5113495bSYour Name {
1189*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1190*5113495bSYour Name 
1191*5113495bSYour Name 	if (!vdev)
1192*5113495bSYour Name 		return false;
1193*5113495bSYour Name 
1194*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1195*5113495bSYour Name 	if (!vdev_mlme)
1196*5113495bSYour Name 		return false;
1197*5113495bSYour Name 
1198*5113495bSYour Name 	return vdev_mlme->mgmt.generic.special_vdev_mode;
1199*5113495bSYour Name }
1200*5113495bSYour Name 
1201*5113495bSYour Name /**
1202*5113495bSYour Name  * wlan_vdev_mlme_is_sap_go_move_before_sta() - check if SAP / GO
1203*5113495bSYour Name  * moved to new channel before STA's movement upon receiving CSA
1204*5113495bSYour Name  *
1205*5113495bSYour Name  * @vdev: VDEV object
1206*5113495bSYour Name  *
1207*5113495bSYour Name  * API to check in STA+SAP/GO SCC concurrency, whether SAP / GO moved before
1208*5113495bSYour Name  * STA's movement on receiving CSA from peer AP to connected STA.
1209*5113495bSYour Name  *
1210*5113495bSYour Name  * Return: true if SAP / GO moved before STA else false
1211*5113495bSYour Name  */
1212*5113495bSYour Name static inline
wlan_vdev_mlme_is_sap_go_move_before_sta(struct wlan_objmgr_vdev * vdev)1213*5113495bSYour Name bool wlan_vdev_mlme_is_sap_go_move_before_sta(struct wlan_objmgr_vdev *vdev)
1214*5113495bSYour Name {
1215*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1216*5113495bSYour Name 
1217*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1218*5113495bSYour Name 	if (!vdev_mlme)
1219*5113495bSYour Name 		return false;
1220*5113495bSYour Name 
1221*5113495bSYour Name 	return vdev_mlme->mgmt.generic.is_sap_go_moved_1st_on_csa;
1222*5113495bSYour Name }
1223*5113495bSYour Name 
1224*5113495bSYour Name /**
1225*5113495bSYour Name  * wlan_vdev_mlme_set_sap_go_move_before_sta() - Set flag if SAP / GO
1226*5113495bSYour Name  * moves to new channel before STA's movement upon receiving CSA
1227*5113495bSYour Name  *
1228*5113495bSYour Name  * @vdev: VDEV object
1229*5113495bSYour Name  * @sap_go_moved_before_sta: Flag to indicate True when SAP / GO
1230*5113495bSYour Name  *  moves before STA
1231*5113495bSYour Name  *
1232*5113495bSYour Name  * API to set True in STA+SAP/GO SCC concurrency, when SAP / GO moves before
1233*5113495bSYour Name  * STA's movement on receiving CSA from peer AP to connected STA.
1234*5113495bSYour Name  *
1235*5113495bSYour Name  * Return: void
1236*5113495bSYour Name  */
1237*5113495bSYour Name static inline
wlan_vdev_mlme_set_sap_go_move_before_sta(struct wlan_objmgr_vdev * vdev,bool sap_go_moved_before_sta)1238*5113495bSYour Name void wlan_vdev_mlme_set_sap_go_move_before_sta(struct wlan_objmgr_vdev *vdev,
1239*5113495bSYour Name 					       bool sap_go_moved_before_sta)
1240*5113495bSYour Name {
1241*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1242*5113495bSYour Name 
1243*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1244*5113495bSYour Name 	if (!vdev_mlme)
1245*5113495bSYour Name 		return;
1246*5113495bSYour Name 
1247*5113495bSYour Name 	vdev_mlme->mgmt.generic.is_sap_go_moved_1st_on_csa =
1248*5113495bSYour Name 						sap_go_moved_before_sta;
1249*5113495bSYour Name }
1250*5113495bSYour Name 
1251*5113495bSYour Name #ifdef WLAN_FEATURE_11AX
1252*5113495bSYour Name /**
1253*5113495bSYour Name  * wlan_vdev_mlme_set_he_mcs_12_13_map() - set he mcs12/13 map
1254*5113495bSYour Name  * @vdev: VDEV object
1255*5113495bSYour Name  * @he_mcs_12_13_map: he mcs12/13 map from self&peer
1256*5113495bSYour Name  *
1257*5113495bSYour Name  * API to set he mcs 12/13 map
1258*5113495bSYour Name  *
1259*5113495bSYour Name  * Return: void
1260*5113495bSYour Name  */
wlan_vdev_mlme_set_he_mcs_12_13_map(struct wlan_objmgr_vdev * vdev,uint16_t he_mcs_12_13_map)1261*5113495bSYour Name static inline void wlan_vdev_mlme_set_he_mcs_12_13_map(
1262*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev,
1263*5113495bSYour Name 				uint16_t he_mcs_12_13_map)
1264*5113495bSYour Name {
1265*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1266*5113495bSYour Name 
1267*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1268*5113495bSYour Name 	if (!vdev_mlme)
1269*5113495bSYour Name 		return;
1270*5113495bSYour Name 
1271*5113495bSYour Name 	vdev_mlme->mgmt.sta.he_mcs_12_13_map = he_mcs_12_13_map;
1272*5113495bSYour Name }
1273*5113495bSYour Name 
1274*5113495bSYour Name /**
1275*5113495bSYour Name  * wlan_vdev_mlme_get_he_mcs_12_13_map() - get he mcs12/13 map
1276*5113495bSYour Name  * @vdev: VDEV object
1277*5113495bSYour Name  *
1278*5113495bSYour Name  * API to get he mcs12/13 support capability
1279*5113495bSYour Name  *
1280*5113495bSYour Name  * Return: he mcs12/13 map
1281*5113495bSYour Name  */
wlan_vdev_mlme_get_he_mcs_12_13_map(struct wlan_objmgr_vdev * vdev)1282*5113495bSYour Name static inline uint16_t wlan_vdev_mlme_get_he_mcs_12_13_map(
1283*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev)
1284*5113495bSYour Name {
1285*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1286*5113495bSYour Name 
1287*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1288*5113495bSYour Name 	if (!vdev_mlme)
1289*5113495bSYour Name 		return 0;
1290*5113495bSYour Name 
1291*5113495bSYour Name 	return vdev_mlme->mgmt.sta.he_mcs_12_13_map;
1292*5113495bSYour Name }
1293*5113495bSYour Name 
1294*5113495bSYour Name #ifdef WLAN_FEATURE_SR
1295*5113495bSYour Name /**
1296*5113495bSYour Name  * wlan_vdev_mlme_get_sr_ctrl() - get spatial reuse SR control
1297*5113495bSYour Name  * @vdev: VDEV object
1298*5113495bSYour Name  *
1299*5113495bSYour Name  * API to retrieve the spatial reuse SR control from VDEV
1300*5113495bSYour Name  *
1301*5113495bSYour Name  * Caller need to acquire lock with wlan_vdev_obj_lock()
1302*5113495bSYour Name  *
1303*5113495bSYour Name  * Return: SR control
1304*5113495bSYour Name  */
wlan_vdev_mlme_get_sr_ctrl(struct wlan_objmgr_vdev * vdev)1305*5113495bSYour Name static inline uint8_t wlan_vdev_mlme_get_sr_ctrl(struct wlan_objmgr_vdev *vdev)
1306*5113495bSYour Name {
1307*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1308*5113495bSYour Name 
1309*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1310*5113495bSYour Name 	if (!vdev_mlme)
1311*5113495bSYour Name 		return 0;
1312*5113495bSYour Name 
1313*5113495bSYour Name 	return vdev_mlme->mgmt.generic.he_spr_sr_ctrl;
1314*5113495bSYour Name }
1315*5113495bSYour Name 
1316*5113495bSYour Name /**
1317*5113495bSYour Name  * wlan_vdev_mlme_get_non_srg_pd_offset() - get spatial reuse non srg pd offset
1318*5113495bSYour Name  * @vdev: VDEV object
1319*5113495bSYour Name  *
1320*5113495bSYour Name  * API to retrieve the spatial reuse pd offset from VDEV
1321*5113495bSYour Name  *
1322*5113495bSYour Name  * Return: max non srg pd offset
1323*5113495bSYour Name  */
wlan_vdev_mlme_get_non_srg_pd_offset(struct wlan_objmgr_vdev * vdev)1324*5113495bSYour Name static inline uint8_t wlan_vdev_mlme_get_non_srg_pd_offset(
1325*5113495bSYour Name 						struct wlan_objmgr_vdev *vdev)
1326*5113495bSYour Name {
1327*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1328*5113495bSYour Name 
1329*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1330*5113495bSYour Name 	if (!vdev_mlme)
1331*5113495bSYour Name 		return 0;
1332*5113495bSYour Name 
1333*5113495bSYour Name 	return vdev_mlme->mgmt.generic.he_spr_non_srg_pd_max_offset;
1334*5113495bSYour Name }
1335*5113495bSYour Name 
1336*5113495bSYour Name /**
1337*5113495bSYour Name  * wlan_vdev_mlme_get_he_spr_enabled() - spatial reuse enabled or not
1338*5113495bSYour Name  * @vdev: VDEV object
1339*5113495bSYour Name  *
1340*5113495bSYour Name  * API to check whether the spatial reuse enabled or not
1341*5113495bSYour Name  *
1342*5113495bSYour Name  * Return: true if Spatial reuse enabled, false if not
1343*5113495bSYour Name  */
wlan_vdev_mlme_get_he_spr_enabled(struct wlan_objmgr_vdev * vdev)1344*5113495bSYour Name static inline bool wlan_vdev_mlme_get_he_spr_enabled(
1345*5113495bSYour Name 						struct wlan_objmgr_vdev *vdev)
1346*5113495bSYour Name {
1347*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1348*5113495bSYour Name 
1349*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1350*5113495bSYour Name 	if (!vdev_mlme)
1351*5113495bSYour Name 		return false;
1352*5113495bSYour Name 
1353*5113495bSYour Name 	return vdev_mlme->mgmt.generic.he_spr_enabled;
1354*5113495bSYour Name }
1355*5113495bSYour Name 
1356*5113495bSYour Name /**
1357*5113495bSYour Name  * wlan_vdev_mlme_is_sr_disable_due_conc() - spatial reuse disabled due
1358*5113495bSYour Name  *					     to concurrency
1359*5113495bSYour Name  * @vdev: VDEV object
1360*5113495bSYour Name  *
1361*5113495bSYour Name  * API to check whether the spatial reuse disabled due to concurrency or not
1362*5113495bSYour Name  *
1363*5113495bSYour Name  * Caller need to acquire lock with wlan_vdev_obj_lock()
1364*5113495bSYour Name  *
1365*5113495bSYour Name  * Return:
1366*5113495bSYour Name  * true/false: true if spatial reuse disabled due to concurrency else false
1367*5113495bSYour Name  */
1368*5113495bSYour Name static inline
wlan_vdev_mlme_is_sr_disable_due_conc(struct wlan_objmgr_vdev * vdev)1369*5113495bSYour Name bool wlan_vdev_mlme_is_sr_disable_due_conc(struct wlan_objmgr_vdev *vdev)
1370*5113495bSYour Name {
1371*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1372*5113495bSYour Name 
1373*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1374*5113495bSYour Name 	if (!vdev_mlme)
1375*5113495bSYour Name 		return false;
1376*5113495bSYour Name 
1377*5113495bSYour Name 	return vdev_mlme->mgmt.generic.he_spr_disabled_due_conc;
1378*5113495bSYour Name }
1379*5113495bSYour Name 
1380*5113495bSYour Name /**
1381*5113495bSYour Name  * wlan_vdev_mlme_is_sr_prohibit_en() - spatial reuse PD prohibit enabled
1382*5113495bSYour Name  *					/ disabled (HE_SIGA_Val15_Allowed)
1383*5113495bSYour Name  * @vdev: VDEV object
1384*5113495bSYour Name  *
1385*5113495bSYour Name  * API to check whether the spatial reuse PD prohibit is enabled / disabled
1386*5113495bSYour Name  *
1387*5113495bSYour Name  * Caller need to acquire lock with wlan_vdev_obj_lock()
1388*5113495bSYour Name  *
1389*5113495bSYour Name  * Return: true/false: Spatial reuse PD prohibit enabled / disabled
1390*5113495bSYour Name  */
1391*5113495bSYour Name static inline
wlan_vdev_mlme_is_sr_prohibit_en(struct wlan_objmgr_vdev * vdev)1392*5113495bSYour Name bool wlan_vdev_mlme_is_sr_prohibit_en(struct wlan_objmgr_vdev *vdev)
1393*5113495bSYour Name {
1394*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1395*5113495bSYour Name 
1396*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1397*5113495bSYour Name 	if (!vdev_mlme)
1398*5113495bSYour Name 		return false;
1399*5113495bSYour Name 
1400*5113495bSYour Name 	return vdev_mlme->mgmt.generic.sr_prohibit_enabled;
1401*5113495bSYour Name }
1402*5113495bSYour Name 
1403*5113495bSYour Name /**
1404*5113495bSYour Name  * wlan_vdev_mlme_set_sr_ctrl() - set spatial reuse SR control
1405*5113495bSYour Name  * @vdev: VDEV object
1406*5113495bSYour Name  * @sr_ctrl: value to set
1407*5113495bSYour Name  *
1408*5113495bSYour Name  * API to set the spatial reuse SR control
1409*5113495bSYour Name  *
1410*5113495bSYour Name  * Caller need to acquire lock with wlan_vdev_obj_lock()
1411*5113495bSYour Name  *
1412*5113495bSYour Name  * Return: void
1413*5113495bSYour Name  */
wlan_vdev_mlme_set_sr_ctrl(struct wlan_objmgr_vdev * vdev,uint8_t sr_ctrl)1414*5113495bSYour Name static inline void wlan_vdev_mlme_set_sr_ctrl(struct wlan_objmgr_vdev *vdev,
1415*5113495bSYour Name 					      uint8_t sr_ctrl)
1416*5113495bSYour Name {
1417*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1418*5113495bSYour Name 
1419*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1420*5113495bSYour Name 	if (!vdev_mlme)
1421*5113495bSYour Name 		return;
1422*5113495bSYour Name 
1423*5113495bSYour Name 	vdev_mlme->mgmt.generic.he_spr_sr_ctrl = sr_ctrl;
1424*5113495bSYour Name }
1425*5113495bSYour Name 
1426*5113495bSYour Name /**
1427*5113495bSYour Name  * wlan_vdev_mlme_set_non_srg_pd_offset() - set spatial reuse non srg
1428*5113495bSYour Name  * pd max offset
1429*5113495bSYour Name  * @vdev: VDEV object
1430*5113495bSYour Name  * @non_srg_pd_max_offset: value to set
1431*5113495bSYour Name  *
1432*5113495bSYour Name  * API to set the spatial reuse pd max offset
1433*5113495bSYour Name  *
1434*5113495bSYour Name  * Return: void
1435*5113495bSYour Name  */
1436*5113495bSYour Name static inline void
wlan_vdev_mlme_set_non_srg_pd_offset(struct wlan_objmgr_vdev * vdev,uint8_t non_srg_pd_max_offset)1437*5113495bSYour Name wlan_vdev_mlme_set_non_srg_pd_offset(struct wlan_objmgr_vdev *vdev,
1438*5113495bSYour Name 				     uint8_t non_srg_pd_max_offset)
1439*5113495bSYour Name {
1440*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1441*5113495bSYour Name 
1442*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1443*5113495bSYour Name 	if (!vdev_mlme)
1444*5113495bSYour Name 		return;
1445*5113495bSYour Name 
1446*5113495bSYour Name 	vdev_mlme->mgmt.generic.he_spr_non_srg_pd_max_offset =
1447*5113495bSYour Name 						non_srg_pd_max_offset;
1448*5113495bSYour Name }
1449*5113495bSYour Name 
1450*5113495bSYour Name /**
1451*5113495bSYour Name  * wlan_vdev_mlme_set_he_spr_enabled() - set spatial reuse enabled
1452*5113495bSYour Name  * @vdev: VDEV object
1453*5113495bSYour Name  * @enable_he_spr: value to set
1454*5113495bSYour Name  *
1455*5113495bSYour Name  * API to set the spatial reuse enabled
1456*5113495bSYour Name  *
1457*5113495bSYour Name  * Return: void
1458*5113495bSYour Name  */
wlan_vdev_mlme_set_he_spr_enabled(struct wlan_objmgr_vdev * vdev,bool enable_he_spr)1459*5113495bSYour Name static inline void wlan_vdev_mlme_set_he_spr_enabled(
1460*5113495bSYour Name 						struct wlan_objmgr_vdev *vdev,
1461*5113495bSYour Name 						bool enable_he_spr)
1462*5113495bSYour Name {
1463*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1464*5113495bSYour Name 
1465*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1466*5113495bSYour Name 	if (!vdev_mlme)
1467*5113495bSYour Name 		return;
1468*5113495bSYour Name 
1469*5113495bSYour Name 	vdev_mlme->mgmt.generic.he_spr_enabled = enable_he_spr;
1470*5113495bSYour Name }
1471*5113495bSYour Name 
1472*5113495bSYour Name /**
1473*5113495bSYour Name  * wlan_vdev_mlme_set_sr_disable_due_conc() - set spatial reuse disabled due
1474*5113495bSYour Name  *					      to concurrency
1475*5113495bSYour Name  * @vdev: VDEV object
1476*5113495bSYour Name  * @he_spr_disabled_due_conc: value to set
1477*5113495bSYour Name  *
1478*5113495bSYour Name  * API to set the spatial reuse disabled due to concurrency
1479*5113495bSYour Name  *
1480*5113495bSYour Name  * Caller need to acquire lock with wlan_vdev_obj_lock()
1481*5113495bSYour Name  *
1482*5113495bSYour Name  * Return: void
1483*5113495bSYour Name  */
1484*5113495bSYour Name static inline
wlan_vdev_mlme_set_sr_disable_due_conc(struct wlan_objmgr_vdev * vdev,bool he_spr_disabled_due_conc)1485*5113495bSYour Name void wlan_vdev_mlme_set_sr_disable_due_conc(struct wlan_objmgr_vdev *vdev,
1486*5113495bSYour Name 					    bool he_spr_disabled_due_conc)
1487*5113495bSYour Name {
1488*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1489*5113495bSYour Name 
1490*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1491*5113495bSYour Name 	if (!vdev_mlme)
1492*5113495bSYour Name 		return;
1493*5113495bSYour Name 
1494*5113495bSYour Name 	vdev_mlme->mgmt.generic.he_spr_disabled_due_conc =
1495*5113495bSYour Name 						he_spr_disabled_due_conc;
1496*5113495bSYour Name }
1497*5113495bSYour Name 
1498*5113495bSYour Name /**
1499*5113495bSYour Name  * wlan_vdev_mlme_set_sr_prohibit_en() - set spatial reuse PD prohibit enabled
1500*5113495bSYour Name  *					 / disabled (HE_SIGA_Val15_Allowed)
1501*5113495bSYour Name  * @vdev: VDEV object
1502*5113495bSYour Name  * @sr_prohibit_enabled: True / False - PD Prohibit enabled / disabled
1503*5113495bSYour Name  *
1504*5113495bSYour Name  * API to set spatial reuse PD prohibit enabled / disabled
1505*5113495bSYour Name  *
1506*5113495bSYour Name  * Caller need to acquire lock with wlan_vdev_obj_lock()
1507*5113495bSYour Name  *
1508*5113495bSYour Name  * Return: void
1509*5113495bSYour Name  */
1510*5113495bSYour Name static inline
wlan_vdev_mlme_set_sr_prohibit_en(struct wlan_objmgr_vdev * vdev,bool sr_prohibit_enabled)1511*5113495bSYour Name void wlan_vdev_mlme_set_sr_prohibit_en(struct wlan_objmgr_vdev *vdev,
1512*5113495bSYour Name 				       bool sr_prohibit_enabled)
1513*5113495bSYour Name {
1514*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1515*5113495bSYour Name 
1516*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1517*5113495bSYour Name 	if (!vdev_mlme)
1518*5113495bSYour Name 		return;
1519*5113495bSYour Name 
1520*5113495bSYour Name 	vdev_mlme->mgmt.generic.sr_prohibit_enabled = sr_prohibit_enabled;
1521*5113495bSYour Name }
1522*5113495bSYour Name 
1523*5113495bSYour Name /**
1524*5113495bSYour Name  * wlan_vdev_mlme_set_srg_pd_offset() - set spatial reuse SRG pd max/min offset
1525*5113495bSYour Name  * @vdev: VDEV object
1526*5113495bSYour Name  * @srg_max_pd_offset: SRG max pd offset
1527*5113495bSYour Name  * @srg_min_pd_offset: SRG min pd offset
1528*5113495bSYour Name  *
1529*5113495bSYour Name  * API to set the spatial reuse SRG pd min max offset
1530*5113495bSYour Name  *
1531*5113495bSYour Name  * Return: void
1532*5113495bSYour Name  */
1533*5113495bSYour Name static inline
wlan_vdev_mlme_set_srg_pd_offset(struct wlan_objmgr_vdev * vdev,uint8_t srg_max_pd_offset,uint8_t srg_min_pd_offset)1534*5113495bSYour Name void wlan_vdev_mlme_set_srg_pd_offset(struct wlan_objmgr_vdev *vdev,
1535*5113495bSYour Name 				      uint8_t srg_max_pd_offset,
1536*5113495bSYour Name 				      uint8_t srg_min_pd_offset)
1537*5113495bSYour Name {
1538*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1539*5113495bSYour Name 
1540*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1541*5113495bSYour Name 	if (!vdev_mlme)
1542*5113495bSYour Name 		return;
1543*5113495bSYour Name 
1544*5113495bSYour Name 	vdev_mlme->mgmt.generic.he_spr_srg_max_pd_offset = srg_max_pd_offset;
1545*5113495bSYour Name 	vdev_mlme->mgmt.generic.he_spr_srg_min_pd_offset = srg_min_pd_offset;
1546*5113495bSYour Name }
1547*5113495bSYour Name 
1548*5113495bSYour Name /**
1549*5113495bSYour Name  * wlan_vdev_mlme_get_srg_pd_offset() - get spatial reuse SRG pd min/max offset
1550*5113495bSYour Name  * @vdev: VDEV object
1551*5113495bSYour Name  * @srg_max_pd_offset: SRG max pd offset
1552*5113495bSYour Name  * @srg_min_pd_offset: SRG min pd offset
1553*5113495bSYour Name  *
1554*5113495bSYour Name  * API to set the spatial reuse SRG pd min max offset
1555*5113495bSYour Name  *
1556*5113495bSYour Name  * Return: void
1557*5113495bSYour Name  */
1558*5113495bSYour Name static inline
wlan_vdev_mlme_get_srg_pd_offset(struct wlan_objmgr_vdev * vdev,uint8_t * srg_max_pd_offset,uint8_t * srg_min_pd_offset)1559*5113495bSYour Name void wlan_vdev_mlme_get_srg_pd_offset(struct wlan_objmgr_vdev *vdev,
1560*5113495bSYour Name 				      uint8_t *srg_max_pd_offset,
1561*5113495bSYour Name 				      uint8_t *srg_min_pd_offset)
1562*5113495bSYour Name {
1563*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1564*5113495bSYour Name 
1565*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1566*5113495bSYour Name 	if (!vdev_mlme)
1567*5113495bSYour Name 		return;
1568*5113495bSYour Name 
1569*5113495bSYour Name 	*srg_max_pd_offset = vdev_mlme->mgmt.generic.he_spr_srg_max_pd_offset;
1570*5113495bSYour Name 	*srg_min_pd_offset = vdev_mlme->mgmt.generic.he_spr_srg_min_pd_offset;
1571*5113495bSYour Name }
1572*5113495bSYour Name 
1573*5113495bSYour Name /**
1574*5113495bSYour Name  * wlan_vdev_mlme_set_srg_bss_color_bit_map() - set spatial reuse bss
1575*5113495bSYour Name  *					        color bitmap
1576*5113495bSYour Name  * @vdev: VDEV object
1577*5113495bSYour Name  * @srg_bss_color: SRG BSS color bitmap
1578*5113495bSYour Name  *
1579*5113495bSYour Name  * API to set the spatial reuse bss color bit map
1580*5113495bSYour Name  *
1581*5113495bSYour Name  * Return: void
1582*5113495bSYour Name  */
1583*5113495bSYour Name static inline
wlan_vdev_mlme_set_srg_bss_color_bit_map(struct wlan_objmgr_vdev * vdev,uint64_t srg_bss_color)1584*5113495bSYour Name void wlan_vdev_mlme_set_srg_bss_color_bit_map(struct wlan_objmgr_vdev *vdev,
1585*5113495bSYour Name 					      uint64_t srg_bss_color)
1586*5113495bSYour Name {
1587*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1588*5113495bSYour Name 
1589*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1590*5113495bSYour Name 	if (!vdev_mlme)
1591*5113495bSYour Name 		return;
1592*5113495bSYour Name 
1593*5113495bSYour Name 	vdev_mlme->mgmt.generic.srg_bss_color = srg_bss_color;
1594*5113495bSYour Name }
1595*5113495bSYour Name 
1596*5113495bSYour Name /**
1597*5113495bSYour Name  * wlan_vdev_mlme_set_srg_partial_bssid_bit_map() - set spatial reuse
1598*5113495bSYour Name  *						srg partial bitmap
1599*5113495bSYour Name  * @vdev: VDEV object
1600*5113495bSYour Name  * @srg_partial_bssid: SRG partial BSSID bitmap
1601*5113495bSYour Name  *
1602*5113495bSYour Name  * API to set the spatial reuse partial bssid bitmap
1603*5113495bSYour Name  *
1604*5113495bSYour Name  * Return: void
1605*5113495bSYour Name  */
1606*5113495bSYour Name static inline
wlan_vdev_mlme_set_srg_partial_bssid_bit_map(struct wlan_objmgr_vdev * vdev,uint64_t srg_partial_bssid)1607*5113495bSYour Name void wlan_vdev_mlme_set_srg_partial_bssid_bit_map(struct wlan_objmgr_vdev *vdev,
1608*5113495bSYour Name 						  uint64_t srg_partial_bssid)
1609*5113495bSYour Name {
1610*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1611*5113495bSYour Name 
1612*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1613*5113495bSYour Name 	if (!vdev_mlme)
1614*5113495bSYour Name 		return;
1615*5113495bSYour Name 
1616*5113495bSYour Name 	vdev_mlme->mgmt.generic.srg_partial_bssid = srg_partial_bssid;
1617*5113495bSYour Name }
1618*5113495bSYour Name 
1619*5113495bSYour Name /**
1620*5113495bSYour Name  * wlan_vdev_mlme_get_srg_bss_color_bit_map() - get spatial reuse bss
1621*5113495bSYour Name  *						colorbitmap
1622*5113495bSYour Name  * @vdev: VDEV object
1623*5113495bSYour Name  * @srg_bss_color: SRG BSS color bitmap
1624*5113495bSYour Name  *
1625*5113495bSYour Name  * API to get the spatial reuse bss color bit map
1626*5113495bSYour Name  *
1627*5113495bSYour Name  * Return: void
1628*5113495bSYour Name  */
1629*5113495bSYour Name static inline
wlan_vdev_mlme_get_srg_bss_color_bit_map(struct wlan_objmgr_vdev * vdev,uint64_t * srg_bss_color)1630*5113495bSYour Name void wlan_vdev_mlme_get_srg_bss_color_bit_map(struct wlan_objmgr_vdev *vdev,
1631*5113495bSYour Name 					      uint64_t *srg_bss_color)
1632*5113495bSYour Name {
1633*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1634*5113495bSYour Name 
1635*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1636*5113495bSYour Name 	if (!vdev_mlme)
1637*5113495bSYour Name 		return;
1638*5113495bSYour Name 
1639*5113495bSYour Name 	*srg_bss_color = vdev_mlme->mgmt.generic.srg_bss_color;
1640*5113495bSYour Name }
1641*5113495bSYour Name 
1642*5113495bSYour Name /**
1643*5113495bSYour Name  * wlan_vdev_mlme_get_srg_partial_bssid_bit_map() - get spatial reuse
1644*5113495bSYour Name  *						    srg partial bitmap
1645*5113495bSYour Name  * @vdev: VDEV object
1646*5113495bSYour Name  * @srg_partial_bssid: SRG partial BSSID bitmap
1647*5113495bSYour Name  *
1648*5113495bSYour Name  * API to get the spatial reuse partial bssid bitmap
1649*5113495bSYour Name  *
1650*5113495bSYour Name  * Return: void
1651*5113495bSYour Name  */
1652*5113495bSYour Name static inline void
wlan_vdev_mlme_get_srg_partial_bssid_bit_map(struct wlan_objmgr_vdev * vdev,uint64_t * srg_partial_bssid)1653*5113495bSYour Name wlan_vdev_mlme_get_srg_partial_bssid_bit_map(struct wlan_objmgr_vdev *vdev,
1654*5113495bSYour Name 					     uint64_t *srg_partial_bssid)
1655*5113495bSYour Name {
1656*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1657*5113495bSYour Name 
1658*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1659*5113495bSYour Name 	if (!vdev_mlme)
1660*5113495bSYour Name 		return;
1661*5113495bSYour Name 
1662*5113495bSYour Name 	*srg_partial_bssid = vdev_mlme->mgmt.generic.srg_partial_bssid;
1663*5113495bSYour Name }
1664*5113495bSYour Name 
1665*5113495bSYour Name /**
1666*5113495bSYour Name  * wlan_vdev_mlme_get_current_non_srg_pd_threshold() - get current non srg pd
1667*5113495bSYour Name  * threshold
1668*5113495bSYour Name  * @vdev: VDEV object
1669*5113495bSYour Name  * @non_srg_pd_threshold: NON-SRG pd threshold
1670*5113495bSYour Name  *
1671*5113495bSYour Name  * API to get non srg pd threshold
1672*5113495bSYour Name  *
1673*5113495bSYour Name  * Return: void
1674*5113495bSYour Name  */
1675*5113495bSYour Name static inline void
wlan_vdev_mlme_get_current_non_srg_pd_threshold(struct wlan_objmgr_vdev * vdev,int32_t * non_srg_pd_threshold)1676*5113495bSYour Name wlan_vdev_mlme_get_current_non_srg_pd_threshold(struct wlan_objmgr_vdev *vdev,
1677*5113495bSYour Name 						int32_t *non_srg_pd_threshold)
1678*5113495bSYour Name {
1679*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1680*5113495bSYour Name 
1681*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1682*5113495bSYour Name 	if (!vdev_mlme)
1683*5113495bSYour Name 		return;
1684*5113495bSYour Name 
1685*5113495bSYour Name 	*non_srg_pd_threshold =
1686*5113495bSYour Name 		vdev_mlme->mgmt.generic.he_curr_non_srg_pd_threshold;
1687*5113495bSYour Name }
1688*5113495bSYour Name 
1689*5113495bSYour Name /**
1690*5113495bSYour Name  * wlan_vdev_mlme_get_current_srg_pd_threshold() - get current srg pd threshold
1691*5113495bSYour Name  * @vdev: VDEV object
1692*5113495bSYour Name  * @srg_pd_threshold: SRG pd threshold
1693*5113495bSYour Name  *
1694*5113495bSYour Name  * API to get srg pd threshold
1695*5113495bSYour Name  *
1696*5113495bSYour Name  * Return: void
1697*5113495bSYour Name  */
1698*5113495bSYour Name static inline void
wlan_vdev_mlme_get_current_srg_pd_threshold(struct wlan_objmgr_vdev * vdev,int32_t * srg_pd_threshold)1699*5113495bSYour Name wlan_vdev_mlme_get_current_srg_pd_threshold(struct wlan_objmgr_vdev *vdev,
1700*5113495bSYour Name 					    int32_t *srg_pd_threshold)
1701*5113495bSYour Name {
1702*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1703*5113495bSYour Name 
1704*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1705*5113495bSYour Name 	if (!vdev_mlme)
1706*5113495bSYour Name 		return;
1707*5113495bSYour Name 
1708*5113495bSYour Name 	*srg_pd_threshold =
1709*5113495bSYour Name 		vdev_mlme->mgmt.generic.he_curr_srg_pd_threshold;
1710*5113495bSYour Name }
1711*5113495bSYour Name 
1712*5113495bSYour Name /**
1713*5113495bSYour Name  * wlan_vdev_mlme_set_current_non_srg_pd_threshold() - set current non srg pd
1714*5113495bSYour Name  * threshold
1715*5113495bSYour Name  * @vdev: VDEV object
1716*5113495bSYour Name  * @non_srg_pd_threshold: NON-SRG pd threshold
1717*5113495bSYour Name  *
1718*5113495bSYour Name  * API to set non srg pd threshold
1719*5113495bSYour Name  *
1720*5113495bSYour Name  * Return: void
1721*5113495bSYour Name  */
1722*5113495bSYour Name static inline void
wlan_vdev_mlme_set_current_non_srg_pd_threshold(struct wlan_objmgr_vdev * vdev,int32_t non_srg_pd_threshold)1723*5113495bSYour Name wlan_vdev_mlme_set_current_non_srg_pd_threshold(struct wlan_objmgr_vdev *vdev,
1724*5113495bSYour Name 						int32_t non_srg_pd_threshold)
1725*5113495bSYour Name {
1726*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1727*5113495bSYour Name 
1728*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1729*5113495bSYour Name 	if (!vdev_mlme)
1730*5113495bSYour Name 		return;
1731*5113495bSYour Name 
1732*5113495bSYour Name 	vdev_mlme->mgmt.generic.he_curr_non_srg_pd_threshold =
1733*5113495bSYour Name 						non_srg_pd_threshold;
1734*5113495bSYour Name }
1735*5113495bSYour Name 
1736*5113495bSYour Name /**
1737*5113495bSYour Name  * wlan_vdev_mlme_set_current_srg_pd_threshold() - set current srg pd threshold
1738*5113495bSYour Name  * @vdev: VDEV object
1739*5113495bSYour Name  * @srg_pd_threshold: SRG pd threshold
1740*5113495bSYour Name  *
1741*5113495bSYour Name  * API to set srg pd threshold
1742*5113495bSYour Name  *
1743*5113495bSYour Name  * Return: void
1744*5113495bSYour Name  */
1745*5113495bSYour Name static inline void
wlan_vdev_mlme_set_current_srg_pd_threshold(struct wlan_objmgr_vdev * vdev,int32_t srg_pd_threshold)1746*5113495bSYour Name wlan_vdev_mlme_set_current_srg_pd_threshold(struct wlan_objmgr_vdev *vdev,
1747*5113495bSYour Name 					    int32_t srg_pd_threshold)
1748*5113495bSYour Name {
1749*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1750*5113495bSYour Name 
1751*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1752*5113495bSYour Name 	if (!vdev_mlme)
1753*5113495bSYour Name 		return;
1754*5113495bSYour Name 	vdev_mlme->mgmt.generic.he_curr_srg_pd_threshold =
1755*5113495bSYour Name 						srg_pd_threshold;
1756*5113495bSYour Name }
1757*5113495bSYour Name 
1758*5113495bSYour Name /**
1759*5113495bSYour Name  * wlan_vdev_mlme_set_pd_threshold_present() - set is PD threshold
1760*5113495bSYour Name  * present or not.
1761*5113495bSYour Name  * @vdev: VDEV object
1762*5113495bSYour Name  * @is_pd_threshold_present: is PD threshold present
1763*5113495bSYour Name  *
1764*5113495bSYour Name  * API to set pd threshold present flag
1765*5113495bSYour Name  *
1766*5113495bSYour Name  * Return: void
1767*5113495bSYour Name  */
1768*5113495bSYour Name static inline void
wlan_vdev_mlme_set_pd_threshold_present(struct wlan_objmgr_vdev * vdev,bool is_pd_threshold_present)1769*5113495bSYour Name wlan_vdev_mlme_set_pd_threshold_present(struct wlan_objmgr_vdev *vdev,
1770*5113495bSYour Name 					bool is_pd_threshold_present)
1771*5113495bSYour Name {
1772*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1773*5113495bSYour Name 
1774*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1775*5113495bSYour Name 	if (!vdev_mlme)
1776*5113495bSYour Name 		return;
1777*5113495bSYour Name 	vdev_mlme->mgmt.generic.is_pd_threshold_present =
1778*5113495bSYour Name 						is_pd_threshold_present;
1779*5113495bSYour Name }
1780*5113495bSYour Name 
1781*5113495bSYour Name /**
1782*5113495bSYour Name  * wlan_vdev_mlme_get_pd_threshold_present() - get is PD threshold
1783*5113495bSYour Name  * present or not.
1784*5113495bSYour Name  * @vdev: VDEV object
1785*5113495bSYour Name  * @is_pd_threshold_present: is PD threshold present
1786*5113495bSYour Name  *
1787*5113495bSYour Name  * API to get pd threshold present flag
1788*5113495bSYour Name  *
1789*5113495bSYour Name  * Return: void
1790*5113495bSYour Name  */
1791*5113495bSYour Name static inline void
wlan_vdev_mlme_get_pd_threshold_present(struct wlan_objmgr_vdev * vdev,bool * is_pd_threshold_present)1792*5113495bSYour Name wlan_vdev_mlme_get_pd_threshold_present(struct wlan_objmgr_vdev *vdev,
1793*5113495bSYour Name 					bool *is_pd_threshold_present)
1794*5113495bSYour Name {
1795*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1796*5113495bSYour Name 
1797*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1798*5113495bSYour Name 	if (!vdev_mlme) {
1799*5113495bSYour Name 		*is_pd_threshold_present = false;
1800*5113495bSYour Name 		return;
1801*5113495bSYour Name 	}
1802*5113495bSYour Name 	*is_pd_threshold_present =
1803*5113495bSYour Name 			vdev_mlme->mgmt.generic.is_pd_threshold_present;
1804*5113495bSYour Name }
1805*5113495bSYour Name #else
wlan_vdev_mlme_get_sr_ctrl(struct wlan_objmgr_vdev * vdev)1806*5113495bSYour Name static inline uint8_t wlan_vdev_mlme_get_sr_ctrl(struct wlan_objmgr_vdev *vdev)
1807*5113495bSYour Name {
1808*5113495bSYour Name 	return 0;
1809*5113495bSYour Name }
1810*5113495bSYour Name 
wlan_vdev_mlme_get_non_srg_pd_offset(struct wlan_objmgr_vdev * vdev)1811*5113495bSYour Name static inline uint8_t wlan_vdev_mlme_get_non_srg_pd_offset(
1812*5113495bSYour Name 						struct wlan_objmgr_vdev *vdev)
1813*5113495bSYour Name {
1814*5113495bSYour Name 	return 0;
1815*5113495bSYour Name }
1816*5113495bSYour Name 
wlan_vdev_mlme_get_he_spr_enabled(struct wlan_objmgr_vdev * vdev)1817*5113495bSYour Name static inline bool wlan_vdev_mlme_get_he_spr_enabled(
1818*5113495bSYour Name 						struct wlan_objmgr_vdev *vdev)
1819*5113495bSYour Name {
1820*5113495bSYour Name 	return 0;
1821*5113495bSYour Name }
1822*5113495bSYour Name 
1823*5113495bSYour Name static inline
wlan_vdev_mlme_is_sr_disable_due_conc(struct wlan_objmgr_vdev * vdev)1824*5113495bSYour Name bool wlan_vdev_mlme_is_sr_disable_due_conc(struct wlan_objmgr_vdev *vdev)
1825*5113495bSYour Name {
1826*5113495bSYour Name 	return false;
1827*5113495bSYour Name }
1828*5113495bSYour Name 
1829*5113495bSYour Name static inline
wlan_vdev_mlme_is_sr_prohibit_en(struct wlan_objmgr_vdev * vdev)1830*5113495bSYour Name bool wlan_vdev_mlme_is_sr_prohibit_en(struct wlan_objmgr_vdev *vdev)
1831*5113495bSYour Name {
1832*5113495bSYour Name 	return false;
1833*5113495bSYour Name }
1834*5113495bSYour Name 
wlan_vdev_mlme_set_sr_ctrl(struct wlan_objmgr_vdev * vdev,uint8_t sr_ctrl)1835*5113495bSYour Name static inline void wlan_vdev_mlme_set_sr_ctrl(struct wlan_objmgr_vdev *vdev,
1836*5113495bSYour Name 					      uint8_t sr_ctrl)
1837*5113495bSYour Name {
1838*5113495bSYour Name }
1839*5113495bSYour Name 
1840*5113495bSYour Name static inline void
wlan_vdev_mlme_set_non_srg_pd_offset(struct wlan_objmgr_vdev * vdev,uint8_t non_srg_pd_max_offset)1841*5113495bSYour Name wlan_vdev_mlme_set_non_srg_pd_offset(struct wlan_objmgr_vdev *vdev,
1842*5113495bSYour Name 				     uint8_t non_srg_pd_max_offset)
1843*5113495bSYour Name {
1844*5113495bSYour Name }
1845*5113495bSYour Name 
wlan_vdev_mlme_set_he_spr_enabled(struct wlan_objmgr_vdev * vdev,bool enable_he_spr)1846*5113495bSYour Name static inline void wlan_vdev_mlme_set_he_spr_enabled(
1847*5113495bSYour Name 						struct wlan_objmgr_vdev *vdev,
1848*5113495bSYour Name 						bool enable_he_spr)
1849*5113495bSYour Name {
1850*5113495bSYour Name }
1851*5113495bSYour Name 
1852*5113495bSYour Name static inline
wlan_vdev_mlme_set_sr_disable_due_conc(struct wlan_objmgr_vdev * vdev,bool he_spr_disabled_due_conc)1853*5113495bSYour Name void wlan_vdev_mlme_set_sr_disable_due_conc(struct wlan_objmgr_vdev *vdev,
1854*5113495bSYour Name 					    bool he_spr_disabled_due_conc)
1855*5113495bSYour Name {
1856*5113495bSYour Name }
1857*5113495bSYour Name 
1858*5113495bSYour Name static inline
wlan_vdev_mlme_set_sr_prohibit_en(struct wlan_objmgr_vdev * vdev,bool sr_prohibit_enabled)1859*5113495bSYour Name void wlan_vdev_mlme_set_sr_prohibit_en(struct wlan_objmgr_vdev *vdev,
1860*5113495bSYour Name 				       bool sr_prohibit_enabled)
1861*5113495bSYour Name {
1862*5113495bSYour Name }
1863*5113495bSYour Name #endif
1864*5113495bSYour Name #else
wlan_vdev_mlme_set_he_mcs_12_13_map(struct wlan_objmgr_vdev * vdev,uint16_t he_mcs_12_13_map)1865*5113495bSYour Name static inline void wlan_vdev_mlme_set_he_mcs_12_13_map(
1866*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev,
1867*5113495bSYour Name 				uint16_t he_mcs_12_13_map)
1868*5113495bSYour Name {
1869*5113495bSYour Name }
1870*5113495bSYour Name 
wlan_vdev_mlme_get_he_mcs_12_13_map(struct wlan_objmgr_vdev * vdev)1871*5113495bSYour Name static inline uint16_t wlan_vdev_mlme_get_he_mcs_12_13_map(
1872*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev)
1873*5113495bSYour Name {
1874*5113495bSYour Name 	return 0;
1875*5113495bSYour Name }
1876*5113495bSYour Name 
1877*5113495bSYour Name #endif
1878*5113495bSYour Name 
1879*5113495bSYour Name /**
1880*5113495bSYour Name  * wlan_vdev_mlme_set_aid_mgr() - set aid mgr
1881*5113495bSYour Name  * @vdev: VDEV object
1882*5113495bSYour Name  * @aid_mgr: AID mgr
1883*5113495bSYour Name  *
1884*5113495bSYour Name  * API to set AID mgr in VDEV MLME cmpt object
1885*5113495bSYour Name  *
1886*5113495bSYour Name  * Return: void
1887*5113495bSYour Name  */
wlan_vdev_mlme_set_aid_mgr(struct wlan_objmgr_vdev * vdev,struct wlan_vdev_aid_mgr * aid_mgr)1888*5113495bSYour Name static inline void wlan_vdev_mlme_set_aid_mgr(
1889*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev,
1890*5113495bSYour Name 				struct wlan_vdev_aid_mgr *aid_mgr)
1891*5113495bSYour Name {
1892*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1893*5113495bSYour Name 
1894*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1895*5113495bSYour Name 	if (!vdev_mlme)
1896*5113495bSYour Name 		return;
1897*5113495bSYour Name 
1898*5113495bSYour Name 	vdev_mlme->mgmt.ap.aid_mgr = aid_mgr;
1899*5113495bSYour Name }
1900*5113495bSYour Name 
1901*5113495bSYour Name /**
1902*5113495bSYour Name  * wlan_vdev_mlme_get_aid_mgr() - get aid mgr
1903*5113495bSYour Name  * @vdev: VDEV object
1904*5113495bSYour Name  *
1905*5113495bSYour Name  * API to get AID mgr in VDEV MLME cmpt object
1906*5113495bSYour Name  *
1907*5113495bSYour Name  * Return: aid_mgr
1908*5113495bSYour Name  */
wlan_vdev_mlme_get_aid_mgr(struct wlan_objmgr_vdev * vdev)1909*5113495bSYour Name static inline struct wlan_vdev_aid_mgr *wlan_vdev_mlme_get_aid_mgr(
1910*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev)
1911*5113495bSYour Name {
1912*5113495bSYour Name 	struct vdev_mlme_obj *vdev_mlme;
1913*5113495bSYour Name 
1914*5113495bSYour Name 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1915*5113495bSYour Name 	if (!vdev_mlme)
1916*5113495bSYour Name 		return NULL;
1917*5113495bSYour Name 
1918*5113495bSYour Name 	return vdev_mlme->mgmt.ap.aid_mgr;
1919*5113495bSYour Name }
1920*5113495bSYour Name 
1921*5113495bSYour Name #ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
1922*5113495bSYour Name /**
1923*5113495bSYour Name  * vdev_mgr_cdp_vdev_attach() - MLME API to attach CDP vdev
1924*5113495bSYour Name  * @mlme_obj: pointer to vdev_mlme_obj
1925*5113495bSYour Name  *
1926*5113495bSYour Name  * Return: QDF_STATUS - Success or Failure
1927*5113495bSYour Name  */
1928*5113495bSYour Name QDF_STATUS vdev_mgr_cdp_vdev_attach(struct vdev_mlme_obj *mlme_obj);
1929*5113495bSYour Name 
1930*5113495bSYour Name /**
1931*5113495bSYour Name  * vdev_mgr_cdp_vdev_detach() - MLME API to detach CDP vdev
1932*5113495bSYour Name  * @mlme_obj: pointer to vdev_mlme_obj
1933*5113495bSYour Name  *
1934*5113495bSYour Name  * Return: QDF_STATUS - Success or Failure
1935*5113495bSYour Name  */
1936*5113495bSYour Name QDF_STATUS vdev_mgr_cdp_vdev_detach(struct vdev_mlme_obj *mlme_obj);
1937*5113495bSYour Name #endif
1938*5113495bSYour Name #endif
1939