diff options
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.c | 10 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/phy.h | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/b43/Kconfig | 17 | ||||
| -rw-r--r-- | drivers/net/wireless/b43/b43.h | 7 | ||||
| -rw-r--r-- | drivers/net/wireless/b43/main.c | 14 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 14 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-commands.h | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-dev.h | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-rx.c | 46 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-tx.c | 11 |
10 files changed, 53 insertions, 73 deletions
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 | ||
| 1315 | static u32 ath9k_hw_def_ini_fixup(struct ath_hw *ah, | 1325 | static 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. | ||
| 83 | config B43_PIO | ||
| 84 | bool | ||
| 85 | depends on B43 | ||
| 86 | select SSB_BLOCKIO | ||
| 87 | default y | ||
| 88 | |||
| 82 | config B43_NPHY | 89 | config 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 | ||
| 140 | config 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 */ |
| 890 | void b43info(struct b43_wl *wl, const char *fmt, ...) | 897 | void 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; | |||
| 107 | module_param_named(verbose, b43_modparam_verbose, int, 0644); | 107 | module_param_named(verbose, b43_modparam_verbose, int, 0644); |
| 108 | MODULE_PARM_DESC(verbose, "Log message verbosity: 0=error, 1=warn, 2=info(default), 3=debug"); | 108 | MODULE_PARM_DESC(verbose, "Log message verbosity: 0=error, 1=warn, 2=info(default), 3=debug"); |
| 109 | 109 | ||
| 110 | static int modparam_pio; | 110 | int b43_modparam_pio = B43_PIO_DEFAULT; |
| 111 | module_param_named(pio, modparam_pio, int, 0444); | 111 | module_param_named(pio, b43_modparam_pio, int, 0644); |
| 112 | MODULE_PARM_DESC(pio, "enable(1) / disable(0) PIO mode"); | 112 | MODULE_PARM_DESC(pio, "Use PIO accesses by default: 0=DMA, 1=PIO"); |
| 113 | 113 | ||
| 114 | static const struct ssb_device_id b43_ssb_tbl[] = { | 114 | static 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" |
| 625 | void iwl_rx_statistics(struct iwl_priv *priv, | 620 | void 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) { |
