aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2013-08-28 10:36:09 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-08-28 10:36:09 -0400
commitb35c809708ad245a36bef94d6fb1e83f6ab850aa (patch)
treec6dc6580546c9a5997eae06c8409f986c383d2a4 /drivers/net/wireless
parent6e956da2027c767859128b9bfef085cf2a8e233b (diff)
parent19c361608ce3e73f352e323262f7e0a8264be3af (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
Conflicts: drivers/net/wireless/iwlwifi/pcie/trans.c net/mac80211/ibss.c
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_drv_txrx.c10
-rw-r--r--drivers/net/wireless/ath/ath9k/init.c3
-rw-r--r--drivers/net/wireless/ath/ath9k/main.c3
-rw-r--r--drivers/net/wireless/ath/carl9170/main.c3
-rw-r--r--drivers/net/wireless/hostap/hostap_ioctl.c4
-rw-r--r--drivers/net/wireless/iwlegacy/4965-mac.c2
-rw-r--r--drivers/net/wireless/iwlwifi/dvm/mac80211.c5
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-prph.h2
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/time-event.c33
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/rx.c8
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.c3
-rw-r--r--drivers/net/wireless/zd1201.c4
12 files changed, 50 insertions, 30 deletions
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
index e602c9519709..c028df76b564 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
@@ -448,6 +448,7 @@ static void ath9k_htc_tx_process(struct ath9k_htc_priv *priv,
448 struct ieee80211_conf *cur_conf = &priv->hw->conf; 448 struct ieee80211_conf *cur_conf = &priv->hw->conf;
449 bool txok; 449 bool txok;
450 int slot; 450 int slot;
451 int hdrlen, padsize;
451 452
452 slot = strip_drv_header(priv, skb); 453 slot = strip_drv_header(priv, skb);
453 if (slot < 0) { 454 if (slot < 0) {
@@ -504,6 +505,15 @@ send_mac80211:
504 505
505 ath9k_htc_tx_clear_slot(priv, slot); 506 ath9k_htc_tx_clear_slot(priv, slot);
506 507
508 /* Remove padding before handing frame back to mac80211 */
509 hdrlen = ieee80211_get_hdrlen_from_skb(skb);
510
511 padsize = hdrlen & 3;
512 if (padsize && skb->len > hdrlen + padsize) {
513 memmove(skb->data + padsize, skb->data, hdrlen);
514 skb_pull(skb, padsize);
515 }
516
507 /* Send status to mac80211 */ 517 /* Send status to mac80211 */
508 ieee80211_tx_status(priv->hw, skb); 518 ieee80211_tx_status(priv->hw, skb);
509} 519}
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index c9f787dea3f6..9a1f349f9260 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -834,7 +834,8 @@ void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
834 IEEE80211_HW_PS_NULLFUNC_STACK | 834 IEEE80211_HW_PS_NULLFUNC_STACK |
835 IEEE80211_HW_SPECTRUM_MGMT | 835 IEEE80211_HW_SPECTRUM_MGMT |
836 IEEE80211_HW_REPORTS_TX_ACK_STATUS | 836 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
837 IEEE80211_HW_SUPPORTS_RC_TABLE; 837 IEEE80211_HW_SUPPORTS_RC_TABLE |
838 IEEE80211_HW_SUPPORTS_HT_CCK_RATES;
838 839
839 if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) { 840 if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
840 hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION; 841 hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index ac9f18fa0729..e4f65900132d 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -173,8 +173,7 @@ static void ath_restart_work(struct ath_softc *sc)
173{ 173{
174 ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, 0); 174 ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, 0);
175 175
176 if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9485(sc->sc_ah) || 176 if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9330(sc->sc_ah))
177 AR_SREV_9550(sc->sc_ah))
178 ieee80211_queue_delayed_work(sc->hw, &sc->hw_pll_work, 177 ieee80211_queue_delayed_work(sc->hw, &sc->hw_pll_work,
179 msecs_to_jiffies(ATH_PLL_WORK_INTERVAL)); 178 msecs_to_jiffies(ATH_PLL_WORK_INTERVAL));
180 179
diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c
index 4a33c6e39ca2..349fa22a921a 100644
--- a/drivers/net/wireless/ath/carl9170/main.c
+++ b/drivers/net/wireless/ath/carl9170/main.c
@@ -1860,7 +1860,8 @@ void *carl9170_alloc(size_t priv_size)
1860 IEEE80211_HW_PS_NULLFUNC_STACK | 1860 IEEE80211_HW_PS_NULLFUNC_STACK |
1861 IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC | 1861 IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC |
1862 IEEE80211_HW_SUPPORTS_RC_TABLE | 1862 IEEE80211_HW_SUPPORTS_RC_TABLE |
1863 IEEE80211_HW_SIGNAL_DBM; 1863 IEEE80211_HW_SIGNAL_DBM |
1864 IEEE80211_HW_SUPPORTS_HT_CCK_RATES;
1864 1865
1865 if (!modparam_noht) { 1866 if (!modparam_noht) {
1866 /* 1867 /*
diff --git a/drivers/net/wireless/hostap/hostap_ioctl.c b/drivers/net/wireless/hostap/hostap_ioctl.c
index ac074731335a..e5090309824e 100644
--- a/drivers/net/wireless/hostap/hostap_ioctl.c
+++ b/drivers/net/wireless/hostap/hostap_ioctl.c
@@ -523,9 +523,9 @@ static int prism2_ioctl_giwaplist(struct net_device *dev,
523 523
524 data->length = prism2_ap_get_sta_qual(local, addr, qual, IW_MAX_AP, 1); 524 data->length = prism2_ap_get_sta_qual(local, addr, qual, IW_MAX_AP, 1);
525 525
526 memcpy(extra, &addr, sizeof(struct sockaddr) * data->length); 526 memcpy(extra, addr, sizeof(struct sockaddr) * data->length);
527 data->flags = 1; /* has quality information */ 527 data->flags = 1; /* has quality information */
528 memcpy(extra + sizeof(struct sockaddr) * data->length, &qual, 528 memcpy(extra + sizeof(struct sockaddr) * data->length, qual,
529 sizeof(struct iw_quality) * data->length); 529 sizeof(struct iw_quality) * data->length);
530 530
531 kfree(addr); 531 kfree(addr);
diff --git a/drivers/net/wireless/iwlegacy/4965-mac.c b/drivers/net/wireless/iwlegacy/4965-mac.c
index b411ab905284..5ab50a5b48b1 100644
--- a/drivers/net/wireless/iwlegacy/4965-mac.c
+++ b/drivers/net/wireless/iwlegacy/4965-mac.c
@@ -4470,9 +4470,9 @@ il4965_irq_tasklet(struct il_priv *il)
4470 set_bit(S_RFKILL, &il->status); 4470 set_bit(S_RFKILL, &il->status);
4471 } else { 4471 } else {
4472 clear_bit(S_RFKILL, &il->status); 4472 clear_bit(S_RFKILL, &il->status);
4473 wiphy_rfkill_set_hw_state(il->hw->wiphy, hw_rf_kill);
4474 il_force_reset(il, true); 4473 il_force_reset(il, true);
4475 } 4474 }
4475 wiphy_rfkill_set_hw_state(il->hw->wiphy, hw_rf_kill);
4476 4476
4477 handled |= CSR_INT_BIT_RF_KILL; 4477 handled |= CSR_INT_BIT_RF_KILL;
4478 } 4478 }
diff --git a/drivers/net/wireless/iwlwifi/dvm/mac80211.c b/drivers/net/wireless/iwlwifi/dvm/mac80211.c
index f0a2c957d503..cae4d3182e33 100644
--- a/drivers/net/wireless/iwlwifi/dvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/dvm/mac80211.c
@@ -1024,7 +1024,10 @@ void iwl_chswitch_done(struct iwl_priv *priv, bool is_success)
1024 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) 1024 if (test_bit(STATUS_EXIT_PENDING, &priv->status))
1025 return; 1025 return;
1026 1026
1027 if (test_and_clear_bit(STATUS_CHANNEL_SWITCH_PENDING, &priv->status)) 1027 if (!test_and_clear_bit(STATUS_CHANNEL_SWITCH_PENDING, &priv->status))
1028 return;
1029
1030 if (ctx->vif)
1028 ieee80211_chswitch_done(ctx->vif, is_success); 1031 ieee80211_chswitch_done(ctx->vif, is_success);
1029} 1032}
1030 1033
diff --git a/drivers/net/wireless/iwlwifi/iwl-prph.h b/drivers/net/wireless/iwlwifi/iwl-prph.h
index a70c7b9d9bad..ff8cc75c189d 100644
--- a/drivers/net/wireless/iwlwifi/iwl-prph.h
+++ b/drivers/net/wireless/iwlwifi/iwl-prph.h
@@ -97,8 +97,6 @@
97 97
98#define APMG_PCIDEV_STT_VAL_L1_ACT_DIS (0x00000800) 98#define APMG_PCIDEV_STT_VAL_L1_ACT_DIS (0x00000800)
99 99
100#define APMG_RTC_INT_STT_RFKILL (0x10000000)
101
102/* Device system time */ 100/* Device system time */
103#define DEVICE_SYSTEM_TIME_REG 0xA0206C 101#define DEVICE_SYSTEM_TIME_REG 0xA0206C
104 102
diff --git a/drivers/net/wireless/iwlwifi/mvm/time-event.c b/drivers/net/wireless/iwlwifi/mvm/time-event.c
index f5329d22840e..c17b74c31398 100644
--- a/drivers/net/wireless/iwlwifi/mvm/time-event.c
+++ b/drivers/net/wireless/iwlwifi/mvm/time-event.c
@@ -137,6 +137,20 @@ static void iwl_mvm_roc_finished(struct iwl_mvm *mvm)
137 schedule_work(&mvm->roc_done_wk); 137 schedule_work(&mvm->roc_done_wk);
138} 138}
139 139
140static bool iwl_mvm_te_check_disconnect(struct iwl_mvm *mvm,
141 struct ieee80211_vif *vif,
142 const char *errmsg)
143{
144 if (vif->type != NL80211_IFTYPE_STATION)
145 return false;
146 if (vif->bss_conf.assoc && vif->bss_conf.dtim_period)
147 return false;
148 if (errmsg)
149 IWL_ERR(mvm, "%s\n", errmsg);
150 ieee80211_connection_loss(vif);
151 return true;
152}
153
140/* 154/*
141 * Handles a FW notification for an event that is known to the driver. 155 * Handles a FW notification for an event that is known to the driver.
142 * 156 *
@@ -162,8 +176,13 @@ static void iwl_mvm_te_handle_notif(struct iwl_mvm *mvm,
162 * P2P Device discoveribility, while there are other higher priority 176 * P2P Device discoveribility, while there are other higher priority
163 * events in the system). 177 * events in the system).
164 */ 178 */
165 WARN_ONCE(!le32_to_cpu(notif->status), 179 if (WARN_ONCE(!le32_to_cpu(notif->status),
166 "Failed to schedule time event\n"); 180 "Failed to schedule time event\n")) {
181 if (iwl_mvm_te_check_disconnect(mvm, te_data->vif, NULL)) {
182 iwl_mvm_te_clear_data(mvm, te_data);
183 return;
184 }
185 }
167 186
168 if (le32_to_cpu(notif->action) & TE_V2_NOTIF_HOST_EVENT_END) { 187 if (le32_to_cpu(notif->action) & TE_V2_NOTIF_HOST_EVENT_END) {
169 IWL_DEBUG_TE(mvm, 188 IWL_DEBUG_TE(mvm,
@@ -179,14 +198,8 @@ static void iwl_mvm_te_handle_notif(struct iwl_mvm *mvm,
179 * By now, we should have finished association 198 * By now, we should have finished association
180 * and know the dtim period. 199 * and know the dtim period.
181 */ 200 */
182 if (te_data->vif->type == NL80211_IFTYPE_STATION && 201 iwl_mvm_te_check_disconnect(mvm, te_data->vif,
183 (!te_data->vif->bss_conf.assoc || 202 "No assocation and the time event is over already...");
184 !te_data->vif->bss_conf.dtim_period)) {
185 IWL_ERR(mvm,
186 "No assocation and the time event is over already...\n");
187 ieee80211_connection_loss(te_data->vif);
188 }
189
190 iwl_mvm_te_clear_data(mvm, te_data); 203 iwl_mvm_te_clear_data(mvm, te_data);
191 } else if (le32_to_cpu(notif->action) & TE_V2_NOTIF_HOST_EVENT_START) { 204 } else if (le32_to_cpu(notif->action) & TE_V2_NOTIF_HOST_EVENT_START) {
192 te_data->running = true; 205 te_data->running = true;
diff --git a/drivers/net/wireless/iwlwifi/pcie/rx.c b/drivers/net/wireless/iwlwifi/pcie/rx.c
index a4c7aeb786d2..3f237b42eb36 100644
--- a/drivers/net/wireless/iwlwifi/pcie/rx.c
+++ b/drivers/net/wireless/iwlwifi/pcie/rx.c
@@ -889,14 +889,6 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)
889 889
890 iwl_op_mode_hw_rf_kill(trans->op_mode, hw_rfkill); 890 iwl_op_mode_hw_rf_kill(trans->op_mode, hw_rfkill);
891 if (hw_rfkill) { 891 if (hw_rfkill) {
892 /*
893 * Clear the interrupt in APMG if the NIC is going down.
894 * Note that when the NIC exits RFkill (else branch), we
895 * can't access prph and the NIC will be reset in
896 * start_hw anyway.
897 */
898 iwl_write_prph(trans, APMG_RTC_INT_STT_REG,
899 APMG_RTC_INT_STT_RFKILL);
900 set_bit(STATUS_RFKILL, &trans_pcie->status); 892 set_bit(STATUS_RFKILL, &trans_pcie->status);
901 if (test_and_clear_bit(STATUS_HCMD_ACTIVE, 893 if (test_and_clear_bit(STATUS_HCMD_ACTIVE,
902 &trans_pcie->status)) 894 &trans_pcie->status))
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 660d7d856186..95e6e61c3de0 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -7489,7 +7489,8 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
7489 IEEE80211_HW_SUPPORTS_PS | 7489 IEEE80211_HW_SUPPORTS_PS |
7490 IEEE80211_HW_PS_NULLFUNC_STACK | 7490 IEEE80211_HW_PS_NULLFUNC_STACK |
7491 IEEE80211_HW_AMPDU_AGGREGATION | 7491 IEEE80211_HW_AMPDU_AGGREGATION |
7492 IEEE80211_HW_REPORTS_TX_ACK_STATUS; 7492 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
7493 IEEE80211_HW_SUPPORTS_HT_CCK_RATES;
7493 7494
7494 /* 7495 /*
7495 * Don't set IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING for USB devices 7496 * Don't set IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING for USB devices
diff --git a/drivers/net/wireless/zd1201.c b/drivers/net/wireless/zd1201.c
index 73aa7388dd2b..d39c4178c33a 100644
--- a/drivers/net/wireless/zd1201.c
+++ b/drivers/net/wireless/zd1201.c
@@ -100,10 +100,12 @@ static int zd1201_fw_upload(struct usb_device *dev, int apfw)
100 goto exit; 100 goto exit;
101 101
102 err = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 0x4, 102 err = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 0x4,
103 USB_DIR_IN | 0x40, 0,0, &ret, sizeof(ret), ZD1201_FW_TIMEOUT); 103 USB_DIR_IN | 0x40, 0, 0, buf, sizeof(ret), ZD1201_FW_TIMEOUT);
104 if (err < 0) 104 if (err < 0)
105 goto exit; 105 goto exit;
106 106
107 memcpy(&ret, buf, sizeof(ret));
108
107 if (ret & 0x80) { 109 if (ret & 0x80) {
108 err = -EIO; 110 err = -EIO;
109 goto exit; 111 goto exit;