| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- --- a/drivers/net/wireless/ath/ath9k/init.c
- +++ b/drivers/net/wireless/ath/ath9k/init.c
- @@ -57,7 +57,7 @@ MODULE_PARM_DESC(blink, "Enable LED blin
- * on 5 MHz steps, we support the channels which we know
- * we have calibration data for all cards though to make
- * this static */
- -static struct ieee80211_channel ath9k_2ghz_chantable[] = {
- +static const struct ieee80211_channel ath9k_2ghz_chantable[] = {
- CHAN2G(2412, 0), /* Channel 1 */
- CHAN2G(2417, 1), /* Channel 2 */
- CHAN2G(2422, 2), /* Channel 3 */
- @@ -78,7 +78,7 @@ static struct ieee80211_channel ath9k_2g
- * on 5 MHz steps, we support the channels which we know
- * we have calibration data for all cards though to make
- * this static */
- -static struct ieee80211_channel ath9k_5ghz_chantable[] = {
- +static const struct ieee80211_channel ath9k_5ghz_chantable[] = {
- /* _We_ call this UNII 1 */
- CHAN5G(5180, 14), /* Channel 36 */
- CHAN5G(5200, 15), /* Channel 40 */
- @@ -478,10 +478,17 @@ err:
- return -EIO;
- }
-
- -static void ath9k_init_channels_rates(struct ath_softc *sc)
- +static int ath9k_init_channels_rates(struct ath_softc *sc)
- {
- + void *channels;
- +
- if (test_bit(ATH9K_MODE_11G, sc->sc_ah->caps.wireless_modes)) {
- - sc->sbands[IEEE80211_BAND_2GHZ].channels = ath9k_2ghz_chantable;
- + channels = kmemdup(ath9k_2ghz_chantable,
- + sizeof(ath9k_2ghz_chantable), GFP_KERNEL);
- + if (!channels)
- + return -ENOMEM;
- +
- + sc->sbands[IEEE80211_BAND_2GHZ].channels = channels;
- sc->sbands[IEEE80211_BAND_2GHZ].band = IEEE80211_BAND_2GHZ;
- sc->sbands[IEEE80211_BAND_2GHZ].n_channels =
- ARRAY_SIZE(ath9k_2ghz_chantable);
- @@ -491,7 +498,15 @@ static void ath9k_init_channels_rates(st
- }
-
- if (test_bit(ATH9K_MODE_11A, sc->sc_ah->caps.wireless_modes)) {
- - sc->sbands[IEEE80211_BAND_5GHZ].channels = ath9k_5ghz_chantable;
- + channels = kmemdup(ath9k_5ghz_chantable,
- + sizeof(ath9k_5ghz_chantable), GFP_KERNEL);
- + if (!channels) {
- + if (sc->sbands[IEEE80211_BAND_2GHZ].channels)
- + kfree(sc->sbands[IEEE80211_BAND_2GHZ].channels);
- + return -ENOMEM;
- + }
- +
- + sc->sbands[IEEE80211_BAND_5GHZ].channels = channels;
- sc->sbands[IEEE80211_BAND_5GHZ].band = IEEE80211_BAND_5GHZ;
- sc->sbands[IEEE80211_BAND_5GHZ].n_channels =
- ARRAY_SIZE(ath9k_5ghz_chantable);
- @@ -500,6 +515,7 @@ static void ath9k_init_channels_rates(st
- sc->sbands[IEEE80211_BAND_5GHZ].n_bitrates =
- ARRAY_SIZE(ath9k_legacy_rates) - 4;
- }
- + return 0;
- }
-
- static void ath9k_init_misc(struct ath_softc *sc)
- @@ -602,8 +618,11 @@ static int ath9k_init_softc(u16 devid, s
- if (ret)
- goto err_btcoex;
-
- + ret = ath9k_init_channels_rates(sc);
- + if (ret)
- + goto err_btcoex;
- +
- ath9k_init_crypto(sc);
- - ath9k_init_channels_rates(sc);
- ath9k_init_misc(sc);
-
- return 0;
- @@ -784,6 +803,12 @@ static void ath9k_deinit_softc(struct at
- {
- int i = 0;
-
- + if (sc->sbands[IEEE80211_BAND_2GHZ].channels)
- + kfree(sc->sbands[IEEE80211_BAND_2GHZ].channels);
- +
- + if (sc->sbands[IEEE80211_BAND_5GHZ].channels)
- + kfree(sc->sbands[IEEE80211_BAND_5GHZ].channels);
- +
- if ((sc->btcoex.no_stomp_timer) &&
- sc->sc_ah->btcoex_hw.scheme == ATH_BTCOEX_CFG_3WIRE)
- ath_gen_timer_free(sc->sc_ah, sc->btcoex.no_stomp_timer);
|