summaryrefslogtreecommitdiff
path: root/package/mac80211/patches/424-mac80211-make-retry-limits-available.patch
diff options
context:
space:
mode:
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.patch506
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 0000000000..084ed9a132
--- /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;