xref: /wlan-driver/qcacld-3.0/components/son/dispatcher/inc/son_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 son api
20*5113495bSYour Name  */
21*5113495bSYour Name #ifndef _SON_API_H_
22*5113495bSYour Name #define _SON_API_H_
23*5113495bSYour Name 
24*5113495bSYour Name #include <qdf_types.h>
25*5113495bSYour Name #include <wlan_objmgr_peer_obj.h>
26*5113495bSYour Name #include <wlan_objmgr_pdev_obj.h>
27*5113495bSYour Name #include <reg_services_public_struct.h>
28*5113495bSYour Name #include <qdf_trace.h>
29*5113495bSYour Name 
30*5113495bSYour Name #define son_alert(format, args...) \
31*5113495bSYour Name 		QDF_TRACE_FATAL(QDF_MODULE_ID_SON, format, ## args)
32*5113495bSYour Name 
33*5113495bSYour Name #define son_err(format, args...) \
34*5113495bSYour Name 		QDF_TRACE_ERROR(QDF_MODULE_ID_SON, format, ## args)
35*5113495bSYour Name 
36*5113495bSYour Name #define son_warn(format, args...) \
37*5113495bSYour Name 		QDF_TRACE_WARN(QDF_MODULE_ID_SON, format, ## args)
38*5113495bSYour Name 
39*5113495bSYour Name #define son_info(format, args...) \
40*5113495bSYour Name 		QDF_TRACE_INFO(QDF_MODULE_ID_SON, format, ## args)
41*5113495bSYour Name 
42*5113495bSYour Name #define son_debug(format, args...) \
43*5113495bSYour Name 		QDF_TRACE_DEBUG(QDF_MODULE_ID_SON, format, ## args)
44*5113495bSYour Name 
45*5113495bSYour Name #define son_nofl_alert(format, args...) \
46*5113495bSYour Name 		QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_SON, format, ## args)
47*5113495bSYour Name 
48*5113495bSYour Name #define son_nofl_err(format, args...) \
49*5113495bSYour Name 		QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_SON, format, ## args)
50*5113495bSYour Name 
51*5113495bSYour Name #define son_nofl_warn(format, args...) \
52*5113495bSYour Name 		QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_SON, format, ## args)
53*5113495bSYour Name 
54*5113495bSYour Name #define son_nofl_info(format, args...) \
55*5113495bSYour Name 		QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_SON, format, ## args)
56*5113495bSYour Name 
57*5113495bSYour Name #define son_nofl_debug(format, args...) \
58*5113495bSYour Name 		QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_SON, format, ## args)
59*5113495bSYour Name 
60*5113495bSYour Name #define son_alert_rl(format, args...) \
61*5113495bSYour Name 		QDF_TRACE_FATAL_RL(QDF_MODULE_ID_SON, format, ## args)
62*5113495bSYour Name 
63*5113495bSYour Name #define son_err_rl(format, args...) \
64*5113495bSYour Name 		QDF_TRACE_ERROR_RL(QDF_MODULE_ID_SON, format, ## args)
65*5113495bSYour Name 
66*5113495bSYour Name #define son_warn_rl(format, args...) \
67*5113495bSYour Name 		QDF_TRACE_WARN_RL(QDF_MODULE_ID_SON, format, ## args)
68*5113495bSYour Name 
69*5113495bSYour Name #define son_info_rl(format, args...) \
70*5113495bSYour Name 		QDF_TRACE_INFO_RL(QDF_MODULE_ID_SON, format, ## args)
71*5113495bSYour Name 
72*5113495bSYour Name #define son_debug_rl(format, args...) \
73*5113495bSYour Name 		QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_SON, format, ## args)
74*5113495bSYour Name 
75*5113495bSYour Name #define son_nofl_alert_rl(format, args...) \
76*5113495bSYour Name 		QDF_TRACE_FATAL_RL_NO_FL(QDF_MODULE_ID_SON, format, ## args)
77*5113495bSYour Name 
78*5113495bSYour Name #define son_nofl_err_rl(format, args...) \
79*5113495bSYour Name 		QDF_TRACE_ERROR_RL_NO_FL(QDF_MODULE_ID_SON, format, ## args)
80*5113495bSYour Name 
81*5113495bSYour Name #define son_nofl_warn_rl(format, args...) \
82*5113495bSYour Name 		QDF_TRACE_WARN_RL_NO_FL(QDF_MODULE_ID_SON, format, ## args)
83*5113495bSYour Name 
84*5113495bSYour Name #define son_nofl_info_rl(format, args...) \
85*5113495bSYour Name 		QDF_TRACE_INFO_RL_NO_FL(QDF_MODULE_ID_SON, format, ## args)
86*5113495bSYour Name 
87*5113495bSYour Name #define son_nofl_debug_rl(format, args...) \
88*5113495bSYour Name 		QDF_TRACE_DEBUG_RL_NO_FL(QDF_MODULE_ID_SON, format, ## args)
89*5113495bSYour Name 
90*5113495bSYour Name #define TOTAL_DWELL_TIME 200
91*5113495bSYour Name 
92*5113495bSYour Name #define CBS_DEFAULT_RESTTIME 500 /* msec */
93*5113495bSYour Name #define CBS_DEFAULT_DWELL_TIME 50 /* msec */
94*5113495bSYour Name #define CBS_DEFAULT_WAIT_TIME 1000 /* 1 sec */
95*5113495bSYour Name #define CBS_DEFAULT_DWELL_SPLIT_TIME 50 /* msec */
96*5113495bSYour Name #define CBS_DEFAULT_DWELL_REST_TIME 500 /* msec */
97*5113495bSYour Name #define CBS_DEFAULT_MIN_REST_TIME 50 /* msec */
98*5113495bSYour Name 
99*5113495bSYour Name #define DEFAULT_BEACON_INTERVAL 100
100*5113495bSYour Name 
101*5113495bSYour Name #define CBS_DWELL_TIME_10MS 10
102*5113495bSYour Name #define CBS_DWELL_TIME_25MS 25
103*5113495bSYour Name #define CBS_DWELL_TIME_50MS 50
104*5113495bSYour Name #define CBS_DWELL_TIME_75MS 75
105*5113495bSYour Name #define MIN_SCAN_OFFSET_ARRAY_SIZE 0
106*5113495bSYour Name #define MAX_SCAN_OFFSET_ARRAY_SIZE 9
107*5113495bSYour Name #define SCAN_START_OFFSET_MIN 26
108*5113495bSYour Name 
109*5113495bSYour Name #define DEFAULT_SCAN_MAX_REST_TIME 500
110*5113495bSYour Name 
111*5113495bSYour Name /**
112*5113495bSYour Name  * enum son_cbs_state - son cbs state enumeration
113*5113495bSYour Name  * @CBS_INIT: init state
114*5113495bSYour Name  * @CBS_SCAN: scanning state
115*5113495bSYour Name  * @CBS_REST: rest state
116*5113495bSYour Name  * @CBS_RANK: rank state
117*5113495bSYour Name  * @CBS_WAIT: wait state
118*5113495bSYour Name  */
119*5113495bSYour Name enum son_cbs_state {
120*5113495bSYour Name 	CBS_INIT,
121*5113495bSYour Name 	CBS_SCAN,
122*5113495bSYour Name 	CBS_REST,
123*5113495bSYour Name 	CBS_RANK,
124*5113495bSYour Name 	CBS_WAIT,
125*5113495bSYour Name };
126*5113495bSYour Name 
127*5113495bSYour Name /**
128*5113495bSYour Name  * struct son_cbs - son cbs struction
129*5113495bSYour Name  * @vdev: vdev
130*5113495bSYour Name  * @cbs_lock: cbs spin lock
131*5113495bSYour Name  * @cbs_timer: cbs timer
132*5113495bSYour Name  * @cbs_state: cbs state
133*5113495bSYour Name  * @cbs_scan_requestor: scan requestor
134*5113495bSYour Name  * @cbs_scan_id: scan id
135*5113495bSYour Name  * @dwell_time: dwell time configuration
136*5113495bSYour Name  * @rest_time: rest time configuration
137*5113495bSYour Name  * @wait_time: wait time configuration
138*5113495bSYour Name  * @scan_intvl_time: interval time configuration
139*5113495bSYour Name  * @scan_params: scan params
140*5113495bSYour Name  * @max_dwell_split_cnt: max dwell split counter
141*5113495bSYour Name  * @dwell_split_cnt: dwell split counter
142*5113495bSYour Name  * @scan_offset: scan offset array
143*5113495bSYour Name  * @scan_dwell_rest: scan dwell rest array
144*5113495bSYour Name  * @min_dwell_rest_time: nub dwell rest time
145*5113495bSYour Name  * @dwell_split_time: dwell split time
146*5113495bSYour Name  * @max_arr_size_used: max array size used
147*5113495bSYour Name  */
148*5113495bSYour Name struct son_cbs {
149*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev;
150*5113495bSYour Name 
151*5113495bSYour Name 	spinlock_t cbs_lock;
152*5113495bSYour Name 	qdf_timer_t cbs_timer;
153*5113495bSYour Name 
154*5113495bSYour Name 	enum son_cbs_state cbs_state;
155*5113495bSYour Name 
156*5113495bSYour Name 	wlan_scan_requester cbs_scan_requestor;
157*5113495bSYour Name 	wlan_scan_id cbs_scan_id;
158*5113495bSYour Name 
159*5113495bSYour Name 	uint32_t dwell_time;
160*5113495bSYour Name 	uint32_t rest_time;
161*5113495bSYour Name 	uint32_t wait_time;
162*5113495bSYour Name 	int32_t  scan_intvl_time;
163*5113495bSYour Name 
164*5113495bSYour Name 	struct scan_start_request scan_params;
165*5113495bSYour Name 
166*5113495bSYour Name 	uint8_t max_dwell_split_cnt;
167*5113495bSYour Name 	int8_t dwell_split_cnt;
168*5113495bSYour Name 	uint32_t scan_offset[10];
169*5113495bSYour Name 	uint32_t scan_dwell_rest[10];
170*5113495bSYour Name 	uint32_t min_dwell_rest_time;
171*5113495bSYour Name 	uint32_t dwell_split_time;
172*5113495bSYour Name 	uint8_t max_arr_size_used;
173*5113495bSYour Name };
174*5113495bSYour Name 
175*5113495bSYour Name /**
176*5113495bSYour Name  * typedef mlme_deliver_cb() - cb to deliver mlme event
177*5113495bSYour Name  * @vdev: pointer to vdev
178*5113495bSYour Name  * @event_len: event length
179*5113495bSYour Name  * @event_buf: event buffer
180*5113495bSYour Name  *
181*5113495bSYour Name  * Return: 0 if event is sent successfully
182*5113495bSYour Name  */
183*5113495bSYour Name typedef int (*mlme_deliver_cb)(struct wlan_objmgr_vdev *vdev,
184*5113495bSYour Name 			       uint32_t event_len,
185*5113495bSYour Name 			       const uint8_t *event_buf);
186*5113495bSYour Name 
187*5113495bSYour Name /**
188*5113495bSYour Name  * enum SON_MLME_DELIVER_CB_TYPE - mlme deliver cb type
189*5113495bSYour Name  * @SON_MLME_DELIVER_CB_TYPE_OPMODE: cb to deliver opmode
190*5113495bSYour Name  * @SON_MLME_DELIVER_CB_TYPE_SMPS: cb to deliver smps
191*5113495bSYour Name  */
192*5113495bSYour Name enum SON_MLME_DELIVER_CB_TYPE {
193*5113495bSYour Name 	SON_MLME_DELIVER_CB_TYPE_OPMODE,
194*5113495bSYour Name 	SON_MLME_DELIVER_CB_TYPE_SMPS,
195*5113495bSYour Name };
196*5113495bSYour Name 
197*5113495bSYour Name /**
198*5113495bSYour Name  * wlan_son_register_mlme_deliver_cb - register mlme deliver cb
199*5113495bSYour Name  * @psoc: pointer to psoc
200*5113495bSYour Name  * @cb: mlme deliver cb
201*5113495bSYour Name  * @type: mlme deliver cb type
202*5113495bSYour Name  *
203*5113495bSYour Name  * Return: QDF_STATUS
204*5113495bSYour Name  */
205*5113495bSYour Name QDF_STATUS
206*5113495bSYour Name wlan_son_register_mlme_deliver_cb(struct wlan_objmgr_psoc *psoc,
207*5113495bSYour Name 				  mlme_deliver_cb cb,
208*5113495bSYour Name 				  enum SON_MLME_DELIVER_CB_TYPE type);
209*5113495bSYour Name /**
210*5113495bSYour Name  * wlan_son_peer_ext_stat_enable() - sends EXT stats command to FW
211*5113495bSYour Name  * @pdev: pointer to pdev
212*5113495bSYour Name  * @mac_addr: MAC address of the target peer
213*5113495bSYour Name  * @vdev: Pointer to vdev
214*5113495bSYour Name  * @stats_count: Stats count
215*5113495bSYour Name  * @enable: Enable / disable ext stats
216*5113495bSYour Name  *
217*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success else failure
218*5113495bSYour Name  */
219*5113495bSYour Name QDF_STATUS wlan_son_peer_ext_stat_enable(struct wlan_objmgr_pdev *pdev,
220*5113495bSYour Name 					 uint8_t *mac_addr,
221*5113495bSYour Name 					 struct wlan_objmgr_vdev *vdev,
222*5113495bSYour Name 					 uint32_t stats_count,
223*5113495bSYour Name 					 uint32_t enable);
224*5113495bSYour Name 
225*5113495bSYour Name /**
226*5113495bSYour Name  * wlan_son_peer_req_inst_stats() - Requests for instantaneous stats for
227*5113495bSYour Name  *				    the target mac_addr from FW via
228*5113495bSYour Name  *				    WMI_REQUEST_STATS_CMDID.
229*5113495bSYour Name  * @pdev: pointer to pdev
230*5113495bSYour Name  * @mac_addr: MAC address of the target peer
231*5113495bSYour Name  * @vdev: Pointer to vdev
232*5113495bSYour Name  *
233*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success else failure
234*5113495bSYour Name  */
235*5113495bSYour Name QDF_STATUS wlan_son_peer_req_inst_stats(struct wlan_objmgr_pdev *pdev,
236*5113495bSYour Name 					uint8_t *mac_addr,
237*5113495bSYour Name 					struct wlan_objmgr_vdev *vdev);
238*5113495bSYour Name 
239*5113495bSYour Name /**
240*5113495bSYour Name  * wlan_son_get_chan_flag() - get chan flag
241*5113495bSYour Name  * @pdev: pointer to pdev
242*5113495bSYour Name  * @freq: qdf_freq_t
243*5113495bSYour Name  * @flag_160: If true, 160 channel info will be obtained;
244*5113495bSYour Name  *            otherwise 80+80, 80 channel info will be obtained
245*5113495bSYour Name  * @chan_params: chan parameters
246*5113495bSYour Name  *
247*5113495bSYour Name  * Return: combination of enum qca_wlan_vendor_channel_prop_flags and
248*5113495bSYour Name  *         enum qca_wlan_vendor_channel_prop_flags_2
249*5113495bSYour Name  */
250*5113495bSYour Name uint32_t wlan_son_get_chan_flag(struct wlan_objmgr_pdev *pdev,
251*5113495bSYour Name 				qdf_freq_t freq, bool flag_160,
252*5113495bSYour Name 				struct ch_params *chan_params);
253*5113495bSYour Name 
254*5113495bSYour Name /**
255*5113495bSYour Name  * wlan_son_peer_set_kickout_allow() - set the peer is allowed to kickout
256*5113495bSYour Name  * @vdev: pointer to vdev
257*5113495bSYour Name  * @peer: pointer to peer
258*5113495bSYour Name  * @kickout_allow: kickout_allow to set
259*5113495bSYour Name  *
260*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on Success else failure.
261*5113495bSYour Name  */
262*5113495bSYour Name QDF_STATUS wlan_son_peer_set_kickout_allow(struct wlan_objmgr_vdev *vdev,
263*5113495bSYour Name 					   struct wlan_objmgr_peer *peer,
264*5113495bSYour Name 					   bool kickout_allow);
265*5113495bSYour Name 
266*5113495bSYour Name /**
267*5113495bSYour Name  * wlan_son_cbs_init() - son cbs init
268*5113495bSYour Name  *
269*5113495bSYour Name  * Return: 0 if succeed
270*5113495bSYour Name  */
271*5113495bSYour Name int wlan_son_cbs_init(void);
272*5113495bSYour Name 
273*5113495bSYour Name /* wlan_son_cbs_deinit - son cbs deinit
274*5113495bSYour Name  *
275*5113495bSYour Name  * Return: 0 if succeed
276*5113495bSYour Name  */
277*5113495bSYour Name int wlan_son_cbs_deinit(void);
278*5113495bSYour Name 
279*5113495bSYour Name /* wlan_son_cbs_enable() - son cbs enable
280*5113495bSYour Name  * @vdev: pointer to vdev
281*5113495bSYour Name  *
282*5113495bSYour Name  * Return: 0 if succeed
283*5113495bSYour Name  */
284*5113495bSYour Name int wlan_son_cbs_enable(struct wlan_objmgr_vdev *vdev);
285*5113495bSYour Name 
286*5113495bSYour Name /* wlan_son_cbs_disable() - son cbs disable
287*5113495bSYour Name  * @vdev: pointer to vdev
288*5113495bSYour Name  *
289*5113495bSYour Name  * Return: 0 if succeed
290*5113495bSYour Name  */
291*5113495bSYour Name int wlan_son_cbs_disable(struct wlan_objmgr_vdev *vdev);
292*5113495bSYour Name 
293*5113495bSYour Name /* wlan_son_set_cbs() - son cbs set
294*5113495bSYour Name  * @vdev: pointer to vdev
295*5113495bSYour Name  * @enable: enable or disable son cbs
296*5113495bSYour Name  *
297*5113495bSYour Name  * Return: 0 if succeed
298*5113495bSYour Name  */
299*5113495bSYour Name int wlan_son_set_cbs(struct wlan_objmgr_vdev *vdev,
300*5113495bSYour Name 		     bool enable);
301*5113495bSYour Name 
302*5113495bSYour Name /* wlan_son_set_cbs_wait_time() - cbs wait time configure
303*5113495bSYour Name  * @vdev: pointer to vdev
304*5113495bSYour Name  * @val: wait time value
305*5113495bSYour Name  *
306*5113495bSYour Name  * Return: 0 if succeed
307*5113495bSYour Name  */
308*5113495bSYour Name int wlan_son_set_cbs_wait_time(struct wlan_objmgr_vdev *vdev,
309*5113495bSYour Name 			       uint32_t val);
310*5113495bSYour Name 
311*5113495bSYour Name /* wlan_son_set_cbs_dwell_split_time() - cbs dwell spilt time configure
312*5113495bSYour Name  * @vdev: pointer to vdev
313*5113495bSYour Name  * @val: dwell spilt time value
314*5113495bSYour Name  *
315*5113495bSYour Name  * Return: 0 if succeed
316*5113495bSYour Name  */
317*5113495bSYour Name int wlan_son_set_cbs_dwell_split_time(struct wlan_objmgr_vdev *vdev,
318*5113495bSYour Name 				      uint32_t val);
319*5113495bSYour Name 
320*5113495bSYour Name /**
321*5113495bSYour Name  * wlan_son_vdev_get_supported_txrx_streams() - get supported spatial streams
322*5113495bSYour Name  * @vdev: pointer to vdev
323*5113495bSYour Name  * @num_tx_streams: pointer to number of tx streams
324*5113495bSYour Name  * @num_rx_streams: pointer to number of rx streams
325*5113495bSYour Name  *
326*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on Success else failure.
327*5113495bSYour Name  */
328*5113495bSYour Name QDF_STATUS
329*5113495bSYour Name wlan_son_vdev_get_supported_txrx_streams(struct wlan_objmgr_vdev *vdev,
330*5113495bSYour Name 					 uint32_t *num_tx_streams,
331*5113495bSYour Name 					 uint32_t *num_rx_streams);
332*5113495bSYour Name 
333*5113495bSYour Name #ifdef WLAN_FEATURE_SON
334*5113495bSYour Name /**
335*5113495bSYour Name  * wlan_son_peer_is_kickout_allow() - Is peer is allowed to kickout
336*5113495bSYour Name  * @vdev: pointer to vdev
337*5113495bSYour Name  * @macaddr: mac addr of the peer
338*5113495bSYour Name  *
339*5113495bSYour Name  * Return: True if it is allowed to kickout.
340*5113495bSYour Name  */
341*5113495bSYour Name bool wlan_son_peer_is_kickout_allow(struct wlan_objmgr_vdev *vdev,
342*5113495bSYour Name 				    uint8_t *macaddr);
343*5113495bSYour Name 
344*5113495bSYour Name /**
345*5113495bSYour Name  * wlan_son_ind_assoc_req_frm() - indicate assoc req frame to son
346*5113495bSYour Name  * @vdev: pointer to vdev
347*5113495bSYour Name  * @macaddr: MAC address
348*5113495bSYour Name  * @is_reassoc: true if it is reassoc req
349*5113495bSYour Name  * @frame: frame body
350*5113495bSYour Name  * @frame_len: frame body length
351*5113495bSYour Name  * @status: assoc req frame is handled successfully
352*5113495bSYour Name  *
353*5113495bSYour Name  * Return: Void
354*5113495bSYour Name  */
355*5113495bSYour Name void wlan_son_ind_assoc_req_frm(struct wlan_objmgr_vdev *vdev,
356*5113495bSYour Name 				uint8_t *macaddr, bool is_reassoc,
357*5113495bSYour Name 				uint8_t *frame, uint16_t frame_len,
358*5113495bSYour Name 				QDF_STATUS status);
359*5113495bSYour Name 
360*5113495bSYour Name /**
361*5113495bSYour Name  * wlan_son_deliver_tx_power() - notify son module of tx power
362*5113495bSYour Name  * @vdev: vdev
363*5113495bSYour Name  * @max_pwr: max power in dBm unit
364*5113495bSYour Name  *
365*5113495bSYour Name  * Return: 0 if event is sent successfully
366*5113495bSYour Name  */
367*5113495bSYour Name int wlan_son_deliver_tx_power(struct wlan_objmgr_vdev *vdev,
368*5113495bSYour Name 			      int32_t max_pwr);
369*5113495bSYour Name 
370*5113495bSYour Name /**
371*5113495bSYour Name  * wlan_son_deliver_vdev_stop() - notify son module of vdev stop
372*5113495bSYour Name  * @vdev: vdev
373*5113495bSYour Name  *
374*5113495bSYour Name  * Return: 0 if event is sent successfully
375*5113495bSYour Name  */
376*5113495bSYour Name int wlan_son_deliver_vdev_stop(struct wlan_objmgr_vdev *vdev);
377*5113495bSYour Name 
378*5113495bSYour Name /**
379*5113495bSYour Name  * wlan_son_deliver_inst_rssi() - notify son module of inst rssi
380*5113495bSYour Name  * @vdev: vdev
381*5113495bSYour Name  * @peer: peer device
382*5113495bSYour Name  * @irssi: inst rssi above the noise floor in dB unit
383*5113495bSYour Name  *
384*5113495bSYour Name  * Return: 0 if event is sent successfully
385*5113495bSYour Name  */
386*5113495bSYour Name int wlan_son_deliver_inst_rssi(struct wlan_objmgr_vdev *vdev,
387*5113495bSYour Name 			       struct wlan_objmgr_peer *peer,
388*5113495bSYour Name 			       uint32_t irssi);
389*5113495bSYour Name 
390*5113495bSYour Name /**
391*5113495bSYour Name  * wlan_son_deliver_opmode() - notify user app of opmode
392*5113495bSYour Name  * @vdev: vdev objmgr
393*5113495bSYour Name  * @bw: channel width defined in enum eSirMacHTChannelWidth
394*5113495bSYour Name  * @nss: supported rx nss
395*5113495bSYour Name  * @addr: source addr
396*5113495bSYour Name  *
397*5113495bSYour Name  * Return: 0 if event is sent successfully
398*5113495bSYour Name  */
399*5113495bSYour Name int wlan_son_deliver_opmode(struct wlan_objmgr_vdev *vdev,
400*5113495bSYour Name 			    uint8_t bw,
401*5113495bSYour Name 			    uint8_t nss,
402*5113495bSYour Name 			    uint8_t *addr);
403*5113495bSYour Name 
404*5113495bSYour Name /**
405*5113495bSYour Name  * wlan_son_deliver_smps() - notify user app of smps
406*5113495bSYour Name  * @vdev: vdev objmgr
407*5113495bSYour Name  * @is_static: is_static
408*5113495bSYour Name  * @addr: source addr
409*5113495bSYour Name  *
410*5113495bSYour Name  * Return: 0 if event is sent successfully
411*5113495bSYour Name  */
412*5113495bSYour Name int wlan_son_deliver_smps(struct wlan_objmgr_vdev *vdev,
413*5113495bSYour Name 			  uint8_t is_static,
414*5113495bSYour Name 			  uint8_t *addr);
415*5113495bSYour Name 
416*5113495bSYour Name /**
417*5113495bSYour Name  * wlan_son_deliver_rrm_rpt() - notify son module of rrm rpt
418*5113495bSYour Name  * @vdev: vdev objmgr
419*5113495bSYour Name  * @addr: sender addr
420*5113495bSYour Name  * @frm: points to measurement report
421*5113495bSYour Name  * @flen: frame length
422*5113495bSYour Name  *
423*5113495bSYour Name  * Return: 0 if event is sent successfully
424*5113495bSYour Name  */
425*5113495bSYour Name int wlan_son_deliver_rrm_rpt(struct wlan_objmgr_vdev *vdev,
426*5113495bSYour Name 			     uint8_t *addr,
427*5113495bSYour Name 			     uint8_t *frm,
428*5113495bSYour Name 			     uint32_t flen);
429*5113495bSYour Name /**
430*5113495bSYour Name  * wlan_son_anqp_frame() - notify son module of mgmt frames
431*5113495bSYour Name  * @vdev: vdev
432*5113495bSYour Name  * @subtype: frame subtype
433*5113495bSYour Name  * @frame: the 802.11 frame
434*5113495bSYour Name  * @frame_len: frame length
435*5113495bSYour Name  * @action_hdr: Action header of the frame
436*5113495bSYour Name  * @macaddr: source mac address
437*5113495bSYour Name  *
438*5113495bSYour Name  * Return: 0 if event is sent successfully
439*5113495bSYour Name  */
440*5113495bSYour Name int wlan_son_anqp_frame(struct wlan_objmgr_vdev *vdev, int subtype,
441*5113495bSYour Name 			uint8_t *frame, uint16_t frame_len, void *action_hdr,
442*5113495bSYour Name 			uint8_t *macaddr);
443*5113495bSYour Name 
444*5113495bSYour Name /**
445*5113495bSYour Name  * wlan_son_get_node_tx_power() - Gets the max transmit power for peer
446*5113495bSYour Name  * @assoc_req_ies: assoc req ies
447*5113495bSYour Name  *
448*5113495bSYour Name  * Return: Returns the max tx power
449*5113495bSYour Name  */
450*5113495bSYour Name uint8_t wlan_son_get_node_tx_power(struct element_info assoc_req_ies);
451*5113495bSYour Name 
452*5113495bSYour Name /**
453*5113495bSYour Name  * wlan_son_get_peer_rrm_info() - Get RRM info for peer
454*5113495bSYour Name  * @assoc_req_ies: assoc req ies
455*5113495bSYour Name  * @rrmcaps: rrm capabilities
456*5113495bSYour Name  * @is_beacon_meas_supported: if beacon meas is supported
457*5113495bSYour Name  *
458*5113495bSYour Name  * Return: Returns QDF_STATUS_SUCCESS if succeed
459*5113495bSYour Name  */
460*5113495bSYour Name QDF_STATUS wlan_son_get_peer_rrm_info(struct element_info assoc_req_ies,
461*5113495bSYour Name 				      uint8_t *rrmcaps,
462*5113495bSYour Name 				      bool *is_beacon_meas_supported);
463*5113495bSYour Name #else
464*5113495bSYour Name 
wlan_son_peer_is_kickout_allow(struct wlan_objmgr_vdev * vdev,uint8_t * macaddr)465*5113495bSYour Name static inline bool wlan_son_peer_is_kickout_allow(struct wlan_objmgr_vdev *vdev,
466*5113495bSYour Name 						  uint8_t *macaddr)
467*5113495bSYour Name {
468*5113495bSYour Name 	return true;
469*5113495bSYour Name }
470*5113495bSYour Name 
471*5113495bSYour Name static inline
wlan_son_ind_assoc_req_frm(struct wlan_objmgr_vdev * vdev,uint8_t * macaddr,bool is_reassoc,uint8_t * frame,uint16_t frame_len,QDF_STATUS status)472*5113495bSYour Name void wlan_son_ind_assoc_req_frm(struct wlan_objmgr_vdev *vdev,
473*5113495bSYour Name 				uint8_t *macaddr, bool is_reassoc,
474*5113495bSYour Name 				uint8_t *frame, uint16_t frame_len,
475*5113495bSYour Name 				QDF_STATUS status)
476*5113495bSYour Name {
477*5113495bSYour Name }
478*5113495bSYour Name 
479*5113495bSYour Name static inline
wlan_son_deliver_tx_power(struct wlan_objmgr_vdev * vdev,int32_t max_pwr)480*5113495bSYour Name int wlan_son_deliver_tx_power(struct wlan_objmgr_vdev *vdev,
481*5113495bSYour Name 			      int32_t max_pwr)
482*5113495bSYour Name {
483*5113495bSYour Name 	return -EINVAL;
484*5113495bSYour Name }
485*5113495bSYour Name 
486*5113495bSYour Name static inline
wlan_son_deliver_vdev_stop(struct wlan_objmgr_vdev * vdev)487*5113495bSYour Name int wlan_son_deliver_vdev_stop(struct wlan_objmgr_vdev *vdev)
488*5113495bSYour Name {
489*5113495bSYour Name 	return -EINVAL;
490*5113495bSYour Name }
491*5113495bSYour Name 
492*5113495bSYour Name static inline
wlan_son_deliver_inst_rssi(struct wlan_objmgr_vdev * vdev,struct wlan_objmgr_peer * peer,uint32_t irssi)493*5113495bSYour Name int wlan_son_deliver_inst_rssi(struct wlan_objmgr_vdev *vdev,
494*5113495bSYour Name 			       struct wlan_objmgr_peer *peer,
495*5113495bSYour Name 			       uint32_t irssi)
496*5113495bSYour Name {
497*5113495bSYour Name 	return -EINVAL;
498*5113495bSYour Name }
499*5113495bSYour Name 
500*5113495bSYour Name static inline
wlan_son_deliver_opmode(struct wlan_objmgr_vdev * vdev,uint8_t bw,uint8_t nss,uint8_t * addr)501*5113495bSYour Name int wlan_son_deliver_opmode(struct wlan_objmgr_vdev *vdev,
502*5113495bSYour Name 			    uint8_t bw,
503*5113495bSYour Name 			    uint8_t nss,
504*5113495bSYour Name 			    uint8_t *addr)
505*5113495bSYour Name {
506*5113495bSYour Name 	return -EINVAL;
507*5113495bSYour Name }
508*5113495bSYour Name 
509*5113495bSYour Name static inline
wlan_son_deliver_smps(struct wlan_objmgr_vdev * vdev,uint8_t is_static,uint8_t * addr)510*5113495bSYour Name int wlan_son_deliver_smps(struct wlan_objmgr_vdev *vdev,
511*5113495bSYour Name 			  uint8_t is_static,
512*5113495bSYour Name 			  uint8_t *addr)
513*5113495bSYour Name {
514*5113495bSYour Name 	return -EINVAL;
515*5113495bSYour Name }
516*5113495bSYour Name 
517*5113495bSYour Name static inline
wlan_son_deliver_rrm_rpt(struct wlan_objmgr_vdev * vdev,uint8_t * mac_addr,uint8_t * frm,uint32_t flen)518*5113495bSYour Name int wlan_son_deliver_rrm_rpt(struct wlan_objmgr_vdev *vdev,
519*5113495bSYour Name 			     uint8_t *mac_addr,
520*5113495bSYour Name 			     uint8_t *frm,
521*5113495bSYour Name 			     uint32_t flen)
522*5113495bSYour Name {
523*5113495bSYour Name 	return -EINVAL;
524*5113495bSYour Name }
525*5113495bSYour Name 
526*5113495bSYour Name static inline
wlan_son_anqp_frame(struct wlan_objmgr_vdev * vdev,int subtype,uint8_t * frame,uint16_t frame_len,void * action_hdr,uint8_t * macaddr)527*5113495bSYour Name int wlan_son_anqp_frame(struct wlan_objmgr_vdev *vdev, int subtype,
528*5113495bSYour Name 			uint8_t *frame, uint16_t frame_len, void *action_hdr,
529*5113495bSYour Name 			uint8_t *macaddr)
530*5113495bSYour Name {
531*5113495bSYour Name 	return -EINVAL;
532*5113495bSYour Name }
533*5113495bSYour Name 
534*5113495bSYour Name static inline
wlan_son_get_node_tx_power(struct element_info assoc_req_ies)535*5113495bSYour Name uint8_t wlan_son_get_node_tx_power(struct element_info assoc_req_ies)
536*5113495bSYour Name {
537*5113495bSYour Name 	return 0;
538*5113495bSYour Name }
539*5113495bSYour Name 
540*5113495bSYour Name static inline
wlan_son_get_peer_rrm_info(struct element_info assoc_req_ies,uint8_t * rrmcaps,bool * is_beacon_meas_supported)541*5113495bSYour Name QDF_STATUS wlan_son_get_peer_rrm_info(struct element_info assoc_req_ies,
542*5113495bSYour Name 				      uint8_t *rrmcaps,
543*5113495bSYour Name 				      bool *is_beacon_meas_supported)
544*5113495bSYour Name {
545*5113495bSYour Name 	return QDF_STATUS_E_INVAL;
546*5113495bSYour Name }
547*5113495bSYour Name #endif /*WLAN_FEATURE_SON*/
548*5113495bSYour Name #endif
549