mirror of https://gitee.com/openkylin/linux.git
Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next
This commit is contained in:
commit
9ffddb1a93
|
@ -269,7 +269,7 @@ void iwl_scan_offchannel_skb_status(struct iwl_priv *priv);
|
||||||
#define IWL_ACTIVE_QUIET_TIME cpu_to_le16(10) /* msec */
|
#define IWL_ACTIVE_QUIET_TIME cpu_to_le16(10) /* msec */
|
||||||
#define IWL_PLCP_QUIET_THRESH cpu_to_le16(1) /* packets */
|
#define IWL_PLCP_QUIET_THRESH cpu_to_le16(1) /* packets */
|
||||||
|
|
||||||
#define IWL_SCAN_CHECK_WATCHDOG (HZ * 7)
|
#define IWL_SCAN_CHECK_WATCHDOG (HZ * 15)
|
||||||
|
|
||||||
|
|
||||||
/* bt coex */
|
/* bt coex */
|
||||||
|
|
|
@ -1411,13 +1411,11 @@ static void iwlagn_mac_remove_interface(struct ieee80211_hw *hw,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int iwlagn_mac_change_interface(struct ieee80211_hw *hw,
|
static int iwlagn_mac_change_interface(struct ieee80211_hw *hw,
|
||||||
struct ieee80211_vif *vif,
|
struct ieee80211_vif *vif,
|
||||||
enum nl80211_iftype newtype, bool newp2p)
|
enum nl80211_iftype newtype, bool newp2p)
|
||||||
{
|
{
|
||||||
struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw);
|
struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw);
|
||||||
struct iwl_rxon_context *ctx = iwl_rxon_ctx_from_vif(vif);
|
struct iwl_rxon_context *ctx, *tmp;
|
||||||
struct iwl_rxon_context *bss_ctx = &priv->contexts[IWL_RXON_CTX_BSS];
|
|
||||||
struct iwl_rxon_context *tmp;
|
|
||||||
enum nl80211_iftype newviftype = newtype;
|
enum nl80211_iftype newviftype = newtype;
|
||||||
u32 interface_modes;
|
u32 interface_modes;
|
||||||
int err;
|
int err;
|
||||||
|
@ -1428,6 +1426,18 @@ static int iwlagn_mac_change_interface(struct ieee80211_hw *hw,
|
||||||
|
|
||||||
mutex_lock(&priv->mutex);
|
mutex_lock(&priv->mutex);
|
||||||
|
|
||||||
|
ctx = iwl_rxon_ctx_from_vif(vif);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To simplify this code, only support changes on the
|
||||||
|
* BSS context. The PAN context is usually reassigned
|
||||||
|
* by creating/removing P2P interfaces anyway.
|
||||||
|
*/
|
||||||
|
if (ctx->ctxid != IWL_RXON_CTX_BSS) {
|
||||||
|
err = -EBUSY;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (!ctx->vif || !iwl_is_ready_rf(priv)) {
|
if (!ctx->vif || !iwl_is_ready_rf(priv)) {
|
||||||
/*
|
/*
|
||||||
* Huh? But wait ... this can maybe happen when
|
* Huh? But wait ... this can maybe happen when
|
||||||
|
@ -1437,32 +1447,19 @@ static int iwlagn_mac_change_interface(struct ieee80211_hw *hw,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check if the switch is supported in the same context */
|
||||||
interface_modes = ctx->interface_modes | ctx->exclusive_interface_modes;
|
interface_modes = ctx->interface_modes | ctx->exclusive_interface_modes;
|
||||||
|
|
||||||
if (!(interface_modes & BIT(newtype))) {
|
if (!(interface_modes & BIT(newtype))) {
|
||||||
err = -EBUSY;
|
err = -EBUSY;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Refuse a change that should be done by moving from the PAN
|
|
||||||
* context to the BSS context instead, if the BSS context is
|
|
||||||
* available and can support the new interface type.
|
|
||||||
*/
|
|
||||||
if (ctx->ctxid == IWL_RXON_CTX_PAN && !bss_ctx->vif &&
|
|
||||||
(bss_ctx->interface_modes & BIT(newtype) ||
|
|
||||||
bss_ctx->exclusive_interface_modes & BIT(newtype))) {
|
|
||||||
BUILD_BUG_ON(NUM_IWL_RXON_CTX != 2);
|
|
||||||
err = -EBUSY;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctx->exclusive_interface_modes & BIT(newtype)) {
|
if (ctx->exclusive_interface_modes & BIT(newtype)) {
|
||||||
for_each_context(priv, tmp) {
|
for_each_context(priv, tmp) {
|
||||||
if (ctx == tmp)
|
if (ctx == tmp)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!tmp->vif)
|
if (!tmp->is_active)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -720,6 +720,12 @@ static int iwlagn_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif)
|
||||||
switch (priv->scan_type) {
|
switch (priv->scan_type) {
|
||||||
case IWL_SCAN_RADIO_RESET:
|
case IWL_SCAN_RADIO_RESET:
|
||||||
IWL_DEBUG_SCAN(priv, "Start internal passive scan.\n");
|
IWL_DEBUG_SCAN(priv, "Start internal passive scan.\n");
|
||||||
|
/*
|
||||||
|
* Override quiet time as firmware checks that active
|
||||||
|
* dwell is >= quiet; since we use passive scan it'll
|
||||||
|
* not actually be used.
|
||||||
|
*/
|
||||||
|
scan->quiet_time = cpu_to_le16(IWL_RADIO_RESET_DWELL_TIME);
|
||||||
break;
|
break;
|
||||||
case IWL_SCAN_NORMAL:
|
case IWL_SCAN_NORMAL:
|
||||||
if (priv->scan_request->n_ssids) {
|
if (priv->scan_request->n_ssids) {
|
||||||
|
|
Loading…
Reference in New Issue