reg.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. /* SPDX-License-Identifier: BSD-3-Clause-Clear */
  2. /*
  3. * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #ifndef ATH12K_REG_H
  7. #define ATH12K_REG_H
  8. #include <linux/kernel.h>
  9. #include <net/regulatory.h>
  10. struct ath12k_base;
  11. struct ath12k;
  12. #define ATH12K_REG_UPDATE_TIMEOUT_HZ (3 * HZ)
  13. #define ATH12K_2GHZ_MAX_FREQUENCY 2495
  14. #define ATH12K_5GHZ_MAX_FREQUENCY 5920
  15. /* DFS regdomains supported by Firmware */
  16. enum ath12k_dfs_region {
  17. ATH12K_DFS_REG_UNSET,
  18. ATH12K_DFS_REG_FCC,
  19. ATH12K_DFS_REG_ETSI,
  20. ATH12K_DFS_REG_MKK,
  21. ATH12K_DFS_REG_CN,
  22. ATH12K_DFS_REG_KR,
  23. ATH12K_DFS_REG_MKK_N,
  24. ATH12K_DFS_REG_UNDEF,
  25. };
  26. enum ath12k_reg_cc_code {
  27. REG_SET_CC_STATUS_PASS = 0,
  28. REG_CURRENT_ALPHA2_NOT_FOUND = 1,
  29. REG_INIT_ALPHA2_NOT_FOUND = 2,
  30. REG_SET_CC_CHANGE_NOT_ALLOWED = 3,
  31. REG_SET_CC_STATUS_NO_MEMORY = 4,
  32. REG_SET_CC_STATUS_FAIL = 5,
  33. };
  34. struct ath12k_reg_rule {
  35. u16 start_freq;
  36. u16 end_freq;
  37. u16 max_bw;
  38. u8 reg_power;
  39. u8 ant_gain;
  40. u16 flags;
  41. bool psd_flag;
  42. u16 psd_eirp;
  43. };
  44. struct ath12k_reg_info {
  45. enum ath12k_reg_cc_code status_code;
  46. u8 num_phy;
  47. u8 phy_id;
  48. u16 reg_dmn_pair;
  49. u16 ctry_code;
  50. u8 alpha2[REG_ALPHA2_LEN + 1];
  51. u32 dfs_region;
  52. u32 phybitmap;
  53. bool is_ext_reg_event;
  54. u32 min_bw_2g;
  55. u32 max_bw_2g;
  56. u32 min_bw_5g;
  57. u32 max_bw_5g;
  58. u32 num_2g_reg_rules;
  59. u32 num_5g_reg_rules;
  60. struct ath12k_reg_rule *reg_rules_2g_ptr;
  61. struct ath12k_reg_rule *reg_rules_5g_ptr;
  62. enum wmi_reg_6g_client_type client_type;
  63. bool rnr_tpe_usable;
  64. bool unspecified_ap_usable;
  65. /* TODO: All 6G related info can be stored only for required
  66. * combination instead of all types, to optimize memory usage.
  67. */
  68. u8 domain_code_6g_ap[WMI_REG_CURRENT_MAX_AP_TYPE];
  69. u8 domain_code_6g_client[WMI_REG_CURRENT_MAX_AP_TYPE][WMI_REG_MAX_CLIENT_TYPE];
  70. u32 domain_code_6g_super_id;
  71. u32 min_bw_6g_ap[WMI_REG_CURRENT_MAX_AP_TYPE];
  72. u32 max_bw_6g_ap[WMI_REG_CURRENT_MAX_AP_TYPE];
  73. u32 min_bw_6g_client[WMI_REG_CURRENT_MAX_AP_TYPE][WMI_REG_MAX_CLIENT_TYPE];
  74. u32 max_bw_6g_client[WMI_REG_CURRENT_MAX_AP_TYPE][WMI_REG_MAX_CLIENT_TYPE];
  75. u32 num_6g_reg_rules_ap[WMI_REG_CURRENT_MAX_AP_TYPE];
  76. u32 num_6g_reg_rules_cl[WMI_REG_CURRENT_MAX_AP_TYPE][WMI_REG_MAX_CLIENT_TYPE];
  77. struct ath12k_reg_rule *reg_rules_6g_ap_ptr[WMI_REG_CURRENT_MAX_AP_TYPE];
  78. struct ath12k_reg_rule *reg_rules_6g_client_ptr
  79. [WMI_REG_CURRENT_MAX_AP_TYPE][WMI_REG_MAX_CLIENT_TYPE];
  80. };
  81. /* Phy bitmaps */
  82. enum ath12k_reg_phy_bitmap {
  83. ATH12K_REG_PHY_BITMAP_NO11AX = BIT(5),
  84. ATH12K_REG_PHY_BITMAP_NO11BE = BIT(6),
  85. };
  86. enum ath12k_reg_status {
  87. ATH12K_REG_STATUS_VALID,
  88. ATH12K_REG_STATUS_DROP,
  89. ATH12K_REG_STATUS_FALLBACK,
  90. };
  91. void ath12k_reg_init(struct ieee80211_hw *hw);
  92. void ath12k_reg_free(struct ath12k_base *ab);
  93. void ath12k_regd_update_work(struct work_struct *work);
  94. struct ieee80211_regdomain *ath12k_reg_build_regd(struct ath12k_base *ab,
  95. struct ath12k_reg_info *reg_info,
  96. enum wmi_vdev_type vdev_type,
  97. enum ieee80211_ap_reg_power power_type);
  98. int ath12k_regd_update(struct ath12k *ar, bool init);
  99. int ath12k_reg_update_chan_list(struct ath12k *ar, bool wait);
  100. void ath12k_reg_reset_reg_info(struct ath12k_reg_info *reg_info);
  101. int ath12k_reg_handle_chan_list(struct ath12k_base *ab,
  102. struct ath12k_reg_info *reg_info,
  103. enum wmi_vdev_type vdev_type,
  104. enum ieee80211_ap_reg_power power_type);
  105. void ath12k_regd_update_chan_list_work(struct work_struct *work);
  106. enum wmi_reg_6g_ap_type
  107. ath12k_reg_ap_pwr_convert(enum ieee80211_ap_reg_power power_type);
  108. enum ath12k_reg_status ath12k_reg_validate_reg_info(struct ath12k_base *ab,
  109. struct ath12k_reg_info *reg_info);
  110. #endif