blob: 041ee024e1a1956582e246b714076c356e8bf813 [file] [log] [blame]
Srinivas Pitlabe8dac42018-06-14 16:05:03 +05301/*
Srinivas Pitla0b50f122018-11-30 19:19:04 +05302 * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
Srinivas Pitlabe8dac42018-06-14 16:05:03 +05303 *
Srinivas Pitla39a92222018-10-05 10:52:48 +05304 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
Srinivas Pitlabe8dac42018-06-14 16:05:03 +05307 *
Srinivas Pitla39a92222018-10-05 10:52:48 +05308 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
Srinivas Pitlabe8dac42018-06-14 16:05:03 +053015 */
16
17/**
18 * DOC: Define VDEV MLME structure and APIs
19 */
20#ifndef _WLAN_VDEV_MLME_H_
21#define _WLAN_VDEV_MLME_H_
22
Naga916a4b12019-01-18 18:42:30 +053023#include <wlan_vdev_mgr_tgt_if_rx_defs.h>
Akshay Kosigi2f7256a2019-03-26 14:15:29 +053024#include <wlan_objmgr_vdev_obj.h>
25#include <wlan_vdev_mlme_api.h>
Himanshu Batra1b60b562019-05-31 11:50:10 +053026#include <wlan_ext_mlme_obj_types.h>
Naga916a4b12019-01-18 18:42:30 +053027
Srinivas Pitlabe8dac42018-06-14 16:05:03 +053028struct vdev_mlme_obj;
29
Naga916a4b12019-01-18 18:42:30 +053030/* Requestor ID for multiple vdev restart */
31#define MULTIPLE_VDEV_RESTART_REQ_ID 0x1234
32
33/* values for vdev_type */
34#define WLAN_VDEV_MLME_TYPE_AP 0x1
35#define WLAN_VDEV_MLME_TYPE_STA 0x2
36#define WLAN_VDEV_MLME_TYPE_IBSS 0x3
37#define WLAN_VDEV_MLME_TYPE_MONITOR 0x4
Abhishek Ambure21ff0a52019-05-06 17:44:05 +053038#define WLAN_VDEV_MLME_TYPE_NAN 0x5
39#define WLAN_VDEV_MLME_TYPE_OCB 0x6
40#define WLAN_VDEV_MLME_TYPE_NDI 0x7
Naga916a4b12019-01-18 18:42:30 +053041
42/* values for vdev_subtype */
43#define WLAN_VDEV_MLME_SUBTYPE_P2P_DEVICE 0x1
44#define WLAN_VDEV_MLME_SUBTYPE_P2P_CLIENT 0x2
45#define WLAN_VDEV_MLME_SUBTYPE_P2P_GO 0x3
46#define WLAN_VDEV_MLME_SUBTYPE_PROXY_STA 0x4
47#define WLAN_VDEV_MLME_SUBTYPE_MESH 0x5
sumedh baikady0876d022019-07-16 13:35:53 -070048#define WLAN_VDEV_MLME_SUBTYPE_MESH_11S 0x6
49#define WLAN_VDEV_MLME_SUBTYPE_SMART_MONITOR 0x7
50
Naga916a4b12019-01-18 18:42:30 +053051/* vdev control flags (per bits) */
52#define WLAN_VDEV_MLME_FLAGS_NON_MBSSID_AP 0x00000001
53#define WLAN_VDEV_MLME_FLAGS_TRANSMIT_AP 0x00000002
54#define WLAN_VDEV_MLME_FLAGS_NON_TRANSMIT_AP 0x00000004
55
Srinivas Pitlabe8dac42018-06-14 16:05:03 +053056/**
Naga916a4b12019-01-18 18:42:30 +053057 * struct vdev_mlme_proto_generic - generic mlme proto structure
58 * sent in frames
59 * @dtim_period: frequency of data transmissions per beacon 1-255
60 * @slot_time: slot time
61 * @protection_mode: rts cts protection mode
62 * @beacon_interval: beacon interval
63 * @ldpc: low density parity check value
64 * @nss: number of spatial stream
Akshay Kosigi1726ae22019-02-19 11:44:40 +053065 * @nss_2g: 2.4GHz number of spatial stream
66 * @nss_5g: 5GHz number of spatial stream
Naga916a4b12019-01-18 18:42:30 +053067 * @tsfadjust: adjusted timer sync value
68 */
69struct vdev_mlme_proto_generic {
70 uint8_t dtim_period;
71 uint32_t slot_time;
72 uint32_t protection_mode;
73 uint16_t beacon_interval;
74 uint8_t ldpc;
75 uint8_t nss;
Akshay Kosigi1726ae22019-02-19 11:44:40 +053076 uint8_t nss_2g;
77 uint8_t nss_5g;
Naga916a4b12019-01-18 18:42:30 +053078 uint64_t tsfadjust;
79};
80
81/**
82 * struct vdev_mlme_proto_ap - ap specific mlme protocol
83 * @.
84 */
85struct vdev_mlme_proto_ap {
86};
87
88/**
89 * struct vdev_mlme_proto_sta - sta specific mlme protocol
90 * @assoc_id: association id of station
91 * @uapsd_cfg: uapsd configuration
92 */
93struct vdev_mlme_proto_sta {
94 uint16_t assoc_id;
95 uint16_t uapsd_cfg;
96};
97
98/**
99 * struct vdev_mlme_proto_bss_color - bss color cfg
100 * @flags: proposed for future use cases, currently not used.
101 * @evt_type: bss color collision event.
102 * @current_bss_color: current bss color.
103 * @detection_period_ms: scan interval for both AP and STA mode.
104 * @scan_period_ms: scan period for passive scan to detect collision.
105 * @free_slot_expiry_time_ms: FW to notify host at timer expiry after
106 * which Host will disable the bss color.
107 */
108struct vdev_mlme_proto_bss_color {
109 uint32_t flags;
110 uint8_t evt_type;
111 uint32_t current_bss_color;
112 uint32_t detection_period_ms;
113 uint32_t scan_period_ms;
114 uint32_t free_slot_expiry_time_ms;
115};
116
117/**
118 * struct vdev_mlme_vht_info - vdev VHT information
119 * @caps: vht capabilities
120 * @subfer: su beam former capability
121 * @subfee: su beam formee capability
122 * @mubfer: mu beam former capability
123 * @mubfee: mu beam formee capability
124 * @implicit_bf: Implicit BF support
125 * @sounding_dimension: Beamformer number of sounding dimension
Nagadf242752019-03-09 08:22:20 +0530126 * @bfee_sts_cap: beam formee STA capability
Naga916a4b12019-01-18 18:42:30 +0530127 * @allow_vht: vht capability status
128 */
129struct vdev_mlme_vht_info {
130 uint32_t caps;
131 uint8_t subfer;
132 uint8_t mubfer;
133 uint8_t subfee;
134 uint8_t mubfee;
135 uint8_t implicit_bf;
136 uint8_t sounding_dimension;
Nagadf242752019-03-09 08:22:20 +0530137 uint8_t bfee_sts_cap;
Naga916a4b12019-01-18 18:42:30 +0530138 bool allow_vht;
139};
140
141/**
142 * struct vdev_mlme_ht_info - vdev HT information
143 * @ht_caps: HT capabilities
144 * @allow_ht: HT capability status
145 */
146struct vdev_mlme_ht_info {
147 uint32_t ht_caps;
148 bool allow_ht;
149};
150
151/**
152 * struct vdev_mlme_he_ops_info - vdev mlme HEOPS information
153 * @he_ops: he ops
154 */
155struct vdev_mlme_he_ops_info {
156 uint32_t he_ops;
157};
158
159/**
160 * struct vdev_mlme_he_ops_info - vdev protocol structure holding information
161 * that is used in frames
162 * @generic: generic protocol information
163 * @ap: ap specific protocol information
164 * @sta: sta specific protocol information
165 * @vht_info: vht information
166 * @ht_info: ht capabilities information
167 * @he_ops_info: he ops information
168 * @bss_color: 11ax HE BSS Color information
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530169 */
170struct vdev_mlme_proto {
Naga916a4b12019-01-18 18:42:30 +0530171 struct vdev_mlme_proto_generic generic;
172 struct vdev_mlme_proto_ap ap;
173 struct vdev_mlme_proto_sta sta;
174 struct vdev_mlme_vht_info vht_info;
175 struct vdev_mlme_ht_info ht_info;
176 struct vdev_mlme_he_ops_info he_ops_info;
177 struct vdev_mlme_proto_bss_color bss_color;
178};
179
180/**
181 * struct vdev_mlme_mgmt_generic - generic vdev mlme mgmt cfg
182 * @rts_threshold: RTS threshold
183 * @frag_threshold: Fragmentation threshold
184 * @probe_delay: time in msec for delaying to send first probe request
185 * @repeat_probe_time: probe request transmission time
186 * @drop_unencry: drop unencrypted status
187 * @ tx_pwrlimit: Tx power limit
188 * @tx_power: Tx power
189 * @minpower: Min power
190 * @maxpower: Max power
191 * @maxregpower: max regulatory power
192 * @antennamax: max antenna
Naga9dad9762019-03-27 12:37:39 +0530193 * @reg_class_id: reg domain class id
Naga916a4b12019-01-18 18:42:30 +0530194 * @ampdu: ampdu limit
195 * @amsdu: amsdu limit
196 * @ssid: service set identifier
197 * @ssid_len: ssid length
198 * @type: vdev type
199 * @sub_type: vdev subtype
200 * @rx_decap_type: rx decap type
201 * @tx_decap_type: tx decap type
202 * @disable_hw_ack: disable ha ack flag
Naga7dd88342019-02-05 22:34:24 +0530203 * @bssid: bssid
Naga9dad9762019-03-27 12:37:39 +0530204 * @phy_mode: phy mode
Naga916a4b12019-01-18 18:42:30 +0530205 */
206struct vdev_mlme_mgmt_generic {
207 uint32_t rts_threshold;
208 uint32_t frag_threshold;
209 uint32_t probe_delay;
210 uint32_t repeat_probe_time;
211 uint32_t drop_unencry;
212 uint32_t tx_pwrlimit;
213 uint8_t tx_power;
214 uint8_t minpower;
215 uint8_t maxpower;
216 uint8_t maxregpower;
217 uint8_t antennamax;
Naga9dad9762019-03-27 12:37:39 +0530218 uint8_t reg_class_id;
Naga916a4b12019-01-18 18:42:30 +0530219 uint8_t ampdu;
220 uint8_t amsdu;
221 char ssid[WLAN_SSID_MAX_LEN + 1];
222 uint8_t ssid_len;
223 uint8_t type;
224 uint8_t subtype;
225 uint8_t rx_decap_type;
226 uint8_t tx_decap_type;
227 bool disable_hw_ack;
Naga7dd88342019-02-05 22:34:24 +0530228 uint8_t bssid[QDF_MAC_ADDR_SIZE];
Naga5285b062019-03-05 22:47:18 +0530229 uint32_t phy_mode;
Naga916a4b12019-01-18 18:42:30 +0530230};
231
232/**
233 * struct vdev_mlme_mgmt_ap - ap specific vdev mlme mgmt cfg
234 * @.
235 */
236struct vdev_mlme_mgmt_ap {
237};
238
239/**
240 * struct vdev_mlme_mgmt_sta - sta specific vdev mlme mgmt cfg
241 * @.
242 */
243struct vdev_mlme_mgmt_sta {
244};
245
246/**
247 * struct vdev_mlme_inactivity_params - vdev mlme inactivity parameters
248 * @bmiss_first_bcnt: bmiss first time
249 * @bmiss_final_bcnt: bmiss final time
250 * @keepalive_min_idle_inactive_time_secs: min time AP consider STA to be
251 * inactive
252 * @keepalive_max_idle_inactive_time_secs: max inactive idle time for AP to send
253 * data-null
254 * @keepalive_max_unresponsive_time_secs: max time to send WMI_STA_KICKOUT
255 */
256struct vdev_mlme_inactivity_params {
257 uint32_t bmiss_first_bcnt;
258 uint32_t bmiss_final_bcnt;
259 uint32_t keepalive_min_idle_inactive_time_secs;
260 uint32_t keepalive_max_idle_inactive_time_secs;
261 uint32_t keepalive_max_unresponsive_time_secs;
262};
263
264/**
265 * struct vdev_mlme_rate_info - vdev mlme rate information
266 * @rate_flags: dynamic bandwidth info
267 * @per_band_tx_mgmt_rate: per band Tx mgmt rate
268 * @max_rate: max bandwidth rate
269 * @tx_mgmt_rate: Tx Mgmt rate
270 * @bcn_tx_rate: beacon Tx rate
271 * @type: Type of ratemask configuration
272 * @lower32: Lower 32 bits in the 1st 64-bit value
273 * @higher32: Higher 32 bits in the 1st 64-bit value
274 * @lower32_2: Lower 32 bits in the 2nd 64-bit value
275 * @half_rate: Half rate
276 * @quarter_rate: quarter rate
277 */
278struct vdev_mlme_rate_info {
279 uint32_t rate_flags;
280 uint32_t per_band_tx_mgmt_rate;
281 uint32_t max_rate;
282 uint32_t tx_mgmt_rate;
283 uint32_t bcn_tx_rate;
284 uint8_t type;
285 uint32_t lower32;
286 uint32_t higher32;
287 uint32_t lower32_2;
288 bool half_rate;
289 bool quarter_rate;
290};
291
292/**
293 * struct vdev_mlme_chainmask_info - vdev mlme chainmask information
294 * @tx_chainmask: Tx chainmask
295 * @rx_chainmask: Rx Chainmask
296 * @num_rx_chain: Num of bits set in Rx chain
297 * @num_tx_chain: Num of bits set in Tx chain
298 */
299struct vdev_mlme_chainmask_info {
300 uint8_t tx_chainmask;
301 uint8_t rx_chainmask;
302 uint8_t num_rx_chain;
303 uint8_t num_tx_chain;
304};
305
306/**
307 * struct vdev_mlme_powersave_info - vdev mlme powersave information
308 * @packet_powersave: packet powersave
309 * @max_li_of_moddtim: max mod dtim
310 * @dyndtim_cnt: dynamic dtim count
311 * @listen_interval: listen interval
312 * @moddtim_cnt: mod dtim count
313 */
314struct vdev_mlme_powersave_info {
315 uint32_t packet_powersave;
316 uint32_t max_li_of_moddtim;
317 uint32_t dyndtim_cnt;
318 uint32_t listen_interval;
319 uint32_t moddtim_cnt;
320};
321
322/**
323 * struct vdev_mlme_beacon_info - vdev mlme beacon information
324 * @beacon_buffer: buffer allocated for beacon frame
325 * @beacon_offsets: beacon IE's offsets
326 */
327struct vdev_mlme_beacon_info {
328 qdf_nbuf_t beacon_buffer;
329 void *beacon_offsets;
330};
331
332/**
333 * struct vdev_mlme_mbss_11ax - mbss 11ax fields required for up cmd
334 * @profile_idx: profile index of the connected non-trans ap (mbssid case).
335 * 0 means invalid.
336 * @profile_num: the total profile numbers of non-trans aps (mbssid
337 * case).
338 * 0 means non-MBSS AP.
339 * @mbssid-flags: MBSS IE flags indicating vdev type
340 * @vdevid_trans: id of transmitting vdev for MBSS IE
341 * @trans_bssid: bssid of transmitted AP (MBSS IE case)
342 */
343struct vdev_mlme_mbss_11ax {
344 uint32_t profile_idx;
345 uint32_t profile_num;
346 uint32_t mbssid_flags;
347 uint8_t vdevid_trans;
348 uint8_t trans_bssid[QDF_MAC_ADDR_SIZE];
349};
350
351/**
352 * struct vdev_mlme_mgmt - vdev mlme mgmt related cfg
353 * @generic: generic mgmt information
354 * @ap: ap specific mgmt information
355 * @sta: sta specific mgmt information
356 * @inactivity_params: inactivity parameters
357 * @rate_info: bandwidth rate information
358 * @chainmask_info: Chainmask information
359 * @powersave_info: Power save parameters
360 * @beacon_info: beacon buffer information
361 * @mbss_11ax: MBSS 11ax information
362 */
363struct vdev_mlme_mgmt {
364 struct vdev_mlme_mgmt_generic generic;
365 struct vdev_mlme_mgmt_ap ap;
366 struct vdev_mlme_mgmt_sta sta;
367 struct vdev_mlme_inactivity_params inactivity_params;
368 struct vdev_mlme_rate_info rate_info;
369 struct vdev_mlme_chainmask_info chainmask_info;
370 struct vdev_mlme_powersave_info powersave_info;
371 struct vdev_mlme_beacon_info beacon_info;
372 struct vdev_mlme_mbss_11ax mbss_11ax;
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530373};
374
375/**
376 * enum beacon_update_op - Beacon update op type
377 * @BEACON_INIT: Initialize beacon
378 * @BEACON_REINIT: Re-initialize beacon
379 * @BEACON_UPDATE: Update dynamic fields of beacon
380 * @BEACON_CSA: Enable CSA IE
381 * @BEACON_FREE: Beacon buffer free
382 */
383enum beacon_update_op {
384 BEACON_INIT,
385 BEACON_REINIT,
386 BEACON_UPDATE,
387 BEACON_CSA,
388 BEACON_FREE,
389};
390
391/**
Srinivas Pitla90713472018-08-06 17:09:48 +0530392 * enum vdev_cmd_type - Command type
393 * @START_REQ: Start request
394 * @RESTART_REQ: Restart request
Naga916a4b12019-01-18 18:42:30 +0530395 * @STOP_REQ: STOP request
396 * @DELETE_REQ: DELETE request
Srinivas Pitla90713472018-08-06 17:09:48 +0530397 */
398enum vdev_cmd_type {
399 START_REQ,
400 RESTART_REQ,
Naga916a4b12019-01-18 18:42:30 +0530401 STOP_REQ,
402 DELETE_REQ,
403};
404
405/**
Naga7dd88342019-02-05 22:34:24 +0530406 * enum vdev_start_resp_type - start respone type
407 * @START_RESPONSE: Start response
408 * @RESTART_RESPONSE: Restart response
409 */
410enum vdev_start_resp_type {
411 START_RESPONSE = 0,
412 RESTART_RESPONSE,
413};
414
415/**
Srinivas Pitla39a92222018-10-05 10:52:48 +0530416 * struct vdev_mlme_ops - VDEV MLME operation callbacks structure
Srinivas Pitla90713472018-08-06 17:09:48 +0530417 * @mlme_vdev_validate_basic_params: callback to validate VDEV basic params
418 * @mlme_vdev_reset_proto_params: callback to Reset protocol params
419 * @mlme_vdev_start_send: callback to initiate actions of VDEV
420 * MLME start operation
421 * @mlme_vdev_restart_send: callback to initiate actions of VDEV
422 * MLME restart operation
423 * @mlme_vdev_stop_start_send: callback to block start/restart VDEV
424 * request command
425 * @mlme_vdev_start_continue: callback to initiate operations on
426 * LMAC/FW start response
427 * @mlme_vdev_up_send: callback to initiate actions of VDEV
428 * MLME up operation
429 * @mlme_vdev_notify_up_complete: callback to notify VDEV MLME on moving
430 * to UP state
Sandeep Puligilla0a4d67b2018-10-19 15:32:08 -0700431 * @mlme_vdev_notify_roam_start: callback to initiate roaming
Srinivas Pitla90713472018-08-06 17:09:48 +0530432 * @mlme_vdev_update_beacon: callback to initiate beacon update
433 * @mlme_vdev_disconnect_peers: callback to initiate disconnection of
434 * peers
435 * @mlme_vdev_dfs_cac_timer_stop: callback to stop the DFS CAC timer
436 * @mlme_vdev_stop_send: callback to initiate actions of VDEV
437 * MLME stop operation
438 * @mlme_vdev_stop_continue: callback to initiate operations on
439 * LMAC/FW stop response
440 * @mlme_vdev_bss_peer_delete_continue: callback to initiate operations on BSS
441 * peer delete completion
442 * @mlme_vdev_down_send: callback to initiate actions of VDEV
443 * MLME down operation
Srinivas Pitlad9ad48d2019-02-26 11:08:23 +0530444 * @mlme_vdev_notify_start_state_exit: callback to notify on vdev start
445 * start state exit
Srinivas Pitla011b6762019-05-08 09:48:48 +0530446 * @mlme_vdev_is_newchan_no_cac: callback to check CAC is required
Naga39989092019-06-24 17:02:31 +0530447 * @mlme_vdev_ext_peer_delete_all_rsp: callback to initiate actions for
448 * vdev mlme peer delete all response
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530449 */
450struct vdev_mlme_ops {
451 QDF_STATUS (*mlme_vdev_validate_basic_params)(
Srinivas Pitla90713472018-08-06 17:09:48 +0530452 struct vdev_mlme_obj *vdev_mlme,
453 uint16_t event_data_len, void *event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530454 QDF_STATUS (*mlme_vdev_reset_proto_params)(
Srinivas Pitla90713472018-08-06 17:09:48 +0530455 struct vdev_mlme_obj *vdev_mlme,
456 uint16_t event_data_len, void *event_data);
457 QDF_STATUS (*mlme_vdev_start_send)(
458 struct vdev_mlme_obj *vdev_mlme,
459 uint16_t event_data_len, void *event_data);
460 QDF_STATUS (*mlme_vdev_restart_send)(
461 struct vdev_mlme_obj *vdev_mlme,
462 uint16_t event_data_len, void *event_data);
463 QDF_STATUS (*mlme_vdev_stop_start_send)(
464 struct vdev_mlme_obj *vdev_mlme,
465 enum vdev_cmd_type type,
466 uint16_t event_data_len, void *event_data);
467 QDF_STATUS (*mlme_vdev_start_continue)(
468 struct vdev_mlme_obj *vdev_mlme,
469 uint16_t event_data_len, void *event_data);
470 QDF_STATUS (*mlme_vdev_sta_conn_start)(
471 struct vdev_mlme_obj *vdev_mlme,
472 uint16_t event_data_len, void *event_data);
473 QDF_STATUS (*mlme_vdev_start_req_failed)(
474 struct vdev_mlme_obj *vdev_mlme,
475 uint16_t event_data_len, void *event_data);
476 QDF_STATUS (*mlme_vdev_up_send)(
477 struct vdev_mlme_obj *vdev_mlme,
478 uint16_t event_data_len, void *event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530479 QDF_STATUS (*mlme_vdev_notify_up_complete)(
Srinivas Pitla90713472018-08-06 17:09:48 +0530480 struct vdev_mlme_obj *vdev_mlme,
481 uint16_t event_data_len, void *event_data);
Sandeep Puligilla0a4d67b2018-10-19 15:32:08 -0700482 QDF_STATUS (*mlme_vdev_notify_roam_start)(
483 struct vdev_mlme_obj *vdev_mlme,
484 uint16_t event_data_len, void *event_data);
Srinivas Pitla90713472018-08-06 17:09:48 +0530485 QDF_STATUS (*mlme_vdev_update_beacon)(
486 struct vdev_mlme_obj *vdev_mlme,
487 enum beacon_update_op op,
488 uint16_t event_data_len, void *event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530489 QDF_STATUS (*mlme_vdev_disconnect_peers)(
Srinivas Pitla90713472018-08-06 17:09:48 +0530490 struct vdev_mlme_obj *vdev_mlme,
491 uint16_t event_data_len, void *event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530492 QDF_STATUS (*mlme_vdev_dfs_cac_timer_stop)(
Srinivas Pitla90713472018-08-06 17:09:48 +0530493 struct vdev_mlme_obj *vdev_mlme,
494 uint16_t event_data_len, void *event_data);
495 QDF_STATUS (*mlme_vdev_stop_send)(
496 struct vdev_mlme_obj *vdev_mlme,
497 uint16_t event_data_len, void *event_data);
498 QDF_STATUS (*mlme_vdev_stop_continue)(
499 struct vdev_mlme_obj *vdev_mlme,
500 uint16_t event_data_len, void *event_data);
501 QDF_STATUS (*mlme_vdev_down_send)(
502 struct vdev_mlme_obj *vdev_mlme,
503 uint16_t event_data_len, void *event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530504 QDF_STATUS (*mlme_vdev_notify_down_complete)(
Srinivas Pitla90713472018-08-06 17:09:48 +0530505 struct vdev_mlme_obj *vdev_mlme,
506 uint16_t event_data_len, void *event_data);
Naga916a4b12019-01-18 18:42:30 +0530507 QDF_STATUS (*mlme_vdev_ext_delete_rsp)(
508 struct vdev_mlme_obj *vdev_mlme,
509 struct vdev_delete_response *rsp);
510 QDF_STATUS (*mlme_vdev_ext_stop_rsp)(
511 struct vdev_mlme_obj *vdev_mlme,
512 struct vdev_stop_response *rsp);
513 QDF_STATUS (*mlme_vdev_ext_start_rsp)(
514 struct vdev_mlme_obj *vdev_mlme,
515 struct vdev_start_response *rsp);
Srinivas Pitlad9ad48d2019-02-26 11:08:23 +0530516 QDF_STATUS (*mlme_vdev_notify_start_state_exit)(
517 struct vdev_mlme_obj *vdev_mlme);
Srinivas Pitla011b6762019-05-08 09:48:48 +0530518 QDF_STATUS (*mlme_vdev_is_newchan_no_cac)(
519 struct vdev_mlme_obj *vdev_mlme);
Naga39989092019-06-24 17:02:31 +0530520 QDF_STATUS (*mlme_vdev_ext_peer_delete_all_rsp)(
521 struct vdev_mlme_obj *vdev_mlme,
522 struct peer_delete_all_response *rsp);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530523};
524
sandeep puligilla370e41c2019-04-12 16:07:24 -0700525#ifdef FEATURE_VDEV_RSP_WAKELOCK
526/**
527 * struct wlan_vdev_wakelock - vdev wake lock sub structure
528 * @start_wakelock: wakelock for vdev start
529 * @stop_wakelock: wakelock for vdev stop
530 * @delete_wakelock: wakelock for vdev delete
531 * @wmi_cmd_rsp_runtime_lock: run time lock
532 */
533struct vdev_mlme_wakelock {
534 qdf_wake_lock_t start_wakelock;
535 qdf_wake_lock_t stop_wakelock;
536 qdf_wake_lock_t delete_wakelock;
537 qdf_runtime_lock_t wmi_cmd_rsp_runtime_lock;
538};
539#endif
540
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530541/**
542 * struct vdev_mlme_obj - VDEV MLME component object
Naga916a4b12019-01-18 18:42:30 +0530543 * @proto: VDEV MLME proto substructure
544 * @mgmt: VDEV MLME mgmt substructure
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530545 * @sm_lock: VDEV SM lock
Srinivas Pitla1ff074c2018-12-05 18:08:20 +0530546 * @vdev_cmd_lock: VDEV MLME command atomicity
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530547 * @sm_hdl: VDEV SM handle
Naga916a4b12019-01-18 18:42:30 +0530548 * @vdev: Pointer to vdev objmgr
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530549 * @ops: VDEV MLME callback table
Srinivas Pitlad3a3c542018-12-03 17:36:47 +0530550 * @ext_vdev_ptr: VDEV MLME legacy pointer
Naga916a4b12019-01-18 18:42:30 +0530551 * @vdev_rt: VDEV response timer
sandeep puligilla370e41c2019-04-12 16:07:24 -0700552 * @vdev_wakelock: vdev wakelock sub structure
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530553 */
554struct vdev_mlme_obj {
Naga916a4b12019-01-18 18:42:30 +0530555 struct vdev_mlme_proto proto;
556 struct vdev_mlme_mgmt mgmt;
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530557#ifdef VDEV_SM_LOCK_SUPPORT
558 qdf_spinlock_t sm_lock;
Srinivas Pitla0b50f122018-11-30 19:19:04 +0530559 qdf_mutex_t vdev_cmd_lock;
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530560#endif
561 struct wlan_sm *sm_hdl;
562 struct wlan_objmgr_vdev *vdev;
563 struct vdev_mlme_ops *ops;
Himanshu Batra1b60b562019-05-31 11:50:10 +0530564 mlme_vdev_ext_t *ext_vdev_ptr;
Naga916a4b12019-01-18 18:42:30 +0530565 struct vdev_response_timer vdev_rt;
sandeep puligilla370e41c2019-04-12 16:07:24 -0700566#ifdef FEATURE_VDEV_RSP_WAKELOCK
567 struct vdev_mlme_wakelock vdev_wakelock;
568#endif
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530569};
570
571/**
572 * mlme_vdev_validate_basic_params - Validate basic params
573 * @vdev_mlme_obj: VDEV MLME comp object
Srinivas Pitla90713472018-08-06 17:09:48 +0530574 * @event_data_len: data size
575 * @event_data: event data
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530576 *
577 * API validate MLME VDEV basic parameters
578 *
579 * Return: SUCCESS on successful validation
580 * FAILURE, if any parameter is not initialized
581 */
582static inline QDF_STATUS mlme_vdev_validate_basic_params(
Srinivas Pitla90713472018-08-06 17:09:48 +0530583 struct vdev_mlme_obj *vdev_mlme,
584 uint16_t event_data_len, void *event_data)
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530585{
586 QDF_STATUS ret = QDF_STATUS_SUCCESS;
587
588 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_validate_basic_params)
589 ret = vdev_mlme->ops->mlme_vdev_validate_basic_params(
Srinivas Pitla90713472018-08-06 17:09:48 +0530590 vdev_mlme, event_data_len, event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530591
592 return ret;
593}
594
595/**
596 * mlme_vdev_reset_proto_params - Reset VDEV protocol params
597 * @vdev_mlme_obj: VDEV MLME comp object
Srinivas Pitla90713472018-08-06 17:09:48 +0530598 * @event_data_len: data size
599 * @event_data: event data
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530600 *
601 * API resets the protocol params fo vdev
602 *
603 * Return: SUCCESS on successful reset
604 * FAILURE, if it fails due to any
605 */
606static inline QDF_STATUS mlme_vdev_reset_proto_params(
Srinivas Pitla90713472018-08-06 17:09:48 +0530607 struct vdev_mlme_obj *vdev_mlme,
608 uint16_t event_data_len, void *event_data)
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530609{
610 QDF_STATUS ret = QDF_STATUS_SUCCESS;
611
612 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_reset_proto_params)
Srinivas Pitla90713472018-08-06 17:09:48 +0530613 ret = vdev_mlme->ops->mlme_vdev_reset_proto_params(
614 vdev_mlme, event_data_len, event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530615
616 return ret;
617}
618
619/**
620 * mlme_vdev_start_send - Invokes VDEV start operation
621 * @vdev_mlme_obj: VDEV MLME comp object
Srinivas Pitla90713472018-08-06 17:09:48 +0530622 * @event_data_len: data size
623 * @event_data: event data
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530624 *
625 * API invokes VDEV start operation
626 *
627 * Return: SUCCESS on successful completion of start operation
628 * FAILURE, if it fails due to any
629 */
Srinivas Pitla90713472018-08-06 17:09:48 +0530630static inline QDF_STATUS mlme_vdev_start_send(
631 struct vdev_mlme_obj *vdev_mlme,
632 uint16_t event_data_len, void *event_data)
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530633{
634 QDF_STATUS ret = QDF_STATUS_SUCCESS;
635
636 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_send)
Srinivas Pitla90713472018-08-06 17:09:48 +0530637 ret = vdev_mlme->ops->mlme_vdev_start_send(
638 vdev_mlme, event_data_len, event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530639
640 return ret;
641}
642
643/**
644 * mlme_vdev_restart_send - Invokes VDEV restart operation
645 * @vdev_mlme_obj: VDEV MLME comp object
Srinivas Pitla90713472018-08-06 17:09:48 +0530646 * @event_data_len: data size
647 * @event_data: event data
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530648 *
649 * API invokes VDEV restart operation
650 *
651 * Return: SUCCESS on successful completion of restart operation
652 * FAILURE, if it fails due to any
653 */
Srinivas Pitla90713472018-08-06 17:09:48 +0530654static inline QDF_STATUS mlme_vdev_restart_send(
655 struct vdev_mlme_obj *vdev_mlme,
656 uint16_t event_data_len, void *event_data)
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530657{
658 QDF_STATUS ret = QDF_STATUS_SUCCESS;
659
660 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_restart_send)
Srinivas Pitla90713472018-08-06 17:09:48 +0530661 ret = vdev_mlme->ops->mlme_vdev_restart_send(
662 vdev_mlme, event_data_len, event_data);
663
664 return ret;
665}
666
667/**
668 * mlme_vdev_stop_start_send - Invoke block VDEV restart operation
669 * @vdev_mlme_obj: VDEV MLME comp object
670 * @restart: restart req/start req
671 * @event_data_len: data size
672 * @event_data: event data
673 *
674 * API invokes stops pending VDEV restart operation
675 *
676 * Return: SUCCESS alsways
677 */
678static inline QDF_STATUS mlme_vdev_stop_start_send(
679 struct vdev_mlme_obj *vdev_mlme,
680 uint8_t restart,
681 uint16_t event_data_len, void *event_data)
682{
683 QDF_STATUS ret = QDF_STATUS_SUCCESS;
684
685 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_start_send)
686 ret = vdev_mlme->ops->mlme_vdev_stop_start_send(
687 vdev_mlme, restart, event_data_len, event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530688
689 return ret;
690}
691
692/**
693 * mlme_vdev_start_continue - VDEV start response handling
694 * @vdev_mlme_obj: VDEV MLME comp object
Srinivas Pitla90713472018-08-06 17:09:48 +0530695 * @event_data_len: data size
696 * @event_data: event data
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530697 *
698 * API invokes VDEV start response actions
699 *
700 * Return: SUCCESS on successful completion of start response operation
701 * FAILURE, if it fails due to any
702 */
703static inline QDF_STATUS mlme_vdev_start_continue(
Srinivas Pitla90713472018-08-06 17:09:48 +0530704 struct vdev_mlme_obj *vdev_mlme,
705 uint16_t event_data_len, void *event_data)
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530706{
707 QDF_STATUS ret = QDF_STATUS_SUCCESS;
708
709 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_continue)
Srinivas Pitla90713472018-08-06 17:09:48 +0530710 ret = vdev_mlme->ops->mlme_vdev_start_continue(
711 vdev_mlme, event_data_len, event_data);
712
713 return ret;
714}
715
716/**
717 * mlme_vdev_start_req_failed - Invoke Station VDEV connection, if it pause
718 * @vdev_mlme_obj: VDEV MLME comp object
719 * @event_data_len: data size
720 * @event_data: event data
721 *
722 * API invokes on START fail response
723 *
724 * Return: SUCCESS on successful invocation of callback
725 * FAILURE, if it fails due to any
726 */
727static inline QDF_STATUS mlme_vdev_start_req_failed(
728 struct vdev_mlme_obj *vdev_mlme,
729 uint16_t event_data_len, void *event_data)
730{
731 QDF_STATUS ret = QDF_STATUS_SUCCESS;
732
733 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_req_failed)
734 ret = vdev_mlme->ops->mlme_vdev_start_req_failed(
735 vdev_mlme, event_data_len, event_data);
736
737 return ret;
738}
739
740/**
741 * mlme_vdev_sta_conn_start - Invoke Station VDEV connection, if it pause
742 * @vdev_mlme_obj: VDEV MLME comp object
743 * @event_data_len: data size
744 * @event_data: event data
745 *
746 * API invokes connection SM to start station connection
747 *
748 * Return: SUCCESS on successful invocation of connection sm
749 * FAILURE, if it fails due to any
750 */
751static inline QDF_STATUS mlme_vdev_sta_conn_start(
752 struct vdev_mlme_obj *vdev_mlme,
753 uint16_t event_data_len, void *event_data)
754{
755 QDF_STATUS ret = QDF_STATUS_SUCCESS;
756
757 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_sta_conn_start)
758 ret = vdev_mlme->ops->mlme_vdev_sta_conn_start(
759 vdev_mlme, event_data_len, event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530760
761 return ret;
762}
763
764/**
765 * mlme_vdev_up_send - VDEV up operation
766 * @vdev_mlme_obj: VDEV MLME comp object
Srinivas Pitla90713472018-08-06 17:09:48 +0530767 * @event_data_len: data size
768 * @event_data: event data
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530769 *
770 * API invokes VDEV up operations
771 *
772 * Return: SUCCESS on successful completion of up operation
773 * FAILURE, if it fails due to any
774 */
Srinivas Pitla90713472018-08-06 17:09:48 +0530775static inline QDF_STATUS mlme_vdev_up_send(
776 struct vdev_mlme_obj *vdev_mlme,
777 uint16_t event_data_len, void *event_data)
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530778{
779 QDF_STATUS ret = QDF_STATUS_SUCCESS;
780
781 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_up_send)
Srinivas Pitla90713472018-08-06 17:09:48 +0530782 ret = vdev_mlme->ops->mlme_vdev_up_send(
783 vdev_mlme, event_data_len, event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530784
785 return ret;
786}
787
788/**
789 * mlme_vdev_notify_up_complete - VDEV up state transition notification
790 * @vdev_mlme_obj: VDEV MLME comp object
Srinivas Pitla90713472018-08-06 17:09:48 +0530791 * @event_data_len: data size
792 * @event_data: event data
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530793 *
794 * API notifies MLME on moving to UP state
795 *
796 * Return: SUCCESS on successful completion of up notification
797 * FAILURE, if it fails due to any
798 */
Sandeep Puligilla0a4d67b2018-10-19 15:32:08 -0700799static inline
800QDF_STATUS mlme_vdev_notify_up_complete(struct vdev_mlme_obj *vdev_mlme,
Srinivas Pitla39a92222018-10-05 10:52:48 +0530801 uint16_t event_data_len,
802 void *event_data)
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530803{
804 QDF_STATUS ret = QDF_STATUS_SUCCESS;
805
Sandeep Puligilla0a4d67b2018-10-19 15:32:08 -0700806 if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_notify_up_complete)
Srinivas Pitla90713472018-08-06 17:09:48 +0530807 ret = vdev_mlme->ops->mlme_vdev_notify_up_complete(
808 vdev_mlme, event_data_len, event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530809
810 return ret;
811}
812
813/**
Sandeep Puligilla0a4d67b2018-10-19 15:32:08 -0700814 * mlme_vdev_notify_roam_start - VDEV Roaming notification
815 * @vdev_mlme_obj: VDEV MLME comp object
816 * @event_len: data size
817 * @event_data: event data
818 *
819 * API notifies MLME on roaming
820 *
821 * Return: SUCCESS on successful completion of up notification
822 * FAILURE, if it fails due to any
823 */
824static inline
825QDF_STATUS mlme_vdev_notify_roam_start(struct vdev_mlme_obj *vdev_mlme,
826 uint16_t event_len, void *event_data)
827{
828 QDF_STATUS ret = QDF_STATUS_SUCCESS;
829
830 if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_notify_roam_start)
831 ret = vdev_mlme->ops->mlme_vdev_notify_roam_start(vdev_mlme,
832 event_len,
833 event_data);
834
835 return ret;
836}
837
838/**
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530839 * mlme_vdev_update_beacon - Updates beacon
840 * @vdev_mlme_obj: VDEV MLME comp object
841 * @op: beacon update type
Srinivas Pitla90713472018-08-06 17:09:48 +0530842 * @event_data_len: data size
843 * @event_data: event data
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530844 *
845 * API updates/allocates/frees the beacon
846 *
847 * Return: SUCCESS on successful update of beacon
848 * FAILURE, if it fails due to any
849 */
Sandeep Puligilla0a4d67b2018-10-19 15:32:08 -0700850static inline
851QDF_STATUS mlme_vdev_update_beacon(struct vdev_mlme_obj *vdev_mlme,
852 enum beacon_update_op op,
853 uint16_t event_data_len, void *event_data)
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530854{
855 QDF_STATUS ret = QDF_STATUS_SUCCESS;
856
Sandeep Puligilla0a4d67b2018-10-19 15:32:08 -0700857 if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_update_beacon)
Srinivas Pitla90713472018-08-06 17:09:48 +0530858 ret = vdev_mlme->ops->mlme_vdev_update_beacon(vdev_mlme, op,
859 event_data_len, event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530860
861 return ret;
862}
863
864/**
865 * mlme_vdev_disconnect_peers - Disconnect peers
866 * @vdev_mlme_obj: VDEV MLME comp object
Srinivas Pitla90713472018-08-06 17:09:48 +0530867 * @event_data_len: data size
868 * @event_data: event data
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530869 *
870 * API trigger stations disconnection with AP VDEV or AP disconnection with STA
871 * VDEV
872 *
873 * Return: SUCCESS on successful invocation of station disconnection
874 * FAILURE, if it fails due to any
875 */
876static inline QDF_STATUS mlme_vdev_disconnect_peers(
Srinivas Pitla90713472018-08-06 17:09:48 +0530877 struct vdev_mlme_obj *vdev_mlme,
878 uint16_t event_data_len, void *event_data)
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530879{
880 QDF_STATUS ret = QDF_STATUS_SUCCESS;
881
882 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_disconnect_peers)
Srinivas Pitla90713472018-08-06 17:09:48 +0530883 ret = vdev_mlme->ops->mlme_vdev_disconnect_peers(
884 vdev_mlme, event_data_len, event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530885
886 return ret;
887}
888
889/**
890 * mlme_vdev_dfs_cac_timer_stop - Stop CAC timer
891 * @vdev_mlme_obj: VDEV MLME comp object
Srinivas Pitla90713472018-08-06 17:09:48 +0530892 * @event_data_len: data size
893 * @event_data: event data
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530894 *
895 * API stops the CAC timer through DFS API
896 *
897 * Return: SUCCESS on successful CAC timer stop
898 * FAILURE, if it fails due to any
899 */
900static inline QDF_STATUS mlme_vdev_dfs_cac_timer_stop(
Srinivas Pitla90713472018-08-06 17:09:48 +0530901 struct vdev_mlme_obj *vdev_mlme,
902 uint16_t event_data_len, void *event_data)
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530903{
904 QDF_STATUS ret = QDF_STATUS_SUCCESS;
905
906 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop)
Srinivas Pitla90713472018-08-06 17:09:48 +0530907 ret = vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop(
908 vdev_mlme, event_data_len, event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530909
910 return ret;
911}
912
913/**
914 * mlme_vdev_stop_send - Invokes VDEV stop operation
915 * @vdev_mlme_obj: VDEV MLME comp object
Srinivas Pitla90713472018-08-06 17:09:48 +0530916 * @event_data_len: data size
917 * @event_data: event data
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530918 *
919 * API invokes VDEV stop operation
920 *
921 * Return: SUCCESS on successful completion of stop operation
922 * FAILURE, if it fails due to any
923 */
Srinivas Pitla90713472018-08-06 17:09:48 +0530924static inline QDF_STATUS mlme_vdev_stop_send(
925 struct vdev_mlme_obj *vdev_mlme,
926 uint16_t event_data_len, void *event_data)
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530927{
928 QDF_STATUS ret = QDF_STATUS_SUCCESS;
929
930 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_send)
Srinivas Pitla90713472018-08-06 17:09:48 +0530931 ret = vdev_mlme->ops->mlme_vdev_stop_send(
932 vdev_mlme, event_data_len, event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530933
934 return ret;
935}
936
937/**
938 * mlme_vdev_stop_continue - VDEV stop response handling
939 * @vdev_mlme_obj: VDEV MLME comp object
Srinivas Pitla90713472018-08-06 17:09:48 +0530940 * @event_data_len: data size
941 * @event_data: event data
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530942 *
943 * API invokes VDEV stop response actions
944 *
945 * Return: SUCCESS on successful completion of stop response operation
946 * FAILURE, if it fails due to any
947 */
948static inline QDF_STATUS mlme_vdev_stop_continue(
Srinivas Pitla90713472018-08-06 17:09:48 +0530949 struct vdev_mlme_obj *vdev_mlme,
950 uint16_t event_data_len, void *event_data)
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530951{
952 QDF_STATUS ret = QDF_STATUS_SUCCESS;
953
954 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_continue)
Srinivas Pitla90713472018-08-06 17:09:48 +0530955 ret = vdev_mlme->ops->mlme_vdev_stop_continue(vdev_mlme,
956 event_data_len,
957 event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530958
959 return ret;
960}
961
962/**
963 * mlme_vdev_down_send - VDEV down operation
964 * @vdev_mlme_obj: VDEV MLME comp object
Srinivas Pitla90713472018-08-06 17:09:48 +0530965 * @event_data_len: data size
966 * @event_data: event data
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530967 *
968 * API invokes VDEV down operation
969 *
970 * Return: SUCCESS on successful completion of VDEV down operation
971 * FAILURE, if it fails due to any
972 */
Srinivas Pitla90713472018-08-06 17:09:48 +0530973static inline QDF_STATUS mlme_vdev_down_send(
974 struct vdev_mlme_obj *vdev_mlme,
975 uint16_t event_data_len, void *event_data)
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530976{
977 QDF_STATUS ret = QDF_STATUS_SUCCESS;
978
979 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_down_send)
Srinivas Pitla90713472018-08-06 17:09:48 +0530980 ret = vdev_mlme->ops->mlme_vdev_down_send(
981 vdev_mlme, event_data_len, event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530982
983 return ret;
984}
985
986/**
987 * mlme_vdev_notify_down_complete - VDEV init state transition notification
988 * @vdev_mlme_obj: VDEV MLME comp object
Srinivas Pitla90713472018-08-06 17:09:48 +0530989 * @event_data_len: data size
990 * @event_data: event data
Srinivas Pitlabe8dac42018-06-14 16:05:03 +0530991 *
992 * API notifies MLME on moving to INIT state
993 *
994 * Return: SUCCESS on successful completion of down notification
995 * FAILURE, if it fails due to any
996 */
997static inline QDF_STATUS mlme_vdev_notify_down_complete(
Srinivas Pitla90713472018-08-06 17:09:48 +0530998 struct vdev_mlme_obj *vdev_mlme,
999 uint16_t event_data_len, void *event_data)
Srinivas Pitlabe8dac42018-06-14 16:05:03 +05301000{
1001 QDF_STATUS ret = QDF_STATUS_SUCCESS;
1002
1003 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_notify_down_complete)
Srinivas Pitla90713472018-08-06 17:09:48 +05301004 ret = vdev_mlme->ops->mlme_vdev_notify_down_complete(
1005 vdev_mlme, event_data_len, event_data);
Srinivas Pitlabe8dac42018-06-14 16:05:03 +05301006
1007 return ret;
1008}
1009
Srinivas Pitlad9ad48d2019-02-26 11:08:23 +05301010/**
1011 * mlme_vdev_notify_start_state_exit - VDEV SM start state exit notification
1012 * @vdev_mlme_obj: VDEV MLME comp object
1013 *
1014 * API notifies on start state exit
1015 *
1016 * Return: SUCCESS on successful completion of notification
1017 * FAILURE, if it fails due to any
1018 */
1019static inline QDF_STATUS mlme_vdev_notify_start_state_exit(
1020 struct vdev_mlme_obj *vdev_mlme)
1021{
1022 QDF_STATUS ret = QDF_STATUS_SUCCESS;
1023
1024 if ((vdev_mlme->ops) &&
1025 vdev_mlme->ops->mlme_vdev_notify_start_state_exit)
1026 ret = vdev_mlme->ops->mlme_vdev_notify_start_state_exit(
1027 vdev_mlme);
1028
1029 return ret;
1030}
Akshay Kosigi2f7256a2019-03-26 14:15:29 +05301031
Srinivas Pitla011b6762019-05-08 09:48:48 +05301032/**
1033 * mlme_vdev_is_newchan_no_cac - Checks new channel requires CAC
1034 * @vdev_mlme_obj: VDEV MLME comp object
1035 *
1036 * API checks whether Channel needs CAC period,
1037 * if yes, it moves to SUSPEND_RESTART to disconnect stations before
1038 * sending RESTART to FW, otherwise, it moves to RESTART_PROGRESS substate
1039 *
1040 * Return: SUCCESS to move to RESTART_PROGRESS substate
1041 * FAILURE, move to SUSPEND_RESTART state
1042 */
1043static inline QDF_STATUS mlme_vdev_is_newchan_no_cac(
1044 struct vdev_mlme_obj *vdev_mlme)
1045{
1046 QDF_STATUS ret = QDF_STATUS_SUCCESS;
1047
1048 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_is_newchan_no_cac)
1049 ret = vdev_mlme->ops->mlme_vdev_is_newchan_no_cac(vdev_mlme);
1050
1051 return ret;
1052}
1053
Akshay Kosigi2f7256a2019-03-26 14:15:29 +05301054#ifdef CMN_VDEV_MGR_TGT_IF_ENABLE
1055/**
1056 * wlan_vdev_mlme_set_ssid() - set ssid
1057 * @vdev: VDEV object
1058 * @ssid: SSID (input)
1059 * @ssid_len: Length of SSID
1060 *
1061 * API to set the SSID of VDEV
1062 *
1063 * Caller need to acquire lock with wlan_vdev_obj_lock()
1064 *
1065 * Return: SUCCESS, if update is done
1066 * FAILURE, if ssid length is > max ssid len
1067 */
1068static inline QDF_STATUS wlan_vdev_mlme_set_ssid(
1069 struct wlan_objmgr_vdev *vdev,
1070 const uint8_t *ssid, uint8_t ssid_len)
1071{
1072 struct vdev_mlme_obj *vdev_mlme;
1073
1074 /* This API is invoked with lock acquired, do not add log prints */
1075 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1076 if (!vdev_mlme)
1077 return QDF_STATUS_E_FAILURE;
1078
1079 if (ssid_len <= WLAN_SSID_MAX_LEN) {
1080 qdf_mem_copy(vdev_mlme->mgmt.generic.ssid, ssid, ssid_len);
1081 vdev_mlme->mgmt.generic.ssid_len = ssid_len;
1082 } else {
1083 vdev_mlme->mgmt.generic.ssid_len = 0;
1084 return QDF_STATUS_E_FAILURE;
1085 }
1086 return QDF_STATUS_SUCCESS;
1087}
1088
1089/**
1090 * wlan_vdev_mlme_get_ssid() - get ssid
1091 * @vdev: VDEV object
1092 * @ssid: SSID
1093 * @ssid_len: Length of SSID
1094 *
1095 * API to get the SSID of VDEV, it updates the SSID and its length
1096 * in @ssid, @ssid_len respectively
1097 *
1098 * Caller need to acquire lock with wlan_vdev_obj_lock()
1099 *
1100 * Return: SUCCESS, if update is done
1101 * FAILURE, if ssid length is > max ssid len
1102 */
1103static inline QDF_STATUS wlan_vdev_mlme_get_ssid(
1104 struct wlan_objmgr_vdev *vdev,
1105 uint8_t *ssid, uint8_t *ssid_len)
1106{
1107 struct vdev_mlme_obj *vdev_mlme;
1108
1109 /* This API is invoked with lock acquired, do not add log prints */
1110 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1111 if (!vdev_mlme)
1112 return QDF_STATUS_E_FAILURE;
1113
1114 if (vdev_mlme->mgmt.generic.ssid_len > 0) {
1115 *ssid_len = vdev_mlme->mgmt.generic.ssid_len;
1116 qdf_mem_copy(ssid, vdev_mlme->mgmt.generic.ssid, *ssid_len);
1117 } else {
1118 *ssid_len = 0;
1119 return QDF_STATUS_E_FAILURE;
1120 }
1121 return QDF_STATUS_SUCCESS;
1122}
1123
1124/**
1125 * wlan_vdev_mlme_set_nss() - set NSS
1126 * @vdev: VDEV object
1127 * @nss: nss configured by user
1128 *
1129 * API to set the Number of Spatial streams
1130 *
1131 * Return: void
1132 */
1133static inline void wlan_vdev_mlme_set_nss(
1134 struct wlan_objmgr_vdev *vdev,
1135 uint8_t nss)
1136{
1137 struct vdev_mlme_obj *vdev_mlme;
1138
1139 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1140 if (!vdev_mlme)
1141 return;
1142
1143 vdev_mlme->proto.generic.nss = nss;
1144}
1145
1146/**
1147 * wlan_vdev_mlme_get_nss() - get NSS
1148 * @vdev: VDEV object
1149 *
1150 * API to get the Number of Spatial Streams
1151 *
1152 * Return:
1153 * @nss: nss value
1154 */
1155static inline uint8_t wlan_vdev_mlme_get_nss(
1156 struct wlan_objmgr_vdev *vdev)
1157{
1158 struct vdev_mlme_obj *vdev_mlme;
1159
1160 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1161 if (!vdev_mlme)
1162 return 0;
1163
1164 return vdev_mlme->proto.generic.nss;
1165}
1166
1167/**
1168 * wlan_vdev_mlme_set_txchainmask() - set Tx chainmask
1169 * @vdev: VDEV object
1170 * @chainmask : chainmask either configured by user or max supported
1171 *
1172 * API to set the Tx chainmask
1173 *
1174 * Return: void
1175 */
1176static inline void wlan_vdev_mlme_set_txchainmask(
1177 struct wlan_objmgr_vdev *vdev,
1178 uint8_t chainmask)
1179{
1180 struct vdev_mlme_obj *vdev_mlme;
1181
1182 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1183
1184 if (!vdev_mlme)
1185 return;
1186
1187 vdev_mlme->mgmt.chainmask_info.tx_chainmask = chainmask;
1188}
1189
1190/**
1191 * wlan_vdev_mlme_get_txchainmask() - get Tx chainmask
1192 * @vdev: VDEV object
1193 *
1194 * API to get the Tx chainmask
1195 *
1196 * Return:
1197 * @chainmask : Tx chainmask either configured by user or max supported
1198 */
1199static inline uint8_t wlan_vdev_mlme_get_txchainmask(
1200 struct wlan_objmgr_vdev *vdev)
1201{
1202 struct vdev_mlme_obj *vdev_mlme;
1203
1204 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1205 if (!vdev_mlme)
1206 return 0;
1207
1208 return vdev_mlme->mgmt.chainmask_info.tx_chainmask;
1209}
1210
1211/**
1212 * wlan_vdev_mlme_set_rxchainmask() - set Rx chainmask
1213 * @vdev: VDEV object
1214 * @chainmask : Rx chainmask either configured by user or max supported
1215 *
1216 * API to set the Rx chainmask
1217 *
1218 * Return: void
1219 */
1220static inline void wlan_vdev_mlme_set_rxchainmask(
1221 struct wlan_objmgr_vdev *vdev,
1222 uint8_t chainmask)
1223{
1224 struct vdev_mlme_obj *vdev_mlme;
1225
1226 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1227 if (!vdev_mlme)
1228 return;
1229
1230 vdev_mlme->mgmt.chainmask_info.rx_chainmask = chainmask;
1231}
1232
1233/**
1234 * wlan_vdev_mlme_get_rxchainmask() - get Rx chainmask
1235 * @vdev: VDEV object
1236 *
1237 * API to get the Rx chainmask
1238 *
1239 * Return:
1240 * @chainmask : Rx chainmask either configured by user or max supported
1241 */
1242static inline uint8_t wlan_vdev_mlme_get_rxchainmask(
1243 struct wlan_objmgr_vdev *vdev)
1244{
1245 struct vdev_mlme_obj *vdev_mlme;
1246
1247 /* This API is invoked with lock acquired, do not add log prints */
1248 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1249 if (!vdev_mlme)
1250 return 0;
1251
1252 return vdev_mlme->mgmt.chainmask_info.rx_chainmask;
1253}
1254
1255/**
1256 * wlan_vdev_mlme_set_txpower() - set tx power
1257 * @vdev: VDEV object
1258 * @txpow: tx power either configured by used or max allowed
1259 *
1260 * API to set the tx power
1261 *
1262 * Return: void
1263 */
1264static inline void wlan_vdev_mlme_set_txpower(
1265 struct wlan_objmgr_vdev *vdev,
1266 uint8_t txpow)
1267{
1268 struct vdev_mlme_obj *vdev_mlme;
1269
1270 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1271 if (!vdev_mlme)
1272 return;
1273
1274 vdev_mlme->mgmt.generic.tx_power = txpow;
1275}
1276
1277/**
1278 * wlan_vdev_mlme_get_txpower() - get tx power
1279 * @vdev: VDEV object
1280 *
1281 * API to get the tx power
1282 *
1283 * Return:
1284 * @txpow: tx power either configured by used or max allowed
1285 */
1286static inline uint8_t wlan_vdev_mlme_get_txpower(
1287 struct wlan_objmgr_vdev *vdev)
1288{
1289 struct vdev_mlme_obj *vdev_mlme;
1290
1291 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1292 if (!vdev_mlme)
1293 return 0;
1294
1295 return vdev_mlme->mgmt.generic.tx_power;
1296}
1297
1298/**
1299 * wlan_vdev_mlme_set_maxrate() - set max rate
1300 * @vdev: VDEV object
1301 * @maxrate: configured by used or based on configured mode
1302 *
1303 * API to set the max rate the vdev supports
1304 *
1305 * Return: void
1306 */
1307static inline void wlan_vdev_mlme_set_maxrate(
1308 struct wlan_objmgr_vdev *vdev,
1309 uint32_t maxrate)
1310{
1311 struct vdev_mlme_obj *vdev_mlme;
1312
1313 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1314 if (!vdev_mlme)
1315 return;
1316
1317 vdev_mlme->mgmt.rate_info.max_rate = maxrate;
1318}
1319
1320/**
1321 * wlan_vdev_mlme_get_maxrate() - get max rate
1322 * @vdev: VDEV object
1323 *
1324 * API to get the max rate the vdev supports
1325 *
1326 * Return:
1327 * @maxrate: configured by used or based on configured mode
1328 */
1329static inline uint32_t wlan_vdev_mlme_get_maxrate(
1330 struct wlan_objmgr_vdev *vdev)
1331{
1332 struct vdev_mlme_obj *vdev_mlme;
1333
1334 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1335 if (!vdev_mlme)
1336 return 0;
1337
1338 return vdev_mlme->mgmt.rate_info.max_rate;
1339}
1340
1341/**
1342 * wlan_vdev_mlme_set_txmgmtrate() - set txmgmtrate
1343 * @vdev: VDEV object
1344 * @txmgmtrate: Tx Mgmt rate
1345 *
1346 * API to set Mgmt Tx rate
1347 *
1348 * Return: void
1349 */
1350static inline void wlan_vdev_mlme_set_txmgmtrate(
1351 struct wlan_objmgr_vdev *vdev,
1352 uint32_t txmgmtrate)
1353{
1354 struct vdev_mlme_obj *vdev_mlme;
1355
1356 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1357 if (!vdev_mlme)
1358 return;
1359
1360 vdev_mlme->mgmt.rate_info.tx_mgmt_rate = txmgmtrate;
1361}
1362
1363/**
1364 * wlan_vdev_mlme_get_txmgmtrate() - get txmgmtrate
1365 * @vdev: VDEV object
1366 *
1367 * API to get Mgmt Tx rate
1368 *
1369 * Return:
1370 * @txmgmtrate: Tx Mgmt rate
1371 */
1372static inline uint32_t wlan_vdev_mlme_get_txmgmtrate(
1373 struct wlan_objmgr_vdev *vdev)
1374{
1375 struct vdev_mlme_obj *vdev_mlme;
1376
1377 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
1378 if (!vdev_mlme)
1379 return 0;
1380
1381 return vdev_mlme->mgmt.rate_info.tx_mgmt_rate;
1382}
1383#endif /* CMN_VDEV_MGR_TGT_IF_ENABLE */
Srinivas Pitlabe8dac42018-06-14 16:05:03 +05301384#endif