Commit eccc068e8e84c8fe997115629925e0422a98e4de

Authored by Hong Wu
Committed by John W. Linville
1 parent e2d75c136f

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;
... ... @@ -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,