1 /* 2 * Copyright (c) 2019-2020, 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 QDF_STATUS 132 wlan_util_vdev_mlme_set_param(struct vdev_mlme_obj *vdev_mlme, 133 enum wlan_mlme_cfg_id param_id, 134 struct wlan_vdev_mgr_cfg mlme_cfg) 135 { 136 struct wlan_objmgr_vdev *vdev; 137 struct vdev_mlme_proto *mlme_proto; 138 struct vdev_mlme_mgmt *mlme_mgmt; 139 struct vdev_mlme_inactivity_params *inactivity_params; 140 bool is_wmi_cmd = false; 141 int ret = QDF_STATUS_SUCCESS; 142 struct vdev_set_params param = {0}; 143 144 if (!vdev_mlme) { 145 mlme_err("VDEV MLME is NULL"); 146 return QDF_STATUS_E_FAILURE; 147 } 148 vdev = vdev_mlme->vdev; 149 mlme_proto = &vdev_mlme->proto; 150 mlme_mgmt = &vdev_mlme->mgmt; 151 inactivity_params = &mlme_mgmt->inactivity_params; 152 153 switch (param_id) { 154 case WLAN_MLME_CFG_DTIM_PERIOD: 155 mlme_proto->generic.dtim_period = mlme_cfg.value; 156 is_wmi_cmd = true; 157 break; 158 case WLAN_MLME_CFG_SLOT_TIME: 159 mlme_proto->generic.slot_time = mlme_cfg.value; 160 is_wmi_cmd = true; 161 break; 162 case WLAN_MLME_CFG_PROTECTION_MODE: 163 mlme_proto->generic.protection_mode = mlme_cfg.value; 164 is_wmi_cmd = true; 165 break; 166 case WLAN_MLME_CFG_BEACON_INTERVAL: 167 mlme_proto->generic.beacon_interval = mlme_cfg.value; 168 is_wmi_cmd = true; 169 break; 170 case WLAN_MLME_CFG_LDPC: 171 mlme_proto->generic.ldpc = mlme_cfg.value; 172 is_wmi_cmd = true; 173 break; 174 case WLAN_MLME_CFG_NSS: 175 mlme_proto->generic.nss = mlme_cfg.value; 176 is_wmi_cmd = true; 177 break; 178 case WLAN_MLME_CFG_TSF_ADJUST: 179 mlme_proto->generic.tsfadjust = mlme_cfg.tsf; 180 break; 181 case WLAN_MLME_CFG_ASSOC_ID: 182 mlme_proto->sta.assoc_id = mlme_cfg.value; 183 break; 184 case WLAN_MLME_CFG_VHT_CAPS: 185 mlme_proto->vht_info.caps = mlme_cfg.value; 186 break; 187 case WLAN_MLME_CFG_SUBFER: 188 mlme_proto->vht_info.subfer = mlme_cfg.value; 189 break; 190 case WLAN_MLME_CFG_MUBFER: 191 mlme_proto->vht_info.mubfer = mlme_cfg.value; 192 break; 193 case WLAN_MLME_CFG_SUBFEE: 194 mlme_proto->vht_info.subfee = mlme_cfg.value; 195 break; 196 case WLAN_MLME_CFG_MUBFEE: 197 mlme_proto->vht_info.mubfee = mlme_cfg.value; 198 break; 199 case WLAN_MLME_CFG_IMLICIT_BF: 200 mlme_proto->vht_info.implicit_bf = mlme_cfg.value; 201 break; 202 case WLAN_MLME_CFG_SOUNDING_DIM: 203 mlme_proto->vht_info.sounding_dimension = mlme_cfg.value; 204 break; 205 case WLAN_MLME_CFG_BFEE_STS_CAP: 206 mlme_proto->vht_info.bfee_sts_cap = mlme_cfg.value; 207 break; 208 case WLAN_MLME_CFG_TXBF_CAPS: 209 is_wmi_cmd = true; 210 break; 211 case WLAN_MLME_CFG_HT_CAPS: 212 mlme_proto->ht_info.ht_caps = mlme_cfg.value; 213 break; 214 case WLAN_MLME_CFG_HE_OPS: 215 mlme_proto->he_ops_info.he_ops = mlme_cfg.value; 216 is_wmi_cmd = true; 217 break; 218 case WLAN_MLME_CFG_RTS_THRESHOLD: 219 mlme_mgmt->generic.rts_threshold = mlme_cfg.value; 220 is_wmi_cmd = true; 221 break; 222 case WLAN_MLME_CFG_FRAG_THRESHOLD: 223 mlme_mgmt->generic.frag_threshold = mlme_cfg.value; 224 is_wmi_cmd = true; 225 break; 226 case WLAN_MLME_CFG_PROBE_DELAY: 227 mlme_mgmt->generic.probe_delay = mlme_cfg.value; 228 break; 229 case WLAN_MLME_CFG_REPEAT_PROBE_TIME: 230 mlme_mgmt->generic.repeat_probe_time = mlme_cfg.value; 231 break; 232 case WLAN_MLME_CFG_DROP_UNENCRY: 233 mlme_mgmt->generic.drop_unencry = mlme_cfg.value; 234 is_wmi_cmd = true; 235 break; 236 case WLAN_MLME_CFG_TX_PWR_LIMIT: 237 mlme_mgmt->generic.tx_pwrlimit = mlme_cfg.value; 238 break; 239 case WLAN_MLME_CFG_TX_POWER: 240 mlme_mgmt->generic.tx_power = mlme_cfg.value; 241 is_wmi_cmd = true; 242 break; 243 case WLAN_MLME_CFG_AMPDU: 244 mlme_mgmt->generic.ampdu = mlme_cfg.value; 245 mlme_cfg.value = (mlme_cfg.value << 8) + 0xFF; 246 is_wmi_cmd = true; 247 break; 248 case WLAN_MLME_CFG_AMPDU_SIZE: 249 mlme_mgmt->generic.ampdu = mlme_cfg.value; 250 break; 251 case WLAN_MLME_CFG_AMSDU: 252 mlme_mgmt->generic.amsdu = mlme_cfg.value; 253 mlme_cfg.value = (mlme_cfg.value << 8) + 0xFF; 254 is_wmi_cmd = true; 255 break; 256 case WLAN_MLME_CFG_AMSDU_SIZE: 257 mlme_mgmt->generic.amsdu = mlme_cfg.value; 258 break; 259 case WLAN_MLME_CFG_BMISS_FIRST_BCNT: 260 inactivity_params->bmiss_first_bcnt = mlme_cfg.value; 261 break; 262 case WLAN_MLME_CFG_BMISS_FINAL_BCNT: 263 inactivity_params->bmiss_final_bcnt = mlme_cfg.value; 264 break; 265 case WLAN_MLME_CFG_MIN_IDLE_INACTIVE_TIME: 266 inactivity_params->keepalive_min_idle_inactive_time_secs = 267 mlme_cfg.value; 268 is_wmi_cmd = true; 269 break; 270 case WLAN_MLME_CFG_MAX_IDLE_INACTIVE_TIME: 271 inactivity_params->keepalive_max_idle_inactive_time_secs = 272 mlme_cfg.value; 273 is_wmi_cmd = true; 274 break; 275 case WLAN_MLME_CFG_MAX_UNRESPONSIVE_INACTIVE_TIME: 276 inactivity_params->keepalive_max_unresponsive_time_secs = 277 mlme_cfg.value; 278 is_wmi_cmd = true; 279 break; 280 case WLAN_MLME_CFG_RATE_FLAGS: 281 mlme_mgmt->rate_info.rate_flags = mlme_cfg.value; 282 break; 283 case WLAN_MLME_CFG_PER_BAND_TX_MGMT_RATE: 284 mlme_mgmt->rate_info.per_band_tx_mgmt_rate = mlme_cfg.value; 285 break; 286 case WLAN_MLME_CFG_MAX_RATE: 287 mlme_mgmt->rate_info.max_rate = mlme_cfg.value; 288 break; 289 case WLAN_MLME_CFG_TX_MGMT_RATE: 290 mlme_mgmt->rate_info.tx_mgmt_rate = mlme_cfg.value; 291 break; 292 case WLAN_MLME_CFG_TX_RTSCTS_RATE: 293 mlme_mgmt->rate_info.rtscts_tx_rate = mlme_cfg.value; 294 break; 295 case WLAN_MLME_CFG_TX_CHAINMASK: 296 mlme_mgmt->chainmask_info.tx_chainmask = mlme_cfg.value; 297 break; 298 case WLAN_MLME_CFG_RX_CHAINMASK: 299 mlme_mgmt->chainmask_info.rx_chainmask = mlme_cfg.value; 300 break; 301 case WLAN_MLME_CFG_PKT_POWERSAVE: 302 mlme_mgmt->powersave_info.packet_powersave = mlme_cfg.value; 303 break; 304 case WLAN_MLME_CFG_MAX_LI_OF_MODDTIM: 305 mlme_mgmt->powersave_info.max_li_of_moddtim = mlme_cfg.value; 306 break; 307 case WLAN_MLME_CFG_DYNDTIM_CNT: 308 mlme_mgmt->powersave_info.dyndtim_cnt = mlme_cfg.value; 309 break; 310 case WLAN_MLME_CFG_LISTEN_INTERVAL: 311 mlme_mgmt->powersave_info.listen_interval = mlme_cfg.value; 312 is_wmi_cmd = true; 313 break; 314 case WLAN_MLME_CFG_MODDTIM_CNT: 315 mlme_mgmt->powersave_info.moddtim_cnt = mlme_cfg.value; 316 break; 317 case WLAN_MLME_CFG_PROFILE_IDX: 318 mlme_mgmt->mbss_11ax.profile_idx = mlme_cfg.value; 319 break; 320 case WLAN_MLME_CFG_PROFILE_NUM: 321 mlme_mgmt->mbss_11ax.profile_num = mlme_cfg.value; 322 break; 323 case WLAN_MLME_CFG_MBSSID_FLAGS: 324 mlme_mgmt->mbss_11ax.mbssid_flags = mlme_cfg.value; 325 break; 326 case WLAN_MLME_CFG_VDEVID_TRANS: 327 mlme_mgmt->mbss_11ax.vdevid_trans = mlme_cfg.value; 328 break; 329 case WLAN_MLME_CFG_SSID: 330 if (mlme_cfg.ssid_cfg.length <= WLAN_SSID_MAX_LEN) { 331 qdf_mem_copy(mlme_mgmt->generic.ssid, 332 mlme_cfg.ssid_cfg.ssid, 333 mlme_cfg.ssid_cfg.length); 334 mlme_mgmt->generic.ssid_len = 335 mlme_cfg.ssid_cfg.length; 336 } else { 337 mlme_mgmt->generic.ssid_len = 0; 338 } 339 340 break; 341 case WLAN_MLME_CFG_TRANS_BSSID: 342 qdf_mem_copy(mlme_mgmt->mbss_11ax.trans_bssid, 343 mlme_cfg.trans_bssid, QDF_MAC_ADDR_SIZE); 344 break; 345 case WLAN_MLME_CFG_TYPE: 346 mlme_mgmt->generic.type = mlme_cfg.value; 347 break; 348 case WLAN_MLME_CFG_SUBTYPE: 349 mlme_mgmt->generic.subtype = mlme_cfg.value; 350 break; 351 case WLAN_MLME_CFG_UAPSD: 352 mlme_proto->sta.uapsd_cfg = mlme_cfg.value; 353 break; 354 case WLAN_MLME_CFG_TX_ENCAP_TYPE: 355 is_wmi_cmd = true; 356 mlme_mgmt->generic.tx_encap_type = mlme_cfg.value; 357 tgt_vdev_mgr_set_tx_rx_decap_type(vdev_mlme, 358 WLAN_MLME_CFG_TX_ENCAP_TYPE, 359 mlme_cfg.value); 360 break; 361 case WLAN_MLME_CFG_RX_DECAP_TYPE: 362 is_wmi_cmd = true; 363 mlme_mgmt->generic.rx_decap_type = mlme_cfg.value; 364 tgt_vdev_mgr_set_tx_rx_decap_type(vdev_mlme, 365 WLAN_MLME_CFG_RX_DECAP_TYPE, 366 mlme_cfg.value); 367 break; 368 case WLAN_MLME_CFG_RATEMASK_TYPE: 369 mlme_mgmt->rate_info.type = mlme_cfg.value; 370 break; 371 case WLAN_MLME_CFG_RATEMASK_LOWER32: 372 mlme_mgmt->rate_info.lower32 = mlme_cfg.value; 373 break; 374 case WLAN_MLME_CFG_RATEMASK_HIGHER32: 375 mlme_mgmt->rate_info.higher32 = mlme_cfg.value; 376 break; 377 case WLAN_MLME_CFG_RATEMASK_LOWER32_2: 378 mlme_mgmt->rate_info.lower32_2 = mlme_cfg.value; 379 break; 380 case WLAN_MLME_CFG_BCN_TX_RATE: 381 mlme_mgmt->rate_info.bcn_tx_rate = mlme_cfg.value; 382 break; 383 case WLAN_MLME_CFG_BCN_TX_RATE_CODE: 384 is_wmi_cmd = true; 385 break; 386 case WLAN_MLME_CFG_TX_MGMT_RATE_CODE: 387 is_wmi_cmd = true; 388 break; 389 case WLAN_MLME_CFG_ENABLE_MULTI_GROUP_KEY: 390 is_wmi_cmd = true; 391 break; 392 case WLAN_MLME_CFG_MAX_GROUP_KEYS: 393 is_wmi_cmd = true; 394 break; 395 default: 396 break; 397 } 398 399 if (is_wmi_cmd) { 400 param.param_id = param_id; 401 param.vdev_id = wlan_vdev_get_id(vdev); 402 param.param_value = mlme_cfg.value; 403 ret = tgt_vdev_mgr_set_param_send(vdev_mlme, ¶m); 404 } 405 406 return ret; 407 } 408 409 qdf_export_symbol(wlan_util_vdev_mlme_set_param); 410 411 void wlan_util_vdev_mlme_get_param(struct vdev_mlme_obj *vdev_mlme, 412 enum wlan_mlme_cfg_id param_id, 413 uint32_t *value) 414 { 415 struct vdev_mlme_proto *mlme_proto; 416 struct vdev_mlme_mgmt *mlme_mgmt; 417 struct vdev_mlme_inactivity_params *inactivity_params; 418 419 if (!vdev_mlme) { 420 mlme_err("VDEV MLME is NULL"); 421 return; 422 } 423 mlme_proto = &vdev_mlme->proto; 424 mlme_mgmt = &vdev_mlme->mgmt; 425 inactivity_params = &mlme_mgmt->inactivity_params; 426 427 switch (param_id) { 428 case WLAN_MLME_CFG_DTIM_PERIOD: 429 *value = mlme_proto->generic.dtim_period; 430 break; 431 case WLAN_MLME_CFG_SLOT_TIME: 432 *value = mlme_proto->generic.slot_time; 433 break; 434 case WLAN_MLME_CFG_PROTECTION_MODE: 435 *value = mlme_proto->generic.protection_mode; 436 break; 437 case WLAN_MLME_CFG_BEACON_INTERVAL: 438 *value = mlme_proto->generic.beacon_interval; 439 break; 440 case WLAN_MLME_CFG_LDPC: 441 *value = mlme_proto->generic.ldpc; 442 break; 443 case WLAN_MLME_CFG_NSS: 444 *value = mlme_proto->generic.nss; 445 break; 446 case WLAN_MLME_CFG_ASSOC_ID: 447 *value = mlme_proto->sta.assoc_id; 448 break; 449 case WLAN_MLME_CFG_VHT_CAPS: 450 *value = mlme_proto->vht_info.caps; 451 break; 452 case WLAN_MLME_CFG_SUBFER: 453 *value = mlme_proto->vht_info.subfer; 454 break; 455 case WLAN_MLME_CFG_MUBFER: 456 *value = mlme_proto->vht_info.mubfer; 457 break; 458 case WLAN_MLME_CFG_SUBFEE: 459 *value = mlme_proto->vht_info.subfee; 460 break; 461 case WLAN_MLME_CFG_MUBFEE: 462 *value = mlme_proto->vht_info.mubfee; 463 break; 464 case WLAN_MLME_CFG_IMLICIT_BF: 465 *value = mlme_proto->vht_info.implicit_bf; 466 break; 467 case WLAN_MLME_CFG_SOUNDING_DIM: 468 *value = mlme_proto->vht_info.sounding_dimension; 469 break; 470 case WLAN_MLME_CFG_BFEE_STS_CAP: 471 *value = mlme_proto->vht_info.bfee_sts_cap; 472 break; 473 case WLAN_MLME_CFG_HT_CAPS: 474 *value = mlme_proto->ht_info.ht_caps; 475 break; 476 case WLAN_MLME_CFG_HE_OPS: 477 *value = mlme_proto->he_ops_info.he_ops; 478 break; 479 case WLAN_MLME_CFG_RTS_THRESHOLD: 480 *value = mlme_mgmt->generic.rts_threshold; 481 break; 482 case WLAN_MLME_CFG_FRAG_THRESHOLD: 483 *value = mlme_mgmt->generic.frag_threshold; 484 break; 485 case WLAN_MLME_CFG_PROBE_DELAY: 486 *value = mlme_mgmt->generic.probe_delay; 487 break; 488 case WLAN_MLME_CFG_REPEAT_PROBE_TIME: 489 *value = mlme_mgmt->generic.repeat_probe_time; 490 break; 491 case WLAN_MLME_CFG_DROP_UNENCRY: 492 *value = mlme_mgmt->generic.drop_unencry; 493 break; 494 case WLAN_MLME_CFG_TX_PWR_LIMIT: 495 *value = mlme_mgmt->generic.tx_pwrlimit; 496 break; 497 case WLAN_MLME_CFG_TX_POWER: 498 *value = mlme_mgmt->generic.tx_power; 499 break; 500 case WLAN_MLME_CFG_AMPDU: 501 *value = mlme_mgmt->generic.ampdu; 502 break; 503 case WLAN_MLME_CFG_AMSDU: 504 *value = mlme_mgmt->generic.amsdu; 505 break; 506 case WLAN_MLME_CFG_SSID_LEN: 507 *value = mlme_mgmt->generic.ssid_len; 508 break; 509 case WLAN_MLME_CFG_BMISS_FIRST_BCNT: 510 *value = inactivity_params->bmiss_first_bcnt; 511 break; 512 case WLAN_MLME_CFG_BMISS_FINAL_BCNT: 513 *value = inactivity_params->bmiss_final_bcnt; 514 break; 515 case WLAN_MLME_CFG_MIN_IDLE_INACTIVE_TIME: 516 *value = 517 inactivity_params->keepalive_min_idle_inactive_time_secs; 518 break; 519 case WLAN_MLME_CFG_MAX_IDLE_INACTIVE_TIME: 520 *value = 521 inactivity_params->keepalive_max_idle_inactive_time_secs; 522 break; 523 case WLAN_MLME_CFG_MAX_UNRESPONSIVE_INACTIVE_TIME: 524 *value = 525 inactivity_params->keepalive_max_unresponsive_time_secs; 526 break; 527 case WLAN_MLME_CFG_RATE_FLAGS: 528 *value = mlme_mgmt->rate_info.rate_flags; 529 break; 530 case WLAN_MLME_CFG_PER_BAND_TX_MGMT_RATE: 531 *value = mlme_mgmt->rate_info.per_band_tx_mgmt_rate; 532 break; 533 case WLAN_MLME_CFG_MAX_RATE: 534 *value = mlme_mgmt->rate_info.max_rate; 535 break; 536 case WLAN_MLME_CFG_TX_MGMT_RATE: 537 *value = mlme_mgmt->rate_info.tx_mgmt_rate; 538 break; 539 case WLAN_MLME_CFG_TX_RTSCTS_RATE: 540 *value = mlme_mgmt->rate_info.rtscts_tx_rate; 541 break; 542 case WLAN_MLME_CFG_TX_CHAINMASK: 543 *value = mlme_mgmt->chainmask_info.tx_chainmask; 544 break; 545 case WLAN_MLME_CFG_RX_CHAINMASK: 546 *value = mlme_mgmt->chainmask_info.rx_chainmask; 547 break; 548 case WLAN_MLME_CFG_PKT_POWERSAVE: 549 *value = mlme_mgmt->powersave_info.packet_powersave; 550 break; 551 case WLAN_MLME_CFG_MAX_LI_OF_MODDTIM: 552 *value = mlme_mgmt->powersave_info.max_li_of_moddtim; 553 break; 554 case WLAN_MLME_CFG_DYNDTIM_CNT: 555 *value = mlme_mgmt->powersave_info.dyndtim_cnt; 556 break; 557 case WLAN_MLME_CFG_LISTEN_INTERVAL: 558 *value = mlme_mgmt->powersave_info.listen_interval; 559 break; 560 case WLAN_MLME_CFG_MODDTIM_CNT: 561 *value = mlme_mgmt->powersave_info.moddtim_cnt; 562 break; 563 case WLAN_MLME_CFG_PROFILE_IDX: 564 *value = mlme_mgmt->mbss_11ax.profile_idx; 565 break; 566 case WLAN_MLME_CFG_PROFILE_NUM: 567 *value = mlme_mgmt->mbss_11ax.profile_num; 568 break; 569 case WLAN_MLME_CFG_MBSSID_FLAGS: 570 *value = mlme_mgmt->mbss_11ax.mbssid_flags; 571 break; 572 case WLAN_MLME_CFG_VDEVID_TRANS: 573 *value = mlme_mgmt->mbss_11ax.vdevid_trans; 574 break; 575 case WLAN_MLME_CFG_BCN_TX_RATE: 576 *value = mlme_mgmt->rate_info.bcn_tx_rate; 577 break; 578 default: 579 break; 580 } 581 } 582 583 qdf_export_symbol(wlan_util_vdev_mlme_get_param); 584 585 void wlan_util_vdev_get_param(struct wlan_objmgr_vdev *vdev, 586 enum wlan_mlme_cfg_id param_id, 587 uint32_t *value) 588 { 589 ucfg_wlan_vdev_mgr_get_param(vdev, param_id, value); 590 } 591 592 qdf_export_symbol(wlan_util_vdev_get_param); 593