Skip to content

Commit

Permalink
cfg80211: pass more detailed regulatory request information on reg_no…
Browse files Browse the repository at this point in the history
…tifier()

Drivers may need more information than just who set the last regulatory domain,
as such lets just pass the last regulatory_request receipt. To do this we need
to move out to headers struct regulatory_request, and enum environment_cap. While
at it lets add documentation for enum environment_cap.

Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Luis R. Rodriguez authored and John W. Linville committed Jan 29, 2009
1 parent d46e5b1 commit 716f939
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 41 deletions.
45 changes: 45 additions & 0 deletions include/net/cfg80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,51 @@ enum reg_set_by {
REGDOM_SET_BY_COUNTRY_IE,
};

/**
* enum environment_cap - Environment parsed from country IE
* @ENVIRON_ANY: indicates country IE applies to both indoor and
* outdoor operation.
* @ENVIRON_INDOOR: indicates country IE applies only to indoor operation
* @ENVIRON_OUTDOOR: indicates country IE applies only to outdoor operation
*/
enum environment_cap {
ENVIRON_ANY,
ENVIRON_INDOOR,
ENVIRON_OUTDOOR,
};

/**
* struct regulatory_request - receipt of last regulatory request
*
* @wiphy: this is set if this request's initiator is
* %REGDOM_SET_BY_COUNTRY_IE or %REGDOM_SET_BY_DRIVER. This
* can be used by the wireless core to deal with conflicts
* and potentially inform users of which devices specifically
* cased the conflicts.
* @initiator: indicates who sent this request, could be any of
* of those set in reg_set_by, %REGDOM_SET_BY_*
* @alpha2: the ISO / IEC 3166 alpha2 country code of the requested
* regulatory domain. We have a few special codes:
* 00 - World regulatory domain
* 99 - built by driver but a specific alpha2 cannot be determined
* 98 - result of an intersection between two regulatory domains
* @intersect: indicates whether the wireless core should intersect
* the requested regulatory domain with the presently set regulatory
* domain.
* @country_ie_checksum: checksum of the last processed and accepted
* country IE
* @country_ie_env: lets us know if the AP is telling us we are outdoor,
* indoor, or if it doesn't matter
*/
struct regulatory_request {
struct wiphy *wiphy;
enum reg_set_by initiator;
char alpha2[2];
bool intersect;
u32 country_ie_checksum;
enum environment_cap country_ie_env;
};

struct ieee80211_freq_range {
u32 start_freq_khz;
u32 end_freq_khz;
Expand Down
3 changes: 2 additions & 1 deletion include/net/wireless.h
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,8 @@ struct wiphy {
struct ieee80211_supported_band *bands[IEEE80211_NUM_BANDS];

/* Lets us get back the wiphy on the callback */
int (*reg_notifier)(struct wiphy *wiphy, enum reg_set_by setby);
int (*reg_notifier)(struct wiphy *wiphy,
struct regulatory_request *request);

/* fields below are read-only, assigned by cfg80211 */

Expand Down
34 changes: 1 addition & 33 deletions net/wireless/reg.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,38 +42,6 @@
#include "core.h"
#include "reg.h"

/**
* struct regulatory_request - receipt of last regulatory request
*
* @wiphy: this is set if this request's initiator is
* %REGDOM_SET_BY_COUNTRY_IE or %REGDOM_SET_BY_DRIVER. This
* can be used by the wireless core to deal with conflicts
* and potentially inform users of which devices specifically
* cased the conflicts.
* @initiator: indicates who sent this request, could be any of
* of those set in reg_set_by, %REGDOM_SET_BY_*
* @alpha2: the ISO / IEC 3166 alpha2 country code of the requested
* regulatory domain. We have a few special codes:
* 00 - World regulatory domain
* 99 - built by driver but a specific alpha2 cannot be determined
* 98 - result of an intersection between two regulatory domains
* @intersect: indicates whether the wireless core should intersect
* the requested regulatory domain with the presently set regulatory
* domain.
* @country_ie_checksum: checksum of the last processed and accepted
* country IE
* @country_ie_env: lets us know if the AP is telling us we are outdoor,
* indoor, or if it doesn't matter
*/
struct regulatory_request {
struct wiphy *wiphy;
enum reg_set_by initiator;
char alpha2[2];
bool intersect;
u32 country_ie_checksum;
enum environment_cap country_ie_env;
};

/* Receipt of information from last regulatory request */
static struct regulatory_request *last_request;

Expand Down Expand Up @@ -951,7 +919,7 @@ void wiphy_update_regulatory(struct wiphy *wiphy, enum reg_set_by setby)
handle_band(wiphy, band);
}
if (wiphy->reg_notifier)
wiphy->reg_notifier(wiphy, setby);
wiphy->reg_notifier(wiphy, last_request);
}

static void handle_channel_custom(struct wiphy *wiphy,
Expand Down
7 changes: 0 additions & 7 deletions net/wireless/reg.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,6 @@ void regulatory_exit(void);

int set_regdom(const struct ieee80211_regdomain *rd);

enum environment_cap {
ENVIRON_ANY,
ENVIRON_INDOOR,
ENVIRON_OUTDOOR,
};


/**
* __regulatory_hint - hint to the wireless core a regulatory domain
* @wiphy: if the hint comes from country information from an AP, this
Expand Down

0 comments on commit 716f939

Please sign in to comment.