wifi: rtw89: regd: judge UNII-4 according to BIOS and chip
For realtek regulatory, there are following two kinds of configurations to determine whether to allow UNII-4 band, i.e. 5.9GHz channels. 1. default setting according to whether chip support it or not 2. evaluate realtek ACPI DSM with RTW89_ACPI_DSM_FUNC_59G_EN (func. 6) If (1) is false, we won't try (2) and just disallow UNII-4. Otherwise, if (2) is not supported or returns a non-specific value, we follow the default setting either. Besides, this commit aims to add decision logic in rtw89 regulatory. Actually, driver doesn't register UNII-4 yet. That will be handled by another commit. Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20230508081211.38760-3-pkshih@realtek.com
This commit is contained in:
parent
e897b0bef3
commit
a002f98123
@ -3850,7 +3850,12 @@ static int rtw89_core_register_hw(struct rtw89_dev *rtwdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
hw->wiphy->reg_notifier = rtw89_regd_notifier;
|
||||
ret = rtw89_regd_setup(rtwdev);
|
||||
if (ret) {
|
||||
rtw89_err(rtwdev, "failed to set up regd\n");
|
||||
goto err_free_supported_band;
|
||||
}
|
||||
|
||||
hw->wiphy->sar_capa = &rtw89_sar_capa;
|
||||
|
||||
ret = ieee80211_register_hw(hw);
|
||||
|
@ -3179,6 +3179,7 @@ struct rtw89_chip_info {
|
||||
u8 support_chanctx_num;
|
||||
u8 support_bands;
|
||||
bool support_bw160;
|
||||
bool support_unii4;
|
||||
bool support_ul_tb_ctrl;
|
||||
bool hw_sec_hdr;
|
||||
u8 rf_path_num;
|
||||
@ -5044,6 +5045,7 @@ int rtw89_core_release_sta_ba_entry(struct rtw89_dev *rtwdev,
|
||||
void rtw89_vif_type_mapping(struct ieee80211_vif *vif, bool assoc);
|
||||
int rtw89_chip_info_setup(struct rtw89_dev *rtwdev);
|
||||
bool rtw89_ra_report_to_bitrate(struct rtw89_dev *rtwdev, u8 rpt_rate, u16 *bitrate);
|
||||
int rtw89_regd_setup(struct rtw89_dev *rtwdev);
|
||||
int rtw89_regd_init(struct rtw89_dev *rtwdev,
|
||||
void (*reg_notifier)(struct wiphy *wiphy, struct regulatory_request *request));
|
||||
void rtw89_regd_notifier(struct wiphy *wiphy, struct regulatory_request *request);
|
||||
|
@ -2,6 +2,7 @@
|
||||
/* Copyright(c) 2019-2020 Realtek Corporation
|
||||
*/
|
||||
|
||||
#include "acpi.h"
|
||||
#include "debug.h"
|
||||
#include "ps.h"
|
||||
|
||||
@ -282,6 +283,56 @@ do { \
|
||||
__r->txpwr_regd[RTW89_BAND_6G]); \
|
||||
} while (0)
|
||||
|
||||
static void rtw89_regd_setup_unii4(struct rtw89_dev *rtwdev,
|
||||
struct wiphy *wiphy)
|
||||
{
|
||||
const struct rtw89_chip_info *chip = rtwdev->chip;
|
||||
bool regd_allow_unii_4 = chip->support_unii4;
|
||||
int ret;
|
||||
u8 val;
|
||||
|
||||
if (!chip->support_unii4)
|
||||
goto bottom;
|
||||
|
||||
ret = rtw89_acpi_evaluate_dsm(rtwdev, RTW89_ACPI_DSM_FUNC_59G_EN, &val);
|
||||
if (ret) {
|
||||
rtw89_debug(rtwdev, RTW89_DBG_REGD,
|
||||
"acpi: cannot eval unii 4: %d\n", ret);
|
||||
goto bottom;
|
||||
}
|
||||
|
||||
rtw89_debug(rtwdev, RTW89_DBG_REGD,
|
||||
"acpi: eval if allow unii 4: %d\n", val);
|
||||
|
||||
switch (val) {
|
||||
case 0:
|
||||
regd_allow_unii_4 = false;
|
||||
break;
|
||||
case 1:
|
||||
regd_allow_unii_4 = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
bottom:
|
||||
rtw89_debug(rtwdev, RTW89_DBG_REGD, "regd: allow unii 4: %d\n",
|
||||
regd_allow_unii_4);
|
||||
}
|
||||
|
||||
int rtw89_regd_setup(struct rtw89_dev *rtwdev)
|
||||
{
|
||||
struct wiphy *wiphy = rtwdev->hw->wiphy;
|
||||
|
||||
if (!wiphy)
|
||||
return -EINVAL;
|
||||
|
||||
rtw89_regd_setup_unii4(rtwdev, wiphy);
|
||||
|
||||
wiphy->reg_notifier = rtw89_regd_notifier;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rtw89_regd_init(struct rtw89_dev *rtwdev,
|
||||
void (*reg_notifier)(struct wiphy *wiphy,
|
||||
struct regulatory_request *request))
|
||||
|
@ -123,6 +123,7 @@ const struct rtw89_chip_info rtw8851b_chip_info = {
|
||||
.support_bands = BIT(NL80211_BAND_2GHZ) |
|
||||
BIT(NL80211_BAND_5GHZ),
|
||||
.support_bw160 = false,
|
||||
.support_unii4 = true,
|
||||
.support_ul_tb_ctrl = true,
|
||||
.hw_sec_hdr = false,
|
||||
.rf_path_num = 1,
|
||||
|
@ -2105,6 +2105,7 @@ const struct rtw89_chip_info rtw8852a_chip_info = {
|
||||
.support_bands = BIT(NL80211_BAND_2GHZ) |
|
||||
BIT(NL80211_BAND_5GHZ),
|
||||
.support_bw160 = false,
|
||||
.support_unii4 = false,
|
||||
.support_ul_tb_ctrl = false,
|
||||
.hw_sec_hdr = false,
|
||||
.rf_path_num = 2,
|
||||
|
@ -2536,6 +2536,7 @@ const struct rtw89_chip_info rtw8852b_chip_info = {
|
||||
.support_bands = BIT(NL80211_BAND_2GHZ) |
|
||||
BIT(NL80211_BAND_5GHZ),
|
||||
.support_bw160 = false,
|
||||
.support_unii4 = true,
|
||||
.support_ul_tb_ctrl = true,
|
||||
.hw_sec_hdr = false,
|
||||
.rf_path_num = 2,
|
||||
|
@ -2836,6 +2836,7 @@ const struct rtw89_chip_info rtw8852c_chip_info = {
|
||||
BIT(NL80211_BAND_5GHZ) |
|
||||
BIT(NL80211_BAND_6GHZ),
|
||||
.support_bw160 = true,
|
||||
.support_unii4 = true,
|
||||
.support_ul_tb_ctrl = false,
|
||||
.hw_sec_hdr = true,
|
||||
.rf_path_num = 2,
|
||||
|
Loading…
x
Reference in New Issue
Block a user