aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-3945.c3
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-6000.c20
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-rxon.c3
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-ucode.c4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c70
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.h20
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-sta.c13
7 files changed, 79 insertions, 54 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
index d39f449a9bb0..cac9647da71c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.c
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
@@ -1784,6 +1784,9 @@ int iwl3945_commit_rxon(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
1784 int rc = 0; 1784 int rc = 0;
1785 bool new_assoc = !!(staging_rxon->filter_flags & RXON_FILTER_ASSOC_MSK); 1785 bool new_assoc = !!(staging_rxon->filter_flags & RXON_FILTER_ASSOC_MSK);
1786 1786
1787 if (test_bit(STATUS_EXIT_PENDING, &priv->status))
1788 return -EINVAL;
1789
1787 if (!iwl_is_alive(priv)) 1790 if (!iwl_is_alive(priv))
1788 return -1; 1791 return -1;
1789 1792
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
index ec41f2725292..8018f38d5165 100644
--- a/drivers/net/wireless/iwlwifi/iwl-6000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
@@ -552,7 +552,7 @@ static struct iwl_bt_params iwl6000_bt_params = {
552 .bt_sco_disable = true, 552 .bt_sco_disable = true,
553}; 553};
554 554
555struct iwl_cfg iwl6000g2a_2agn_cfg = { 555struct iwl_cfg iwl6005_2agn_cfg = {
556 .name = "Intel(R) Centrino(R) Advanced-N 6205 AGN", 556 .name = "Intel(R) Centrino(R) Advanced-N 6205 AGN",
557 .fw_name_pre = IWL6000G2A_FW_PRE, 557 .fw_name_pre = IWL6000G2A_FW_PRE,
558 .ucode_api_max = IWL6000G2_UCODE_API_MAX, 558 .ucode_api_max = IWL6000G2_UCODE_API_MAX,
@@ -568,7 +568,7 @@ struct iwl_cfg iwl6000g2a_2agn_cfg = {
568 .led_mode = IWL_LED_RF_STATE, 568 .led_mode = IWL_LED_RF_STATE,
569}; 569};
570 570
571struct iwl_cfg iwl6000g2a_2abg_cfg = { 571struct iwl_cfg iwl6005_2abg_cfg = {
572 .name = "Intel(R) Centrino(R) Advanced-N 6205 ABG", 572 .name = "Intel(R) Centrino(R) Advanced-N 6205 ABG",
573 .fw_name_pre = IWL6000G2A_FW_PRE, 573 .fw_name_pre = IWL6000G2A_FW_PRE,
574 .ucode_api_max = IWL6000G2_UCODE_API_MAX, 574 .ucode_api_max = IWL6000G2_UCODE_API_MAX,
@@ -583,7 +583,7 @@ struct iwl_cfg iwl6000g2a_2abg_cfg = {
583 .led_mode = IWL_LED_RF_STATE, 583 .led_mode = IWL_LED_RF_STATE,
584}; 584};
585 585
586struct iwl_cfg iwl6000g2a_2bg_cfg = { 586struct iwl_cfg iwl6005_2bg_cfg = {
587 .name = "Intel(R) Centrino(R) Advanced-N 6205 BG", 587 .name = "Intel(R) Centrino(R) Advanced-N 6205 BG",
588 .fw_name_pre = IWL6000G2A_FW_PRE, 588 .fw_name_pre = IWL6000G2A_FW_PRE,
589 .ucode_api_max = IWL6000G2_UCODE_API_MAX, 589 .ucode_api_max = IWL6000G2_UCODE_API_MAX,
@@ -598,7 +598,7 @@ struct iwl_cfg iwl6000g2a_2bg_cfg = {
598 .led_mode = IWL_LED_RF_STATE, 598 .led_mode = IWL_LED_RF_STATE,
599}; 599};
600 600
601struct iwl_cfg iwl6000g2b_2agn_cfg = { 601struct iwl_cfg iwl6030_2agn_cfg = {
602 .name = "Intel(R) Centrino(R) Advanced-N 6230 AGN", 602 .name = "Intel(R) Centrino(R) Advanced-N 6230 AGN",
603 .fw_name_pre = IWL6000G2B_FW_PRE, 603 .fw_name_pre = IWL6000G2B_FW_PRE,
604 .ucode_api_max = IWL6000G2_UCODE_API_MAX, 604 .ucode_api_max = IWL6000G2_UCODE_API_MAX,
@@ -618,7 +618,7 @@ struct iwl_cfg iwl6000g2b_2agn_cfg = {
618 .scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A, 618 .scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
619}; 619};
620 620
621struct iwl_cfg iwl6000g2b_2abg_cfg = { 621struct iwl_cfg iwl6030_2abg_cfg = {
622 .name = "Intel(R) Centrino(R) Advanced-N 6230 ABG", 622 .name = "Intel(R) Centrino(R) Advanced-N 6230 ABG",
623 .fw_name_pre = IWL6000G2B_FW_PRE, 623 .fw_name_pre = IWL6000G2B_FW_PRE,
624 .ucode_api_max = IWL6000G2_UCODE_API_MAX, 624 .ucode_api_max = IWL6000G2_UCODE_API_MAX,
@@ -637,7 +637,7 @@ struct iwl_cfg iwl6000g2b_2abg_cfg = {
637 .scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A, 637 .scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
638}; 638};
639 639
640struct iwl_cfg iwl6000g2b_2bgn_cfg = { 640struct iwl_cfg iwl6030_2bgn_cfg = {
641 .name = "Intel(R) Centrino(R) Advanced-N 6230 BGN", 641 .name = "Intel(R) Centrino(R) Advanced-N 6230 BGN",
642 .fw_name_pre = IWL6000G2B_FW_PRE, 642 .fw_name_pre = IWL6000G2B_FW_PRE,
643 .ucode_api_max = IWL6000G2_UCODE_API_MAX, 643 .ucode_api_max = IWL6000G2_UCODE_API_MAX,
@@ -657,7 +657,7 @@ struct iwl_cfg iwl6000g2b_2bgn_cfg = {
657 .scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A, 657 .scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
658}; 658};
659 659
660struct iwl_cfg iwl6000g2b_2bg_cfg = { 660struct iwl_cfg iwl6030_2bg_cfg = {
661 .name = "Intel(R) Centrino(R) Advanced-N 6230 BG", 661 .name = "Intel(R) Centrino(R) Advanced-N 6230 BG",
662 .fw_name_pre = IWL6000G2B_FW_PRE, 662 .fw_name_pre = IWL6000G2B_FW_PRE,
663 .ucode_api_max = IWL6000G2_UCODE_API_MAX, 663 .ucode_api_max = IWL6000G2_UCODE_API_MAX,
@@ -676,7 +676,7 @@ struct iwl_cfg iwl6000g2b_2bg_cfg = {
676 .scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A, 676 .scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
677}; 677};
678 678
679struct iwl_cfg iwl6000g2b_bgn_cfg = { 679struct iwl_cfg iwl1030_bgn_cfg = {
680 .name = "Intel(R) Centrino(R) Wireless-N 1030 BGN", 680 .name = "Intel(R) Centrino(R) Wireless-N 1030 BGN",
681 .fw_name_pre = IWL6000G2B_FW_PRE, 681 .fw_name_pre = IWL6000G2B_FW_PRE,
682 .ucode_api_max = IWL6000G2_UCODE_API_MAX, 682 .ucode_api_max = IWL6000G2_UCODE_API_MAX,
@@ -696,7 +696,7 @@ struct iwl_cfg iwl6000g2b_bgn_cfg = {
696 .scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A, 696 .scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
697}; 697};
698 698
699struct iwl_cfg iwl6000g2b_bg_cfg = { 699struct iwl_cfg iwl1030_bg_cfg = {
700 .name = "Intel(R) Centrino(R) Wireless-N 1030 BG", 700 .name = "Intel(R) Centrino(R) Wireless-N 1030 BG",
701 .fw_name_pre = IWL6000G2B_FW_PRE, 701 .fw_name_pre = IWL6000G2B_FW_PRE,
702 .ucode_api_max = IWL6000G2_UCODE_API_MAX, 702 .ucode_api_max = IWL6000G2_UCODE_API_MAX,
@@ -782,7 +782,7 @@ struct iwl_cfg iwl6050_2agn_cfg = {
782 .led_mode = IWL_LED_BLINK, 782 .led_mode = IWL_LED_BLINK,
783}; 783};
784 784
785struct iwl_cfg iwl6050g2_bgn_cfg = { 785struct iwl_cfg iwl6150_bgn_cfg = {
786 .name = "Intel(R) Centrino(R) Wireless-N + WiMAX 6150 BGN", 786 .name = "Intel(R) Centrino(R) Wireless-N + WiMAX 6150 BGN",
787 .fw_name_pre = IWL6050_FW_PRE, 787 .fw_name_pre = IWL6050_FW_PRE,
788 .ucode_api_max = IWL6050_UCODE_API_MAX, 788 .ucode_api_max = IWL6050_UCODE_API_MAX,
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
index 203ee60a82b4..4865b82355d7 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
@@ -130,6 +130,9 @@ int iwlagn_commit_rxon(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
130 130
131 lockdep_assert_held(&priv->mutex); 131 lockdep_assert_held(&priv->mutex);
132 132
133 if (test_bit(STATUS_EXIT_PENDING, &priv->status))
134 return -EINVAL;
135
133 if (!iwl_is_alive(priv)) 136 if (!iwl_is_alive(priv))
134 return -EBUSY; 137 return -EBUSY;
135 138
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-ucode.c b/drivers/net/wireless/iwlwifi/iwl-agn-ucode.c
index 0bdd2bb0bbd3..24dabcd2a36c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-ucode.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-ucode.c
@@ -531,6 +531,10 @@ int iwlagn_alive_notify(struct iwl_priv *priv)
531 531
532 spin_unlock_irqrestore(&priv->lock, flags); 532 spin_unlock_irqrestore(&priv->lock, flags);
533 533
534 /* Enable L1-Active */
535 iwl_clear_bits_prph(priv, APMG_PCIDEV_STT_REG,
536 APMG_PCIDEV_STT_VAL_L1_ACT_DIS);
537
534 iwlagn_send_wimax_coex(priv); 538 iwlagn_send_wimax_coex(priv);
535 539
536 iwlagn_set_Xtal_calib(priv); 540 iwlagn_set_Xtal_calib(priv);
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 50cee2b5a6b7..32ab4a0215a0 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -2502,7 +2502,7 @@ int iwl_dump_nic_event_log(struct iwl_priv *priv, bool full_log,
2502 return pos; 2502 return pos;
2503 } 2503 }
2504 2504
2505 /* enable/disable bt channel announcement */ 2505 /* enable/disable bt channel inhibition */
2506 priv->bt_ch_announce = iwlagn_bt_ch_announce; 2506 priv->bt_ch_announce = iwlagn_bt_ch_announce;
2507 2507
2508#ifdef CONFIG_IWLWIFI_DEBUG 2508#ifdef CONFIG_IWLWIFI_DEBUG
@@ -4044,8 +4044,10 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
4044 (iwlagn_ant_coupling > IWL_BT_ANTENNA_COUPLING_THRESHOLD) ? 4044 (iwlagn_ant_coupling > IWL_BT_ANTENNA_COUPLING_THRESHOLD) ?
4045 true : false; 4045 true : false;
4046 4046
4047 /* enable/disable bt channel announcement */ 4047 /* enable/disable bt channel inhibition */
4048 priv->bt_ch_announce = iwlagn_bt_ch_announce; 4048 priv->bt_ch_announce = iwlagn_bt_ch_announce;
4049 IWL_DEBUG_INFO(priv, "BT channel inhibition is %s\n",
4050 (priv->bt_ch_announce) ? "On" : "Off");
4049 4051
4050 if (iwl_alloc_traffic_mem(priv)) 4052 if (iwl_alloc_traffic_mem(priv))
4051 IWL_ERR(priv, "Not enough memory to generate traffic log\n"); 4053 IWL_ERR(priv, "Not enough memory to generate traffic log\n");
@@ -4419,31 +4421,31 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = {
4419 {IWL_PCI_DEVICE(0x4239, 0x1316, iwl6000i_2abg_cfg)}, 4421 {IWL_PCI_DEVICE(0x4239, 0x1316, iwl6000i_2abg_cfg)},
4420 4422
4421/* 6x00 Series Gen2a */ 4423/* 6x00 Series Gen2a */
4422 {IWL_PCI_DEVICE(0x0082, 0x1301, iwl6000g2a_2agn_cfg)}, 4424 {IWL_PCI_DEVICE(0x0082, 0x1301, iwl6005_2agn_cfg)},
4423 {IWL_PCI_DEVICE(0x0082, 0x1306, iwl6000g2a_2abg_cfg)}, 4425 {IWL_PCI_DEVICE(0x0082, 0x1306, iwl6005_2abg_cfg)},
4424 {IWL_PCI_DEVICE(0x0082, 0x1307, iwl6000g2a_2bg_cfg)}, 4426 {IWL_PCI_DEVICE(0x0082, 0x1307, iwl6005_2bg_cfg)},
4425 {IWL_PCI_DEVICE(0x0082, 0x1321, iwl6000g2a_2agn_cfg)}, 4427 {IWL_PCI_DEVICE(0x0082, 0x1321, iwl6005_2agn_cfg)},
4426 {IWL_PCI_DEVICE(0x0082, 0x1326, iwl6000g2a_2abg_cfg)}, 4428 {IWL_PCI_DEVICE(0x0082, 0x1326, iwl6005_2abg_cfg)},
4427 {IWL_PCI_DEVICE(0x0085, 0x1311, iwl6000g2a_2agn_cfg)}, 4429 {IWL_PCI_DEVICE(0x0085, 0x1311, iwl6005_2agn_cfg)},
4428 {IWL_PCI_DEVICE(0x0085, 0x1316, iwl6000g2a_2abg_cfg)}, 4430 {IWL_PCI_DEVICE(0x0085, 0x1316, iwl6005_2abg_cfg)},
4429 4431
4430/* 6x00 Series Gen2b */ 4432/* 6x00 Series Gen2b */
4431 {IWL_PCI_DEVICE(0x008A, 0x5305, iwl6000g2b_bgn_cfg)}, 4433 {IWL_PCI_DEVICE(0x008A, 0x5305, iwl1030_bgn_cfg)},
4432 {IWL_PCI_DEVICE(0x008A, 0x5307, iwl6000g2b_bg_cfg)}, 4434 {IWL_PCI_DEVICE(0x008A, 0x5307, iwl1030_bg_cfg)},
4433 {IWL_PCI_DEVICE(0x008A, 0x5325, iwl6000g2b_bgn_cfg)}, 4435 {IWL_PCI_DEVICE(0x008A, 0x5325, iwl1030_bgn_cfg)},
4434 {IWL_PCI_DEVICE(0x008A, 0x5327, iwl6000g2b_bg_cfg)}, 4436 {IWL_PCI_DEVICE(0x008A, 0x5327, iwl1030_bg_cfg)},
4435 {IWL_PCI_DEVICE(0x008B, 0x5315, iwl6000g2b_bgn_cfg)}, 4437 {IWL_PCI_DEVICE(0x008B, 0x5315, iwl1030_bgn_cfg)},
4436 {IWL_PCI_DEVICE(0x008B, 0x5317, iwl6000g2b_bg_cfg)}, 4438 {IWL_PCI_DEVICE(0x008B, 0x5317, iwl1030_bg_cfg)},
4437 {IWL_PCI_DEVICE(0x0090, 0x5211, iwl6000g2b_2agn_cfg)}, 4439 {IWL_PCI_DEVICE(0x0090, 0x5211, iwl6030_2agn_cfg)},
4438 {IWL_PCI_DEVICE(0x0090, 0x5215, iwl6000g2b_2bgn_cfg)}, 4440 {IWL_PCI_DEVICE(0x0090, 0x5215, iwl6030_2bgn_cfg)},
4439 {IWL_PCI_DEVICE(0x0090, 0x5216, iwl6000g2b_2abg_cfg)}, 4441 {IWL_PCI_DEVICE(0x0090, 0x5216, iwl6030_2abg_cfg)},
4440 {IWL_PCI_DEVICE(0x0091, 0x5201, iwl6000g2b_2agn_cfg)}, 4442 {IWL_PCI_DEVICE(0x0091, 0x5201, iwl6030_2agn_cfg)},
4441 {IWL_PCI_DEVICE(0x0091, 0x5205, iwl6000g2b_2bgn_cfg)}, 4443 {IWL_PCI_DEVICE(0x0091, 0x5205, iwl6030_2bgn_cfg)},
4442 {IWL_PCI_DEVICE(0x0091, 0x5206, iwl6000g2b_2abg_cfg)}, 4444 {IWL_PCI_DEVICE(0x0091, 0x5206, iwl6030_2abg_cfg)},
4443 {IWL_PCI_DEVICE(0x0091, 0x5207, iwl6000g2b_2bg_cfg)}, 4445 {IWL_PCI_DEVICE(0x0091, 0x5207, iwl6030_2bg_cfg)},
4444 {IWL_PCI_DEVICE(0x0091, 0x5221, iwl6000g2b_2agn_cfg)}, 4446 {IWL_PCI_DEVICE(0x0091, 0x5221, iwl6030_2agn_cfg)},
4445 {IWL_PCI_DEVICE(0x0091, 0x5225, iwl6000g2b_2bgn_cfg)}, 4447 {IWL_PCI_DEVICE(0x0091, 0x5225, iwl6030_2bgn_cfg)},
4446 {IWL_PCI_DEVICE(0x0091, 0x5226, iwl6000g2b_2abg_cfg)}, 4448 {IWL_PCI_DEVICE(0x0091, 0x5226, iwl6030_2abg_cfg)},
4447 4449
4448/* 6x50 WiFi/WiMax Series */ 4450/* 6x50 WiFi/WiMax Series */
4449 {IWL_PCI_DEVICE(0x0087, 0x1301, iwl6050_2agn_cfg)}, 4451 {IWL_PCI_DEVICE(0x0087, 0x1301, iwl6050_2agn_cfg)},
@@ -4454,12 +4456,12 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = {
4454 {IWL_PCI_DEVICE(0x0089, 0x1316, iwl6050_2abg_cfg)}, 4456 {IWL_PCI_DEVICE(0x0089, 0x1316, iwl6050_2abg_cfg)},
4455 4457
4456/* 6x50 WiFi/WiMax Series Gen2 */ 4458/* 6x50 WiFi/WiMax Series Gen2 */
4457 {IWL_PCI_DEVICE(0x0885, 0x1305, iwl6050g2_bgn_cfg)}, 4459 {IWL_PCI_DEVICE(0x0885, 0x1305, iwl6150_bgn_cfg)},
4458 {IWL_PCI_DEVICE(0x0885, 0x1306, iwl6050g2_bgn_cfg)}, 4460 {IWL_PCI_DEVICE(0x0885, 0x1306, iwl6150_bgn_cfg)},
4459 {IWL_PCI_DEVICE(0x0885, 0x1325, iwl6050g2_bgn_cfg)}, 4461 {IWL_PCI_DEVICE(0x0885, 0x1325, iwl6150_bgn_cfg)},
4460 {IWL_PCI_DEVICE(0x0885, 0x1326, iwl6050g2_bgn_cfg)}, 4462 {IWL_PCI_DEVICE(0x0885, 0x1326, iwl6150_bgn_cfg)},
4461 {IWL_PCI_DEVICE(0x0886, 0x1315, iwl6050g2_bgn_cfg)}, 4463 {IWL_PCI_DEVICE(0x0886, 0x1315, iwl6150_bgn_cfg)},
4462 {IWL_PCI_DEVICE(0x0886, 0x1316, iwl6050g2_bgn_cfg)}, 4464 {IWL_PCI_DEVICE(0x0886, 0x1316, iwl6150_bgn_cfg)},
4463 4465
4464/* 1000 Series WiFi */ 4466/* 1000 Series WiFi */
4465 {IWL_PCI_DEVICE(0x0083, 0x1205, iwl1000_bgn_cfg)}, 4467 {IWL_PCI_DEVICE(0x0083, 0x1205, iwl1000_bgn_cfg)},
@@ -4588,6 +4590,6 @@ module_param_named(antenna_coupling, iwlagn_ant_coupling, int, S_IRUGO);
4588MODULE_PARM_DESC(antenna_coupling, 4590MODULE_PARM_DESC(antenna_coupling,
4589 "specify antenna coupling in dB (defualt: 0 dB)"); 4591 "specify antenna coupling in dB (defualt: 0 dB)");
4590 4592
4591module_param_named(bt_ch_announce, iwlagn_bt_ch_announce, bool, S_IRUGO); 4593module_param_named(bt_ch_inhibition, iwlagn_bt_ch_announce, bool, S_IRUGO);
4592MODULE_PARM_DESC(bt_ch_announce, 4594MODULE_PARM_DESC(bt_ch_inhibition,
4593 "Enable BT channel announcement mode (default: enable)"); 4595 "Disable BT channel inhibition (default: enable)");
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.h b/drivers/net/wireless/iwlwifi/iwl-agn.h
index 28837a185a28..da303585f801 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.h
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.h
@@ -74,22 +74,22 @@ extern struct iwl_cfg iwl5100_bgn_cfg;
74extern struct iwl_cfg iwl5100_abg_cfg; 74extern struct iwl_cfg iwl5100_abg_cfg;
75extern struct iwl_cfg iwl5150_agn_cfg; 75extern struct iwl_cfg iwl5150_agn_cfg;
76extern struct iwl_cfg iwl5150_abg_cfg; 76extern struct iwl_cfg iwl5150_abg_cfg;
77extern struct iwl_cfg iwl6000g2a_2agn_cfg; 77extern struct iwl_cfg iwl6005_2agn_cfg;
78extern struct iwl_cfg iwl6000g2a_2abg_cfg; 78extern struct iwl_cfg iwl6005_2abg_cfg;
79extern struct iwl_cfg iwl6000g2a_2bg_cfg; 79extern struct iwl_cfg iwl6005_2bg_cfg;
80extern struct iwl_cfg iwl6000g2b_bgn_cfg; 80extern struct iwl_cfg iwl1030_bgn_cfg;
81extern struct iwl_cfg iwl6000g2b_bg_cfg; 81extern struct iwl_cfg iwl1030_bg_cfg;
82extern struct iwl_cfg iwl6000g2b_2agn_cfg; 82extern struct iwl_cfg iwl6030_2agn_cfg;
83extern struct iwl_cfg iwl6000g2b_2abg_cfg; 83extern struct iwl_cfg iwl6030_2abg_cfg;
84extern struct iwl_cfg iwl6000g2b_2bgn_cfg; 84extern struct iwl_cfg iwl6030_2bgn_cfg;
85extern struct iwl_cfg iwl6000g2b_2bg_cfg; 85extern struct iwl_cfg iwl6030_2bg_cfg;
86extern struct iwl_cfg iwl6000i_2agn_cfg; 86extern struct iwl_cfg iwl6000i_2agn_cfg;
87extern struct iwl_cfg iwl6000i_2abg_cfg; 87extern struct iwl_cfg iwl6000i_2abg_cfg;
88extern struct iwl_cfg iwl6000i_2bg_cfg; 88extern struct iwl_cfg iwl6000i_2bg_cfg;
89extern struct iwl_cfg iwl6000_3agn_cfg; 89extern struct iwl_cfg iwl6000_3agn_cfg;
90extern struct iwl_cfg iwl6050_2agn_cfg; 90extern struct iwl_cfg iwl6050_2agn_cfg;
91extern struct iwl_cfg iwl6050_2abg_cfg; 91extern struct iwl_cfg iwl6050_2abg_cfg;
92extern struct iwl_cfg iwl6050g2_bgn_cfg; 92extern struct iwl_cfg iwl6150_bgn_cfg;
93extern struct iwl_cfg iwl1000_bgn_cfg; 93extern struct iwl_cfg iwl1000_bgn_cfg;
94extern struct iwl_cfg iwl1000_bg_cfg; 94extern struct iwl_cfg iwl1000_bg_cfg;
95extern struct iwl_cfg iwl100_bgn_cfg; 95extern struct iwl_cfg iwl100_bgn_cfg;
diff --git a/drivers/net/wireless/iwlwifi/iwl-sta.c b/drivers/net/wireless/iwlwifi/iwl-sta.c
index 0a67b2fa52a1..4776323b1eba 100644
--- a/drivers/net/wireless/iwlwifi/iwl-sta.c
+++ b/drivers/net/wireless/iwlwifi/iwl-sta.c
@@ -647,6 +647,7 @@ void iwl_reprogram_ap_sta(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
647 memcpy(&lq, priv->stations[sta_id].lq, sizeof(lq)); 647 memcpy(&lq, priv->stations[sta_id].lq, sizeof(lq));
648 648
649 active = priv->stations[sta_id].used & IWL_STA_UCODE_ACTIVE; 649 active = priv->stations[sta_id].used & IWL_STA_UCODE_ACTIVE;
650 priv->stations[sta_id].used &= ~IWL_STA_DRIVER_ACTIVE;
650 spin_unlock_irqrestore(&priv->sta_lock, flags); 651 spin_unlock_irqrestore(&priv->sta_lock, flags);
651 652
652 if (active) { 653 if (active) {
@@ -657,6 +658,10 @@ void iwl_reprogram_ap_sta(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
657 IWL_ERR(priv, "failed to remove STA %pM (%d)\n", 658 IWL_ERR(priv, "failed to remove STA %pM (%d)\n",
658 priv->stations[sta_id].sta.sta.addr, ret); 659 priv->stations[sta_id].sta.sta.addr, ret);
659 } 660 }
661 spin_lock_irqsave(&priv->sta_lock, flags);
662 priv->stations[sta_id].used |= IWL_STA_DRIVER_ACTIVE;
663 spin_unlock_irqrestore(&priv->sta_lock, flags);
664
660 ret = iwl_send_add_sta(priv, &sta_cmd, CMD_SYNC); 665 ret = iwl_send_add_sta(priv, &sta_cmd, CMD_SYNC);
661 if (ret) 666 if (ret)
662 IWL_ERR(priv, "failed to re-add STA %pM (%d)\n", 667 IWL_ERR(priv, "failed to re-add STA %pM (%d)\n",
@@ -777,6 +782,14 @@ int iwl_send_lq_cmd(struct iwl_priv *priv, struct iwl_rxon_context *ctx,
777 if (WARN_ON(lq->sta_id == IWL_INVALID_STATION)) 782 if (WARN_ON(lq->sta_id == IWL_INVALID_STATION))
778 return -EINVAL; 783 return -EINVAL;
779 784
785
786 spin_lock_irqsave(&priv->sta_lock, flags_spin);
787 if (!(priv->stations[lq->sta_id].used & IWL_STA_DRIVER_ACTIVE)) {
788 spin_unlock_irqrestore(&priv->sta_lock, flags_spin);
789 return -EINVAL;
790 }
791 spin_unlock_irqrestore(&priv->sta_lock, flags_spin);
792
780 iwl_dump_lq_cmd(priv, lq); 793 iwl_dump_lq_cmd(priv, lq);
781 BUG_ON(init && (cmd.flags & CMD_ASYNC)); 794 BUG_ON(init && (cmd.flags & CMD_ASYNC));
782 795