[Madwifi-cvs] revision 1785 committed
Status: Beta
Brought to you by:
otaku
From: David K. <svn...@ma...> - 2006-10-27 17:28:57
|
Project : madwifi Revision : 1785 Author : dwhedon (David Kimdon) Date : 2006-10-27 19:28:43 +0200 (Fri, 27 Oct 2006) Log Message : Fix problem where modes with no available channels would show up in the list of supported modes. * ath/if_ath_d80211.c (ath_d80211_add_channels) : Do not allow for re-initialization of a mode, that should never happen. No need to zero num_channels, it is now guarenteed to be zero at this point. Only add modes that have non-zero num_channels. Affected Files: * branches/dadwifi/ath/if_ath_d80211.c updated Modified: branches/dadwifi/ath/if_ath_d80211.c =================================================================== --- branches/dadwifi/ath/if_ath_d80211.c 2006-10-27 06:49:30 UTC (rev 1784) +++ branches/dadwifi/ath/if_ath_d80211.c 2006-10-27 17:28:43 UTC (rev 1785) @@ -106,6 +106,7 @@ struct ath_softc *sc = ieee80211_dev_hw_data(dev); struct ath_hal *ah = sc->sc_ah; struct ieee80211_hw_modes *mode; + int error = 0; int i; for (i = 0; i < sc->sc_hw_conf.num_modes ; i++) { @@ -120,17 +121,12 @@ return -1; } mode = &sc->sc_hw_modes[sc->sc_hw_conf.num_modes]; - mode->mode = hw_mode; - sc->sc_hw_conf.num_modes++; } else { - mode = &sc->sc_hw_modes[i]; + DPRINTF(sc, ATH_DEBUG_ANY, + "%s: mode %d already initialized\n", __func__, hw_mode); + return -1; } - DPRINTF(sc, ATH_DEBUG_D80211, "%s: hal_chan %x hal_flags %x\n", __func__, - hal_nchan, hal_flags); - - mode->num_channels = 0; - for (i = 0; i < hal_nchan; i++) { HAL_CHANNEL *c = &hal_chans[i]; @@ -139,7 +135,8 @@ if (mode->num_channels == ATH_MAX_CHANNELS) { printk(KERN_ERR "channel list truncated\n"); - return -1; + error = -E2BIG; + goto done; } channel = &mode->channels[mode->num_channels]; @@ -158,7 +155,15 @@ } } - return 0; +done: + if (mode->num_channels != 0) { + DPRINTF(sc, ATH_DEBUG_D80211, "%s: hal_chan %x hal_flags %x\n", __func__, + hal_nchan, hal_flags); + mode->mode = hw_mode; + sc->sc_hw_conf.num_modes++; + } + + return error; } |