Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
This commit is contained in:
@@ -91,9 +91,8 @@ enum ieee80211_band {
|
||||
* Channel flags set by the regulatory control code.
|
||||
*
|
||||
* @IEEE80211_CHAN_DISABLED: This channel is disabled.
|
||||
* @IEEE80211_CHAN_PASSIVE_SCAN: Only passive scanning is permitted
|
||||
* on this channel.
|
||||
* @IEEE80211_CHAN_NO_IBSS: IBSS is not allowed on this channel.
|
||||
* @IEEE80211_CHAN_NO_IR: do not initiate radiation, this includes
|
||||
* sending probe requests or beaconing.
|
||||
* @IEEE80211_CHAN_RADAR: Radar detection is required on this channel.
|
||||
* @IEEE80211_CHAN_NO_HT40PLUS: extension channel above this channel
|
||||
* is not permitted.
|
||||
@@ -113,8 +112,8 @@ enum ieee80211_band {
|
||||
*/
|
||||
enum ieee80211_channel_flags {
|
||||
IEEE80211_CHAN_DISABLED = 1<<0,
|
||||
IEEE80211_CHAN_PASSIVE_SCAN = 1<<1,
|
||||
IEEE80211_CHAN_NO_IBSS = 1<<2,
|
||||
IEEE80211_CHAN_NO_IR = 1<<1,
|
||||
/* hole at 1<<2 */
|
||||
IEEE80211_CHAN_RADAR = 1<<3,
|
||||
IEEE80211_CHAN_NO_HT40PLUS = 1<<4,
|
||||
IEEE80211_CHAN_NO_HT40MINUS = 1<<5,
|
||||
@@ -1944,6 +1943,29 @@ struct cfg80211_update_ft_ies_params {
|
||||
size_t ie_len;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct cfg80211_mgmt_tx_params - mgmt tx parameters
|
||||
*
|
||||
* This structure provides information needed to transmit a mgmt frame
|
||||
*
|
||||
* @chan: channel to use
|
||||
* @offchan: indicates wether off channel operation is required
|
||||
* @wait: duration for ROC
|
||||
* @buf: buffer to transmit
|
||||
* @len: buffer length
|
||||
* @no_cck: don't use cck rates for this frame
|
||||
* @dont_wait_for_ack: tells the low level not to wait for an ack
|
||||
*/
|
||||
struct cfg80211_mgmt_tx_params {
|
||||
struct ieee80211_channel *chan;
|
||||
bool offchan;
|
||||
unsigned int wait;
|
||||
const u8 *buf;
|
||||
size_t len;
|
||||
bool no_cck;
|
||||
bool dont_wait_for_ack;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct cfg80211_ops - backend description for wireless configuration
|
||||
*
|
||||
@@ -2342,9 +2364,8 @@ struct cfg80211_ops {
|
||||
u64 cookie);
|
||||
|
||||
int (*mgmt_tx)(struct wiphy *wiphy, struct wireless_dev *wdev,
|
||||
struct ieee80211_channel *chan, bool offchan,
|
||||
unsigned int wait, const u8 *buf, size_t len,
|
||||
bool no_cck, bool dont_wait_for_ack, u64 *cookie);
|
||||
struct cfg80211_mgmt_tx_params *params,
|
||||
u64 *cookie);
|
||||
int (*mgmt_tx_cancel_wait)(struct wiphy *wiphy,
|
||||
struct wireless_dev *wdev,
|
||||
u64 cookie);
|
||||
@@ -2438,27 +2459,6 @@ struct cfg80211_ops {
|
||||
/**
|
||||
* enum wiphy_flags - wiphy capability flags
|
||||
*
|
||||
* @WIPHY_FLAG_CUSTOM_REGULATORY: tells us the driver for this device
|
||||
* has its own custom regulatory domain and cannot identify the
|
||||
* ISO / IEC 3166 alpha2 it belongs to. When this is enabled
|
||||
* we will disregard the first regulatory hint (when the
|
||||
* initiator is %REGDOM_SET_BY_CORE).
|
||||
* @WIPHY_FLAG_STRICT_REGULATORY: tells us the driver for this device will
|
||||
* ignore regulatory domain settings until it gets its own regulatory
|
||||
* domain via its regulatory_hint() unless the regulatory hint is
|
||||
* from a country IE. After its gets its own regulatory domain it will
|
||||
* only allow further regulatory domain settings to further enhance
|
||||
* compliance. For example if channel 13 and 14 are disabled by this
|
||||
* regulatory domain no user regulatory domain can enable these channels
|
||||
* at a later time. This can be used for devices which do not have
|
||||
* calibration information guaranteed for frequencies or settings
|
||||
* outside of its regulatory domain. If used in combination with
|
||||
* WIPHY_FLAG_CUSTOM_REGULATORY the inspected country IE power settings
|
||||
* will be followed.
|
||||
* @WIPHY_FLAG_DISABLE_BEACON_HINTS: enable this if your driver needs to ensure
|
||||
* that passive scan flags and beaconing flags may not be lifted by
|
||||
* cfg80211 due to regulatory beacon hints. For more information on beacon
|
||||
* hints read the documenation for regulatory_hint_found_beacon()
|
||||
* @WIPHY_FLAG_NETNS_OK: if not set, do not allow changing the netns of this
|
||||
* wiphy at all
|
||||
* @WIPHY_FLAG_PS_ON_BY_DEFAULT: if set to true, powersave will be enabled
|
||||
@@ -2497,9 +2497,9 @@ struct cfg80211_ops {
|
||||
* beaconing mode (AP, IBSS, Mesh, ...).
|
||||
*/
|
||||
enum wiphy_flags {
|
||||
WIPHY_FLAG_CUSTOM_REGULATORY = BIT(0),
|
||||
WIPHY_FLAG_STRICT_REGULATORY = BIT(1),
|
||||
WIPHY_FLAG_DISABLE_BEACON_HINTS = BIT(2),
|
||||
/* use hole at 0 */
|
||||
/* use hole at 1 */
|
||||
/* use hole at 2 */
|
||||
WIPHY_FLAG_NETNS_OK = BIT(3),
|
||||
WIPHY_FLAG_PS_ON_BY_DEFAULT = BIT(4),
|
||||
WIPHY_FLAG_4ADDR_AP = BIT(5),
|
||||
@@ -2721,6 +2721,8 @@ struct wiphy_coalesce_support {
|
||||
* @software_iftypes: bitmask of software interface types, these are not
|
||||
* subject to any restrictions since they are purely managed in SW.
|
||||
* @flags: wiphy flags, see &enum wiphy_flags
|
||||
* @regulatory_flags: wiphy regulatory flags, see
|
||||
* &enum ieee80211_regulatory_flags
|
||||
* @features: features advertised to nl80211, see &enum nl80211_feature_flags.
|
||||
* @bss_priv_size: each BSS struct has private data allocated with it,
|
||||
* this variable determines its size
|
||||
@@ -2809,7 +2811,7 @@ struct wiphy {
|
||||
|
||||
u16 max_acl_mac_addrs;
|
||||
|
||||
u32 flags, features;
|
||||
u32 flags, regulatory_flags, features;
|
||||
|
||||
u32 ap_sme_capa;
|
||||
|
||||
@@ -3472,6 +3474,9 @@ int regulatory_hint(struct wiphy *wiphy, const char *alpha2);
|
||||
* custom regulatory domain will be trusted completely and as such previous
|
||||
* default channel settings will be disregarded. If no rule is found for a
|
||||
* channel on the regulatory domain the channel will be disabled.
|
||||
* Drivers using this for a wiphy should also set the wiphy flag
|
||||
* WIPHY_FLAG_CUSTOM_REGULATORY or cfg80211 will set it for the wiphy
|
||||
* that called this helper.
|
||||
*/
|
||||
void wiphy_apply_custom_regulatory(struct wiphy *wiphy,
|
||||
const struct ieee80211_regdomain *regd);
|
||||
@@ -4146,6 +4151,7 @@ void cfg80211_radar_event(struct wiphy *wiphy,
|
||||
/**
|
||||
* cfg80211_cac_event - Channel availability check (CAC) event
|
||||
* @netdev: network device
|
||||
* @chandef: chandef for the current channel
|
||||
* @event: type of event
|
||||
* @gfp: context flags
|
||||
*
|
||||
@@ -4154,6 +4160,7 @@ void cfg80211_radar_event(struct wiphy *wiphy,
|
||||
* also by full-MAC drivers.
|
||||
*/
|
||||
void cfg80211_cac_event(struct net_device *netdev,
|
||||
const struct cfg80211_chan_def *chandef,
|
||||
enum nl80211_radar_event event, gfp_t gfp);
|
||||
|
||||
|
||||
@@ -4279,7 +4286,8 @@ bool cfg80211_reg_can_beacon(struct wiphy *wiphy,
|
||||
* @dev: the device which switched channels
|
||||
* @chandef: the new channel definition
|
||||
*
|
||||
* Acquires wdev_lock, so must only be called from sleepable driver context!
|
||||
* Caller must acquire wdev_lock, therefore must only be called from sleepable
|
||||
* driver context!
|
||||
*/
|
||||
void cfg80211_ch_switch_notify(struct net_device *dev,
|
||||
struct cfg80211_chan_def *chandef);
|
||||
|
@@ -154,12 +154,14 @@ struct ieee80211_low_level_stats {
|
||||
* @IEEE80211_CHANCTX_CHANGE_RADAR: radar detection flag changed
|
||||
* @IEEE80211_CHANCTX_CHANGE_CHANNEL: switched to another operating channel,
|
||||
* this is used only with channel switching with CSA
|
||||
* @IEEE80211_CHANCTX_CHANGE_MIN_WIDTH: The min required channel width changed
|
||||
*/
|
||||
enum ieee80211_chanctx_change {
|
||||
IEEE80211_CHANCTX_CHANGE_WIDTH = BIT(0),
|
||||
IEEE80211_CHANCTX_CHANGE_RX_CHAINS = BIT(1),
|
||||
IEEE80211_CHANCTX_CHANGE_RADAR = BIT(2),
|
||||
IEEE80211_CHANCTX_CHANGE_CHANNEL = BIT(3),
|
||||
IEEE80211_CHANCTX_CHANGE_MIN_WIDTH = BIT(4),
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -169,6 +171,7 @@ enum ieee80211_chanctx_change {
|
||||
* that contains it is visible in mac80211 only.
|
||||
*
|
||||
* @def: the channel definition
|
||||
* @min_def: the minimum channel definition currently required.
|
||||
* @rx_chains_static: The number of RX chains that must always be
|
||||
* active on the channel to receive MIMO transmissions
|
||||
* @rx_chains_dynamic: The number of RX chains that must be enabled
|
||||
@@ -180,6 +183,7 @@ enum ieee80211_chanctx_change {
|
||||
*/
|
||||
struct ieee80211_chanctx_conf {
|
||||
struct cfg80211_chan_def def;
|
||||
struct cfg80211_chan_def min_def;
|
||||
|
||||
u8 rx_chains_static, rx_chains_dynamic;
|
||||
|
||||
@@ -1228,6 +1232,36 @@ struct ieee80211_key_conf {
|
||||
u8 key[0];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ieee80211_cipher_scheme - cipher scheme
|
||||
*
|
||||
* This structure contains a cipher scheme information defining
|
||||
* the secure packet crypto handling.
|
||||
*
|
||||
* @cipher: a cipher suite selector
|
||||
* @iftype: a cipher iftype bit mask indicating an allowed cipher usage
|
||||
* @hdr_len: a length of a security header used the cipher
|
||||
* @pn_len: a length of a packet number in the security header
|
||||
* @pn_off: an offset of pn from the beginning of the security header
|
||||
* @key_idx_off: an offset of key index byte in the security header
|
||||
* @key_idx_mask: a bit mask of key_idx bits
|
||||
* @key_idx_shift: a bit shift needed to get key_idx
|
||||
* key_idx value calculation:
|
||||
* (sec_header_base[key_idx_off] & key_idx_mask) >> key_idx_shift
|
||||
* @mic_len: a mic length in bytes
|
||||
*/
|
||||
struct ieee80211_cipher_scheme {
|
||||
u32 cipher;
|
||||
u16 iftype;
|
||||
u8 hdr_len;
|
||||
u8 pn_len;
|
||||
u8 pn_off;
|
||||
u8 key_idx_off;
|
||||
u8 key_idx_mask;
|
||||
u8 key_idx_shift;
|
||||
u8 mic_len;
|
||||
};
|
||||
|
||||
/**
|
||||
* enum set_key_cmd - key command
|
||||
*
|
||||
@@ -1636,6 +1670,10 @@ enum ieee80211_hw_flags {
|
||||
* @uapsd_max_sp_len: maximum number of total buffered frames the WMM AP may
|
||||
* deliver to a WMM STA during any Service Period triggered by the WMM STA.
|
||||
* Use IEEE80211_WMM_IE_STA_QOSINFO_SP_* for correct values.
|
||||
*
|
||||
* @n_cipher_schemes: a size of an array of cipher schemes definitions.
|
||||
* @cipher_schemes: a pointer to an array of cipher scheme definitions
|
||||
* supported by HW.
|
||||
*/
|
||||
struct ieee80211_hw {
|
||||
struct ieee80211_conf conf;
|
||||
@@ -1663,6 +1701,8 @@ struct ieee80211_hw {
|
||||
netdev_features_t netdev_features;
|
||||
u8 uapsd_queues;
|
||||
u8 uapsd_max_sp_len;
|
||||
u8 n_cipher_schemes;
|
||||
const struct ieee80211_cipher_scheme *cipher_schemes;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -38,17 +38,17 @@ enum environment_cap {
|
||||
*
|
||||
* @rcu_head: RCU head struct used to free the request
|
||||
* @wiphy_idx: 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.
|
||||
* %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 nl80211_reg_initiator (%NL80211_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
|
||||
* 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
|
||||
* 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
|
||||
* 97 - regulatory domain has not yet been configured
|
||||
* @dfs_region: If CRDA responded with a regulatory domain that requires
|
||||
* DFS master operation on a known DFS region (NL80211_DFS_*),
|
||||
@@ -59,8 +59,8 @@ enum environment_cap {
|
||||
* of hint passed. This could be any of the %NL80211_USER_REG_HINT_*
|
||||
* types.
|
||||
* @intersect: indicates whether the wireless core should intersect
|
||||
* the requested regulatory domain with the presently set regulatory
|
||||
* domain.
|
||||
* the requested regulatory domain with the presently set regulatory
|
||||
* domain.
|
||||
* @processed: indicates whether or not this requests has already been
|
||||
* processed. When the last request is processed it means that the
|
||||
* currently regulatory domain set on cfg80211 is updated from
|
||||
@@ -68,9 +68,9 @@ enum environment_cap {
|
||||
* the last request is not yet processed we must yield until it
|
||||
* is processed before processing any new requests.
|
||||
* @country_ie_checksum: checksum of the last processed and accepted
|
||||
* country IE
|
||||
* country IE
|
||||
* @country_ie_env: lets us know if the AP is telling us we are outdoor,
|
||||
* indoor, or if it doesn't matter
|
||||
* indoor, or if it doesn't matter
|
||||
* @list: used to insert into the reg_requests_list linked list
|
||||
*/
|
||||
struct regulatory_request {
|
||||
@@ -79,13 +79,63 @@ struct regulatory_request {
|
||||
enum nl80211_reg_initiator initiator;
|
||||
enum nl80211_user_reg_hint_type user_reg_hint_type;
|
||||
char alpha2[2];
|
||||
u8 dfs_region;
|
||||
enum nl80211_dfs_regions dfs_region;
|
||||
bool intersect;
|
||||
bool processed;
|
||||
enum environment_cap country_ie_env;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
/**
|
||||
* enum ieee80211_regulatory_flags - device regulatory flags
|
||||
*
|
||||
* @REGULATORY_CUSTOM_REG: tells us the driver for this device
|
||||
* has its own custom regulatory domain and cannot identify the
|
||||
* ISO / IEC 3166 alpha2 it belongs to. When this is enabled
|
||||
* we will disregard the first regulatory hint (when the
|
||||
* initiator is %REGDOM_SET_BY_CORE). Drivers that use
|
||||
* wiphy_apply_custom_regulatory() should have this flag set
|
||||
* or the regulatory core will set it for the wiphy.
|
||||
* @REGULATORY_STRICT_REG: tells us that the wiphy for this device
|
||||
* has regulatory domain that it wishes to be considered as the
|
||||
* superset for regulatory rules. After this device gets its regulatory
|
||||
* domain programmed further regulatory hints shall only be considered
|
||||
* for this device to enhance regulatory compliance, forcing the
|
||||
* device to only possibly use subsets of the original regulatory
|
||||
* rules. For example if channel 13 and 14 are disabled by this
|
||||
* device's regulatory domain no user specified regulatory hint which
|
||||
* has these channels enabled would enable them for this wiphy,
|
||||
* the device's original regulatory domain will be trusted as the
|
||||
* base. You can program the superset of regulatory rules for this
|
||||
* wiphy with regulatory_hint() for cards programmed with an
|
||||
* ISO3166-alpha2 country code. wiphys that use regulatory_hint()
|
||||
* will have their wiphy->regd programmed once the regulatory
|
||||
* domain is set, and all other regulatory hints will be ignored
|
||||
* until their own regulatory domain gets programmed.
|
||||
* @REGULATORY_DISABLE_BEACON_HINTS: enable this if your driver needs to
|
||||
* ensure that passive scan flags and beaconing flags may not be lifted by
|
||||
* cfg80211 due to regulatory beacon hints. For more information on beacon
|
||||
* hints read the documenation for regulatory_hint_found_beacon()
|
||||
* @REGULATORY_COUNTRY_IE_FOLLOW_POWER: for devices that have a preference
|
||||
* that even though they may have programmed their own custom power
|
||||
* setting prior to wiphy registration, they want to ensure their channel
|
||||
* power settings are updated for this connection with the power settings
|
||||
* derived from the regulatory domain. The regulatory domain used will be
|
||||
* based on the ISO3166-alpha2 from country IE provided through
|
||||
* regulatory_hint_country_ie()
|
||||
* @REGULATORY_COUNTRY_IE_IGNORE: for devices that have a preference to ignore
|
||||
* all country IE information processed by the regulatory core. This will
|
||||
* override %REGULATORY_COUNTRY_IE_FOLLOW_POWER as all country IEs will
|
||||
* be ignored.
|
||||
*/
|
||||
enum ieee80211_regulatory_flags {
|
||||
REGULATORY_CUSTOM_REG = BIT(0),
|
||||
REGULATORY_STRICT_REG = BIT(1),
|
||||
REGULATORY_DISABLE_BEACON_HINTS = BIT(2),
|
||||
REGULATORY_COUNTRY_IE_FOLLOW_POWER = BIT(3),
|
||||
REGULATORY_COUNTRY_IE_IGNORE = BIT(4),
|
||||
};
|
||||
|
||||
struct ieee80211_freq_range {
|
||||
u32 start_freq_khz;
|
||||
u32 end_freq_khz;
|
||||
@@ -107,7 +157,7 @@ struct ieee80211_regdomain {
|
||||
struct rcu_head rcu_head;
|
||||
u32 n_reg_rules;
|
||||
char alpha2[2];
|
||||
u8 dfs_region;
|
||||
enum nl80211_dfs_regions dfs_region;
|
||||
struct ieee80211_reg_rule reg_rules[];
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user