mac80211: Use a cfg80211_chan_def in ieee80211_hw_conf_chan
authorKarl Beldan <karl.beldan@rivierawaves.com>
Mon, 25 Mar 2013 15:26:57 +0000 (16:26 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 25 Mar 2013 18:19:35 +0000 (19:19 +0100)
Drivers that don't use chanctxes cannot perform VHT association because
they still use a "backward compatibility" pair of {ieee80211_channel,
nl80211_channel_type} in ieee80211_conf and ieee80211_local.

Signed-off-by: Karl Beldan <karl.beldan@rivierawaves.com>
[fix kernel-doc]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
70 files changed:
drivers/net/wireless/adm8211.c
drivers/net/wireless/at76c50x-usb.c
drivers/net/wireless/ath/ar5523/ar5523.c
drivers/net/wireless/ath/ath5k/base.c
drivers/net/wireless/ath/ath5k/mac80211-ops.c
drivers/net/wireless/ath/ath9k/beacon.c
drivers/net/wireless/ath/ath9k/calib.c
drivers/net/wireless/ath/ath9k/common.c
drivers/net/wireless/ath/ath9k/htc_drv_main.c
drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
drivers/net/wireless/ath/ath9k/hw.c
drivers/net/wireless/ath/ath9k/link.c
drivers/net/wireless/ath/ath9k/main.c
drivers/net/wireless/ath/ath9k/rc.c
drivers/net/wireless/ath/ath9k/recv.c
drivers/net/wireless/ath/carl9170/debug.c
drivers/net/wireless/ath/carl9170/mac.c
drivers/net/wireless/ath/carl9170/main.c
drivers/net/wireless/ath/carl9170/phy.c
drivers/net/wireless/b43/b43.h
drivers/net/wireless/b43/main.c
drivers/net/wireless/b43/phy_ht.c
drivers/net/wireless/b43/phy_lcn.c
drivers/net/wireless/b43/phy_n.c
drivers/net/wireless/b43legacy/main.c
drivers/net/wireless/brcm80211/brcmsmac/channel.c
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
drivers/net/wireless/brcm80211/brcmsmac/main.c
drivers/net/wireless/iwlegacy/3945-rs.c
drivers/net/wireless/iwlegacy/4965-rs.c
drivers/net/wireless/iwlegacy/common.c
drivers/net/wireless/iwlwifi/dvm/rs.c
drivers/net/wireless/iwlwifi/dvm/rxon.c
drivers/net/wireless/libertas_tf/main.c
drivers/net/wireless/mac80211_hwsim.c
drivers/net/wireless/mwl8k.c
drivers/net/wireless/p54/fwio.c
drivers/net/wireless/p54/main.c
drivers/net/wireless/p54/txrx.c
drivers/net/wireless/rt2x00/rt2800lib.c
drivers/net/wireless/rt2x00/rt2x00config.c
drivers/net/wireless/rt2x00/rt61pci.c
drivers/net/wireless/rt2x00/rt73usb.c
drivers/net/wireless/rtl818x/rtl8180/dev.c
drivers/net/wireless/rtl818x/rtl8180/grf5101.c
drivers/net/wireless/rtl818x/rtl8180/max2820.c
drivers/net/wireless/rtl818x/rtl8180/rtl8225.c
drivers/net/wireless/rtl818x/rtl8180/sa2400.c
drivers/net/wireless/rtl818x/rtl8187/dev.c
drivers/net/wireless/rtl818x/rtl8187/rtl8225.c
drivers/net/wireless/rtlwifi/base.c
drivers/net/wireless/rtlwifi/core.c
drivers/net/wireless/rtlwifi/rtl8192ce/trx.c
drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
drivers/net/wireless/rtlwifi/rtl8192de/trx.c
drivers/net/wireless/rtlwifi/rtl8192se/trx.c
drivers/net/wireless/rtlwifi/rtl8723ae/trx.c
drivers/net/wireless/ti/wl1251/main.c
drivers/net/wireless/ti/wlcore/main.c
drivers/net/wireless/zd1211rw/zd_mac.c
include/net/mac80211.h
net/mac80211/cfg.c
net/mac80211/chan.c
net/mac80211/ieee80211_i.h
net/mac80211/main.c
net/mac80211/mlme.c
net/mac80211/scan.c
net/mac80211/trace.h
net/mac80211/tx.c
net/mac80211/util.c

index 3d339e04efb7a760af7b887e31f7956973df424d..f9a24e599dee4c7acf9b8a5bf0a0caa2306d01e5 100644 (file)
@@ -1293,7 +1293,8 @@ static int adm8211_config(struct ieee80211_hw *dev, u32 changed)
 {
        struct adm8211_priv *priv = dev->priv;
        struct ieee80211_conf *conf = &dev->conf;
-       int channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
+       int channel =
+               ieee80211_frequency_to_channel(conf->chandef.chan->center_freq);
 
        if (channel != priv->channel) {
                priv->channel = channel;
index 5ac5f7ae2721a2e8db91536a10ed94b6116960af..34c8a33cac06f67dfb5e4dc718767d6457449d86 100644 (file)
@@ -1943,12 +1943,12 @@ static int at76_config(struct ieee80211_hw *hw, u32 changed)
        struct at76_priv *priv = hw->priv;
 
        at76_dbg(DBG_MAC80211, "%s(): channel %d",
-                __func__, hw->conf.channel->hw_value);
+                __func__, hw->conf.chandef.chan->hw_value);
        at76_dbg_dump(DBG_MAC80211, priv->bssid, ETH_ALEN, "bssid:");
 
        mutex_lock(&priv->mtx);
 
-       priv->channel = hw->conf.channel->hw_value;
+       priv->channel = hw->conf.chandef.chan->hw_value;
 
        if (is_valid_ether_addr(priv->bssid))
                at76_join(priv);
index afd1e36d308faefdf20fd2f7f4b4c748ef72464a..17d7fece35d2c203eedef5fed0725074a0067cf7 100644 (file)
@@ -457,14 +457,14 @@ static int ar5523_set_chan(struct ar5523 *ar)
        memset(&reset, 0, sizeof(reset));
        reset.flags |= cpu_to_be32(UATH_CHAN_2GHZ);
        reset.flags |= cpu_to_be32(UATH_CHAN_OFDM);
-       reset.freq = cpu_to_be32(conf->channel->center_freq);
+       reset.freq = cpu_to_be32(conf->chandef.chan->center_freq);
        reset.maxrdpower = cpu_to_be32(50);     /* XXX */
        reset.channelchange = cpu_to_be32(1);
        reset.keeprccontent = cpu_to_be32(0);
 
        ar5523_dbg(ar, "set chan flags 0x%x freq %d\n",
                   be32_to_cpu(reset.flags),
-                  conf->channel->center_freq);
+                  conf->chandef.chan->center_freq);
        return ar5523_cmd_write(ar, WDCMSG_RESET, &reset, sizeof(reset), 0);
 }
 
@@ -594,7 +594,7 @@ static void ar5523_data_rx_cb(struct urb *urb)
        rx_status = IEEE80211_SKB_RXCB(data->skb);
        memset(rx_status, 0, sizeof(*rx_status));
        rx_status->freq = be32_to_cpu(desc->channel);
-       rx_status->band = hw->conf.channel->band;
+       rx_status->band = hw->conf.chandef.chan->band;
        rx_status->signal = -95 + be32_to_cpu(desc->rssi);
 
        ieee80211_rx_irqsafe(hw, data->skb);
@@ -1153,13 +1153,13 @@ static int ar5523_get_wlan_mode(struct ar5523 *ar,
        struct ieee80211_sta *sta;
        u32 sta_rate_set;
 
-       band = ar->hw->wiphy->bands[ar->hw->conf.channel->band];
+       band = ar->hw->wiphy->bands[ar->hw->conf.chandef.chan->band];
        sta = ieee80211_find_sta(ar->vif, bss_conf->bssid);
        if (!sta) {
                ar5523_info(ar, "STA not found!\n");
                return WLAN_MODE_11b;
        }
-       sta_rate_set = sta->supp_rates[ar->hw->conf.channel->band];
+       sta_rate_set = sta->supp_rates[ar->hw->conf.chandef.chan->band];
 
        for (bit = 0; bit < band->n_bitrates; bit++) {
                if (sta_rate_set & 1) {
@@ -1197,11 +1197,11 @@ static void ar5523_create_rateset(struct ar5523 *ar,
                ar5523_info(ar, "STA not found. Cannot set rates\n");
                sta_rate_set = bss_conf->basic_rates;
        } else
-               sta_rate_set = sta->supp_rates[ar->hw->conf.channel->band];
+               sta_rate_set = sta->supp_rates[ar->hw->conf.chandef.chan->band];
 
        ar5523_dbg(ar, "sta rate_set = %08x\n", sta_rate_set);
 
-       band = ar->hw->wiphy->bands[ar->hw->conf.channel->band];
+       band = ar->hw->wiphy->bands[ar->hw->conf.chandef.chan->band];
        for (bit = 0; bit < band->n_bitrates; bit++) {
                BUG_ON(i >= AR5523_MAX_NRATES);
                ar5523_dbg(ar, "Considering rate %d : %d\n",
index 1d264c0f5a9b468285296e706cfef2d367678085..9b20d9ee2719d0ddc78c799ecb24307882f1b503 100644 (file)
@@ -2639,7 +2639,7 @@ int ath5k_start(struct ieee80211_hw *hw)
         * be followed by initialization of the appropriate bits
         * and then setup of the interrupt mask.
         */
-       ah->curchan = ah->hw->conf.channel;
+       ah->curchan = ah->hw->conf.chandef.chan;
        ah->imask = AR5K_INT_RXOK
                | AR5K_INT_RXERR
                | AR5K_INT_RXEOL
index 4264341533eae5384af1a675db255496fa559245..06f86f435711e805c958ee5f98354a60aafe5f41 100644 (file)
@@ -202,7 +202,7 @@ ath5k_config(struct ieee80211_hw *hw, u32 changed)
        mutex_lock(&ah->lock);
 
        if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
-               ret = ath5k_chan_set(ah, conf->channel);
+               ret = ath5k_chan_set(ah, conf->chandef.chan);
                if (ret < 0)
                        goto unlock;
        }
@@ -678,7 +678,7 @@ ath5k_get_survey(struct ieee80211_hw *hw, int idx, struct survey_info *survey)
 
        memcpy(survey, &ah->survey, sizeof(*survey));
 
-       survey->channel = conf->channel;
+       survey->channel = conf->chandef.chan;
        survey->noise = ah->ah_noise_floor;
        survey->filled = SURVEY_INFO_NOISE_DBM |
                        SURVEY_INFO_CHANNEL_TIME |
index 5f05c26d1ec4a9a30e67c294d407c082bbcc8d2a..2ff570f7f8ffb49e563d0f7e6cb4d3bace3cc6da 100644 (file)
@@ -79,7 +79,7 @@ static void ath9k_beacon_setup(struct ath_softc *sc, struct ieee80211_vif *vif,
        u8 chainmask = ah->txchainmask;
        u8 rate = 0;
 
-       sband = &sc->sbands[common->hw->conf.channel->band];
+       sband = &sc->sbands[common->hw->conf.chandef.chan->band];
        rate = sband->bitrates[rateidx].hw_value;
        if (vif->bss_conf.use_short_preamble)
                rate |= sband->bitrates[rateidx].hw_value_short;
index 1e8508530e984487cfce4aba50df5e6af8b0873b..b184f1ff0d3845832d94775f1f78f6a334bbf3d7 100644 (file)
@@ -208,7 +208,7 @@ bool ath9k_hw_reset_calvalid(struct ath_hw *ah)
                return true;
 
        ath_dbg(common, CALIBRATE, "Resetting Cal %d state for channel %u\n",
-               currCal->calData->calType, conf->channel->center_freq);
+               currCal->calData->calType, conf->chandef.chan->center_freq);
 
        ah->caldata->CalValid &= ~currCal->calData->calType;
        currCal->calState = CAL_WAITING;
index 905f1b313961914ef3faf81aa6ed210248846196..6c78fe7ca54d4bbb0bf1d62cb67ab8e7cb6cdd05 100644 (file)
@@ -133,13 +133,14 @@ EXPORT_SYMBOL(ath9k_cmn_update_ichannel);
 struct ath9k_channel *ath9k_cmn_get_curchannel(struct ieee80211_hw *hw,
                                               struct ath_hw *ah)
 {
-       struct ieee80211_channel *curchan = hw->conf.channel;
+       struct ieee80211_channel *curchan = hw->conf.chandef.chan;
        struct ath9k_channel *channel;
        u8 chan_idx;
 
        chan_idx = curchan->hw_value;
        channel = &ah->channels[chan_idx];
-       ath9k_cmn_update_ichannel(channel, curchan, hw->conf.channel_type);
+       ath9k_cmn_update_ichannel(channel, curchan,
+                                 cfg80211_get_chandef_type(&hw->conf.chandef));
 
        return channel;
 }
index a8016d70088aa3d492d15ff76f6f16f8f3c2df2f..098e3545e5127011767ac9dde2bb449287812091 100644 (file)
@@ -190,7 +190,7 @@ void ath9k_htc_reset(struct ath9k_htc_priv *priv)
 {
        struct ath_hw *ah = priv->ah;
        struct ath_common *common = ath9k_hw_common(ah);
-       struct ieee80211_channel *channel = priv->hw->conf.channel;
+       struct ieee80211_channel *channel = priv->hw->conf.chandef.chan;
        struct ath9k_hw_cal_data *caldata = NULL;
        enum htc_phymode mode;
        __be16 htc_mode;
@@ -250,7 +250,7 @@ static int ath9k_htc_set_channel(struct ath9k_htc_priv *priv,
        struct ath_common *common = ath9k_hw_common(ah);
        struct ieee80211_conf *conf = &common->hw->conf;
        bool fastcc;
-       struct ieee80211_channel *channel = hw->conf.channel;
+       struct ieee80211_channel *channel = hw->conf.chandef.chan;
        struct ath9k_hw_cal_data *caldata = NULL;
        enum htc_phymode mode;
        __be16 htc_mode;
@@ -602,7 +602,7 @@ static void ath9k_htc_setup_rate(struct ath9k_htc_priv *priv,
        u32 caps = 0;
        int i, j;
 
-       sband = priv->hw->wiphy->bands[priv->hw->conf.channel->band];
+       sband = priv->hw->wiphy->bands[priv->hw->conf.chandef.chan->band];
 
        for (i = 0, j = 0; i < sband->n_bitrates; i++) {
                if (sta->supp_rates[sband->band] & BIT(i)) {
@@ -904,7 +904,7 @@ static int ath9k_htc_start(struct ieee80211_hw *hw)
        struct ath9k_htc_priv *priv = hw->priv;
        struct ath_hw *ah = priv->ah;
        struct ath_common *common = ath9k_hw_common(ah);
-       struct ieee80211_channel *curchan = hw->conf.channel;
+       struct ieee80211_channel *curchan = hw->conf.chandef.chan;
        struct ath9k_channel *init_channel;
        int ret = 0;
        enum htc_phymode mode;
@@ -1193,15 +1193,17 @@ static int ath9k_htc_config(struct ieee80211_hw *hw, u32 changed)
        }
 
        if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || chip_reset) {
-               struct ieee80211_channel *curchan = hw->conf.channel;
+               struct ieee80211_channel *curchan = hw->conf.chandef.chan;
+               enum nl80211_channel_type channel_type =
+                       cfg80211_get_chandef_type(&hw->conf.chandef);
                int pos = curchan->hw_value;
 
                ath_dbg(common, CONFIG, "Set channel: %d MHz\n",
                        curchan->center_freq);
 
                ath9k_cmn_update_ichannel(&priv->ah->channels[pos],
-                                         hw->conf.channel,
-                                         hw->conf.channel_type);
+                                         hw->conf.chandef.chan,
+                                         channel_type);
 
                if (ath9k_htc_set_channel(priv, hw, &priv->ah->channels[pos]) < 0) {
                        ath_err(common, "Unable to set channel\n");
index 3ad1fd05c5e769fc429325377470c888edb354a2..306c55019e77a5619f97d42594cdffc64507efc9 100644 (file)
@@ -490,7 +490,7 @@ static void ath9k_htc_tx_process(struct ath9k_htc_priv *priv,
                if (txs->ts_flags & ATH9K_HTC_TXSTAT_SGI)
                        rate->flags |= IEEE80211_TX_RC_SHORT_GI;
        } else {
-               if (cur_conf->channel->band == IEEE80211_BAND_5GHZ)
+               if (cur_conf->chandef.chan->band == IEEE80211_BAND_5GHZ)
                        rate->idx += 4; /* No CCK rates */
        }
 
@@ -939,7 +939,7 @@ static void ath9k_process_rate(struct ieee80211_hw *hw,
                return;
        }
 
-       band = hw->conf.channel->band;
+       band = hw->conf.chandef.chan->band;
        sband = hw->wiphy->bands[band];
 
        for (i = 0; i < sband->n_bitrates; i++) {
@@ -1078,8 +1078,8 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv,
                priv->ah->stats.avgbrssi = rxbuf->rxstatus.rs_rssi;
 
        rx_status->mactime = be64_to_cpu(rxbuf->rxstatus.rs_tstamp);
-       rx_status->band = hw->conf.channel->band;
-       rx_status->freq = hw->conf.channel->center_freq;
+       rx_status->band = hw->conf.chandef.chan->band;
+       rx_status->freq = hw->conf.chandef.chan->center_freq;
        rx_status->signal =  rxbuf->rxstatus.rs_rssi + ATH_DEFAULT_NOISE_FLOOR;
        rx_status->antenna = rxbuf->rxstatus.rs_antenna;
        rx_status->flag |= RX_FLAG_MACTIME_END;
index 2a2ae403e0e5202a996fab3e1a7cf9ebecfa2c0a..d5e6a38fe74be98d3a2624f5f381077d4126724e 100644 (file)
@@ -139,7 +139,7 @@ static void ath9k_hw_set_clockrate(struct ath_hw *ah)
                clockrate = 117;
        else if (!ah->curchan) /* should really check for CCK instead */
                clockrate = ATH9K_CLOCK_RATE_CCK;
-       else if (conf->channel->band == IEEE80211_BAND_2GHZ)
+       else if (conf->chandef.chan->band == IEEE80211_BAND_2GHZ)
                clockrate = ATH9K_CLOCK_RATE_2GHZ_OFDM;
        else if (ah->caps.hw_caps & ATH9K_HW_CAP_FASTCLOCK)
                clockrate = ATH9K_CLOCK_FAST_RATE_5GHZ_OFDM;
@@ -1110,7 +1110,8 @@ void ath9k_hw_init_global_settings(struct ath_hw *ah)
         * BA frames in some implementations, but it has been found to fix ACK
         * timeout issues in other cases as well.
         */
-       if (conf->channel && conf->channel->band == IEEE80211_BAND_2GHZ &&
+       if (conf->chandef.chan &&
+           conf->chandef.chan->band == IEEE80211_BAND_2GHZ &&
            !IS_CHAN_HALF_RATE(chan) && !IS_CHAN_QUARTER_RATE(chan)) {
                acktimeout += 64 - sifstime - ah->slottime;
                ctstimeout += 48 - sifstime - ah->slottime;
index ade3afb21f911e86589e325c2e99b49b7fe91289..b1433f561cd2f39c380df71dda1b93d6e5f4c792 100644 (file)
@@ -213,7 +213,7 @@ static bool ath_paprd_send_frame(struct ath_softc *sc, struct sk_buff *skb, int
        txctl.txq = sc->tx.txq_map[IEEE80211_AC_BE];
 
        memset(tx_info, 0, sizeof(*tx_info));
-       tx_info->band = hw->conf.channel->band;
+       tx_info->band = hw->conf.chandef.chan->band;
        tx_info->flags |= IEEE80211_TX_CTL_NO_ACK;
        tx_info->control.rates[0].idx = 0;
        tx_info->control.rates[0].count = 1;
index 24650fd4169466d37be5817fc33d55d0e6fa4c73..f984a03f912c7a040c3d09cd9bcccbcb3c5b1d80 100644 (file)
@@ -585,7 +585,7 @@ static int ath9k_start(struct ieee80211_hw *hw)
        struct ath_softc *sc = hw->priv;
        struct ath_hw *ah = sc->sc_ah;
        struct ath_common *common = ath9k_hw_common(ah);
-       struct ieee80211_channel *curchan = hw->conf.channel;
+       struct ieee80211_channel *curchan = hw->conf.chandef.chan;
        struct ath9k_channel *init_channel;
        int r;
 
@@ -1184,7 +1184,9 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
        }
 
        if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {
-               struct ieee80211_channel *curchan = hw->conf.channel;
+               struct ieee80211_channel *curchan = hw->conf.chandef.chan;
+               enum nl80211_channel_type channel_type =
+                       cfg80211_get_chandef_type(&conf->chandef);
                int pos = curchan->hw_value;
                int old_pos = -1;
                unsigned long flags;
@@ -1193,7 +1195,7 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
                        old_pos = ah->curchan - &ah->channels[0];
 
                ath_dbg(common, CONFIG, "Set channel: %d MHz type: %d\n",
-                       curchan->center_freq, conf->channel_type);
+                       curchan->center_freq, channel_type);
 
                /* update survey stats for the old channel before switching */
                spin_lock_irqsave(&common->cc_lock, flags);
@@ -1208,7 +1210,7 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
                        ath9k_hw_getnf(ah, ah->curchan);
 
                ath9k_cmn_update_ichannel(&sc->sc_ah->channels[pos],
-                                         curchan, conf->channel_type);
+                                         curchan, channel_type);
 
                /*
                 * If the operating channel changes, change the survey in-use flags
index 96ac433ba7f685ee454e3219bdea0e12879c3956..aa4d368d8d3df53290a35fb7248c0e733d55deed 100644 (file)
@@ -814,7 +814,7 @@ static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
         * So, set fourth rate in series to be same as third one for
         * above conditions.
         */
-       if ((sc->hw->conf.channel->band == IEEE80211_BAND_2GHZ) &&
+       if ((sc->hw->conf.chandef.chan->band == IEEE80211_BAND_2GHZ) &&
            (conf_is_ht(&sc->hw->conf))) {
                u8 dot11rate = rate_table->info[rix].dot11rate;
                u8 phy = rate_table->info[rix].phy;
@@ -1328,7 +1328,7 @@ static void ath_rate_update(void *priv, struct ieee80211_supported_band *sband,
 
                ath_dbg(ath9k_hw_common(sc->sc_ah), CONFIG,
                        "Operating HT Bandwidth changed to: %d\n",
-                       sc->hw->conf.channel_type);
+                       cfg80211_get_chandef_type(&sc->hw->conf.chandef));
        }
 }
 
index ee156e5431472dcf8e1428a78a6bb102bd51c8b4..c90ca57e3722c367be88858e3aeab3781248feb1 100644 (file)
@@ -859,7 +859,7 @@ static int ath9k_process_rate(struct ath_common *common,
        unsigned int i = 0;
        struct ath_softc __maybe_unused *sc = common->priv;
 
-       band = hw->conf.channel->band;
+       band = hw->conf.chandef.chan->band;
        sband = hw->wiphy->bands[band];
 
        if (rx_stats->rs_rate & 0x80) {
@@ -954,8 +954,8 @@ static int ath9k_rx_skb_preprocess(struct ath_common *common,
        if (ath9k_process_rate(common, hw, rx_stats, rx_status))
                return -EINVAL;
 
-       rx_status->band = hw->conf.channel->band;
-       rx_status->freq = hw->conf.channel->center_freq;
+       rx_status->band = hw->conf.chandef.chan->band;
+       rx_status->freq = hw->conf.chandef.chan->center_freq;
        rx_status->signal = ah->noise + rx_stats->rs_rssi;
        rx_status->antenna = rx_stats->rs_antenna;
        rx_status->flag |= RX_FLAG_MACTIME_END;
index 93fe6003a493827dc61e0418607860c90de36d5d..7741fe8e08163177deb9e662161f8aefd0b8a3bb 100644 (file)
@@ -654,8 +654,9 @@ static ssize_t carl9170_debugfs_bug_write(struct ar9170 *ar, const char *buf,
                goto out;
 
        case 'P':
-               err = carl9170_set_channel(ar, ar->hw->conf.channel,
-                       ar->hw->conf.channel_type, CARL9170_RFI_COLD);
+               err = carl9170_set_channel(ar, ar->hw->conf.chandef.chan,
+                       cfg80211_get_chandef_type(&ar->hw->conf.chandef),
+                       CARL9170_RFI_COLD);
                if (err < 0)
                        count = err;
 
index 24d75ab94f0d36a22f7d025eea336d5197f83f2b..a2f005703c04c38638e0052713e5202ac0335465 100644 (file)
@@ -48,7 +48,7 @@ int carl9170_set_dyn_sifs_ack(struct ar9170 *ar)
        if (conf_is_ht40(&ar->hw->conf))
                val = 0x010a;
        else {
-               if (ar->hw->conf.channel->band == IEEE80211_BAND_2GHZ)
+               if (ar->hw->conf.chandef.chan->band == IEEE80211_BAND_2GHZ)
                        val = 0x105;
                else
                        val = 0x104;
@@ -66,7 +66,7 @@ int carl9170_set_rts_cts_rate(struct ar9170 *ar)
                rts_rate = 0x1da;
                cts_rate = 0x10a;
        } else {
-               if (ar->hw->conf.channel->band == IEEE80211_BAND_2GHZ) {
+               if (ar->hw->conf.chandef.chan->band == IEEE80211_BAND_2GHZ) {
                        /* 11 mbit CCK */
                        rts_rate = 033;
                        cts_rate = 003;
@@ -93,7 +93,7 @@ int carl9170_set_slot_time(struct ar9170 *ar)
                return 0;
        }
 
-       if ((ar->hw->conf.channel->band == IEEE80211_BAND_5GHZ) ||
+       if ((ar->hw->conf.chandef.chan->band == IEEE80211_BAND_5GHZ) ||
            vif->bss_conf.use_short_slot)
                slottime = 9;
 
@@ -120,7 +120,7 @@ int carl9170_set_mac_rates(struct ar9170 *ar)
        basic |= (vif->bss_conf.basic_rates & 0xff0) << 4;
        rcu_read_unlock();
 
-       if (ar->hw->conf.channel->band == IEEE80211_BAND_5GHZ)
+       if (ar->hw->conf.chandef.chan->band == IEEE80211_BAND_5GHZ)
                mandatory = 0xff00; /* OFDM 6/9/12/18/24/36/48/54 */
        else
                mandatory = 0xff0f; /* OFDM (6/9../54) + CCK (1/2/5.5/11) */
index 08b193199946eb40235ce59dc3c1120a62f6be9e..4e268b1360d8e730d582ba8e7153c925b36e7605 100644 (file)
@@ -929,6 +929,9 @@ static int carl9170_op_config(struct ieee80211_hw *hw, u32 changed)
        }
 
        if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
+               enum nl80211_channel_type channel_type =
+                       cfg80211_get_chandef_type(&hw->conf.chandef);
+
                /* adjust slot time for 5 GHz */
                err = carl9170_set_slot_time(ar);
                if (err)
@@ -938,8 +941,8 @@ static int carl9170_op_config(struct ieee80211_hw *hw, u32 changed)
                if (err)
                        goto out;
 
-               err = carl9170_set_channel(ar, hw->conf.channel,
-                       hw->conf.channel_type, CARL9170_RFI_NONE);
+               err = carl9170_set_channel(ar, hw->conf.chandef.chan,
+                                          channel_type, CARL9170_RFI_NONE);
                if (err)
                        goto out;
 
@@ -957,7 +960,7 @@ static int carl9170_op_config(struct ieee80211_hw *hw, u32 changed)
        }
 
        if (changed & IEEE80211_CONF_CHANGE_POWER) {
-               err = carl9170_set_mac_tpc(ar, ar->hw->conf.channel);
+               err = carl9170_set_mac_tpc(ar, ar->hw->conf.chandef.chan);
                if (err)
                        goto out;
        }
index b72c09cf43a4c614a56d5b63ca1f34f11b28d4f0..c5f1fdd1eaeb0118015ab665b68ab97b5b9a613e 100644 (file)
@@ -1331,7 +1331,7 @@ static void carl9170_calc_ctl(struct ar9170 *ar, u32 freq, enum carl9170_bw bw)
         * CTL_ETSI for 2GHz and CTL_FCC for 5GHz.
         */
        ctl_grp = ath_regd_get_band_ctl(&ar->common.regulatory,
-                                       ar->hw->conf.channel->band);
+                                       ar->hw->conf.chandef.chan->band);
 
        /* ctl group not found - either invalid band (NO_CTL) or ww roaming */
        if (ctl_grp == NO_CTL || ctl_grp == SD_NO_CTL)
@@ -1341,7 +1341,7 @@ static void carl9170_calc_ctl(struct ar9170 *ar, u32 freq, enum carl9170_bw bw)
                /* skip CTL and heavy clip for CTL_MKK and CTL_ETSI */
                return;
 
-       if (ar->hw->conf.channel->band == IEEE80211_BAND_2GHZ) {
+       if (ar->hw->conf.chandef.chan->band == IEEE80211_BAND_2GHZ) {
                modes = mode_list_2ghz;
                nr_modes = ARRAY_SIZE(mode_list_2ghz);
        } else {
index 10e288d470e75be03ef936048fe70574ac3ea2c2..6a4bd8c433b4aa823d24dbbfb6b5427367dbc13f 100644 (file)
@@ -972,7 +972,7 @@ static inline int b43_is_mode(struct b43_wl *wl, int type)
  */
 static inline enum ieee80211_band b43_current_band(struct b43_wl *wl)
 {
-       return wl->hw->conf.channel->band;
+       return wl->hw->conf.chandef.chan->band;
 }
 
 static inline int b43_bus_may_powerdown(struct b43_wldev *wldev)
index 05682736e466410cb5497b6736700ebf7a1049c4..d135e8975f52270ec07f61e59e1a55243a1157cc 100644 (file)
@@ -3848,7 +3848,7 @@ static int b43_op_config(struct ieee80211_hw *hw, u32 changed)
        dev = wl->current_dev;
 
        /* Switch the band (if necessary). This might change the active core. */
-       err = b43_switch_band(wl, conf->channel);
+       err = b43_switch_band(wl, conf->chandef.chan);
        if (err)
                goto out_unlock_mutex;
 
@@ -3878,8 +3878,8 @@ static int b43_op_config(struct ieee80211_hw *hw, u32 changed)
 
        /* Switch to the requested channel.
         * The firmware takes care of races with the TX handler. */
-       if (conf->channel->hw_value != phy->channel)
-               b43_switch_channel(dev, conf->channel->hw_value);
+       if (conf->chandef.chan->hw_value != phy->channel)
+               b43_switch_channel(dev, conf->chandef.chan->hw_value);
 
        dev->wl->radiotap_enabled = !!(conf->flags & IEEE80211_CONF_MONITOR);
 
@@ -5002,7 +5002,7 @@ static int b43_op_get_survey(struct ieee80211_hw *hw, int idx,
        if (idx != 0)
                return -ENOENT;
 
-       survey->channel = conf->channel;
+       survey->channel = conf->chandef.chan;
        survey->filled = SURVEY_INFO_NOISE_DBM;
        survey->noise = dev->stats.link_noise;
 
index 7416c5e9154d6a734ece86a5d071ca57f7be485a..016682ea744590929b8562536520b64c9ff55b43 100644 (file)
@@ -525,8 +525,9 @@ static void b43_phy_ht_op_switch_analog(struct b43_wldev *dev, bool on)
 static int b43_phy_ht_op_switch_channel(struct b43_wldev *dev,
                                        unsigned int new_channel)
 {
-       struct ieee80211_channel *channel = dev->wl->hw->conf.channel;
-       enum nl80211_channel_type channel_type = dev->wl->hw->conf.channel_type;
+       struct ieee80211_channel *channel = dev->wl->hw->conf.chandef.chan;
+       enum nl80211_channel_type channel_type =
+               cfg80211_get_chandef_type(&dev->wl->hw->conf.chandef);
 
        if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) {
                if ((new_channel < 1) || (new_channel > 14))
index a13e28ef6246af2dd344025d1b394403572fd5f3..0bafa3b17035db8d5767da2632da343dd1ae70c7 100644 (file)
@@ -808,8 +808,9 @@ static void b43_phy_lcn_op_switch_analog(struct b43_wldev *dev, bool on)
 static int b43_phy_lcn_op_switch_channel(struct b43_wldev *dev,
                                        unsigned int new_channel)
 {
-       struct ieee80211_channel *channel = dev->wl->hw->conf.channel;
-       enum nl80211_channel_type channel_type = dev->wl->hw->conf.channel_type;
+       struct ieee80211_channel *channel = dev->wl->hw->conf.chandef.chan;
+       enum nl80211_channel_type channel_type =
+               cfg80211_get_chandef_type(&dev->wl->hw->conf.chandef);
 
        if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) {
                if ((new_channel < 1) || (new_channel > 14))
index 3c35382ee6c23ebfbaed8d1dcfdf33e804faec96..949a3bdeede9d391d9b9ea6419beba30cdcd2a80 100644 (file)
@@ -5530,8 +5530,9 @@ static void b43_nphy_op_switch_analog(struct b43_wldev *dev, bool on)
 static int b43_nphy_op_switch_channel(struct b43_wldev *dev,
                                      unsigned int new_channel)
 {
-       struct ieee80211_channel *channel = dev->wl->hw->conf.channel;
-       enum nl80211_channel_type channel_type = dev->wl->hw->conf.channel_type;
+       struct ieee80211_channel *channel = dev->wl->hw->conf.chandef.chan;
+       enum nl80211_channel_type channel_type =
+               cfg80211_get_chandef_type(&dev->wl->hw->conf.chandef);
 
        if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) {
                if ((new_channel < 1) || (new_channel > 14))
index 8c3f70e1a013078ea85c92a2ac0447e6abd9f754..572668821862e3c8c9b75b46ec1d1e60ea25dcea 100644 (file)
@@ -2720,7 +2720,7 @@ static int b43legacy_op_dev_config(struct ieee80211_hw *hw,
                goto out_unlock_mutex;
 
        /* Switch the PHY mode (if necessary). */
-       switch (conf->channel->band) {
+       switch (conf->chandef.chan->band) {
        case IEEE80211_BAND_2GHZ:
                if (phy->type == B43legacy_PHYTYPE_B)
                        new_phymode = B43legacy_PHYMODE_B;
@@ -2748,8 +2748,9 @@ static int b43legacy_op_dev_config(struct ieee80211_hw *hw,
 
        /* Switch to the requested channel.
         * The firmware takes care of races with the TX handler. */
-       if (conf->channel->hw_value != phy->channel)
-               b43legacy_radio_selectchannel(dev, conf->channel->hw_value, 0);
+       if (conf->chandef.chan->hw_value != phy->channel)
+               b43legacy_radio_selectchannel(dev, conf->chandef.chan->hw_value,
+                                             0);
 
        dev->wl->radiotap_enabled = !!(conf->flags & IEEE80211_CONF_MONITOR);
 
@@ -3558,7 +3559,7 @@ static int b43legacy_op_get_survey(struct ieee80211_hw *hw, int idx,
        if (idx != 0)
                return -ENOENT;
 
-       survey->channel = conf->channel;
+       survey->channel = conf->chandef.chan;
        survey->filled = SURVEY_INFO_NOISE_DBM;
        survey->noise = dev->stats.link_noise;
 
index 10ee314c42298a7d1d2e7264ae8093d36ed586a2..cc87926f505562335a02c605541c739725cf1a03 100644 (file)
@@ -379,7 +379,7 @@ brcms_c_channel_set_chanspec(struct brcms_cm_info *wlc_cm, u16 chanspec,
                         u8 local_constraint_qdbm)
 {
        struct brcms_c_info *wlc = wlc_cm->wlc;
-       struct ieee80211_channel *ch = wlc->pub->ieee_hw->conf.channel;
+       struct ieee80211_channel *ch = wlc->pub->ieee_hw->conf.chandef.chan;
        struct txpwr_limits txpwr;
 
        brcms_c_channel_reg_limits(wlc_cm, chanspec, &txpwr);
@@ -404,7 +404,7 @@ brcms_c_channel_reg_limits(struct brcms_cm_info *wlc_cm, u16 chanspec,
                       struct txpwr_limits *txpwr)
 {
        struct brcms_c_info *wlc = wlc_cm->wlc;
-       struct ieee80211_channel *ch = wlc->pub->ieee_hw->conf.channel;
+       struct ieee80211_channel *ch = wlc->pub->ieee_hw->conf.chandef.chan;
        uint i;
        uint chan;
        int maxpwr;
index aa5f43fee5ed9889241872e4b0c1ce7fc3063789..70731d23ddb11b0442e02b6337b62261e559b740 100644 (file)
@@ -414,10 +414,10 @@ static int brcms_ops_config(struct ieee80211_hw *hw, u32 changed)
                                  new_int);
        }
        if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
-               if (conf->channel_type == NL80211_CHAN_HT20 ||
-                   conf->channel_type == NL80211_CHAN_NO_HT)
+               if (conf->chandef.width == NL80211_CHAN_WIDTH_20 ||
+                   conf->chandef.width == NL80211_CHAN_WIDTH_20_NOHT)
                        err = brcms_c_set_channel(wl->wlc,
-                                                 conf->channel->hw_value);
+                                                 conf->chandef.chan->hw_value);
                else
                        err = -ENOTSUPP;
        }
index 8ef02dca8f8cab02eca81a71de91bac67612451b..e0dc1838cd19869163ba4d13134c710873954ff6 100644 (file)
@@ -5099,7 +5099,7 @@ int brcms_c_up(struct brcms_c_info *wlc)
        wlc->pub->up = true;
 
        if (wlc->bandinit_pending) {
-               ch = wlc->pub->ieee_hw->conf.channel;
+               ch = wlc->pub->ieee_hw->conf.chandef.chan;
                brcms_c_suspend_mac_and_wait(wlc);
                brcms_c_set_chanspec(wlc, ch20mhz_chspec(ch->hw_value));
                wlc->bandinit_pending = false;
@@ -7748,7 +7748,7 @@ bool brcms_c_dpc(struct brcms_c_info *wlc, bool bounded)
 void brcms_c_init(struct brcms_c_info *wlc, bool mute_tx)
 {
        struct bcma_device *core = wlc->hw->d11core;
-       struct ieee80211_channel *ch = wlc->pub->ieee_hw->conf.channel;
+       struct ieee80211_channel *ch = wlc->pub->ieee_hw->conf.chandef.chan;
        u16 chanspec;
 
        brcms_dbg_info(core, "wl%d\n", wlc->pub->unit);
index d4fd29ad90dc6cf6b3182f41fe68491ee138cf1a..c9f197d9ca1eecddf8d6f651c4f8598950986502 100644 (file)
@@ -347,7 +347,7 @@ il3945_rs_rate_init(struct il_priv *il, struct ieee80211_sta *sta, u8 sta_id)
 
        psta = (struct il3945_sta_priv *)sta->drv_priv;
        rs_sta = &psta->rs_sta;
-       sband = hw->wiphy->bands[conf->channel->band];
+       sband = hw->wiphy->bands[conf->chandef.chan->band];
 
        rs_sta->il = il;
 
index e8324b5e5bfe836610f5680f86cf9c742fc4061b..1d92a59a85add17c76933b3592764e85690a2179 100644 (file)
@@ -2299,7 +2299,7 @@ il4965_rs_rate_init(struct il_priv *il, struct ieee80211_sta *sta, u8 sta_id)
 
        sta_priv = (struct il_station_priv *)sta->drv_priv;
        lq_sta = &sta_priv->lq_sta;
-       sband = hw->wiphy->bands[conf->channel->band];
+       sband = hw->wiphy->bands[conf->chandef.chan->band];
 
        lq_sta->lq.sta_id = sta_id;
 
index 722bfb57cfd5ebfed62e46f7f60e2f2792d7d44c..025d8b0eeafee7cf25ecb324e2d1d38bd38558a5 100644 (file)
@@ -4974,7 +4974,7 @@ il_mac_config(struct ieee80211_hw *hw, u32 changed)
        struct il_priv *il = hw->priv;
        const struct il_channel_info *ch_info;
        struct ieee80211_conf *conf = &hw->conf;
-       struct ieee80211_channel *channel = conf->channel;
+       struct ieee80211_channel *channel = conf->chandef.chan;
        struct il_ht_config *ht_conf = &il->current_ht_config;
        unsigned long flags = 0;
        int ret = 0;
index abe3042672619b2029e5ba0896203d497592044f..907bd6e50aadce652145a32d496223b0a365e92b 100644 (file)
@@ -2831,7 +2831,7 @@ void iwl_rs_rate_init(struct iwl_priv *priv, struct ieee80211_sta *sta, u8 sta_i
 
        sta_priv = (struct iwl_station_priv *) sta->drv_priv;
        lq_sta = &sta_priv->lq_sta;
-       sband = hw->wiphy->bands[conf->channel->band];
+       sband = hw->wiphy->bands[conf->chandef.chan->band];
 
 
        lq_sta->lq.sta_id = sta_id;
index 23be948cf16220828e1b3bcbceeb5aff31ced74b..085c589e71499bbd137e9aeec14a7230e03f2f3c 100644 (file)
@@ -78,8 +78,9 @@ void iwl_connection_init_rx_config(struct iwl_priv *priv,
                ctx->staging.flags |= RXON_FLG_SHORT_PREAMBLE_MSK;
 #endif
 
-       ctx->staging.channel = cpu_to_le16(priv->hw->conf.channel->hw_value);
-       priv->band = priv->hw->conf.channel->band;
+       ctx->staging.channel =
+               cpu_to_le16(priv->hw->conf.chandef.chan->hw_value);
+       priv->band = priv->hw->conf.chandef.chan->band;
 
        iwl_set_flags_for_band(priv, ctx, priv->band, ctx->vif);
 
@@ -951,7 +952,7 @@ static void iwl_calc_basic_rates(struct iwl_priv *priv,
                unsigned long basic = ctx->vif->bss_conf.basic_rates;
                int i;
 
-               sband = priv->hw->wiphy->bands[priv->hw->conf.channel->band];
+               sband = priv->hw->wiphy->bands[priv->hw->conf.chandef.chan->band];
 
                for_each_set_bit(i, &basic, BITS_PER_LONG) {
                        int hw = sband->bitrates[i].hw_value;
@@ -1181,7 +1182,7 @@ int iwlagn_mac_config(struct ieee80211_hw *hw, u32 changed)
        struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw);
        struct iwl_rxon_context *ctx;
        struct ieee80211_conf *conf = &hw->conf;
-       struct ieee80211_channel *channel = conf->channel;
+       struct ieee80211_channel *channel = conf->chandef.chan;
        int ret = 0;
 
        IWL_DEBUG_MAC80211(priv, "enter: changed %#x\n", changed);
index 7001856241e60354e9ff5cbed505ba6fc8bac415..088de9d25c39ecd4eb3dabc9177c72c3cd9619a4 100644 (file)
@@ -412,9 +412,9 @@ static int lbtf_op_config(struct ieee80211_hw *hw, u32 changed)
        struct ieee80211_conf *conf = &hw->conf;
        lbtf_deb_enter(LBTF_DEB_MACOPS);
 
-       if (conf->channel->center_freq != priv->cur_freq) {
-               priv->cur_freq = conf->channel->center_freq;
-               lbtf_set_channel(priv, conf->channel->hw_value);
+       if (conf->chandef.chan->center_freq != priv->cur_freq) {
+               priv->cur_freq = conf->chandef.chan->center_freq;
+               lbtf_set_channel(priv, conf->chandef.chan->hw_value);
        }
        lbtf_deb_leave(LBTF_DEB_MACOPS);
        return 0;
@@ -537,7 +537,7 @@ static int lbtf_op_get_survey(struct ieee80211_hw *hw, int idx,
        if (idx != 0)
                return -ENOENT;
 
-       survey->channel = conf->channel;
+       survey->channel = conf->chandef.chan;
        survey->filled = SURVEY_INFO_NOISE_DBM;
        survey->noise = priv->noise;
 
index 0064d38276bf6a714d86e7c310f49f1ef91a5d35..4ac54861e912e918f1fca84c22d135a3b13e6059 100644 (file)
@@ -1062,11 +1062,13 @@ out:
        return HRTIMER_NORESTART;
 }
 
-static const char *hwsim_chantypes[] = {
-       [NL80211_CHAN_NO_HT] = "noht",
-       [NL80211_CHAN_HT20] = "ht20",
-       [NL80211_CHAN_HT40MINUS] = "ht40-",
-       [NL80211_CHAN_HT40PLUS] = "ht40+",
+static const char * const hwsim_chanwidths[] = {
+       [NL80211_CHAN_WIDTH_20_NOHT] = "noht",
+       [NL80211_CHAN_WIDTH_20] = "ht20",
+       [NL80211_CHAN_WIDTH_40] = "ht40",
+       [NL80211_CHAN_WIDTH_80] = "vht80",
+       [NL80211_CHAN_WIDTH_80P80] = "vht80p80",
+       [NL80211_CHAN_WIDTH_160] = "vht160",
 };
 
 static int mac80211_hwsim_config(struct ieee80211_hw *hw, u32 changed)
@@ -1080,18 +1082,28 @@ static int mac80211_hwsim_config(struct ieee80211_hw *hw, u32 changed)
                [IEEE80211_SMPS_DYNAMIC] = "dynamic",
        };
 
-       wiphy_debug(hw->wiphy,
-                   "%s (freq=%d/%s idle=%d ps=%d smps=%s)\n",
-                   __func__,
-                   conf->channel ? conf->channel->center_freq : 0,
-                   hwsim_chantypes[conf->channel_type],
-                   !!(conf->flags & IEEE80211_CONF_IDLE),
-                   !!(conf->flags & IEEE80211_CONF_PS),
-                   smps_modes[conf->smps_mode]);
+       if (conf->chandef.chan)
+               wiphy_debug(hw->wiphy,
+                           "%s (freq=%d(%d - %d)/%s idle=%d ps=%d smps=%s)\n",
+                           __func__,
+                           conf->chandef.chan->center_freq,
+                           conf->chandef.center_freq1,
+                           conf->chandef.center_freq2,
+                           hwsim_chanwidths[conf->chandef.width],
+                           !!(conf->flags & IEEE80211_CONF_IDLE),
+                           !!(conf->flags & IEEE80211_CONF_PS),
+                           smps_modes[conf->smps_mode]);
+       else
+               wiphy_debug(hw->wiphy,
+                           "%s (freq=0 idle=%d ps=%d smps=%s)\n",
+                           __func__,
+                           !!(conf->flags & IEEE80211_CONF_IDLE),
+                           !!(conf->flags & IEEE80211_CONF_PS),
+                           smps_modes[conf->smps_mode]);
 
        data->idle = !!(conf->flags & IEEE80211_CONF_IDLE);
 
-       data->channel = conf->channel;
+       data->channel = conf->chandef.chan;
 
        WARN_ON(data->channel && channels > 1);
 
@@ -1277,7 +1289,7 @@ static int mac80211_hwsim_get_survey(
                return -ENOENT;
 
        /* Current channel */
-       survey->channel = conf->channel;
+       survey->channel = conf->chandef.chan;
 
        /*
         * Magically conjured noise level --- this is only ok for simulated hardware.
index 091d9a64080aa520879261a276d1e08e529f111f..9f9a1449e812869d7d3b9df5cc09e4a27b64c9c5 100644 (file)
@@ -2837,7 +2837,9 @@ static int mwl8k_cmd_tx_power(struct ieee80211_hw *hw,
                                     struct ieee80211_conf *conf,
                                     unsigned short pwr)
 {
-       struct ieee80211_channel *channel = conf->channel;
+       struct ieee80211_channel *channel = conf->chandef.chan;
+       enum nl80211_channel_type channel_type =
+               cfg80211_get_chandef_type(&conf->chandef);
        struct mwl8k_cmd_tx_power *cmd;
        int rc;
        int i;
@@ -2857,14 +2859,14 @@ static int mwl8k_cmd_tx_power(struct ieee80211_hw *hw,
 
        cmd->channel = cpu_to_le16(channel->hw_value);
 
-       if (conf->channel_type == NL80211_CHAN_NO_HT ||
-           conf->channel_type == NL80211_CHAN_HT20) {
+       if (channel_type == NL80211_CHAN_NO_HT ||
+           channel_type == NL80211_CHAN_HT20) {
                cmd->bw = cpu_to_le16(0x2);
        } else {
                cmd->bw = cpu_to_le16(0x4);
-               if (conf->channel_type == NL80211_CHAN_HT40MINUS)
+               if (channel_type == NL80211_CHAN_HT40MINUS)
                        cmd->sub_ch = cpu_to_le16(0x3);
-               else if (conf->channel_type == NL80211_CHAN_HT40PLUS)
+               else if (channel_type == NL80211_CHAN_HT40PLUS)
                        cmd->sub_ch = cpu_to_le16(0x1);
        }
 
@@ -3008,7 +3010,9 @@ struct mwl8k_cmd_set_rf_channel {
 static int mwl8k_cmd_set_rf_channel(struct ieee80211_hw *hw,
                                    struct ieee80211_conf *conf)
 {
-       struct ieee80211_channel *channel = conf->channel;
+       struct ieee80211_channel *channel = conf->chandef.chan;
+       enum nl80211_channel_type channel_type =
+               cfg80211_get_chandef_type(&conf->chandef);
        struct mwl8k_cmd_set_rf_channel *cmd;
        int rc;
 
@@ -3026,12 +3030,12 @@ static int mwl8k_cmd_set_rf_channel(struct ieee80211_hw *hw,
        else if (channel->band == IEEE80211_BAND_5GHZ)
                cmd->channel_flags |= cpu_to_le32(0x00000004);
 
-       if (conf->channel_type == NL80211_CHAN_NO_HT ||
-           conf->channel_type == NL80211_CHAN_HT20)
+       if (channel_type == NL80211_CHAN_NO_HT ||
+           channel_type == NL80211_CHAN_HT20)
                cmd->channel_flags |= cpu_to_le32(0x00000080);
-       else if (conf->channel_type == NL80211_CHAN_HT40MINUS)
+       else if (channel_type == NL80211_CHAN_HT40MINUS)
                cmd->channel_flags |= cpu_to_le32(0x000001900);
-       else if (conf->channel_type == NL80211_CHAN_HT40PLUS)
+       else if (channel_type == NL80211_CHAN_HT40PLUS)
                cmd->channel_flags |= cpu_to_le32(0x000000900);
 
        rc = mwl8k_post_cmd(hw, &cmd->header);
@@ -3950,7 +3954,7 @@ static int mwl8k_cmd_set_new_stn_add(struct ieee80211_hw *hw,
        memcpy(cmd->mac_addr, sta->addr, ETH_ALEN);
        cmd->stn_id = cpu_to_le16(sta->aid);
        cmd->action = cpu_to_le16(MWL8K_STA_ACTION_ADD);
-       if (hw->conf.channel->band == IEEE80211_BAND_2GHZ)
+       if (hw->conf.chandef.chan->band == IEEE80211_BAND_2GHZ)
                rates = sta->supp_rates[IEEE80211_BAND_2GHZ];
        else
                rates = sta->supp_rates[IEEE80211_BAND_5GHZ] << 5;
@@ -4385,7 +4389,7 @@ static int mwl8k_cmd_update_stadb_add(struct ieee80211_hw *hw,
        p->ht_caps = cpu_to_le16(sta->ht_cap.cap);
        p->extended_ht_caps = (sta->ht_cap.ampdu_factor & 3) |
                ((sta->ht_cap.ampdu_density & 7) << 2);
-       if (hw->conf.channel->band == IEEE80211_BAND_2GHZ)
+       if (hw->conf.chandef.chan->band == IEEE80211_BAND_2GHZ)
                rates = sta->supp_rates[IEEE80211_BAND_2GHZ];
        else
                rates = sta->supp_rates[IEEE80211_BAND_5GHZ] << 5;
@@ -4868,7 +4872,7 @@ mwl8k_bss_info_changed_sta(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                        goto out;
                }
 
-               if (hw->conf.channel->band == IEEE80211_BAND_2GHZ) {
+               if (hw->conf.chandef.chan->band == IEEE80211_BAND_2GHZ) {
                        ap_legacy_rates = ap->supp_rates[IEEE80211_BAND_2GHZ];
                } else {
                        ap_legacy_rates =
@@ -4900,7 +4904,7 @@ mwl8k_bss_info_changed_sta(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                        if (idx)
                                idx--;
 
-                       if (hw->conf.channel->band == IEEE80211_BAND_2GHZ)
+                       if (hw->conf.chandef.chan->band == IEEE80211_BAND_2GHZ)
                                rate = mwl8k_rates_24[idx].hw_value;
                        else
                                rate = mwl8k_rates_50[idx].hw_value;
@@ -4973,7 +4977,7 @@ mwl8k_bss_info_changed_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                if (idx)
                        idx--;
 
-               if (hw->conf.channel->band == IEEE80211_BAND_2GHZ)
+               if (hw->conf.chandef.chan->band == IEEE80211_BAND_2GHZ)
                        rate = mwl8k_rates_24[idx].hw_value;
                else
                        rate = mwl8k_rates_50[idx].hw_value;
@@ -5246,7 +5250,7 @@ static int mwl8k_get_survey(struct ieee80211_hw *hw, int idx,
        if (idx != 0)
                return -ENOENT;
 
-       survey->channel = conf->channel;
+       survey->channel = conf->chandef.chan;
        survey->filled = SURVEY_INFO_NOISE_DBM;
        survey->noise = priv->noise;
 
index 9ba85106eec0a0cc337732f0858d862e26e5a380..b3879fbf53688bcea74ba9b639d5b6c8ddab860d 100644 (file)
@@ -402,7 +402,7 @@ int p54_scan(struct p54_common *priv, u16 mode, u16 dwell)
        struct p54_rssi_db_entry *rssi_data;
        unsigned int i;
        void *entry;
-       __le16 freq = cpu_to_le16(priv->hw->conf.channel->center_freq);
+       __le16 freq = cpu_to_le16(priv->hw->conf.chandef.chan->center_freq);
 
        skb = p54_alloc_skb(priv, P54_HDR_FLAG_CONTROL_OPSET, sizeof(*head) +
                            2 + sizeof(*iq_autocal) + sizeof(*body) +
@@ -532,7 +532,7 @@ int p54_scan(struct p54_common *priv, u16 mode, u16 dwell)
 err:
        wiphy_err(priv->hw->wiphy, "frequency change to channel %d failed.\n",
                  ieee80211_frequency_to_channel(
-                         priv->hw->conf.channel->center_freq));
+                         priv->hw->conf.chandef.chan->center_freq));
 
        dev_kfree_skb_any(skb);
        return -EINVAL;
index ee654a691f388660c9f33ab6b0ea5538e532f694..067e6f2fd050fcad0ddc4eb00565ba3324397894 100644 (file)
@@ -340,7 +340,7 @@ static int p54_config(struct ieee80211_hw *dev, u32 changed)
                 * TODO: Use the LM_SCAN_TRAP to determine the current
                 * operating channel.
                 */
-               priv->curchan = priv->hw->conf.channel;
+               priv->curchan = priv->hw->conf.chandef.chan;
                p54_reset_stats(priv);
                WARN_ON(p54_fetch_statistics(priv));
        }
@@ -480,7 +480,7 @@ static void p54_bss_info_changed(struct ieee80211_hw *dev,
                p54_set_edcf(priv);
        }
        if (changed & BSS_CHANGED_BASIC_RATES) {
-               if (dev->conf.channel->band == IEEE80211_BAND_5GHZ)
+               if (dev->conf.chandef.chan->band == IEEE80211_BAND_5GHZ)
                        priv->basic_rate_mask = (info->basic_rates << 4);
                else
                        priv->basic_rate_mask = info->basic_rates;
index 12f0a34477f231cff73a591f3bc5a2af300ce9d0..f95de0d162166e1de1e9035d1d3be9db238869fe 100644 (file)
@@ -354,13 +354,13 @@ static int p54_rx_data(struct p54_common *priv, struct sk_buff *skb)
        rx_status->signal = p54_rssi_to_dbm(priv, hdr->rssi);
        if (hdr->rate & 0x10)
                rx_status->flag |= RX_FLAG_SHORTPRE;
-       if (priv->hw->conf.channel->band == IEEE80211_BAND_5GHZ)
+       if (priv->hw->conf.chandef.chan->band == IEEE80211_BAND_5GHZ)
                rx_status->rate_idx = (rate < 4) ? 0 : rate - 4;
        else
                rx_status->rate_idx = rate;
 
        rx_status->freq = freq;
-       rx_status->band =  priv->hw->conf.channel->band;
+       rx_status->band =  priv->hw->conf.chandef.chan->band;
        rx_status->antenna = hdr->antenna;
 
        tsf32 = le32_to_cpu(hdr->tsf32);
index a658b4bc7da2fea78f2160b97907f20d547abde5..34456b45acbb60fae2ddf0caea0ba79b5381cac5 100644 (file)
@@ -2763,7 +2763,7 @@ static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
 
 void rt2800_gain_calibration(struct rt2x00_dev *rt2x00dev)
 {
-       rt2800_config_txpower(rt2x00dev, rt2x00dev->hw->conf.channel,
+       rt2800_config_txpower(rt2x00dev, rt2x00dev->hw->conf.chandef.chan,
                              rt2x00dev->tx_power);
 }
 EXPORT_SYMBOL_GPL(rt2800_gain_calibration);
@@ -2898,11 +2898,11 @@ void rt2800_config(struct rt2x00_dev *rt2x00dev,
        if (flags & IEEE80211_CONF_CHANGE_CHANNEL) {
                rt2800_config_channel(rt2x00dev, libconf->conf,
                                      &libconf->rf, &libconf->channel);
-               rt2800_config_txpower(rt2x00dev, libconf->conf->channel,
+               rt2800_config_txpower(rt2x00dev, libconf->conf->chandef.chan,
                                      libconf->conf->power_level);
        }
        if (flags & IEEE80211_CONF_CHANGE_POWER)
-               rt2800_config_txpower(rt2x00dev, libconf->conf->channel,
+               rt2800_config_txpower(rt2x00dev, libconf->conf->chandef.chan,
                                      libconf->conf->power_level);
        if (flags & IEEE80211_CONF_CHANGE_RETRY_LIMITS)
                rt2800_config_retry_limit(rt2x00dev, libconf);
@@ -5563,7 +5563,7 @@ int rt2800_get_survey(struct ieee80211_hw *hw, int idx,
        if (idx != 0)
                return -ENOENT;
 
-       survey->channel = conf->channel;
+       survey->channel = conf->chandef.chan;
 
        rt2800_register_read(rt2x00dev, CH_IDLE_STA, &idle);
        rt2800_register_read(rt2x00dev, CH_BUSY_STA, &busy);
index 49a63e973934b30a87117babb8305fe5c8609631..8cb43f8f3efcb96958ead840e055be1462f3f2f8 100644 (file)
@@ -184,7 +184,7 @@ static u16 rt2x00ht_center_channel(struct rt2x00_dev *rt2x00dev,
        /*
         * Initialize center channel to current channel.
         */
-       center_channel = spec->channels[conf->channel->hw_value].channel;
+       center_channel = spec->channels[conf->chandef.chan->hw_value].channel;
 
        /*
         * Adjust center channel to HT40+ and HT40- operation.
@@ -199,7 +199,7 @@ static u16 rt2x00ht_center_channel(struct rt2x00_dev *rt2x00dev,
                        return i;
 
        WARN_ON(1);
-       return conf->channel->hw_value;
+       return conf->chandef.chan->hw_value;
 }
 
 void rt2x00lib_config(struct rt2x00_dev *rt2x00dev,
@@ -227,7 +227,7 @@ void rt2x00lib_config(struct rt2x00_dev *rt2x00dev,
                        hw_value = rt2x00ht_center_channel(rt2x00dev, conf);
                } else {
                        clear_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags);
-                       hw_value = conf->channel->hw_value;
+                       hw_value = conf->chandef.chan->hw_value;
                }
 
                memcpy(&libconf.rf,
@@ -279,8 +279,8 @@ void rt2x00lib_config(struct rt2x00_dev *rt2x00dev,
        else
                clear_bit(CONFIG_POWERSAVING, &rt2x00dev->flags);
 
-       rt2x00dev->curr_band = conf->channel->band;
-       rt2x00dev->curr_freq = conf->channel->center_freq;
+       rt2x00dev->curr_band = conf->chandef.chan->band;
+       rt2x00dev->curr_freq = conf->chandef.chan->center_freq;
        rt2x00dev->tx_power = conf->power_level;
        rt2x00dev->short_retry = conf->short_frame_max_tx_count;
        rt2x00dev->long_retry = conf->long_frame_max_tx_count;
index f95792cfcf8922e17222fec2feddc34f5117c308..f85035cc836f1cff3eb1abf5125112e904ec874c 100644 (file)
@@ -847,7 +847,7 @@ static void rt61pci_config_lna_gain(struct rt2x00_dev *rt2x00dev,
        u16 eeprom;
        short lna_gain = 0;
 
-       if (libconf->conf->channel->band == IEEE80211_BAND_2GHZ) {
+       if (libconf->conf->chandef.chan->band == IEEE80211_BAND_2GHZ) {
                if (test_bit(CAPABILITY_EXTERNAL_LNA_BG, &rt2x00dev->cap_flags))
                        lna_gain += 14;
 
index 24eec66e9fd2049ae14aa709e7e2ecab0294751c..a3387b146bb5f77c17ff1e247a6a203d1781faf2 100644 (file)
@@ -739,7 +739,7 @@ static void rt73usb_config_lna_gain(struct rt2x00_dev *rt2x00dev,
        u16 eeprom;
        short lna_gain = 0;
 
-       if (libconf->conf->channel->band == IEEE80211_BAND_2GHZ) {
+       if (libconf->conf->chandef.chan->band == IEEE80211_BAND_2GHZ) {
                if (test_bit(CAPABILITY_EXTERNAL_LNA_BG, &rt2x00dev->cap_flags))
                        lna_gain += 14;
 
index 1b3c2843221d2a38ded783270009d7838d89b4b4..91a04e2b8ece4c94f1d02946d5d33500a3a98ac5 100644 (file)
@@ -147,8 +147,8 @@ static void rtl8180_handle_rx(struct ieee80211_hw *dev)
                                signal = priv->rf->calc_rssi(agc, sq);
                        }
                        rx_status.signal = signal;
-                       rx_status.freq = dev->conf.channel->center_freq;
-                       rx_status.band = dev->conf.channel->band;
+                       rx_status.freq = dev->conf.chandef.chan->center_freq;
+                       rx_status.band = dev->conf.chandef.chan->band;
                        rx_status.mactime = le64_to_cpu(entry->tsft);
                        rx_status.flag |= RX_FLAG_MACTIME_START;
                        if (flags & RTL818X_RX_DESC_FLAG_CRC32_ERR)
index 5ee7589dd546d017bd505772002ee598faed9bb6..077ff92cc1397d8c5d0e3a941c1d5b0a4f584363 100644 (file)
@@ -82,7 +82,8 @@ static void grf5101_rf_set_channel(struct ieee80211_hw *dev,
                                   struct ieee80211_conf *conf)
 {
        struct rtl8180_priv *priv = dev->priv;
-       int channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
+       int channel =
+               ieee80211_frequency_to_channel(conf->chandef.chan->center_freq);
        u32 txpw = priv->channels[channel - 1].hw_value & 0xFF;
        u32 chan = channel - 1;
 
index 667b3363d4371c20bbe59996dc6d0d74387c7323..4715000c94dd65edfe8437c0a451c1cf1dae5dc7 100644 (file)
@@ -95,7 +95,7 @@ static void max2820_rf_set_channel(struct ieee80211_hw *dev,
 {
        struct rtl8180_priv *priv = dev->priv;
        int channel = conf ?
-               ieee80211_frequency_to_channel(conf->channel->center_freq) : 1;
+               ieee80211_frequency_to_channel(conf->chandef.chan->center_freq) : 1;
        unsigned int chan_idx = channel - 1;
        u32 txpw = priv->channels[chan_idx].hw_value & 0xFF;
        u32 chan = max2820_chan[chan_idx];
index 7c4574ba9d7509017003afe16e38ae32ab572817..cc2a5412c1f08d6ab4acc6688d400f8afbba08be 100644 (file)
@@ -719,7 +719,8 @@ static void rtl8225_rf_set_channel(struct ieee80211_hw *dev,
                                   struct ieee80211_conf *conf)
 {
        struct rtl8180_priv *priv = dev->priv;
-       int chan = ieee80211_frequency_to_channel(conf->channel->center_freq);
+       int chan =
+               ieee80211_frequency_to_channel(conf->chandef.chan->center_freq);
 
        if (priv->rf->init == rtl8225_rf_init)
                rtl8225_rf_set_tx_power(dev, chan);
index 44771a6286af6968eac3e87b5845093dc214198c..b3ec40f6bd23de804099609e351760119f84bcb4 100644 (file)
@@ -105,7 +105,8 @@ static void sa2400_rf_set_channel(struct ieee80211_hw *dev,
                                  struct ieee80211_conf *conf)
 {
        struct rtl8180_priv *priv = dev->priv;
-       int channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
+       int channel =
+               ieee80211_frequency_to_channel(conf->chandef.chan->center_freq);
        u32 txpw = priv->channels[channel - 1].hw_value & 0xFF;
        u32 chan = sa2400_chan[channel - 1];
 
index 4574bd213705c7b51f875d8c8ec2c4bd3dee44fd..f49220e234b0bc79881229589770ac0221f3a7c6 100644 (file)
@@ -379,8 +379,8 @@ static void rtl8187_rx_cb(struct urb *urb)
        rate = (flags >> 20) & 0xF;
        skb_trim(skb, flags & 0x0FFF);
        rx_status.rate_idx = rate;
-       rx_status.freq = dev->conf.channel->center_freq;
-       rx_status.band = dev->conf.channel->band;
+       rx_status.freq = dev->conf.chandef.chan->center_freq;
+       rx_status.band = dev->conf.chandef.chan->band;
        rx_status.flag |= RX_FLAG_MACTIME_START;
        if (flags & RTL818X_RX_DESC_FLAG_CRC32_ERR)
                rx_status.flag |= RX_FLAG_FAILED_FCS_CRC;
index 908903f721f5dada520369c780568a96fe6fb279..f0bf35fedbaf2f94058b0397ed54dff48ce1e8f7 100644 (file)
@@ -905,7 +905,8 @@ static void rtl8225_rf_set_channel(struct ieee80211_hw *dev,
                                   struct ieee80211_conf *conf)
 {
        struct rtl8187_priv *priv = dev->priv;
-       int chan = ieee80211_frequency_to_channel(conf->channel->center_freq);
+       int chan =
+               ieee80211_frequency_to_channel(conf->chandef.chan->center_freq);
 
        if (priv->rf->init == rtl8225_rf_init)
                rtl8225_rf_set_tx_power(dev, chan);
index 99c5cea3fe21e50cf575b822073266a827814558..0e7866d1d0e2a0ba3923f14fc050af5332c4a52d 100644 (file)
@@ -691,7 +691,7 @@ int rtlwifi_rate_mapping(struct ieee80211_hw *hw,
        int rate_idx;
 
        if (false == isht) {
-               if (IEEE80211_BAND_2GHZ == hw->conf.channel->band) {
+               if (IEEE80211_BAND_2GHZ == hw->conf.chandef.chan->band) {
                        switch (desc_rate) {
                        case DESC92_RATE1M:
                                rate_idx = 0;
@@ -1365,7 +1365,7 @@ int rtl_send_smps_action(struct ieee80211_hw *hw,
                rtlpriv->cfg->ops->update_rate_tbl(hw, sta, 0);
 
                info->control.rates[0].idx = 0;
-               info->band = hw->conf.channel->band;
+               info->band = hw->conf.chandef.chan->band;
                rtlpriv->intf_ops->adapter_tx(hw, sta, skb, &tcb_desc);
        }
 err_free:
index b5a7a260bf631d2b04ad88a3158732936f3eb828..64a41ecf86cf29f2ea00b9fb6febf6b4b205074f 100644 (file)
@@ -320,7 +320,7 @@ static int rtl_op_config(struct ieee80211_hw *hw, u32 changed)
        }
 
        if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
-               struct ieee80211_channel *channel = hw->conf.channel;
+               struct ieee80211_channel *channel = hw->conf.chandef.chan;
                u8 wide_chan = (u8) channel->hw_value;
 
                /*
@@ -332,7 +332,7 @@ static int rtl_op_config(struct ieee80211_hw *hw, u32 changed)
                 *info for cisco1253 bw20, so we modify
                 *it here based on UPPER & LOWER
                 */
-               switch (hw->conf.channel_type) {
+               switch (cfg80211_get_chandef_type(&hw->conf.chandef)) {
                case NL80211_CHAN_HT20:
                case NL80211_CHAN_NO_HT:
                        /* SC */
@@ -390,7 +390,7 @@ static int rtl_op_config(struct ieee80211_hw *hw, u32 changed)
                rtlpriv->cfg->ops->switch_channel(hw);
                rtlpriv->cfg->ops->set_channel_access(hw);
                rtlpriv->cfg->ops->set_bw_mode(hw,
-                                              hw->conf.channel_type);
+                               cfg80211_get_chandef_type(&hw->conf.chandef));
        }
 
        mutex_unlock(&rtlpriv->locks.conf_mutex);
index b9b1a6e0b16e87de460df9c434be0b0ad6bd851f..27e4ebd510912d9e3c44bf1c66ee9d1e87a6b46f 100644 (file)
@@ -544,8 +544,8 @@ bool rtl92ce_rx_query_desc(struct ieee80211_hw *hw,
        stats->timestamp_low = GET_RX_DESC_TSFL(pdesc);
        stats->rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(pdesc);
 
-       rx_status->freq = hw->conf.channel->center_freq;
-       rx_status->band = hw->conf.channel->band;
+       rx_status->freq = hw->conf.chandef.chan->center_freq;
+       rx_status->band = hw->conf.chandef.chan->band;
 
        if (GET_RX_DESC_CRC32(pdesc))
                rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;
index b6222eedb8350c8eb691cfe5fe1fa8eba8b7eaf3..f0dada530153c26053c8bb7584d48d99467cda37 100644 (file)
@@ -324,8 +324,8 @@ bool rtl92cu_rx_query_desc(struct ieee80211_hw *hw,
                                   && (GET_RX_DESC_FAGGR(pdesc) == 1));
        stats->timestamp_low = GET_RX_DESC_TSFL(pdesc);
        stats->rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(pdesc);
-       rx_status->freq = hw->conf.channel->center_freq;
-       rx_status->band = hw->conf.channel->band;
+       rx_status->freq = hw->conf.chandef.chan->center_freq;
+       rx_status->band = hw->conf.chandef.chan->band;
        if (GET_RX_DESC_CRC32(pdesc))
                rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;
        if (!GET_RX_DESC_SWDEC(pdesc))
@@ -395,8 +395,8 @@ static void _rtl_rx_process(struct ieee80211_hw *hw, struct sk_buff *skb)
        stats.rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(rxdesc);
        /* TODO: is center_freq changed when doing scan? */
        /* TODO: Shall we add protection or just skip those two step? */
-       rx_status->freq = hw->conf.channel->center_freq;
-       rx_status->band = hw->conf.channel->band;
+       rx_status->freq = hw->conf.chandef.chan->center_freq;
+       rx_status->band = hw->conf.chandef.chan->band;
        if (GET_RX_DESC_CRC32(rxdesc))
                rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;
        if (!GET_RX_DESC_SWDEC(rxdesc))
index 941080e03c06b5d7cd499eaf30659189e9df0428..b8ec718a0fabbf348df84820fa530f8e28031699 100644 (file)
@@ -499,8 +499,8 @@ bool rtl92de_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats,
                                         && (GET_RX_DESC_FAGGR(pdesc) == 1));
        stats->timestamp_low = GET_RX_DESC_TSFL(pdesc);
        stats->rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(pdesc);
-       rx_status->freq = hw->conf.channel->center_freq;
-       rx_status->band = hw->conf.channel->band;
+       rx_status->freq = hw->conf.chandef.chan->center_freq;
+       rx_status->band = hw->conf.chandef.chan->band;
        if (GET_RX_DESC_CRC32(pdesc))
                rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;
        if (!GET_RX_DESC_SWDEC(pdesc))
index 7b0a2e75b8b826dfeb6edf5a19e2136e76733e25..0b074f11f9696a11b5cb82cd895b441a5cb78dcb 100644 (file)
@@ -538,8 +538,8 @@ bool rtl92se_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats,
        if (stats->hwerror)
                return false;
 
-       rx_status->freq = hw->conf.channel->center_freq;
-       rx_status->band = hw->conf.channel->band;
+       rx_status->freq = hw->conf.chandef.chan->center_freq;
+       rx_status->band = hw->conf.chandef.chan->band;
 
        hdr = (struct ieee80211_hdr *)(skb->data + stats->rx_drvinfo_size
              + stats->rx_bufshift);
index ac081297db50ddd454bbaa9963bddbfce487b653..601261d67e84135d29c47ef1e17e52c03a07cd53 100644 (file)
@@ -304,8 +304,8 @@ bool rtl8723ae_rx_query_desc(struct ieee80211_hw *hw,
 
        status->is_cck = RTL8723E_RX_HAL_IS_CCK_RATE(status->rate);
 
-       rx_status->freq = hw->conf.channel->center_freq;
-       rx_status->band = hw->conf.channel->band;
+       rx_status->freq = hw->conf.chandef.chan->center_freq;
+       rx_status->band = hw->conf.chandef.chan->band;
 
        hdr = (struct ieee80211_hdr *)(skb->data + status->rx_drvinfo_size
                + status->rx_bufshift);
index bbbf68cf50a754a121e4bd3015afe880c544fa79..3291ffa952736ac9f6ac2784c758db39b498d37c 100644 (file)
@@ -572,7 +572,8 @@ static int wl1251_op_config(struct ieee80211_hw *hw, u32 changed)
        struct ieee80211_conf *conf = &hw->conf;
        int channel, ret = 0;
 
-       channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
+       channel = ieee80211_frequency_to_channel(
+                       conf->chandef.chan->center_freq);
 
        wl1251_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d",
                     channel,
@@ -1223,7 +1224,7 @@ static int wl1251_op_get_survey(struct ieee80211_hw *hw, int idx,
        if (idx != 0)
                return -ENOENT;
  
-       survey->channel = conf->channel;
+       survey->channel = conf->chandef.chan;
        survey->filled = SURVEY_INFO_NOISE_DBM;
        survey->noise = wl->noise;
  
index a9f7041c719230d5d620764b7debb27b47e1cee9..c26cb095010c79b995ab1512485e38b6bcc2dbb4 100644 (file)
@@ -4474,7 +4474,7 @@ static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
        if (idx != 0)
                return -ENOENT;
 
-       survey->channel = conf->channel;
+       survey->channel = conf->chandef.chan;
        survey->filled = 0;
        return 0;
 }
index 114364b5d46638f3597e66761c5caff45903cc80..c6208a7988e4736c54883e2fab67bdb1fd85d514 100644 (file)
@@ -1156,10 +1156,10 @@ static int zd_op_config(struct ieee80211_hw *hw, u32 changed)
        struct ieee80211_conf *conf = &hw->conf;
 
        spin_lock_irq(&mac->lock);
-       mac->channel = conf->channel->hw_value;
+       mac->channel = conf->chandef.chan->hw_value;
        spin_unlock_irq(&mac->lock);
 
-       return zd_chip_set_channel(&mac->chip, conf->channel->hw_value);
+       return zd_chip_set_channel(&mac->chip, conf->chandef.chan->hw_value);
 }
 
 static void zd_beacon_done(struct zd_mac *mac)
index 23a275a9a3b26e55a2bc0d5272357251a856695e..64faf015dd1e1faec85a4274eea2d385160eb275 100644 (file)
@@ -974,8 +974,7 @@ enum ieee80211_smps_mode {
  * @power_level: requested transmit power (in dBm), backward compatibility
  *     value only that is set to the minimum of all interfaces
  *
- * @channel: the channel to tune to
- * @channel_type: the channel (HT) type
+ * @chandef: the channel definition to tune to
  * @radar_enabled: whether radar detection is enabled
  *
  * @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame
@@ -1001,8 +1000,7 @@ struct ieee80211_conf {
 
        u8 long_frame_max_tx_count, short_frame_max_tx_count;
 
-       struct ieee80211_channel *channel;
-       enum nl80211_channel_type channel_type;
+       struct cfg80211_chan_def chandef;
        bool radar_enabled;
        enum ieee80211_smps_mode smps_mode;
 };
@@ -4216,31 +4214,33 @@ void ieee80211_rate_control_unregister(struct rate_control_ops *ops);
 static inline bool
 conf_is_ht20(struct ieee80211_conf *conf)
 {
-       return conf->channel_type == NL80211_CHAN_HT20;
+       return conf->chandef.width == NL80211_CHAN_WIDTH_20;
 }
 
 static inline bool
 conf_is_ht40_minus(struct ieee80211_conf *conf)
 {
-       return conf->channel_type == NL80211_CHAN_HT40MINUS;
+       return conf->chandef.width == NL80211_CHAN_WIDTH_40 &&
+              conf->chandef.center_freq1 < conf->chandef.chan->center_freq;
 }
 
 static inline bool
 conf_is_ht40_plus(struct ieee80211_conf *conf)
 {
-       return conf->channel_type == NL80211_CHAN_HT40PLUS;
+       return conf->chandef.width == NL80211_CHAN_WIDTH_40 &&
+              conf->chandef.center_freq1 > conf->chandef.chan->center_freq;
 }
 
 static inline bool
 conf_is_ht40(struct ieee80211_conf *conf)
 {
-       return conf_is_ht40_minus(conf) || conf_is_ht40_plus(conf);
+       return conf->chandef.width == NL80211_CHAN_WIDTH_40;
 }
 
 static inline bool
 conf_is_ht(struct ieee80211_conf *conf)
 {
-       return conf->channel_type != NL80211_CHAN_NO_HT;
+       return conf->chandef.width != NL80211_CHAN_WIDTH_20_NOHT;
 }
 
 static inline enum nl80211_iftype
index 50aaf25d47359a21e29c4ef1ae49ebf107317a88..6e43feb49a7697d5d870d6e5a46f338d1f42503c 100644 (file)
@@ -805,8 +805,7 @@ static int ieee80211_set_monitor_channel(struct wiphy *wiphy,
                                        IEEE80211_CHANCTX_EXCLUSIVE);
                }
        } else if (local->open_count == local->monitors) {
-               local->_oper_channel = chandef->chan;
-               local->_oper_channel_type = cfg80211_get_chandef_type(chandef);
+               local->_oper_chandef = *chandef;
                ieee80211_hw_config(local, 0);
        }
 
@@ -3373,9 +3372,7 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy,
                if (local->use_chanctx)
                        *chandef = local->monitor_chandef;
                else
-                       cfg80211_chandef_create(chandef,
-                                               local->_oper_channel,
-                                               local->_oper_channel_type);
+                       *chandef = local->_oper_chandef;
                ret = 0;
        }
        rcu_read_unlock();
index 78c0d90dd641e459dcec9972be0d97634d58a5c6..8024874ba95d5d154f9f3e44686947b352a8695b 100644 (file)
@@ -22,7 +22,7 @@ static void ieee80211_change_chanctx(struct ieee80211_local *local,
        drv_change_chanctx(local, ctx, IEEE80211_CHANCTX_CHANGE_WIDTH);
 
        if (!local->use_chanctx) {
-               local->_oper_channel_type = cfg80211_get_chandef_type(chandef);
+               local->_oper_chandef = *chandef;
                ieee80211_hw_config(local, 0);
        }
 }
@@ -77,9 +77,7 @@ ieee80211_new_chanctx(struct ieee80211_local *local,
        ctx->mode = mode;
 
        if (!local->use_chanctx) {
-               local->_oper_channel_type =
-                       cfg80211_get_chandef_type(chandef);
-               local->_oper_channel = chandef->chan;
+               local->_oper_chandef = *chandef;
                ieee80211_hw_config(local, 0);
        } else {
                err = drv_add_chanctx(local, ctx);
@@ -106,7 +104,10 @@ static void ieee80211_free_chanctx(struct ieee80211_local *local,
        WARN_ON_ONCE(ctx->refcount != 0);
 
        if (!local->use_chanctx) {
-               local->_oper_channel_type = NL80211_CHAN_NO_HT;
+               struct cfg80211_chan_def *chandef = &local->_oper_chandef;
+               chandef->width = NL80211_CHAN_WIDTH_20_NOHT;
+               chandef->center_freq1 = chandef->chan->center_freq;
+               chandef->center_freq2 = 0;
                ieee80211_hw_config(local, 0);
        } else {
                drv_remove_chanctx(local, ctx);
index c7f8b8b29e58327d89e5b3d46b449efefea46779..f9782f0f43483db954147225a190dfb79d526b52 100644 (file)
@@ -1021,8 +1021,7 @@ struct ieee80211_local {
        struct ieee80211_sub_if_data __rcu *scan_sdata;
        struct ieee80211_channel *csa_channel;
        /* For backward compatibility only -- do not use */
-       struct ieee80211_channel *_oper_channel;
-       enum nl80211_channel_type _oper_channel_type;
+       struct cfg80211_chan_def _oper_chandef;
 
        /* Temporary remain-on-channel for off-channel operations */
        struct ieee80211_channel *tmp_channel;
index b0d286821864bd0bfe777336fe2b2002f3f90a10..a16b037c9d34526bcf8972b28fd1095187a04445 100644 (file)
@@ -95,42 +95,47 @@ static void ieee80211_reconfig_filter(struct work_struct *work)
 static u32 ieee80211_hw_conf_chan(struct ieee80211_local *local)
 {
        struct ieee80211_sub_if_data *sdata;
-       struct ieee80211_channel *chan;
+       struct cfg80211_chan_def chandef = {};
        u32 changed = 0;
        int power;
-       enum nl80211_channel_type channel_type;
        u32 offchannel_flag;
 
        offchannel_flag = local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL;
+
        if (local->scan_channel) {
-               chan = local->scan_channel;
+               chandef.chan = local->scan_channel;
                /* If scanning on oper channel, use whatever channel-type
                 * is currently in use.
                 */
-               if (chan == local->_oper_channel)
-                       channel_type = local->_oper_channel_type;
-               else
-                       channel_type = NL80211_CHAN_NO_HT;
+               if (chandef.chan == local->_oper_chandef.chan) {
+                       chandef = local->_oper_chandef;
+               } else {
+                       chandef.width = NL80211_CHAN_WIDTH_20_NOHT;
+                       chandef.center_freq1 = chandef.chan->center_freq;
+               }
        } else if (local->tmp_channel) {
-               chan = local->tmp_channel;
-               channel_type = NL80211_CHAN_NO_HT;
-       } else {
-               chan = local->_oper_channel;
-               channel_type = local->_oper_channel_type;
-       }
-
-       if (chan != local->_oper_channel ||
-           channel_type != local->_oper_channel_type)
+               chandef.chan = local->tmp_channel;
+               chandef.width = NL80211_CHAN_WIDTH_20_NOHT;
+               chandef.center_freq1 = chandef.chan->center_freq;
+       } else
+               chandef = local->_oper_chandef;
+
+       WARN(!cfg80211_chandef_valid(&chandef),
+            "control:%d MHz width:%d center: %d/%d MHz",
+            chandef.chan->center_freq, chandef.width,
+            chandef.center_freq1, chandef.center_freq2);
+
+       if (!cfg80211_chandef_identical(&chandef, &local->_oper_chandef))
                local->hw.conf.flags |= IEEE80211_CONF_OFFCHANNEL;
        else
                local->hw.conf.flags &= ~IEEE80211_CONF_OFFCHANNEL;
 
        offchannel_flag ^= local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL;
 
-       if (offchannel_flag || chan != local->hw.conf.channel ||
-           channel_type != local->hw.conf.channel_type) {
-               local->hw.conf.channel = chan;
-               local->hw.conf.channel_type = channel_type;
+       if (offchannel_flag ||
+           !cfg80211_chandef_identical(&local->hw.conf.chandef,
+                                       &local->_oper_chandef)) {
+               local->hw.conf.chandef = chandef;
                changed |= IEEE80211_CONF_CHANGE_CHANNEL;
        }
 
@@ -146,7 +151,7 @@ static u32 ieee80211_hw_conf_chan(struct ieee80211_local *local)
                changed |= IEEE80211_CONF_CHANGE_SMPS;
        }
 
-       power = chan->max_power;
+       power = chandef.chan->max_power;
 
        rcu_read_lock();
        list_for_each_entry_rcu(sdata, &local->interfaces, list) {
@@ -740,11 +745,15 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
                sband = local->hw.wiphy->bands[band];
                if (!sband)
                        continue;
-               if (!local->use_chanctx && !local->_oper_channel) {
+               if (!local->use_chanctx && !local->_oper_chandef.chan) {
                        /* init channel we're on */
-                       local->hw.conf.channel =
-                       local->_oper_channel = &sband->channels[0];
-                       local->hw.conf.channel_type = NL80211_CHAN_NO_HT;
+                       struct cfg80211_chan_def chandef = {
+                               .chan = &sband->channels[0],
+                               .width = NL80211_CHAN_NO_HT,
+                               .center_freq1 = sband->channels[0].center_freq,
+                               .center_freq2 = 0
+                       };
+                       local->hw.conf.chandef = local->_oper_chandef = chandef;
                }
                cfg80211_chandef_create(&local->monitor_chandef,
                                        &sband->channels[0],
index 9958cb7df8f16ae2b148cdaeb6915d08b3af504e..237e2ef42ba905b4f933e33d9ba3d2ad6fc5de93 100644 (file)
@@ -988,6 +988,7 @@ static void ieee80211_chswitch_work(struct work_struct *work)
 {
        struct ieee80211_sub_if_data *sdata =
                container_of(work, struct ieee80211_sub_if_data, u.mgd.chswitch_work);
+       struct ieee80211_local *local = sdata->local;
        struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
 
        if (!ieee80211_sdata_running(sdata))
@@ -997,21 +998,30 @@ static void ieee80211_chswitch_work(struct work_struct *work)
        if (!ifmgd->associated)
                goto out;
 
-       sdata->local->_oper_channel = sdata->local->csa_channel;
-       if (!sdata->local->ops->channel_switch) {
+       /*
+        * FIXME: Here we are downgrading to NL80211_CHAN_WIDTH_20_NOHT
+        * and don't adjust our ht/vht settings
+        * This is wrong - we should behave according to the CSA params
+        */
+       local->_oper_chandef.chan = local->csa_channel;
+       local->_oper_chandef.width = NL80211_CHAN_WIDTH_20_NOHT;
+       local->_oper_chandef.center_freq1 =
+               local->_oper_chandef.chan->center_freq;
+       local->_oper_chandef.center_freq2 = 0;
+
+       if (!local->ops->channel_switch) {
                /* call "hw_config" only if doing sw channel switch */
-               ieee80211_hw_config(sdata->local,
-                       IEEE80211_CONF_CHANGE_CHANNEL);
+               ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
        } else {
                /* update the device channel directly */
-               sdata->local->hw.conf.channel = sdata->local->_oper_channel;
+               local->hw.conf.chandef = local->_oper_chandef;
        }
 
        /* XXX: shouldn't really modify cfg80211-owned data! */
-       ifmgd->associated->channel = sdata->local->_oper_channel;
+       ifmgd->associated->channel = local->_oper_chandef.chan;
 
        /* XXX: wait for a beacon first? */
-       ieee80211_wake_queues_by_reason(&sdata->local->hw,
+       ieee80211_wake_queues_by_reason(&local->hw,
                                        IEEE80211_MAX_QUEUE_MAP,
                                        IEEE80211_QUEUE_STOP_REASON_CSA);
  out:
index cb34cbbaa20ce9f003b22f17e5def519d83873af..581764f92e13ae529233e83eb9fc7d4999676602 100644 (file)
@@ -384,7 +384,7 @@ static void ieee80211_scan_state_send_probe(struct ieee80211_local *local,
 {
        int i;
        struct ieee80211_sub_if_data *sdata;
-       enum ieee80211_band band = local->hw.conf.channel->band;
+       enum ieee80211_band band = local->hw.conf.chandef.chan->band;
        u32 tx_flags;
 
        tx_flags = IEEE80211_TX_INTFL_OFFCHAN_TX_OK;
@@ -401,7 +401,7 @@ static void ieee80211_scan_state_send_probe(struct ieee80211_local *local,
                        local->scan_req->ssids[i].ssid_len,
                        local->scan_req->ie, local->scan_req->ie_len,
                        local->scan_req->rates[band], false,
-                       tx_flags, local->hw.conf.channel, true);
+                       tx_flags, local->hw.conf.chandef.chan, true);
 
        /*
         * After sending probe requests, wait for probe responses
@@ -467,7 +467,7 @@ static int __ieee80211_start_scan(struct ieee80211_sub_if_data *sdata,
        if (local->ops->hw_scan) {
                __set_bit(SCAN_HW_SCANNING, &local->scanning);
        } else if ((req->n_channels == 1) &&
-                  (req->channels[0] == local->_oper_channel)) {
+                  (req->channels[0] == local->_oper_chandef.chan)) {
                /*
                 * If we are scanning only on the operating channel
                 * then we do not need to stop normal activities
index d79e374e129aea226eb13875a29016565db1983b..8286dcef228b492fd4491b7ea416701d243459ae 100644 (file)
 #define VIF_PR_FMT     " vif:%s(%d%s)"
 #define VIF_PR_ARG     __get_str(vif_name), __entry->vif_type, __entry->p2p ? "/p2p" : ""
 
-#define CHANDEF_ENTRY  __field(u32, control_freq)                              \
-                       __field(u32, chan_width)                                \
-                       __field(u32, center_freq1)                              \
+#define CHANDEF_ENTRY  __field(u32, control_freq)                                      \
+                       __field(u32, chan_width)                                        \
+                       __field(u32, center_freq1)                                      \
                        __field(u32, center_freq2)
-#define CHANDEF_ASSIGN(c)                                                      \
-                       __entry->control_freq = (c)->chan->center_freq;         \
-                       __entry->chan_width = (c)->width;                       \
-                       __entry->center_freq1 = (c)->center_freq1;              \
+#define CHANDEF_ASSIGN(c)                                                              \
+                       __entry->control_freq = (c)->chan ? (c)->chan->center_freq : 0; \
+                       __entry->chan_width = (c)->width;                               \
+                       __entry->center_freq1 = (c)->center_freq1;                      \
                        __entry->center_freq2 = (c)->center_freq2;
 #define CHANDEF_PR_FMT " control:%d MHz width:%d center: %d/%d MHz"
-#define CHANDEF_PR_ARG __entry->control_freq, __entry->chan_width,             \
+#define CHANDEF_PR_ARG __entry->control_freq, __entry->chan_width,                     \
                        __entry->center_freq1, __entry->center_freq2
 
-#define CHANCTX_ENTRY  CHANDEF_ENTRY                                           \
-                       __field(u8, rx_chains_static)                           \
+#define CHANCTX_ENTRY  CHANDEF_ENTRY                                                   \
+                       __field(u8, rx_chains_static)                                   \
                        __field(u8, rx_chains_dynamic)
-#define CHANCTX_ASSIGN CHANDEF_ASSIGN(&ctx->conf.def)                          \
-                       __entry->rx_chains_static = ctx->conf.rx_chains_static; \
+#define CHANCTX_ASSIGN CHANDEF_ASSIGN(&ctx->conf.def)                                  \
+                       __entry->rx_chains_static = ctx->conf.rx_chains_static;         \
                        __entry->rx_chains_dynamic = ctx->conf.rx_chains_dynamic
 #define CHANCTX_PR_FMT CHANDEF_PR_FMT " chains:%d/%d"
-#define CHANCTX_PR_ARG CHANDEF_PR_ARG,                                         \
+#define CHANCTX_PR_ARG CHANDEF_PR_ARG,                                                 \
                        __entry->rx_chains_static, __entry->rx_chains_dynamic
 
 
@@ -286,8 +286,7 @@ TRACE_EVENT(drv_config,
                __field(u16, listen_interval)
                __field(u8, long_frame_max_tx_count)
                __field(u8, short_frame_max_tx_count)
-               __field(int, center_freq)
-               __field(int, channel_type)
+               CHANDEF_ENTRY
                __field(int, smps)
        ),
 
@@ -303,15 +302,13 @@ TRACE_EVENT(drv_config,
                        local->hw.conf.long_frame_max_tx_count;
                __entry->short_frame_max_tx_count =
                        local->hw.conf.short_frame_max_tx_count;
-               __entry->center_freq = local->hw.conf.channel ?
-                                       local->hw.conf.channel->center_freq : 0;
-               __entry->channel_type = local->hw.conf.channel_type;
+               CHANDEF_ASSIGN(&local->hw.conf.chandef)
                __entry->smps = local->hw.conf.smps_mode;
        ),
 
        TP_printk(
-               LOCAL_PR_FMT " ch:%#x freq:%d",
-               LOCAL_PR_ARG, __entry->changed, __entry->center_freq
+               LOCAL_PR_FMT " ch:%#x" CHANDEF_PR_FMT,
+               LOCAL_PR_ARG, __entry->changed, CHANDEF_PR_ARG
        )
 );
 
index 4a83d8dea8405b497bae8ebbc44fce7b8d5f3c6a..aad0bf5d88122a6cde6e4b9d4765f9f671aba441 100644 (file)
@@ -1709,7 +1709,7 @@ netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb,
        if (chanctx_conf)
                chan = chanctx_conf->def.chan;
        else if (!local->use_chanctx)
-               chan = local->_oper_channel;
+               chan = local->_oper_chandef.chan;
        else
                goto fail_rcu;
 
@@ -1843,7 +1843,7 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
                 * This is the exception! WDS style interfaces are prohibited
                 * when channel contexts are in used so this must be valid
                 */
-               band = local->hw.conf.channel->band;
+               band = local->hw.conf.chandef.chan->band;
                break;
 #ifdef CONFIG_MAC80211_MESH
        case NL80211_IFTYPE_MESH_POINT:
index 90cc2b82869bea7dd5cb85ad8c88e711d3770b8f..1734cd21c7ce17290a3dc6280fa6a9a73f1c2c59 100644 (file)
@@ -2171,8 +2171,7 @@ void ieee80211_dfs_radar_detected_work(struct work_struct *work)
                /* currently not handled */
                WARN_ON(1);
        else {
-               cfg80211_chandef_create(&chandef, local->hw.conf.channel,
-                                       local->hw.conf.channel_type);
+               chandef = local->hw.conf.chandef;
                cfg80211_radar_event(local->hw.wiphy, &chandef, GFP_KERNEL);
        }
 }