1 /* 2 * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * 6 * Permission to use, copy, modify, and/or distribute this software for 7 * any purpose with or without fee is hereby granted, provided that the 8 * above copyright notice and this permission notice appear in all 9 * copies. 10 * 11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 12 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 13 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 14 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 15 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 16 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 17 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 18 * PERFORMANCE OF THIS SOFTWARE. 19 */ 20 21 /** 22 * DOC: wlan_reg_services_api.c 23 * contains regulatory service functions 24 */ 25 26 #include <qdf_status.h> 27 #include <qdf_types.h> 28 #include <qdf_module.h> 29 #include <wlan_cmn.h> 30 #include <reg_services_public_struct.h> 31 #include <wlan_reg_services_api.h> 32 #include <wlan_objmgr_psoc_obj.h> 33 #include <wlan_objmgr_pdev_obj.h> 34 #include "../../core/src/reg_priv_objs.h" 35 #include "../../core/src/reg_utils.h" 36 #include "../../core/src/reg_services_common.h" 37 #include "../../core/src/reg_db.h" 38 #include "../../core/src/reg_db_parser.h" 39 #include <../../core/src/reg_build_chan_list.h> 40 #include <../../core/src/reg_opclass.h> 41 #include <../../core/src/reg_callbacks.h> 42 #include <../../core/src/reg_offload_11d_scan.h> 43 #include <wlan_objmgr_global_obj.h> 44 45 QDF_STATUS wlan_reg_read_default_country(struct wlan_objmgr_psoc *psoc, 46 uint8_t *country) 47 { 48 /* 49 * Get the default country information 50 */ 51 return reg_read_default_country(psoc, country); 52 } 53 54 enum phy_ch_width wlan_get_next_lower_bandwidth(enum phy_ch_width ch_width) 55 { 56 return get_next_lower_bandwidth(ch_width); 57 } 58 59 QDF_STATUS wlan_reg_read_current_country(struct wlan_objmgr_psoc *psoc, 60 uint8_t *country) 61 { 62 /* 63 * Get the current country information 64 */ 65 return reg_read_current_country(psoc, country); 66 } 67 68 QDF_STATUS wlan_reg_get_max_5g_bw_from_country_code( 69 struct wlan_objmgr_pdev *pdev, 70 uint16_t cc, 71 uint16_t *max_bw_5g) 72 { 73 /* 74 * Get the max 5G bandwidth from country code 75 */ 76 return reg_get_max_5g_bw_from_country_code(pdev, cc, max_bw_5g); 77 } 78 79 QDF_STATUS wlan_reg_get_max_5g_bw_from_regdomain( 80 struct wlan_objmgr_pdev *pdev, 81 uint16_t regdmn, 82 uint16_t *max_bw_5g) 83 { 84 /* 85 * Get the max 5G bandwidth from regdomain pair value 86 */ 87 return reg_get_max_5g_bw_from_regdomain(pdev, regdmn, max_bw_5g); 88 } 89 90 QDF_STATUS wlan_reg_get_max_bw_5G_for_fo(struct wlan_objmgr_pdev *pdev) 91 { 92 return reg_get_max_bw_5G_for_fo(pdev); 93 } 94 95 bool wlan_reg_is_regdb_offloaded(struct wlan_objmgr_psoc *psoc) 96 { 97 return reg_is_regdb_offloaded(psoc); 98 } 99 100 QDF_STATUS wlan_reg_get_pwrmode_chan_list(struct wlan_objmgr_pdev *pdev, 101 struct regulatory_channel *chan_list, 102 enum supported_6g_pwr_types 103 in_6g_pwr_mode) 104 { 105 return reg_get_pwrmode_chan_list(pdev, chan_list, in_6g_pwr_mode); 106 } 107 108 qdf_export_symbol(wlan_reg_get_pwrmode_chan_list); 109 110 #ifdef CONFIG_REG_CLIENT 111 QDF_STATUS 112 wlan_reg_get_best_6g_power_type(struct wlan_objmgr_psoc *psoc, 113 struct wlan_objmgr_pdev *pdev, 114 enum reg_6g_ap_type *pwr_type_6g, 115 enum reg_6g_ap_type ap_pwr_type, 116 uint32_t chan_freq) 117 { 118 return reg_get_best_6g_power_type(psoc, pdev, pwr_type_6g, 119 ap_pwr_type, chan_freq); 120 } 121 #endif 122 123 QDF_STATUS wlan_reg_get_dfs_region(struct wlan_objmgr_pdev *pdev, 124 enum dfs_reg *dfs_reg) 125 { 126 /* 127 * Get the current dfs region 128 */ 129 reg_get_current_dfs_region(pdev, dfs_reg); 130 131 return QDF_STATUS_SUCCESS; 132 } 133 134 bool wlan_reg_is_chan_disabled_and_not_nol(struct regulatory_channel *chan) 135 { 136 return reg_is_chan_disabled_and_not_nol(chan); 137 } 138 139 QDF_STATUS wlan_reg_get_current_chan_list(struct wlan_objmgr_pdev *pdev, 140 struct regulatory_channel *chan_list) 141 { 142 return reg_get_current_chan_list(pdev, chan_list); 143 } 144 145 qdf_export_symbol(wlan_reg_get_current_chan_list); 146 147 bool wlan_reg_is_freq_enabled(struct wlan_objmgr_pdev *pdev, 148 qdf_freq_t freq, 149 enum supported_6g_pwr_types in_6g_pwr_mode) 150 { 151 return reg_is_freq_enabled(pdev, freq, in_6g_pwr_mode); 152 } 153 154 bool wlan_reg_is_freq_idx_enabled(struct wlan_objmgr_pdev *pdev, 155 enum channel_enum freq_idx, 156 enum supported_6g_pwr_types in_6g_pwr_mode) 157 { 158 return reg_is_freq_idx_enabled(pdev, freq_idx, in_6g_pwr_mode); 159 } 160 161 #ifdef CONFIG_REG_CLIENT 162 QDF_STATUS wlan_reg_get_secondary_current_chan_list( 163 struct wlan_objmgr_pdev *pdev, 164 struct regulatory_channel *chan_list) 165 { 166 return reg_get_secondary_current_chan_list(pdev, chan_list); 167 } 168 #endif 169 170 #if defined(CONFIG_AFC_SUPPORT) && defined(CONFIG_BAND_6GHZ) 171 QDF_STATUS wlan_reg_get_6g_afc_chan_list(struct wlan_objmgr_pdev *pdev, 172 struct regulatory_channel *chan_list) 173 { 174 return reg_get_6g_afc_chan_list(pdev, chan_list); 175 } 176 177 qdf_export_symbol(wlan_reg_get_6g_afc_chan_list); 178 179 QDF_STATUS 180 wlan_reg_get_6g_afc_mas_chan_list(struct wlan_objmgr_pdev *pdev, 181 struct regulatory_channel *chan_list) 182 { 183 return reg_get_6g_afc_mas_chan_list(pdev, chan_list); 184 } 185 186 qdf_export_symbol(wlan_reg_get_6g_afc_mas_chan_list); 187 #endif 188 189 uint16_t wlan_reg_get_bw_value(enum phy_ch_width bw) 190 { 191 return reg_get_bw_value(bw); 192 } 193 194 qdf_export_symbol(wlan_reg_get_bw_value); 195 196 void wlan_reg_set_dfs_region(struct wlan_objmgr_pdev *pdev, 197 enum dfs_reg dfs_reg) 198 { 199 reg_set_dfs_region(pdev, dfs_reg); 200 } 201 202 QDF_STATUS wlan_reg_get_domain_from_country_code(v_REGDOMAIN_t *reg_domain_ptr, 203 const uint8_t *country_alpha2, enum country_src source) 204 { 205 206 return reg_get_domain_from_country_code(reg_domain_ptr, 207 country_alpha2, source); 208 } 209 210 211 uint16_t wlan_reg_dmn_get_opclass_from_channel(uint8_t *country, 212 uint8_t channel, 213 uint8_t offset) 214 { 215 return reg_dmn_get_opclass_from_channel(country, channel, 216 offset); 217 } 218 219 uint8_t wlan_reg_get_band_cap_from_op_class(const uint8_t *country, 220 uint8_t num_of_opclass, 221 const uint8_t *opclass) 222 { 223 return reg_get_band_cap_from_op_class(country, 224 num_of_opclass, opclass); 225 } 226 227 uint8_t wlan_reg_get_opclass_from_freq_width(uint8_t *country, 228 qdf_freq_t freq, 229 uint16_t ch_width, 230 uint16_t behav_limit) 231 { 232 return reg_dmn_get_opclass_from_freq_width(country, freq, ch_width, 233 behav_limit); 234 } 235 236 void wlan_reg_dmn_print_channels_in_opclass(uint8_t *country, 237 uint8_t opclass) 238 { 239 reg_dmn_print_channels_in_opclass(country, opclass); 240 } 241 242 uint16_t wlan_reg_dmn_get_chanwidth_from_opclass(uint8_t *country, 243 uint8_t channel, 244 uint8_t opclass) 245 { 246 return reg_dmn_get_chanwidth_from_opclass(country, channel, 247 opclass); 248 } 249 250 uint16_t wlan_reg_dmn_get_chanwidth_from_opclass_auto(uint8_t *country, 251 uint8_t channel, 252 uint8_t opclass) 253 { 254 return reg_dmn_get_chanwidth_from_opclass_auto(country, channel, 255 opclass); 256 } 257 258 uint16_t wlan_reg_dmn_set_curr_opclasses(uint8_t num_classes, 259 uint8_t *class) 260 { 261 return reg_dmn_set_curr_opclasses(num_classes, class); 262 } 263 264 uint16_t wlan_reg_dmn_get_curr_opclasses(uint8_t *num_classes, 265 uint8_t *class) 266 { 267 return reg_dmn_get_curr_opclasses(num_classes, class); 268 } 269 270 QDF_STATUS 271 wlan_reg_get_opclass_details(struct wlan_objmgr_pdev *pdev, 272 struct regdmn_ap_cap_opclass_t *reg_ap_cap, 273 uint8_t *n_opclasses, 274 uint8_t max_supp_op_class, 275 bool global_tbl_lookup, 276 enum supported_6g_pwr_types in_6g_pwr_mode) 277 { 278 return reg_get_opclass_details(pdev, reg_ap_cap, n_opclasses, 279 max_supp_op_class, 280 global_tbl_lookup, 281 in_6g_pwr_mode); 282 } 283 284 QDF_STATUS 285 wlan_reg_get_opclass_for_cur_hwmode(struct wlan_objmgr_pdev *pdev, 286 struct regdmn_ap_cap_opclass_t *reg_ap_cap, 287 uint8_t *n_opclasses, 288 uint8_t max_supp_op_class, 289 bool global_tbl_lookup, 290 enum phy_ch_width max_chwidth, 291 bool is_80p80_supp, 292 enum supported_6g_pwr_types in_6g_pwr_mode) 293 { 294 return reg_get_opclass_for_cur_hwmode(pdev, reg_ap_cap, n_opclasses, 295 max_supp_op_class, 296 global_tbl_lookup, 297 max_chwidth, 298 is_80p80_supp, 299 in_6g_pwr_mode); 300 } 301 302 enum country_src wlan_reg_get_cc_and_src(struct wlan_objmgr_psoc *psoc, 303 uint8_t *alpha) 304 { 305 return reg_get_cc_and_src(psoc, alpha); 306 } 307 308 QDF_STATUS wlan_regulatory_init(void) 309 { 310 QDF_STATUS status; 311 312 status = wlan_objmgr_register_psoc_create_handler( 313 WLAN_UMAC_COMP_REGULATORY, 314 wlan_regulatory_psoc_obj_created_notification, NULL); 315 if (status != QDF_STATUS_SUCCESS) { 316 reg_err("failed to register reg psoc obj create handler"); 317 return status; 318 } 319 320 status = wlan_objmgr_register_psoc_destroy_handler( 321 WLAN_UMAC_COMP_REGULATORY, 322 wlan_regulatory_psoc_obj_destroyed_notification, NULL); 323 if (status != QDF_STATUS_SUCCESS) { 324 reg_err("failed to register reg psoc obj create handler"); 325 goto unreg_psoc_create; 326 } 327 328 status = wlan_objmgr_register_pdev_create_handler( 329 WLAN_UMAC_COMP_REGULATORY, 330 wlan_regulatory_pdev_obj_created_notification, NULL); 331 if (status != QDF_STATUS_SUCCESS) { 332 reg_err("failed to register reg psoc obj create handler"); 333 goto unreg_psoc_destroy; 334 } 335 336 status = wlan_objmgr_register_pdev_destroy_handler( 337 WLAN_UMAC_COMP_REGULATORY, 338 wlan_regulatory_pdev_obj_destroyed_notification, NULL); 339 if (status != QDF_STATUS_SUCCESS) { 340 reg_err("failed to register reg psoc obj create handler"); 341 goto unreg_pdev_create; 342 } 343 channel_map = channel_map_global; 344 reg_debug("regulatory handlers registered with obj mgr"); 345 346 return status; 347 348 unreg_pdev_create: 349 status = wlan_objmgr_unregister_pdev_create_handler( 350 WLAN_UMAC_COMP_REGULATORY, 351 wlan_regulatory_pdev_obj_created_notification, 352 NULL); 353 354 unreg_psoc_destroy: 355 status = wlan_objmgr_unregister_psoc_destroy_handler( 356 WLAN_UMAC_COMP_REGULATORY, 357 wlan_regulatory_psoc_obj_destroyed_notification, 358 NULL); 359 360 unreg_psoc_create: 361 status = wlan_objmgr_unregister_psoc_create_handler( 362 WLAN_UMAC_COMP_REGULATORY, 363 wlan_regulatory_psoc_obj_created_notification, 364 NULL); 365 366 return QDF_STATUS_E_FAILURE; 367 } 368 369 QDF_STATUS wlan_regulatory_deinit(void) 370 { 371 QDF_STATUS status, ret_status = QDF_STATUS_SUCCESS; 372 373 status = wlan_objmgr_unregister_pdev_destroy_handler( 374 WLAN_UMAC_COMP_REGULATORY, 375 wlan_regulatory_pdev_obj_destroyed_notification, NULL); 376 if (status != QDF_STATUS_SUCCESS) { 377 reg_err("failed to unregister reg pdev obj destroy handler"); 378 ret_status = status; 379 } 380 381 status = wlan_objmgr_unregister_pdev_create_handler( 382 WLAN_UMAC_COMP_REGULATORY, 383 wlan_regulatory_pdev_obj_created_notification, NULL); 384 if (status != QDF_STATUS_SUCCESS) { 385 reg_err("failed to unregister reg pdev obj create handler"); 386 ret_status = status; 387 } 388 389 status = wlan_objmgr_unregister_psoc_destroy_handler( 390 WLAN_UMAC_COMP_REGULATORY, 391 wlan_regulatory_psoc_obj_destroyed_notification, NULL); 392 if (status != QDF_STATUS_SUCCESS) { 393 reg_err("failed to unregister reg psoc obj destroy handler"); 394 ret_status = status; 395 } 396 397 status = wlan_objmgr_unregister_psoc_create_handler( 398 WLAN_UMAC_COMP_REGULATORY, 399 wlan_regulatory_psoc_obj_created_notification, NULL); 400 if (status != QDF_STATUS_SUCCESS) { 401 reg_err("failed to unregister reg psoc obj create handler"); 402 ret_status = status; 403 } 404 405 reg_debug("deregistered callbacks with obj mgr"); 406 407 return ret_status; 408 } 409 410 #ifdef CONFIG_BAND_6GHZ 411 static void 412 regulatory_assign_register_master_ext_handler(struct wlan_objmgr_psoc *psoc, 413 struct wlan_lmac_if_reg_tx_ops *tx_ops) 414 { 415 if (tx_ops->register_master_ext_handler) 416 tx_ops->register_master_ext_handler(psoc, NULL); 417 } 418 419 static void 420 regulatory_assign_unregister_master_ext_handler(struct wlan_objmgr_psoc *psoc, 421 struct wlan_lmac_if_reg_tx_ops *tx_ops) 422 { 423 if (tx_ops->unregister_master_ext_handler) 424 tx_ops->unregister_master_ext_handler(psoc, NULL); 425 } 426 427 QDF_STATUS wlan_reg_get_6g_ap_master_chan_list( 428 struct wlan_objmgr_pdev *pdev, 429 enum reg_6g_ap_type ap_pwr_type, 430 struct regulatory_channel *chan_list) 431 { 432 return reg_get_6g_ap_master_chan_list(pdev, ap_pwr_type, chan_list); 433 } 434 435 #ifdef CONFIG_REG_CLIENT 436 const char *wlan_reg_get_power_string(enum reg_6g_ap_type power_type) 437 { 438 return reg_get_power_string(power_type); 439 } 440 #endif 441 442 qdf_export_symbol(wlan_reg_get_6g_ap_master_chan_list); 443 444 #ifdef CONFIG_AFC_SUPPORT 445 static void regulatory_assign_register_afc_event_handler( 446 struct wlan_objmgr_psoc *psoc, 447 struct wlan_lmac_if_reg_tx_ops *tx_ops) 448 { 449 if (tx_ops->register_afc_event_handler) 450 tx_ops->register_afc_event_handler(psoc, NULL); 451 } 452 453 static void regulatory_assign_unregister_afc_event_handler( 454 struct wlan_objmgr_psoc *psoc, 455 struct wlan_lmac_if_reg_tx_ops *tx_ops) 456 { 457 if (tx_ops->unregister_afc_event_handler) 458 tx_ops->unregister_afc_event_handler(psoc, NULL); 459 } 460 #else 461 static void regulatory_assign_register_afc_event_handler( 462 struct wlan_objmgr_psoc *psoc, 463 struct wlan_lmac_if_reg_tx_ops *tx_ops) 464 { 465 } 466 467 static void regulatory_assign_unregister_afc_event_handler( 468 struct wlan_objmgr_psoc *psoc, 469 struct wlan_lmac_if_reg_tx_ops *tx_ops) 470 { 471 } 472 #endif 473 #else 474 static inline void 475 regulatory_assign_register_master_ext_handler(struct wlan_objmgr_psoc *psoc, 476 struct wlan_lmac_if_reg_tx_ops *tx_ops) 477 { 478 } 479 480 static inline void 481 regulatory_assign_unregister_master_ext_handler(struct wlan_objmgr_psoc *psoc, 482 struct wlan_lmac_if_reg_tx_ops *tx_ops) 483 { 484 } 485 486 static void 487 regulatory_assign_register_afc_event_handler(struct wlan_objmgr_psoc *psoc, 488 struct wlan_lmac_if_reg_tx_ops *tx_ops) 489 { 490 } 491 492 static void 493 regulatory_assign_unregister_afc_event_handler(struct wlan_objmgr_psoc *psoc, 494 struct wlan_lmac_if_reg_tx_ops *tx_ops) 495 { 496 } 497 #endif 498 499 QDF_STATUS regulatory_psoc_open(struct wlan_objmgr_psoc *psoc) 500 { 501 struct wlan_lmac_if_reg_tx_ops *tx_ops; 502 503 tx_ops = reg_get_psoc_tx_ops(psoc); 504 if (tx_ops->register_master_handler) 505 tx_ops->register_master_handler(psoc, NULL); 506 regulatory_assign_register_master_ext_handler(psoc, tx_ops); 507 regulatory_assign_register_afc_event_handler(psoc, tx_ops); 508 if (tx_ops->register_11d_new_cc_handler) 509 tx_ops->register_11d_new_cc_handler(psoc, NULL); 510 if (tx_ops->register_ch_avoid_event_handler) 511 tx_ops->register_ch_avoid_event_handler(psoc, NULL); 512 if (tx_ops->register_rate2power_table_update_event_handler) 513 tx_ops->register_rate2power_table_update_event_handler(psoc, 514 NULL); 515 516 return QDF_STATUS_SUCCESS; 517 } 518 519 QDF_STATUS regulatory_psoc_close(struct wlan_objmgr_psoc *psoc) 520 { 521 struct wlan_lmac_if_reg_tx_ops *tx_ops; 522 523 tx_ops = reg_get_psoc_tx_ops(psoc); 524 if (tx_ops->unregister_11d_new_cc_handler) 525 tx_ops->unregister_11d_new_cc_handler(psoc, NULL); 526 if (tx_ops->unregister_master_handler) 527 tx_ops->unregister_master_handler(psoc, NULL); 528 regulatory_assign_unregister_master_ext_handler(psoc, tx_ops); 529 regulatory_assign_unregister_afc_event_handler(psoc, tx_ops); 530 if (tx_ops->unregister_ch_avoid_event_handler) 531 tx_ops->unregister_ch_avoid_event_handler(psoc, NULL); 532 if (tx_ops->unregister_rate2power_table_update_event_handler) 533 tx_ops->unregister_rate2power_table_update_event_handler(psoc, 534 NULL); 535 536 return QDF_STATUS_SUCCESS; 537 } 538 539 #ifdef CONFIG_REG_CLIENT 540 /** 541 * reg_is_cntry_set_pending() - Check if country set is pending 542 * @pdev: Pointer to pdev object. 543 * @psoc: Pointer to psoc object. 544 */ 545 static bool reg_is_cntry_set_pending(struct wlan_objmgr_pdev *pdev, 546 struct wlan_objmgr_psoc *psoc) 547 { 548 struct wlan_regulatory_psoc_priv_obj *soc_reg; 549 struct wlan_lmac_if_reg_tx_ops *tx_ops; 550 uint8_t phy_id; 551 552 soc_reg = reg_get_psoc_obj(psoc); 553 554 if (!IS_VALID_PSOC_REG_OBJ(soc_reg)) { 555 reg_err("psoc reg component is NULL"); 556 return false; 557 } 558 559 tx_ops = reg_get_psoc_tx_ops(psoc); 560 561 if (tx_ops->get_phy_id_from_pdev_id) 562 tx_ops->get_phy_id_from_pdev_id( 563 psoc, 564 wlan_objmgr_pdev_get_pdev_id(pdev), 565 &phy_id); 566 else 567 phy_id = wlan_objmgr_pdev_get_pdev_id(pdev); 568 569 return (soc_reg->new_user_ctry_pending[phy_id] || 570 soc_reg->new_init_ctry_pending[phy_id] || 571 soc_reg->new_11d_ctry_pending[phy_id] || 572 soc_reg->world_country_pending[phy_id]); 573 } 574 #else 575 static inline bool reg_is_cntry_set_pending(struct wlan_objmgr_pdev *pdev, 576 struct wlan_objmgr_psoc *psoc) 577 { 578 return false; 579 } 580 #endif 581 582 QDF_STATUS regulatory_pdev_open(struct wlan_objmgr_pdev *pdev) 583 { 584 struct wlan_objmgr_psoc *parent_psoc; 585 struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj; 586 587 pdev_priv_obj = reg_get_pdev_obj(pdev); 588 589 if (!IS_VALID_PDEV_REG_OBJ(pdev_priv_obj)) { 590 reg_err("reg pdev private obj is NULL"); 591 return QDF_STATUS_E_FAILURE; 592 } 593 594 pdev_priv_obj->pdev_opened = true; 595 596 parent_psoc = wlan_pdev_get_psoc(pdev); 597 598 if (reg_is_cntry_set_pending(pdev, parent_psoc)) 599 return QDF_STATUS_SUCCESS; 600 601 reg_send_scheduler_msg_nb(parent_psoc, pdev); 602 603 return QDF_STATUS_SUCCESS; 604 } 605 606 QDF_STATUS regulatory_pdev_close(struct wlan_objmgr_pdev *pdev) 607 { 608 struct wlan_objmgr_psoc *psoc; 609 struct wlan_regulatory_psoc_priv_obj *soc_reg; 610 struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj; 611 612 pdev_priv_obj = reg_get_pdev_obj(pdev); 613 if (!IS_VALID_PDEV_REG_OBJ(pdev_priv_obj)) { 614 reg_err("reg pdev private obj is NULL"); 615 return QDF_STATUS_E_FAILURE; 616 } 617 618 pdev_priv_obj->pdev_opened = false; 619 620 psoc = wlan_pdev_get_psoc(pdev); 621 soc_reg = reg_get_psoc_obj(psoc); 622 if (!soc_reg) { 623 reg_err("reg psoc private obj is NULL"); 624 return QDF_STATUS_E_FAULT; 625 } 626 627 reg_reset_ctry_pending_hints(soc_reg); 628 629 return QDF_STATUS_SUCCESS; 630 } 631 632 uint8_t wlan_reg_freq_to_chan(struct wlan_objmgr_pdev *pdev, 633 qdf_freq_t freq) 634 { 635 return reg_freq_to_chan(pdev, freq); 636 } 637 638 qdf_export_symbol(wlan_reg_freq_to_chan); 639 640 qdf_freq_t wlan_reg_legacy_chan_to_freq(struct wlan_objmgr_pdev *pdev, 641 uint8_t chan_num) 642 { 643 return reg_legacy_chan_to_freq(pdev, chan_num); 644 } 645 646 qdf_export_symbol(wlan_reg_legacy_chan_to_freq); 647 648 QDF_STATUS wlan_reg_set_country(struct wlan_objmgr_pdev *pdev, 649 uint8_t *country) 650 { 651 return reg_set_country(pdev, country); 652 } 653 654 QDF_STATUS wlan_reg_set_11d_country(struct wlan_objmgr_pdev *pdev, 655 uint8_t *country) 656 { 657 return reg_set_11d_country(pdev, country); 658 } 659 660 bool wlan_reg_is_world(uint8_t *country) 661 { 662 return reg_is_world_alpha2(country); 663 } 664 665 bool wlan_reg_is_us(uint8_t *country) 666 { 667 return reg_is_us_alpha2(country); 668 } 669 670 bool wlan_reg_is_etsi(uint8_t *country) 671 { 672 return reg_is_etsi_alpha2(country); 673 } 674 675 bool wlan_reg_ctry_support_vlp(uint8_t *country) 676 { 677 return reg_ctry_support_vlp(country); 678 } 679 680 void wlan_reg_register_chan_change_callback(struct wlan_objmgr_psoc *psoc, 681 void *cbk, void *arg) 682 { 683 reg_register_chan_change_callback(psoc, (reg_chan_change_callback)cbk, 684 arg); 685 686 } 687 688 void wlan_reg_unregister_chan_change_callback(struct wlan_objmgr_psoc *psoc, 689 void *cbk) 690 { 691 reg_unregister_chan_change_callback(psoc, 692 (reg_chan_change_callback)cbk); 693 } 694 695 void wlan_reg_register_ctry_change_callback(struct wlan_objmgr_psoc *psoc, 696 void *cbk) 697 { 698 reg_register_ctry_change_callback(psoc, (reg_ctry_change_callback)cbk); 699 } 700 701 void wlan_reg_unregister_ctry_change_callback(struct wlan_objmgr_psoc *psoc, 702 void *cbk) 703 { 704 reg_unregister_ctry_change_callback(psoc, 705 (reg_ctry_change_callback)cbk); 706 } 707 708 bool wlan_reg_is_11d_offloaded(struct wlan_objmgr_psoc *psoc) 709 { 710 return reg_is_11d_offloaded(psoc); 711 } 712 713 bool wlan_reg_11d_enabled_on_host(struct wlan_objmgr_psoc *psoc) 714 { 715 return reg_11d_enabled_on_host(psoc); 716 } 717 718 bool wlan_reg_is_etsi_regdmn(struct wlan_objmgr_pdev *pdev) 719 { 720 return reg_is_etsi_regdmn(pdev); 721 } 722 723 bool wlan_reg_is_etsi_srd_chan_allowed_master_mode(struct wlan_objmgr_pdev 724 *pdev) 725 { 726 return reg_is_etsi_srd_chan_allowed_master_mode(pdev); 727 } 728 729 bool wlan_reg_is_6ghz_band_set(struct wlan_objmgr_pdev *pdev) 730 { 731 return reg_is_6ghz_band_set(pdev); 732 } 733 734 bool wlan_reg_get_keep_6ghz_sta_cli_connection(struct wlan_objmgr_pdev *pdev) 735 { 736 return reg_get_keep_6ghz_sta_cli_connection(pdev); 737 } 738 bool wlan_reg_get_fcc_constraint(struct wlan_objmgr_pdev *pdev, uint32_t freq) 739 { 740 return reg_get_fcc_constraint(pdev, freq); 741 } 742 743 QDF_STATUS wlan_reg_get_chip_mode(struct wlan_objmgr_pdev *pdev, 744 uint64_t *chip_mode) 745 { 746 struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj; 747 748 pdev_priv_obj = wlan_objmgr_pdev_get_comp_private_obj(pdev, 749 WLAN_UMAC_COMP_REGULATORY); 750 751 if (!pdev_priv_obj) { 752 reg_err("reg pdev private obj is NULL"); 753 return QDF_STATUS_E_FAULT; 754 } 755 756 *chip_mode = pdev_priv_obj->wireless_modes; 757 758 return QDF_STATUS_SUCCESS; 759 } 760 761 QDF_STATUS wlan_reg_get_phybitmap(struct wlan_objmgr_pdev *pdev, 762 uint16_t *phybitmap) 763 { 764 return reg_get_phybitmap(pdev, phybitmap); 765 } 766 767 bool wlan_reg_is_11d_scan_inprogress(struct wlan_objmgr_psoc *psoc) 768 { 769 return reg_is_11d_scan_inprogress(psoc); 770 } 771 772 QDF_STATUS wlan_reg_get_freq_range(struct wlan_objmgr_pdev *pdev, 773 qdf_freq_t *low_2g, 774 qdf_freq_t *high_2g, 775 qdf_freq_t *low_5g, 776 qdf_freq_t *high_5g) 777 { 778 struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj; 779 780 pdev_priv_obj = wlan_objmgr_pdev_get_comp_private_obj(pdev, 781 WLAN_UMAC_COMP_REGULATORY); 782 783 if (!pdev_priv_obj) { 784 reg_err("reg pdev private obj is NULL"); 785 return QDF_STATUS_E_FAULT; 786 } 787 788 if (low_2g) 789 *low_2g = pdev_priv_obj->range_2g_low; 790 791 if (high_2g) 792 *high_2g = pdev_priv_obj->range_2g_high; 793 794 if (low_5g) 795 *low_5g = pdev_priv_obj->range_5g_low; 796 797 if (high_5g) 798 *high_5g = pdev_priv_obj->range_5g_high; 799 800 return QDF_STATUS_SUCCESS; 801 } 802 803 qdf_export_symbol(wlan_reg_get_freq_range); 804 805 struct wlan_lmac_if_reg_tx_ops * 806 wlan_reg_get_tx_ops(struct wlan_objmgr_psoc *psoc) 807 { 808 return reg_get_psoc_tx_ops(psoc); 809 } 810 811 qdf_export_symbol(wlan_reg_get_tx_ops); 812 813 QDF_STATUS wlan_reg_get_curr_regdomain(struct wlan_objmgr_pdev *pdev, 814 struct cur_regdmn_info *cur_regdmn) 815 { 816 return reg_get_curr_regdomain(pdev, cur_regdmn); 817 } 818 819 uint8_t wlan_reg_max_5ghz_ch_num(void) 820 { 821 return reg_max_5ghz_ch_num(); 822 } 823 824 #ifdef CONFIG_CHAN_FREQ_API 825 qdf_freq_t wlan_reg_min_24ghz_chan_freq(void) 826 { 827 return reg_min_24ghz_chan_freq(); 828 } 829 830 qdf_freq_t wlan_reg_max_24ghz_chan_freq(void) 831 { 832 return reg_max_24ghz_chan_freq(); 833 } 834 835 qdf_freq_t wlan_reg_min_5ghz_chan_freq(void) 836 { 837 return reg_min_5ghz_chan_freq(); 838 } 839 840 qdf_freq_t wlan_reg_max_5ghz_chan_freq(void) 841 { 842 return reg_max_5ghz_chan_freq(); 843 } 844 #endif /* CONFIG_CHAN_FREQ_API */ 845 846 bool wlan_reg_is_24ghz_ch_freq(qdf_freq_t freq) 847 { 848 return reg_is_24ghz_ch_freq(freq); 849 } 850 851 bool wlan_reg_is_5ghz_ch_freq(qdf_freq_t freq) 852 { 853 return reg_is_5ghz_ch_freq(freq); 854 } 855 856 bool wlan_reg_is_range_overlap_2g(qdf_freq_t low_freq, qdf_freq_t high_freq) 857 { 858 return reg_is_range_overlap_2g(low_freq, high_freq); 859 } 860 861 bool wlan_reg_is_range_overlap_5g(qdf_freq_t low_freq, qdf_freq_t high_freq) 862 { 863 return reg_is_range_overlap_5g(low_freq, high_freq); 864 } 865 866 bool wlan_reg_is_freq_indoor(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq) 867 { 868 return reg_is_freq_indoor(pdev, freq); 869 } 870 871 uint16_t wlan_reg_get_min_chwidth(struct wlan_objmgr_pdev *pdev, 872 qdf_freq_t freq) 873 { 874 return reg_get_min_chwidth(pdev, freq); 875 } 876 877 uint16_t wlan_reg_get_max_chwidth(struct wlan_objmgr_pdev *pdev, 878 qdf_freq_t freq) 879 { 880 return reg_get_max_chwidth(pdev, freq); 881 } 882 883 enum phy_ch_width 884 wlan_reg_get_next_lower_bandwidth(enum phy_ch_width ch_width) 885 { 886 return get_next_lower_bandwidth(ch_width); 887 } 888 889 enum phy_ch_width 890 wlan_reg_get_next_higher_bandwidth(enum phy_ch_width ch_width) 891 { 892 return reg_get_next_higher_bandwidth(ch_width); 893 } 894 895 #ifdef CONFIG_REG_CLIENT 896 bool wlan_reg_is_freq_indoor_in_secondary_list(struct wlan_objmgr_pdev *pdev, 897 qdf_freq_t freq) 898 { 899 return reg_is_freq_indoor_in_secondary_list(pdev, freq); 900 } 901 #endif 902 903 #ifdef CONFIG_BAND_6GHZ 904 bool wlan_reg_is_6ghz_chan_freq(uint16_t freq) 905 { 906 return reg_is_6ghz_chan_freq(freq); 907 } 908 909 #ifdef CONFIG_6G_FREQ_OVERLAP 910 bool wlan_reg_is_range_only6g(qdf_freq_t low_freq, qdf_freq_t high_freq) 911 { 912 return reg_is_range_only6g(low_freq, high_freq); 913 } 914 915 bool wlan_reg_is_range_overlap_6g(qdf_freq_t low_freq, qdf_freq_t high_freq) 916 { 917 return reg_is_range_overlap_6g(low_freq, high_freq); 918 } 919 920 qdf_export_symbol(wlan_reg_is_range_overlap_6g); 921 #endif 922 923 uint16_t wlan_reg_min_6ghz_chan_freq(void) 924 { 925 return reg_min_6ghz_chan_freq(); 926 } 927 928 uint16_t wlan_reg_max_6ghz_chan_freq(void) 929 { 930 return reg_max_6ghz_chan_freq(); 931 } 932 933 bool wlan_reg_is_6ghz_psc_chan_freq(uint16_t freq) 934 { 935 return reg_is_6ghz_psc_chan_freq(freq); 936 } 937 938 bool wlan_reg_is_6g_freq_indoor(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq) 939 { 940 return reg_is_6g_freq_indoor(pdev, freq); 941 } 942 943 QDF_STATUS 944 wlan_reg_get_max_txpower_for_6g_tpe(struct wlan_objmgr_pdev *pdev, 945 qdf_freq_t freq, uint8_t bw, 946 enum reg_6g_ap_type reg_ap, 947 enum reg_6g_client_type reg_client, 948 bool is_psd, 949 uint8_t *tx_power) 950 { 951 return reg_get_max_txpower_for_6g_tpe(pdev, freq, bw, 952 reg_ap, 953 reg_client, is_psd, 954 tx_power); 955 } 956 957 bool wlan_reg_is_6ghz_unii5_chan_freq(qdf_freq_t freq) 958 { 959 return reg_is_6ghz_unii5_chan_freq(freq); 960 } 961 #endif /* CONFIG_BAND_6GHZ */ 962 963 uint16_t 964 wlan_reg_get_band_channel_list(struct wlan_objmgr_pdev *pdev, 965 uint8_t band_mask, 966 struct regulatory_channel *channel_list) 967 { 968 if (!pdev) { 969 reg_err("pdev object is NULL"); 970 return 0; 971 } 972 973 return reg_get_band_channel_list(pdev, band_mask, channel_list); 974 } 975 976 #ifdef CONFIG_REG_6G_PWRMODE 977 uint16_t 978 wlan_reg_get_band_channel_list_for_pwrmode(struct wlan_objmgr_pdev *pdev, 979 uint8_t band_mask, 980 struct regulatory_channel 981 *channel_list, 982 enum supported_6g_pwr_types 983 in_6g_pwr_type) 984 { 985 if (!pdev) { 986 reg_err("pdev object is NULL"); 987 return 0; 988 } 989 990 return reg_get_band_channel_list_for_pwrmode(pdev, band_mask, 991 channel_list, 992 in_6g_pwr_type); 993 } 994 #endif 995 996 #ifdef CONFIG_REG_CLIENT 997 uint16_t 998 wlan_reg_get_secondary_band_channel_list(struct wlan_objmgr_pdev *pdev, 999 uint8_t band_mask, 1000 struct regulatory_channel 1001 *channel_list) 1002 { 1003 if (!pdev) { 1004 reg_err("pdev object is NULL"); 1005 return 0; 1006 } 1007 1008 return reg_get_secondary_band_channel_list(pdev, band_mask, 1009 channel_list); 1010 } 1011 #endif 1012 1013 qdf_freq_t wlan_reg_chan_band_to_freq(struct wlan_objmgr_pdev *pdev, 1014 uint8_t chan, uint8_t band_mask) 1015 { 1016 return reg_chan_band_to_freq(pdev, chan, band_mask); 1017 } 1018 1019 qdf_export_symbol(wlan_reg_chan_band_to_freq); 1020 1021 #ifdef CONFIG_49GHZ_CHAN 1022 bool wlan_reg_is_49ghz_freq(qdf_freq_t freq) 1023 { 1024 return reg_is_49ghz_freq(freq); 1025 } 1026 #endif /* CONFIG_49GHZ_CHAN */ 1027 1028 uint8_t wlan_reg_ch_num(uint32_t ch_enum) 1029 { 1030 return reg_ch_num(ch_enum); 1031 } 1032 1033 qdf_freq_t wlan_reg_ch_to_freq(uint32_t ch_enum) 1034 { 1035 return reg_ch_to_freq(ch_enum); 1036 } 1037 1038 #ifdef WLAN_REG_PARTIAL_OFFLOAD 1039 bool wlan_reg_is_regdmn_en302502_applicable(struct wlan_objmgr_pdev *pdev) 1040 { 1041 return reg_is_regdmn_en302502_applicable(pdev); 1042 } 1043 #endif 1044 1045 QDF_STATUS wlan_reg_modify_pdev_chan_range(struct wlan_objmgr_pdev *pdev) 1046 { 1047 return reg_modify_pdev_chan_range(pdev); 1048 } 1049 1050 QDF_STATUS wlan_reg_update_pdev_wireless_modes(struct wlan_objmgr_pdev *pdev, 1051 uint64_t wireless_modes) 1052 { 1053 return reg_update_pdev_wireless_modes(pdev, wireless_modes); 1054 } 1055 #ifdef DISABLE_UNII_SHARED_BANDS 1056 QDF_STATUS wlan_reg_disable_chan_coex(struct wlan_objmgr_pdev *pdev, 1057 uint8_t unii_5g_bitmap) 1058 { 1059 return reg_disable_chan_coex(pdev, unii_5g_bitmap); 1060 } 1061 #endif 1062 1063 #ifdef CONFIG_CHAN_FREQ_API 1064 bool wlan_reg_is_same_band_freqs(qdf_freq_t freq1, qdf_freq_t freq2) 1065 { 1066 return reg_is_same_band_freqs(freq1, freq2); 1067 } 1068 1069 enum channel_enum wlan_reg_get_chan_enum_for_freq(qdf_freq_t freq) 1070 { 1071 return reg_get_chan_enum_for_freq(freq); 1072 } 1073 1074 QDF_STATUS 1075 wlan_reg_get_min_max_bw_for_chan_index(struct wlan_objmgr_pdev *pdev, 1076 enum channel_enum chan_idx, 1077 uint16_t *min_bw, uint16_t *max_bw) 1078 { 1079 return reg_get_min_max_bw_on_cur_chan_list(pdev, 1080 chan_idx, min_bw, max_bw); 1081 } 1082 1083 bool wlan_reg_is_freq_present_in_cur_chan_list(struct wlan_objmgr_pdev *pdev, 1084 qdf_freq_t freq) 1085 { 1086 return reg_is_freq_present_in_cur_chan_list(pdev, freq); 1087 } 1088 1089 bool wlan_reg_is_etsi_srd_chan_for_freq(struct wlan_objmgr_pdev *pdev, 1090 qdf_freq_t freq) 1091 { 1092 return reg_is_etsi_srd_chan_for_freq(pdev, freq); 1093 } 1094 1095 bool wlan_reg_is_dsrc_freq(qdf_freq_t freq) 1096 { 1097 return reg_is_dsrc_freq(freq); 1098 } 1099 1100 void wlan_reg_update_nol_ch_for_freq(struct wlan_objmgr_pdev *pdev, 1101 uint16_t *chan_freq_list, 1102 uint8_t num_ch, 1103 bool nol_ch) 1104 { 1105 reg_update_nol_ch_for_freq(pdev, chan_freq_list, num_ch, nol_ch); 1106 } 1107 1108 void wlan_reg_update_nol_history_ch_for_freq(struct wlan_objmgr_pdev *pdev, 1109 uint16_t *ch_list, 1110 uint8_t num_ch, 1111 bool nol_history_ch) 1112 { 1113 reg_update_nol_history_ch_for_freq(pdev, 1114 ch_list, 1115 num_ch, 1116 nol_history_ch); 1117 } 1118 1119 bool wlan_reg_is_dfs_for_freq(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq) 1120 { 1121 return reg_is_dfs_for_freq(pdev, freq); 1122 } 1123 1124 bool wlan_reg_is_passive_or_disable_for_pwrmode( 1125 struct wlan_objmgr_pdev *pdev, 1126 qdf_freq_t freq, 1127 enum supported_6g_pwr_types in_6g_pwr_mode) 1128 { 1129 return reg_is_passive_or_disable_for_pwrmode(pdev, freq, 1130 in_6g_pwr_mode); 1131 } 1132 1133 #ifdef CONFIG_REG_6G_PWRMODE 1134 bool wlan_reg_is_disable_for_pwrmode(struct wlan_objmgr_pdev *pdev, 1135 qdf_freq_t freq, 1136 enum supported_6g_pwr_types in_6g_pwr_mode) 1137 { 1138 return reg_is_disable_for_pwrmode(pdev, freq, in_6g_pwr_mode); 1139 } 1140 #endif 1141 1142 #ifdef CONFIG_REG_CLIENT 1143 bool wlan_reg_is_disable_in_secondary_list_for_freq( 1144 struct wlan_objmgr_pdev *pdev, 1145 qdf_freq_t freq) 1146 { 1147 return reg_is_disable_in_secondary_list_for_freq(pdev, freq); 1148 } 1149 1150 bool wlan_reg_is_enable_in_secondary_list_for_freq( 1151 struct wlan_objmgr_pdev *pdev, 1152 qdf_freq_t freq) 1153 { 1154 return reg_is_enable_in_secondary_list_for_freq(pdev, freq); 1155 } 1156 1157 bool wlan_reg_is_dfs_in_secondary_list_for_freq(struct wlan_objmgr_pdev *pdev, 1158 qdf_freq_t freq) 1159 { 1160 return reg_is_dfs_in_secondary_list_for_freq(pdev, freq); 1161 } 1162 1163 QDF_STATUS 1164 wlan_reg_get_chan_pwr_attr_from_secondary_list_for_freq( 1165 struct wlan_objmgr_pdev *pdev, qdf_freq_t freq, 1166 bool *is_psd, uint16_t *tx_power, 1167 uint16_t *psd_eirp, uint32_t *flags) 1168 { 1169 return reg_get_channel_power_attr_from_secondary_list_for_freq( 1170 pdev, freq, is_psd, tx_power, psd_eirp, flags); 1171 } 1172 1173 QDF_STATUS 1174 wlan_reg_decide_6ghz_power_within_bw_for_freq(struct wlan_objmgr_pdev *pdev, 1175 qdf_freq_t freq, 1176 enum phy_ch_width bw, 1177 bool *is_psd, 1178 uint16_t *min_tx_power, 1179 int16_t *min_psd_eirp, 1180 enum reg_6g_ap_type *power_type, 1181 enum supported_6g_pwr_types pwr_mode, 1182 uint16_t input_punc_bitmap) 1183 { 1184 return reg_decide_6ghz_power_within_bw_for_freq(pdev, 1185 freq, 1186 bw, 1187 is_psd, 1188 min_tx_power, 1189 min_psd_eirp, 1190 power_type, 1191 pwr_mode, 1192 input_punc_bitmap); 1193 } 1194 #endif 1195 1196 bool wlan_reg_is_passive_for_freq(struct wlan_objmgr_pdev *pdev, 1197 qdf_freq_t freq) 1198 { 1199 return reg_is_passive_for_freq(pdev, freq); 1200 } 1201 1202 QDF_STATUS 1203 wlan_reg_get_channel_list_with_power_for_freq(struct wlan_objmgr_pdev *pdev, 1204 struct channel_power *ch_list, 1205 uint8_t *num_chan) 1206 { 1207 return reg_get_channel_list_with_power_for_freq(pdev, 1208 ch_list, 1209 num_chan); 1210 } 1211 1212 bool 1213 wlan_reg_chan_has_dfs_attribute_for_freq(struct wlan_objmgr_pdev *pdev, 1214 qdf_freq_t freq) 1215 { 1216 return reg_chan_has_dfs_attribute_for_freq(pdev, freq); 1217 } 1218 1219 enum channel_state 1220 wlan_reg_get_5g_bonded_channel_state_for_pwrmode(struct wlan_objmgr_pdev *pdev, 1221 qdf_freq_t freq, 1222 struct ch_params *ch_params, 1223 enum supported_6g_pwr_types 1224 in_6g_pwr_type) 1225 { 1226 enum phy_ch_width bw; 1227 1228 if (!ch_params) { 1229 reg_err_rl("Invalid ch_params"); 1230 return CHANNEL_STATE_INVALID; 1231 } 1232 bw = ch_params->ch_width; 1233 1234 if (reg_is_ch_width_320(bw)) { 1235 const struct bonded_channel_freq *bonded_ch_ptr_ptr = NULL; 1236 uint16_t in_punc_bitmap = reg_fetch_punc_bitmap(ch_params); 1237 1238 return reg_get_5g_bonded_channel_for_pwrmode(pdev, freq, bw, 1239 &bonded_ch_ptr_ptr, 1240 in_6g_pwr_type, 1241 in_punc_bitmap); 1242 } 1243 1244 return reg_get_5g_bonded_channel_state_for_pwrmode(pdev, freq, 1245 ch_params, 1246 in_6g_pwr_type); 1247 } 1248 1249 qdf_export_symbol(wlan_reg_get_5g_bonded_channel_state_for_pwrmode); 1250 1251 enum channel_state 1252 wlan_reg_get_2g_bonded_channel_state_for_freq(struct wlan_objmgr_pdev *pdev, 1253 qdf_freq_t freq, 1254 qdf_freq_t sec_ch_freq, 1255 enum phy_ch_width bw) 1256 { 1257 return reg_get_2g_bonded_channel_state_for_freq(pdev, 1258 freq, 1259 sec_ch_freq, 1260 bw); 1261 } 1262 1263 #ifdef CONFIG_REG_6G_PWRMODE 1264 void wlan_reg_set_channel_params_for_pwrmode(struct wlan_objmgr_pdev *pdev, 1265 qdf_freq_t freq, 1266 qdf_freq_t sec_ch_2g_freq, 1267 struct ch_params *ch_params, 1268 enum supported_6g_pwr_types 1269 in_6g_pwr_mode) 1270 { 1271 reg_set_channel_params_for_pwrmode(pdev, freq, sec_ch_2g_freq, 1272 ch_params, 1273 in_6g_pwr_mode, true); 1274 } 1275 1276 qdf_export_symbol(wlan_reg_set_channel_params_for_pwrmode); 1277 #endif 1278 1279 const struct bonded_channel_freq * 1280 wlan_reg_get_bonded_chan_entry(qdf_freq_t freq, enum phy_ch_width chwidth, 1281 qdf_freq_t cen320_freq) 1282 { 1283 return reg_get_bonded_chan_entry(freq, chwidth, cen320_freq); 1284 } 1285 1286 #ifdef WLAN_FEATURE_11BE 1287 #ifdef CONFIG_REG_6G_PWRMODE 1288 void 1289 wlan_reg_fill_channel_list_for_pwrmode(struct wlan_objmgr_pdev *pdev, 1290 qdf_freq_t freq, 1291 qdf_freq_t sec_ch_2g_freq, 1292 enum phy_ch_width ch_width, 1293 qdf_freq_t band_center_320, 1294 struct reg_channel_list *chan_list, 1295 enum supported_6g_pwr_types 1296 in_6g_pwr_type, 1297 bool treat_nol_chan_as_disabled) 1298 { 1299 reg_fill_channel_list_for_pwrmode(pdev, freq, sec_ch_2g_freq, ch_width, 1300 band_center_320, chan_list, 1301 in_6g_pwr_type, 1302 treat_nol_chan_as_disabled); 1303 } 1304 #endif /* CONFIG_REG_6G_PWRMODE */ 1305 1306 bool wlan_reg_is_punc_bitmap_valid(enum phy_ch_width bw, 1307 uint16_t puncture_bitmap) 1308 { 1309 return reg_is_punc_bitmap_valid(bw, puncture_bitmap); 1310 } 1311 1312 uint16_t wlan_reg_find_nearest_puncture_pattern(enum phy_ch_width bw, 1313 uint16_t proposed_bitmap) 1314 { 1315 return reg_find_nearest_puncture_pattern(bw, proposed_bitmap); 1316 } 1317 1318 QDF_STATUS wlan_reg_extract_puncture_by_bw(enum phy_ch_width ori_bw, 1319 uint16_t ori_puncture_bitmap, 1320 qdf_freq_t freq, 1321 qdf_freq_t cen320_freq, 1322 enum phy_ch_width new_bw, 1323 uint16_t *new_puncture_bitmap) 1324 { 1325 return reg_extract_puncture_by_bw(ori_bw, ori_puncture_bitmap, freq, 1326 cen320_freq, new_bw, 1327 new_puncture_bitmap); 1328 } 1329 1330 void wlan_reg_set_create_punc_bitmap(struct ch_params *ch_params, 1331 bool is_create_punc_bitmap) 1332 { 1333 reg_set_create_punc_bitmap(ch_params, is_create_punc_bitmap); 1334 } 1335 1336 #ifdef CONFIG_REG_CLIENT 1337 QDF_STATUS wlan_reg_apply_puncture(struct wlan_objmgr_pdev *pdev, 1338 uint16_t puncture_bitmap, 1339 qdf_freq_t freq, 1340 enum phy_ch_width bw, 1341 qdf_freq_t cen320_freq) 1342 { 1343 return reg_apply_puncture(pdev, puncture_bitmap, freq, bw, 1344 cen320_freq); 1345 } 1346 1347 QDF_STATUS wlan_reg_remove_puncture(struct wlan_objmgr_pdev *pdev) 1348 { 1349 return reg_remove_puncture(pdev); 1350 } 1351 #endif 1352 #endif /* WLAN_FEATURE_11BE */ 1353 1354 #ifdef CONFIG_REG_6G_PWRMODE 1355 enum channel_state 1356 wlan_reg_get_channel_state_for_pwrmode(struct wlan_objmgr_pdev *pdev, 1357 qdf_freq_t freq, 1358 enum supported_6g_pwr_types 1359 in_6g_pwr_type) 1360 { 1361 return reg_get_channel_state_for_pwrmode(pdev, freq, in_6g_pwr_type); 1362 } 1363 #endif 1364 1365 #ifdef CONFIG_REG_CLIENT 1366 enum channel_state wlan_reg_get_channel_state_from_secondary_list_for_freq( 1367 struct wlan_objmgr_pdev *pdev, 1368 qdf_freq_t freq) 1369 { 1370 return reg_get_channel_state_from_secondary_list_for_freq(pdev, freq); 1371 } 1372 1373 QDF_STATUS 1374 wlan_reg_get_channel_list_with_power(struct wlan_objmgr_pdev *pdev, 1375 struct channel_power *ch_list, 1376 uint8_t *num_chan, 1377 enum supported_6g_pwr_types in_6g_pwr_type) 1378 { 1379 return reg_get_channel_list_with_power(pdev, ch_list, num_chan, 1380 in_6g_pwr_type); 1381 } 1382 #endif 1383 1384 uint8_t wlan_reg_get_channel_reg_power_for_freq(struct wlan_objmgr_pdev *pdev, 1385 qdf_freq_t freq) 1386 { 1387 return reg_get_channel_reg_power_for_freq(pdev, freq); 1388 } 1389 1390 enum reg_wifi_band wlan_reg_freq_to_band(qdf_freq_t freq) 1391 { 1392 return reg_freq_to_band(freq); 1393 } 1394 qdf_export_symbol(wlan_reg_freq_to_band); 1395 1396 qdf_freq_t wlan_reg_min_chan_freq(void) 1397 { 1398 return reg_min_chan_freq(); 1399 } 1400 1401 qdf_freq_t wlan_reg_max_chan_freq(void) 1402 { 1403 return reg_max_chan_freq(); 1404 } 1405 1406 void wlan_reg_freq_width_to_chan_op_class(struct wlan_objmgr_pdev *pdev, 1407 qdf_freq_t freq, 1408 uint16_t chan_width, 1409 bool global_tbl_lookup, 1410 uint16_t behav_limit, 1411 uint8_t *op_class, 1412 uint8_t *chan_num) 1413 { 1414 return reg_freq_width_to_chan_op_class(pdev, freq, chan_width, 1415 global_tbl_lookup, 1416 behav_limit, 1417 op_class, 1418 chan_num); 1419 } 1420 1421 qdf_export_symbol(wlan_reg_freq_width_to_chan_op_class); 1422 1423 void wlan_reg_freq_width_to_chan_op_class_auto(struct wlan_objmgr_pdev *pdev, 1424 qdf_freq_t freq, 1425 uint16_t chan_width, 1426 bool global_tbl_lookup, 1427 uint16_t behav_limit, 1428 uint8_t *op_class, 1429 uint8_t *chan_num) 1430 { 1431 reg_freq_width_to_chan_op_class_auto(pdev, freq, chan_width, 1432 global_tbl_lookup, 1433 behav_limit, 1434 op_class, 1435 chan_num); 1436 } 1437 1438 qdf_export_symbol(wlan_reg_freq_width_to_chan_op_class_auto); 1439 1440 void wlan_reg_freq_to_chan_op_class(struct wlan_objmgr_pdev *pdev, 1441 qdf_freq_t freq, 1442 bool global_tbl_lookup, 1443 uint16_t behav_limit, 1444 uint8_t *op_class, 1445 uint8_t *chan_num) 1446 { 1447 return reg_freq_to_chan_op_class(pdev, freq, 1448 global_tbl_lookup, 1449 behav_limit, 1450 op_class, 1451 chan_num); 1452 } 1453 1454 bool wlan_reg_is_freq_in_country_opclass(struct wlan_objmgr_pdev *pdev, 1455 const uint8_t country[3], 1456 uint8_t op_class, 1457 qdf_freq_t chan_freq) 1458 { 1459 return reg_is_freq_in_country_opclass(pdev, country, 1460 op_class, chan_freq); 1461 } 1462 1463 enum channel_state 1464 wlan_reg_get_5g_bonded_channel_and_state_for_pwrmode( 1465 struct wlan_objmgr_pdev *pdev, 1466 uint16_t freq, 1467 enum phy_ch_width bw, 1468 const 1469 struct bonded_channel_freq 1470 **bonded_chan_ptr_ptr, 1471 enum supported_6g_pwr_types 1472 in_6g_pwr_mode, 1473 uint16_t input_puncture_bitmap) 1474 { 1475 /* 1476 * Get channel frequencies and state from regulatory 1477 */ 1478 return reg_get_5g_bonded_channel_for_pwrmode(pdev, freq, bw, 1479 bonded_chan_ptr_ptr, 1480 in_6g_pwr_mode, 1481 input_puncture_bitmap); 1482 } 1483 1484 qdf_export_symbol(wlan_reg_get_5g_bonded_channel_and_state_for_pwrmode); 1485 1486 #if defined(WLAN_FEATURE_11BE) && defined(CONFIG_REG_CLIENT) 1487 enum channel_state 1488 wlan_reg_get_bonded_channel_state_for_pwrmode(struct wlan_objmgr_pdev *pdev, 1489 qdf_freq_t freq, 1490 enum phy_ch_width bw, 1491 qdf_freq_t sec_freq, 1492 enum supported_6g_pwr_types 1493 in_6g_pwr_mode) 1494 { 1495 if (WLAN_REG_IS_24GHZ_CH_FREQ(freq)) 1496 return reg_get_2g_bonded_channel_state_for_freq(pdev, freq, 1497 sec_freq, bw); 1498 if (bw == CH_WIDTH_320MHZ) { 1499 const struct bonded_channel_freq *bonded_chan_ptr_ptr = NULL; 1500 1501 return reg_get_chan_state_for_320(pdev, freq, 0, 1502 bw, 1503 &bonded_chan_ptr_ptr, 1504 in_6g_pwr_mode, true, 1505 NO_SCHANS_PUNC); 1506 } else { 1507 struct ch_params params = {0}; 1508 1509 params.ch_width = bw; 1510 1511 return reg_get_5g_bonded_channel_state_for_pwrmode( 1512 pdev, freq, 1513 ¶ms, in_6g_pwr_mode); 1514 } 1515 } 1516 1517 qdf_export_symbol(wlan_reg_get_bonded_channel_state_for_pwrmode); 1518 #endif 1519 #endif /* CONFIG CHAN FREQ API */ 1520 1521 uint16_t wlan_reg_get_op_class_width(struct wlan_objmgr_pdev *pdev, 1522 uint8_t op_class, 1523 bool global_tbl_lookup) 1524 { 1525 return reg_get_op_class_width(pdev, op_class, 1526 global_tbl_lookup); 1527 } 1528 1529 bool wlan_reg_is_5ghz_op_class(const uint8_t *country, uint8_t op_class) 1530 { 1531 return reg_is_5ghz_op_class(country, op_class); 1532 } 1533 1534 bool wlan_reg_is_2ghz_op_class(const uint8_t *country, uint8_t op_class) 1535 { 1536 return reg_is_2ghz_op_class(country, op_class); 1537 } 1538 1539 qdf_export_symbol(wlan_reg_is_2ghz_op_class); 1540 1541 bool wlan_reg_is_6ghz_op_class(struct wlan_objmgr_pdev *pdev, 1542 uint8_t op_class) 1543 { 1544 return reg_is_6ghz_op_class(pdev, op_class); 1545 } 1546 1547 qdf_export_symbol(wlan_reg_is_6ghz_op_class); 1548 1549 #ifdef CONFIG_REG_CLIENT 1550 bool wlan_reg_is_6ghz_supported(struct wlan_objmgr_psoc *psoc) 1551 { 1552 return reg_is_6ghz_supported(psoc); 1553 } 1554 #endif 1555 1556 #ifdef HOST_OPCLASS_EXT 1557 qdf_freq_t 1558 wlan_reg_country_chan_opclass_to_freq(struct wlan_objmgr_pdev *pdev, 1559 const uint8_t country[3], 1560 uint8_t chan, uint8_t op_class, 1561 bool strict) 1562 { 1563 return reg_country_chan_opclass_to_freq(pdev, country, chan, op_class, 1564 strict); 1565 } 1566 #endif 1567 1568 uint16_t wlan_reg_chan_opclass_to_freq(uint8_t chan, 1569 uint8_t op_class, 1570 bool global_tbl_lookup) 1571 { 1572 if (!chan || !op_class) 1573 return 0; 1574 1575 return reg_chan_opclass_to_freq(chan, op_class, global_tbl_lookup); 1576 } 1577 1578 qdf_freq_t wlan_reg_compute_6g_center_freq_from_cfi(uint8_t ieee_6g_cfi) 1579 { 1580 if (!ieee_6g_cfi) 1581 return 0; 1582 1583 return reg_compute_6g_center_freq_from_cfi(ieee_6g_cfi); 1584 } 1585 1586 qdf_freq_t wlan_reg_chan_opclass_to_freq_auto(uint8_t chan, uint8_t op_class, 1587 bool global_tbl_lookup) 1588 { 1589 if (!chan || !op_class) 1590 return 0; 1591 1592 return reg_chan_opclass_to_freq_auto(chan, op_class, global_tbl_lookup); 1593 } 1594 1595 #ifdef CHECK_REG_PHYMODE 1596 enum reg_phymode wlan_reg_get_max_phymode(struct wlan_objmgr_pdev *pdev, 1597 enum reg_phymode phy_in, 1598 qdf_freq_t freq) 1599 { 1600 return reg_get_max_phymode(pdev, phy_in, freq); 1601 } 1602 #endif /* CHECK_REG_PHYMODE */ 1603 1604 #ifdef CONFIG_REG_CLIENT 1605 enum band_info wlan_reg_band_bitmap_to_band_info(uint32_t band_bitmap) 1606 { 1607 return reg_band_bitmap_to_band_info(band_bitmap); 1608 } 1609 1610 QDF_STATUS 1611 wlan_reg_update_tx_power_on_ctry_change(struct wlan_objmgr_pdev *pdev, 1612 uint8_t vdev_id) 1613 { 1614 return reg_update_tx_power_on_ctry_change(pdev, vdev_id); 1615 } 1616 #endif 1617 1618 #if defined(CONFIG_BAND_6GHZ) 1619 QDF_STATUS wlan_reg_get_rnr_tpe_usable(struct wlan_objmgr_pdev *pdev, 1620 bool *reg_rnr_tpe_usable) 1621 { 1622 return reg_get_rnr_tpe_usable(pdev, reg_rnr_tpe_usable); 1623 } 1624 1625 QDF_STATUS wlan_reg_get_unspecified_ap_usable(struct wlan_objmgr_pdev *pdev, 1626 bool *reg_unspecified_ap_usable) 1627 { 1628 return reg_get_unspecified_ap_usable(pdev, reg_unspecified_ap_usable); 1629 } 1630 1631 QDF_STATUS 1632 wlan_reg_get_cur_6g_ap_pwr_type(struct wlan_objmgr_pdev *pdev, 1633 enum reg_6g_ap_type *reg_cur_6g_ap_pwr_type) 1634 { 1635 return reg_get_cur_6g_ap_pwr_type(pdev, reg_cur_6g_ap_pwr_type); 1636 } 1637 1638 qdf_export_symbol(wlan_reg_get_cur_6g_ap_pwr_type); 1639 1640 QDF_STATUS 1641 wlan_reg_get_cur_6g_client_type(struct wlan_objmgr_pdev *pdev, 1642 enum reg_6g_client_type 1643 *reg_cur_6g_client_mobility_type) 1644 { 1645 return reg_get_cur_6g_client_type(pdev, 1646 reg_cur_6g_client_mobility_type); 1647 } 1648 1649 qdf_export_symbol(wlan_reg_get_cur_6g_client_type); 1650 1651 QDF_STATUS 1652 wlan_reg_set_cur_6ghz_client_type(struct wlan_objmgr_pdev *pdev, 1653 enum reg_6g_client_type in_6ghz_client_type) 1654 { 1655 return reg_set_cur_6ghz_client_type(pdev, in_6ghz_client_type); 1656 } 1657 1658 QDF_STATUS 1659 wlan_reg_set_6ghz_client_type_from_target(struct wlan_objmgr_pdev *pdev) 1660 { 1661 return reg_set_6ghz_client_type_from_target(pdev); 1662 } 1663 1664 bool wlan_reg_is_6g_psd_power(struct wlan_objmgr_pdev *pdev) 1665 { 1666 return reg_is_6g_psd_power(pdev); 1667 } 1668 1669 QDF_STATUS wlan_reg_get_6g_chan_ap_power(struct wlan_objmgr_pdev *pdev, 1670 qdf_freq_t chan_freq, bool *is_psd, 1671 uint16_t *tx_power, 1672 uint16_t *eirp_psd_power) 1673 { 1674 return reg_get_6g_chan_ap_power(pdev, chan_freq, is_psd, 1675 tx_power, eirp_psd_power); 1676 } 1677 1678 qdf_export_symbol(wlan_reg_get_6g_chan_ap_power); 1679 1680 QDF_STATUS 1681 wlan_reg_get_client_power_for_connecting_ap(struct wlan_objmgr_pdev *pdev, 1682 enum reg_6g_ap_type ap_type, 1683 qdf_freq_t chan_freq, 1684 bool is_psd, uint16_t *tx_power, 1685 uint16_t *eirp_psd_power) 1686 { 1687 return reg_get_client_power_for_connecting_ap(pdev, ap_type, chan_freq, 1688 is_psd, tx_power, 1689 eirp_psd_power); 1690 } 1691 1692 QDF_STATUS 1693 wlan_reg_get_client_power_for_6ghz_ap(struct wlan_objmgr_pdev *pdev, 1694 enum reg_6g_client_type client_type, 1695 qdf_freq_t chan_freq, 1696 bool *is_psd, uint16_t *tx_power, 1697 uint16_t *eirp_psd_power) 1698 { 1699 return reg_get_client_power_for_6ghz_ap(pdev, client_type, chan_freq, 1700 is_psd, tx_power, 1701 eirp_psd_power); 1702 } 1703 1704 QDF_STATUS 1705 wlan_reg_set_ap_pwr_and_update_chan_list(struct wlan_objmgr_pdev *pdev, 1706 enum reg_6g_ap_type ap_pwr_type) 1707 { 1708 return reg_set_ap_pwr_and_update_chan_list(pdev, ap_pwr_type); 1709 } 1710 1711 qdf_export_symbol(wlan_reg_set_ap_pwr_and_update_chan_list); 1712 1713 uint8_t 1714 wlan_reg_get_num_rules_of_ap_pwr_type(struct wlan_objmgr_pdev *pdev, 1715 enum reg_6g_ap_type ap_pwr_type) 1716 { 1717 return reg_get_num_rules_of_ap_pwr_type(pdev, ap_pwr_type); 1718 } 1719 1720 qdf_export_symbol(wlan_reg_get_num_rules_of_ap_pwr_type); 1721 1722 QDF_STATUS wlan_reg_get_superchan_entry( 1723 struct wlan_objmgr_pdev *pdev, 1724 enum channel_enum chan_enum, 1725 const struct super_chan_info **p_sup_chan_entry) 1726 { 1727 return reg_get_superchan_entry(pdev, chan_enum, p_sup_chan_entry); 1728 } 1729 1730 enum supported_6g_pwr_types 1731 wlan_reg_conv_6g_ap_type_to_supported_6g_pwr_types(enum reg_6g_ap_type 1732 ap_pwr_type) 1733 { 1734 return reg_conv_6g_ap_type_to_supported_6g_pwr_types(ap_pwr_type); 1735 } 1736 1737 enum supported_6g_pwr_types 1738 wlan_reg_get_best_6g_pwr_type(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq) 1739 { 1740 return reg_get_best_6g_pwr_type(pdev, freq); 1741 } 1742 1743 enum reg_6g_ap_type 1744 wlan_reg_conv_supported_6g_pwr_type_to_ap_pwr_type(enum supported_6g_pwr_types 1745 in_6g_pwr_type) 1746 { 1747 return reg_convert_supported_6g_pwr_type_to_ap_pwr_type(in_6g_pwr_type); 1748 } 1749 #endif /* CONFIG_BAND_6GHZ */ 1750 1751 bool wlan_reg_is_ext_tpc_supported(struct wlan_objmgr_psoc *psoc) 1752 { 1753 return reg_is_ext_tpc_supported(psoc); 1754 } 1755 1756 #ifdef CONFIG_AFC_SUPPORT 1757 bool wlan_reg_is_afc_power_event_received(struct wlan_objmgr_pdev *pdev) 1758 { 1759 return reg_is_afc_power_event_received(pdev); 1760 } 1761 1762 qdf_export_symbol(wlan_reg_is_afc_power_event_received); 1763 1764 bool wlan_reg_is_afc_done(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq) 1765 { 1766 return reg_is_afc_done(pdev, freq); 1767 } 1768 1769 qdf_export_symbol(wlan_reg_is_afc_done); 1770 1771 QDF_STATUS wlan_reg_get_afc_req_id(struct wlan_objmgr_pdev *pdev, 1772 uint64_t *req_id) 1773 { 1774 return reg_get_afc_req_id(pdev, req_id); 1775 } 1776 1777 qdf_export_symbol(wlan_reg_get_afc_req_id); 1778 1779 bool wlan_reg_is_afc_expiry_event_received(struct wlan_objmgr_pdev *pdev) 1780 { 1781 return reg_is_afc_expiry_event_received(pdev); 1782 } 1783 1784 qdf_export_symbol(wlan_reg_is_afc_expiry_event_received); 1785 1786 bool wlan_reg_is_noaction_on_afc_pwr_evt(struct wlan_objmgr_pdev *pdev) 1787 { 1788 return reg_is_noaction_on_afc_pwr_evt(pdev); 1789 } 1790 1791 QDF_STATUS 1792 wlan_reg_get_afc_dev_deploy_type(struct wlan_objmgr_pdev *pdev, 1793 enum reg_afc_dev_deploy_type *afc_dev_type) 1794 { 1795 return reg_get_afc_dev_deploy_type(pdev, afc_dev_type); 1796 } 1797 1798 qdf_export_symbol(wlan_reg_get_afc_dev_deploy_type); 1799 1800 bool 1801 wlan_reg_is_sta_connect_allowed(struct wlan_objmgr_pdev *pdev, 1802 enum reg_6g_ap_type root_ap_pwr_mode) 1803 { 1804 return reg_is_sta_connect_allowed(pdev, root_ap_pwr_mode); 1805 } 1806 1807 qdf_export_symbol(wlan_reg_is_sta_connect_allowed); 1808 #endif /* CONFIG_AFC_SUPPORT */ 1809 1810 QDF_STATUS wlan_reg_is_chwidth_supported(struct wlan_objmgr_pdev *pdev, 1811 enum phy_ch_width ch_width, 1812 bool *is_supported) 1813 { 1814 return reg_is_chwidth_supported(pdev, ch_width, is_supported); 1815 } 1816 1817 qdf_export_symbol(wlan_reg_is_chwidth_supported); 1818 1819 #ifdef CONFIG_BAND_6GHZ 1820 qdf_freq_t wlan_reg_get_thresh_priority_freq(struct wlan_objmgr_pdev *pdev) 1821 { 1822 return reg_get_thresh_priority_freq(pdev); 1823 } 1824 1825 QDF_STATUS wlan_reg_psd_2_eirp(struct wlan_objmgr_pdev *pdev, 1826 int16_t psd, 1827 uint16_t ch_bw, 1828 int16_t *eirp) 1829 { 1830 return reg_psd_2_eirp(pdev, psd, ch_bw, eirp); 1831 } 1832 1833 qdf_export_symbol(wlan_reg_psd_2_eirp); 1834 1835 QDF_STATUS wlan_reg_eirp_2_psd(struct wlan_objmgr_pdev *pdev, uint16_t ch_bw, 1836 int16_t eirp, int16_t *psd) 1837 { 1838 return reg_eirp_2_psd(pdev, ch_bw, eirp, psd); 1839 } 1840 1841 enum reg_6g_ap_type 1842 wlan_reg_get_best_pwr_mode(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq, 1843 qdf_freq_t cen320, 1844 uint16_t bw, uint16_t in_punc_pattern) 1845 { 1846 return reg_get_best_pwr_mode(pdev, freq, cen320, bw, in_punc_pattern); 1847 } 1848 1849 qdf_export_symbol(wlan_reg_get_best_pwr_mode); 1850 1851 int8_t wlan_reg_get_eirp_pwr(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq, 1852 qdf_freq_t cen320, uint16_t bw, 1853 enum reg_6g_ap_type ap_pwr_type, 1854 uint16_t in_punc_pattern, 1855 bool is_client_list_lookup_needed, 1856 enum reg_6g_client_type client_type) 1857 { 1858 return reg_get_eirp_pwr(pdev, freq, cen320, bw, ap_pwr_type, 1859 in_punc_pattern, is_client_list_lookup_needed, 1860 client_type); 1861 } 1862 1863 qdf_export_symbol(wlan_reg_get_eirp_pwr); 1864 1865 #endif /* CONFIG_BAND_6GHZ */ 1866 1867 enum phy_ch_width wlan_reg_find_chwidth_from_bw(uint16_t bw) 1868 { 1869 return reg_find_chwidth_from_bw(bw); 1870 } 1871 1872 #ifdef WLAN_FEATURE_11BE 1873 enum channel_state 1874 wlan_reg_get_chan_state_for_320(struct wlan_objmgr_pdev *pdev, 1875 uint16_t freq, 1876 qdf_freq_t center_320, 1877 enum phy_ch_width ch_width, 1878 const struct bonded_channel_freq 1879 **bonded_chan_ptr_ptr, 1880 enum supported_6g_pwr_types in_6g_pwr_type, 1881 bool treat_nol_chan_as_disabled, 1882 uint16_t input_puncture_bitmap) 1883 { 1884 return reg_get_chan_state_for_320(pdev, freq, center_320, 1885 ch_width, bonded_chan_ptr_ptr, 1886 in_6g_pwr_type, 1887 treat_nol_chan_as_disabled, 1888 input_puncture_bitmap); 1889 } 1890 #endif 1891 1892 #ifdef CONFIG_BAND_6GHZ 1893 bool wlan_is_sup_chan_entry_afc_done(struct wlan_objmgr_pdev *pdev, 1894 enum channel_enum chan_idx, 1895 enum supported_6g_pwr_types in_6g_pwr_mode) 1896 { 1897 return reg_is_sup_chan_entry_afc_done(pdev, chan_idx, in_6g_pwr_mode); 1898 } 1899 1900 qdf_export_symbol(wlan_is_sup_chan_entry_afc_done); 1901 1902 QDF_STATUS 1903 wlan_reg_display_super_chan_list(struct wlan_objmgr_pdev *pdev) 1904 { 1905 return reg_display_super_chan_list(pdev); 1906 } 1907 1908 #if defined(CONFIG_AFC_SUPPORT) && defined(CONFIG_BAND_6GHZ) 1909 QDF_STATUS 1910 wlan_reg_get_afc_freq_range_and_psd_limits(struct wlan_objmgr_pdev *pdev, 1911 uint8_t num_freq_obj, 1912 struct afc_freq_obj *afc_obj) 1913 { 1914 return reg_get_afc_freq_range_and_psd_limits(pdev, num_freq_obj, 1915 afc_obj); 1916 } 1917 1918 QDF_STATUS 1919 wlan_reg_get_num_afc_freq_obj(struct wlan_objmgr_pdev *pdev, 1920 uint8_t *num_freq_obj) 1921 { 1922 return reg_get_num_afc_freq_obj(pdev, num_freq_obj); 1923 } 1924 1925 QDF_STATUS wlan_reg_set_afc_power_event_received(struct wlan_objmgr_pdev *pdev, 1926 bool val) 1927 { 1928 return reg_set_afc_power_event_received(pdev, val); 1929 } 1930 #endif 1931 1932 #endif 1933 1934 QDF_STATUS 1935 wlan_reg_recompute_current_chan_list(struct wlan_objmgr_psoc *psoc, 1936 struct wlan_objmgr_pdev *pdev) 1937 { 1938 struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj; 1939 1940 pdev_priv_obj = reg_get_pdev_obj(pdev); 1941 if (!IS_VALID_PDEV_REG_OBJ(pdev_priv_obj)) { 1942 reg_err("reg pdev priv obj is NULL"); 1943 return QDF_STATUS_E_FAILURE; 1944 } 1945 1946 reg_debug("Recomputing the current channel list"); 1947 reg_compute_pdev_current_chan_list(pdev_priv_obj); 1948 return reg_send_scheduler_msg_nb(psoc, pdev); 1949 } 1950 1951 #ifdef CONFIG_REG_CLIENT 1952 QDF_STATUS 1953 wlan_reg_modify_indoor_concurrency(struct wlan_objmgr_pdev *pdev, 1954 uint8_t vdev_id, uint32_t freq, 1955 enum phy_ch_width width, bool add) 1956 { 1957 if (add) 1958 return reg_add_indoor_concurrency(pdev, vdev_id, freq, width); 1959 else 1960 return reg_remove_indoor_concurrency(pdev, vdev_id, freq); 1961 } 1962 #endif 1963 1964 void 1965 wlan_reg_register_is_chan_connected_callback(struct wlan_objmgr_psoc *psoc, 1966 void *cbk) 1967 { 1968 reg_register_is_chan_connected_callback(psoc, 1969 (reg_get_connected_chan_for_mode_callback)cbk); 1970 } 1971 1972 void 1973 wlan_reg_unregister_is_chan_connected_callback(struct wlan_objmgr_psoc *psoc, 1974 void *cbk) 1975 { 1976 reg_unregister_is_chan_connected_callback(psoc, 1977 (reg_get_connected_chan_for_mode_callback)cbk); 1978 } 1979 1980 qdf_freq_t 1981 wlan_reg_get_endchan_cen_from_bandstart(qdf_freq_t band_start, 1982 uint16_t bw) 1983 { 1984 return reg_get_endchan_cen_from_bandstart(band_start, bw); 1985 } 1986 1987 QDF_STATUS 1988 wlan_reg_get_opclass_from_map(const struct reg_dmn_op_class_map_t **map, 1989 bool is_global_op_table_needed) 1990 { 1991 return reg_get_opclass_from_map(map, is_global_op_table_needed); 1992 } 1993