aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2010-02-27 05:05:54 -0500
committerDavid S. Miller <davem@davemloft.net>2010-02-27 05:05:54 -0500
commitce300c7ffa61165f9bfd16e511ee0cd4114977ab (patch)
tree874b57409bad0c9620a431272e6bf5c94e270253
parent8266d7127c1b0bdf924066c19c71be4d351e9583 (diff)
parent9e3bd9190800e8209b4a3e1d724c35f0738dcad2 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6
-rw-r--r--MAINTAINERS4
-rw-r--r--drivers/net/wireless/ath/ath9k/hw.c10
-rw-r--r--drivers/net/wireless/ath/ath9k/phy.h3
-rw-r--r--drivers/net/wireless/b43/Kconfig17
-rw-r--r--drivers/net/wireless/b43/b43.h7
-rw-r--r--drivers/net/wireless/b43/main.c14
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c14
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-commands.h1
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-dev.h3
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-rx.c46
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-tx.c11
-rw-r--r--include/linux/netdevice.h2
-rw-r--r--net/mac80211/main.c6
-rw-r--r--net/mac80211/work.c1
14 files changed, 62 insertions, 77 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index 6bd1cd5c60df..e71ff7c67a63 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3502,9 +3502,9 @@ F: drivers/net/mv643xx_eth.*
3502F: include/linux/mv643xx.h 3502F: include/linux/mv643xx.h
3503 3503
3504MARVELL MWL8K WIRELESS DRIVER 3504MARVELL MWL8K WIRELESS DRIVER
3505M: Lennert Buytenhek <buytenh@marvell.com> 3505M: Lennert Buytenhek <buytenh@wantstofly.org>
3506L: linux-wireless@vger.kernel.org 3506L: linux-wireless@vger.kernel.org
3507S: Supported 3507S: Maintained
3508F: drivers/net/wireless/mwl8k.c 3508F: drivers/net/wireless/mwl8k.c
3509 3509
3510MARVELL SOC MMC/SD/SDIO CONTROLLER DRIVER 3510MARVELL SOC MMC/SD/SDIO CONTROLLER DRIVER
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index f00f5c744f48..2e767cf22f1e 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -1310,6 +1310,16 @@ static void ath9k_hw_override_ini(struct ath_hw *ah,
1310 * Necessary to avoid issues on AR5416 2.0 1310 * Necessary to avoid issues on AR5416 2.0
1311 */ 1311 */
1312 REG_WRITE(ah, 0x9800 + (651 << 2), 0x11); 1312 REG_WRITE(ah, 0x9800 + (651 << 2), 0x11);
1313
1314 /*
1315 * Disable RIFS search on some chips to avoid baseband
1316 * hang issues.
1317 */
1318 if (AR_SREV_9100(ah) || AR_SREV_9160(ah)) {
1319 val = REG_READ(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS);
1320 val &= ~AR_PHY_RIFS_INIT_DELAY;
1321 REG_WRITE(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS, val);
1322 }
1313} 1323}
1314 1324
1315static u32 ath9k_hw_def_ini_fixup(struct ath_hw *ah, 1325static u32 ath9k_hw_def_ini_fixup(struct ath_hw *ah,
diff --git a/drivers/net/wireless/ath/ath9k/phy.h b/drivers/net/wireless/ath/ath9k/phy.h
index 31de27dc0c4a..0999a495fd46 100644
--- a/drivers/net/wireless/ath/ath9k/phy.h
+++ b/drivers/net/wireless/ath/ath9k/phy.h
@@ -384,6 +384,9 @@ bool ath9k_hw_set_rf_regs(struct ath_hw *ah,
384 384
385#define AR_PHY_HEAVY_CLIP_ENABLE 0x99E0 385#define AR_PHY_HEAVY_CLIP_ENABLE 0x99E0
386 386
387#define AR_PHY_HEAVY_CLIP_FACTOR_RIFS 0x99EC
388#define AR_PHY_RIFS_INIT_DELAY 0x03ff0000
389
387#define AR_PHY_M_SLEEP 0x99f0 390#define AR_PHY_M_SLEEP 0x99f0
388#define AR_PHY_REFCLKDLY 0x99f4 391#define AR_PHY_REFCLKDLY 0x99f4
389#define AR_PHY_REFCLKPD 0x99f8 392#define AR_PHY_REFCLKPD 0x99f8
diff --git a/drivers/net/wireless/b43/Kconfig b/drivers/net/wireless/b43/Kconfig
index 073be566d05e..0a00d42642cd 100644
--- a/drivers/net/wireless/b43/Kconfig
+++ b/drivers/net/wireless/b43/Kconfig
@@ -3,7 +3,6 @@ config B43
3 depends on SSB_POSSIBLE && MAC80211 && HAS_DMA 3 depends on SSB_POSSIBLE && MAC80211 && HAS_DMA
4 select SSB 4 select SSB
5 select FW_LOADER 5 select FW_LOADER
6 select SSB_BLOCKIO
7 ---help--- 6 ---help---
8 b43 is a driver for the Broadcom 43xx series wireless devices. 7 b43 is a driver for the Broadcom 43xx series wireless devices.
9 8
@@ -79,6 +78,14 @@ config B43_SDIO
79 78
80 If unsure, say N. 79 If unsure, say N.
81 80
81#Data transfers to the device via PIO. We want it as a fallback even
82# if we can do DMA.
83config B43_PIO
84 bool
85 depends on B43
86 select SSB_BLOCKIO
87 default y
88
82config B43_NPHY 89config B43_NPHY
83 bool "Pre IEEE 802.11n support (BROKEN)" 90 bool "Pre IEEE 802.11n support (BROKEN)"
84 depends on B43 && EXPERIMENTAL && BROKEN 91 depends on B43 && EXPERIMENTAL && BROKEN
@@ -130,4 +137,12 @@ config B43_DEBUG
130 for production use. 137 for production use.
131 Only say Y, if you are debugging a problem in the b43 driver sourcecode. 138 Only say Y, if you are debugging a problem in the b43 driver sourcecode.
132 139
140config B43_FORCE_PIO
141 bool "Force usage of PIO instead of DMA"
142 depends on B43 && B43_DEBUG
143 ---help---
144 This will disable DMA and always enable PIO instead.
133 145
146 Say N!
147 This is only for debugging the PIO engine code. You do
148 _NOT_ want to enable this.
diff --git a/drivers/net/wireless/b43/b43.h b/drivers/net/wireless/b43/b43.h
index 6a6ab0f630e5..b8807fb12c92 100644
--- a/drivers/net/wireless/b43/b43.h
+++ b/drivers/net/wireless/b43/b43.h
@@ -702,6 +702,7 @@ struct b43_wldev {
702 bool radio_hw_enable; /* saved state of radio hardware enabled state */ 702 bool radio_hw_enable; /* saved state of radio hardware enabled state */
703 bool qos_enabled; /* TRUE, if QoS is used. */ 703 bool qos_enabled; /* TRUE, if QoS is used. */
704 bool hwcrypto_enabled; /* TRUE, if HW crypto acceleration is enabled. */ 704 bool hwcrypto_enabled; /* TRUE, if HW crypto acceleration is enabled. */
705 bool use_pio; /* TRUE if next init should use PIO */
705 706
706 /* PHY/Radio device. */ 707 /* PHY/Radio device. */
707 struct b43_phy phy; 708 struct b43_phy phy;
@@ -886,6 +887,12 @@ static inline bool b43_using_pio_transfers(struct b43_wldev *dev)
886 return dev->__using_pio_transfers; 887 return dev->__using_pio_transfers;
887} 888}
888 889
890#ifdef CONFIG_B43_FORCE_PIO
891# define B43_PIO_DEFAULT 1
892#else
893# define B43_PIO_DEFAULT 0
894#endif
895
889/* Message printing */ 896/* Message printing */
890void b43info(struct b43_wl *wl, const char *fmt, ...) 897void b43info(struct b43_wl *wl, const char *fmt, ...)
891 __attribute__ ((format(printf, 2, 3))); 898 __attribute__ ((format(printf, 2, 3)));
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
index aa33d741e5e6..1521b1e78d21 100644
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -107,9 +107,9 @@ int b43_modparam_verbose = B43_VERBOSITY_DEFAULT;
107module_param_named(verbose, b43_modparam_verbose, int, 0644); 107module_param_named(verbose, b43_modparam_verbose, int, 0644);
108MODULE_PARM_DESC(verbose, "Log message verbosity: 0=error, 1=warn, 2=info(default), 3=debug"); 108MODULE_PARM_DESC(verbose, "Log message verbosity: 0=error, 1=warn, 2=info(default), 3=debug");
109 109
110static int modparam_pio; 110int b43_modparam_pio = B43_PIO_DEFAULT;
111module_param_named(pio, modparam_pio, int, 0444); 111module_param_named(pio, b43_modparam_pio, int, 0644);
112MODULE_PARM_DESC(pio, "enable(1) / disable(0) PIO mode"); 112MODULE_PARM_DESC(pio, "Use PIO accesses by default: 0=DMA, 1=PIO");
113 113
114static const struct ssb_device_id b43_ssb_tbl[] = { 114static const struct ssb_device_id b43_ssb_tbl[] = {
115 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5), 115 SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5),
@@ -1804,8 +1804,9 @@ static void b43_do_interrupt_thread(struct b43_wldev *dev)
1804 dma_reason[4], dma_reason[5]); 1804 dma_reason[4], dma_reason[5]);
1805 b43err(dev->wl, "This device does not support DMA " 1805 b43err(dev->wl, "This device does not support DMA "
1806 "on your system. Please use PIO instead.\n"); 1806 "on your system. Please use PIO instead.\n");
1807 b43err(dev->wl, "Unload the b43 module and reload " 1807 /* Fall back to PIO transfers if we get fatal DMA errors! */
1808 "with 'pio=1'\n"); 1808 dev->use_pio = 1;
1809 b43_controller_restart(dev, "DMA error");
1809 return; 1810 return;
1810 } 1811 }
1811 if (merged_dma_reason & B43_DMAIRQ_NONFATALMASK) { 1812 if (merged_dma_reason & B43_DMAIRQ_NONFATALMASK) {
@@ -4357,7 +4358,7 @@ static int b43_wireless_core_init(struct b43_wldev *dev)
4357 4358
4358 if ((dev->dev->bus->bustype == SSB_BUSTYPE_PCMCIA) || 4359 if ((dev->dev->bus->bustype == SSB_BUSTYPE_PCMCIA) ||
4359 (dev->dev->bus->bustype == SSB_BUSTYPE_SDIO) || 4360 (dev->dev->bus->bustype == SSB_BUSTYPE_SDIO) ||
4360 modparam_pio) { 4361 dev->use_pio) {
4361 dev->__using_pio_transfers = 1; 4362 dev->__using_pio_transfers = 1;
4362 err = b43_pio_init(dev); 4363 err = b43_pio_init(dev);
4363 } else { 4364 } else {
@@ -4824,6 +4825,7 @@ static int b43_one_core_attach(struct ssb_device *dev, struct b43_wl *wl)
4824 if (!wldev) 4825 if (!wldev)
4825 goto out; 4826 goto out;
4826 4827
4828 wldev->use_pio = b43_modparam_pio;
4827 wldev->dev = dev; 4829 wldev->dev = dev;
4828 wldev->wl = wl; 4830 wldev->wl = wl;
4829 b43_set_status(wldev, B43_STAT_UNINIT); 4831 b43_set_status(wldev, B43_STAT_UNINIT);
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index af60b178ad4b..6aeb82b6992f 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -2941,21 +2941,10 @@ static int iwl_mac_ampdu_action(struct ieee80211_hw *hw,
2941 return ret; 2941 return ret;
2942 case IEEE80211_AMPDU_TX_START: 2942 case IEEE80211_AMPDU_TX_START:
2943 IWL_DEBUG_HT(priv, "start Tx\n"); 2943 IWL_DEBUG_HT(priv, "start Tx\n");
2944 ret = iwl_tx_agg_start(priv, sta->addr, tid, ssn); 2944 return iwl_tx_agg_start(priv, sta->addr, tid, ssn);
2945 if (ret == 0) {
2946 priv->agg_tids_count++;
2947 IWL_DEBUG_HT(priv, "priv->agg_tids_count = %u\n",
2948 priv->agg_tids_count);
2949 }
2950 return ret;
2951 case IEEE80211_AMPDU_TX_STOP: 2945 case IEEE80211_AMPDU_TX_STOP:
2952 IWL_DEBUG_HT(priv, "stop Tx\n"); 2946 IWL_DEBUG_HT(priv, "stop Tx\n");
2953 ret = iwl_tx_agg_stop(priv, sta->addr, tid); 2947 ret = iwl_tx_agg_stop(priv, sta->addr, tid);
2954 if ((ret == 0) && (priv->agg_tids_count > 0)) {
2955 priv->agg_tids_count--;
2956 IWL_DEBUG_HT(priv, "priv->agg_tids_count = %u\n",
2957 priv->agg_tids_count);
2958 }
2959 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) 2948 if (test_bit(STATUS_EXIT_PENDING, &priv->status))
2960 return 0; 2949 return 0;
2961 else 2950 else
@@ -3376,7 +3365,6 @@ static int iwl_init_drv(struct iwl_priv *priv)
3376 priv->iw_mode = NL80211_IFTYPE_STATION; 3365 priv->iw_mode = NL80211_IFTYPE_STATION;
3377 priv->current_ht_config.smps = IEEE80211_SMPS_STATIC; 3366 priv->current_ht_config.smps = IEEE80211_SMPS_STATIC;
3378 priv->missed_beacon_threshold = IWL_MISSED_BEACON_THRESHOLD_DEF; 3367 priv->missed_beacon_threshold = IWL_MISSED_BEACON_THRESHOLD_DEF;
3379 priv->agg_tids_count = 0;
3380 3368
3381 /* initialize force reset */ 3369 /* initialize force reset */
3382 priv->force_reset[IWL_RF_RESET].reset_duration = 3370 priv->force_reset[IWL_RF_RESET].reset_duration =
diff --git a/drivers/net/wireless/iwlwifi/iwl-commands.h b/drivers/net/wireless/iwlwifi/iwl-commands.h
index ab3c77b92cc8..6383d9f8c9b3 100644
--- a/drivers/net/wireless/iwlwifi/iwl-commands.h
+++ b/drivers/net/wireless/iwlwifi/iwl-commands.h
@@ -2623,6 +2623,7 @@ struct iwl_ssid_ie {
2623#define TX_CMD_LIFE_TIME_INFINITE cpu_to_le32(0xFFFFFFFF) 2623#define TX_CMD_LIFE_TIME_INFINITE cpu_to_le32(0xFFFFFFFF)
2624#define IWL_GOOD_CRC_TH cpu_to_le16(1) 2624#define IWL_GOOD_CRC_TH cpu_to_le16(1)
2625#define IWL_MAX_SCAN_SIZE 1024 2625#define IWL_MAX_SCAN_SIZE 1024
2626#define IWL_MAX_CMD_SIZE 4096
2626#define IWL_MAX_PROBE_REQUEST 200 2627#define IWL_MAX_PROBE_REQUEST 200
2627 2628
2628/* 2629/*
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
index 7914d65a5a55..ab891b958042 100644
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@ -1084,9 +1084,6 @@ struct iwl_priv {
1084 /* storing the jiffies when the plcp error rate is received */ 1084 /* storing the jiffies when the plcp error rate is received */
1085 unsigned long plcp_jiffies; 1085 unsigned long plcp_jiffies;
1086 1086
1087 /* reporting the number of tids has AGG on. 0 means no AGGREGATION */
1088 u8 agg_tids_count;
1089
1090 /* force reset */ 1087 /* force reset */
1091 struct iwl_force_reset force_reset[IWL_MAX_FORCE_RESET]; 1088 struct iwl_force_reset force_reset[IWL_MAX_FORCE_RESET];
1092 1089
diff --git a/drivers/net/wireless/iwlwifi/iwl-rx.c b/drivers/net/wireless/iwlwifi/iwl-rx.c
index 0d09f571e185..df257bc15f49 100644
--- a/drivers/net/wireless/iwlwifi/iwl-rx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-rx.c
@@ -616,11 +616,6 @@ static void iwl_accumulative_statistics(struct iwl_priv *priv,
616 616
617#define REG_RECALIB_PERIOD (60) 617#define REG_RECALIB_PERIOD (60)
618 618
619/* the threshold ratio of actual_ack_cnt to expected_ack_cnt in percent */
620#define ACK_CNT_RATIO (50)
621#define BA_TIMEOUT_CNT (5)
622#define BA_TIMEOUT_MAX (16)
623
624#define PLCP_MSG "plcp_err exceeded %u, %u, %u, %u, %u, %d, %u mSecs\n" 619#define PLCP_MSG "plcp_err exceeded %u, %u, %u, %u, %u, %d, %u mSecs\n"
625void iwl_rx_statistics(struct iwl_priv *priv, 620void iwl_rx_statistics(struct iwl_priv *priv,
626 struct iwl_rx_mem_buffer *rxb) 621 struct iwl_rx_mem_buffer *rxb)
@@ -630,9 +625,6 @@ void iwl_rx_statistics(struct iwl_priv *priv,
630 int combined_plcp_delta; 625 int combined_plcp_delta;
631 unsigned int plcp_msec; 626 unsigned int plcp_msec;
632 unsigned long plcp_received_jiffies; 627 unsigned long plcp_received_jiffies;
633 int actual_ack_cnt_delta;
634 int expected_ack_cnt_delta;
635 int ba_timeout_delta;
636 628
637 IWL_DEBUG_RX(priv, "Statistics notification received (%d vs %d).\n", 629 IWL_DEBUG_RX(priv, "Statistics notification received (%d vs %d).\n",
638 (int)sizeof(priv->statistics), 630 (int)sizeof(priv->statistics),
@@ -647,44 +639,6 @@ void iwl_rx_statistics(struct iwl_priv *priv,
647#ifdef CONFIG_IWLWIFI_DEBUG 639#ifdef CONFIG_IWLWIFI_DEBUG
648 iwl_accumulative_statistics(priv, (__le32 *)&pkt->u.stats); 640 iwl_accumulative_statistics(priv, (__le32 *)&pkt->u.stats);
649#endif 641#endif
650 actual_ack_cnt_delta = le32_to_cpu(pkt->u.stats.tx.actual_ack_cnt) -
651 le32_to_cpu(priv->statistics.tx.actual_ack_cnt);
652 expected_ack_cnt_delta = le32_to_cpu(
653 pkt->u.stats.tx.expected_ack_cnt) -
654 le32_to_cpu(priv->statistics.tx.expected_ack_cnt);
655 ba_timeout_delta = le32_to_cpu(
656 pkt->u.stats.tx.agg.ba_timeout) -
657 le32_to_cpu(priv->statistics.tx.agg.ba_timeout);
658 if ((priv->agg_tids_count > 0) &&
659 (expected_ack_cnt_delta > 0) &&
660 (((actual_ack_cnt_delta * 100) / expected_ack_cnt_delta) <
661 ACK_CNT_RATIO) &&
662 (ba_timeout_delta > BA_TIMEOUT_CNT)) {
663 IWL_DEBUG_RADIO(priv,
664 "actual_ack_cnt delta = %d, expected_ack_cnt = %d\n",
665 actual_ack_cnt_delta, expected_ack_cnt_delta);
666
667#ifdef CONFIG_IWLWIFI_DEBUG
668 IWL_DEBUG_RADIO(priv, "rx_detected_cnt delta = %d\n",
669 priv->delta_statistics.tx.rx_detected_cnt);
670 IWL_DEBUG_RADIO(priv,
671 "ack_or_ba_timeout_collision delta = %d\n",
672 priv->delta_statistics.tx.ack_or_ba_timeout_collision);
673#endif
674 IWL_DEBUG_RADIO(priv, "agg ba_timeout delta = %d\n",
675 ba_timeout_delta);
676 if ((actual_ack_cnt_delta == 0) &&
677 (ba_timeout_delta >=
678 BA_TIMEOUT_MAX)) {
679 IWL_DEBUG_RADIO(priv,
680 "call iwl_force_reset(IWL_FW_RESET)\n");
681 iwl_force_reset(priv, IWL_FW_RESET);
682 } else {
683 IWL_DEBUG_RADIO(priv,
684 "call iwl_force_reset(IWL_RF_RESET)\n");
685 iwl_force_reset(priv, IWL_RF_RESET);
686 }
687 }
688 /* 642 /*
689 * check for plcp_err and trigger radio reset if it exceeds 643 * check for plcp_err and trigger radio reset if it exceeds
690 * the plcp error threshold plcp_delta. 644 * the plcp error threshold plcp_delta.
diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c
index 10701b8eef23..1ed5206721ec 100644
--- a/drivers/net/wireless/iwlwifi/iwl-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-tx.c
@@ -364,7 +364,7 @@ int iwl_tx_queue_init(struct iwl_priv *priv, struct iwl_tx_queue *txq,
364 for (i = 0; i < actual_slots; i++) { 364 for (i = 0; i < actual_slots; i++) {
365 /* only happens for cmd queue */ 365 /* only happens for cmd queue */
366 if (i == slots_num) 366 if (i == slots_num)
367 len += IWL_MAX_SCAN_SIZE; 367 len = IWL_MAX_CMD_SIZE;
368 368
369 txq->cmd[i] = kmalloc(len, GFP_KERNEL); 369 txq->cmd[i] = kmalloc(len, GFP_KERNEL);
370 if (!txq->cmd[i]) 370 if (!txq->cmd[i])
@@ -1023,9 +1023,12 @@ int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
1023 1023
1024 /* If any of the command structures end up being larger than 1024 /* If any of the command structures end up being larger than
1025 * the TFD_MAX_PAYLOAD_SIZE, and it sent as a 'small' command then 1025 * the TFD_MAX_PAYLOAD_SIZE, and it sent as a 'small' command then
1026 * we will need to increase the size of the TFD entries */ 1026 * we will need to increase the size of the TFD entries
1027 * Also, check to see if command buffer should not exceed the size
1028 * of device_cmd and max_cmd_size. */
1027 BUG_ON((fix_size > TFD_MAX_PAYLOAD_SIZE) && 1029 BUG_ON((fix_size > TFD_MAX_PAYLOAD_SIZE) &&
1028 !(cmd->flags & CMD_SIZE_HUGE)); 1030 !(cmd->flags & CMD_SIZE_HUGE));
1031 BUG_ON(fix_size > IWL_MAX_CMD_SIZE);
1029 1032
1030 if (iwl_is_rfkill(priv) || iwl_is_ctkill(priv)) { 1033 if (iwl_is_rfkill(priv) || iwl_is_ctkill(priv)) {
1031 IWL_WARN(priv, "Not sending command - %s KILL\n", 1034 IWL_WARN(priv, "Not sending command - %s KILL\n",
@@ -1069,8 +1072,8 @@ int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
1069 if (cmd->flags & CMD_SIZE_HUGE) 1072 if (cmd->flags & CMD_SIZE_HUGE)
1070 out_cmd->hdr.sequence |= SEQ_HUGE_FRAME; 1073 out_cmd->hdr.sequence |= SEQ_HUGE_FRAME;
1071 len = sizeof(struct iwl_device_cmd); 1074 len = sizeof(struct iwl_device_cmd);
1072 len += (idx == TFD_CMD_SLOTS) ? IWL_MAX_SCAN_SIZE : 0; 1075 if (idx == TFD_CMD_SLOTS)
1073 1076 len = IWL_MAX_CMD_SIZE;
1074 1077
1075#ifdef CONFIG_IWLWIFI_DEBUG 1078#ifdef CONFIG_IWLWIFI_DEBUG
1076 switch (out_cmd->hdr.cmd) { 1079 switch (out_cmd->hdr.cmd) {
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 682d02521bbc..7a2aea56f195 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -137,7 +137,7 @@ static inline bool dev_xmit_complete(int rc)
137 * used. 137 * used.
138 */ 138 */
139 139
140#if defined(CONFIG_WLAN_80211) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) 140#if defined(CONFIG_WLAN) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
141# if defined(CONFIG_MAC80211_MESH) 141# if defined(CONFIG_MAC80211_MESH)
142# define LL_MAX_HEADER 128 142# define LL_MAX_HEADER 128
143# else 143# else
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index ec8f767ba95b..06c33b68d8e5 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -558,8 +558,12 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
558 558
559 debugfs_hw_add(local); 559 debugfs_hw_add(local);
560 560
561 /*
562 * if the driver doesn't specify a max listen interval we
563 * use 5 which should be a safe default
564 */
561 if (local->hw.max_listen_interval == 0) 565 if (local->hw.max_listen_interval == 0)
562 local->hw.max_listen_interval = 1; 566 local->hw.max_listen_interval = 5;
563 567
564 local->hw.conf.listen_interval = local->hw.max_listen_interval; 568 local->hw.conf.listen_interval = local->hw.max_listen_interval;
565 569
diff --git a/net/mac80211/work.c b/net/mac80211/work.c
index 7e708d5c88b4..1e1ea3007b06 100644
--- a/net/mac80211/work.c
+++ b/net/mac80211/work.c
@@ -869,6 +869,7 @@ static void ieee80211_work_work(struct work_struct *work)
869 break; 869 break;
870 case IEEE80211_WORK_ABORT: 870 case IEEE80211_WORK_ABORT:
871 rma = WORK_ACT_TIMEOUT; 871 rma = WORK_ACT_TIMEOUT;
872 break;
872 case IEEE80211_WORK_DIRECT_PROBE: 873 case IEEE80211_WORK_DIRECT_PROBE:
873 rma = ieee80211_direct_probe(wk); 874 rma = ieee80211_direct_probe(wk);
874 break; 875 break;