On Saturday 11 October 2008, Johannes Berg wrote: > Instead of having a separate callback, use the HW config callback > with a new flag to change retry limits. > > Not the cleanest of all patches in the driver area, but it should > not change anything wrt. how they work. For rt2x00 it looks good, the entire config handling in rt2x00 will be changed anyway because of your patch mac80211: introduce hw config change flags Because that one really makes things easier. :) Ivo > Signed-off-by: Johannes Berg <johannes@xxxxxxxxxxxxxxxx> > --- > 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; > > > -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html