xref: /wlan-driver/qcacld-3.0/os_if/son/inc/os_if_son.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2022 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: os_if_son.h
20*5113495bSYour Name  *
21*5113495bSYour Name  * WLAN Host Device Driver file for son (Self Organizing Network)
22*5113495bSYour Name  * support.
23*5113495bSYour Name  *
24*5113495bSYour Name  */
25*5113495bSYour Name #ifndef _OS_IF_SON_H_
26*5113495bSYour Name #define _OS_IF_SON_H_
27*5113495bSYour Name 
28*5113495bSYour Name #include <qdf_types.h>
29*5113495bSYour Name #include <wlan_objmgr_vdev_obj.h>
30*5113495bSYour Name #include <wlan_objmgr_psoc_obj.h>
31*5113495bSYour Name #include <wlan_objmgr_pdev_obj.h>
32*5113495bSYour Name #include <wlan_reg_ucfg_api.h>
33*5113495bSYour Name #include <ieee80211_external.h>
34*5113495bSYour Name 
35*5113495bSYour Name #define INVALID_WIDTH 0xFF
36*5113495bSYour Name 
37*5113495bSYour Name /**
38*5113495bSYour Name  * struct son_callbacks - struct containing callback to non-converged driver
39*5113495bSYour Name  * @os_if_is_acs_in_progress: whether acs is in progress or not
40*5113495bSYour Name  * @os_if_set_chan_ext_offset: set chan extend offset
41*5113495bSYour Name  * @os_if_get_chan_ext_offset: get chan extend offset
42*5113495bSYour Name  * @os_if_set_bandwidth: set band width
43*5113495bSYour Name  * @os_if_get_bandwidth: get band width
44*5113495bSYour Name  * @os_if_set_chan: set chan
45*5113495bSYour Name  * @os_if_get_sta_count: get station count
46*5113495bSYour Name  * @os_if_set_country_code: set country code
47*5113495bSYour Name  * @os_if_set_candidate_freq: set freq to switch after radar detection
48*5113495bSYour Name  * @os_if_get_candidate_freq: get freq to switch after radar detection
49*5113495bSYour Name  * @os_if_set_phymode: set phy mode
50*5113495bSYour Name  * @os_if_get_phymode: get phy mode
51*5113495bSYour Name  * @os_if_get_rx_nss: Gets number of RX spatial streams
52*5113495bSYour Name  * @os_if_set_acl_policy: set acl policy
53*5113495bSYour Name  * @os_if_get_acl_policy: get acl policy
54*5113495bSYour Name  * @os_if_add_acl_mac: add mac to acl
55*5113495bSYour Name  * @os_if_del_acl_mac: del mac from acl
56*5113495bSYour Name  * @os_if_kickout_mac: kickout sta with given mac
57*5113495bSYour Name  * @os_if_set_chwidth: set chan width
58*5113495bSYour Name  * @os_if_get_chwidth: get chan width
59*5113495bSYour Name  * @os_if_get_sta_list: get sta list
60*5113495bSYour Name  * @os_if_get_sta_space: get sta space
61*5113495bSYour Name  * @os_if_deauth_sta: Deauths the target peer
62*5113495bSYour Name  * @os_if_modify_acl: Add/Del target peer in ACL
63*5113495bSYour Name  * @os_if_get_vdev_by_netdev: Get vdev from net device
64*5113495bSYour Name  * @os_if_trigger_objmgr_object_creation: Trigger objmgr object creation
65*5113495bSYour Name  * @os_if_trigger_objmgr_object_deletion: Trigger objmgr object deletion
66*5113495bSYour Name  * @os_if_start_acs: Trigger ACS
67*5113495bSYour Name  * @os_if_set_acs_channels: Set channel list for ACS
68*5113495bSYour Name  * @os_if_get_acs_report: Gets the ACS report
69*5113495bSYour Name  * @os_if_get_node_info: Gets the datarate info for node
70*5113495bSYour Name  * @os_if_get_peer_capability: Gets peer capability
71*5113495bSYour Name  * @os_if_get_peer_max_mcs_idx: Gets peer max MCS index
72*5113495bSYour Name  * @os_if_get_sta_stats: Get sta stats
73*5113495bSYour Name  */
74*5113495bSYour Name struct son_callbacks {
75*5113495bSYour Name 	uint32_t (*os_if_is_acs_in_progress)(struct wlan_objmgr_vdev *vdev);
76*5113495bSYour Name 	int (*os_if_set_chan_ext_offset)(
77*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev,
78*5113495bSYour Name 				enum sec20_chan_offset son_chan_ext_offset);
79*5113495bSYour Name 	enum sec20_chan_offset (*os_if_get_chan_ext_offset)(
80*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev);
81*5113495bSYour Name 	int (*os_if_set_bandwidth)(struct wlan_objmgr_vdev *vdev,
82*5113495bSYour Name 				   uint32_t son_bandwidth);
83*5113495bSYour Name 	uint32_t (*os_if_get_bandwidth)(struct wlan_objmgr_vdev *vdev);
84*5113495bSYour Name 	int (*os_if_set_chan)(struct wlan_objmgr_vdev *vdev, int chan,
85*5113495bSYour Name 			      enum wlan_band_id son_band);
86*5113495bSYour Name 	uint32_t (*os_if_get_sta_count)(struct wlan_objmgr_vdev *vdev);
87*5113495bSYour Name 	int (*os_if_set_country_code)(struct wlan_objmgr_vdev *vdev,
88*5113495bSYour Name 				      char *country_code);
89*5113495bSYour Name 	int (*os_if_set_candidate_freq)(struct wlan_objmgr_vdev *vdev,
90*5113495bSYour Name 					qdf_freq_t freq);
91*5113495bSYour Name 	qdf_freq_t (*os_if_get_candidate_freq)(struct wlan_objmgr_vdev *vdev);
92*5113495bSYour Name 	int (*os_if_set_phymode)(struct wlan_objmgr_vdev *vdev,
93*5113495bSYour Name 				 enum ieee80211_phymode mode);
94*5113495bSYour Name 	enum ieee80211_phymode (*os_if_get_phymode)(
95*5113495bSYour Name 					struct wlan_objmgr_vdev *vdev);
96*5113495bSYour Name 	uint8_t (*os_if_get_rx_nss)(struct wlan_objmgr_vdev *vdev);
97*5113495bSYour Name 	QDF_STATUS (*os_if_set_acl_policy)(struct wlan_objmgr_vdev *vdev,
98*5113495bSYour Name 					   ieee80211_acl_cmd son_acl_policy);
99*5113495bSYour Name 	ieee80211_acl_cmd (*os_if_get_acl_policy)(
100*5113495bSYour Name 						struct wlan_objmgr_vdev *vdev);
101*5113495bSYour Name 	int (*os_if_add_acl_mac)(struct wlan_objmgr_vdev *vdev,
102*5113495bSYour Name 				 struct qdf_mac_addr *acl_mac);
103*5113495bSYour Name 	int (*os_if_del_acl_mac)(struct wlan_objmgr_vdev *vdev,
104*5113495bSYour Name 				 struct qdf_mac_addr *acl_mac);
105*5113495bSYour Name 	int (*os_if_kickout_mac)(struct wlan_objmgr_vdev *vdev,
106*5113495bSYour Name 				 struct qdf_mac_addr *acl_mac);
107*5113495bSYour Name 	int (*os_if_set_chwidth)(struct wlan_objmgr_vdev *vdev,
108*5113495bSYour Name 				 enum ieee80211_cwm_width son_chwidth);
109*5113495bSYour Name 	enum ieee80211_cwm_width (*os_if_get_chwidth)(
110*5113495bSYour Name 				struct wlan_objmgr_vdev *vdev);
111*5113495bSYour Name 	void (*os_if_get_sta_list)(struct wlan_objmgr_vdev *vdev,
112*5113495bSYour Name 				   struct ieee80211req_sta_info *req,
113*5113495bSYour Name 				   uint32_t *space);
114*5113495bSYour Name 	uint32_t (*os_if_get_sta_space)(struct wlan_objmgr_vdev *vdev);
115*5113495bSYour Name 	void (*os_if_deauth_sta)(struct wlan_objmgr_vdev *vdev,
116*5113495bSYour Name 				 uint8_t *peer_mac,
117*5113495bSYour Name 				 bool ignore_frame);
118*5113495bSYour Name 	void (*os_if_modify_acl)(struct wlan_objmgr_vdev *vdev,
119*5113495bSYour Name 				 uint8_t *peer_mac,
120*5113495bSYour Name 				 bool allow_auth);
121*5113495bSYour Name 	struct wlan_objmgr_vdev *(*os_if_get_vdev_by_netdev)
122*5113495bSYour Name 				(struct net_device *dev);
123*5113495bSYour Name 	QDF_STATUS (*os_if_trigger_objmgr_object_creation)
124*5113495bSYour Name 				(enum wlan_umac_comp_id id);
125*5113495bSYour Name 	QDF_STATUS (*os_if_trigger_objmgr_object_deletion)
126*5113495bSYour Name 				(enum wlan_umac_comp_id id);
127*5113495bSYour Name 	int (*os_if_start_acs)(struct wlan_objmgr_vdev *vdev, uint8_t enable);
128*5113495bSYour Name 	int (*os_if_set_acs_channels)(struct wlan_objmgr_vdev *vdev,
129*5113495bSYour Name 				      struct ieee80211req_athdbg *req);
130*5113495bSYour Name 	int (*os_if_get_acs_report)(struct wlan_objmgr_vdev *vdev,
131*5113495bSYour Name 				    struct ieee80211_acs_dbg *acs_r);
132*5113495bSYour Name 	QDF_STATUS (*os_if_get_node_info)(struct wlan_objmgr_vdev *vdev,
133*5113495bSYour Name 					  uint8_t *mac_addr,
134*5113495bSYour Name 					  wlan_node_info *nodeinfo);
135*5113495bSYour Name 	QDF_STATUS (*os_if_get_peer_capability)(struct wlan_objmgr_vdev *vdev,
136*5113495bSYour Name 						struct wlan_objmgr_peer *peer,
137*5113495bSYour Name 						wlan_peer_cap *cap);
138*5113495bSYour Name 	uint32_t (*os_if_get_peer_max_mcs_idx)(struct wlan_objmgr_vdev *vdev,
139*5113495bSYour Name 					       struct wlan_objmgr_peer *peer);
140*5113495bSYour Name 	int (*os_if_get_sta_stats)(struct wlan_objmgr_vdev *vdev,
141*5113495bSYour Name 				   uint8_t *mac_addr,
142*5113495bSYour Name 				   struct ieee80211_nodestats *stats);
143*5113495bSYour Name };
144*5113495bSYour Name 
145*5113495bSYour Name /**
146*5113495bSYour Name  * enum os_if_son_vendor_cmd_type - Enum to specify get/set command
147*5113495bSYour Name  * @OS_IF_SON_VENDOR_GET_CMD: Get type command called from wificonfiguration
148*5113495bSYour Name  *                            vendor command handler
149*5113495bSYour Name  * @OS_IF_SON_VENDOR_SET_CMD: Set type command called from wificonfiguration
150*5113495bSYour Name  *                            vendor command handler
151*5113495bSYour Name  * @OS_IF_SON_VENDOR_MAX_CMD: Max cmd type
152*5113495bSYour Name  */
153*5113495bSYour Name enum os_if_son_vendor_cmd_type {
154*5113495bSYour Name 	OS_IF_SON_VENDOR_GET_CMD,
155*5113495bSYour Name 	OS_IF_SON_VENDOR_SET_CMD,
156*5113495bSYour Name 	OS_IF_SON_VENDOR_MAX_CMD,
157*5113495bSYour Name };
158*5113495bSYour Name 
159*5113495bSYour Name /**
160*5113495bSYour Name  * struct os_if_son_rx_ops - Contains cb for os_if rx ops used by SON
161*5113495bSYour Name  * @parse_generic_nl_cmd: Callback for parsing generic nl vendor commands
162*5113495bSYour Name  */
163*5113495bSYour Name struct os_if_son_rx_ops {
164*5113495bSYour Name 	int (*parse_generic_nl_cmd)(struct wiphy *wiphy,
165*5113495bSYour Name 				    struct wireless_dev *wdev, void *params,
166*5113495bSYour Name 				    enum os_if_son_vendor_cmd_type type);
167*5113495bSYour Name };
168*5113495bSYour Name 
169*5113495bSYour Name /**
170*5113495bSYour Name  * struct wlan_os_if_son_ops - Contains cb for os_if txrx ops used by SON
171*5113495bSYour Name  * @son_osif_rx_ops: structure to contain rx ops
172*5113495bSYour Name  */
173*5113495bSYour Name struct wlan_os_if_son_ops {
174*5113495bSYour Name 	struct os_if_son_rx_ops son_osif_rx_ops;
175*5113495bSYour Name };
176*5113495bSYour Name 
177*5113495bSYour Name /**
178*5113495bSYour Name  * wlan_os_if_son_ops_register_cb() - Set son os_if ops cb
179*5113495bSYour Name  * @handler: son os_if ops cb table
180*5113495bSYour Name  *
181*5113495bSYour Name  * Return: void
182*5113495bSYour Name  */
183*5113495bSYour Name void
184*5113495bSYour Name wlan_os_if_son_ops_register_cb(void (*handler)(struct wlan_os_if_son_ops *));
185*5113495bSYour Name 
186*5113495bSYour Name /**
187*5113495bSYour Name  * os_if_son_register_osif_ops() - Register son os_if ops with os_if
188*5113495bSYour Name  *
189*5113495bSYour Name  * Return: void
190*5113495bSYour Name  */
191*5113495bSYour Name void os_if_son_register_osif_ops(void);
192*5113495bSYour Name 
193*5113495bSYour Name /**
194*5113495bSYour Name  * os_if_son_register_lmac_if_ops() - Register son lmac_if rx_ops with lmac
195*5113495bSYour Name  * @psoc: objmrg psoc handle
196*5113495bSYour Name  *
197*5113495bSYour Name  * Register son lmac_if rx_ops with lmac to be called by SON DLKM
198*5113495bSYour Name  *
199*5113495bSYour Name  * Return: void
200*5113495bSYour Name  */
201*5113495bSYour Name void os_if_son_register_lmac_if_ops(struct wlan_objmgr_psoc *psoc);
202*5113495bSYour Name 
203*5113495bSYour Name /**
204*5113495bSYour Name  * os_if_son_register_hdd_callbacks() - register son hdd callback
205*5113495bSYour Name  * @psoc: psoc
206*5113495bSYour Name  * @cb_obj: pointer to callback
207*5113495bSYour Name  *
208*5113495bSYour Name  * Return: void
209*5113495bSYour Name  */
210*5113495bSYour Name void os_if_son_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc,
211*5113495bSYour Name 				      struct son_callbacks *cb_obj);
212*5113495bSYour Name 
213*5113495bSYour Name /**
214*5113495bSYour Name  * os_if_son_get_freq() - get freq
215*5113495bSYour Name  * @vdev: vdev
216*5113495bSYour Name  *
217*5113495bSYour Name  * Return: freq of given vdev
218*5113495bSYour Name  */
219*5113495bSYour Name qdf_freq_t os_if_son_get_freq(struct wlan_objmgr_vdev *vdev);
220*5113495bSYour Name 
221*5113495bSYour Name /**
222*5113495bSYour Name  * os_if_son_is_acs_in_progress() - whether ACS in progress or not
223*5113495bSYour Name  * @vdev: vdev
224*5113495bSYour Name  *
225*5113495bSYour Name  * Return: true if ACS is in progress
226*5113495bSYour Name  */
227*5113495bSYour Name uint32_t os_if_son_is_acs_in_progress(struct wlan_objmgr_vdev *vdev);
228*5113495bSYour Name 
229*5113495bSYour Name /**
230*5113495bSYour Name  * os_if_son_is_cac_in_progress() - whether CAC is in progress or not
231*5113495bSYour Name  * @vdev: vdev
232*5113495bSYour Name  *
233*5113495bSYour Name  * Return: true if CAC is in progress
234*5113495bSYour Name  */
235*5113495bSYour Name uint32_t os_if_son_is_cac_in_progress(struct wlan_objmgr_vdev *vdev);
236*5113495bSYour Name 
237*5113495bSYour Name /**
238*5113495bSYour Name  * os_if_son_set_chan_ext_offset() - set chan extend offset
239*5113495bSYour Name  * @vdev: vdev
240*5113495bSYour Name  * @son_chan_ext_offset: son chan extend offset
241*5113495bSYour Name  *
242*5113495bSYour Name  * Return: 0 on success, negative errno on failure
243*5113495bSYour Name  */
244*5113495bSYour Name int os_if_son_set_chan_ext_offset(struct wlan_objmgr_vdev *vdev,
245*5113495bSYour Name 				  enum sec20_chan_offset son_chan_ext_offset);
246*5113495bSYour Name 
247*5113495bSYour Name /**
248*5113495bSYour Name  * os_if_son_get_chan_ext_offset() - get chan extend offset
249*5113495bSYour Name  * @vdev: vdev
250*5113495bSYour Name  *
251*5113495bSYour Name  * Return: enum sec20_chan_offset
252*5113495bSYour Name  */
253*5113495bSYour Name enum sec20_chan_offset os_if_son_get_chan_ext_offset(
254*5113495bSYour Name 					struct wlan_objmgr_vdev *vdev);
255*5113495bSYour Name 
256*5113495bSYour Name /**
257*5113495bSYour Name  * os_if_son_set_bandwidth() - set band width
258*5113495bSYour Name  * @vdev: vdev
259*5113495bSYour Name  * @son_bandwidth: band width
260*5113495bSYour Name  *
261*5113495bSYour Name  * Return: 0 on success, negative errno on failure
262*5113495bSYour Name  */
263*5113495bSYour Name int os_if_son_set_bandwidth(struct wlan_objmgr_vdev *vdev,
264*5113495bSYour Name 			    uint32_t son_bandwidth);
265*5113495bSYour Name 
266*5113495bSYour Name /**
267*5113495bSYour Name  * os_if_son_get_bandwidth() - get band width
268*5113495bSYour Name  * @vdev: vdev
269*5113495bSYour Name  *
270*5113495bSYour Name  * Return: band width
271*5113495bSYour Name  */
272*5113495bSYour Name uint32_t os_if_son_get_bandwidth(struct wlan_objmgr_vdev *vdev);
273*5113495bSYour Name 
274*5113495bSYour Name /**
275*5113495bSYour Name  * os_if_son_get_band_info() - get band info
276*5113495bSYour Name  * @vdev: vdev
277*5113495bSYour Name  *
278*5113495bSYour Name  * Return: band info
279*5113495bSYour Name  */
280*5113495bSYour Name uint32_t os_if_son_get_band_info(struct wlan_objmgr_vdev *vdev);
281*5113495bSYour Name 
282*5113495bSYour Name /**
283*5113495bSYour Name  * os_if_son_get_chan_list() - get a list of chan information
284*5113495bSYour Name  * @vdev: vdev
285*5113495bSYour Name  * @ic_chans: chan information array to get
286*5113495bSYour Name  * @chan_info: pointer to ieee80211_channel_info to get
287*5113495bSYour Name  * @ic_nchans: number of chan information it gets
288*5113495bSYour Name  * @flag_160: flag indicating the API to fill the center frequencies of 160MHz.
289*5113495bSYour Name  * @flag_6ghz: flag indicating the API to include 6 GHz or not
290*5113495bSYour Name  *
291*5113495bSYour Name  * Return: 0 on success, negative errno on failure
292*5113495bSYour Name  */
293*5113495bSYour Name int os_if_son_get_chan_list(struct wlan_objmgr_vdev *vdev,
294*5113495bSYour Name 			    struct ieee80211_ath_channel *ic_chans,
295*5113495bSYour Name 			    struct ieee80211_channel_info *chan_info,
296*5113495bSYour Name 			    uint8_t *ic_nchans, bool flag_160, bool flag_6ghz);
297*5113495bSYour Name 
298*5113495bSYour Name /**
299*5113495bSYour Name  * os_if_son_get_sta_count() - get connected STA count
300*5113495bSYour Name  * @vdev: vdev
301*5113495bSYour Name  *
302*5113495bSYour Name  * Return: connected STA count
303*5113495bSYour Name  */
304*5113495bSYour Name uint32_t os_if_son_get_sta_count(struct wlan_objmgr_vdev *vdev);
305*5113495bSYour Name 
306*5113495bSYour Name /**
307*5113495bSYour Name  * os_if_son_get_bssid() - get bssid of given vdev
308*5113495bSYour Name  * @vdev: vdev
309*5113495bSYour Name  * @bssid: pointer to BSSID
310*5113495bSYour Name  *
311*5113495bSYour Name  * Return: 0 if BSSID is gotten successfully
312*5113495bSYour Name  */
313*5113495bSYour Name int os_if_son_get_bssid(struct wlan_objmgr_vdev *vdev,
314*5113495bSYour Name 			uint8_t bssid[QDF_MAC_ADDR_SIZE]);
315*5113495bSYour Name 
316*5113495bSYour Name /**
317*5113495bSYour Name  * os_if_son_get_ssid() - get ssid of given vdev
318*5113495bSYour Name  * @vdev: vdev
319*5113495bSYour Name  * @ssid: pointer to SSID
320*5113495bSYour Name  * @ssid_len: ssid length
321*5113495bSYour Name  *
322*5113495bSYour Name  * Return: 0 if SSID is gotten successfully
323*5113495bSYour Name  */
324*5113495bSYour Name int os_if_son_get_ssid(struct wlan_objmgr_vdev *vdev,
325*5113495bSYour Name 		       char ssid[WLAN_SSID_MAX_LEN + 1],
326*5113495bSYour Name 		       uint8_t *ssid_len);
327*5113495bSYour Name 
328*5113495bSYour Name /**
329*5113495bSYour Name  * os_if_son_set_chan() - set chan
330*5113495bSYour Name  * @vdev: vdev
331*5113495bSYour Name  * @chan: given chan
332*5113495bSYour Name  * @son_band: given band
333*5113495bSYour Name  *
334*5113495bSYour Name  * Return: 0 on success, negative errno on failure
335*5113495bSYour Name  */
336*5113495bSYour Name int os_if_son_set_chan(struct wlan_objmgr_vdev *vdev,
337*5113495bSYour Name 		       int chan, enum wlan_band_id son_band);
338*5113495bSYour Name 
339*5113495bSYour Name /**
340*5113495bSYour Name  * os_if_son_set_cac_timeout() - set cac timeout
341*5113495bSYour Name  * @vdev: vdev
342*5113495bSYour Name  * @cac_timeout: cac timeount to set
343*5113495bSYour Name  *
344*5113495bSYour Name  * Return: 0 if cac time out is set successfully
345*5113495bSYour Name  */
346*5113495bSYour Name int os_if_son_set_cac_timeout(struct wlan_objmgr_vdev *vdev,
347*5113495bSYour Name 			      int cac_timeout);
348*5113495bSYour Name 
349*5113495bSYour Name /**
350*5113495bSYour Name  * os_if_son_get_cac_timeout() - get cac timeout
351*5113495bSYour Name  * @vdev: vdev
352*5113495bSYour Name  * @cac_timeout: cac timeout to get
353*5113495bSYour Name  *
354*5113495bSYour Name  * Return 0 if cac time out is get successfully
355*5113495bSYour Name  */
356*5113495bSYour Name int os_if_son_get_cac_timeout(struct wlan_objmgr_vdev *vdev,
357*5113495bSYour Name 			      int *cac_timeout);
358*5113495bSYour Name 
359*5113495bSYour Name /**
360*5113495bSYour Name  * os_if_son_set_country_code() - set country code
361*5113495bSYour Name  * @vdev: vdev
362*5113495bSYour Name  * @country_code: country code to set
363*5113495bSYour Name  *
364*5113495bSYour Name  * Return: 0 if country code is set successfully
365*5113495bSYour Name  */
366*5113495bSYour Name int os_if_son_set_country_code(struct wlan_objmgr_vdev *vdev,
367*5113495bSYour Name 			       char *country_code);
368*5113495bSYour Name 
369*5113495bSYour Name /**
370*5113495bSYour Name  * os_if_son_get_country_code() - get country code
371*5113495bSYour Name  * @vdev: vdev
372*5113495bSYour Name  * @country_code: country code to get
373*5113495bSYour Name  *
374*5113495bSYour Name  * Return: 0 if country code is get successfully
375*5113495bSYour Name  */
376*5113495bSYour Name int os_if_son_get_country_code(struct wlan_objmgr_vdev *vdev,
377*5113495bSYour Name 			       char *country_code);
378*5113495bSYour Name 
379*5113495bSYour Name /**
380*5113495bSYour Name  * os_if_son_set_candidate_freq() - set freq to switch after radar detection
381*5113495bSYour Name  * @vdev: vdev
382*5113495bSYour Name  * @freq: freq to switch
383*5113495bSYour Name  *
384*5113495bSYour Name  * Return: 0 if candidate freq is set successfully
385*5113495bSYour Name  */
386*5113495bSYour Name int os_if_son_set_candidate_freq(struct wlan_objmgr_vdev *vdev,
387*5113495bSYour Name 				 qdf_freq_t freq);
388*5113495bSYour Name 
389*5113495bSYour Name /**
390*5113495bSYour Name  * os_if_son_get_candidate_freq() - get freq to switch after radar detection
391*5113495bSYour Name  * @vdev: vdev
392*5113495bSYour Name  *
393*5113495bSYour Name  * Return: candidate freq to switch after radar detection
394*5113495bSYour Name  */
395*5113495bSYour Name qdf_freq_t os_if_son_get_candidate_freq(struct wlan_objmgr_vdev *vdev);
396*5113495bSYour Name 
397*5113495bSYour Name /**
398*5113495bSYour Name  * os_if_son_get_phymode() - get phy mode
399*5113495bSYour Name  * @vdev: vdev
400*5113495bSYour Name  *
401*5113495bSYour Name  * Return: enum ieee80211_phymode
402*5113495bSYour Name  */
403*5113495bSYour Name enum ieee80211_phymode os_if_son_get_phymode(struct wlan_objmgr_vdev *vdev);
404*5113495bSYour Name 
405*5113495bSYour Name /**
406*5113495bSYour Name  * os_if_son_set_phymode() - set phy mode
407*5113495bSYour Name  * @vdev: vdev
408*5113495bSYour Name  * @mode: son phy mode to set
409*5113495bSYour Name  *
410*5113495bSYour Name  * Return: 0 on success, negative errno on failure
411*5113495bSYour Name  */
412*5113495bSYour Name int os_if_son_set_phymode(struct wlan_objmgr_vdev *vdev,
413*5113495bSYour Name 			  enum ieee80211_phymode mode);
414*5113495bSYour Name 
415*5113495bSYour Name /**
416*5113495bSYour Name  * os_if_son_get_phy_stats() - get phy stats
417*5113495bSYour Name  * @vdev: vdev
418*5113495bSYour Name  * @phy_stats: phy stats
419*5113495bSYour Name  *
420*5113495bSYour Name  * Return: void
421*5113495bSYour Name  */
422*5113495bSYour Name void os_if_son_get_phy_stats(struct wlan_objmgr_vdev *vdev,
423*5113495bSYour Name 			     struct ol_ath_radiostats *phy_stats);
424*5113495bSYour Name 
425*5113495bSYour Name /**
426*5113495bSYour Name  * os_if_son_cbs_init() - cbs init
427*5113495bSYour Name  *
428*5113495bSYour Name  * Return: 0 on success, negative errno on failure
429*5113495bSYour Name  */
430*5113495bSYour Name int os_if_son_cbs_init(void);
431*5113495bSYour Name 
432*5113495bSYour Name /**
433*5113495bSYour Name  * os_if_son_cbs_deinit() - cbs deinit
434*5113495bSYour Name  *
435*5113495bSYour Name  * Return: 0 on success, negative errno on failure
436*5113495bSYour Name  */
437*5113495bSYour Name int os_if_son_cbs_deinit(void);
438*5113495bSYour Name 
439*5113495bSYour Name /**
440*5113495bSYour Name  * os_if_son_set_cbs() - enable cbs or disable
441*5113495bSYour Name  * @vdev: vdev
442*5113495bSYour Name  * @enable: true or false
443*5113495bSYour Name  *
444*5113495bSYour Name  * Return: 0 on success, negative errno on failure
445*5113495bSYour Name  */
446*5113495bSYour Name int os_if_son_set_cbs(struct wlan_objmgr_vdev *vdev,
447*5113495bSYour Name 		      bool enable);
448*5113495bSYour Name 
449*5113495bSYour Name /**
450*5113495bSYour Name  * os_if_son_set_cbs_wait_time() - set cbs wait time
451*5113495bSYour Name  * @vdev: vdev
452*5113495bSYour Name  * @val: value
453*5113495bSYour Name  *
454*5113495bSYour Name  * Return: 0 on success, negative errno on failure
455*5113495bSYour Name  */
456*5113495bSYour Name int os_if_son_set_cbs_wait_time(struct wlan_objmgr_vdev *vdev,
457*5113495bSYour Name 				uint32_t val);
458*5113495bSYour Name 
459*5113495bSYour Name /**
460*5113495bSYour Name  * os_if_son_set_cbs_dwell_split_time() - set cbs dwell split time
461*5113495bSYour Name  * @vdev: vdev
462*5113495bSYour Name  * @val: value
463*5113495bSYour Name  *
464*5113495bSYour Name  * Return: 0 on success, negative errno on failure
465*5113495bSYour Name  */
466*5113495bSYour Name int os_if_son_set_cbs_dwell_split_time(struct wlan_objmgr_vdev *vdev,
467*5113495bSYour Name 				       uint32_t val);
468*5113495bSYour Name 
469*5113495bSYour Name /**
470*5113495bSYour Name  * os_if_son_get_chan_util() - get chan utilization
471*5113495bSYour Name  * @vdev: vdev
472*5113495bSYour Name  *
473*5113495bSYour Name  * Return: chan utilization (0 - 100)
474*5113495bSYour Name  */
475*5113495bSYour Name uint8_t os_if_son_get_chan_util(struct wlan_objmgr_vdev *vdev);
476*5113495bSYour Name 
477*5113495bSYour Name /**
478*5113495bSYour Name  * os_if_son_pdev_ops() - Handles PDEV specific SON commands
479*5113495bSYour Name  * @pdev: pdev
480*5113495bSYour Name  * @type: SON command to handle
481*5113495bSYour Name  * @data: Input Data
482*5113495bSYour Name  * @ret: Output Data
483*5113495bSYour Name  *
484*5113495bSYour Name  * Return: QDF_SUCCCESS_SUCCESS in case of success
485*5113495bSYour Name  */
486*5113495bSYour Name QDF_STATUS os_if_son_pdev_ops(struct wlan_objmgr_pdev *pdev,
487*5113495bSYour Name 			      enum wlan_mlme_pdev_param type,
488*5113495bSYour Name 			      void *data, void *ret);
489*5113495bSYour Name 
490*5113495bSYour Name /**
491*5113495bSYour Name  * os_if_son_vdev_ops() - Handles VDEV specific SON commands
492*5113495bSYour Name  * @vdev: vdev
493*5113495bSYour Name  * @type: SON command to handle
494*5113495bSYour Name  * @data: Input Data
495*5113495bSYour Name  * @ret: Output Data
496*5113495bSYour Name  *
497*5113495bSYour Name  * Return: QDF_SUCCCESS_SUCCESS in case of success
498*5113495bSYour Name  */
499*5113495bSYour Name QDF_STATUS os_if_son_vdev_ops(struct wlan_objmgr_vdev *vdev,
500*5113495bSYour Name 			      enum wlan_mlme_vdev_param type,
501*5113495bSYour Name 			      void *data, void *ret);
502*5113495bSYour Name 
503*5113495bSYour Name /**
504*5113495bSYour Name  * os_if_son_peer_ops() - Handles PEER specific SON commands
505*5113495bSYour Name  * @peer: peer
506*5113495bSYour Name  * @type: SON command to handle
507*5113495bSYour Name  * @data: Input Data. Pointer to wlan_mlme_peer_data
508*5113495bSYour Name  * @ret: Output Data. Pointer to wlan_mlme_peer_data
509*5113495bSYour Name  *
510*5113495bSYour Name  * Return: QDF_SUCCCESS_SUCCESS in case of success
511*5113495bSYour Name  */
512*5113495bSYour Name QDF_STATUS os_if_son_peer_ops(struct wlan_objmgr_peer *peer,
513*5113495bSYour Name 			      enum wlan_mlme_peer_param type,
514*5113495bSYour Name 			      union wlan_mlme_peer_data *data,
515*5113495bSYour Name 			      union wlan_mlme_peer_data *ret);
516*5113495bSYour Name 
517*5113495bSYour Name /**
518*5113495bSYour Name  * os_if_son_scan_db_iterate() - get country code
519*5113495bSYour Name  * @pdev: pdev
520*5113495bSYour Name  * @handler: scan_iterator
521*5113495bSYour Name  * @arg: argument to be passed to handler
522*5113495bSYour Name  *
523*5113495bSYour Name  * Return: QDF_SUCCCESS_SUCCESS in case of success
524*5113495bSYour Name  */
525*5113495bSYour Name QDF_STATUS os_if_son_scan_db_iterate(struct wlan_objmgr_pdev *pdev,
526*5113495bSYour Name 				     scan_iterator_func handler, void *arg);
527*5113495bSYour Name 
528*5113495bSYour Name /**
529*5113495bSYour Name  * os_if_son_acl_is_probe_wh_set() - Withheld probes for given mac_addr,
530*5113495bSYour Name  *				     not supported
531*5113495bSYour Name  * @vdev: vdev
532*5113495bSYour Name  * @mac_addr: 6-Byte MAC address
533*5113495bSYour Name  * @probe_rssi: Probe Request RSSI
534*5113495bSYour Name  *
535*5113495bSYour Name  * Return: true / false
536*5113495bSYour Name  */
537*5113495bSYour Name bool os_if_son_acl_is_probe_wh_set(struct wlan_objmgr_vdev *vdev,
538*5113495bSYour Name 				   const uint8_t *mac_addr,
539*5113495bSYour Name 				   uint8_t probe_rssi);
540*5113495bSYour Name 
541*5113495bSYour Name /**
542*5113495bSYour Name  * os_if_son_get_rx_streams() - Gets number of RX spatial streams
543*5113495bSYour Name  * @vdev: target vdev
544*5113495bSYour Name  *
545*5113495bSYour Name  * Return: number of spatial stream
546*5113495bSYour Name  */
547*5113495bSYour Name uint8_t os_if_son_get_rx_streams(struct wlan_objmgr_vdev *vdev);
548*5113495bSYour Name 
549*5113495bSYour Name /**
550*5113495bSYour Name  * os_if_son_cfg80211_reply() - replies to cfg80211
551*5113495bSYour Name  * @sk_buf: sk_buff to uper layer
552*5113495bSYour Name  *
553*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success
554*5113495bSYour Name  */
555*5113495bSYour Name QDF_STATUS os_if_son_cfg80211_reply(qdf_nbuf_t sk_buf);
556*5113495bSYour Name 
557*5113495bSYour Name /**
558*5113495bSYour Name  * os_if_son_vdev_is_wds() - checks if wds capability is supported or not
559*5113495bSYour Name  * @vdev: Pointer to vdev
560*5113495bSYour Name  *
561*5113495bSYour Name  * Return: true if wds is supported
562*5113495bSYour Name  */
563*5113495bSYour Name bool os_if_son_vdev_is_wds(struct wlan_objmgr_vdev *vdev);
564*5113495bSYour Name 
565*5113495bSYour Name /*
566*5113495bSYour Name  * os_if_son_set_acl_policy() - set acl policy
567*5113495bSYour Name  * @vdev: vdev
568*5113495bSYour Name  * @son_acl_policy: son acl policy. enum ieee80211_acl_cmd
569*5113495bSYour Name  *
570*5113495bSYour Name  * Return: QDF_STATUS
571*5113495bSYour Name  */
572*5113495bSYour Name QDF_STATUS os_if_son_set_acl_policy(struct wlan_objmgr_vdev *vdev,
573*5113495bSYour Name 				    ieee80211_acl_cmd son_acl_policy);
574*5113495bSYour Name 
575*5113495bSYour Name /**
576*5113495bSYour Name  * os_if_son_get_acl_policy() - get acl policy
577*5113495bSYour Name  * @vdev: vdev
578*5113495bSYour Name  *
579*5113495bSYour Name  * Return: acl policy. enum ieee80211_acl_cmd
580*5113495bSYour Name  */
581*5113495bSYour Name ieee80211_acl_cmd os_if_son_get_acl_policy(struct wlan_objmgr_vdev *vdev);
582*5113495bSYour Name 
583*5113495bSYour Name /**
584*5113495bSYour Name  * os_if_son_add_acl_mac() - add mac to acl
585*5113495bSYour Name  * @vdev: vdev
586*5113495bSYour Name  * @acl_mac: mac to add
587*5113495bSYour Name  *
588*5113495bSYour Name  * Return: 0 on success, negative errno on failure
589*5113495bSYour Name  */
590*5113495bSYour Name int os_if_son_add_acl_mac(struct wlan_objmgr_vdev *vdev,
591*5113495bSYour Name 			  struct qdf_mac_addr *acl_mac);
592*5113495bSYour Name 
593*5113495bSYour Name /**
594*5113495bSYour Name  * os_if_son_get_sta_space() - get sta space
595*5113495bSYour Name  * @vdev: target vdev
596*5113495bSYour Name  *
597*5113495bSYour Name  * Return: bytes which is needed to fill sta information
598*5113495bSYour Name  */
599*5113495bSYour Name uint32_t os_if_son_get_sta_space(struct wlan_objmgr_vdev *vdev);
600*5113495bSYour Name 
601*5113495bSYour Name /**
602*5113495bSYour Name  * os_if_son_get_sta_list() - get sta list
603*5113495bSYour Name  * @vdev: target vdev
604*5113495bSYour Name  * @si: pointer to ieee80211req_sta_info
605*5113495bSYour Name  * @space: space left
606*5113495bSYour Name  *
607*5113495bSYour Name  * Return: void
608*5113495bSYour Name  */
609*5113495bSYour Name void os_if_son_get_sta_list(struct wlan_objmgr_vdev *vdev,
610*5113495bSYour Name 			    struct ieee80211req_sta_info *si, uint32_t *space);
611*5113495bSYour Name 
612*5113495bSYour Name /**
613*5113495bSYour Name  * os_if_son_del_acl_mac() - del mac from acl
614*5113495bSYour Name  * @vdev: vdev
615*5113495bSYour Name  * @acl_mac: mac to del
616*5113495bSYour Name  *
617*5113495bSYour Name  * Return: 0 on success, negative errno on failure
618*5113495bSYour Name  */
619*5113495bSYour Name int os_if_son_del_acl_mac(struct wlan_objmgr_vdev *vdev,
620*5113495bSYour Name 			  struct qdf_mac_addr *acl_mac);
621*5113495bSYour Name 
622*5113495bSYour Name /**
623*5113495bSYour Name  * os_if_son_kickout_mac() - kickout sta with given mac
624*5113495bSYour Name  * @vdev: vdev
625*5113495bSYour Name  * @mac: sta mac to kickout
626*5113495bSYour Name  *
627*5113495bSYour Name  * Return: 0 on success, negative errno on failure
628*5113495bSYour Name  */
629*5113495bSYour Name int os_if_son_kickout_mac(struct wlan_objmgr_vdev *vdev,
630*5113495bSYour Name 			  struct qdf_mac_addr *mac);
631*5113495bSYour Name 
632*5113495bSYour Name /**
633*5113495bSYour Name  * os_if_son_set_chwidth() - set chan width
634*5113495bSYour Name  * @vdev: vdev
635*5113495bSYour Name  * @son_chwidth: son chan width
636*5113495bSYour Name  *
637*5113495bSYour Name  * Return: 0 on success, negative errno on failure
638*5113495bSYour Name  */
639*5113495bSYour Name int os_if_son_set_chwidth(struct wlan_objmgr_vdev *vdev,
640*5113495bSYour Name 			  enum ieee80211_cwm_width son_chwidth);
641*5113495bSYour Name 
642*5113495bSYour Name /**
643*5113495bSYour Name  * os_if_son_get_chwidth() - get chan width
644*5113495bSYour Name  * @vdev: vdev
645*5113495bSYour Name  *
646*5113495bSYour Name  * Return: son chan width
647*5113495bSYour Name  */
648*5113495bSYour Name enum ieee80211_cwm_width os_if_son_get_chwidth(struct wlan_objmgr_vdev *vdev);
649*5113495bSYour Name 
650*5113495bSYour Name /**
651*5113495bSYour Name  * os_if_son_deauth_peer_sta - Deauths specified STA
652*5113495bSYour Name  * @vdev: vdev
653*5113495bSYour Name  * @peer_mac: Target peer MAC address
654*5113495bSYour Name  * @ignore_frame: True to silently deauth the peer
655*5113495bSYour Name  *
656*5113495bSYour Name  * Return: void
657*5113495bSYour Name  */
658*5113495bSYour Name void os_if_son_deauth_peer_sta(struct wlan_objmgr_vdev *vdev,
659*5113495bSYour Name 			       uint8_t *peer_mac,
660*5113495bSYour Name 			       bool ignore_frame);
661*5113495bSYour Name 
662*5113495bSYour Name /**
663*5113495bSYour Name  * os_if_son_modify_acl - Updates ACL with given peer
664*5113495bSYour Name  * @vdev: vdev
665*5113495bSYour Name  * @peer_mac: Target peer MAC address
666*5113495bSYour Name  * @allow_auth: True to allow specified peer to connect
667*5113495bSYour Name  *
668*5113495bSYour Name  * Return: void
669*5113495bSYour Name  */
670*5113495bSYour Name void os_if_son_modify_acl(struct wlan_objmgr_vdev *vdev,
671*5113495bSYour Name 			  uint8_t *peer_mac,
672*5113495bSYour Name 			  bool allow_auth);
673*5113495bSYour Name 
674*5113495bSYour Name /**
675*5113495bSYour Name  * os_if_son_deliver_ald_event() - deliver ald events to son
676*5113495bSYour Name  * @vdev: vdev object
677*5113495bSYour Name  * @peer: peer object
678*5113495bSYour Name  * @event: Name of the event
679*5113495bSYour Name  * @event_data: event data
680*5113495bSYour Name  *
681*5113495bSYour Name  * Return: 0 on success
682*5113495bSYour Name  */
683*5113495bSYour Name int os_if_son_deliver_ald_event(struct wlan_objmgr_vdev *vdev,
684*5113495bSYour Name 				struct wlan_objmgr_peer *peer,
685*5113495bSYour Name 				enum ieee80211_event_type event,
686*5113495bSYour Name 				void *event_data);
687*5113495bSYour Name /**
688*5113495bSYour Name  * os_if_son_get_vdev_by_netdev() - Get vdev from net device
689*5113495bSYour Name  * @dev: net device struct
690*5113495bSYour Name  *
691*5113495bSYour Name  * Return: objmgr vdev on success else NULL
692*5113495bSYour Name  */
693*5113495bSYour Name struct wlan_objmgr_vdev *os_if_son_get_vdev_by_netdev(struct net_device *dev);
694*5113495bSYour Name 
695*5113495bSYour Name /**
696*5113495bSYour Name  * os_if_son_trigger_objmgr_object_deletion() - Trigger objmgr object deletion
697*5113495bSYour Name  * @id: umac component id
698*5113495bSYour Name  *
699*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success
700*5113495bSYour Name  */
701*5113495bSYour Name QDF_STATUS os_if_son_trigger_objmgr_object_deletion(enum wlan_umac_comp_id id);
702*5113495bSYour Name 
703*5113495bSYour Name /**
704*5113495bSYour Name  * os_if_son_trigger_objmgr_object_creation() - Trigger objmgr object creation
705*5113495bSYour Name  * @id: umac component id
706*5113495bSYour Name  *
707*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success
708*5113495bSYour Name  */
709*5113495bSYour Name QDF_STATUS os_if_son_trigger_objmgr_object_creation(enum wlan_umac_comp_id id);
710*5113495bSYour Name 
711*5113495bSYour Name /**
712*5113495bSYour Name  * os_if_son_start_acs() - Triggers ACS on the target vdev
713*5113495bSYour Name  * @vdev: target vdev
714*5113495bSYour Name  * @enable: True - to start ACS
715*5113495bSYour Name  *
716*5113495bSYour Name  * Return: 0 on success
717*5113495bSYour Name  */
718*5113495bSYour Name int os_if_son_start_acs(struct wlan_objmgr_vdev *vdev, uint8_t enable);
719*5113495bSYour Name 
720*5113495bSYour Name /**
721*5113495bSYour Name  * os_if_son_set_acs_chan() - Set channel list for ACS
722*5113495bSYour Name  * @vdev: target vdev
723*5113495bSYour Name  * @req: channel list
724*5113495bSYour Name  *
725*5113495bSYour Name  * Return: 0 on success
726*5113495bSYour Name  */
727*5113495bSYour Name int os_if_son_set_acs_chan(struct wlan_objmgr_vdev *vdev,
728*5113495bSYour Name 			   struct ieee80211req_athdbg *req);
729*5113495bSYour Name 
730*5113495bSYour Name /**
731*5113495bSYour Name  * os_if_son_get_acs_report() - Get ACS report
732*5113495bSYour Name  * @vdev: target vdev
733*5113495bSYour Name  * @acs_r: ACS report structure
734*5113495bSYour Name  *
735*5113495bSYour Name  * Return: 0 on success
736*5113495bSYour Name  */
737*5113495bSYour Name int os_if_son_get_acs_report(struct wlan_objmgr_vdev *vdev,
738*5113495bSYour Name 			     struct ieee80211_acs_dbg *acs_r);
739*5113495bSYour Name 
740*5113495bSYour Name /**
741*5113495bSYour Name  * os_if_son_parse_generic_nl_cmd() - Sends the Generic vendor commands
742*5113495bSYour Name  *				      to SON.
743*5113495bSYour Name  * @wiphy: Standard wiphy object
744*5113495bSYour Name  * @wdev: wireless device
745*5113495bSYour Name  * @tb: Command type structure pointer
746*5113495bSYour Name  * @type: Get/Set command
747*5113495bSYour Name  *
748*5113495bSYour Name  * This function parses the GENERIC vendor commands received from
749*5113495bSYour Name  * userspace then sends the extracted data to SON module for further
750*5113495bSYour Name  * processing along with wiphy, wdev, extected structure - param
751*5113495bSYour Name  * and command type i.e. GET / SET. Each of the GENERIC commands are
752*5113495bSYour Name  * interdependent and hence in SON module, they will be further
753*5113495bSYour Name  * parsed based on type i.e. GET / SET.
754*5113495bSYour Name  *
755*5113495bSYour Name  * Return: 0 on success
756*5113495bSYour Name  */
757*5113495bSYour Name int os_if_son_parse_generic_nl_cmd(struct wiphy *wiphy,
758*5113495bSYour Name 				   struct wireless_dev *wdev,
759*5113495bSYour Name 				   struct nlattr **tb,
760*5113495bSYour Name 				   enum os_if_son_vendor_cmd_type type);
761*5113495bSYour Name 
762*5113495bSYour Name /**
763*5113495bSYour Name  * os_if_son_get_node_datarate_info() - Get datarate info about given mac
764*5113495bSYour Name  * @vdev: vdev_obj
765*5113495bSYour Name  * @mac_addr: mac_address to get datarate information
766*5113495bSYour Name  * @node_info: object to store datarate information
767*5113495bSYour Name  *
768*5113495bSYour Name  * Return: void
769*5113495bSYour Name  */
770*5113495bSYour Name QDF_STATUS os_if_son_get_node_datarate_info(struct wlan_objmgr_vdev *vdev,
771*5113495bSYour Name 					    uint8_t *mac_addr,
772*5113495bSYour Name 					    wlan_node_info *node_info);
773*5113495bSYour Name 
774*5113495bSYour Name /**
775*5113495bSYour Name  * os_if_son_get_peer_max_mcs_idx() - Get max mcs index of the peer
776*5113495bSYour Name  * @vdev: vdev obj
777*5113495bSYour Name  * @peer: peer obj
778*5113495bSYour Name  *
779*5113495bSYour Name  * Return: max mcs index on success / 0 on failure
780*5113495bSYour Name  */
781*5113495bSYour Name uint32_t os_if_son_get_peer_max_mcs_idx(struct wlan_objmgr_vdev *vdev,
782*5113495bSYour Name 					struct wlan_objmgr_peer *peer);
783*5113495bSYour Name 
784*5113495bSYour Name /**
785*5113495bSYour Name  * os_if_son_get_sta_stats() - get connected sta rssi and estimated data rate
786*5113495bSYour Name  * @vdev: pointer to vdev
787*5113495bSYour Name  * @mac_addr: connected sta mac addr
788*5113495bSYour Name  * @stats: pointer to ieee80211_nodestats
789*5113495bSYour Name  *
790*5113495bSYour Name  * Return: 0 on success, negative errno on failure
791*5113495bSYour Name  */
792*5113495bSYour Name int os_if_son_get_sta_stats(struct wlan_objmgr_vdev *vdev, uint8_t *mac_addr,
793*5113495bSYour Name 			    struct ieee80211_nodestats *stats);
794*5113495bSYour Name #endif
795