Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
This commit is contained in:
commit
c77986c78a
29 changed files with 312 additions and 189 deletions
|
|
@ -1746,14 +1746,16 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static void iwl_mvm_mac_sched_scan_stop(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif)
|
||||
static int iwl_mvm_mac_sched_scan_stop(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif)
|
||||
{
|
||||
struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
|
||||
|
||||
mutex_lock(&mvm->mutex);
|
||||
iwl_mvm_sched_scan_stop(mvm);
|
||||
mutex_unlock(&mvm->mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int iwl_mvm_mac_set_key(struct ieee80211_hw *hw,
|
||||
|
|
|
|||
|
|
@ -411,6 +411,7 @@ struct mac80211_hwsim_data {
|
|||
|
||||
struct mac_address addresses[2];
|
||||
int channels, idx;
|
||||
bool use_chanctx;
|
||||
|
||||
struct ieee80211_channel *tmp_chan;
|
||||
struct delayed_work roc_done;
|
||||
|
|
@ -1088,7 +1089,7 @@ static void mac80211_hwsim_tx(struct ieee80211_hw *hw,
|
|||
return;
|
||||
}
|
||||
|
||||
if (data->channels == 1) {
|
||||
if (!data->use_chanctx) {
|
||||
channel = data->channel;
|
||||
} else if (txi->hw_queue == 4) {
|
||||
channel = data->tmp_chan;
|
||||
|
|
@ -1354,7 +1355,7 @@ static int mac80211_hwsim_config(struct ieee80211_hw *hw, u32 changed)
|
|||
|
||||
data->channel = conf->chandef.chan;
|
||||
|
||||
WARN_ON(data->channel && data->channels > 1);
|
||||
WARN_ON(data->channel && data->use_chanctx);
|
||||
|
||||
data->power_level = conf->power_level;
|
||||
if (!data->started || !data->beacon_int)
|
||||
|
|
@ -1940,7 +1941,8 @@ static struct ieee80211_ops mac80211_hwsim_mchan_ops;
|
|||
|
||||
static int mac80211_hwsim_create_radio(int channels, const char *reg_alpha2,
|
||||
const struct ieee80211_regdomain *regd,
|
||||
bool reg_strict, bool p2p_device)
|
||||
bool reg_strict, bool p2p_device,
|
||||
bool use_chanctx)
|
||||
{
|
||||
int err;
|
||||
u8 addr[ETH_ALEN];
|
||||
|
|
@ -1950,11 +1952,14 @@ static int mac80211_hwsim_create_radio(int channels, const char *reg_alpha2,
|
|||
const struct ieee80211_ops *ops = &mac80211_hwsim_ops;
|
||||
int idx;
|
||||
|
||||
if (WARN_ON(channels > 1 && !use_chanctx))
|
||||
return -EINVAL;
|
||||
|
||||
spin_lock_bh(&hwsim_radio_lock);
|
||||
idx = hwsim_radio_idx++;
|
||||
spin_unlock_bh(&hwsim_radio_lock);
|
||||
|
||||
if (channels > 1)
|
||||
if (use_chanctx)
|
||||
ops = &mac80211_hwsim_mchan_ops;
|
||||
hw = ieee80211_alloc_hw(sizeof(*data), ops);
|
||||
if (!hw) {
|
||||
|
|
@ -1995,20 +2000,21 @@ static int mac80211_hwsim_create_radio(int channels, const char *reg_alpha2,
|
|||
hw->wiphy->addresses = data->addresses;
|
||||
|
||||
data->channels = channels;
|
||||
data->use_chanctx = use_chanctx;
|
||||
data->idx = idx;
|
||||
|
||||
if (data->channels > 1) {
|
||||
if (data->use_chanctx) {
|
||||
hw->wiphy->max_scan_ssids = 255;
|
||||
hw->wiphy->max_scan_ie_len = IEEE80211_MAX_DATA_LEN;
|
||||
hw->wiphy->max_remain_on_channel_duration = 1000;
|
||||
/* For channels > 1 DFS is not allowed */
|
||||
hw->wiphy->n_iface_combinations = 1;
|
||||
hw->wiphy->iface_combinations = &data->if_combination;
|
||||
data->if_combination.num_different_channels = data->channels;
|
||||
if (p2p_device)
|
||||
data->if_combination = hwsim_if_comb_p2p_dev[0];
|
||||
else
|
||||
data->if_combination = hwsim_if_comb[0];
|
||||
data->if_combination.num_different_channels = data->channels;
|
||||
} else if (p2p_device) {
|
||||
hw->wiphy->iface_combinations = hwsim_if_comb_p2p_dev;
|
||||
hw->wiphy->n_iface_combinations =
|
||||
|
|
@ -2156,7 +2162,7 @@ static int mac80211_hwsim_create_radio(int channels, const char *reg_alpha2,
|
|||
debugfs_create_file("ps", 0666, data->debugfs, data, &hwsim_fops_ps);
|
||||
debugfs_create_file("group", 0666, data->debugfs, data,
|
||||
&hwsim_fops_group);
|
||||
if (data->channels == 1)
|
||||
if (!data->use_chanctx)
|
||||
debugfs_create_file("dfs_simulate_radar", 0222,
|
||||
data->debugfs,
|
||||
data, &hwsim_simulate_radar);
|
||||
|
|
@ -2423,10 +2429,16 @@ static int hwsim_create_radio_nl(struct sk_buff *msg, struct genl_info *info)
|
|||
const struct ieee80211_regdomain *regd = NULL;
|
||||
bool reg_strict = info->attrs[HWSIM_ATTR_REG_STRICT_REG];
|
||||
bool p2p_device = info->attrs[HWSIM_ATTR_SUPPORT_P2P_DEVICE];
|
||||
bool use_chanctx;
|
||||
|
||||
if (info->attrs[HWSIM_ATTR_CHANNELS])
|
||||
chans = nla_get_u32(info->attrs[HWSIM_ATTR_CHANNELS]);
|
||||
|
||||
if (info->attrs[HWSIM_ATTR_USE_CHANCTX])
|
||||
use_chanctx = true;
|
||||
else
|
||||
use_chanctx = (chans > 1);
|
||||
|
||||
if (info->attrs[HWSIM_ATTR_REG_HINT_ALPHA2])
|
||||
alpha2 = nla_data(info->attrs[HWSIM_ATTR_REG_HINT_ALPHA2]);
|
||||
|
||||
|
|
@ -2439,7 +2451,7 @@ static int hwsim_create_radio_nl(struct sk_buff *msg, struct genl_info *info)
|
|||
}
|
||||
|
||||
return mac80211_hwsim_create_radio(chans, alpha2, regd, reg_strict,
|
||||
p2p_device);
|
||||
p2p_device, use_chanctx);
|
||||
}
|
||||
|
||||
static int hwsim_destroy_radio_nl(struct sk_buff *msg, struct genl_info *info)
|
||||
|
|
@ -2658,7 +2670,8 @@ static int __init init_mac80211_hwsim(void)
|
|||
|
||||
err = mac80211_hwsim_create_radio(channels, reg_alpha2,
|
||||
regd, reg_strict,
|
||||
support_p2p_device);
|
||||
support_p2p_device,
|
||||
channels > 1);
|
||||
if (err < 0)
|
||||
goto out_free_radios;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -108,6 +108,9 @@ enum {
|
|||
* @HWSIM_ATTR_REG_CUSTOM_REG: custom regulatory domain index (u32 attribute)
|
||||
* @HWSIM_ATTR_REG_STRICT_REG: request REGULATORY_STRICT_REG (flag attribute)
|
||||
* @HWSIM_ATTR_SUPPORT_P2P_DEVICE: support P2P Device virtual interface (flag)
|
||||
* @HWSIM_ATTR_USE_CHANCTX: used with the %HWSIM_CMD_CREATE_RADIO
|
||||
* command to force use of channel contexts even when only a
|
||||
* single channel is supported
|
||||
* @__HWSIM_ATTR_MAX: enum limit
|
||||
*/
|
||||
|
||||
|
|
@ -128,6 +131,7 @@ enum {
|
|||
HWSIM_ATTR_REG_CUSTOM_REG,
|
||||
HWSIM_ATTR_REG_STRICT_REG,
|
||||
HWSIM_ATTR_SUPPORT_P2P_DEVICE,
|
||||
HWSIM_ATTR_USE_CHANCTX,
|
||||
__HWSIM_ATTR_MAX,
|
||||
};
|
||||
#define HWSIM_ATTR_MAX (__HWSIM_ATTR_MAX - 1)
|
||||
|
|
|
|||
|
|
@ -2600,8 +2600,8 @@ static int mwifiex_cfg80211_set_coalesce(struct wiphy *wiphy,
|
|||
static int
|
||||
mwifiex_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *dev,
|
||||
u8 *peer, u8 action_code, u8 dialog_token,
|
||||
u16 status_code, const u8 *extra_ies,
|
||||
size_t extra_ies_len)
|
||||
u16 status_code, u32 peer_capability,
|
||||
const u8 *extra_ies, size_t extra_ies_len)
|
||||
{
|
||||
struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
|
||||
int ret;
|
||||
|
|
|
|||
|
|
@ -3668,8 +3668,8 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static void wl1271_op_sched_scan_stop(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif)
|
||||
static int wl1271_op_sched_scan_stop(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif)
|
||||
{
|
||||
struct wl1271 *wl = hw->priv;
|
||||
struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
|
||||
|
|
@ -3691,6 +3691,8 @@ static void wl1271_op_sched_scan_stop(struct ieee80211_hw *hw,
|
|||
wl1271_ps_elp_sleep(wl);
|
||||
out:
|
||||
mutex_unlock(&wl->mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int wl1271_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue