diff options
Diffstat (limited to 'package/mac80211/patches/424-mac80211-make-retry-limits-available.patch')
-rw-r--r-- | package/mac80211/patches/424-mac80211-make-retry-limits-available.patch | 506 |
1 files changed, 506 insertions, 0 deletions
diff --git a/package/mac80211/patches/424-mac80211-make-retry-limits-available.patch b/package/mac80211/patches/424-mac80211-make-retry-limits-available.patch new file mode 100644 index 000000000..084ed9a13 --- /dev/null +++ b/package/mac80211/patches/424-mac80211-make-retry-limits-available.patch @@ -0,0 +1,506 @@ +--- + drivers/net/wireless/ath9k/main.c | 1 + drivers/net/wireless/b43/main.c | 67 +++++++++++++----------------- + drivers/net/wireless/b43legacy/main.c | 70 ++++++++++++++------------------ + drivers/net/wireless/rt2x00/rt2400pci.c | 2 + drivers/net/wireless/rt2x00/rt2500pci.c | 2 + drivers/net/wireless/rt2x00/rt2x00.h | 3 + + drivers/net/wireless/rt2x00/rt2x00mac.c | 9 ++++ + drivers/net/wireless/rt2x00/rt61pci.c | 2 + drivers/net/wireless/rt2x00/rt73usb.c | 2 + include/net/mac80211.h | 14 ++++-- + net/mac80211/debugfs.c | 4 - + net/mac80211/ieee80211_i.h | 2 + net/mac80211/main.c | 4 - + net/mac80211/tx.c | 4 - + net/mac80211/wext.c | 28 +++++------- + 15 files changed, 106 insertions(+), 108 deletions(-) + +--- everything.orig/include/net/mac80211.h 2008-10-10 23:27:46.000000000 +0200 ++++ everything/include/net/mac80211.h 2008-10-10 23:31:21.000000000 +0200 +@@ -473,6 +473,7 @@ static inline int __deprecated __IEEE802 + * @IEEE80211_CONF_CHANGE_PS: the PS flag changed + * @IEEE80211_CONF_CHANGE_POWER: the TX power changed + * @IEEE80211_CONF_CHANGE_CHANNEL: the channel changed ++ * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed + */ + enum ieee80211_conf_changed { + IEEE80211_CONF_CHANGE_RADIO_ENABLED = BIT(0), +@@ -482,6 +483,7 @@ enum ieee80211_conf_changed { + IEEE80211_CONF_CHANGE_PS = BIT(4), + IEEE80211_CONF_CHANGE_POWER = BIT(5), + IEEE80211_CONF_CHANGE_CHANNEL = BIT(6), ++ IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7), + }; + + /** +@@ -497,6 +499,12 @@ enum ieee80211_conf_changed { + * @ht_cap: describes current self configuration of 802.11n HT capabilities + * @ht_bss_conf: describes current BSS configuration of 802.11n HT parameters + * @channel: the channel to tune to ++ * @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame ++ * (a frame not RTS protected), called "dot11LongRetryLimit" in 802.11, ++ * but actually means the number of transmissions not the number of retries ++ * @short_frame_max_tx_count: Maximum number of transmissions for a "short" frame, ++ * called "dot11ShortRetryLimit" in 802.11, but actually means the number ++ * of transmissions not the number of retries + */ + struct ieee80211_conf { + int beacon_int; +@@ -506,6 +514,8 @@ struct ieee80211_conf { + u16 listen_interval; + bool radio_enabled; + ++ u8 long_frame_max_tx_count, short_frame_max_tx_count; ++ + struct ieee80211_channel *channel; + + struct ieee80211_sta_ht_cap ht_cap; +@@ -1192,8 +1202,6 @@ enum ieee80211_ampdu_mlme_action { + * the device does fragmentation by itself; if this method is assigned then + * the stack will not do fragmentation. + * +- * @set_retry_limit: Configuration of retry limits (if device needs it) +- * + * @sta_notify: Notifies low level driver about addition or removal + * of assocaited station or AP. + * +@@ -1263,8 +1271,6 @@ struct ieee80211_ops { + u32 *iv32, u16 *iv16); + int (*set_rts_threshold)(struct ieee80211_hw *hw, u32 value); + int (*set_frag_threshold)(struct ieee80211_hw *hw, u32 value); +- int (*set_retry_limit)(struct ieee80211_hw *hw, +- u32 short_retry, u32 long_retr); + void (*sta_notify)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, + enum sta_notify_cmd, struct ieee80211_sta *sta); + int (*conf_tx)(struct ieee80211_hw *hw, u16 queue, +--- everything.orig/net/mac80211/ieee80211_i.h 2008-10-10 23:27:46.000000000 +0200 ++++ everything/net/mac80211/ieee80211_i.h 2008-10-10 23:31:22.000000000 +0200 +@@ -632,8 +632,6 @@ struct ieee80211_local { + + int rts_threshold; + int fragmentation_threshold; +- int short_retry_limit; /* dot11ShortRetryLimit */ +- int long_retry_limit; /* dot11LongRetryLimit */ + + struct crypto_blkcipher *wep_tx_tfm; + struct crypto_blkcipher *wep_rx_tfm; +--- everything.orig/net/mac80211/main.c 2008-10-10 23:27:46.000000000 +0200 ++++ everything/net/mac80211/main.c 2008-10-10 23:31:22.000000000 +0200 +@@ -673,8 +673,8 @@ struct ieee80211_hw *ieee80211_alloc_hw( + + local->rts_threshold = IEEE80211_MAX_RTS_THRESHOLD; + local->fragmentation_threshold = IEEE80211_MAX_FRAG_THRESHOLD; +- local->short_retry_limit = 7; +- local->long_retry_limit = 4; ++ local->hw.conf.long_frame_max_tx_count = 4; ++ local->hw.conf.short_frame_max_tx_count = 7; + local->hw.conf.radio_enabled = true; + + INIT_LIST_HEAD(&local->interfaces); +--- everything.orig/net/mac80211/wext.c 2008-10-10 23:27:46.000000000 +0200 ++++ everything/net/mac80211/wext.c 2008-10-10 23:31:22.000000000 +0200 +@@ -802,21 +802,16 @@ static int ieee80211_ioctl_siwretry(stru + (retry->flags & IW_RETRY_TYPE) != IW_RETRY_LIMIT) + return -EINVAL; + +- if (retry->flags & IW_RETRY_MAX) +- local->long_retry_limit = retry->value; +- else if (retry->flags & IW_RETRY_MIN) +- local->short_retry_limit = retry->value; +- else { +- local->long_retry_limit = retry->value; +- local->short_retry_limit = retry->value; ++ if (retry->flags & IW_RETRY_MAX) { ++ local->hw.conf.long_frame_max_tx_count = retry->value; ++ } else if (retry->flags & IW_RETRY_MIN) { ++ local->hw.conf.short_frame_max_tx_count = retry->value; ++ } else { ++ local->hw.conf.long_frame_max_tx_count = retry->value; ++ local->hw.conf.short_frame_max_tx_count = retry->value; + } + +- if (local->ops->set_retry_limit) { +- return local->ops->set_retry_limit( +- local_to_hw(local), +- local->short_retry_limit, +- local->long_retry_limit); +- } ++ ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_RETRY_LIMITS); + + return 0; + } +@@ -833,14 +828,15 @@ static int ieee80211_ioctl_giwretry(stru + /* first return min value, iwconfig will ask max value + * later if needed */ + retry->flags |= IW_RETRY_LIMIT; +- retry->value = local->short_retry_limit; +- if (local->long_retry_limit != local->short_retry_limit) ++ retry->value = local->hw.conf.short_frame_max_tx_count; ++ if (local->hw.conf.long_frame_max_tx_count != ++ local->hw.conf.short_frame_max_tx_count) + retry->flags |= IW_RETRY_MIN; + return 0; + } + if (retry->flags & IW_RETRY_MAX) { + retry->flags = IW_RETRY_LIMIT | IW_RETRY_MAX; +- retry->value = local->long_retry_limit; ++ retry->value = local->hw.conf.long_frame_max_tx_count; + } + + return 0; +--- everything.orig/drivers/net/wireless/ath9k/main.c 2008-10-10 23:27:47.000000000 +0200 ++++ everything/drivers/net/wireless/ath9k/main.c 2008-10-10 23:31:23.000000000 +0200 +@@ -1657,7 +1657,6 @@ static struct ieee80211_ops ath9k_ops = + .get_tkip_seq = NULL, + .set_rts_threshold = NULL, + .set_frag_threshold = NULL, +- .set_retry_limit = NULL, + .get_tsf = ath9k_get_tsf, + .reset_tsf = ath9k_reset_tsf, + .tx_last_beacon = NULL, +--- everything.orig/drivers/net/wireless/b43/main.c 2008-10-10 23:27:47.000000000 +0200 ++++ everything/drivers/net/wireless/b43/main.c 2008-10-10 23:31:23.000000000 +0200 +@@ -3320,6 +3320,22 @@ init_failure: + return err; + } + ++/* Write the short and long frame retry limit values. */ ++static void b43_set_retry_limits(struct b43_wldev *dev, ++ unsigned int short_retry, ++ unsigned int long_retry) ++{ ++ /* The retry limit is a 4-bit counter. Enforce this to avoid overflowing ++ * the chip-internal counter. */ ++ short_retry = min(short_retry, (unsigned int)0xF); ++ long_retry = min(long_retry, (unsigned int)0xF); ++ ++ b43_shm_write16(dev, B43_SHM_SCRATCH, B43_SHM_SC_SRLIMIT, ++ short_retry); ++ b43_shm_write16(dev, B43_SHM_SCRATCH, B43_SHM_SC_LRLIMIT, ++ long_retry); ++} ++ + static int b43_op_config(struct ieee80211_hw *hw, u32 changed) + { + struct b43_wl *wl = hw_to_b43_wl(hw); +@@ -3333,6 +3349,20 @@ static int b43_op_config(struct ieee8021 + + mutex_lock(&wl->mutex); + ++ if (changed & IEEE80211_CONF_CHANGE_RETRY_LIMITS) { ++ dev = wl->current_dev; ++ if (unlikely(!dev || (b43_status(dev) < B43_STAT_INITIALIZED))) { ++ err = -ENODEV; ++ goto out_unlock_mutex; ++ } ++ b43_set_retry_limits(dev, conf->short_frame_max_tx_count, ++ conf->long_frame_max_tx_count); ++ changed &= ~IEEE80211_CONF_CHANGE_RETRY_LIMITS; ++ } ++ ++ if (!changed) ++ goto out_unlock_mutex; ++ + /* Switch the band (if necessary). This might change the active core. */ + err = b43_switch_band(wl, conf->channel); + if (err) +@@ -3860,22 +3890,6 @@ static void b43_imcfglo_timeouts_workaro + #endif /* CONFIG_SSB_DRIVER_PCICORE */ + } + +-/* Write the short and long frame retry limit values. */ +-static void b43_set_retry_limits(struct b43_wldev *dev, +- unsigned int short_retry, +- unsigned int long_retry) +-{ +- /* The retry limit is a 4-bit counter. Enforce this to avoid overflowing +- * the chip-internal counter. */ +- short_retry = min(short_retry, (unsigned int)0xF); +- long_retry = min(long_retry, (unsigned int)0xF); +- +- b43_shm_write16(dev, B43_SHM_SCRATCH, B43_SHM_SC_SRLIMIT, +- short_retry); +- b43_shm_write16(dev, B43_SHM_SCRATCH, B43_SHM_SC_LRLIMIT, +- long_retry); +-} +- + static void b43_set_synth_pu_delay(struct b43_wldev *dev, bool idle) + { + u16 pu_delay; +@@ -4196,26 +4210,6 @@ static void b43_op_stop(struct ieee80211 + cancel_work_sync(&(wl->txpower_adjust_work)); + } + +-static int b43_op_set_retry_limit(struct ieee80211_hw *hw, +- u32 short_retry_limit, u32 long_retry_limit) +-{ +- struct b43_wl *wl = hw_to_b43_wl(hw); +- struct b43_wldev *dev; +- int err = 0; +- +- mutex_lock(&wl->mutex); +- dev = wl->current_dev; +- if (unlikely(!dev || (b43_status(dev) < B43_STAT_INITIALIZED))) { +- err = -ENODEV; +- goto out_unlock; +- } +- b43_set_retry_limits(dev, short_retry_limit, long_retry_limit); +-out_unlock: +- mutex_unlock(&wl->mutex); +- +- return err; +-} +- + static int b43_op_beacon_set_tim(struct ieee80211_hw *hw, + struct ieee80211_sta *sta, bool set) + { +@@ -4252,7 +4246,6 @@ static const struct ieee80211_ops b43_hw + .get_tx_stats = b43_op_get_tx_stats, + .start = b43_op_start, + .stop = b43_op_stop, +- .set_retry_limit = b43_op_set_retry_limit, + .set_tim = b43_op_beacon_set_tim, + .sta_notify = b43_op_sta_notify, + }; +--- everything.orig/drivers/net/wireless/b43legacy/main.c 2008-10-10 23:27:47.000000000 +0200 ++++ everything/drivers/net/wireless/b43legacy/main.c 2008-10-10 23:31:23.000000000 +0200 +@@ -2556,6 +2556,20 @@ init_failure: + return err; + } + ++/* Write the short and long frame retry limit values. */ ++static void b43legacy_set_retry_limits(struct b43legacy_wldev *dev, ++ unsigned int short_retry, ++ unsigned int long_retry) ++{ ++ /* The retry limit is a 4-bit counter. Enforce this to avoid overflowing ++ * the chip-internal counter. */ ++ short_retry = min(short_retry, (unsigned int)0xF); ++ long_retry = min(long_retry, (unsigned int)0xF); ++ ++ b43legacy_shm_write16(dev, B43legacy_SHM_WIRELESS, 0x0006, short_retry); ++ b43legacy_shm_write16(dev, B43legacy_SHM_WIRELESS, 0x0007, long_retry); ++} ++ + static int b43legacy_op_dev_config(struct ieee80211_hw *hw, + u32 changed) + { +@@ -2570,10 +2584,27 @@ static int b43legacy_op_dev_config(struc + int err = 0; + u32 savedirqs; + ++ mutex_lock(&wl->mutex); ++ dev = wl->current_dev; ++ ++ if (changed & IEEE80211_CONF_CHANGE_RETRY_LIMITS) { ++ if (unlikely(!dev || ++ (b43legacy_status(dev) < B43legacy_STAT_INITIALIZED))) { ++ err = -ENODEV; ++ goto out_unlock_mutex; ++ } ++ b43legacy_set_retry_limits(dev, ++ conf->short_frame_max_tx_count, ++ conf->long_frame_max_tx_count); ++ changed &= ~IEEE80211_CONF_CHANGE_RETRY_LIMITS; ++ } ++ ++ if (!changed) ++ goto out_unlock_mutex; ++ + antenna_tx = B43legacy_ANTENNA_DEFAULT; + antenna_rx = B43legacy_ANTENNA_DEFAULT; + +- mutex_lock(&wl->mutex); + dev = wl->current_dev; + phy = &dev->phy; + +@@ -2989,20 +3020,6 @@ static void b43legacy_imcfglo_timeouts_w + #endif /* CONFIG_SSB_DRIVER_PCICORE */ + } + +-/* Write the short and long frame retry limit values. */ +-static void b43legacy_set_retry_limits(struct b43legacy_wldev *dev, +- unsigned int short_retry, +- unsigned int long_retry) +-{ +- /* The retry limit is a 4-bit counter. Enforce this to avoid overflowing +- * the chip-internal counter. */ +- short_retry = min(short_retry, (unsigned int)0xF); +- long_retry = min(long_retry, (unsigned int)0xF); +- +- b43legacy_shm_write16(dev, B43legacy_SHM_WIRELESS, 0x0006, short_retry); +- b43legacy_shm_write16(dev, B43legacy_SHM_WIRELESS, 0x0007, long_retry); +-} +- + static void b43legacy_set_synth_pu_delay(struct b43legacy_wldev *dev, + bool idle) { + u16 pu_delay = 1050; +@@ -3367,28 +3384,6 @@ static void b43legacy_op_stop(struct iee + mutex_unlock(&wl->mutex); + } + +-static int b43legacy_op_set_retry_limit(struct ieee80211_hw *hw, +- u32 short_retry_limit, +- u32 long_retry_limit) +-{ +- struct b43legacy_wl *wl = hw_to_b43legacy_wl(hw); +- struct b43legacy_wldev *dev; +- int err = 0; +- +- mutex_lock(&wl->mutex); +- dev = wl->current_dev; +- if (unlikely(!dev || +- (b43legacy_status(dev) < B43legacy_STAT_INITIALIZED))) { +- err = -ENODEV; +- goto out_unlock; +- } +- b43legacy_set_retry_limits(dev, short_retry_limit, long_retry_limit); +-out_unlock: +- mutex_unlock(&wl->mutex); +- +- return err; +-} +- + static int b43legacy_op_beacon_set_tim(struct ieee80211_hw *hw, + struct ieee80211_sta *sta, bool set) + { +@@ -3414,7 +3409,6 @@ static const struct ieee80211_ops b43leg + .get_tx_stats = b43legacy_op_get_tx_stats, + .start = b43legacy_op_start, + .stop = b43legacy_op_stop, +- .set_retry_limit = b43legacy_op_set_retry_limit, + .set_tim = b43legacy_op_beacon_set_tim, + }; + +--- everything.orig/drivers/net/wireless/rt2x00/rt2400pci.c 2008-10-10 23:27:46.000000000 +0200 ++++ everything/drivers/net/wireless/rt2x00/rt2400pci.c 2008-10-10 23:27:48.000000000 +0200 +@@ -1576,7 +1576,6 @@ static const struct ieee80211_ops rt2400 + .config_interface = rt2x00mac_config_interface, + .configure_filter = rt2x00mac_configure_filter, + .get_stats = rt2x00mac_get_stats, +- .set_retry_limit = rt2400pci_set_retry_limit, + .bss_info_changed = rt2x00mac_bss_info_changed, + .conf_tx = rt2400pci_conf_tx, + .get_tx_stats = rt2x00mac_get_tx_stats, +@@ -1605,6 +1604,7 @@ static const struct rt2x00lib_ops rt2400 + .config_intf = rt2400pci_config_intf, + .config_erp = rt2400pci_config_erp, + .config = rt2400pci_config, ++ .set_retry_limit = rt2400pci_set_retry_limit, + }; + + static const struct data_queue_desc rt2400pci_queue_rx = { +--- everything.orig/drivers/net/wireless/rt2x00/rt2x00.h 2008-10-10 23:27:47.000000000 +0200 ++++ everything/drivers/net/wireless/rt2x00/rt2x00.h 2008-10-10 23:27:48.000000000 +0200 +@@ -599,6 +599,9 @@ struct rt2x00lib_ops { + #define CONFIG_UPDATE_SLOT_TIME ( 1 << 5 ) + #define CONFIG_UPDATE_BEACON_INT ( 1 << 6 ) + #define CONFIG_UPDATE_ALL 0xffff ++ ++ int (*set_retry_limit) (struct ieee80211_hw *hw, ++ u32 short_limit, u32 long_limit); + }; + + /* +--- everything.orig/drivers/net/wireless/rt2x00/rt2500pci.c 2008-10-10 23:27:46.000000000 +0200 ++++ everything/drivers/net/wireless/rt2x00/rt2500pci.c 2008-10-10 23:27:48.000000000 +0200 +@@ -1877,7 +1877,6 @@ static const struct ieee80211_ops rt2500 + .config_interface = rt2x00mac_config_interface, + .configure_filter = rt2x00mac_configure_filter, + .get_stats = rt2x00mac_get_stats, +- .set_retry_limit = rt2500pci_set_retry_limit, + .bss_info_changed = rt2x00mac_bss_info_changed, + .conf_tx = rt2x00mac_conf_tx, + .get_tx_stats = rt2x00mac_get_tx_stats, +@@ -1906,6 +1905,7 @@ static const struct rt2x00lib_ops rt2500 + .config_intf = rt2500pci_config_intf, + .config_erp = rt2500pci_config_erp, + .config = rt2500pci_config, ++ .set_retry_limit = rt2500pci_set_retry_limit, + }; + + static const struct data_queue_desc rt2500pci_queue_rx = { +--- everything.orig/drivers/net/wireless/rt2x00/rt61pci.c 2008-10-10 23:27:47.000000000 +0200 ++++ everything/drivers/net/wireless/rt2x00/rt61pci.c 2008-10-10 23:27:48.000000000 +0200 +@@ -2726,7 +2726,6 @@ static const struct ieee80211_ops rt61pc + .configure_filter = rt2x00mac_configure_filter, + .set_key = rt2x00mac_set_key, + .get_stats = rt2x00mac_get_stats, +- .set_retry_limit = rt61pci_set_retry_limit, + .bss_info_changed = rt2x00mac_bss_info_changed, + .conf_tx = rt61pci_conf_tx, + .get_tx_stats = rt2x00mac_get_tx_stats, +@@ -2759,6 +2758,7 @@ static const struct rt2x00lib_ops rt61pc + .config_intf = rt61pci_config_intf, + .config_erp = rt61pci_config_erp, + .config = rt61pci_config, ++ .set_retry_limit = rt61pci_set_retry_limit, + }; + + static const struct data_queue_desc rt61pci_queue_rx = { +--- everything.orig/drivers/net/wireless/rt2x00/rt73usb.c 2008-10-10 23:27:47.000000000 +0200 ++++ everything/drivers/net/wireless/rt2x00/rt73usb.c 2008-10-10 23:27:48.000000000 +0200 +@@ -2317,7 +2317,6 @@ static const struct ieee80211_ops rt73us + .configure_filter = rt2x00mac_configure_filter, + .set_key = rt2x00mac_set_key, + .get_stats = rt2x00mac_get_stats, +- .set_retry_limit = rt73usb_set_retry_limit, + .bss_info_changed = rt2x00mac_bss_info_changed, + .conf_tx = rt73usb_conf_tx, + .get_tx_stats = rt2x00mac_get_tx_stats, +@@ -2349,6 +2348,7 @@ static const struct rt2x00lib_ops rt73us + .config_intf = rt73usb_config_intf, + .config_erp = rt73usb_config_erp, + .config = rt73usb_config, ++ .set_retry_limit = rt73usb_set_retry_limit, + }; + + static const struct data_queue_desc rt73usb_queue_rx = { +--- everything.orig/drivers/net/wireless/rt2x00/rt2x00mac.c 2008-10-10 23:27:46.000000000 +0200 ++++ everything/drivers/net/wireless/rt2x00/rt2x00mac.c 2008-10-10 23:31:23.000000000 +0200 +@@ -349,6 +349,15 @@ int rt2x00mac_config(struct ieee80211_hw + if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags)) + return 0; + ++ if (changed & IEEE80211_CONF_CHANGE_RETRY_LIMITS) { ++ rt2x00dev->ops->lib->set_retry_limit(hw, ++ conf->short_frame_max_tx_count, ++ conf->long_frame_max_tx_count); ++ } ++ changed &= ~IEEE80211_CONF_CHANGE_RETRY_LIMITS; ++ if (!changed) ++ return 0; ++ + /* + * Only change device state when the radio is enabled. It does not + * matter what parameters we have configured when the radio is disabled +--- everything.orig/net/mac80211/debugfs.c 2008-10-10 23:27:46.000000000 +0200 ++++ everything/net/mac80211/debugfs.c 2008-10-10 23:27:48.000000000 +0200 +@@ -52,9 +52,9 @@ DEBUGFS_READONLY_FILE(rts_threshold, 20, + DEBUGFS_READONLY_FILE(fragmentation_threshold, 20, "%d", + local->fragmentation_threshold); + DEBUGFS_READONLY_FILE(short_retry_limit, 20, "%d", +- local->short_retry_limit); ++ local->hw.conf.short_frame_max_tx_count); + DEBUGFS_READONLY_FILE(long_retry_limit, 20, "%d", +- local->long_retry_limit); ++ local->hw.conf.long_frame_max_tx_count); + DEBUGFS_READONLY_FILE(total_ps_buffered, 20, "%d", + local->total_ps_buffered); + DEBUGFS_READONLY_FILE(wep_iv, 20, "%#06x", +--- everything.orig/net/mac80211/tx.c 2008-10-10 23:27:46.000000000 +0200 ++++ everything/net/mac80211/tx.c 2008-10-10 23:31:22.000000000 +0200 +@@ -507,10 +507,10 @@ ieee80211_tx_h_misc(struct ieee80211_tx_ + info->flags |= + IEEE80211_TX_CTL_LONG_RETRY_LIMIT; + info->control.retry_limit = +- tx->local->long_retry_limit; ++ tx->local->hw.conf.long_frame_max_tx_count - 1; + } else { + info->control.retry_limit = +- tx->local->short_retry_limit; ++ tx->local->hw.conf.short_frame_max_tx_count - 1; + } + } else { + info->control.retry_limit = 1; |