xref: /wlan-driver/qcacld-3.0/components/son/dispatcher/inc/son_ucfg_api.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2023 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: contains interface prototypes for OS_IF layer
20*5113495bSYour Name  */
21*5113495bSYour Name #ifndef _SON_UCFG_API_H_
22*5113495bSYour Name #define _SON_UCFG_API_H_
23*5113495bSYour Name 
24*5113495bSYour Name #include <qdf_trace.h>
25*5113495bSYour Name #include <wlan_objmgr_pdev_obj.h>
26*5113495bSYour Name #include <wlan_mlme_ucfg_api.h>
27*5113495bSYour Name #include <son_api.h>
28*5113495bSYour Name 
29*5113495bSYour Name /**
30*5113495bSYour Name  * ucfg_son_get_operation_chan_freq_vdev_id() - get operating chan freq of
31*5113495bSYour Name  *                                              given vdev id
32*5113495bSYour Name  * @pdev: Pointer to pdev
33*5113495bSYour Name  * @vdev_id: vdev id
34*5113495bSYour Name  *
35*5113495bSYour Name  * Return: chan freq of given vdev id
36*5113495bSYour Name  */
37*5113495bSYour Name qdf_freq_t
38*5113495bSYour Name ucfg_son_get_operation_chan_freq_vdev_id(struct wlan_objmgr_pdev *pdev,
39*5113495bSYour Name 					 uint8_t vdev_id);
40*5113495bSYour Name 
41*5113495bSYour Name /**
42*5113495bSYour Name  * ucfg_son_get_min_and_max_power() - get min and max power
43*5113495bSYour Name  * @psoc: pointer to psoc
44*5113495bSYour Name  * @max_tx_power: max tx power(dBm units) to get.
45*5113495bSYour Name  * @min_tx_power: min tx power(dBm units) to get.
46*5113495bSYour Name  *
47*5113495bSYour Name  * Return: Void
48*5113495bSYour Name  */
49*5113495bSYour Name void ucfg_son_get_min_and_max_power(struct wlan_objmgr_psoc *psoc,
50*5113495bSYour Name 				    int8_t *max_tx_power,
51*5113495bSYour Name 				    int8_t *min_tx_power);
52*5113495bSYour Name 
53*5113495bSYour Name /**
54*5113495bSYour Name  * ucfg_son_is_cac_in_progress() - whether cac in progress or not
55*5113495bSYour Name  * @vdev: Pointer to vdev
56*5113495bSYour Name  *
57*5113495bSYour Name  * Return: whether vdev in cac or not
58*5113495bSYour Name  */
59*5113495bSYour Name bool ucfg_son_is_cac_in_progress(struct wlan_objmgr_vdev *vdev);
60*5113495bSYour Name 
61*5113495bSYour Name /**
62*5113495bSYour Name  * ucfg_son_get_sta_count() - get sta count
63*5113495bSYour Name  * @vdev: Pointer to vdev
64*5113495bSYour Name  *
65*5113495bSYour Name  * Return: sta count
66*5113495bSYour Name  */
67*5113495bSYour Name uint32_t ucfg_son_get_sta_count(struct wlan_objmgr_vdev *vdev);
68*5113495bSYour Name 
69*5113495bSYour Name /**
70*5113495bSYour Name  * ucfg_son_get_chan_flag() - get chan flag
71*5113495bSYour Name  * @pdev: pointer to pdev
72*5113495bSYour Name  * @freq: qdf_freq_t
73*5113495bSYour Name  * @flag_160: whether 160 band width is enabled or not
74*5113495bSYour Name  * @chan_params: chan parameters
75*5113495bSYour Name  *
76*5113495bSYour Name  * Return: chan flag
77*5113495bSYour Name  */
78*5113495bSYour Name uint32_t ucfg_son_get_chan_flag(struct wlan_objmgr_pdev *pdev,
79*5113495bSYour Name 				qdf_freq_t freq, bool flag_160,
80*5113495bSYour Name 				struct ch_params *chan_params);
81*5113495bSYour Name 
82*5113495bSYour Name /**
83*5113495bSYour Name  * ucfg_son_get_he_supported() - get he supported
84*5113495bSYour Name  * @psoc: pointer to psoc
85*5113495bSYour Name  * @he_supported: he supported or not
86*5113495bSYour Name  *
87*5113495bSYour Name  * Return: void
88*5113495bSYour Name  */
89*5113495bSYour Name #ifdef WLAN_FEATURE_11AX
90*5113495bSYour Name void ucfg_son_get_he_supported(struct wlan_objmgr_psoc *psoc,
91*5113495bSYour Name 			       bool *he_supported);
92*5113495bSYour Name #else
ucfg_son_get_he_supported(struct wlan_objmgr_psoc * psoc,bool * he_supported)93*5113495bSYour Name static inline void ucfg_son_get_he_supported(struct wlan_objmgr_psoc *psoc,
94*5113495bSYour Name 					     bool *he_supported)
95*5113495bSYour Name {
96*5113495bSYour Name 	*he_supported = false;
97*5113495bSYour Name }
98*5113495bSYour Name #endif /*WLAN_FEATURE_11AX*/
99*5113495bSYour Name 
100*5113495bSYour Name /**
101*5113495bSYour Name  * ucfg_son_set_peer_kickout_allow() - set the peer is allowed to kickout
102*5113495bSYour Name  * @vdev: pointer to vdev
103*5113495bSYour Name  * @peer: pointer to peer
104*5113495bSYour Name  * @kickout_allow: kickout_allow to set
105*5113495bSYour Name  *
106*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on Success else failure.
107*5113495bSYour Name  */
108*5113495bSYour Name QDF_STATUS ucfg_son_set_peer_kickout_allow(struct wlan_objmgr_vdev *vdev,
109*5113495bSYour Name 					   struct wlan_objmgr_peer *peer,
110*5113495bSYour Name 					   bool kickout_allow);
111*5113495bSYour Name 
112*5113495bSYour Name /**
113*5113495bSYour Name  * ucfg_son_register_deliver_opmode_cb() - register deliver opmode cb
114*5113495bSYour Name  * @psoc: pointer to psoc
115*5113495bSYour Name  * @cb: deliver opmode callback
116*5113495bSYour Name  *
117*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on Success else failure.
118*5113495bSYour Name  */
119*5113495bSYour Name QDF_STATUS ucfg_son_register_deliver_opmode_cb(struct wlan_objmgr_psoc *psoc,
120*5113495bSYour Name 					       mlme_deliver_cb cb);
121*5113495bSYour Name 
122*5113495bSYour Name /**
123*5113495bSYour Name  * ucfg_son_register_deliver_smps_cb() - register deliver smps cb
124*5113495bSYour Name  * @psoc: pointer to psoc
125*5113495bSYour Name  * @cb: deliver smps callback
126*5113495bSYour Name  *
127*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on Success else failure.
128*5113495bSYour Name  */
129*5113495bSYour Name 
130*5113495bSYour Name QDF_STATUS ucfg_son_register_deliver_smps_cb(struct wlan_objmgr_psoc *psoc,
131*5113495bSYour Name 					     mlme_deliver_cb cb);
132*5113495bSYour Name 
133*5113495bSYour Name /**
134*5113495bSYour Name  * ucfg_son_cbs_init() - son cbs init
135*5113495bSYour Name  *
136*5113495bSYour Name  * Return: 0 if succeed
137*5113495bSYour Name  */
138*5113495bSYour Name int ucfg_son_cbs_init(void);
139*5113495bSYour Name 
140*5113495bSYour Name /**
141*5113495bSYour Name  * ucfg_son_cbs_deinit() - son cbs deinit
142*5113495bSYour Name  *
143*5113495bSYour Name  * Return: 0 if succeed
144*5113495bSYour Name  */
145*5113495bSYour Name int ucfg_son_cbs_deinit(void);
146*5113495bSYour Name 
147*5113495bSYour Name /**
148*5113495bSYour Name  * ucfg_son_set_cbs() - son cbs set
149*5113495bSYour Name  * @vdev: pointer to vdev
150*5113495bSYour Name  * @enable: enable or disable son cbs
151*5113495bSYour Name  *
152*5113495bSYour Name  * Return: 0 if succeed
153*5113495bSYour Name  */
154*5113495bSYour Name int ucfg_son_set_cbs(struct wlan_objmgr_vdev *vdev,
155*5113495bSYour Name 		     bool enable);
156*5113495bSYour Name 
157*5113495bSYour Name /**
158*5113495bSYour Name  * ucfg_son_set_cbs_wait_time() - cbs wait time configure
159*5113495bSYour Name  * @vdev: pointer to vdev
160*5113495bSYour Name  * @val: wait time value
161*5113495bSYour Name  *
162*5113495bSYour Name  * Return: 0 if succeed
163*5113495bSYour Name  */
164*5113495bSYour Name int ucfg_son_set_cbs_wait_time(struct wlan_objmgr_vdev *vdev,
165*5113495bSYour Name 			       uint32_t val);
166*5113495bSYour Name 
167*5113495bSYour Name /**
168*5113495bSYour Name  * ucfg_son_set_cbs_dwell_split_time() - cbs dwell spilt time configure
169*5113495bSYour Name  * @vdev: pointer to vdev
170*5113495bSYour Name  * @val: dwell spilt time value
171*5113495bSYour Name  *
172*5113495bSYour Name  * Return: 0 if succeed
173*5113495bSYour Name  */
174*5113495bSYour Name int ucfg_son_set_cbs_dwell_split_time(struct wlan_objmgr_vdev *vdev,
175*5113495bSYour Name 				      uint32_t val);
176*5113495bSYour Name 
177*5113495bSYour Name /**
178*5113495bSYour Name  * ucfg_son_get_tx_power() - Gets the max transmit power for peer
179*5113495bSYour Name  * @assoc_req_ies: assoc req ies
180*5113495bSYour Name  *
181*5113495bSYour Name  * Return: Returns the max tx power
182*5113495bSYour Name  */
183*5113495bSYour Name uint8_t ucfg_son_get_tx_power(struct element_info assoc_req_ies);
184*5113495bSYour Name 
185*5113495bSYour Name /**
186*5113495bSYour Name  * ucfg_son_get_peer_rrm_info() - Get RRM info for peer
187*5113495bSYour Name  * @assoc_req_ies: assoc req ies
188*5113495bSYour Name  * @rrmcaps: rrm capabilities
189*5113495bSYour Name  * @is_beacon_meas_supported: if beacon meas is supported
190*5113495bSYour Name  *
191*5113495bSYour Name  * Return: Returns QDF_STATUS_SUCCESS if succeed
192*5113495bSYour Name  */
193*5113495bSYour Name QDF_STATUS ucfg_son_get_peer_rrm_info(struct element_info assoc_req_ies,
194*5113495bSYour Name 				      uint8_t *rrmcaps,
195*5113495bSYour Name 				      bool *is_beacon_meas_supported);
196*5113495bSYour Name 
197*5113495bSYour Name /**
198*5113495bSYour Name  * ucfg_son_vdev_get_supported_txrx_streams() - get supported spatial streams
199*5113495bSYour Name  * @vdev: pointer to vdev
200*5113495bSYour Name  * @num_tx_streams: pointer to number of tx streams
201*5113495bSYour Name  * @num_rx_streams: pointer to number of rx streams
202*5113495bSYour Name  *
203*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on Success else failure.
204*5113495bSYour Name  */
205*5113495bSYour Name QDF_STATUS
206*5113495bSYour Name ucfg_son_vdev_get_supported_txrx_streams(struct wlan_objmgr_vdev *vdev,
207*5113495bSYour Name 					 uint32_t *num_tx_streams,
208*5113495bSYour Name 					 uint32_t *num_rx_streams);
209*5113495bSYour Name /**
210*5113495bSYour Name  * ucfg_son_get_vht_cap() - get the vht capability ie
211*5113495bSYour Name  * @psoc: psoc object
212*5113495bSYour Name  * @vht_caps: VHT caps bit fields
213*5113495bSYour Name  *
214*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on Success else failure.
215*5113495bSYour Name  */
216*5113495bSYour Name QDF_STATUS ucfg_son_get_vht_cap(struct wlan_objmgr_psoc *psoc,
217*5113495bSYour Name 				int32_t *vht_caps);
218*5113495bSYour Name 
219*5113495bSYour Name #ifdef WLAN_FEATURE_SON
220*5113495bSYour Name /* ucfg_son_disable_cbs() - son cbs disable
221*5113495bSYour Name  * @vdev: vdev pointer
222*5113495bSYour Name  *
223*5113495bSYour Name  * Return: 0 if succeed
224*5113495bSYour Name  */
225*5113495bSYour Name int ucfg_son_disable_cbs(struct wlan_objmgr_vdev *vdev);
226*5113495bSYour Name #else
ucfg_son_disable_cbs(struct wlan_objmgr_vdev * vdev)227*5113495bSYour Name static inline int ucfg_son_disable_cbs(struct wlan_objmgr_vdev *vdev)
228*5113495bSYour Name {
229*5113495bSYour Name 	return -EINVAL;
230*5113495bSYour Name }
231*5113495bSYour Name #endif
232*5113495bSYour Name #endif
233