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