1 /* 2 * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021-2024 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 wlan_reg_read_default_country(struct wlan_objmgr_psoc * psoc,uint8_t * country)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 wlan_get_next_lower_bandwidth(enum phy_ch_width ch_width)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 wlan_reg_read_current_country(struct wlan_objmgr_psoc * psoc,uint8_t * country)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 wlan_reg_get_max_5g_bw_from_country_code(struct wlan_objmgr_pdev * pdev,uint16_t cc,uint16_t * max_bw_5g)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 wlan_reg_get_max_5g_bw_from_regdomain(struct wlan_objmgr_pdev * pdev,uint16_t regdmn,uint16_t * max_bw_5g)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 wlan_reg_get_max_bw_5G_for_fo(struct wlan_objmgr_pdev * pdev)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 wlan_reg_is_regdb_offloaded(struct wlan_objmgr_psoc * psoc)95 bool wlan_reg_is_regdb_offloaded(struct wlan_objmgr_psoc *psoc) 96 { 97 return reg_is_regdb_offloaded(psoc); 98 } 99 wlan_reg_get_pwrmode_chan_list(struct wlan_objmgr_pdev * pdev,struct regulatory_channel * chan_list,enum supported_6g_pwr_types in_6g_pwr_mode)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 wlan_reg_get_best_6g_power_type(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_pdev * pdev,enum reg_6g_ap_type * pwr_type_6g,enum reg_6g_ap_type ap_pwr_type,uint32_t chan_freq)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 wlan_reg_get_dfs_region(struct wlan_objmgr_pdev * pdev,enum dfs_reg * dfs_reg)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 wlan_reg_is_chan_disabled_and_not_nol(struct regulatory_channel * chan)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 wlan_reg_get_current_chan_list(struct wlan_objmgr_pdev * pdev,struct regulatory_channel * chan_list)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 wlan_reg_is_freq_enabled(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,enum supported_6g_pwr_types in_6g_pwr_mode)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 wlan_reg_is_freq_idx_enabled(struct wlan_objmgr_pdev * pdev,enum channel_enum freq_idx,enum supported_6g_pwr_types in_6g_pwr_mode)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 wlan_reg_get_secondary_current_chan_list(struct wlan_objmgr_pdev * pdev,struct regulatory_channel * chan_list)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) wlan_reg_get_6g_afc_chan_list(struct wlan_objmgr_pdev * pdev,struct regulatory_channel * chan_list)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 wlan_reg_get_6g_afc_mas_chan_list(struct wlan_objmgr_pdev * pdev,struct regulatory_channel * chan_list)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 wlan_reg_get_bw_value(enum phy_ch_width bw)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 wlan_reg_set_dfs_region(struct wlan_objmgr_pdev * pdev,enum dfs_reg dfs_reg)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 wlan_reg_get_domain_from_country_code(v_REGDOMAIN_t * reg_domain_ptr,const uint8_t * country_alpha2,enum country_src source)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 wlan_reg_dmn_get_opclass_from_channel(uint8_t * country,uint8_t channel,uint8_t offset)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 wlan_reg_get_band_cap_from_op_class(const uint8_t * country,uint8_t num_of_opclass,const uint8_t * opclass)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 wlan_reg_get_opclass_from_freq_width(uint8_t * country,qdf_freq_t freq,uint16_t ch_width,uint16_t behav_limit)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 wlan_reg_dmn_print_channels_in_opclass(uint8_t * country,uint8_t opclass)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 wlan_reg_dmn_get_chanwidth_from_opclass(uint8_t * country,uint8_t channel,uint8_t opclass)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 wlan_reg_dmn_get_chanwidth_from_opclass_auto(uint8_t * country,uint8_t channel,uint8_t opclass)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 wlan_reg_dmn_set_curr_opclasses(uint8_t num_classes,uint8_t * class)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 wlan_reg_dmn_get_curr_opclasses(uint8_t * num_classes,uint8_t * class)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 wlan_reg_get_opclass_details(struct wlan_objmgr_pdev * pdev,struct regdmn_ap_cap_opclass_t * reg_ap_cap,uint8_t * n_opclasses,uint8_t max_supp_op_class,bool global_tbl_lookup,enum supported_6g_pwr_types in_6g_pwr_mode)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 wlan_reg_get_opclass_for_cur_hwmode(struct wlan_objmgr_pdev * pdev,struct regdmn_ap_cap_opclass_t * reg_ap_cap,uint8_t * n_opclasses,uint8_t max_supp_op_class,bool global_tbl_lookup,enum phy_ch_width max_chwidth,bool is_80p80_supp,enum supported_6g_pwr_types in_6g_pwr_mode)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 wlan_reg_get_cc_and_src(struct wlan_objmgr_psoc * psoc,uint8_t * alpha)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 wlan_regulatory_init(void)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 wlan_regulatory_deinit(void)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 regulatory_assign_register_master_ext_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)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 regulatory_assign_unregister_master_ext_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)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 wlan_reg_get_6g_ap_master_chan_list(struct wlan_objmgr_pdev * pdev,enum reg_6g_ap_type ap_pwr_type,struct regulatory_channel * chan_list)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 wlan_reg_get_power_string(enum reg_6g_ap_type power_type)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 regulatory_assign_register_afc_event_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)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 regulatory_assign_unregister_afc_event_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)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 regulatory_assign_register_afc_event_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)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 regulatory_assign_unregister_afc_event_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)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 regulatory_assign_register_master_ext_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)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 regulatory_assign_unregister_master_ext_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)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 regulatory_assign_register_afc_event_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)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 regulatory_assign_unregister_afc_event_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)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 regulatory_psoc_open(struct wlan_objmgr_psoc * psoc)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 regulatory_psoc_close(struct wlan_objmgr_psoc * psoc)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 */ reg_is_cntry_set_pending(struct wlan_objmgr_pdev * pdev,struct wlan_objmgr_psoc * psoc)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 reg_is_cntry_set_pending(struct wlan_objmgr_pdev * pdev,struct wlan_objmgr_psoc * psoc)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 regulatory_pdev_open(struct wlan_objmgr_pdev * pdev)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 regulatory_pdev_close(struct wlan_objmgr_pdev * pdev)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 wlan_reg_freq_to_chan(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)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 wlan_reg_legacy_chan_to_freq(struct wlan_objmgr_pdev * pdev,uint8_t chan_num)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 wlan_reg_set_country(struct wlan_objmgr_pdev * pdev,uint8_t * country)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 wlan_reg_set_11d_country(struct wlan_objmgr_pdev * pdev,uint8_t * country)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 wlan_reg_is_world(uint8_t * country)660 bool wlan_reg_is_world(uint8_t *country) 661 { 662 return reg_is_world_alpha2(country); 663 } 664 wlan_reg_is_us(uint8_t * country)665 bool wlan_reg_is_us(uint8_t *country) 666 { 667 return reg_is_us_alpha2(country); 668 } 669 wlan_reg_is_etsi(uint8_t * country)670 bool wlan_reg_is_etsi(uint8_t *country) 671 { 672 return reg_is_etsi_alpha2(country); 673 } 674 wlan_reg_ctry_support_vlp(uint8_t * country)675 bool wlan_reg_ctry_support_vlp(uint8_t *country) 676 { 677 return reg_ctry_support_vlp(country); 678 } 679 wlan_reg_register_chan_change_callback(struct wlan_objmgr_psoc * psoc,void * cbk,void * arg)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 wlan_reg_unregister_chan_change_callback(struct wlan_objmgr_psoc * psoc,void * cbk)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 wlan_reg_register_ctry_change_callback(struct wlan_objmgr_psoc * psoc,void * cbk)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 wlan_reg_unregister_ctry_change_callback(struct wlan_objmgr_psoc * psoc,void * cbk)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 wlan_reg_is_11d_offloaded(struct wlan_objmgr_psoc * psoc)708 bool wlan_reg_is_11d_offloaded(struct wlan_objmgr_psoc *psoc) 709 { 710 return reg_is_11d_offloaded(psoc); 711 } 712 wlan_reg_11d_enabled_on_host(struct wlan_objmgr_psoc * psoc)713 bool wlan_reg_11d_enabled_on_host(struct wlan_objmgr_psoc *psoc) 714 { 715 return reg_11d_enabled_on_host(psoc); 716 } 717 wlan_reg_is_etsi_regdmn(struct wlan_objmgr_pdev * pdev)718 bool wlan_reg_is_etsi_regdmn(struct wlan_objmgr_pdev *pdev) 719 { 720 return reg_is_etsi_regdmn(pdev); 721 } 722 wlan_reg_is_etsi_srd_chan_allowed_master_mode(struct wlan_objmgr_pdev * pdev)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 wlan_reg_is_6ghz_band_set(struct wlan_objmgr_pdev * pdev)729 bool wlan_reg_is_6ghz_band_set(struct wlan_objmgr_pdev *pdev) 730 { 731 return reg_is_6ghz_band_set(pdev); 732 } 733 wlan_reg_get_keep_6ghz_sta_cli_connection(struct wlan_objmgr_pdev * pdev)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 } wlan_reg_get_fcc_constraint(struct wlan_objmgr_pdev * pdev,uint32_t freq)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 wlan_reg_get_country_max_allowed_bw(struct wlan_objmgr_pdev * pdev)743 uint32_t wlan_reg_get_country_max_allowed_bw(struct wlan_objmgr_pdev *pdev) 744 { 745 return reg_get_country_max_allowed_bw(pdev); 746 } 747 wlan_reg_get_chip_mode(struct wlan_objmgr_pdev * pdev,uint64_t * chip_mode)748 QDF_STATUS wlan_reg_get_chip_mode(struct wlan_objmgr_pdev *pdev, 749 uint64_t *chip_mode) 750 { 751 struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj; 752 753 pdev_priv_obj = wlan_objmgr_pdev_get_comp_private_obj(pdev, 754 WLAN_UMAC_COMP_REGULATORY); 755 756 if (!pdev_priv_obj) { 757 reg_err("reg pdev private obj is NULL"); 758 return QDF_STATUS_E_FAULT; 759 } 760 761 *chip_mode = pdev_priv_obj->wireless_modes; 762 763 return QDF_STATUS_SUCCESS; 764 } 765 wlan_reg_get_phybitmap(struct wlan_objmgr_pdev * pdev,uint16_t * phybitmap)766 QDF_STATUS wlan_reg_get_phybitmap(struct wlan_objmgr_pdev *pdev, 767 uint16_t *phybitmap) 768 { 769 return reg_get_phybitmap(pdev, phybitmap); 770 } 771 772 #ifdef WLAN_FEATURE_11BE wlan_reg_phybitmap_support_11be(struct wlan_objmgr_pdev * pdev)773 bool wlan_reg_phybitmap_support_11be(struct wlan_objmgr_pdev *pdev) 774 { 775 enum reg_phymode cur_max_phymode; 776 777 cur_max_phymode = reg_get_max_phymode(pdev, REG_PHYMODE_MAX - 1, 0); 778 return (cur_max_phymode == REG_PHYMODE_11BE); 779 } 780 #endif 781 wlan_reg_is_11d_scan_inprogress(struct wlan_objmgr_psoc * psoc)782 bool wlan_reg_is_11d_scan_inprogress(struct wlan_objmgr_psoc *psoc) 783 { 784 return reg_is_11d_scan_inprogress(psoc); 785 } 786 wlan_reg_get_freq_range(struct wlan_objmgr_pdev * pdev,qdf_freq_t * low_2g,qdf_freq_t * high_2g,qdf_freq_t * low_5g,qdf_freq_t * high_5g)787 QDF_STATUS wlan_reg_get_freq_range(struct wlan_objmgr_pdev *pdev, 788 qdf_freq_t *low_2g, 789 qdf_freq_t *high_2g, 790 qdf_freq_t *low_5g, 791 qdf_freq_t *high_5g) 792 { 793 struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj; 794 795 pdev_priv_obj = wlan_objmgr_pdev_get_comp_private_obj(pdev, 796 WLAN_UMAC_COMP_REGULATORY); 797 798 if (!pdev_priv_obj) { 799 reg_err("reg pdev private obj is NULL"); 800 return QDF_STATUS_E_FAULT; 801 } 802 803 if (low_2g) 804 *low_2g = pdev_priv_obj->range_2g_low; 805 806 if (high_2g) 807 *high_2g = pdev_priv_obj->range_2g_high; 808 809 if (low_5g) 810 *low_5g = pdev_priv_obj->range_5g_low; 811 812 if (high_5g) 813 *high_5g = pdev_priv_obj->range_5g_high; 814 815 return QDF_STATUS_SUCCESS; 816 } 817 818 qdf_export_symbol(wlan_reg_get_freq_range); 819 820 struct wlan_lmac_if_reg_tx_ops * wlan_reg_get_tx_ops(struct wlan_objmgr_psoc * psoc)821 wlan_reg_get_tx_ops(struct wlan_objmgr_psoc *psoc) 822 { 823 return reg_get_psoc_tx_ops(psoc); 824 } 825 826 qdf_export_symbol(wlan_reg_get_tx_ops); 827 wlan_reg_get_curr_regdomain(struct wlan_objmgr_pdev * pdev,struct cur_regdmn_info * cur_regdmn)828 QDF_STATUS wlan_reg_get_curr_regdomain(struct wlan_objmgr_pdev *pdev, 829 struct cur_regdmn_info *cur_regdmn) 830 { 831 return reg_get_curr_regdomain(pdev, cur_regdmn); 832 } 833 wlan_reg_max_5ghz_ch_num(void)834 uint8_t wlan_reg_max_5ghz_ch_num(void) 835 { 836 return reg_max_5ghz_ch_num(); 837 } 838 839 #ifdef CONFIG_CHAN_FREQ_API wlan_reg_min_24ghz_chan_freq(void)840 qdf_freq_t wlan_reg_min_24ghz_chan_freq(void) 841 { 842 return reg_min_24ghz_chan_freq(); 843 } 844 wlan_reg_max_24ghz_chan_freq(void)845 qdf_freq_t wlan_reg_max_24ghz_chan_freq(void) 846 { 847 return reg_max_24ghz_chan_freq(); 848 } 849 wlan_reg_min_5ghz_chan_freq(void)850 qdf_freq_t wlan_reg_min_5ghz_chan_freq(void) 851 { 852 return reg_min_5ghz_chan_freq(); 853 } 854 wlan_reg_max_5ghz_chan_freq(void)855 qdf_freq_t wlan_reg_max_5ghz_chan_freq(void) 856 { 857 return reg_max_5ghz_chan_freq(); 858 } 859 #endif /* CONFIG_CHAN_FREQ_API */ 860 wlan_reg_is_24ghz_ch_freq(qdf_freq_t freq)861 bool wlan_reg_is_24ghz_ch_freq(qdf_freq_t freq) 862 { 863 return reg_is_24ghz_ch_freq(freq); 864 } 865 wlan_reg_is_5ghz_ch_freq(qdf_freq_t freq)866 bool wlan_reg_is_5ghz_ch_freq(qdf_freq_t freq) 867 { 868 return reg_is_5ghz_ch_freq(freq); 869 } 870 wlan_reg_is_range_overlap_2g(qdf_freq_t low_freq,qdf_freq_t high_freq)871 bool wlan_reg_is_range_overlap_2g(qdf_freq_t low_freq, qdf_freq_t high_freq) 872 { 873 return reg_is_range_overlap_2g(low_freq, high_freq); 874 } 875 wlan_reg_is_range_overlap_5g(qdf_freq_t low_freq,qdf_freq_t high_freq)876 bool wlan_reg_is_range_overlap_5g(qdf_freq_t low_freq, qdf_freq_t high_freq) 877 { 878 return reg_is_range_overlap_5g(low_freq, high_freq); 879 } 880 wlan_reg_is_freq_indoor(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)881 bool wlan_reg_is_freq_indoor(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq) 882 { 883 return reg_is_freq_indoor(pdev, freq); 884 } 885 wlan_reg_get_min_chwidth(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)886 uint16_t wlan_reg_get_min_chwidth(struct wlan_objmgr_pdev *pdev, 887 qdf_freq_t freq) 888 { 889 return reg_get_min_chwidth(pdev, freq); 890 } 891 wlan_reg_get_max_chwidth(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)892 uint16_t wlan_reg_get_max_chwidth(struct wlan_objmgr_pdev *pdev, 893 qdf_freq_t freq) 894 { 895 return reg_get_max_chwidth(pdev, freq); 896 } 897 898 enum phy_ch_width wlan_reg_get_next_lower_bandwidth(enum phy_ch_width ch_width)899 wlan_reg_get_next_lower_bandwidth(enum phy_ch_width ch_width) 900 { 901 return get_next_lower_bandwidth(ch_width); 902 } 903 904 enum phy_ch_width wlan_reg_get_next_higher_bandwidth(enum phy_ch_width ch_width)905 wlan_reg_get_next_higher_bandwidth(enum phy_ch_width ch_width) 906 { 907 return reg_get_next_higher_bandwidth(ch_width); 908 } 909 910 #ifdef CONFIG_REG_CLIENT wlan_reg_is_freq_indoor_in_secondary_list(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)911 bool wlan_reg_is_freq_indoor_in_secondary_list(struct wlan_objmgr_pdev *pdev, 912 qdf_freq_t freq) 913 { 914 return reg_is_freq_indoor_in_secondary_list(pdev, freq); 915 } 916 #endif 917 918 #ifdef CONFIG_BAND_6GHZ wlan_reg_is_6ghz_chan_freq(uint16_t freq)919 bool wlan_reg_is_6ghz_chan_freq(uint16_t freq) 920 { 921 return reg_is_6ghz_chan_freq(freq); 922 } 923 924 #ifdef CONFIG_6G_FREQ_OVERLAP wlan_reg_is_range_only6g(qdf_freq_t low_freq,qdf_freq_t high_freq)925 bool wlan_reg_is_range_only6g(qdf_freq_t low_freq, qdf_freq_t high_freq) 926 { 927 return reg_is_range_only6g(low_freq, high_freq); 928 } 929 wlan_reg_is_range_overlap_6g(qdf_freq_t low_freq,qdf_freq_t high_freq)930 bool wlan_reg_is_range_overlap_6g(qdf_freq_t low_freq, qdf_freq_t high_freq) 931 { 932 return reg_is_range_overlap_6g(low_freq, high_freq); 933 } 934 935 qdf_export_symbol(wlan_reg_is_range_overlap_6g); 936 #endif 937 wlan_reg_min_6ghz_chan_freq(void)938 uint16_t wlan_reg_min_6ghz_chan_freq(void) 939 { 940 return reg_min_6ghz_chan_freq(); 941 } 942 wlan_reg_max_6ghz_chan_freq(void)943 uint16_t wlan_reg_max_6ghz_chan_freq(void) 944 { 945 return reg_max_6ghz_chan_freq(); 946 } 947 wlan_reg_is_6ghz_psc_chan_freq(uint16_t freq)948 bool wlan_reg_is_6ghz_psc_chan_freq(uint16_t freq) 949 { 950 return reg_is_6ghz_psc_chan_freq(freq); 951 } 952 wlan_reg_is_6g_freq_indoor(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)953 bool wlan_reg_is_6g_freq_indoor(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq) 954 { 955 return reg_is_6g_freq_indoor(pdev, freq); 956 } 957 958 QDF_STATUS wlan_reg_get_max_txpower_for_6g_tpe(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,uint8_t bw,enum reg_6g_ap_type reg_ap,enum reg_6g_client_type reg_client,bool is_psd,uint8_t * tx_power)959 wlan_reg_get_max_txpower_for_6g_tpe(struct wlan_objmgr_pdev *pdev, 960 qdf_freq_t freq, uint8_t bw, 961 enum reg_6g_ap_type reg_ap, 962 enum reg_6g_client_type reg_client, 963 bool is_psd, 964 uint8_t *tx_power) 965 { 966 return reg_get_max_txpower_for_6g_tpe(pdev, freq, bw, 967 reg_ap, 968 reg_client, is_psd, 969 tx_power); 970 } 971 wlan_reg_is_6ghz_unii5_chan_freq(qdf_freq_t freq)972 bool wlan_reg_is_6ghz_unii5_chan_freq(qdf_freq_t freq) 973 { 974 return reg_is_6ghz_unii5_chan_freq(freq); 975 } 976 #endif /* CONFIG_BAND_6GHZ */ 977 978 uint16_t wlan_reg_get_band_channel_list(struct wlan_objmgr_pdev * pdev,uint8_t band_mask,struct regulatory_channel * channel_list)979 wlan_reg_get_band_channel_list(struct wlan_objmgr_pdev *pdev, 980 uint8_t band_mask, 981 struct regulatory_channel *channel_list) 982 { 983 if (!pdev) { 984 reg_err("pdev object is NULL"); 985 return 0; 986 } 987 988 return reg_get_band_channel_list(pdev, band_mask, channel_list); 989 } 990 991 #ifdef CONFIG_REG_6G_PWRMODE 992 uint16_t wlan_reg_get_band_channel_list_for_pwrmode(struct wlan_objmgr_pdev * pdev,uint8_t band_mask,struct regulatory_channel * channel_list,enum supported_6g_pwr_types in_6g_pwr_type)993 wlan_reg_get_band_channel_list_for_pwrmode(struct wlan_objmgr_pdev *pdev, 994 uint8_t band_mask, 995 struct regulatory_channel 996 *channel_list, 997 enum supported_6g_pwr_types 998 in_6g_pwr_type) 999 { 1000 if (!pdev) { 1001 reg_err("pdev object is NULL"); 1002 return 0; 1003 } 1004 1005 return reg_get_band_channel_list_for_pwrmode(pdev, band_mask, 1006 channel_list, 1007 in_6g_pwr_type); 1008 } 1009 #endif 1010 1011 #ifdef CONFIG_REG_CLIENT 1012 uint16_t wlan_reg_get_secondary_band_channel_list(struct wlan_objmgr_pdev * pdev,uint8_t band_mask,struct regulatory_channel * channel_list)1013 wlan_reg_get_secondary_band_channel_list(struct wlan_objmgr_pdev *pdev, 1014 uint8_t band_mask, 1015 struct regulatory_channel 1016 *channel_list) 1017 { 1018 if (!pdev) { 1019 reg_err("pdev object is NULL"); 1020 return 0; 1021 } 1022 1023 return reg_get_secondary_band_channel_list(pdev, band_mask, 1024 channel_list); 1025 } 1026 #endif 1027 wlan_reg_chan_band_to_freq(struct wlan_objmgr_pdev * pdev,uint8_t chan,uint8_t band_mask)1028 qdf_freq_t wlan_reg_chan_band_to_freq(struct wlan_objmgr_pdev *pdev, 1029 uint8_t chan, uint8_t band_mask) 1030 { 1031 return reg_chan_band_to_freq(pdev, chan, band_mask); 1032 } 1033 1034 qdf_export_symbol(wlan_reg_chan_band_to_freq); 1035 1036 #ifdef CONFIG_49GHZ_CHAN wlan_reg_is_49ghz_freq(qdf_freq_t freq)1037 bool wlan_reg_is_49ghz_freq(qdf_freq_t freq) 1038 { 1039 return reg_is_49ghz_freq(freq); 1040 } 1041 #endif /* CONFIG_49GHZ_CHAN */ 1042 wlan_reg_ch_num(uint32_t ch_enum)1043 uint8_t wlan_reg_ch_num(uint32_t ch_enum) 1044 { 1045 return reg_ch_num(ch_enum); 1046 } 1047 wlan_reg_ch_to_freq(uint32_t ch_enum)1048 qdf_freq_t wlan_reg_ch_to_freq(uint32_t ch_enum) 1049 { 1050 return reg_ch_to_freq(ch_enum); 1051 } 1052 1053 #ifdef WLAN_REG_PARTIAL_OFFLOAD wlan_reg_is_regdmn_en302502_applicable(struct wlan_objmgr_pdev * pdev)1054 bool wlan_reg_is_regdmn_en302502_applicable(struct wlan_objmgr_pdev *pdev) 1055 { 1056 return reg_is_regdmn_en302502_applicable(pdev); 1057 } 1058 #endif 1059 wlan_reg_modify_pdev_chan_range(struct wlan_objmgr_pdev * pdev)1060 QDF_STATUS wlan_reg_modify_pdev_chan_range(struct wlan_objmgr_pdev *pdev) 1061 { 1062 return reg_modify_pdev_chan_range(pdev); 1063 } 1064 wlan_reg_update_pdev_wireless_modes(struct wlan_objmgr_pdev * pdev,uint64_t wireless_modes)1065 QDF_STATUS wlan_reg_update_pdev_wireless_modes(struct wlan_objmgr_pdev *pdev, 1066 uint64_t wireless_modes) 1067 { 1068 return reg_update_pdev_wireless_modes(pdev, wireless_modes); 1069 } 1070 #ifdef DISABLE_UNII_SHARED_BANDS wlan_reg_disable_chan_coex(struct wlan_objmgr_pdev * pdev,uint8_t unii_5g_bitmap)1071 QDF_STATUS wlan_reg_disable_chan_coex(struct wlan_objmgr_pdev *pdev, 1072 uint8_t unii_5g_bitmap) 1073 { 1074 return reg_disable_chan_coex(pdev, unii_5g_bitmap); 1075 } 1076 #endif 1077 1078 #ifdef CONFIG_CHAN_FREQ_API wlan_reg_is_same_band_freqs(qdf_freq_t freq1,qdf_freq_t freq2)1079 bool wlan_reg_is_same_band_freqs(qdf_freq_t freq1, qdf_freq_t freq2) 1080 { 1081 return reg_is_same_band_freqs(freq1, freq2); 1082 } 1083 wlan_reg_get_chan_enum_for_freq(qdf_freq_t freq)1084 enum channel_enum wlan_reg_get_chan_enum_for_freq(qdf_freq_t freq) 1085 { 1086 return reg_get_chan_enum_for_freq(freq); 1087 } 1088 1089 QDF_STATUS wlan_reg_get_min_max_bw_for_chan_index(struct wlan_objmgr_pdev * pdev,enum channel_enum chan_idx,uint16_t * min_bw,uint16_t * max_bw)1090 wlan_reg_get_min_max_bw_for_chan_index(struct wlan_objmgr_pdev *pdev, 1091 enum channel_enum chan_idx, 1092 uint16_t *min_bw, uint16_t *max_bw) 1093 { 1094 return reg_get_min_max_bw_on_cur_chan_list(pdev, 1095 chan_idx, min_bw, max_bw); 1096 } 1097 wlan_reg_is_freq_present_in_cur_chan_list(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1098 bool wlan_reg_is_freq_present_in_cur_chan_list(struct wlan_objmgr_pdev *pdev, 1099 qdf_freq_t freq) 1100 { 1101 return reg_is_freq_present_in_cur_chan_list(pdev, freq); 1102 } 1103 wlan_reg_is_etsi_srd_chan_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1104 bool wlan_reg_is_etsi_srd_chan_for_freq(struct wlan_objmgr_pdev *pdev, 1105 qdf_freq_t freq) 1106 { 1107 return reg_is_etsi_srd_chan_for_freq(pdev, freq); 1108 } 1109 wlan_reg_is_dsrc_freq(qdf_freq_t freq)1110 bool wlan_reg_is_dsrc_freq(qdf_freq_t freq) 1111 { 1112 return reg_is_dsrc_freq(freq); 1113 } 1114 wlan_reg_update_nol_ch_for_freq(struct wlan_objmgr_pdev * pdev,uint16_t * chan_freq_list,uint8_t num_ch,bool nol_ch)1115 void wlan_reg_update_nol_ch_for_freq(struct wlan_objmgr_pdev *pdev, 1116 uint16_t *chan_freq_list, 1117 uint8_t num_ch, 1118 bool nol_ch) 1119 { 1120 reg_update_nol_ch_for_freq(pdev, chan_freq_list, num_ch, nol_ch); 1121 } 1122 wlan_reg_update_nol_history_ch_for_freq(struct wlan_objmgr_pdev * pdev,uint16_t * ch_list,uint8_t num_ch,bool nol_history_ch)1123 void wlan_reg_update_nol_history_ch_for_freq(struct wlan_objmgr_pdev *pdev, 1124 uint16_t *ch_list, 1125 uint8_t num_ch, 1126 bool nol_history_ch) 1127 { 1128 reg_update_nol_history_ch_for_freq(pdev, 1129 ch_list, 1130 num_ch, 1131 nol_history_ch); 1132 } 1133 wlan_reg_is_dfs_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1134 bool wlan_reg_is_dfs_for_freq(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq) 1135 { 1136 return reg_is_dfs_for_freq(pdev, freq); 1137 } 1138 wlan_reg_is_passive_or_disable_for_pwrmode(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,enum supported_6g_pwr_types in_6g_pwr_mode)1139 bool wlan_reg_is_passive_or_disable_for_pwrmode( 1140 struct wlan_objmgr_pdev *pdev, 1141 qdf_freq_t freq, 1142 enum supported_6g_pwr_types in_6g_pwr_mode) 1143 { 1144 return reg_is_passive_or_disable_for_pwrmode(pdev, freq, 1145 in_6g_pwr_mode); 1146 } 1147 1148 #ifdef CONFIG_REG_6G_PWRMODE wlan_reg_is_disable_for_pwrmode(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,enum supported_6g_pwr_types in_6g_pwr_mode)1149 bool wlan_reg_is_disable_for_pwrmode(struct wlan_objmgr_pdev *pdev, 1150 qdf_freq_t freq, 1151 enum supported_6g_pwr_types in_6g_pwr_mode) 1152 { 1153 return reg_is_disable_for_pwrmode(pdev, freq, in_6g_pwr_mode); 1154 } 1155 #endif 1156 1157 #ifdef CONFIG_REG_CLIENT wlan_reg_is_disable_in_secondary_list_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1158 bool wlan_reg_is_disable_in_secondary_list_for_freq( 1159 struct wlan_objmgr_pdev *pdev, 1160 qdf_freq_t freq) 1161 { 1162 return reg_is_disable_in_secondary_list_for_freq(pdev, freq); 1163 } 1164 wlan_reg_is_enable_in_secondary_list_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1165 bool wlan_reg_is_enable_in_secondary_list_for_freq( 1166 struct wlan_objmgr_pdev *pdev, 1167 qdf_freq_t freq) 1168 { 1169 return reg_is_enable_in_secondary_list_for_freq(pdev, freq); 1170 } 1171 wlan_reg_is_dfs_in_secondary_list_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1172 bool wlan_reg_is_dfs_in_secondary_list_for_freq(struct wlan_objmgr_pdev *pdev, 1173 qdf_freq_t freq) 1174 { 1175 return reg_is_dfs_in_secondary_list_for_freq(pdev, freq); 1176 } 1177 1178 QDF_STATUS wlan_reg_get_chan_pwr_attr_from_secondary_list_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,bool * is_psd,uint16_t * tx_power,uint16_t * psd_eirp,uint32_t * flags)1179 wlan_reg_get_chan_pwr_attr_from_secondary_list_for_freq( 1180 struct wlan_objmgr_pdev *pdev, qdf_freq_t freq, 1181 bool *is_psd, uint16_t *tx_power, 1182 uint16_t *psd_eirp, uint32_t *flags) 1183 { 1184 return reg_get_channel_power_attr_from_secondary_list_for_freq( 1185 pdev, freq, is_psd, tx_power, psd_eirp, flags); 1186 } 1187 1188 QDF_STATUS wlan_reg_decide_6ghz_power_within_bw_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,enum phy_ch_width bw,bool * is_psd,uint16_t * min_tx_power,int16_t * min_psd_eirp,enum reg_6g_ap_type * power_type,enum supported_6g_pwr_types pwr_mode,uint16_t input_punc_bitmap)1189 wlan_reg_decide_6ghz_power_within_bw_for_freq(struct wlan_objmgr_pdev *pdev, 1190 qdf_freq_t freq, 1191 enum phy_ch_width bw, 1192 bool *is_psd, 1193 uint16_t *min_tx_power, 1194 int16_t *min_psd_eirp, 1195 enum reg_6g_ap_type *power_type, 1196 enum supported_6g_pwr_types pwr_mode, 1197 uint16_t input_punc_bitmap) 1198 { 1199 return reg_decide_6ghz_power_within_bw_for_freq(pdev, 1200 freq, 1201 bw, 1202 is_psd, 1203 min_tx_power, 1204 min_psd_eirp, 1205 power_type, 1206 pwr_mode, 1207 input_punc_bitmap); 1208 } 1209 #endif 1210 wlan_reg_is_passive_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1211 bool wlan_reg_is_passive_for_freq(struct wlan_objmgr_pdev *pdev, 1212 qdf_freq_t freq) 1213 { 1214 return reg_is_passive_for_freq(pdev, freq); 1215 } 1216 1217 QDF_STATUS wlan_reg_get_channel_list_with_power_for_freq(struct wlan_objmgr_pdev * pdev,struct channel_power * ch_list,uint8_t * num_chan)1218 wlan_reg_get_channel_list_with_power_for_freq(struct wlan_objmgr_pdev *pdev, 1219 struct channel_power *ch_list, 1220 uint8_t *num_chan) 1221 { 1222 return reg_get_channel_list_with_power_for_freq(pdev, 1223 ch_list, 1224 num_chan); 1225 } 1226 1227 bool wlan_reg_chan_has_dfs_attribute_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1228 wlan_reg_chan_has_dfs_attribute_for_freq(struct wlan_objmgr_pdev *pdev, 1229 qdf_freq_t freq) 1230 { 1231 return reg_chan_has_dfs_attribute_for_freq(pdev, freq); 1232 } 1233 1234 enum channel_state wlan_reg_get_5g_bonded_channel_state_for_pwrmode(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,struct ch_params * ch_params,enum supported_6g_pwr_types in_6g_pwr_type)1235 wlan_reg_get_5g_bonded_channel_state_for_pwrmode(struct wlan_objmgr_pdev *pdev, 1236 qdf_freq_t freq, 1237 struct ch_params *ch_params, 1238 enum supported_6g_pwr_types 1239 in_6g_pwr_type) 1240 { 1241 enum phy_ch_width bw; 1242 1243 if (!ch_params) { 1244 reg_err_rl("Invalid ch_params"); 1245 return CHANNEL_STATE_INVALID; 1246 } 1247 bw = ch_params->ch_width; 1248 1249 if (reg_is_ch_width_320(bw)) { 1250 const struct bonded_channel_freq *bonded_ch_ptr_ptr = NULL; 1251 uint16_t in_punc_bitmap = reg_fetch_punc_bitmap(ch_params); 1252 1253 return reg_get_5g_bonded_channel_for_pwrmode(pdev, freq, bw, 1254 &bonded_ch_ptr_ptr, 1255 in_6g_pwr_type, 1256 in_punc_bitmap); 1257 } 1258 1259 return reg_get_5g_bonded_channel_state_for_pwrmode(pdev, freq, 1260 ch_params, 1261 in_6g_pwr_type); 1262 } 1263 1264 qdf_export_symbol(wlan_reg_get_5g_bonded_channel_state_for_pwrmode); 1265 1266 enum channel_state wlan_reg_get_2g_bonded_channel_state_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,qdf_freq_t sec_ch_freq,enum phy_ch_width bw)1267 wlan_reg_get_2g_bonded_channel_state_for_freq(struct wlan_objmgr_pdev *pdev, 1268 qdf_freq_t freq, 1269 qdf_freq_t sec_ch_freq, 1270 enum phy_ch_width bw) 1271 { 1272 return reg_get_2g_bonded_channel_state_for_freq(pdev, 1273 freq, 1274 sec_ch_freq, 1275 bw); 1276 } 1277 1278 #ifdef CONFIG_REG_6G_PWRMODE wlan_reg_set_channel_params_for_pwrmode(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,qdf_freq_t sec_ch_2g_freq,struct ch_params * ch_params,enum supported_6g_pwr_types in_6g_pwr_mode)1279 void wlan_reg_set_channel_params_for_pwrmode(struct wlan_objmgr_pdev *pdev, 1280 qdf_freq_t freq, 1281 qdf_freq_t sec_ch_2g_freq, 1282 struct ch_params *ch_params, 1283 enum supported_6g_pwr_types 1284 in_6g_pwr_mode) 1285 { 1286 reg_set_channel_params_for_pwrmode(pdev, freq, sec_ch_2g_freq, 1287 ch_params, 1288 in_6g_pwr_mode, true); 1289 } 1290 1291 qdf_export_symbol(wlan_reg_set_channel_params_for_pwrmode); 1292 #endif 1293 1294 const struct bonded_channel_freq * wlan_reg_get_bonded_chan_entry(qdf_freq_t freq,enum phy_ch_width chwidth,qdf_freq_t cen320_freq)1295 wlan_reg_get_bonded_chan_entry(qdf_freq_t freq, enum phy_ch_width chwidth, 1296 qdf_freq_t cen320_freq) 1297 { 1298 return reg_get_bonded_chan_entry(freq, chwidth, cen320_freq); 1299 } 1300 1301 #ifdef WLAN_FEATURE_11BE 1302 #ifdef CONFIG_REG_6G_PWRMODE 1303 void wlan_reg_fill_channel_list_for_pwrmode(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,qdf_freq_t sec_ch_2g_freq,enum phy_ch_width ch_width,qdf_freq_t band_center_320,struct reg_channel_list * chan_list,enum supported_6g_pwr_types in_6g_pwr_type,bool treat_nol_chan_as_disabled)1304 wlan_reg_fill_channel_list_for_pwrmode(struct wlan_objmgr_pdev *pdev, 1305 qdf_freq_t freq, 1306 qdf_freq_t sec_ch_2g_freq, 1307 enum phy_ch_width ch_width, 1308 qdf_freq_t band_center_320, 1309 struct reg_channel_list *chan_list, 1310 enum supported_6g_pwr_types 1311 in_6g_pwr_type, 1312 bool treat_nol_chan_as_disabled) 1313 { 1314 reg_fill_channel_list_for_pwrmode(pdev, freq, sec_ch_2g_freq, ch_width, 1315 band_center_320, chan_list, 1316 in_6g_pwr_type, 1317 treat_nol_chan_as_disabled); 1318 } 1319 #endif /* CONFIG_REG_6G_PWRMODE */ 1320 wlan_reg_is_punc_bitmap_valid(enum phy_ch_width bw,uint16_t puncture_bitmap)1321 bool wlan_reg_is_punc_bitmap_valid(enum phy_ch_width bw, 1322 uint16_t puncture_bitmap) 1323 { 1324 return reg_is_punc_bitmap_valid(bw, puncture_bitmap); 1325 } 1326 wlan_reg_find_nearest_puncture_pattern(enum phy_ch_width bw,uint16_t proposed_bitmap)1327 uint16_t wlan_reg_find_nearest_puncture_pattern(enum phy_ch_width bw, 1328 uint16_t proposed_bitmap) 1329 { 1330 return reg_find_nearest_puncture_pattern(bw, proposed_bitmap); 1331 } 1332 wlan_reg_extract_puncture_by_bw(enum phy_ch_width ori_bw,uint16_t ori_puncture_bitmap,qdf_freq_t freq,qdf_freq_t cen320_freq,enum phy_ch_width new_bw,uint16_t * new_puncture_bitmap)1333 QDF_STATUS wlan_reg_extract_puncture_by_bw(enum phy_ch_width ori_bw, 1334 uint16_t ori_puncture_bitmap, 1335 qdf_freq_t freq, 1336 qdf_freq_t cen320_freq, 1337 enum phy_ch_width new_bw, 1338 uint16_t *new_puncture_bitmap) 1339 { 1340 return reg_extract_puncture_by_bw(ori_bw, ori_puncture_bitmap, freq, 1341 cen320_freq, new_bw, 1342 new_puncture_bitmap); 1343 } 1344 wlan_reg_set_create_punc_bitmap(struct ch_params * ch_params,bool is_create_punc_bitmap)1345 void wlan_reg_set_create_punc_bitmap(struct ch_params *ch_params, 1346 bool is_create_punc_bitmap) 1347 { 1348 reg_set_create_punc_bitmap(ch_params, is_create_punc_bitmap); 1349 } 1350 1351 #ifdef CONFIG_REG_CLIENT wlan_reg_apply_puncture(struct wlan_objmgr_pdev * pdev,uint16_t puncture_bitmap,qdf_freq_t freq,enum phy_ch_width bw,qdf_freq_t cen320_freq)1352 QDF_STATUS wlan_reg_apply_puncture(struct wlan_objmgr_pdev *pdev, 1353 uint16_t puncture_bitmap, 1354 qdf_freq_t freq, 1355 enum phy_ch_width bw, 1356 qdf_freq_t cen320_freq) 1357 { 1358 return reg_apply_puncture(pdev, puncture_bitmap, freq, bw, 1359 cen320_freq); 1360 } 1361 wlan_reg_remove_puncture(struct wlan_objmgr_pdev * pdev)1362 QDF_STATUS wlan_reg_remove_puncture(struct wlan_objmgr_pdev *pdev) 1363 { 1364 return reg_remove_puncture(pdev); 1365 } 1366 #endif 1367 #endif /* WLAN_FEATURE_11BE */ 1368 1369 #ifdef CONFIG_REG_6G_PWRMODE 1370 enum channel_state wlan_reg_get_channel_state_for_pwrmode(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,enum supported_6g_pwr_types in_6g_pwr_type)1371 wlan_reg_get_channel_state_for_pwrmode(struct wlan_objmgr_pdev *pdev, 1372 qdf_freq_t freq, 1373 enum supported_6g_pwr_types 1374 in_6g_pwr_type) 1375 { 1376 return reg_get_channel_state_for_pwrmode(pdev, freq, in_6g_pwr_type); 1377 } 1378 #endif 1379 1380 #ifdef CONFIG_REG_CLIENT wlan_reg_get_channel_state_from_secondary_list_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1381 enum channel_state wlan_reg_get_channel_state_from_secondary_list_for_freq( 1382 struct wlan_objmgr_pdev *pdev, 1383 qdf_freq_t freq) 1384 { 1385 return reg_get_channel_state_from_secondary_list_for_freq(pdev, freq); 1386 } 1387 1388 QDF_STATUS wlan_reg_get_channel_list_with_power(struct wlan_objmgr_pdev * pdev,struct channel_power * ch_list,uint8_t * num_chan,enum supported_6g_pwr_types in_6g_pwr_type)1389 wlan_reg_get_channel_list_with_power(struct wlan_objmgr_pdev *pdev, 1390 struct channel_power *ch_list, 1391 uint8_t *num_chan, 1392 enum supported_6g_pwr_types in_6g_pwr_type) 1393 { 1394 return reg_get_channel_list_with_power(pdev, ch_list, num_chan, 1395 in_6g_pwr_type); 1396 } 1397 #endif 1398 wlan_reg_get_channel_reg_power_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1399 uint8_t wlan_reg_get_channel_reg_power_for_freq(struct wlan_objmgr_pdev *pdev, 1400 qdf_freq_t freq) 1401 { 1402 return reg_get_channel_reg_power_for_freq(pdev, freq); 1403 } 1404 wlan_reg_freq_to_band(qdf_freq_t freq)1405 enum reg_wifi_band wlan_reg_freq_to_band(qdf_freq_t freq) 1406 { 1407 return reg_freq_to_band(freq); 1408 } 1409 qdf_export_symbol(wlan_reg_freq_to_band); 1410 wlan_reg_min_chan_freq(void)1411 qdf_freq_t wlan_reg_min_chan_freq(void) 1412 { 1413 return reg_min_chan_freq(); 1414 } 1415 wlan_reg_max_chan_freq(void)1416 qdf_freq_t wlan_reg_max_chan_freq(void) 1417 { 1418 return reg_max_chan_freq(); 1419 } 1420 wlan_reg_freq_width_to_chan_op_class(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,uint16_t chan_width,bool global_tbl_lookup,uint16_t behav_limit,uint8_t * op_class,uint8_t * chan_num)1421 void wlan_reg_freq_width_to_chan_op_class(struct wlan_objmgr_pdev *pdev, 1422 qdf_freq_t freq, 1423 uint16_t chan_width, 1424 bool global_tbl_lookup, 1425 uint16_t behav_limit, 1426 uint8_t *op_class, 1427 uint8_t *chan_num) 1428 { 1429 return reg_freq_width_to_chan_op_class(pdev, freq, chan_width, 1430 global_tbl_lookup, 1431 behav_limit, 1432 op_class, 1433 chan_num); 1434 } 1435 1436 qdf_export_symbol(wlan_reg_freq_width_to_chan_op_class); 1437 wlan_reg_freq_width_to_chan_op_class_auto(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,uint16_t chan_width,bool global_tbl_lookup,uint16_t behav_limit,uint8_t * op_class,uint8_t * chan_num)1438 void wlan_reg_freq_width_to_chan_op_class_auto(struct wlan_objmgr_pdev *pdev, 1439 qdf_freq_t freq, 1440 uint16_t chan_width, 1441 bool global_tbl_lookup, 1442 uint16_t behav_limit, 1443 uint8_t *op_class, 1444 uint8_t *chan_num) 1445 { 1446 reg_freq_width_to_chan_op_class_auto(pdev, freq, chan_width, 1447 global_tbl_lookup, 1448 behav_limit, 1449 op_class, 1450 chan_num); 1451 } 1452 1453 qdf_export_symbol(wlan_reg_freq_width_to_chan_op_class_auto); 1454 wlan_reg_freq_to_chan_op_class(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,bool global_tbl_lookup,uint16_t behav_limit,uint8_t * op_class,uint8_t * chan_num)1455 void wlan_reg_freq_to_chan_op_class(struct wlan_objmgr_pdev *pdev, 1456 qdf_freq_t freq, 1457 bool global_tbl_lookup, 1458 uint16_t behav_limit, 1459 uint8_t *op_class, 1460 uint8_t *chan_num) 1461 { 1462 return reg_freq_to_chan_op_class(pdev, freq, 1463 global_tbl_lookup, 1464 behav_limit, 1465 op_class, 1466 chan_num); 1467 } 1468 wlan_reg_is_freq_in_country_opclass(struct wlan_objmgr_pdev * pdev,const uint8_t country[3],uint8_t op_class,qdf_freq_t chan_freq)1469 bool wlan_reg_is_freq_in_country_opclass(struct wlan_objmgr_pdev *pdev, 1470 const uint8_t country[3], 1471 uint8_t op_class, 1472 qdf_freq_t chan_freq) 1473 { 1474 return reg_is_freq_in_country_opclass(pdev, country, 1475 op_class, chan_freq); 1476 } 1477 1478 enum channel_state wlan_reg_get_5g_bonded_channel_and_state_for_pwrmode(struct wlan_objmgr_pdev * pdev,uint16_t freq,enum phy_ch_width bw,const struct bonded_channel_freq ** bonded_chan_ptr_ptr,enum supported_6g_pwr_types in_6g_pwr_mode,uint16_t input_puncture_bitmap)1479 wlan_reg_get_5g_bonded_channel_and_state_for_pwrmode( 1480 struct wlan_objmgr_pdev *pdev, 1481 uint16_t freq, 1482 enum phy_ch_width bw, 1483 const 1484 struct bonded_channel_freq 1485 **bonded_chan_ptr_ptr, 1486 enum supported_6g_pwr_types 1487 in_6g_pwr_mode, 1488 uint16_t input_puncture_bitmap) 1489 { 1490 /* 1491 * Get channel frequencies and state from regulatory 1492 */ 1493 return reg_get_5g_bonded_channel_for_pwrmode(pdev, freq, bw, 1494 bonded_chan_ptr_ptr, 1495 in_6g_pwr_mode, 1496 input_puncture_bitmap); 1497 } 1498 1499 qdf_export_symbol(wlan_reg_get_5g_bonded_channel_and_state_for_pwrmode); 1500 1501 #if defined(CONFIG_REG_CLIENT) 1502 enum channel_state wlan_reg_get_bonded_channel_state_for_pwrmode(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,enum phy_ch_width bw,qdf_freq_t sec_freq,enum supported_6g_pwr_types in_6g_pwr_mode)1503 wlan_reg_get_bonded_channel_state_for_pwrmode(struct wlan_objmgr_pdev *pdev, 1504 qdf_freq_t freq, 1505 enum phy_ch_width bw, 1506 qdf_freq_t sec_freq, 1507 enum supported_6g_pwr_types 1508 in_6g_pwr_mode) 1509 { 1510 if (WLAN_REG_IS_24GHZ_CH_FREQ(freq)) 1511 return reg_get_2g_bonded_channel_state_for_freq(pdev, freq, 1512 sec_freq, bw); 1513 if (bw == CH_WIDTH_320MHZ) { 1514 const struct bonded_channel_freq *bonded_chan_ptr_ptr = NULL; 1515 1516 return reg_get_chan_state_for_320(pdev, freq, 0, 1517 bw, 1518 &bonded_chan_ptr_ptr, 1519 in_6g_pwr_mode, true, 1520 NO_SCHANS_PUNC); 1521 } else { 1522 struct ch_params params = {0}; 1523 1524 params.ch_width = bw; 1525 1526 return reg_get_5g_bonded_channel_state_for_pwrmode( 1527 pdev, freq, 1528 ¶ms, in_6g_pwr_mode); 1529 } 1530 } 1531 1532 qdf_export_symbol(wlan_reg_get_bonded_channel_state_for_pwrmode); 1533 #endif 1534 #endif /* CONFIG CHAN FREQ API */ 1535 wlan_reg_get_op_class_width(struct wlan_objmgr_pdev * pdev,uint8_t op_class,bool global_tbl_lookup)1536 uint16_t wlan_reg_get_op_class_width(struct wlan_objmgr_pdev *pdev, 1537 uint8_t op_class, 1538 bool global_tbl_lookup) 1539 { 1540 return reg_get_op_class_width(pdev, op_class, 1541 global_tbl_lookup); 1542 } 1543 wlan_reg_is_5ghz_op_class(const uint8_t * country,uint8_t op_class)1544 bool wlan_reg_is_5ghz_op_class(const uint8_t *country, uint8_t op_class) 1545 { 1546 return reg_is_5ghz_op_class(country, op_class); 1547 } 1548 wlan_reg_is_2ghz_op_class(const uint8_t * country,uint8_t op_class)1549 bool wlan_reg_is_2ghz_op_class(const uint8_t *country, uint8_t op_class) 1550 { 1551 return reg_is_2ghz_op_class(country, op_class); 1552 } 1553 1554 qdf_export_symbol(wlan_reg_is_2ghz_op_class); 1555 wlan_reg_is_6ghz_op_class(struct wlan_objmgr_pdev * pdev,uint8_t op_class)1556 bool wlan_reg_is_6ghz_op_class(struct wlan_objmgr_pdev *pdev, 1557 uint8_t op_class) 1558 { 1559 return reg_is_6ghz_op_class(pdev, op_class); 1560 } 1561 1562 qdf_export_symbol(wlan_reg_is_6ghz_op_class); 1563 1564 #ifdef CONFIG_REG_CLIENT wlan_reg_is_6ghz_supported(struct wlan_objmgr_psoc * psoc)1565 bool wlan_reg_is_6ghz_supported(struct wlan_objmgr_psoc *psoc) 1566 { 1567 return reg_is_6ghz_supported(psoc); 1568 } 1569 #endif 1570 1571 #ifdef HOST_OPCLASS_EXT 1572 qdf_freq_t wlan_reg_country_chan_opclass_to_freq(struct wlan_objmgr_pdev * pdev,const uint8_t country[3],uint8_t chan,uint8_t op_class,bool strict)1573 wlan_reg_country_chan_opclass_to_freq(struct wlan_objmgr_pdev *pdev, 1574 const uint8_t country[3], 1575 uint8_t chan, uint8_t op_class, 1576 bool strict) 1577 { 1578 return reg_country_chan_opclass_to_freq(pdev, country, chan, op_class, 1579 strict); 1580 } 1581 #endif 1582 wlan_reg_chan_opclass_to_freq(uint8_t chan,uint8_t op_class,bool global_tbl_lookup)1583 uint16_t wlan_reg_chan_opclass_to_freq(uint8_t chan, 1584 uint8_t op_class, 1585 bool global_tbl_lookup) 1586 { 1587 if (!chan || !op_class) 1588 return 0; 1589 1590 return reg_chan_opclass_to_freq(chan, op_class, global_tbl_lookup); 1591 } 1592 wlan_reg_compute_6g_center_freq_from_cfi(uint8_t ieee_6g_cfi)1593 qdf_freq_t wlan_reg_compute_6g_center_freq_from_cfi(uint8_t ieee_6g_cfi) 1594 { 1595 if (!ieee_6g_cfi) 1596 return 0; 1597 1598 return reg_compute_6g_center_freq_from_cfi(ieee_6g_cfi); 1599 } 1600 wlan_reg_chan_opclass_to_freq_auto(uint8_t chan,uint8_t op_class,bool global_tbl_lookup)1601 qdf_freq_t wlan_reg_chan_opclass_to_freq_auto(uint8_t chan, uint8_t op_class, 1602 bool global_tbl_lookup) 1603 { 1604 if (!chan || !op_class) 1605 return 0; 1606 1607 return reg_chan_opclass_to_freq_auto(chan, op_class, global_tbl_lookup); 1608 } 1609 1610 #ifdef CHECK_REG_PHYMODE wlan_reg_get_max_phymode(struct wlan_objmgr_pdev * pdev,enum reg_phymode phy_in,qdf_freq_t freq)1611 enum reg_phymode wlan_reg_get_max_phymode(struct wlan_objmgr_pdev *pdev, 1612 enum reg_phymode phy_in, 1613 qdf_freq_t freq) 1614 { 1615 return reg_get_max_phymode(pdev, phy_in, freq); 1616 } 1617 #endif /* CHECK_REG_PHYMODE */ 1618 1619 #ifdef CONFIG_REG_CLIENT wlan_reg_band_bitmap_to_band_info(uint32_t band_bitmap)1620 enum band_info wlan_reg_band_bitmap_to_band_info(uint32_t band_bitmap) 1621 { 1622 return reg_band_bitmap_to_band_info(band_bitmap); 1623 } 1624 1625 QDF_STATUS wlan_reg_update_tx_power_on_ctry_change(struct wlan_objmgr_pdev * pdev,uint8_t vdev_id)1626 wlan_reg_update_tx_power_on_ctry_change(struct wlan_objmgr_pdev *pdev, 1627 uint8_t vdev_id) 1628 { 1629 return reg_update_tx_power_on_ctry_change(pdev, vdev_id); 1630 } 1631 #endif 1632 1633 #if defined(CONFIG_BAND_6GHZ) wlan_reg_get_rnr_tpe_usable(struct wlan_objmgr_pdev * pdev,bool * reg_rnr_tpe_usable)1634 QDF_STATUS wlan_reg_get_rnr_tpe_usable(struct wlan_objmgr_pdev *pdev, 1635 bool *reg_rnr_tpe_usable) 1636 { 1637 return reg_get_rnr_tpe_usable(pdev, reg_rnr_tpe_usable); 1638 } 1639 wlan_reg_get_unspecified_ap_usable(struct wlan_objmgr_pdev * pdev,bool * reg_unspecified_ap_usable)1640 QDF_STATUS wlan_reg_get_unspecified_ap_usable(struct wlan_objmgr_pdev *pdev, 1641 bool *reg_unspecified_ap_usable) 1642 { 1643 return reg_get_unspecified_ap_usable(pdev, reg_unspecified_ap_usable); 1644 } 1645 1646 QDF_STATUS wlan_reg_get_cur_6g_ap_pwr_type(struct wlan_objmgr_pdev * pdev,enum reg_6g_ap_type * reg_cur_6g_ap_pwr_type)1647 wlan_reg_get_cur_6g_ap_pwr_type(struct wlan_objmgr_pdev *pdev, 1648 enum reg_6g_ap_type *reg_cur_6g_ap_pwr_type) 1649 { 1650 return reg_get_cur_6g_ap_pwr_type(pdev, reg_cur_6g_ap_pwr_type); 1651 } 1652 1653 qdf_export_symbol(wlan_reg_get_cur_6g_ap_pwr_type); 1654 1655 QDF_STATUS wlan_reg_get_cur_6g_client_type(struct wlan_objmgr_pdev * pdev,enum reg_6g_client_type * reg_cur_6g_client_mobility_type)1656 wlan_reg_get_cur_6g_client_type(struct wlan_objmgr_pdev *pdev, 1657 enum reg_6g_client_type 1658 *reg_cur_6g_client_mobility_type) 1659 { 1660 return reg_get_cur_6g_client_type(pdev, 1661 reg_cur_6g_client_mobility_type); 1662 } 1663 1664 qdf_export_symbol(wlan_reg_get_cur_6g_client_type); 1665 1666 QDF_STATUS wlan_reg_set_cur_6ghz_client_type(struct wlan_objmgr_pdev * pdev,enum reg_6g_client_type in_6ghz_client_type)1667 wlan_reg_set_cur_6ghz_client_type(struct wlan_objmgr_pdev *pdev, 1668 enum reg_6g_client_type in_6ghz_client_type) 1669 { 1670 return reg_set_cur_6ghz_client_type(pdev, in_6ghz_client_type); 1671 } 1672 1673 QDF_STATUS wlan_reg_set_6ghz_client_type_from_target(struct wlan_objmgr_pdev * pdev)1674 wlan_reg_set_6ghz_client_type_from_target(struct wlan_objmgr_pdev *pdev) 1675 { 1676 return reg_set_6ghz_client_type_from_target(pdev); 1677 } 1678 wlan_reg_is_6g_psd_power(struct wlan_objmgr_pdev * pdev)1679 bool wlan_reg_is_6g_psd_power(struct wlan_objmgr_pdev *pdev) 1680 { 1681 return reg_is_6g_psd_power(pdev); 1682 } 1683 wlan_reg_get_6g_chan_ap_power(struct wlan_objmgr_pdev * pdev,qdf_freq_t chan_freq,bool * is_psd,uint16_t * tx_power,uint16_t * eirp_psd_power)1684 QDF_STATUS wlan_reg_get_6g_chan_ap_power(struct wlan_objmgr_pdev *pdev, 1685 qdf_freq_t chan_freq, bool *is_psd, 1686 uint16_t *tx_power, 1687 uint16_t *eirp_psd_power) 1688 { 1689 return reg_get_6g_chan_ap_power(pdev, chan_freq, is_psd, 1690 tx_power, eirp_psd_power); 1691 } 1692 1693 qdf_export_symbol(wlan_reg_get_6g_chan_ap_power); 1694 1695 QDF_STATUS wlan_reg_get_client_power_for_connecting_ap(struct wlan_objmgr_pdev * pdev,enum reg_6g_ap_type ap_type,qdf_freq_t chan_freq,bool is_psd,uint16_t * tx_power,uint16_t * eirp_psd_power)1696 wlan_reg_get_client_power_for_connecting_ap(struct wlan_objmgr_pdev *pdev, 1697 enum reg_6g_ap_type ap_type, 1698 qdf_freq_t chan_freq, 1699 bool is_psd, uint16_t *tx_power, 1700 uint16_t *eirp_psd_power) 1701 { 1702 return reg_get_client_power_for_connecting_ap(pdev, ap_type, chan_freq, 1703 is_psd, tx_power, 1704 eirp_psd_power); 1705 } 1706 1707 QDF_STATUS wlan_reg_get_client_power_for_6ghz_ap(struct wlan_objmgr_pdev * pdev,enum reg_6g_client_type client_type,qdf_freq_t chan_freq,bool * is_psd,uint16_t * tx_power,uint16_t * eirp_psd_power)1708 wlan_reg_get_client_power_for_6ghz_ap(struct wlan_objmgr_pdev *pdev, 1709 enum reg_6g_client_type client_type, 1710 qdf_freq_t chan_freq, 1711 bool *is_psd, uint16_t *tx_power, 1712 uint16_t *eirp_psd_power) 1713 { 1714 return reg_get_client_power_for_6ghz_ap(pdev, client_type, chan_freq, 1715 is_psd, tx_power, 1716 eirp_psd_power); 1717 } 1718 1719 QDF_STATUS wlan_reg_set_ap_pwr_and_update_chan_list(struct wlan_objmgr_pdev * pdev,enum reg_6g_ap_type ap_pwr_type)1720 wlan_reg_set_ap_pwr_and_update_chan_list(struct wlan_objmgr_pdev *pdev, 1721 enum reg_6g_ap_type ap_pwr_type) 1722 { 1723 return reg_set_ap_pwr_and_update_chan_list(pdev, ap_pwr_type); 1724 } 1725 1726 qdf_export_symbol(wlan_reg_set_ap_pwr_and_update_chan_list); 1727 1728 uint8_t wlan_reg_get_num_rules_of_ap_pwr_type(struct wlan_objmgr_pdev * pdev,enum reg_6g_ap_type ap_pwr_type)1729 wlan_reg_get_num_rules_of_ap_pwr_type(struct wlan_objmgr_pdev *pdev, 1730 enum reg_6g_ap_type ap_pwr_type) 1731 { 1732 return reg_get_num_rules_of_ap_pwr_type(pdev, ap_pwr_type); 1733 } 1734 1735 qdf_export_symbol(wlan_reg_get_num_rules_of_ap_pwr_type); 1736 wlan_reg_get_superchan_entry(struct wlan_objmgr_pdev * pdev,enum channel_enum chan_enum,const struct super_chan_info ** p_sup_chan_entry)1737 QDF_STATUS wlan_reg_get_superchan_entry( 1738 struct wlan_objmgr_pdev *pdev, 1739 enum channel_enum chan_enum, 1740 const struct super_chan_info **p_sup_chan_entry) 1741 { 1742 return reg_get_superchan_entry(pdev, chan_enum, p_sup_chan_entry); 1743 } 1744 1745 enum supported_6g_pwr_types wlan_reg_conv_6g_ap_type_to_supported_6g_pwr_types(enum reg_6g_ap_type ap_pwr_type)1746 wlan_reg_conv_6g_ap_type_to_supported_6g_pwr_types(enum reg_6g_ap_type 1747 ap_pwr_type) 1748 { 1749 return reg_conv_6g_ap_type_to_supported_6g_pwr_types(ap_pwr_type); 1750 } 1751 1752 enum supported_6g_pwr_types wlan_reg_get_best_6g_pwr_type(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1753 wlan_reg_get_best_6g_pwr_type(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq) 1754 { 1755 return reg_get_best_6g_pwr_type(pdev, freq); 1756 } 1757 1758 enum reg_6g_ap_type wlan_reg_conv_supported_6g_pwr_type_to_ap_pwr_type(enum supported_6g_pwr_types in_6g_pwr_type)1759 wlan_reg_conv_supported_6g_pwr_type_to_ap_pwr_type(enum supported_6g_pwr_types 1760 in_6g_pwr_type) 1761 { 1762 return reg_convert_supported_6g_pwr_type_to_ap_pwr_type(in_6g_pwr_type); 1763 } 1764 #endif /* CONFIG_BAND_6GHZ */ 1765 wlan_reg_is_ext_tpc_supported(struct wlan_objmgr_psoc * psoc)1766 bool wlan_reg_is_ext_tpc_supported(struct wlan_objmgr_psoc *psoc) 1767 { 1768 return reg_is_ext_tpc_supported(psoc); 1769 } 1770 1771 #ifdef CONFIG_AFC_SUPPORT wlan_reg_is_afc_power_event_received(struct wlan_objmgr_pdev * pdev)1772 bool wlan_reg_is_afc_power_event_received(struct wlan_objmgr_pdev *pdev) 1773 { 1774 return reg_is_afc_power_event_received(pdev); 1775 } 1776 1777 qdf_export_symbol(wlan_reg_is_afc_power_event_received); 1778 wlan_reg_is_afc_done(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1779 bool wlan_reg_is_afc_done(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq) 1780 { 1781 return reg_is_afc_done(pdev, freq); 1782 } 1783 1784 qdf_export_symbol(wlan_reg_is_afc_done); 1785 wlan_reg_get_afc_req_id(struct wlan_objmgr_pdev * pdev,uint64_t * req_id)1786 QDF_STATUS wlan_reg_get_afc_req_id(struct wlan_objmgr_pdev *pdev, 1787 uint64_t *req_id) 1788 { 1789 return reg_get_afc_req_id(pdev, req_id); 1790 } 1791 1792 qdf_export_symbol(wlan_reg_get_afc_req_id); 1793 wlan_reg_is_afc_expiry_event_received(struct wlan_objmgr_pdev * pdev)1794 bool wlan_reg_is_afc_expiry_event_received(struct wlan_objmgr_pdev *pdev) 1795 { 1796 return reg_is_afc_expiry_event_received(pdev); 1797 } 1798 1799 qdf_export_symbol(wlan_reg_is_afc_expiry_event_received); 1800 wlan_reg_is_noaction_on_afc_pwr_evt(struct wlan_objmgr_pdev * pdev)1801 bool wlan_reg_is_noaction_on_afc_pwr_evt(struct wlan_objmgr_pdev *pdev) 1802 { 1803 return reg_is_noaction_on_afc_pwr_evt(pdev); 1804 } 1805 1806 QDF_STATUS wlan_reg_get_afc_dev_deploy_type(struct wlan_objmgr_pdev * pdev,enum reg_afc_dev_deploy_type * afc_dev_type)1807 wlan_reg_get_afc_dev_deploy_type(struct wlan_objmgr_pdev *pdev, 1808 enum reg_afc_dev_deploy_type *afc_dev_type) 1809 { 1810 return reg_get_afc_dev_deploy_type(pdev, afc_dev_type); 1811 } 1812 1813 qdf_export_symbol(wlan_reg_get_afc_dev_deploy_type); 1814 1815 bool wlan_reg_is_sta_connect_allowed(struct wlan_objmgr_pdev * pdev,enum reg_6g_ap_type root_ap_pwr_mode)1816 wlan_reg_is_sta_connect_allowed(struct wlan_objmgr_pdev *pdev, 1817 enum reg_6g_ap_type root_ap_pwr_mode) 1818 { 1819 return reg_is_sta_connect_allowed(pdev, root_ap_pwr_mode); 1820 } 1821 1822 qdf_export_symbol(wlan_reg_is_sta_connect_allowed); 1823 #endif /* CONFIG_AFC_SUPPORT */ 1824 wlan_reg_is_chwidth_supported(struct wlan_objmgr_pdev * pdev,enum phy_ch_width ch_width,bool * is_supported)1825 QDF_STATUS wlan_reg_is_chwidth_supported(struct wlan_objmgr_pdev *pdev, 1826 enum phy_ch_width ch_width, 1827 bool *is_supported) 1828 { 1829 return reg_is_chwidth_supported(pdev, ch_width, is_supported); 1830 } 1831 1832 qdf_export_symbol(wlan_reg_is_chwidth_supported); 1833 1834 #ifdef CONFIG_BAND_6GHZ wlan_reg_get_thresh_priority_freq(struct wlan_objmgr_pdev * pdev)1835 qdf_freq_t wlan_reg_get_thresh_priority_freq(struct wlan_objmgr_pdev *pdev) 1836 { 1837 return reg_get_thresh_priority_freq(pdev); 1838 } 1839 wlan_reg_psd_2_eirp(struct wlan_objmgr_pdev * pdev,int16_t psd,uint16_t ch_bw,int16_t * eirp)1840 QDF_STATUS wlan_reg_psd_2_eirp(struct wlan_objmgr_pdev *pdev, 1841 int16_t psd, 1842 uint16_t ch_bw, 1843 int16_t *eirp) 1844 { 1845 return reg_psd_2_eirp(pdev, psd, ch_bw, eirp); 1846 } 1847 1848 qdf_export_symbol(wlan_reg_psd_2_eirp); 1849 wlan_reg_eirp_2_psd(struct wlan_objmgr_pdev * pdev,uint16_t ch_bw,int16_t eirp,int16_t * psd)1850 QDF_STATUS wlan_reg_eirp_2_psd(struct wlan_objmgr_pdev *pdev, uint16_t ch_bw, 1851 int16_t eirp, int16_t *psd) 1852 { 1853 return reg_eirp_2_psd(pdev, ch_bw, eirp, psd); 1854 } 1855 1856 enum reg_6g_ap_type wlan_reg_get_best_pwr_mode(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,qdf_freq_t cen320,uint16_t bw,uint16_t in_punc_pattern)1857 wlan_reg_get_best_pwr_mode(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq, 1858 qdf_freq_t cen320, 1859 uint16_t bw, uint16_t in_punc_pattern) 1860 { 1861 return reg_get_best_pwr_mode(pdev, freq, cen320, bw, in_punc_pattern); 1862 } 1863 1864 qdf_export_symbol(wlan_reg_get_best_pwr_mode); 1865 wlan_reg_get_eirp_pwr(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,qdf_freq_t cen320,uint16_t bw,enum reg_6g_ap_type ap_pwr_type,uint16_t in_punc_pattern,bool is_client_list_lookup_needed,enum reg_6g_client_type client_type)1866 int8_t wlan_reg_get_eirp_pwr(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq, 1867 qdf_freq_t cen320, uint16_t bw, 1868 enum reg_6g_ap_type ap_pwr_type, 1869 uint16_t in_punc_pattern, 1870 bool is_client_list_lookup_needed, 1871 enum reg_6g_client_type client_type) 1872 { 1873 return reg_get_eirp_pwr(pdev, freq, cen320, bw, ap_pwr_type, 1874 in_punc_pattern, is_client_list_lookup_needed, 1875 client_type); 1876 } 1877 1878 qdf_export_symbol(wlan_reg_get_eirp_pwr); 1879 1880 #endif /* CONFIG_BAND_6GHZ */ 1881 wlan_reg_find_chwidth_from_bw(uint16_t bw)1882 enum phy_ch_width wlan_reg_find_chwidth_from_bw(uint16_t bw) 1883 { 1884 return reg_find_chwidth_from_bw(bw); 1885 } 1886 1887 #ifdef WLAN_FEATURE_11BE 1888 enum channel_state wlan_reg_get_chan_state_for_320(struct wlan_objmgr_pdev * pdev,uint16_t freq,qdf_freq_t center_320,enum phy_ch_width ch_width,const struct bonded_channel_freq ** bonded_chan_ptr_ptr,enum supported_6g_pwr_types in_6g_pwr_type,bool treat_nol_chan_as_disabled,uint16_t input_puncture_bitmap)1889 wlan_reg_get_chan_state_for_320(struct wlan_objmgr_pdev *pdev, 1890 uint16_t freq, 1891 qdf_freq_t center_320, 1892 enum phy_ch_width ch_width, 1893 const struct bonded_channel_freq 1894 **bonded_chan_ptr_ptr, 1895 enum supported_6g_pwr_types in_6g_pwr_type, 1896 bool treat_nol_chan_as_disabled, 1897 uint16_t input_puncture_bitmap) 1898 { 1899 return reg_get_chan_state_for_320(pdev, freq, center_320, 1900 ch_width, bonded_chan_ptr_ptr, 1901 in_6g_pwr_type, 1902 treat_nol_chan_as_disabled, 1903 input_puncture_bitmap); 1904 } 1905 #endif 1906 1907 #ifdef CONFIG_BAND_6GHZ wlan_is_sup_chan_entry_afc_done(struct wlan_objmgr_pdev * pdev,enum channel_enum chan_idx,enum supported_6g_pwr_types in_6g_pwr_mode)1908 bool wlan_is_sup_chan_entry_afc_done(struct wlan_objmgr_pdev *pdev, 1909 enum channel_enum chan_idx, 1910 enum supported_6g_pwr_types in_6g_pwr_mode) 1911 { 1912 return reg_is_sup_chan_entry_afc_done(pdev, chan_idx, in_6g_pwr_mode); 1913 } 1914 1915 qdf_export_symbol(wlan_is_sup_chan_entry_afc_done); 1916 1917 QDF_STATUS wlan_reg_display_super_chan_list(struct wlan_objmgr_pdev * pdev)1918 wlan_reg_display_super_chan_list(struct wlan_objmgr_pdev *pdev) 1919 { 1920 return reg_display_super_chan_list(pdev); 1921 } 1922 1923 #if defined(CONFIG_AFC_SUPPORT) && defined(CONFIG_BAND_6GHZ) 1924 QDF_STATUS wlan_reg_get_afc_freq_range_and_psd_limits(struct wlan_objmgr_pdev * pdev,uint8_t num_freq_obj,struct afc_freq_obj * afc_obj)1925 wlan_reg_get_afc_freq_range_and_psd_limits(struct wlan_objmgr_pdev *pdev, 1926 uint8_t num_freq_obj, 1927 struct afc_freq_obj *afc_obj) 1928 { 1929 return reg_get_afc_freq_range_and_psd_limits(pdev, num_freq_obj, 1930 afc_obj); 1931 } 1932 1933 QDF_STATUS wlan_reg_get_num_afc_freq_obj(struct wlan_objmgr_pdev * pdev,uint8_t * num_freq_obj)1934 wlan_reg_get_num_afc_freq_obj(struct wlan_objmgr_pdev *pdev, 1935 uint8_t *num_freq_obj) 1936 { 1937 return reg_get_num_afc_freq_obj(pdev, num_freq_obj); 1938 } 1939 wlan_reg_set_afc_power_event_received(struct wlan_objmgr_pdev * pdev,bool val)1940 QDF_STATUS wlan_reg_set_afc_power_event_received(struct wlan_objmgr_pdev *pdev, 1941 bool val) 1942 { 1943 return reg_set_afc_power_event_received(pdev, val); 1944 } 1945 #endif 1946 1947 #endif 1948 1949 QDF_STATUS wlan_reg_recompute_current_chan_list(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_pdev * pdev)1950 wlan_reg_recompute_current_chan_list(struct wlan_objmgr_psoc *psoc, 1951 struct wlan_objmgr_pdev *pdev) 1952 { 1953 struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj; 1954 1955 pdev_priv_obj = reg_get_pdev_obj(pdev); 1956 if (!IS_VALID_PDEV_REG_OBJ(pdev_priv_obj)) { 1957 reg_err("reg pdev priv obj is NULL"); 1958 return QDF_STATUS_E_FAILURE; 1959 } 1960 1961 reg_debug("Recomputing the current channel list"); 1962 reg_compute_pdev_current_chan_list(pdev_priv_obj); 1963 return reg_send_scheduler_msg_nb(psoc, pdev); 1964 } 1965 1966 #ifdef CONFIG_REG_CLIENT 1967 QDF_STATUS wlan_reg_modify_indoor_concurrency(struct wlan_objmgr_pdev * pdev,uint8_t vdev_id,uint32_t freq,enum phy_ch_width width,bool add)1968 wlan_reg_modify_indoor_concurrency(struct wlan_objmgr_pdev *pdev, 1969 uint8_t vdev_id, uint32_t freq, 1970 enum phy_ch_width width, bool add) 1971 { 1972 if (add) 1973 return reg_add_indoor_concurrency(pdev, vdev_id, freq, width); 1974 else 1975 return reg_remove_indoor_concurrency(pdev, vdev_id, freq); 1976 } 1977 #endif 1978 1979 void wlan_reg_register_is_chan_connected_callback(struct wlan_objmgr_psoc * psoc,void * cbk)1980 wlan_reg_register_is_chan_connected_callback(struct wlan_objmgr_psoc *psoc, 1981 void *cbk) 1982 { 1983 reg_register_is_chan_connected_callback(psoc, 1984 (reg_get_connected_chan_for_mode_callback)cbk); 1985 } 1986 1987 void wlan_reg_unregister_is_chan_connected_callback(struct wlan_objmgr_psoc * psoc,void * cbk)1988 wlan_reg_unregister_is_chan_connected_callback(struct wlan_objmgr_psoc *psoc, 1989 void *cbk) 1990 { 1991 reg_unregister_is_chan_connected_callback(psoc, 1992 (reg_get_connected_chan_for_mode_callback)cbk); 1993 } 1994 1995 qdf_freq_t wlan_reg_get_endchan_cen_from_bandstart(qdf_freq_t band_start,uint16_t bw)1996 wlan_reg_get_endchan_cen_from_bandstart(qdf_freq_t band_start, 1997 uint16_t bw) 1998 { 1999 return reg_get_endchan_cen_from_bandstart(band_start, bw); 2000 } 2001 2002 QDF_STATUS wlan_reg_get_opclass_from_map(const struct reg_dmn_op_class_map_t ** map,bool is_global_op_table_needed)2003 wlan_reg_get_opclass_from_map(const struct reg_dmn_op_class_map_t **map, 2004 bool is_global_op_table_needed) 2005 { 2006 return reg_get_opclass_from_map(map, is_global_op_table_needed); 2007 } 2008