1 /* 2 * Copyright (c) 2019-2021, 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 /** 20 * DOC: wlan_vdev_mgr_utils_api.c 21 * 22 * This file provide definition for APIs to enable Tx Ops and Rx Ops registered 23 * through LMAC 24 */ 25 #include <wlan_vdev_mgr_utils_api.h> 26 #include <wlan_vdev_mgr_tgt_if_tx_api.h> 27 #include <cdp_txrx_cmn_struct.h> 28 #include <wlan_mlme_dbg.h> 29 #include <qdf_module.h> 30 #include <wlan_vdev_mgr_tgt_if_tx_api.h> 31 32 static QDF_STATUS vdev_mgr_config_ratemask_update( 33 struct vdev_mlme_obj *mlme_obj, 34 struct config_ratemask_params *param) 35 { 36 struct wlan_objmgr_vdev *vdev; 37 38 vdev = mlme_obj->vdev; 39 param->vdev_id = wlan_vdev_get_id(vdev); 40 param->type = mlme_obj->mgmt.rate_info.type; 41 param->lower32 = mlme_obj->mgmt.rate_info.lower32; 42 param->higher32 = mlme_obj->mgmt.rate_info.higher32; 43 param->lower32_2 = mlme_obj->mgmt.rate_info.lower32_2; 44 45 return QDF_STATUS_SUCCESS; 46 } 47 48 enum wlan_op_subtype 49 wlan_util_vdev_get_cdp_txrx_subtype(struct wlan_objmgr_vdev *vdev) 50 { 51 enum QDF_OPMODE qdf_opmode; 52 enum wlan_op_subtype cdp_txrx_subtype; 53 54 qdf_opmode = wlan_vdev_mlme_get_opmode(vdev); 55 switch (qdf_opmode) { 56 case QDF_P2P_DEVICE_MODE: 57 cdp_txrx_subtype = wlan_op_subtype_p2p_device; 58 break; 59 case QDF_P2P_CLIENT_MODE: 60 cdp_txrx_subtype = wlan_op_subtype_p2p_cli; 61 break; 62 case QDF_P2P_GO_MODE: 63 cdp_txrx_subtype = wlan_op_subtype_p2p_go; 64 break; 65 default: 66 cdp_txrx_subtype = wlan_op_subtype_none; 67 }; 68 69 return cdp_txrx_subtype; 70 } 71 72 enum wlan_op_mode 73 wlan_util_vdev_get_cdp_txrx_opmode(struct wlan_objmgr_vdev *vdev) 74 { 75 enum QDF_OPMODE qdf_opmode; 76 enum wlan_op_mode cdp_txrx_opmode; 77 78 qdf_opmode = wlan_vdev_mlme_get_opmode(vdev); 79 switch (qdf_opmode) { 80 case QDF_STA_MODE: 81 cdp_txrx_opmode = wlan_op_mode_sta; 82 break; 83 case QDF_SAP_MODE: 84 cdp_txrx_opmode = wlan_op_mode_ap; 85 break; 86 case QDF_MONITOR_MODE: 87 cdp_txrx_opmode = wlan_op_mode_monitor; 88 break; 89 case QDF_P2P_DEVICE_MODE: 90 cdp_txrx_opmode = wlan_op_mode_ap; 91 break; 92 case QDF_P2P_CLIENT_MODE: 93 cdp_txrx_opmode = wlan_op_mode_sta; 94 break; 95 case QDF_P2P_GO_MODE: 96 cdp_txrx_opmode = wlan_op_mode_ap; 97 break; 98 case QDF_OCB_MODE: 99 cdp_txrx_opmode = wlan_op_mode_ocb; 100 break; 101 case QDF_IBSS_MODE: 102 cdp_txrx_opmode = wlan_op_mode_ibss; 103 break; 104 case QDF_NDI_MODE: 105 cdp_txrx_opmode = wlan_op_mode_ndi; 106 break; 107 default: 108 cdp_txrx_opmode = wlan_op_mode_unknown; 109 }; 110 111 return cdp_txrx_opmode; 112 } 113 114 QDF_STATUS 115 wlan_util_vdev_mlme_set_ratemask_config(struct vdev_mlme_obj *vdev_mlme) 116 { 117 struct config_ratemask_params rm_param = {0}; 118 119 if (!vdev_mlme) { 120 mlme_err("VDEV MLME is NULL"); 121 return QDF_STATUS_E_FAILURE; 122 } 123 124 vdev_mgr_config_ratemask_update(vdev_mlme, &rm_param); 125 126 return tgt_vdev_mgr_config_ratemask_cmd_send(vdev_mlme, &rm_param); 127 } 128 129 qdf_export_symbol(wlan_util_vdev_mlme_set_ratemask_config); 130 131 static QDF_STATUS 132 tgt_vdev_mgr_vdev_set_param_wrapper(struct vdev_mlme_obj *vdev_mlme, 133 enum wlan_mlme_cfg_id param_id, 134 struct wlan_vdev_mgr_cfg mlme_cfg) 135 { 136 uint8_t id, count = 0; 137 bool is_mbss_enabled, is_cmn_param = 0; 138 unsigned long vdev_bmap = 0; 139 struct wlan_objmgr_pdev *pdev; 140 struct vdev_mlme_mbss_11ax *mbss; 141 struct vdev_set_params param1 = {0}; 142 struct multiple_vdev_set_param param2 = {0}; 143 QDF_STATUS status = QDF_STATUS_SUCCESS; 144 145 mbss = &vdev_mlme->mgmt.mbss_11ax; 146 is_mbss_enabled = (mbss->mbssid_flags 147 & WLAN_VDEV_MLME_FLAGS_NON_MBSSID_AP) ? 0 : 1; 148 149 if (is_mbss_enabled) { 150 vdev_bmap = mbss->vdev_bmap; 151 is_cmn_param = mbss->is_cmn_param; 152 } 153 154 /* 1. if non tx vap and cmn param, dont send any WMI 155 * 2. if tx vap and cmn param, send multi vdev set WMI 156 * 3. if non tx vap and non cmn param, send vdev set WMI 157 * 4. if tx vap and non cmn param, send vdev set WMI 158 * 5. if non mbss vap, send vdev set WMI 159 */ 160 if (!is_mbss_enabled || !is_cmn_param) { 161 param1.param_id = param_id; 162 param1.vdev_id = wlan_vdev_get_id(vdev_mlme->vdev); 163 param1.param_value = mlme_cfg.value; 164 return tgt_vdev_mgr_set_param_send(vdev_mlme, ¶m1); 165 } 166 167 if (is_cmn_param && vdev_bmap) { 168 pdev = wlan_vdev_get_pdev(vdev_mlme->vdev); 169 param2.pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev); 170 param2.param_id = param_id; 171 param2.param_value = mlme_cfg.value; 172 173 for (id = 0; id < WLAN_UMAC_PDEV_MAX_VDEVS; id++) { 174 if (qdf_test_bit(id, &vdev_bmap)) { 175 param2.vdev_ids[count] = id; 176 count++; 177 } 178 } 179 param2.num_vdevs = count; 180 status = tgt_vdev_mgr_multiple_vdev_set_param(pdev, ¶m2); 181 mbss->vdev_bmap = 0; 182 } 183 184 /* Reset the is_cmn_param for this vap */ 185 mbss->is_cmn_param = 0; 186 187 return status; 188 } 189 190 QDF_STATUS 191 wlan_util_vdev_mlme_set_param(struct vdev_mlme_obj *vdev_mlme, 192 enum wlan_mlme_cfg_id param_id, 193 struct wlan_vdev_mgr_cfg mlme_cfg) 194 { 195 struct wlan_objmgr_vdev *vdev; 196 struct vdev_mlme_proto *mlme_proto; 197 struct vdev_mlme_mgmt *mlme_mgmt; 198 struct vdev_mlme_inactivity_params *inactivity_params; 199 bool is_wmi_cmd = false; 200 int ret = QDF_STATUS_SUCCESS; 201 202 if (!vdev_mlme) { 203 mlme_err("VDEV MLME is NULL"); 204 return QDF_STATUS_E_FAILURE; 205 } 206 vdev = vdev_mlme->vdev; 207 mlme_proto = &vdev_mlme->proto; 208 mlme_mgmt = &vdev_mlme->mgmt; 209 inactivity_params = &mlme_mgmt->inactivity_params; 210 211 switch (param_id) { 212 case WLAN_MLME_CFG_DTIM_PERIOD: 213 mlme_proto->generic.dtim_period = mlme_cfg.value; 214 is_wmi_cmd = true; 215 break; 216 case WLAN_MLME_CFG_SLOT_TIME: 217 mlme_proto->generic.slot_time = mlme_cfg.value; 218 is_wmi_cmd = true; 219 break; 220 case WLAN_MLME_CFG_PROTECTION_MODE: 221 mlme_proto->generic.protection_mode = mlme_cfg.value; 222 is_wmi_cmd = true; 223 break; 224 case WLAN_MLME_CFG_BEACON_INTERVAL: 225 mlme_proto->generic.beacon_interval = mlme_cfg.value; 226 is_wmi_cmd = true; 227 break; 228 case WLAN_MLME_CFG_LDPC: 229 mlme_proto->generic.ldpc = mlme_cfg.value; 230 is_wmi_cmd = true; 231 break; 232 case WLAN_MLME_CFG_NSS: 233 mlme_proto->generic.nss = mlme_cfg.value; 234 is_wmi_cmd = true; 235 break; 236 case WLAN_MLME_CFG_TSF_ADJUST: 237 mlme_proto->generic.tsfadjust = mlme_cfg.tsf; 238 break; 239 case WLAN_MLME_CFG_ASSOC_ID: 240 mlme_proto->sta.assoc_id = mlme_cfg.value; 241 break; 242 case WLAN_MLME_CFG_VHT_CAPS: 243 mlme_proto->vht_info.caps = mlme_cfg.value; 244 break; 245 case WLAN_MLME_CFG_SUBFER: 246 mlme_proto->vht_info.subfer = mlme_cfg.value; 247 break; 248 case WLAN_MLME_CFG_MUBFER: 249 mlme_proto->vht_info.mubfer = mlme_cfg.value; 250 break; 251 case WLAN_MLME_CFG_SUBFEE: 252 mlme_proto->vht_info.subfee = mlme_cfg.value; 253 break; 254 case WLAN_MLME_CFG_MUBFEE: 255 mlme_proto->vht_info.mubfee = mlme_cfg.value; 256 break; 257 case WLAN_MLME_CFG_IMLICIT_BF: 258 mlme_proto->vht_info.implicit_bf = mlme_cfg.value; 259 break; 260 case WLAN_MLME_CFG_SOUNDING_DIM: 261 mlme_proto->vht_info.sounding_dimension = mlme_cfg.value; 262 break; 263 case WLAN_MLME_CFG_BFEE_STS_CAP: 264 mlme_proto->vht_info.bfee_sts_cap = mlme_cfg.value; 265 break; 266 case WLAN_MLME_CFG_TXBF_CAPS: 267 is_wmi_cmd = true; 268 break; 269 case WLAN_MLME_CFG_HT_CAPS: 270 mlme_proto->ht_info.ht_caps = mlme_cfg.value; 271 break; 272 case WLAN_MLME_CFG_HE_OPS: 273 mlme_proto->he_ops_info.he_ops = mlme_cfg.value; 274 is_wmi_cmd = true; 275 break; 276 #ifdef WLAN_FEATURE_11BE 277 case WLAN_MLME_CFG_EHT_OPS: 278 mlme_proto->eht_ops_info.eht_ops = mlme_cfg.value; 279 is_wmi_cmd = true; 280 break; 281 #endif 282 case WLAN_MLME_CFG_RTS_THRESHOLD: 283 mlme_mgmt->generic.rts_threshold = mlme_cfg.value; 284 is_wmi_cmd = true; 285 break; 286 case WLAN_MLME_CFG_FRAG_THRESHOLD: 287 mlme_mgmt->generic.frag_threshold = mlme_cfg.value; 288 is_wmi_cmd = true; 289 break; 290 case WLAN_MLME_CFG_PROBE_DELAY: 291 mlme_mgmt->generic.probe_delay = mlme_cfg.value; 292 break; 293 case WLAN_MLME_CFG_REPEAT_PROBE_TIME: 294 mlme_mgmt->generic.repeat_probe_time = mlme_cfg.value; 295 break; 296 case WLAN_MLME_CFG_DROP_UNENCRY: 297 mlme_mgmt->generic.drop_unencry = mlme_cfg.value; 298 is_wmi_cmd = true; 299 break; 300 case WLAN_MLME_CFG_TX_PWR_LIMIT: 301 mlme_mgmt->generic.tx_pwrlimit = mlme_cfg.value; 302 break; 303 case WLAN_MLME_CFG_TX_POWER: 304 mlme_mgmt->generic.tx_power = mlme_cfg.value; 305 is_wmi_cmd = true; 306 break; 307 case WLAN_MLME_CFG_AMPDU: 308 mlme_mgmt->generic.ampdu = mlme_cfg.value; 309 mlme_cfg.value = (mlme_cfg.value << 8) + 0xFF; 310 is_wmi_cmd = true; 311 break; 312 case WLAN_MLME_CFG_AMPDU_SIZE: 313 mlme_mgmt->generic.ampdu = mlme_cfg.value; 314 break; 315 case WLAN_MLME_CFG_AMSDU: 316 mlme_mgmt->generic.amsdu = mlme_cfg.value; 317 mlme_cfg.value = (mlme_cfg.value << 8) + 0xFF; 318 is_wmi_cmd = true; 319 break; 320 case WLAN_MLME_CFG_AMSDU_SIZE: 321 mlme_mgmt->generic.amsdu = mlme_cfg.value; 322 break; 323 case WLAN_MLME_CFG_BMISS_FIRST_BCNT: 324 inactivity_params->bmiss_first_bcnt = mlme_cfg.value; 325 break; 326 case WLAN_MLME_CFG_BMISS_FINAL_BCNT: 327 inactivity_params->bmiss_final_bcnt = mlme_cfg.value; 328 break; 329 case WLAN_MLME_CFG_MIN_IDLE_INACTIVE_TIME: 330 inactivity_params->keepalive_min_idle_inactive_time_secs = 331 mlme_cfg.value; 332 is_wmi_cmd = true; 333 break; 334 case WLAN_MLME_CFG_MAX_IDLE_INACTIVE_TIME: 335 inactivity_params->keepalive_max_idle_inactive_time_secs = 336 mlme_cfg.value; 337 is_wmi_cmd = true; 338 break; 339 case WLAN_MLME_CFG_MAX_UNRESPONSIVE_INACTIVE_TIME: 340 inactivity_params->keepalive_max_unresponsive_time_secs = 341 mlme_cfg.value; 342 is_wmi_cmd = true; 343 break; 344 case WLAN_MLME_CFG_RATE_FLAGS: 345 mlme_mgmt->rate_info.rate_flags = mlme_cfg.value; 346 break; 347 case WLAN_MLME_CFG_PER_BAND_TX_MGMT_RATE: 348 mlme_mgmt->rate_info.per_band_tx_mgmt_rate = mlme_cfg.value; 349 break; 350 case WLAN_MLME_CFG_MAX_RATE: 351 mlme_mgmt->rate_info.max_rate = mlme_cfg.value; 352 break; 353 case WLAN_MLME_CFG_TX_MGMT_RATE: 354 mlme_mgmt->rate_info.tx_mgmt_rate = mlme_cfg.value; 355 break; 356 case WLAN_MLME_CFG_TX_RTSCTS_RATE: 357 mlme_mgmt->rate_info.rtscts_tx_rate = mlme_cfg.value; 358 break; 359 case WLAN_MLME_CFG_TX_CHAINMASK: 360 mlme_mgmt->chainmask_info.tx_chainmask = mlme_cfg.value; 361 break; 362 case WLAN_MLME_CFG_RX_CHAINMASK: 363 mlme_mgmt->chainmask_info.rx_chainmask = mlme_cfg.value; 364 break; 365 case WLAN_MLME_CFG_PKT_POWERSAVE: 366 mlme_mgmt->powersave_info.packet_powersave = mlme_cfg.value; 367 break; 368 case WLAN_MLME_CFG_MAX_LI_OF_MODDTIM: 369 mlme_mgmt->powersave_info.max_li_of_moddtim = mlme_cfg.value; 370 break; 371 case WLAN_MLME_CFG_DYNDTIM_CNT: 372 mlme_mgmt->powersave_info.dyndtim_cnt = mlme_cfg.value; 373 break; 374 case WLAN_MLME_CFG_LISTEN_INTERVAL: 375 mlme_mgmt->powersave_info.listen_interval = mlme_cfg.value; 376 is_wmi_cmd = true; 377 break; 378 case WLAN_MLME_CFG_MODDTIM_CNT: 379 mlme_mgmt->powersave_info.moddtim_cnt = mlme_cfg.value; 380 break; 381 case WLAN_MLME_CFG_PROFILE_IDX: 382 mlme_mgmt->mbss_11ax.profile_idx = mlme_cfg.value; 383 break; 384 case WLAN_MLME_CFG_PROFILE_NUM: 385 mlme_mgmt->mbss_11ax.profile_num = mlme_cfg.value; 386 break; 387 case WLAN_MLME_CFG_MBSSID_FLAGS: 388 mlme_mgmt->mbss_11ax.mbssid_flags = mlme_cfg.value; 389 break; 390 case WLAN_MLME_CFG_VDEVID_TRANS: 391 mlme_mgmt->mbss_11ax.vdevid_trans = mlme_cfg.value; 392 break; 393 case WLAN_MLME_CFG_SSID: 394 if (mlme_cfg.ssid_cfg.length <= WLAN_SSID_MAX_LEN) { 395 qdf_mem_copy(mlme_mgmt->generic.ssid, 396 mlme_cfg.ssid_cfg.ssid, 397 mlme_cfg.ssid_cfg.length); 398 mlme_mgmt->generic.ssid_len = 399 mlme_cfg.ssid_cfg.length; 400 } else { 401 mlme_mgmt->generic.ssid_len = 0; 402 } 403 404 break; 405 case WLAN_MLME_CFG_TRANS_BSSID: 406 qdf_mem_copy(mlme_mgmt->mbss_11ax.trans_bssid, 407 mlme_cfg.trans_bssid, QDF_MAC_ADDR_SIZE); 408 break; 409 case WLAN_MLME_CFG_TYPE: 410 mlme_mgmt->generic.type = mlme_cfg.value; 411 break; 412 case WLAN_MLME_CFG_SUBTYPE: 413 mlme_mgmt->generic.subtype = mlme_cfg.value; 414 break; 415 case WLAN_MLME_CFG_UAPSD: 416 mlme_proto->sta.uapsd_cfg = mlme_cfg.value; 417 break; 418 case WLAN_MLME_CFG_TX_ENCAP_TYPE: 419 is_wmi_cmd = true; 420 mlme_mgmt->generic.tx_encap_type = mlme_cfg.value; 421 tgt_vdev_mgr_set_tx_rx_decap_type(vdev_mlme, 422 WLAN_MLME_CFG_TX_ENCAP_TYPE, 423 mlme_cfg.value); 424 break; 425 case WLAN_MLME_CFG_RX_DECAP_TYPE: 426 is_wmi_cmd = true; 427 mlme_mgmt->generic.rx_decap_type = mlme_cfg.value; 428 tgt_vdev_mgr_set_tx_rx_decap_type(vdev_mlme, 429 WLAN_MLME_CFG_RX_DECAP_TYPE, 430 mlme_cfg.value); 431 break; 432 case WLAN_MLME_CFG_RATEMASK_TYPE: 433 mlme_mgmt->rate_info.type = mlme_cfg.value; 434 break; 435 case WLAN_MLME_CFG_RATEMASK_LOWER32: 436 mlme_mgmt->rate_info.lower32 = mlme_cfg.value; 437 break; 438 case WLAN_MLME_CFG_RATEMASK_HIGHER32: 439 mlme_mgmt->rate_info.higher32 = mlme_cfg.value; 440 break; 441 case WLAN_MLME_CFG_RATEMASK_LOWER32_2: 442 mlme_mgmt->rate_info.lower32_2 = mlme_cfg.value; 443 break; 444 case WLAN_MLME_CFG_BCN_TX_RATE: 445 mlme_mgmt->rate_info.bcn_tx_rate = mlme_cfg.value; 446 break; 447 case WLAN_MLME_CFG_BCN_TX_RATE_CODE: 448 is_wmi_cmd = true; 449 break; 450 case WLAN_MLME_CFG_TX_MGMT_RATE_CODE: 451 is_wmi_cmd = true; 452 break; 453 case WLAN_MLME_CFG_ENABLE_MULTI_GROUP_KEY: 454 is_wmi_cmd = true; 455 break; 456 case WLAN_MLME_CFG_MAX_GROUP_KEYS: 457 is_wmi_cmd = true; 458 break; 459 case WLAN_MLME_CFG_TX_STREAMS: 460 mlme_mgmt->chainmask_info.num_tx_chain = mlme_cfg.value; 461 break; 462 case WLAN_MLME_CFG_RX_STREAMS: 463 mlme_mgmt->chainmask_info.num_rx_chain = mlme_cfg.value; 464 break; 465 case WLAN_MLME_CFG_ENABLE_DISABLE_RTT_RESPONDER_ROLE: 466 is_wmi_cmd = true; 467 break; 468 case WLAN_MLME_CFG_ENABLE_DISABLE_RTT_INITIATOR_ROLE: 469 is_wmi_cmd = true; 470 break; 471 default: 472 break; 473 } 474 475 if (is_wmi_cmd) 476 ret = tgt_vdev_mgr_vdev_set_param_wrapper(vdev_mlme, param_id, 477 mlme_cfg); 478 479 return ret; 480 } 481 482 qdf_export_symbol(wlan_util_vdev_mlme_set_param); 483 484 void wlan_util_vdev_mlme_get_param(struct vdev_mlme_obj *vdev_mlme, 485 enum wlan_mlme_cfg_id param_id, 486 uint32_t *value) 487 { 488 struct vdev_mlme_proto *mlme_proto; 489 struct vdev_mlme_mgmt *mlme_mgmt; 490 struct vdev_mlme_inactivity_params *inactivity_params; 491 492 if (!vdev_mlme) { 493 mlme_err("VDEV MLME is NULL"); 494 return; 495 } 496 mlme_proto = &vdev_mlme->proto; 497 mlme_mgmt = &vdev_mlme->mgmt; 498 inactivity_params = &mlme_mgmt->inactivity_params; 499 500 switch (param_id) { 501 case WLAN_MLME_CFG_DTIM_PERIOD: 502 *value = mlme_proto->generic.dtim_period; 503 break; 504 case WLAN_MLME_CFG_SLOT_TIME: 505 *value = mlme_proto->generic.slot_time; 506 break; 507 case WLAN_MLME_CFG_PROTECTION_MODE: 508 *value = mlme_proto->generic.protection_mode; 509 break; 510 case WLAN_MLME_CFG_BEACON_INTERVAL: 511 *value = mlme_proto->generic.beacon_interval; 512 break; 513 case WLAN_MLME_CFG_LDPC: 514 *value = mlme_proto->generic.ldpc; 515 break; 516 case WLAN_MLME_CFG_NSS: 517 *value = mlme_proto->generic.nss; 518 break; 519 case WLAN_MLME_CFG_ASSOC_ID: 520 *value = mlme_proto->sta.assoc_id; 521 break; 522 case WLAN_MLME_CFG_VHT_CAPS: 523 *value = mlme_proto->vht_info.caps; 524 break; 525 case WLAN_MLME_CFG_SUBFER: 526 *value = mlme_proto->vht_info.subfer; 527 break; 528 case WLAN_MLME_CFG_MUBFER: 529 *value = mlme_proto->vht_info.mubfer; 530 break; 531 case WLAN_MLME_CFG_SUBFEE: 532 *value = mlme_proto->vht_info.subfee; 533 break; 534 case WLAN_MLME_CFG_MUBFEE: 535 *value = mlme_proto->vht_info.mubfee; 536 break; 537 case WLAN_MLME_CFG_IMLICIT_BF: 538 *value = mlme_proto->vht_info.implicit_bf; 539 break; 540 case WLAN_MLME_CFG_SOUNDING_DIM: 541 *value = mlme_proto->vht_info.sounding_dimension; 542 break; 543 case WLAN_MLME_CFG_BFEE_STS_CAP: 544 *value = mlme_proto->vht_info.bfee_sts_cap; 545 break; 546 case WLAN_MLME_CFG_HT_CAPS: 547 *value = mlme_proto->ht_info.ht_caps; 548 break; 549 case WLAN_MLME_CFG_HE_OPS: 550 *value = mlme_proto->he_ops_info.he_ops; 551 break; 552 #ifdef WLAN_FEATURE_11BE 553 case WLAN_MLME_CFG_EHT_OPS: 554 *value = mlme_proto->eht_ops_info.eht_ops; 555 break; 556 #endif 557 case WLAN_MLME_CFG_RTS_THRESHOLD: 558 *value = mlme_mgmt->generic.rts_threshold; 559 break; 560 case WLAN_MLME_CFG_FRAG_THRESHOLD: 561 *value = mlme_mgmt->generic.frag_threshold; 562 break; 563 case WLAN_MLME_CFG_PROBE_DELAY: 564 *value = mlme_mgmt->generic.probe_delay; 565 break; 566 case WLAN_MLME_CFG_REPEAT_PROBE_TIME: 567 *value = mlme_mgmt->generic.repeat_probe_time; 568 break; 569 case WLAN_MLME_CFG_DROP_UNENCRY: 570 *value = mlme_mgmt->generic.drop_unencry; 571 break; 572 case WLAN_MLME_CFG_TX_PWR_LIMIT: 573 *value = mlme_mgmt->generic.tx_pwrlimit; 574 break; 575 case WLAN_MLME_CFG_TX_POWER: 576 *value = mlme_mgmt->generic.tx_power; 577 break; 578 case WLAN_MLME_CFG_AMPDU: 579 *value = mlme_mgmt->generic.ampdu; 580 break; 581 case WLAN_MLME_CFG_AMSDU: 582 *value = mlme_mgmt->generic.amsdu; 583 break; 584 case WLAN_MLME_CFG_SSID_LEN: 585 *value = mlme_mgmt->generic.ssid_len; 586 break; 587 case WLAN_MLME_CFG_BMISS_FIRST_BCNT: 588 *value = inactivity_params->bmiss_first_bcnt; 589 break; 590 case WLAN_MLME_CFG_BMISS_FINAL_BCNT: 591 *value = inactivity_params->bmiss_final_bcnt; 592 break; 593 case WLAN_MLME_CFG_MIN_IDLE_INACTIVE_TIME: 594 *value = 595 inactivity_params->keepalive_min_idle_inactive_time_secs; 596 break; 597 case WLAN_MLME_CFG_MAX_IDLE_INACTIVE_TIME: 598 *value = 599 inactivity_params->keepalive_max_idle_inactive_time_secs; 600 break; 601 case WLAN_MLME_CFG_MAX_UNRESPONSIVE_INACTIVE_TIME: 602 *value = 603 inactivity_params->keepalive_max_unresponsive_time_secs; 604 break; 605 case WLAN_MLME_CFG_RATE_FLAGS: 606 *value = mlme_mgmt->rate_info.rate_flags; 607 break; 608 case WLAN_MLME_CFG_PER_BAND_TX_MGMT_RATE: 609 *value = mlme_mgmt->rate_info.per_band_tx_mgmt_rate; 610 break; 611 case WLAN_MLME_CFG_MAX_RATE: 612 *value = mlme_mgmt->rate_info.max_rate; 613 break; 614 case WLAN_MLME_CFG_TX_MGMT_RATE: 615 *value = mlme_mgmt->rate_info.tx_mgmt_rate; 616 break; 617 case WLAN_MLME_CFG_TX_RTSCTS_RATE: 618 *value = mlme_mgmt->rate_info.rtscts_tx_rate; 619 break; 620 case WLAN_MLME_CFG_TX_CHAINMASK: 621 *value = mlme_mgmt->chainmask_info.tx_chainmask; 622 break; 623 case WLAN_MLME_CFG_RX_CHAINMASK: 624 *value = mlme_mgmt->chainmask_info.rx_chainmask; 625 break; 626 case WLAN_MLME_CFG_PKT_POWERSAVE: 627 *value = mlme_mgmt->powersave_info.packet_powersave; 628 break; 629 case WLAN_MLME_CFG_MAX_LI_OF_MODDTIM: 630 *value = mlme_mgmt->powersave_info.max_li_of_moddtim; 631 break; 632 case WLAN_MLME_CFG_DYNDTIM_CNT: 633 *value = mlme_mgmt->powersave_info.dyndtim_cnt; 634 break; 635 case WLAN_MLME_CFG_LISTEN_INTERVAL: 636 *value = mlme_mgmt->powersave_info.listen_interval; 637 break; 638 case WLAN_MLME_CFG_MODDTIM_CNT: 639 *value = mlme_mgmt->powersave_info.moddtim_cnt; 640 break; 641 case WLAN_MLME_CFG_PROFILE_IDX: 642 *value = mlme_mgmt->mbss_11ax.profile_idx; 643 break; 644 case WLAN_MLME_CFG_PROFILE_NUM: 645 *value = mlme_mgmt->mbss_11ax.profile_num; 646 break; 647 case WLAN_MLME_CFG_MBSSID_FLAGS: 648 *value = mlme_mgmt->mbss_11ax.mbssid_flags; 649 break; 650 case WLAN_MLME_CFG_VDEVID_TRANS: 651 *value = mlme_mgmt->mbss_11ax.vdevid_trans; 652 break; 653 case WLAN_MLME_CFG_BCN_TX_RATE: 654 *value = mlme_mgmt->rate_info.bcn_tx_rate; 655 break; 656 case WLAN_MLME_CFG_TX_STREAMS: 657 *value = mlme_mgmt->chainmask_info.num_tx_chain; 658 break; 659 case WLAN_MLME_CFG_RX_STREAMS: 660 *value = mlme_mgmt->chainmask_info.num_rx_chain; 661 break; 662 default: 663 break; 664 } 665 } 666 667 qdf_export_symbol(wlan_util_vdev_mlme_get_param); 668 669 void wlan_util_vdev_get_param(struct wlan_objmgr_vdev *vdev, 670 enum wlan_mlme_cfg_id param_id, 671 uint32_t *value) 672 { 673 ucfg_wlan_vdev_mgr_get_param(vdev, param_id, value); 674 } 675 676 qdf_export_symbol(wlan_util_vdev_get_param); 677