提交 7db90f4a 编写于 作者: L Luis R. Rodriguez 提交者: John W. Linville

cfg80211: move enum reg_set_by to nl80211.h

We do this so we can later inform userspace who set the
regulatory domain and provide details of the request.
Signed-off-by: NLuis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 0fee54ca
...@@ -1670,7 +1670,7 @@ int ath_attach(u16 devid, struct ath_softc *sc) ...@@ -1670,7 +1670,7 @@ int ath_attach(u16 devid, struct ath_softc *sc)
} }
wiphy_apply_custom_regulatory(hw->wiphy, regd); wiphy_apply_custom_regulatory(hw->wiphy, regd);
ath9k_reg_apply_radar_flags(hw->wiphy); ath9k_reg_apply_radar_flags(hw->wiphy);
ath9k_reg_apply_world_flags(hw->wiphy, REGDOM_SET_BY_DRIVER); ath9k_reg_apply_world_flags(hw->wiphy, NL80211_REGDOM_SET_BY_DRIVER);
INIT_WORK(&sc->chan_work, ath9k_wiphy_chan_work); INIT_WORK(&sc->chan_work, ath9k_wiphy_chan_work);
INIT_DELAYED_WORK(&sc->wiphy_work, ath9k_wiphy_work); INIT_DELAYED_WORK(&sc->wiphy_work, ath9k_wiphy_work);
......
...@@ -168,8 +168,9 @@ static bool ath9k_is_radar_freq(u16 center_freq) ...@@ -168,8 +168,9 @@ static bool ath9k_is_radar_freq(u16 center_freq)
* received a beacon on a channel we can enable active scan and * received a beacon on a channel we can enable active scan and
* adhoc (or beaconing). * adhoc (or beaconing).
*/ */
static void ath9k_reg_apply_beaconing_flags(struct wiphy *wiphy, static void ath9k_reg_apply_beaconing_flags(
enum reg_set_by setby) struct wiphy *wiphy,
enum nl80211_reg_initiator initiator)
{ {
enum ieee80211_band band; enum ieee80211_band band;
struct ieee80211_supported_band *sband; struct ieee80211_supported_band *sband;
...@@ -194,7 +195,7 @@ static void ath9k_reg_apply_beaconing_flags(struct wiphy *wiphy, ...@@ -194,7 +195,7 @@ static void ath9k_reg_apply_beaconing_flags(struct wiphy *wiphy,
(ch->flags & IEEE80211_CHAN_RADAR)) (ch->flags & IEEE80211_CHAN_RADAR))
continue; continue;
if (setby == REGDOM_SET_BY_COUNTRY_IE) { if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) {
r = freq_reg_info(wiphy, ch->center_freq, r = freq_reg_info(wiphy, ch->center_freq,
&bandwidth, &reg_rule); &bandwidth, &reg_rule);
if (r) if (r)
...@@ -226,8 +227,9 @@ static void ath9k_reg_apply_beaconing_flags(struct wiphy *wiphy, ...@@ -226,8 +227,9 @@ static void ath9k_reg_apply_beaconing_flags(struct wiphy *wiphy,
} }
/* Allows active scan scan on Ch 12 and 13 */ /* Allows active scan scan on Ch 12 and 13 */
static void ath9k_reg_apply_active_scan_flags(struct wiphy *wiphy, static void ath9k_reg_apply_active_scan_flags(
enum reg_set_by setby) struct wiphy *wiphy,
enum nl80211_reg_initiator initiator)
{ {
struct ieee80211_supported_band *sband; struct ieee80211_supported_band *sband;
struct ieee80211_channel *ch; struct ieee80211_channel *ch;
...@@ -241,7 +243,7 @@ static void ath9k_reg_apply_active_scan_flags(struct wiphy *wiphy, ...@@ -241,7 +243,7 @@ static void ath9k_reg_apply_active_scan_flags(struct wiphy *wiphy,
* If no country IE has been received always enable active scan * If no country IE has been received always enable active scan
* on these channels. This is only done for specific regulatory SKUs * on these channels. This is only done for specific regulatory SKUs
*/ */
if (setby != REGDOM_SET_BY_COUNTRY_IE) { if (initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE) {
ch = &sband->channels[11]; /* CH 12 */ ch = &sband->channels[11]; /* CH 12 */
if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN) if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN; ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
...@@ -308,7 +310,8 @@ void ath9k_reg_apply_radar_flags(struct wiphy *wiphy) ...@@ -308,7 +310,8 @@ void ath9k_reg_apply_radar_flags(struct wiphy *wiphy)
} }
} }
void ath9k_reg_apply_world_flags(struct wiphy *wiphy, enum reg_set_by setby) void ath9k_reg_apply_world_flags(struct wiphy *wiphy,
enum nl80211_reg_initiator initiator)
{ {
struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy); struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
struct ath_wiphy *aphy = hw->priv; struct ath_wiphy *aphy = hw->priv;
...@@ -320,11 +323,11 @@ void ath9k_reg_apply_world_flags(struct wiphy *wiphy, enum reg_set_by setby) ...@@ -320,11 +323,11 @@ void ath9k_reg_apply_world_flags(struct wiphy *wiphy, enum reg_set_by setby)
case 0x63: case 0x63:
case 0x66: case 0x66:
case 0x67: case 0x67:
ath9k_reg_apply_beaconing_flags(wiphy, setby); ath9k_reg_apply_beaconing_flags(wiphy, initiator);
break; break;
case 0x68: case 0x68:
ath9k_reg_apply_beaconing_flags(wiphy, setby); ath9k_reg_apply_beaconing_flags(wiphy, initiator);
ath9k_reg_apply_active_scan_flags(wiphy, setby); ath9k_reg_apply_active_scan_flags(wiphy, initiator);
break; break;
} }
return; return;
...@@ -340,11 +343,11 @@ int ath9k_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request) ...@@ -340,11 +343,11 @@ int ath9k_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request)
ath9k_reg_apply_radar_flags(wiphy); ath9k_reg_apply_radar_flags(wiphy);
switch (request->initiator) { switch (request->initiator) {
case REGDOM_SET_BY_DRIVER: case NL80211_REGDOM_SET_BY_DRIVER:
case REGDOM_SET_BY_CORE: case NL80211_REGDOM_SET_BY_CORE:
case REGDOM_SET_BY_USER: case NL80211_REGDOM_SET_BY_USER:
break; break;
case REGDOM_SET_BY_COUNTRY_IE: case NL80211_REGDOM_SET_BY_COUNTRY_IE:
if (ath9k_is_world_regd(sc->sc_ah)) if (ath9k_is_world_regd(sc->sc_ah))
ath9k_reg_apply_world_flags(wiphy, request->initiator); ath9k_reg_apply_world_flags(wiphy, request->initiator);
break; break;
......
...@@ -236,7 +236,8 @@ enum CountryCode { ...@@ -236,7 +236,8 @@ enum CountryCode {
bool ath9k_is_world_regd(struct ath_hw *ah); bool ath9k_is_world_regd(struct ath_hw *ah);
const struct ieee80211_regdomain *ath9k_world_regdomain(struct ath_hw *ah); const struct ieee80211_regdomain *ath9k_world_regdomain(struct ath_hw *ah);
const struct ieee80211_regdomain *ath9k_default_world_regdomain(void); const struct ieee80211_regdomain *ath9k_default_world_regdomain(void);
void ath9k_reg_apply_world_flags(struct wiphy *wiphy, enum reg_set_by setby); void ath9k_reg_apply_world_flags(struct wiphy *wiphy,
enum nl80211_reg_initiator initiator);
void ath9k_reg_apply_radar_flags(struct wiphy *wiphy); void ath9k_reg_apply_radar_flags(struct wiphy *wiphy);
int ath9k_regd_init(struct ath_hw *ah); int ath9k_regd_init(struct ath_hw *ah);
bool ath9k_regd_is_eeprom_valid(struct ath_hw *ah); bool ath9k_regd_is_eeprom_valid(struct ath_hw *ah);
......
...@@ -672,6 +672,25 @@ enum nl80211_bitrate_attr { ...@@ -672,6 +672,25 @@ enum nl80211_bitrate_attr {
NL80211_BITRATE_ATTR_MAX = __NL80211_BITRATE_ATTR_AFTER_LAST - 1 NL80211_BITRATE_ATTR_MAX = __NL80211_BITRATE_ATTR_AFTER_LAST - 1
}; };
/**
* enum nl80211_initiator - Indicates the initiator of a reg domain request
* @NL80211_REGDOM_SET_BY_CORE: Core queried CRDA for a dynamic world
* regulatory domain.
* @NL80211_REGDOM_SET_BY_USER: User asked the wireless core to set the
* regulatory domain.
* @NL80211_REGDOM_SET_BY_DRIVER: a wireless drivers has hinted to the
* wireless core it thinks its knows the regulatory domain we should be in.
* @NL80211_REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an
* 802.11 country information element with regulatory information it
* thinks we should consider.
*/
enum nl80211_reg_initiator {
NL80211_REGDOM_SET_BY_CORE,
NL80211_REGDOM_SET_BY_USER,
NL80211_REGDOM_SET_BY_DRIVER,
NL80211_REGDOM_SET_BY_COUNTRY_IE,
};
/** /**
* enum nl80211_reg_rule_attr - regulatory rule attributes * enum nl80211_reg_rule_attr - regulatory rule attributes
* @NL80211_ATTR_REG_RULE_FLAGS: a set of flags which specify additional * @NL80211_ATTR_REG_RULE_FLAGS: a set of flags which specify additional
......
...@@ -348,28 +348,10 @@ struct bss_parameters { ...@@ -348,28 +348,10 @@ struct bss_parameters {
u8 basic_rates_len; u8 basic_rates_len;
}; };
/**
* enum reg_set_by - Indicates who is trying to set the regulatory domain
* @REGDOM_SET_BY_CORE: Core queried CRDA for a dynamic world regulatory domain.
* @REGDOM_SET_BY_USER: User asked the wireless core to set the
* regulatory domain.
* @REGDOM_SET_BY_DRIVER: a wireless drivers has hinted to the wireless core
* it thinks its knows the regulatory domain we should be in.
* @REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an 802.11 country
* information element with regulatory information it thinks we
* should consider.
*/
enum reg_set_by {
REGDOM_SET_BY_CORE,
REGDOM_SET_BY_USER,
REGDOM_SET_BY_DRIVER,
REGDOM_SET_BY_COUNTRY_IE,
};
/** /**
* enum environment_cap - Environment parsed from country IE * enum environment_cap - Environment parsed from country IE
* @ENVIRON_ANY: indicates country IE applies to both indoor and * @ENVIRON_ANY: indicates country IE applies to both indoor and
* outdoor operation. * outdoor operation.
* @ENVIRON_INDOOR: indicates country IE applies only to indoor operation * @ENVIRON_INDOOR: indicates country IE applies only to indoor operation
* @ENVIRON_OUTDOOR: indicates country IE applies only to outdoor operation * @ENVIRON_OUTDOOR: indicates country IE applies only to outdoor operation
*/ */
...@@ -388,7 +370,7 @@ enum environment_cap { ...@@ -388,7 +370,7 @@ enum environment_cap {
* and potentially inform users of which devices specifically * and potentially inform users of which devices specifically
* cased the conflicts. * cased the conflicts.
* @initiator: indicates who sent this request, could be any of * @initiator: indicates who sent this request, could be any of
* of those set in reg_set_by, %REGDOM_SET_BY_* * of those set in nl80211_reg_initiator (%NL80211_REGDOM_SET_BY_*)
* @alpha2: the ISO / IEC 3166 alpha2 country code of the requested * @alpha2: the ISO / IEC 3166 alpha2 country code of the requested
* regulatory domain. We have a few special codes: * regulatory domain. We have a few special codes:
* 00 - World regulatory domain * 00 - World regulatory domain
...@@ -405,7 +387,7 @@ enum environment_cap { ...@@ -405,7 +387,7 @@ enum environment_cap {
*/ */
struct regulatory_request { struct regulatory_request {
int wiphy_idx; int wiphy_idx;
enum reg_set_by initiator; enum nl80211_reg_initiator initiator;
char alpha2[2]; char alpha2[2];
bool intersect; bool intersect;
u32 country_ie_checksum; u32 country_ie_checksum;
......
...@@ -350,7 +350,7 @@ int wiphy_register(struct wiphy *wiphy) ...@@ -350,7 +350,7 @@ int wiphy_register(struct wiphy *wiphy)
mutex_lock(&cfg80211_mutex); mutex_lock(&cfg80211_mutex);
/* set up regulatory info */ /* set up regulatory info */
wiphy_update_regulatory(wiphy, REGDOM_SET_BY_CORE); wiphy_update_regulatory(wiphy, NL80211_REGDOM_SET_BY_CORE);
res = device_add(&drv->wiphy.dev); res = device_add(&drv->wiphy.dev);
if (res) if (res)
......
...@@ -136,7 +136,8 @@ extern int cfg80211_dev_rename(struct cfg80211_registered_device *drv, ...@@ -136,7 +136,8 @@ extern int cfg80211_dev_rename(struct cfg80211_registered_device *drv,
char *newname); char *newname);
void ieee80211_set_bitrate_flags(struct wiphy *wiphy); void ieee80211_set_bitrate_flags(struct wiphy *wiphy);
void wiphy_update_regulatory(struct wiphy *wiphy, enum reg_set_by setby); void wiphy_update_regulatory(struct wiphy *wiphy,
enum nl80211_reg_initiator setby);
void cfg80211_bss_expire(struct cfg80211_registered_device *dev); void cfg80211_bss_expire(struct cfg80211_registered_device *dev);
void cfg80211_bss_age(struct cfg80211_registered_device *dev, void cfg80211_bss_age(struct cfg80211_registered_device *dev,
......
...@@ -857,8 +857,8 @@ static int freq_reg_info_regd(struct wiphy *wiphy, ...@@ -857,8 +857,8 @@ static int freq_reg_info_regd(struct wiphy *wiphy,
* Follow the driver's regulatory domain, if present, unless a country * Follow the driver's regulatory domain, if present, unless a country
* IE has been processed or a user wants to help complaince further * IE has been processed or a user wants to help complaince further
*/ */
if (last_request->initiator != REGDOM_SET_BY_COUNTRY_IE && if (last_request->initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE &&
last_request->initiator != REGDOM_SET_BY_USER && last_request->initiator != NL80211_REGDOM_SET_BY_USER &&
wiphy->regd) wiphy->regd)
regd = wiphy->regd; regd = wiphy->regd;
...@@ -943,7 +943,8 @@ static void handle_channel(struct wiphy *wiphy, enum ieee80211_band band, ...@@ -943,7 +943,8 @@ static void handle_channel(struct wiphy *wiphy, enum ieee80211_band band,
* http://tinyurl.com/11d-clarification * http://tinyurl.com/11d-clarification
*/ */
if (r == -ERANGE && if (r == -ERANGE &&
last_request->initiator == REGDOM_SET_BY_COUNTRY_IE) { last_request->initiator ==
NL80211_REGDOM_SET_BY_COUNTRY_IE) {
#ifdef CONFIG_CFG80211_REG_DEBUG #ifdef CONFIG_CFG80211_REG_DEBUG
printk(KERN_DEBUG "cfg80211: Leaving channel %d MHz " printk(KERN_DEBUG "cfg80211: Leaving channel %d MHz "
"intact on %s - no rule found in band on " "intact on %s - no rule found in band on "
...@@ -956,7 +957,8 @@ static void handle_channel(struct wiphy *wiphy, enum ieee80211_band band, ...@@ -956,7 +957,8 @@ static void handle_channel(struct wiphy *wiphy, enum ieee80211_band band,
* for the band so we respect its band definitions * for the band so we respect its band definitions
*/ */
#ifdef CONFIG_CFG80211_REG_DEBUG #ifdef CONFIG_CFG80211_REG_DEBUG
if (last_request->initiator == REGDOM_SET_BY_COUNTRY_IE) if (last_request->initiator ==
NL80211_REGDOM_SET_BY_COUNTRY_IE)
printk(KERN_DEBUG "cfg80211: Disabling " printk(KERN_DEBUG "cfg80211: Disabling "
"channel %d MHz on %s due to " "channel %d MHz on %s due to "
"Country IE\n", "Country IE\n",
...@@ -970,7 +972,7 @@ static void handle_channel(struct wiphy *wiphy, enum ieee80211_band band, ...@@ -970,7 +972,7 @@ static void handle_channel(struct wiphy *wiphy, enum ieee80211_band band,
power_rule = &reg_rule->power_rule; power_rule = &reg_rule->power_rule;
if (last_request->initiator == REGDOM_SET_BY_DRIVER && if (last_request->initiator == NL80211_REGDOM_SET_BY_DRIVER &&
request_wiphy && request_wiphy == wiphy && request_wiphy && request_wiphy == wiphy &&
request_wiphy->strict_regulatory) { request_wiphy->strict_regulatory) {
/* /*
...@@ -1011,11 +1013,12 @@ static void handle_band(struct wiphy *wiphy, enum ieee80211_band band) ...@@ -1011,11 +1013,12 @@ static void handle_band(struct wiphy *wiphy, enum ieee80211_band band)
handle_channel(wiphy, band, i); handle_channel(wiphy, band, i);
} }
static bool ignore_reg_update(struct wiphy *wiphy, enum reg_set_by setby) static bool ignore_reg_update(struct wiphy *wiphy,
enum nl80211_reg_initiator initiator)
{ {
if (!last_request) if (!last_request)
return true; return true;
if (setby == REGDOM_SET_BY_CORE && if (initiator == NL80211_REGDOM_SET_BY_CORE &&
wiphy->custom_regulatory) wiphy->custom_regulatory)
return true; return true;
/* /*
...@@ -1028,12 +1031,12 @@ static bool ignore_reg_update(struct wiphy *wiphy, enum reg_set_by setby) ...@@ -1028,12 +1031,12 @@ static bool ignore_reg_update(struct wiphy *wiphy, enum reg_set_by setby)
return false; return false;
} }
static void update_all_wiphy_regulatory(enum reg_set_by setby) static void update_all_wiphy_regulatory(enum nl80211_reg_initiator initiator)
{ {
struct cfg80211_registered_device *drv; struct cfg80211_registered_device *drv;
list_for_each_entry(drv, &cfg80211_drv_list, list) list_for_each_entry(drv, &cfg80211_drv_list, list)
wiphy_update_regulatory(&drv->wiphy, setby); wiphy_update_regulatory(&drv->wiphy, initiator);
} }
static void handle_reg_beacon(struct wiphy *wiphy, static void handle_reg_beacon(struct wiphy *wiphy,
...@@ -1124,7 +1127,7 @@ static bool reg_is_world_roaming(struct wiphy *wiphy) ...@@ -1124,7 +1127,7 @@ static bool reg_is_world_roaming(struct wiphy *wiphy)
if (is_world_regdom(cfg80211_regdomain->alpha2) || if (is_world_regdom(cfg80211_regdomain->alpha2) ||
(wiphy->regd && is_world_regdom(wiphy->regd->alpha2))) (wiphy->regd && is_world_regdom(wiphy->regd->alpha2)))
return true; return true;
if (last_request->initiator != REGDOM_SET_BY_COUNTRY_IE && if (last_request->initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE &&
wiphy->custom_regulatory) wiphy->custom_regulatory)
return true; return true;
return false; return false;
...@@ -1138,11 +1141,12 @@ static void reg_process_beacons(struct wiphy *wiphy) ...@@ -1138,11 +1141,12 @@ static void reg_process_beacons(struct wiphy *wiphy)
wiphy_update_beacon_reg(wiphy); wiphy_update_beacon_reg(wiphy);
} }
void wiphy_update_regulatory(struct wiphy *wiphy, enum reg_set_by setby) void wiphy_update_regulatory(struct wiphy *wiphy,
enum nl80211_reg_initiator initiator)
{ {
enum ieee80211_band band; enum ieee80211_band band;
if (ignore_reg_update(wiphy, setby)) if (ignore_reg_update(wiphy, initiator))
goto out; goto out;
for (band = 0; band < IEEE80211_NUM_BANDS; band++) { for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
if (wiphy->bands[band]) if (wiphy->bands[band])
...@@ -1255,15 +1259,16 @@ static int ignore_request(struct wiphy *wiphy, ...@@ -1255,15 +1259,16 @@ static int ignore_request(struct wiphy *wiphy,
return 0; return 0;
switch (pending_request->initiator) { switch (pending_request->initiator) {
case REGDOM_SET_BY_CORE: case NL80211_REGDOM_SET_BY_CORE:
return -EINVAL; return -EINVAL;
case REGDOM_SET_BY_COUNTRY_IE: case NL80211_REGDOM_SET_BY_COUNTRY_IE:
last_wiphy = wiphy_idx_to_wiphy(last_request->wiphy_idx); last_wiphy = wiphy_idx_to_wiphy(last_request->wiphy_idx);
if (unlikely(!is_an_alpha2(pending_request->alpha2))) if (unlikely(!is_an_alpha2(pending_request->alpha2)))
return -EINVAL; return -EINVAL;
if (last_request->initiator == REGDOM_SET_BY_COUNTRY_IE) { if (last_request->initiator ==
NL80211_REGDOM_SET_BY_COUNTRY_IE) {
if (last_wiphy != wiphy) { if (last_wiphy != wiphy) {
/* /*
* Two cards with two APs claiming different * Two cards with two APs claiming different
...@@ -1284,8 +1289,8 @@ static int ignore_request(struct wiphy *wiphy, ...@@ -1284,8 +1289,8 @@ static int ignore_request(struct wiphy *wiphy,
return -EALREADY; return -EALREADY;
} }
return REG_INTERSECT; return REG_INTERSECT;
case REGDOM_SET_BY_DRIVER: case NL80211_REGDOM_SET_BY_DRIVER:
if (last_request->initiator == REGDOM_SET_BY_CORE) { if (last_request->initiator == NL80211_REGDOM_SET_BY_CORE) {
if (is_old_static_regdom(cfg80211_regdomain)) if (is_old_static_regdom(cfg80211_regdomain))
return 0; return 0;
if (regdom_changes(pending_request->alpha2)) if (regdom_changes(pending_request->alpha2))
...@@ -1298,28 +1303,28 @@ static int ignore_request(struct wiphy *wiphy, ...@@ -1298,28 +1303,28 @@ static int ignore_request(struct wiphy *wiphy,
* back in or if you add a new device for which the previously * back in or if you add a new device for which the previously
* loaded card also agrees on the regulatory domain. * loaded card also agrees on the regulatory domain.
*/ */
if (last_request->initiator == REGDOM_SET_BY_DRIVER && if (last_request->initiator == NL80211_REGDOM_SET_BY_DRIVER &&
!regdom_changes(pending_request->alpha2)) !regdom_changes(pending_request->alpha2))
return -EALREADY; return -EALREADY;
return REG_INTERSECT; return REG_INTERSECT;
case REGDOM_SET_BY_USER: case NL80211_REGDOM_SET_BY_USER:
if (last_request->initiator == REGDOM_SET_BY_COUNTRY_IE) if (last_request->initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE)
return REG_INTERSECT; return REG_INTERSECT;
/* /*
* If the user knows better the user should set the regdom * If the user knows better the user should set the regdom
* to their country before the IE is picked up * to their country before the IE is picked up
*/ */
if (last_request->initiator == REGDOM_SET_BY_USER && if (last_request->initiator == NL80211_REGDOM_SET_BY_USER &&
last_request->intersect) last_request->intersect)
return -EOPNOTSUPP; return -EOPNOTSUPP;
/* /*
* Process user requests only after previous user/driver/core * Process user requests only after previous user/driver/core
* requests have been processed * requests have been processed
*/ */
if (last_request->initiator == REGDOM_SET_BY_CORE || if (last_request->initiator == NL80211_REGDOM_SET_BY_CORE ||
last_request->initiator == REGDOM_SET_BY_DRIVER || last_request->initiator == NL80211_REGDOM_SET_BY_DRIVER ||
last_request->initiator == REGDOM_SET_BY_USER) { last_request->initiator == NL80211_REGDOM_SET_BY_USER) {
if (regdom_changes(last_request->alpha2)) if (regdom_changes(last_request->alpha2))
return -EAGAIN; return -EAGAIN;
} }
...@@ -1359,7 +1364,8 @@ static int __regulatory_hint(struct wiphy *wiphy, ...@@ -1359,7 +1364,8 @@ static int __regulatory_hint(struct wiphy *wiphy,
r = ignore_request(wiphy, pending_request); r = ignore_request(wiphy, pending_request);
if (r == REG_INTERSECT) { if (r == REG_INTERSECT) {
if (pending_request->initiator == REGDOM_SET_BY_DRIVER) { if (pending_request->initiator ==
NL80211_REGDOM_SET_BY_DRIVER) {
r = reg_copy_regd(&wiphy->regd, cfg80211_regdomain); r = reg_copy_regd(&wiphy->regd, cfg80211_regdomain);
if (r) { if (r) {
kfree(pending_request); kfree(pending_request);
...@@ -1374,7 +1380,8 @@ static int __regulatory_hint(struct wiphy *wiphy, ...@@ -1374,7 +1380,8 @@ static int __regulatory_hint(struct wiphy *wiphy,
* wiphy * wiphy
*/ */
if (r == -EALREADY && if (r == -EALREADY &&
pending_request->initiator == REGDOM_SET_BY_DRIVER) { pending_request->initiator ==
NL80211_REGDOM_SET_BY_DRIVER) {
r = reg_copy_regd(&wiphy->regd, cfg80211_regdomain); r = reg_copy_regd(&wiphy->regd, cfg80211_regdomain);
if (r) { if (r) {
kfree(pending_request); kfree(pending_request);
...@@ -1425,7 +1432,7 @@ static void reg_process_hint(struct regulatory_request *reg_request) ...@@ -1425,7 +1432,7 @@ static void reg_process_hint(struct regulatory_request *reg_request)
if (wiphy_idx_valid(reg_request->wiphy_idx)) if (wiphy_idx_valid(reg_request->wiphy_idx))
wiphy = wiphy_idx_to_wiphy(reg_request->wiphy_idx); wiphy = wiphy_idx_to_wiphy(reg_request->wiphy_idx);
if (reg_request->initiator == REGDOM_SET_BY_DRIVER && if (reg_request->initiator == NL80211_REGDOM_SET_BY_DRIVER &&
!wiphy) { !wiphy) {
kfree(reg_request); kfree(reg_request);
goto out; goto out;
...@@ -1439,7 +1446,7 @@ static void reg_process_hint(struct regulatory_request *reg_request) ...@@ -1439,7 +1446,7 @@ static void reg_process_hint(struct regulatory_request *reg_request)
mutex_unlock(&cfg80211_mutex); mutex_unlock(&cfg80211_mutex);
} }
/* Processes regulatory hints, this is all the REGDOM_SET_BY_* */ /* Processes regulatory hints, this is all the NL80211_REGDOM_SET_BY_* */
static void reg_process_pending_hints(void) static void reg_process_pending_hints(void)
{ {
struct regulatory_request *reg_request; struct regulatory_request *reg_request;
...@@ -1523,7 +1530,7 @@ static int regulatory_hint_core(const char *alpha2) ...@@ -1523,7 +1530,7 @@ static int regulatory_hint_core(const char *alpha2)
request->alpha2[0] = alpha2[0]; request->alpha2[0] = alpha2[0];
request->alpha2[1] = alpha2[1]; request->alpha2[1] = alpha2[1];
request->initiator = REGDOM_SET_BY_CORE; request->initiator = NL80211_REGDOM_SET_BY_CORE;
queue_regulatory_request(request); queue_regulatory_request(request);
...@@ -1544,7 +1551,7 @@ int regulatory_hint_user(const char *alpha2) ...@@ -1544,7 +1551,7 @@ int regulatory_hint_user(const char *alpha2)
request->wiphy_idx = WIPHY_IDX_STALE; request->wiphy_idx = WIPHY_IDX_STALE;
request->alpha2[0] = alpha2[0]; request->alpha2[0] = alpha2[0];
request->alpha2[1] = alpha2[1]; request->alpha2[1] = alpha2[1];
request->initiator = REGDOM_SET_BY_USER, request->initiator = NL80211_REGDOM_SET_BY_USER,
queue_regulatory_request(request); queue_regulatory_request(request);
...@@ -1570,7 +1577,7 @@ int regulatory_hint(struct wiphy *wiphy, const char *alpha2) ...@@ -1570,7 +1577,7 @@ int regulatory_hint(struct wiphy *wiphy, const char *alpha2)
request->alpha2[0] = alpha2[0]; request->alpha2[0] = alpha2[0];
request->alpha2[1] = alpha2[1]; request->alpha2[1] = alpha2[1];
request->initiator = REGDOM_SET_BY_DRIVER; request->initiator = NL80211_REGDOM_SET_BY_DRIVER;
queue_regulatory_request(request); queue_regulatory_request(request);
...@@ -1719,7 +1726,7 @@ void regulatory_hint_11d(struct wiphy *wiphy, ...@@ -1719,7 +1726,7 @@ void regulatory_hint_11d(struct wiphy *wiphy,
request->wiphy_idx = get_wiphy_idx(wiphy); request->wiphy_idx = get_wiphy_idx(wiphy);
request->alpha2[0] = rd->alpha2[0]; request->alpha2[0] = rd->alpha2[0];
request->alpha2[1] = rd->alpha2[1]; request->alpha2[1] = rd->alpha2[1];
request->initiator = REGDOM_SET_BY_COUNTRY_IE; request->initiator = NL80211_REGDOM_SET_BY_COUNTRY_IE;
request->country_ie_checksum = checksum; request->country_ie_checksum = checksum;
request->country_ie_env = env; request->country_ie_env = env;
...@@ -1827,7 +1834,8 @@ static void print_regdomain(const struct ieee80211_regdomain *rd) ...@@ -1827,7 +1834,8 @@ static void print_regdomain(const struct ieee80211_regdomain *rd)
if (is_intersected_alpha2(rd->alpha2)) { if (is_intersected_alpha2(rd->alpha2)) {
if (last_request->initiator == REGDOM_SET_BY_COUNTRY_IE) { if (last_request->initiator ==
NL80211_REGDOM_SET_BY_COUNTRY_IE) {
struct cfg80211_registered_device *drv; struct cfg80211_registered_device *drv;
drv = cfg80211_drv_by_wiphy_idx( drv = cfg80211_drv_by_wiphy_idx(
last_request->wiphy_idx); last_request->wiphy_idx);
...@@ -1919,7 +1927,7 @@ static int __set_regdom(const struct ieee80211_regdomain *rd) ...@@ -1919,7 +1927,7 @@ static int __set_regdom(const struct ieee80211_regdomain *rd)
* rd is non static (it means CRDA was present and was used last) * rd is non static (it means CRDA was present and was used last)
* and the pending request came in from a country IE * and the pending request came in from a country IE
*/ */
if (last_request->initiator != REGDOM_SET_BY_COUNTRY_IE) { if (last_request->initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE) {
/* /*
* If someone else asked us to change the rd lets only bother * If someone else asked us to change the rd lets only bother
* checking if the alpha2 changes if CRDA was already called * checking if the alpha2 changes if CRDA was already called
...@@ -1951,7 +1959,7 @@ static int __set_regdom(const struct ieee80211_regdomain *rd) ...@@ -1951,7 +1959,7 @@ static int __set_regdom(const struct ieee80211_regdomain *rd)
if (!last_request->intersect) { if (!last_request->intersect) {
int r; int r;
if (last_request->initiator != REGDOM_SET_BY_DRIVER) { if (last_request->initiator != NL80211_REGDOM_SET_BY_DRIVER) {
reset_regdomains(); reset_regdomains();
cfg80211_regdomain = rd; cfg80211_regdomain = rd;
return 0; return 0;
...@@ -1975,7 +1983,7 @@ static int __set_regdom(const struct ieee80211_regdomain *rd) ...@@ -1975,7 +1983,7 @@ static int __set_regdom(const struct ieee80211_regdomain *rd)
/* Intersection requires a bit more work */ /* Intersection requires a bit more work */
if (last_request->initiator != REGDOM_SET_BY_COUNTRY_IE) { if (last_request->initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE) {
intersected_rd = regdom_intersect(rd, cfg80211_regdomain); intersected_rd = regdom_intersect(rd, cfg80211_regdomain);
if (!intersected_rd) if (!intersected_rd)
...@@ -1986,7 +1994,7 @@ static int __set_regdom(const struct ieee80211_regdomain *rd) ...@@ -1986,7 +1994,7 @@ static int __set_regdom(const struct ieee80211_regdomain *rd)
* However if a driver requested this specific regulatory * However if a driver requested this specific regulatory
* domain we keep it for its private use * domain we keep it for its private use
*/ */
if (last_request->initiator == REGDOM_SET_BY_DRIVER) if (last_request->initiator == NL80211_REGDOM_SET_BY_DRIVER)
request_wiphy->regd = rd; request_wiphy->regd = rd;
else else
kfree(rd); kfree(rd);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册