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