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

mwifiex: send regulatory domain info to firmware only if alpha2 changed

On cfg80211 regulatory domain change, drivers gets alpha2 country
code or "00" in driver's notification handler.

In most cases, the pattern will be US, 00, US, 00, US, 00, US, ...
There is no need to send domain info to firmware in case of "00" or
with the same alpha2 country code.
Signed-off-by: default avatarBing Zhao <bzhao@marvell.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 935d00cc
...@@ -542,19 +542,26 @@ static void mwifiex_reg_notifier(struct wiphy *wiphy, ...@@ -542,19 +542,26 @@ static void mwifiex_reg_notifier(struct wiphy *wiphy,
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]);
memcpy(adapter->country_code, request->alpha2, sizeof(request->alpha2));
switch (request->initiator) { switch (request->initiator) {
case NL80211_REGDOM_SET_BY_DRIVER: case NL80211_REGDOM_SET_BY_DRIVER:
case NL80211_REGDOM_SET_BY_CORE: case NL80211_REGDOM_SET_BY_CORE:
case NL80211_REGDOM_SET_BY_USER: case NL80211_REGDOM_SET_BY_USER:
break;
/* Todo: apply driver specific changes in channel flags based
on the request initiator if necessary. */
case NL80211_REGDOM_SET_BY_COUNTRY_IE: case NL80211_REGDOM_SET_BY_COUNTRY_IE:
break; break;
default:
wiphy_err(wiphy, "unknown regdom initiator: %d\n",
request->initiator);
return;
} }
/* Don't send world or same regdom info to firmware */
if (strncmp(request->alpha2, "00", 2) &&
strncmp(request->alpha2, adapter->country_code,
sizeof(request->alpha2))) {
memcpy(adapter->country_code, request->alpha2,
sizeof(request->alpha2));
mwifiex_send_domain_info_cmd_fw(wiphy); mwifiex_send_domain_info_cmd_fw(wiphy);
}
} }
/* /*
......
...@@ -205,6 +205,14 @@ static int mwifiex_process_country_ie(struct mwifiex_private *priv, ...@@ -205,6 +205,14 @@ static int mwifiex_process_country_ie(struct mwifiex_private *priv,
return 0; return 0;
} }
if (!strncmp(priv->adapter->country_code, &country_ie[2], 2)) {
rcu_read_unlock();
wiphy_dbg(priv->wdev->wiphy,
"11D: skip setting domain info in FW\n");
return 0;
}
memcpy(priv->adapter->country_code, &country_ie[2], 2);
domain_info->country_code[0] = country_ie[2]; domain_info->country_code[0] = country_ie[2];
domain_info->country_code[1] = country_ie[3]; domain_info->country_code[1] = country_ie[3];
domain_info->country_code[2] = ' '; domain_info->country_code[2] = ' ';
......
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