Commit eccc068e8e84c8fe997115629925e0422a98e4de
Committed by
John W. Linville
1 parent
e2d75c136f
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
wireless: Save original maximum regulatory transmission power for the calucation…
… of the local maximum transmit power The local maximum transmit power is the maximum power a wireless device allowed to transmit. If Power Constraint is presented, the local maximum power equals to the maximum allowed power defined in regulatory domain minus power constraint. The maximum transmit power is maximum power a wireless device capable of transmitting, and should be used in Power Capability element (7.3.2.16 IEEE802.11 2007). The transmit power from a wireless device should not greater than the local maximum transmit power. The maximum transmit power was not calculated correctly in the current Linux wireless/mac80211 when Power Constraint is presented. Signed-off-by: Hong Wu <hong.wu@dspg.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Showing 2 changed files with 4 additions and 17 deletions Side-by-side Diff
include/net/cfg80211.h
... | ... | @@ -120,6 +120,7 @@ |
120 | 120 | * @band: band this channel belongs to. |
121 | 121 | * @max_antenna_gain: maximum antenna gain in dBi |
122 | 122 | * @max_power: maximum transmission power (in dBm) |
123 | + * @max_reg_power: maximum regulatory transmission power (in dBm) | |
123 | 124 | * @beacon_found: helper to regulatory code to indicate when a beacon |
124 | 125 | * has been found on this channel. Use regulatory_hint_found_beacon() |
125 | 126 | * to enable this, this is useful only on 5 GHz band. |
... | ... | @@ -133,6 +134,7 @@ |
133 | 134 | u32 flags; |
134 | 135 | int max_antenna_gain; |
135 | 136 | int max_power; |
137 | + int max_reg_power; | |
136 | 138 | bool beacon_found; |
137 | 139 | u32 orig_flags; |
138 | 140 | int orig_mag, orig_mpwr; |
net/wireless/reg.c
... | ... | @@ -882,23 +882,8 @@ |
882 | 882 | chan->flags = flags | bw_flags | map_regdom_flags(reg_rule->flags); |
883 | 883 | chan->max_antenna_gain = min(chan->orig_mag, |
884 | 884 | (int) MBI_TO_DBI(power_rule->max_antenna_gain)); |
885 | - if (chan->orig_mpwr) { | |
886 | - /* | |
887 | - * Devices that have their own custom regulatory domain | |
888 | - * but also use WIPHY_FLAG_STRICT_REGULATORY will follow the | |
889 | - * passed country IE power settings. | |
890 | - */ | |
891 | - if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE && | |
892 | - wiphy->flags & WIPHY_FLAG_CUSTOM_REGULATORY && | |
893 | - wiphy->flags & WIPHY_FLAG_STRICT_REGULATORY) { | |
894 | - chan->max_power = | |
895 | - MBM_TO_DBM(power_rule->max_eirp); | |
896 | - } else { | |
897 | - chan->max_power = min(chan->orig_mpwr, | |
898 | - (int) MBM_TO_DBM(power_rule->max_eirp)); | |
899 | - } | |
900 | - } else | |
901 | - chan->max_power = (int) MBM_TO_DBM(power_rule->max_eirp); | |
885 | + chan->max_reg_power = (int) MBM_TO_DBM(power_rule->max_eirp); | |
886 | + chan->max_power = min(chan->max_power, chan->max_reg_power); | |
902 | 887 | } |
903 | 888 | |
904 | 889 | static void handle_band(struct wiphy *wiphy, |