xref: /wlan-dirver/qca-wifi-host-cmn/umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h (revision dce49ecf59c14c92bd781c4b572279dfb68173a3)
1 /*
2  * Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18  /**
19   * DOC: Define the vdev data structure of UMAC
20   */
21 #ifndef _WLAN_OBJMGR_VDEV_OBJ_H_
22 #define _WLAN_OBJMGR_VDEV_OBJ_H_
23 	/* CONF: privacy enabled */
24 #define WLAN_VDEV_F_PRIVACY              0x00000001
25 	/* CONF: 11g w/o 11b sta's */
26 #define WLAN_VDEV_F_PUREG                0x00000002
27 	/* CONF: des_bssid is set */
28 #define WLAN_VDEV_F_DESBSSID             0x00000004
29 	/* CONF: bg scan enabled */
30 #define WLAN_VDEV_F_BGSCAN               0x00000008
31 	/* CONF: sw tx retry enabled */
32 #define WLAN_VDEV_F_SWRETRY              0x00000010
33 	/* STATUS: update beacon tim */
34 #define WLAN_VDEV_F_TIMUPDATE            0x00000020
35 	/* CONF: WPA enabled */
36 #define WLAN_VDEV_F_WPA1                 0x00000040
37 	/* CONF: WPA2 enabled */
38 #define WLAN_VDEV_F_WPA2                 0x00000080
39 	/* CONF: WPA/WPA2 enabled */
40 #define WLAN_VDEV_F_WPA                  0x000000c0
41 	/* CONF: drop unencrypted */
42 #define WLAN_VDEV_F_DROPUNENC            0x00000100
43 	/* CONF: TKIP countermeasures */
44 #define WLAN_VDEV_F_COUNTERM             0x00000200
45 	/* CONF: hide SSID in beacon */  /*TODO PDEV/PSOC */
46 #define WLAN_VDEV_F_HIDESSID             0x00000400
47 	/* CONF: disable internal bridge */ /*TODO PDEV/PSOC */
48 #define WLAN_VDEV_F_NOBRIDGE             0x00000800
49 	/* STATUS: update beacon wme */
50 #define WLAN_VDEV_F_WMEUPDATE            0x00001000
51 	/* CONF: 4 addr allowed */
52 #define WLAN_VDEV_F_WDS                  0x00002000
53 	/* CONF: enable U-APSD */
54 #define WLAN_VDEV_F_UAPSD                0x00004000
55 	/* STATUS: sleeping */
56 #define WLAN_VDEV_F_SLEEP                0x00008000
57 	/* drop uapsd EOSP frames for test */
58 #define WLAN_VDEV_F_EOSPDROP             0x00010000
59 	/* drop uapsd EOSP frames for test */
60 #define WLAN_VDEV_F_AMPDU                0x00020000
61 	/* STATE: beacon APP IE updated */
62 #define WLAN_VDEV_F_APPIE_UPDATE         0x00040000
63 	/* CONF: WDS auto Detect/DELBA */
64 #define WLAN_VDEV_F_WDS_AUTODETECT       0x00080000
65 	/* 11b only without 11g stations */
66 #define WLAN_VDEV_F_PUREB                0x00100000
67 	/* disable HT rates */
68 #define WLAN_VDEV_F_HTRATES              0x00200000
69 	/* Extender AP */
70 #define WLAN_VDEV_F_AP                   0x00400000
71 	/* CONF: deliver rx frames with 802.11 header */
72 #define WLAN_VDEV_F_DELIVER_80211        0x00800000
73 	/* CONF: os sends down tx frames with 802.11 header */
74 #define WLAN_VDEV_F_SEND_80211           0x01000000
75 	/* CONF: statically configured WDS */
76 #define WLAN_VDEV_F_WDS_STATIC           0x02000000
77 	/* CONF: pure 11n mode */
78 #define WLAN_VDEV_F_PURE11N              0x04000000
79 	/* CONF: pure 11ac mode */
80 #define WLAN_VDEV_F_PURE11AC             0x08000000
81 	/* Basic Rates Update */
82 #define WLAN_VDEV_F_BR_UPDATE            0x10000000
83 	/* CONF: restrict bw ont top of per 11ac/n */
84 #define WLAN_VDEV_F_STRICT_BW            0x20000000
85 	/* Wi-Fi SON mode (with APS) */
86 #define WLAN_VDEV_F_SON                  0x40000000
87 	/* Wi-Fi SON mode (with APS) */
88 #define WLAN_VDEV_F_MBO                  0x80000000
89 
90 /* Feature extension flags */
91 		/* CONF: MSFT safe mode         */
92 #define WLAN_VDEV_FEXT_SAFEMODE             0x00000001
93 		/* if the vap can sleep*/
94 #define WLAN_VDEV_FEXT_CANSLEEP             0x00000002
95 		/* use sw bmiss timer */
96 #define WLAN_VDEV_FEXT_SWBMISS              0x00000004
97 		/* enable beacon copy */
98 #define WLAN_VDEV_FEXT_COPY_BEACON          0x00000008
99 #define WLAN_VDEV_FEXT_WAPI                 0x00000010
100 		/* 802.11h enabled */
101 #define WLAN_VDEV_FEXT_DOTH                 0x00000020
102 	/* if the vap has wds independance set */
103 #define WLAN_VDEV_FEXT_VAPIND               0x00000040
104 	/* QBSS load IE enabled */
105 #define WLAN_VDEV_FEXT_BSSLOAD              0x00000080
106 	/* Short Guard Interval Enable:1 Disable:0 */
107 #define WLAN_VDEV_FEXT_SGI                  0x00000100
108 	/* Short Guard Interval Enable:1 Disable:0 for VHT fixed rates */
109 #define WLAN_VDEV_FEXT_DATASGI              0x00000200
110 	/* LDPC Enable Rx:1 TX: 2 ; Disable:0 */
111 #define WLAN_VDEV_FEXT_LDPC_TX              0x00000400
112 #define WLAN_VDEV_FEXT_LDPC_RX              0x00000800
113 #define WLAN_VDEV_FEXT_LDPC                 0x00000c00
114 	/* wme enabled */
115 #define WLAN_VDEV_FEXT_WME                  0x00001000
116 	/* WNM Capabilities */
117 #define WLAN_VDEV_FEXT_WNM                  0x00002000
118 	/* RRM Capabilities */
119 #define WLAN_VDEV_FEXT_RRM                  0x00004000
120 	/* WNM Proxy ARP Capabilities */
121 #define WLAN_VDEV_FEXT_PROXYARP             0x00008000
122 	/* 256 QAM support in 2.4GHz mode Enable:1 Disable:0 */
123 #define WLAN_VDEV_FEXT_256QAM               0x00010000
124 	/* 2.4NG 256 QAM Interop mode Enable:1 Disable:0 */
125 #define WLAN_VDEV_FEXT_256QAM_INTEROP       0x00020000
126 	/* static mimo ps enabled */
127 #define WLAN_VDEV_FEXT_STATIC_MIMOPS        0x00040000
128 	/* dynamic mimo ps enabled */
129 #define WLAN_VDEV_FEXT_DYN_MIMOPS           0x00080000
130 	/* Country IE enabled */
131 #define WLAN_VDEV_FEXT_CNTRY_IE             0x00100000
132 	/*does not want to trigger multi channel operation
133 	instead follow master vaps channel (for AP/GO Vaps) */
134 #define WLAN_VDEV_FEXT_NO_MULCHAN           0x00200000
135 	/*non-beaconing AP VAP*/
136 #define WLAN_VDEV_FEXT_NON_BEACON           0x00400000
137 
138 /* VDEV OP flags  */
139   /* if the vap deleted by user */
140 #define WLAN_VDEV_OP_DELETE_PROGRESS        0x00000001
141  /* set to enable sta-fws fweature */
142 #define WLAN_VDEV_OP_STAFWD                 0x00000002
143    /* Off-channel support enabled */
144 #define WLAN_VDEV_OP_OFFCHAN                0x00000004
145   /* if the vap has erp update set */
146 #define WLAN_VDEV_OP_ERPUPDATE              0x00000008
147   /* this vap needs scheduler for off channel operation */
148 #define WLAN_VDEV_OP_NEEDS_SCHED            0x00000010
149   /*STA in forced sleep set PS bit for all outgoing frames */
150 #define WLAN_VDEV_OP_FORCED_SLEEP           0x00000020
151   /* update bssload IE in beacon */
152 #define WLAN_VDEV_OP_BSSLOAD_UPDATE         0x00000040
153   /* Hotspot 2.0 DGAF Disable bit */
154 #define WLAN_VDEV_OP_DGAF_DISABLE           0x00000080
155   /* STA SmartNet enabled */
156 #define WLAN_VDEV_OP_SMARTNET_EN            0x00000100
157   /* SoftAP to reject resuming in DFS channels */
158 #define WLAN_VDEV_OP_REJ_DFS_CHAN           0x00000200
159   /* Trigger mlme response */
160 #define WLAN_VDEV_OP_TRIGGER_MLME_RESP      0x00000400
161   /* test flag for MFP */
162 #define WLAN_VDEV_OP_MFP_TEST               0x00000800
163   /* flag to indicate using default ratemask */
164 #define WLAN_VDEV_OP_DEF_RATEMASK           0x00001000
165 /*For wakeup AP VAP when wds-sta connect to the AP only use when
166 	export (UMAC_REPEATER_DELAYED_BRINGUP || DBDC_REPEATER_SUPPORT)=1*/
167 #define WLAN_VDEV_OP_KEYFLAG                0x00002000
168   /* if performe the iwlist scanning */
169 #define WLAN_VDEV_OP_LIST_SCANNING          0x00004000
170    /*Set when VAP down*/
171 #define WLAN_VDEV_OP_IS_DOWN                0x00008000
172   /* if vap may require acs when another vap is brought down */
173 #define WLAN_VDEV_OP_NEEDS_UP_ACS           0x00010000
174   /* Block data traffic tx for this vap */
175 #define WLAN_VDEV_OP_BLOCK_TX_TRAFFIC       0x00020000
176   /* for mbo functionality */
177 #define WLAN_VDEV_OP_MBO                    0x00040000
178 
179  /* CAPABILITY: IBSS available */
180 #define WLAN_VDEV_C_IBSS                    0x00000001
181 /* CAPABILITY: HOSTAP avail */
182 #define WLAN_VDEV_C_HOSTAP               0x00000002
183    /* CAPABILITY: Old Adhoc Demo */
184 #define WLAN_VDEV_C_AHDEMO               0x00000004
185   /* CAPABILITY: sw tx retry */
186 #define WLAN_VDEV_C_SWRETRY              0x00000008
187   /* CAPABILITY: monitor mode */
188 #define WLAN_VDEV_C_MONITOR              0x00000010
189   /* CAPABILITY: TKIP MIC avail */
190 #define WLAN_VDEV_C_TKIPMIC              0x00000020
191   /* CAPABILITY: 4-addr support */
192 #define WLAN_VDEV_C_WDS                  0x00000040
193   /* CAPABILITY: TKIP MIC for QoS frame */
194 #define WLAN_VDEV_C_WME_TKIPMIC          0x00000080
195   /* CAPABILITY: bg scanning */
196 #define WLAN_VDEV_C_BGSCAN               0x00000100
197 
198 /**
199  * enum wlan_vdev_state - VDEV state
200  * @WLAN_VDEV_S_INIT:    Default state, IDLE state
201  * @WLAN_VDEV_S_SCAN:    SCAN state
202  * @WLAN_VDEV_S_JOIN:    Join state
203  * @WLAN_VDEV_S_DFS_WAIT:CAC period
204  * @WLAN_VDEV_S_RUN:     RUN state
205  * @WLAN_VDEV_S_STOP:    STOP state
206  * @WLAN_VDEV_S_RESET:   RESET state, STOP+INIT+JOIN
207  * @WLAN_VDEV_S_MAX:     MAX state
208  */
209 enum wlan_vdev_state {
210 	WLAN_VDEV_S_INIT     = 0,
211 	WLAN_VDEV_S_SCAN     = 1,
212 	WLAN_VDEV_S_JOIN     = 2,
213 	WLAN_VDEV_S_DFS_WAIT = 3,
214 	WLAN_VDEV_S_RUN      = 4,
215 	WLAN_VDEV_S_STOP     = 5,
216 	WLAN_VDEV_S_RESET    = 6,
217 	WLAN_VDEV_S_MAX,
218 };
219 
220 /**
221  * struct wlan_vdev_create_params - Create params, HDD/OSIF passes this
222  *				    structure While creating VDEV
223  * @opmode:      Opmode of VDEV
224  * @macaddr[]:   MAC address
225  * @flags:       create flags
226  * @osifp:       OS structure
227  * @mataddr[]:   MAT address
228  */
229 struct wlan_vdev_create_params {
230 	enum tQDF_ADAPTER_MODE opmode;
231 	uint8_t macaddr[WLAN_MACADDR_LEN];
232 	uint32_t flags;
233 	void *osifp;
234 	uint8_t mataddr[WLAN_MACADDR_LEN];
235 };
236 
237 /**
238  * struct wlan_channel - channel structure
239  */
240 struct wlan_channel {
241 
242 };
243 
244 /**
245  * struct wlan_objmgr_vdev_mlme - VDEV MLME specific sub structure
246  * @vdev_opmode:        Opmode of VDEV
247  * @ssid[]:             SSID
248  * @ssid_len:           SSID length
249  * @bss_chan:           BSS channel
250  * @des_chan:           Desired channel, for STA Desired may not be used
251  * @nss:                Num. Spatial streams
252  * @chainmask:          Chainmask
253  * @macaddr[]:          VDEV self MAC address
254  * @vdev_caps:          VDEV capabilities
255  * @vdev_feat_caps:     VDEV feature caps
256  * @vdev_feat_ext_caps: VDEV Extended feature caps
257  * @max_rate:           MAX rate
258  * @tx_mgmt_rate:       TX Mgmt. Rate
259  * @tx_power:           Tx power
260  * @mlme_state:         VDEV state
261  * @vdev_op_flags:      Operation flags
262  * @mataddr[]:          MAT address
263  */
264 struct wlan_objmgr_vdev_mlme {
265 	enum tQDF_ADAPTER_MODE vdev_opmode;
266 	char ssid[WLAN_SSID_MAX_LEN+1];
267 	uint8_t ssid_len;
268 	struct wlan_channel  *bss_chan;   /* Define wlan_channel */
269 	struct wlan_channel  *des_chan;  /*TODO ??? */
270 	uint8_t nss;
271 	uint8_t chainmask;
272 	uint8_t  macaddr[WLAN_MACADDR_LEN];
273 	uint32_t vdev_caps;
274 	uint32_t vdev_feat_caps;
275 	uint32_t vdev_feat_ext_caps;
276 	uint32_t max_rate;
277 	uint32_t tx_mgmt_rate;
278 	uint8_t  tx_power;
279 	enum wlan_vdev_state mlme_state;
280 	uint32_t vdev_op_flags;
281 	uint8_t  mataddr[WLAN_MACADDR_LEN];
282 };
283 
284 /**
285  *  struct wlan_objmgr_vdev_nif - VDEV HDD specific sub structure
286  *  @osdev:  OS specific pointer
287  */
288 struct wlan_objmgr_vdev_nif {
289 	void *osdev;
290 };
291 
292 /**
293  *  struct wlan_objmgr_vdev_objmgr - vdev object manager sub structure
294  *  @vdev_id:          VDEV id
295  *  @self_peer:        Self PEER
296  *  @bss_peer:         BSS PEER
297  *  @wlan_peer_list:   PEER list
298  *  @wlan_pdev:        PDEV pointer
299  *  @wlan_peer_count:  Peer count
300  *  @max_peer_count:   Max Peer count
301  *  @c_flags:          creation specific flags
302  */
303 struct wlan_objmgr_vdev_objmgr {
304 	uint8_t vdev_id;
305 	struct wlan_objmgr_peer *self_peer;
306 	struct wlan_objmgr_peer *bss_peer;
307 	qdf_list_t wlan_peer_list;
308 	struct wlan_objmgr_pdev *wlan_pdev;
309 	uint16_t wlan_peer_count;
310 	uint16_t max_peer_count;
311 	uint32_t c_flags;
312 };
313 
314 /**
315  * struct wlan_objmgr_vdev - VDEV common object
316  * @vdev_node:      qdf list of pdev's vdev list
317  * @vdev_mlme:      VDEV MLME substructure
318  * @vdev_objmgr:    VDEV Object Mgr substructure
319  * @vdev_nif:       VDEV HDD substructure
320  * @vdev_comp_priv_obj[]:Component's private objects list
321  * @obj_status[]:   Component object status
322  * @obj_state:      VDEV object state
323  * @vdev_lock:      VDEV lock
324  */
325 struct wlan_objmgr_vdev {
326 	qdf_list_node_t vdev_node;
327 	struct wlan_objmgr_vdev_mlme vdev_mlme;
328 	struct wlan_objmgr_vdev_objmgr vdev_objmgr;
329 	struct wlan_objmgr_vdev_nif vdev_nif;
330 	void *vdev_comp_priv_obj[WLAN_UMAC_MAX_COMPONENTS];
331 	QDF_STATUS obj_status[WLAN_UMAC_MAX_COMPONENTS];
332 	WLAN_OBJ_STATE obj_state;
333 	qdf_spinlock_t vdev_lock;
334 };
335 
336 /**
337  ** APIs to Create/Delete Global object APIs
338  */
339 /**
340  * wlan_objmgr_vdev_obj_create() - vdev object create
341  * @pdev: PDEV object on which this vdev gets created
342  * @params: VDEV create params from HDD
343  *
344  * Creates vdev object, intializes with default values
345  * Attaches to psoc and pdev objects
346  * Invokes the registered notifiers to create component object
347  *
348  * Return: Handle to struct wlan_objmgr_vdev on successful creation,
349  *         NULL on Failure (on Mem alloc failure and Component objects
350  *         Failure)
351  */
352 struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create(
353 			struct wlan_objmgr_pdev *pdev,
354 			struct wlan_vdev_create_params *params);
355 
356 /**
357  * wlan_objmgr_vdev_obj_delete() - vdev object delete
358  * @vdev: vdev object
359  *
360  * Deletes VDEV object, removes it from PSOC's, PDEV's VDEV list
361  * Invokes the registered notifiers to delete component objects
362  *
363  * Return: SUCCESS/FAILURE
364  */
365 QDF_STATUS wlan_objmgr_vdev_obj_delete(struct wlan_objmgr_vdev *vdev);
366 
367 /**
368  ** APIs to attach/detach component objects
369  */
370 /**
371  * wlan_objmgr_vdev_component_obj_attach() - vdev comp object attach
372  * @vdev: VDEV object
373  * @id: Component id
374  * @comp_priv_obj: component's private object pointer
375  * @status: Component's private object creation status
376  *
377  * API to be used for attaching component object with VDEV common object
378  *
379  * Return: SUCCESS on successful storing of component's object in common object
380  *         On FAILURE (appropriate failure codes are returned)
381  */
382 QDF_STATUS wlan_objmgr_vdev_component_obj_attach(
383 		struct wlan_objmgr_vdev *vdev,
384 		enum wlan_umac_comp_id id,
385 		void *comp_priv_obj,
386 		QDF_STATUS status);
387 
388 /**
389  * wlan_objmgr_vdev_component_obj_detach() - vdev comp object detach
390  * @vdev: VDEV object
391  * @id: Component id
392  * @comp_priv_obj: component's private object pointer
393  *
394  * API to be used for detaching component object with VDEV common object
395  *
396  * Return: SUCCESS on successful removal of component's object from common
397  *         object
398  *         On FAILURE (appropriate failure codes are returned)
399  */
400 QDF_STATUS wlan_objmgr_vdev_component_obj_detach(
401 		struct wlan_objmgr_vdev *vdev,
402 		enum wlan_umac_comp_id id,
403 		void *comp_priv_obj);
404 /*
405  ** APIs to operations on vdev objects
406 */
407 
408 /**
409  * wlan_objmgr_iterate_peerobj_list() - iterate vdev's peer list
410  * @vdev: vdev object
411  * @handler: the handler will be called for each object of requested type
412  *            the handler should be implemented to perform required operation
413  * @arg:     agruments passed by caller
414  *
415  * API to be used for performing the operations on all PEER objects
416  * of vdev
417  *
418  * Return: SUCCESS/FAILURE
419  */
420 typedef void (*wlan_objmgr_vdev_op_handler)(struct wlan_objmgr_vdev *vdev,
421 					void *object,
422 					void *arg);
423 
424 QDF_STATUS wlan_objmgr_iterate_peerobj_list(
425 		struct wlan_objmgr_vdev *vdev,
426 		wlan_objmgr_vdev_op_handler handler,
427 		void *arg);
428 
429 /**
430  * wlan_objmgr_trigger_vdev_comp_priv_object_creation() - vdev
431  * comp object creation
432  * @vdev: VDEV object
433  * @id: Component id
434  *
435  * API to create component private object in run time, this would
436  * be used for features which gets enabled in run time
437  *
438  * Return: SUCCESS on successful creation
439  *         On FAILURE (appropriate failure codes are returned)
440  */
441 QDF_STATUS wlan_objmgr_trigger_vdev_comp_priv_object_creation(
442 		struct wlan_objmgr_vdev *vdev,
443 		enum wlan_umac_comp_id id);
444 
445 /**
446  * wlan_objmgr_trigger_vdev_comp_priv_object_deletion() - vdev
447  * comp object deletion
448  * @vdev: VDEV object
449  * @id: Component id
450  *
451  * API to delete component private object in run time, this would
452  * be used for features which gets disabled in run time
453  *
454  * Return: SUCCESS on successful deletion
455  *         On FAILURE (appropriate failure codes are returned)
456  */
457 QDF_STATUS wlan_objmgr_trigger_vdev_comp_priv_object_deletion(
458 		struct wlan_objmgr_vdev *vdev,
459 		enum wlan_umac_comp_id id);
460 
461 /**
462  * wlan_objmgr_vdev_get_comp_private_obj() - get vdev component private object
463  * @vdev: VDEV object
464  * @id: Component id
465  *
466  * API to get component private object
467  *
468  * Caller need to acquire lock with wlan_vdev_obj_lock()
469  *
470  * Return: void *ptr on SUCCESS
471  *         NULL on Failure
472  */
473 void *wlan_objmgr_vdev_get_comp_private_obj(
474 		struct wlan_objmgr_vdev *vdev,
475 		enum wlan_umac_comp_id id);
476 
477 /* Util APIs */
478 
479 /**
480  * wlan_vdev_get_pdev() - get pdev
481  * @vdev: VDEV object
482  *
483  * API to get pdev object pointer from vdev
484  *
485  * Caller need to acquire lock with wlan_vdev_obj_lock()
486  *
487  * Return: pdev object pointer
488  */
489 static inline struct wlan_objmgr_pdev *wlan_vdev_get_pdev(
490 				struct wlan_objmgr_vdev *vdev)
491 {
492 	/* This API is invoked with lock acquired, do not add log prints */
493 	return vdev->vdev_objmgr.wlan_pdev;
494 }
495 
496 /**
497  * wlan_pdev_vdev_list_peek_head() - get first vdev from pdev list
498  * @peer_list: qdf_list_t
499  *
500  * API to get the head vdev of given peer (of pdev's vdev list)
501  *
502  * Caller need to acquire lock with wlan_vdev_obj_lock()
503  *
504  * Return:
505  * @peer: head peer
506  */
507 static inline struct wlan_objmgr_vdev *wlan_pdev_vdev_list_peek_head(
508 					qdf_list_t *vdev_list)
509 {
510 	struct wlan_objmgr_vdev *vdev;
511 	qdf_list_node_t *vdev_node = NULL;
512 
513 	/* This API is invoked with lock acquired, do not add log prints */
514 	if (qdf_list_peek_front(vdev_list, &vdev_node) != QDF_STATUS_SUCCESS)
515 		return NULL;
516 
517 	vdev = qdf_container_of(vdev_node, struct wlan_objmgr_vdev, vdev_node);
518 	return vdev;
519 }
520 
521 /**
522  * wlan_vdev_get_next_vdev_of_pdev() - get next vdev
523  * @vdev: VDEV object
524  *
525  * API to get next vdev object pointer of vdev
526  *
527  * Caller need to acquire lock with wlan_vdev_obj_lock()
528  *
529  * Return:
530  * @vdev_next: VDEV object
531  */
532 static inline struct wlan_objmgr_vdev *wlan_vdev_get_next_vdev_of_pdev(
533 					qdf_list_t *vdev_list,
534 					struct wlan_objmgr_vdev *vdev)
535 {
536 	struct wlan_objmgr_vdev *vdev_next;
537 	qdf_list_node_t *node = &vdev->vdev_node;
538 	qdf_list_node_t *next_node = NULL;
539 
540 	/* This API is invoked with lock acquired, do not add log prints */
541 	if (node == NULL)
542 		return NULL;
543 
544 	if (qdf_list_peek_next(vdev_list, node, &next_node) !=
545 						QDF_STATUS_SUCCESS)
546 		return NULL;
547 
548 	vdev_next = qdf_container_of(next_node, struct wlan_objmgr_vdev,
549 				vdev_node);
550 	return vdev_next;
551 }
552 
553 /**
554  * wlan_vdev_set_pdev() - set pdev
555  * @vdev: VDEV object
556  * @pdev: PDEV object
557  *
558  * API to get pdev object pointer from vdev
559  *
560  * Caller need to acquire lock with wlan_vdev_obj_lock()
561  *
562  * Return: void
563  */
564 static inline void wlan_vdev_set_pdev(struct wlan_objmgr_vdev *vdev,
565 					struct wlan_objmgr_pdev *pdev)
566 {
567 	/* This API is invoked with lock acquired, do not add log prints */
568 	vdev->vdev_objmgr.wlan_pdev = pdev;
569 }
570 
571 /**
572  * wlan_vdev_get_psoc() - get psoc
573  * @vdev: VDEV object
574  *
575  * API to get pdev object pointer from vdev
576  *
577  * Caller need to acquire lock with wlan_vdev_obj_lock()
578  *
579  * Return: psoc object pointer
580  */
581 static inline struct wlan_objmgr_psoc *wlan_vdev_get_psoc(
582 				struct wlan_objmgr_vdev *vdev)
583 {
584 	struct wlan_objmgr_pdev *pdev;
585 
586 	/* This API is invoked with lock acquired, do not add log prints */
587 	pdev = wlan_vdev_get_pdev(vdev);
588 	if (pdev == NULL)
589 		return NULL;
590 
591 	return wlan_pdev_get_psoc(pdev);
592 }
593 
594 /**
595  * wlan_vdev_mlme_set_opmode() - set vdev opmode
596  * @vdev: VDEV object
597  * @mode: VDEV op mode
598  *
599  * API to set opmode in vdev object
600  *
601  * Caller need to acquire lock with wlan_vdev_obj_lock()
602  *
603  * Return: void
604  */
605 static inline void wlan_vdev_mlme_set_opmode(struct wlan_objmgr_vdev *vdev,
606 				enum tQDF_ADAPTER_MODE mode)
607 {
608 	/* This API is invoked with lock acquired, do not add log prints */
609 	vdev->vdev_mlme.vdev_opmode = mode;
610 }
611 
612 /**
613  * wlan_vdev_mlme_get_opmode() - get vdev opmode
614  * @vdev: VDEV object
615  *
616  * API to set opmode of vdev object
617  *
618  * Caller need to acquire lock with wlan_vdev_obj_lock()
619  *
620  * Return:
621  * @mode: VDEV op mode
622  */
623 static inline enum tQDF_ADAPTER_MODE wlan_vdev_mlme_get_opmode(
624 					struct wlan_objmgr_vdev *vdev)
625 {
626 	/* This API is invoked with lock acquired, do not add log prints */
627 	return vdev->vdev_mlme.vdev_opmode;
628 }
629 
630 /**
631  * wlan_vdev_mlme_set_macaddr() - set vdev macaddr
632  * @vdev: VDEV object
633  * @macaddr: MAC address
634  *
635  * API to set macaddr in vdev object
636  *
637  * Caller need to acquire lock with wlan_vdev_obj_lock()
638  *
639  * Return: void
640  */
641 static inline void wlan_vdev_mlme_set_macaddr(struct wlan_objmgr_vdev *vdev,
642 					 uint8_t *macaddr)
643 {
644 	/* This API is invoked with lock acquired, do not add log prints */
645 	WLAN_ADDR_COPY(vdev->vdev_mlme.macaddr, macaddr);
646 }
647 
648 /**
649  * wlan_vdev_mlme_get_macaddr() - get vdev macaddr
650  * @vdev: VDEV object
651  *
652  * API to get MAC address from vdev object
653  *
654  * Caller need to acquire lock with wlan_vdev_obj_lock()
655  *
656  * Return:
657  * @macaddr: MAC address
658  */
659 static inline uint8_t *wlan_vdev_mlme_get_macaddr(struct wlan_objmgr_vdev *vdev)
660 {
661 	/* This API is invoked with lock acquired, do not add log prints */
662 	return vdev->vdev_mlme.macaddr;
663 }
664 
665 /**
666  * wlan_vdev_mlme_set_mataddr() - set vdev mataddr
667  * @vdev: VDEV object
668  * @mataddr: MAT address
669  *
670  * API to set mataddr in vdev object
671  *
672  * Caller need to acquire lock with wlan_vdev_obj_lock()
673  *
674  * Return: void
675  */
676 static inline void wlan_vdev_mlme_set_mataddr(struct wlan_objmgr_vdev *vdev,
677 					uint8_t *mataddr)
678 {
679 	/* This API is invoked with lock acquired, do not add log prints */
680 	WLAN_ADDR_COPY(vdev->vdev_mlme.mataddr, mataddr);
681 }
682 
683 /**
684  * wlan_vdev_mlme_get_mataddr() - get mataddr
685  * @vdev: VDEV object
686  *
687  * API to get MAT address from vdev object
688  *
689  * Caller need to acquire lock with wlan_vdev_obj_lock()
690  *
691  * Return:
692  * @mataddr: MAT address
693  */
694 static inline uint8_t *wlan_vdev_mlme_get_mataddr(struct wlan_objmgr_vdev *vdev)
695 {
696 	/* This API is invoked with lock acquired, do not add log prints */
697 	return vdev->vdev_mlme.mataddr;
698 }
699 
700 /**
701  * wlan_vdev_get_id() - get vdev id
702  * @vdev: VDEV object
703  *
704  * API to get vdev id
705  *
706  * Caller need to acquire lock with wlan_vdev_obj_lock()
707  *
708  * Return:
709  * @id: vdev id
710  */
711 static inline uint8_t wlan_vdev_get_id(struct wlan_objmgr_vdev *vdev)
712 {
713 	/* This API is invoked with lock acquired, do not add log prints */
714 	return vdev->vdev_objmgr.vdev_id;
715 }
716 
717 /**
718  * wlan_vdev_get_hw_macaddr() - get hw macaddr
719  * @vdev: VDEV object
720  *
721  * API to retrieve the HW MAC address from PDEV
722  *
723  * Caller need to acquire lock with wlan_vdev_obj_lock()
724  *
725  * Return:
726  * @macaddr: HW MAC address
727  */
728 static inline uint8_t *wlan_vdev_get_hw_macaddr(struct wlan_objmgr_vdev *vdev)
729 {
730 	struct wlan_objmgr_pdev *pdev = wlan_vdev_get_pdev(vdev);
731 
732 	/* This API is invoked with lock acquired, do not add log prints */
733 	if (pdev != NULL) {
734 		return wlan_pdev_get_hw_macaddr(pdev);
735 	} else {
736 		qdf_print("%s:pdev is NULL\n", __func__);
737 		return NULL;
738 	}
739 }
740 
741 /**
742  * wlan_vdev_mlme_set_ssid() - set ssid
743  * @vdev: VDEV object
744  * @ssid: SSID (input)
745  * @ssid_len: Length of SSID
746  *
747  * API to set the SSID of VDEV
748  *
749  * Caller need to acquire lock with wlan_vdev_obj_lock()
750  *
751  * Return: SUCCESS, if update is done
752  *          FAILURE, if ssid length is > max ssid len
753  */
754 static inline QDF_STATUS wlan_vdev_mlme_set_ssid(
755 				struct wlan_objmgr_vdev *vdev,
756 				const uint8_t *ssid, uint8_t ssid_len)
757 {
758 	/* This API is invoked with lock acquired, do not add log prints */
759 	if (ssid_len < WLAN_SSID_MAX_LEN) {
760 		qdf_mem_copy(vdev->vdev_mlme.ssid, ssid, ssid_len);
761 		vdev->vdev_mlme.ssid_len = ssid_len;
762 	} else {
763 		vdev->vdev_mlme.ssid_len = 0;
764 		return QDF_STATUS_E_FAILURE;
765 	}
766 	return QDF_STATUS_SUCCESS;
767 }
768 
769 /**
770  * wlan_vdev_mlme_get_ssid() - get ssid
771  * @vdev: VDEV object
772  * @ssid: SSID
773  * @ssid_len: Length of SSID
774  *
775  * API to get the SSID of VDEV, it updates the SSID and its length
776  * in @ssid, @ssid_len respectively
777  *
778  * Caller need to acquire lock with wlan_vdev_obj_lock()
779  *
780  * Return: SUCCESS, if update is done
781  *          FAILURE, if ssid length is > max ssid len
782  */
783 static inline QDF_STATUS wlan_vdev_mlme_get_ssid(
784 				struct wlan_objmgr_vdev *vdev,
785 				 uint8_t *ssid, uint8_t *ssid_len)
786 {
787 	/* This API is invoked with lock acquired, do not add log prints */
788 	if (vdev->vdev_mlme.ssid_len > 0) {
789 		*ssid_len = vdev->vdev_mlme.ssid_len;
790 		qdf_mem_copy(ssid, vdev->vdev_mlme.ssid, *ssid_len);
791 	} else {
792 		*ssid_len = 0;
793 		return QDF_STATUS_E_FAILURE;
794 	}
795 	return QDF_STATUS_SUCCESS;
796 }
797 
798 /**
799  * wlan_vdev_obj_lock() - Acquire VDEV spinlock
800  * @vdev: VDEV object
801  *
802  * API to acquire VDEV lock
803  *
804  * Return: void
805  */
806 static inline void wlan_vdev_obj_lock(struct wlan_objmgr_vdev *vdev)
807 {
808 	qdf_spin_lock_bh(&vdev->vdev_lock);
809 }
810 
811 /**
812  * wlan_vdev_obj_unlock() - Release VDEV spinlock
813  * @vdev: VDEV object
814  *
815  * API to Release VDEV lock
816  *
817  * Return: void
818  */
819 static inline void wlan_vdev_obj_unlock(struct wlan_objmgr_vdev *vdev)
820 {
821 	qdf_spin_unlock_bh(&vdev->vdev_lock);
822 }
823 
824 /**
825  * wlan_vdev_mlme_set_bss_chan() - set bss chan
826  * @vdev: VDEV object
827  * @bss_chan: Channel
828  *
829  * API to set the BSS channel
830  *
831  * Caller need to acquire lock with wlan_vdev_obj_lock()
832  *
833  * Return: void
834  */
835 static inline void wlan_vdev_mlme_set_bss_chan(struct wlan_objmgr_vdev *vdev,
836 			struct wlan_channel *bss_chan)
837 {
838 	/* This API is invoked with lock acquired, do not add log prints */
839 	vdev->vdev_mlme.bss_chan = bss_chan;
840 }
841 
842 /**
843  * wlan_vdev_mlme_get_bss_chan() - get bss chan
844  * @vdev: VDEV object
845  *
846  * API to get the BSS channel
847  *
848  * Caller need to acquire lock with wlan_vdev_obj_lock()
849  *
850  * Return:
851  * @bss_chan: Channel
852  */
853 static inline struct wlan_channel *wlan_vdev_mlme_get_bss_chan(
854 				struct wlan_objmgr_vdev *vdev)
855 {
856 	/* This API is invoked with lock acquired, do not add log prints */
857 	return vdev->vdev_mlme.bss_chan;
858 }
859 
860 /**
861  * wlan_vdev_mlme_set_des_chan() - set desired chan
862  * @vdev: VDEV object
863  * @des_chan: Channel configured by user
864  *
865  * API to set the desired channel
866  *
867  * Caller need to acquire lock with wlan_vdev_obj_lock()
868  *
869  * Return: void
870  */
871 static inline void wlan_vdev_mlme_set_des_chan(struct wlan_objmgr_vdev *vdev,
872 			struct wlan_channel *des_chan)
873 {
874 	/* This API is invoked with lock acquired, do not add log prints */
875 	vdev->vdev_mlme.des_chan = des_chan;
876 }
877 
878 /**
879  * wlan_vdev_mlme_get_des_chan() - get desired chan
880  * @vdev: VDEV object
881  *
882  * API to get the desired channel
883  *
884  * Caller need to acquire lock with wlan_vdev_obj_lock()
885  *
886  * Return:
887  * @des_chan: Channel configured by user
888  */
889 static inline struct wlan_channel *wlan_vdev_mlme_get_des_chan(
890 				struct wlan_objmgr_vdev *vdev)
891 {
892 	/* This API is invoked with lock acquired, do not add log prints */
893 	return vdev->vdev_mlme.des_chan;
894 }
895 
896 /**
897  * wlan_vdev_mlme_set_nss() - set NSS
898  * @vdev: VDEV object
899  * @nss: nss configured by user
900  *
901  * API to set the Number of Spatial streams
902  *
903  * Caller need to acquire lock with wlan_vdev_obj_lock()
904  *
905  * Return: void
906  */
907 static inline void wlan_vdev_mlme_set_nss(struct wlan_objmgr_vdev *vdev,
908 			uint8_t nss)
909 {
910 	/* This API is invoked with lock acquired, do not add log prints */
911 	vdev->vdev_mlme.nss = nss;
912 }
913 
914 /**
915  * wlan_vdev_mlme_get_nss() - get NSS
916  * @vdev: VDEV object
917  *
918  * API to get the Number of Spatial Streams
919  *
920  * Caller need to acquire lock with wlan_vdev_obj_lock()
921  *
922  * Return:
923  * @nss: nss value
924  */
925 static inline uint8_t wlan_vdev_mlme_get_nss(
926 				struct wlan_objmgr_vdev *vdev)
927 {
928 	/* This API is invoked with lock acquired, do not add log prints */
929 	return vdev->vdev_mlme.nss;
930 }
931 
932 /**
933  * wlan_vdev_mlme_set_chainmask() - set chainmask
934  * @vdev: VDEV object
935  * @chainmask : chainmask either configured by user or max supported
936  *
937  * API to set the chainmask
938  *
939  * Caller need to acquire lock with wlan_vdev_obj_lock()
940  *
941  * Return: void
942  */
943 static inline void wlan_vdev_mlme_set_chainmask(struct wlan_objmgr_vdev *vdev,
944 			uint8_t chainmask)
945 {
946 	/* This API is invoked with lock acquired, do not add log prints */
947 	vdev->vdev_mlme.chainmask = chainmask;
948 }
949 
950 /**
951  * wlan_vdev_mlme_get_chainmask() - get chainmask
952  * @vdev: VDEV object
953  *
954  * API to get the chainmask
955  *
956  * Caller need to acquire lock with wlan_vdev_obj_lock()
957  *
958  * Return:
959  * @chainmask : chainmask either configured by user or max supported
960  */
961 static inline uint8_t wlan_vdev_mlme_get_chainmask(
962 				struct wlan_objmgr_vdev *vdev)
963 {
964 	/* This API is invoked with lock acquired, do not add log prints */
965 	return vdev->vdev_mlme.chainmask;
966 }
967 
968 /**
969  * wlan_vdev_mlme_set_txpower() - set tx power
970  * @vdev: VDEV object
971  * @txpow: tx power either configured by used or max allowed
972  *
973  * API to set the tx power
974  *
975  * Caller need to acquire lock with wlan_vdev_obj_lock()
976  *
977  * Return: void
978  */
979 static inline void wlan_vdev_mlme_set_txpower(struct wlan_objmgr_vdev *vdev,
980 			uint8_t txpow)
981 {
982 	/* This API is invoked with lock acquired, do not add log prints */
983 	vdev->vdev_mlme.tx_power = txpow;
984 }
985 
986 /**
987  * wlan_vdev_mlme_get_txpower() - get tx power
988  * @vdev: VDEV object
989  *
990  * API to get the tx power
991  *
992  * Caller need to acquire lock with wlan_vdev_obj_lock()
993  *
994  * Return:
995  * @txpow: tx power either configured by used or max allowed
996  */
997 static inline uint8_t wlan_vdev_mlme_get_txpower(
998 				struct wlan_objmgr_vdev *vdev)
999 {
1000 	/* This API is invoked with lock acquired, do not add log prints */
1001 	return vdev->vdev_mlme.tx_power;
1002 }
1003 
1004 /**
1005  * wlan_vdev_mlme_set_maxrate() - set max rate
1006  * @vdev: VDEV object
1007  * @maxrate: configured by used or based on configured mode
1008  *
1009  * API to set the max rate the vdev supports
1010  *
1011  * Caller need to acquire lock with wlan_vdev_obj_lock()
1012  *
1013  * Return: void
1014  */
1015 static inline void wlan_vdev_mlme_set_maxrate(struct wlan_objmgr_vdev *vdev,
1016 			uint32_t maxrate)
1017 {
1018 	/* This API is invoked with lock acquired, do not add log prints */
1019 	vdev->vdev_mlme.max_rate = maxrate;
1020 }
1021 
1022 /**
1023  * wlan_vdev_mlme_get_maxrate() - get max rate
1024  * @vdev: VDEV object
1025  *
1026  * API to get the max rate the vdev supports
1027  *
1028  * Caller need to acquire lock with wlan_vdev_obj_lock()
1029  *
1030  * Return:
1031  * @maxrate: configured by used or based on configured mode
1032  */
1033 static inline uint32_t wlan_vdev_mlme_get_maxrate(
1034 				struct wlan_objmgr_vdev *vdev)
1035 {
1036 	/* This API is invoked with lock acquired, do not add log prints */
1037 	return vdev->vdev_mlme.max_rate;
1038 }
1039 
1040 /**
1041  * wlan_vdev_mlme_set_txmgmtrate() - set txmgmtrate
1042  * @vdev: VDEV object
1043  * @txmgmtrate: Tx Mgmt rate
1044  *
1045  * API to set Mgmt Tx rate
1046  *
1047  * Caller need to acquire lock with wlan_vdev_obj_lock()
1048  *
1049  * Return: void
1050  */
1051 static inline void wlan_vdev_mlme_set_txmgmtrate(struct wlan_objmgr_vdev *vdev,
1052 			uint32_t txmgmtrate)
1053 {
1054 	/* This API is invoked with lock acquired, do not add log prints */
1055 	vdev->vdev_mlme.tx_mgmt_rate = txmgmtrate;
1056 }
1057 
1058 /**
1059  * wlan_vdev_mlme_get_txmgmtrate() - get txmgmtrate
1060  * @vdev: VDEV object
1061  *
1062  * API to get Mgmt Tx rate
1063  *
1064  * Caller need to acquire lock with wlan_vdev_obj_lock()
1065  *
1066  * Return:
1067  * @txmgmtrate: Tx Mgmt rate
1068  */
1069 static inline uint32_t wlan_vdev_mlme_get_txmgmtrate(
1070 				struct wlan_objmgr_vdev *vdev)
1071 {
1072 	/* This API is invoked with lock acquired, do not add log prints */
1073 	return vdev->vdev_mlme.tx_mgmt_rate;
1074 }
1075 
1076 /**
1077  * wlan_vdev_mlme_feat_cap_set() - set feature caps
1078  * @vdev: VDEV object
1079  * @cap: capabilities to be set
1080  *
1081  * API to set MLME feature capabilities
1082  *
1083  * Caller need to acquire lock with wlan_vdev_obj_lock()
1084  *
1085  * Return: void
1086  */
1087 static inline void wlan_vdev_mlme_feat_cap_set(struct wlan_objmgr_vdev *vdev,
1088 				uint32_t cap)
1089 {
1090 	/* This API is invoked with lock acquired, do not add log prints */
1091 	vdev->vdev_mlme.vdev_feat_caps |= cap;
1092 }
1093 
1094 /**
1095  * wlan_vdev_mlme_feat_cap_clear() - clear feature caps
1096  * @vdev: VDEV object
1097  * @cap: capabilities to be cleared
1098  *
1099  * API to clear MLME feature capabilities
1100  *
1101  * Caller need to acquire lock with wlan_vdev_obj_lock()
1102  *
1103  * Return: void
1104  */
1105 static inline void wlan_vdev_mlme_feat_cap_clear(struct wlan_objmgr_vdev *vdev,
1106 				uint32_t cap)
1107 {
1108 	/* This API is invoked with lock acquired, do not add log prints */
1109 	vdev->vdev_mlme.vdev_feat_caps &= ~cap;
1110 }
1111 
1112 /**
1113  * wlan_vdev_mlme_feat_cap_get() - get feature caps
1114  * @vdev: VDEV object
1115  * @cap: capabilities to be checked
1116  *
1117  * API to know MLME feature capability is set or not
1118  *
1119  * Caller need to acquire lock with wlan_vdev_obj_lock()
1120  *
1121  * Return: 1 -- if capabilities set
1122  *         0 -- if capabilities clear
1123  */
1124 static inline uint8_t wlan_vdev_mlme_feat_cap_get(struct wlan_objmgr_vdev *vdev,
1125 				uint32_t cap)
1126 {
1127 	/* This API is invoked with lock acquired, do not add log prints */
1128 	return (vdev->vdev_mlme.vdev_feat_caps & cap) ? 1 : 0;
1129 }
1130 
1131 /**
1132  * wlan_vdev_mlme_feat_ext_cap_set() - set ext feature caps
1133  * @vdev: VDEV object
1134  * @cap: capabilities to be set
1135  *
1136  * API to set the MLME extensive feature capabilities
1137  *
1138  * Caller need to acquire lock with wlan_vdev_obj_lock()
1139  *
1140  * Return: void
1141  */
1142 static inline void wlan_vdev_mlme_feat_ext_cap_set(
1143 				struct wlan_objmgr_vdev *vdev,
1144 				uint32_t cap)
1145 {
1146 	/* This API is invoked with lock acquired, do not add log prints */
1147 	vdev->vdev_mlme.vdev_feat_ext_caps |= cap;
1148 }
1149 
1150 /**
1151  * wlan_vdev_mlme_feat_ext_cap_clear() - clear ext feature caps
1152  * @vdev: VDEV object
1153  * @cap: capabilities to be cleared
1154  *
1155  * API to clear the MLME extensive feature capabilities
1156  *
1157  * Caller need to acquire lock with wlan_vdev_obj_lock()
1158  *
1159  * Return: void
1160  */
1161 static inline void wlan_vdev_mlme_feat_ext_cap_clear(
1162 				struct wlan_objmgr_vdev *vdev,
1163 				uint32_t cap)
1164 {
1165 	/* This API is invoked with lock acquired, do not add log prints */
1166 	vdev->vdev_mlme.vdev_feat_ext_caps &= ~cap;
1167 }
1168 
1169 /**
1170  * wlan_vdev_mlme_feat_ext_cap_get() - get feature ext caps
1171  * @vdev: VDEV object
1172  * @cap: capabilities to be checked
1173  *
1174  * API to know MLME ext feature capability is set or not
1175  *
1176  * Caller need to acquire lock with wlan_vdev_obj_lock()
1177  *
1178  * Return: 1 -- if capabilities set
1179  *         0 -- if capabilities clear
1180  */
1181 static inline uint8_t wlan_vdev_mlme_feat_ext_cap_get(
1182 				struct wlan_objmgr_vdev *vdev,
1183 				uint32_t cap)
1184 {
1185 	/* This API is invoked with lock acquired, do not add log prints */
1186 	return (vdev->vdev_mlme.vdev_feat_ext_caps & cap) ? 1 : 0;
1187 }
1188 
1189 /**
1190  * wlan_vdev_mlme_cap_set() - mlme caps set
1191  * @vdev: VDEV object
1192  * @cap: capabilities to be set
1193  *
1194  * API to set the MLME capabilities
1195  *
1196  * Caller need to acquire lock with wlan_vdev_obj_lock()
1197  *
1198  * Return: void
1199  */
1200 static inline void wlan_vdev_mlme_cap_set(struct wlan_objmgr_vdev *vdev,
1201 				uint32_t cap)
1202 {
1203 	/* This API is invoked with lock acquired, do not add log prints */
1204 	vdev->vdev_mlme.vdev_caps |= cap;
1205 }
1206 
1207 /**
1208  * wlan_vdev_mlme_cap_clear() -  mlme caps clear
1209  * @vdev: VDEV object
1210  * @cap: capabilities to be cleared
1211  *
1212  * API to clear the MLME capabilities
1213  *
1214  * Caller need to acquire lock with wlan_vdev_obj_lock()
1215  *
1216  * Return: void
1217  */
1218 static inline void wlan_vdev_mlme_cap_clear(struct wlan_objmgr_vdev *vdev,
1219 				uint32_t cap)
1220 {
1221 	/* This API is invoked with lock acquired, do not add log prints */
1222 	vdev->vdev_mlme.vdev_caps &= ~cap;
1223 }
1224 
1225 /**
1226  * wlan_vdev_mlme_cap_get() - get mlme caps
1227  * @vdev: VDEV object
1228  * @cap: capabilities to be checked
1229  *
1230  * API to know MLME capability is set or not
1231  *
1232  * Caller need to acquire lock with wlan_vdev_obj_lock()
1233  *
1234  * Return: 1 -- if capabilities set
1235  *         0 -- if capabilities clear
1236  */
1237 static inline uint8_t wlan_vdev_mlme_cap_get(struct wlan_objmgr_vdev *vdev,
1238 				uint32_t cap)
1239 {
1240 	/* This API is invoked with lock acquired, do not add log prints */
1241 	return (vdev->vdev_mlme.vdev_caps & cap) ? 1 : 0;
1242 }
1243 
1244 /**
1245  * wlan_vdev_mlme_get_state() - get mlme state
1246  * @vdev: VDEV object
1247  *
1248  * API to get MLME state
1249  *
1250  * Caller need to acquire lock with wlan_vdev_obj_lock()
1251  *
1252  * Return: state of MLME
1253  */
1254 static inline enum wlan_vdev_state wlan_vdev_mlme_get_state(
1255 				struct wlan_objmgr_vdev *vdev)
1256 {
1257 	/* This API is invoked with lock acquired, do not add log prints */
1258 	return vdev->vdev_mlme.mlme_state;
1259 }
1260 
1261 /**
1262  * wlan_vdev_mlme_set_state() - set mlme state
1263  * @vdev: VDEV object
1264  * @state: MLME state
1265  *
1266  * API to set MLME state
1267  *
1268  * Caller need to acquire lock with wlan_vdev_obj_lock()
1269  *
1270  * Return: void
1271  */
1272 static inline void wlan_vdev_mlme_set_state(struct wlan_objmgr_vdev *vdev,
1273 					enum wlan_vdev_state state)
1274 {
1275 	/* This API is invoked with lock acquired, do not add log prints */
1276 	if (state < WLAN_VDEV_S_MAX)
1277 		vdev->vdev_mlme.mlme_state = state;
1278 }
1279 
1280 /**
1281  * wlan_vdev_set_selfpeer() - set self peer
1282  * @vdev: VDEV object
1283  * @peer: peer pointer
1284  *
1285  * API to set the self peer of VDEV
1286  *
1287  * Caller need to acquire lock with wlan_vdev_obj_lock()
1288  *
1289  * Return: void
1290  */
1291 static inline void wlan_vdev_set_selfpeer(struct wlan_objmgr_vdev *vdev,
1292 						struct wlan_objmgr_peer *peer)
1293 {
1294 	/* This API is invoked with lock acquired, do not add log prints */
1295 	vdev->vdev_objmgr.self_peer = peer;
1296 }
1297 
1298 /**
1299  * wlan_vdev_get_selfpeer() - get self peer
1300  * @vdev: VDEV object
1301  *
1302  * API to get the self peer of VDEV
1303  *
1304  * Caller need to acquire lock with wlan_vdev_obj_lock()
1305  *
1306  * Return:
1307  * @peer: peer pointer
1308  */
1309 static inline struct wlan_objmgr_peer *wlan_vdev_get_selfpeer(
1310 					struct wlan_objmgr_vdev *vdev)
1311 {
1312 	/* This API is invoked with lock acquired, do not add log prints */
1313 	return vdev->vdev_objmgr.self_peer;
1314 }
1315 
1316 /**
1317  * wlan_vdev_set_bsspeer() - set bss peer
1318  * @vdev: VDEV object
1319  * @peer: BSS peer pointer
1320  *
1321  * API to set the BSS peer of VDEV
1322  *
1323  * Caller need to acquire lock with wlan_vdev_obj_lock()
1324  *
1325  * Return: void
1326  */
1327 static inline void wlan_vdev_set_bsspeer(struct wlan_objmgr_vdev *vdev,
1328 						 struct wlan_objmgr_peer *peer)
1329 {
1330 	/* This API is invoked with lock acquired, do not add log prints */
1331 	vdev->vdev_objmgr.bss_peer = peer;
1332 }
1333 
1334 /**
1335  * wlan_vdev_get_bsspeer() - get bss peer
1336  * @vdev: VDEV object
1337  *
1338  * API to get the BSS peer of VDEV
1339  *
1340  * Caller need to acquire lock with wlan_vdev_obj_lock()
1341  *
1342  * Return:
1343  * @peer: BSS peer pointer
1344  */
1345 static inline struct wlan_objmgr_peer *wlan_vdev_get_bsspeer(
1346 					struct wlan_objmgr_vdev *vdev)
1347 {
1348 	/* This API is invoked with lock acquired, do not add log prints */
1349 	return vdev->vdev_objmgr.bss_peer;
1350 }
1351 
1352 /**
1353  * wlan_vdev_get_ospriv() - get os priv pointer
1354  * @vdev: VDEV object
1355  *
1356  * API to get OS private pointer from VDEV
1357  *
1358  * Caller need to acquire lock with wlan_vdev_obj_lock()
1359  *
1360  * Return: ospriv - private pointer
1361  */
1362 static inline void *wlan_vdev_get_ospriv(struct wlan_objmgr_vdev *vdev)
1363 {
1364 	/* This API is invoked with lock acquired, do not add log prints */
1365 	return vdev->vdev_nif.osdev;
1366 }
1367 #endif /* _WLAN_OBJMGR_VDEV_OBJ_H_*/
1368