Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 214624
b: refs/heads/master
c: 763cc3b
h: refs/heads/master
v: v3
  • Loading branch information
Johannes Berg authored and Wey-Yi Guy committed Sep 11, 2010
1 parent 4bee609 commit 5c35db3
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c6abdc0dc3440b9b6ae00a59c3560ab2160c7c7d
refs/heads/master: 763cc3bf5c2ae189a929fce54759c5bd94b8ba16
9 changes: 9 additions & 0 deletions trunk/drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,15 @@ static int iwlagn_set_pan_params(struct iwl_priv *priv)
ctx_bss = &priv->contexts[IWL_RXON_CTX_BSS];
ctx_pan = &priv->contexts[IWL_RXON_CTX_PAN];

/*
* If the PAN context is inactive, then we don't need
* to update the PAN parameters, the last thing we'll
* have done before it goes inactive is making the PAN
* parameters be WLAN-only.
*/
if (!ctx_pan->is_active)
return 0;

memset(&cmd, 0, sizeof(cmd));

/* only 2 slots are currently allowed */
Expand Down
5 changes: 5 additions & 0 deletions trunk/drivers/net/wireless/iwlwifi/iwl-agn.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@ int iwl_commit_rxon(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
if (!iwl_is_alive(priv))
return -EBUSY;

if (!ctx->is_active)
return 0;

/* always get timestamp with Rx frame */
ctx->staging.flags |= RXON_FLG_TSF2HOST_MSK;

Expand Down Expand Up @@ -4301,6 +4304,8 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
for (i = 0; i < NUM_IWL_RXON_CTX; i++)
priv->contexts[i].ctxid = i;

priv->contexts[IWL_RXON_CTX_BSS].always_active = true;
priv->contexts[IWL_RXON_CTX_BSS].is_active = true;
priv->contexts[IWL_RXON_CTX_BSS].rxon_cmd = REPLY_RXON;
priv->contexts[IWL_RXON_CTX_BSS].rxon_timing_cmd = REPLY_RXON_TIMING;
priv->contexts[IWL_RXON_CTX_BSS].rxon_assoc_cmd = REPLY_RXON_ASSOC;
Expand Down
13 changes: 12 additions & 1 deletion trunk/drivers/net/wireless/iwlwifi/iwl-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,9 @@ static void iwl_update_qos(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
if (test_bit(STATUS_EXIT_PENDING, &priv->status))
return;

if (!ctx->is_active)
return;

ctx->qos_data.def_qos_parm.qos_flags = 0;

if (ctx->qos_data.qos_active)
Expand Down Expand Up @@ -2008,9 +2011,14 @@ int iwl_mac_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
*/
priv->iw_mode = vif->type;

ctx->is_active = true;

err = iwl_set_mode(priv, vif);
if (err)
if (err) {
if (!ctx->always_active)
ctx->is_active = false;
goto out_err;
}

if (priv->cfg->advanced_bt_coexist &&
vif->type == NL80211_IFTYPE_ADHOC) {
Expand Down Expand Up @@ -2052,6 +2060,9 @@ void iwl_mac_remove_interface(struct ieee80211_hw *hw,
iwl_scan_cancel_timeout(priv, 100);
iwl_set_mode(priv, vif);

if (!ctx->always_active)
ctx->is_active = false;

if (priv->scan_vif == vif) {
scan_completed = true;
priv->scan_vif = NULL;
Expand Down
7 changes: 7 additions & 0 deletions trunk/drivers/net/wireless/iwlwifi/iwl-dev.h
Original file line number Diff line number Diff line change
Expand Up @@ -1116,6 +1116,13 @@ struct iwl_rxon_context {
const u8 *ac_to_queue;
u8 mcast_queue;

/*
* We could use the vif to indicate active, but we
* also need it to be active during disabling when
* we already removed the vif for type setting.
*/
bool always_active, is_active;

enum iwl_rxon_context_id ctxid;

u32 interface_modes, exclusive_interface_modes;
Expand Down

0 comments on commit 5c35db3

Please sign in to comment.