Commit 82efa16a authored by Bing Zhao's avatar Bing Zhao Committed by John W. Linville

mwifiex: download per country tx power table to firmware

When driver gets regulatory domain change notifications or before
associates to an AP with Country IE, the txpwrlimit table stored
in device tree for that country is downloaded to firmware.

The txpwrlimit downloading will happen only at the first time
when the alpha2 country code is changed. World regulatory domain
"00" notification doesn't trigger the downloading. This behavior
is same as domain_info command.
Signed-off-by: default avatarBing Zhao <bzhao@marvell.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 699b027b
...@@ -538,6 +538,8 @@ static void mwifiex_reg_notifier(struct wiphy *wiphy, ...@@ -538,6 +538,8 @@ static void mwifiex_reg_notifier(struct wiphy *wiphy,
struct regulatory_request *request) struct regulatory_request *request)
{ {
struct mwifiex_adapter *adapter = mwifiex_cfg80211_get_adapter(wiphy); struct mwifiex_adapter *adapter = mwifiex_cfg80211_get_adapter(wiphy);
struct mwifiex_private *priv = mwifiex_get_priv(adapter,
MWIFIEX_BSS_ROLE_ANY);
wiphy_dbg(wiphy, "info: cfg80211 regulatory domain callback for %c%c\n", wiphy_dbg(wiphy, "info: cfg80211 regulatory domain callback for %c%c\n",
request->alpha2[0], request->alpha2[1]); request->alpha2[0], request->alpha2[1]);
...@@ -561,6 +563,14 @@ static void mwifiex_reg_notifier(struct wiphy *wiphy, ...@@ -561,6 +563,14 @@ static void mwifiex_reg_notifier(struct wiphy *wiphy,
memcpy(adapter->country_code, request->alpha2, memcpy(adapter->country_code, request->alpha2,
sizeof(request->alpha2)); sizeof(request->alpha2));
mwifiex_send_domain_info_cmd_fw(wiphy); mwifiex_send_domain_info_cmd_fw(wiphy);
if (adapter->dt_node) {
char txpwr[] = {"marvell,00_txpwrlimit"};
memcpy(&txpwr[8], adapter->country_code, 2);
mwifiex_dnld_dt_cfgdata(priv, adapter->dt_node,
txpwr);
}
} }
} }
......
...@@ -1153,6 +1153,8 @@ void mwifiex_uap_del_sta_data(struct mwifiex_private *priv, ...@@ -1153,6 +1153,8 @@ void mwifiex_uap_del_sta_data(struct mwifiex_private *priv,
void mwifiex_11h_process_join(struct mwifiex_private *priv, u8 **buffer, void mwifiex_11h_process_join(struct mwifiex_private *priv, u8 **buffer,
struct mwifiex_bssdescriptor *bss_desc); struct mwifiex_bssdescriptor *bss_desc);
int mwifiex_11h_handle_event_chanswann(struct mwifiex_private *priv); int mwifiex_11h_handle_event_chanswann(struct mwifiex_private *priv);
int mwifiex_dnld_dt_cfgdata(struct mwifiex_private *priv,
struct device_node *node, const char *prefix);
extern const struct ethtool_ops mwifiex_ethtool_ops; extern const struct ethtool_ops mwifiex_ethtool_ops;
......
...@@ -1156,7 +1156,7 @@ static u32 mwifiex_parse_cal_cfg(u8 *src, size_t len, u8 *dst) ...@@ -1156,7 +1156,7 @@ static u32 mwifiex_parse_cal_cfg(u8 *src, size_t len, u8 *dst)
return d - dst; return d - dst;
} }
static int mwifiex_dnld_dt_cfgdata(struct mwifiex_private *priv, int mwifiex_dnld_dt_cfgdata(struct mwifiex_private *priv,
struct device_node *node, const char *prefix) struct device_node *node, const char *prefix)
{ {
#ifdef CONFIG_OF #ifdef CONFIG_OF
......
...@@ -234,6 +234,13 @@ static int mwifiex_process_country_ie(struct mwifiex_private *priv, ...@@ -234,6 +234,13 @@ static int mwifiex_process_country_ie(struct mwifiex_private *priv,
return -1; return -1;
} }
if (priv->adapter->dt_node) {
char txpwr[] = {"marvell,00_txpwrlimit"};
memcpy(&txpwr[8], priv->adapter->country_code, 2);
mwifiex_dnld_dt_cfgdata(priv, priv->adapter->dt_node, txpwr);
}
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment