mac80211: Use a cfg80211_chan_def in ieee80211_hw_conf_chan

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>
This commit is contained in:
Karl Beldan 2013-03-25 16:26:57 +01:00 committed by Johannes Berg
parent 219c38674c
commit 675a0b049a
70 changed files with 292 additions and 243 deletions

View File

@ -1293,7 +1293,8 @@ static int adm8211_config(struct ieee80211_hw *dev, u32 changed)
{ {
struct adm8211_priv *priv = dev->priv; struct adm8211_priv *priv = dev->priv;
struct ieee80211_conf *conf = &dev->conf; 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) { if (channel != priv->channel) {
priv->channel = channel; priv->channel = channel;

View File

@ -1943,12 +1943,12 @@ static int at76_config(struct ieee80211_hw *hw, u32 changed)
struct at76_priv *priv = hw->priv; struct at76_priv *priv = hw->priv;
at76_dbg(DBG_MAC80211, "%s(): channel %d", 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:"); at76_dbg_dump(DBG_MAC80211, priv->bssid, ETH_ALEN, "bssid:");
mutex_lock(&priv->mtx); 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)) if (is_valid_ether_addr(priv->bssid))
at76_join(priv); at76_join(priv);

View File

@ -457,14 +457,14 @@ static int ar5523_set_chan(struct ar5523 *ar)
memset(&reset, 0, sizeof(reset)); memset(&reset, 0, sizeof(reset));
reset.flags |= cpu_to_be32(UATH_CHAN_2GHZ); reset.flags |= cpu_to_be32(UATH_CHAN_2GHZ);
reset.flags |= cpu_to_be32(UATH_CHAN_OFDM); 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.maxrdpower = cpu_to_be32(50); /* XXX */
reset.channelchange = cpu_to_be32(1); reset.channelchange = cpu_to_be32(1);
reset.keeprccontent = cpu_to_be32(0); reset.keeprccontent = cpu_to_be32(0);
ar5523_dbg(ar, "set chan flags 0x%x freq %d\n", ar5523_dbg(ar, "set chan flags 0x%x freq %d\n",
be32_to_cpu(reset.flags), 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); 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); rx_status = IEEE80211_SKB_RXCB(data->skb);
memset(rx_status, 0, sizeof(*rx_status)); memset(rx_status, 0, sizeof(*rx_status));
rx_status->freq = be32_to_cpu(desc->channel); 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); rx_status->signal = -95 + be32_to_cpu(desc->rssi);
ieee80211_rx_irqsafe(hw, data->skb); ieee80211_rx_irqsafe(hw, data->skb);
@ -1153,13 +1153,13 @@ static int ar5523_get_wlan_mode(struct ar5523 *ar,
struct ieee80211_sta *sta; struct ieee80211_sta *sta;
u32 sta_rate_set; 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); sta = ieee80211_find_sta(ar->vif, bss_conf->bssid);
if (!sta) { if (!sta) {
ar5523_info(ar, "STA not found!\n"); ar5523_info(ar, "STA not found!\n");
return WLAN_MODE_11b; 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++) { for (bit = 0; bit < band->n_bitrates; bit++) {
if (sta_rate_set & 1) { 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"); ar5523_info(ar, "STA not found. Cannot set rates\n");
sta_rate_set = bss_conf->basic_rates; sta_rate_set = bss_conf->basic_rates;
} else } 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); 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++) { for (bit = 0; bit < band->n_bitrates; bit++) {
BUG_ON(i >= AR5523_MAX_NRATES); BUG_ON(i >= AR5523_MAX_NRATES);
ar5523_dbg(ar, "Considering rate %d : %d\n", ar5523_dbg(ar, "Considering rate %d : %d\n",

View File

@ -2639,7 +2639,7 @@ int ath5k_start(struct ieee80211_hw *hw)
* be followed by initialization of the appropriate bits * be followed by initialization of the appropriate bits
* and then setup of the interrupt mask. * 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 ah->imask = AR5K_INT_RXOK
| AR5K_INT_RXERR | AR5K_INT_RXERR
| AR5K_INT_RXEOL | AR5K_INT_RXEOL

View File

@ -202,7 +202,7 @@ ath5k_config(struct ieee80211_hw *hw, u32 changed)
mutex_lock(&ah->lock); mutex_lock(&ah->lock);
if (changed & IEEE80211_CONF_CHANGE_CHANNEL) { if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
ret = ath5k_chan_set(ah, conf->channel); ret = ath5k_chan_set(ah, conf->chandef.chan);
if (ret < 0) if (ret < 0)
goto unlock; 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)); memcpy(survey, &ah->survey, sizeof(*survey));
survey->channel = conf->channel; survey->channel = conf->chandef.chan;
survey->noise = ah->ah_noise_floor; survey->noise = ah->ah_noise_floor;
survey->filled = SURVEY_INFO_NOISE_DBM | survey->filled = SURVEY_INFO_NOISE_DBM |
SURVEY_INFO_CHANNEL_TIME | SURVEY_INFO_CHANNEL_TIME |

View File

@ -79,7 +79,7 @@ static void ath9k_beacon_setup(struct ath_softc *sc, struct ieee80211_vif *vif,
u8 chainmask = ah->txchainmask; u8 chainmask = ah->txchainmask;
u8 rate = 0; 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; rate = sband->bitrates[rateidx].hw_value;
if (vif->bss_conf.use_short_preamble) if (vif->bss_conf.use_short_preamble)
rate |= sband->bitrates[rateidx].hw_value_short; rate |= sband->bitrates[rateidx].hw_value_short;

View File

@ -208,7 +208,7 @@ bool ath9k_hw_reset_calvalid(struct ath_hw *ah)
return true; return true;
ath_dbg(common, CALIBRATE, "Resetting Cal %d state for channel %u\n", 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; ah->caldata->CalValid &= ~currCal->calData->calType;
currCal->calState = CAL_WAITING; currCal->calState = CAL_WAITING;

View File

@ -133,13 +133,14 @@ EXPORT_SYMBOL(ath9k_cmn_update_ichannel);
struct ath9k_channel *ath9k_cmn_get_curchannel(struct ieee80211_hw *hw, struct ath9k_channel *ath9k_cmn_get_curchannel(struct ieee80211_hw *hw,
struct ath_hw *ah) struct ath_hw *ah)
{ {
struct ieee80211_channel *curchan = hw->conf.channel; struct ieee80211_channel *curchan = hw->conf.chandef.chan;
struct ath9k_channel *channel; struct ath9k_channel *channel;
u8 chan_idx; u8 chan_idx;
chan_idx = curchan->hw_value; chan_idx = curchan->hw_value;
channel = &ah->channels[chan_idx]; 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; return channel;
} }

View File

@ -190,7 +190,7 @@ void ath9k_htc_reset(struct ath9k_htc_priv *priv)
{ {
struct ath_hw *ah = priv->ah; struct ath_hw *ah = priv->ah;
struct ath_common *common = ath9k_hw_common(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; struct ath9k_hw_cal_data *caldata = NULL;
enum htc_phymode mode; enum htc_phymode mode;
__be16 htc_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 ath_common *common = ath9k_hw_common(ah);
struct ieee80211_conf *conf = &common->hw->conf; struct ieee80211_conf *conf = &common->hw->conf;
bool fastcc; bool fastcc;
struct ieee80211_channel *channel = hw->conf.channel; struct ieee80211_channel *channel = hw->conf.chandef.chan;
struct ath9k_hw_cal_data *caldata = NULL; struct ath9k_hw_cal_data *caldata = NULL;
enum htc_phymode mode; enum htc_phymode mode;
__be16 htc_mode; __be16 htc_mode;
@ -602,7 +602,7 @@ static void ath9k_htc_setup_rate(struct ath9k_htc_priv *priv,
u32 caps = 0; u32 caps = 0;
int i, j; 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++) { for (i = 0, j = 0; i < sband->n_bitrates; i++) {
if (sta->supp_rates[sband->band] & BIT(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 ath9k_htc_priv *priv = hw->priv;
struct ath_hw *ah = priv->ah; struct ath_hw *ah = priv->ah;
struct ath_common *common = ath9k_hw_common(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; struct ath9k_channel *init_channel;
int ret = 0; int ret = 0;
enum htc_phymode mode; 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) { 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; int pos = curchan->hw_value;
ath_dbg(common, CONFIG, "Set channel: %d MHz\n", ath_dbg(common, CONFIG, "Set channel: %d MHz\n",
curchan->center_freq); curchan->center_freq);
ath9k_cmn_update_ichannel(&priv->ah->channels[pos], ath9k_cmn_update_ichannel(&priv->ah->channels[pos],
hw->conf.channel, hw->conf.chandef.chan,
hw->conf.channel_type); channel_type);
if (ath9k_htc_set_channel(priv, hw, &priv->ah->channels[pos]) < 0) { if (ath9k_htc_set_channel(priv, hw, &priv->ah->channels[pos]) < 0) {
ath_err(common, "Unable to set channel\n"); ath_err(common, "Unable to set channel\n");

View File

@ -490,7 +490,7 @@ static void ath9k_htc_tx_process(struct ath9k_htc_priv *priv,
if (txs->ts_flags & ATH9K_HTC_TXSTAT_SGI) if (txs->ts_flags & ATH9K_HTC_TXSTAT_SGI)
rate->flags |= IEEE80211_TX_RC_SHORT_GI; rate->flags |= IEEE80211_TX_RC_SHORT_GI;
} else { } else {
if (cur_conf->channel->band == IEEE80211_BAND_5GHZ) if (cur_conf->chandef.chan->band == IEEE80211_BAND_5GHZ)
rate->idx += 4; /* No CCK rates */ rate->idx += 4; /* No CCK rates */
} }
@ -939,7 +939,7 @@ static void ath9k_process_rate(struct ieee80211_hw *hw,
return; return;
} }
band = hw->conf.channel->band; band = hw->conf.chandef.chan->band;
sband = hw->wiphy->bands[band]; sband = hw->wiphy->bands[band];
for (i = 0; i < sband->n_bitrates; i++) { 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; priv->ah->stats.avgbrssi = rxbuf->rxstatus.rs_rssi;
rx_status->mactime = be64_to_cpu(rxbuf->rxstatus.rs_tstamp); rx_status->mactime = be64_to_cpu(rxbuf->rxstatus.rs_tstamp);
rx_status->band = hw->conf.channel->band; rx_status->band = hw->conf.chandef.chan->band;
rx_status->freq = hw->conf.channel->center_freq; rx_status->freq = hw->conf.chandef.chan->center_freq;
rx_status->signal = rxbuf->rxstatus.rs_rssi + ATH_DEFAULT_NOISE_FLOOR; rx_status->signal = rxbuf->rxstatus.rs_rssi + ATH_DEFAULT_NOISE_FLOOR;
rx_status->antenna = rxbuf->rxstatus.rs_antenna; rx_status->antenna = rxbuf->rxstatus.rs_antenna;
rx_status->flag |= RX_FLAG_MACTIME_END; rx_status->flag |= RX_FLAG_MACTIME_END;

View File

@ -139,7 +139,7 @@ static void ath9k_hw_set_clockrate(struct ath_hw *ah)
clockrate = 117; clockrate = 117;
else if (!ah->curchan) /* should really check for CCK instead */ else if (!ah->curchan) /* should really check for CCK instead */
clockrate = ATH9K_CLOCK_RATE_CCK; 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; clockrate = ATH9K_CLOCK_RATE_2GHZ_OFDM;
else if (ah->caps.hw_caps & ATH9K_HW_CAP_FASTCLOCK) else if (ah->caps.hw_caps & ATH9K_HW_CAP_FASTCLOCK)
clockrate = ATH9K_CLOCK_FAST_RATE_5GHZ_OFDM; 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 * BA frames in some implementations, but it has been found to fix ACK
* timeout issues in other cases as well. * 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)) { !IS_CHAN_HALF_RATE(chan) && !IS_CHAN_QUARTER_RATE(chan)) {
acktimeout += 64 - sifstime - ah->slottime; acktimeout += 64 - sifstime - ah->slottime;
ctstimeout += 48 - sifstime - ah->slottime; ctstimeout += 48 - sifstime - ah->slottime;

View 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]; txctl.txq = sc->tx.txq_map[IEEE80211_AC_BE];
memset(tx_info, 0, sizeof(*tx_info)); 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->flags |= IEEE80211_TX_CTL_NO_ACK;
tx_info->control.rates[0].idx = 0; tx_info->control.rates[0].idx = 0;
tx_info->control.rates[0].count = 1; tx_info->control.rates[0].count = 1;

View File

@ -585,7 +585,7 @@ static int ath9k_start(struct ieee80211_hw *hw)
struct ath_softc *sc = hw->priv; struct ath_softc *sc = hw->priv;
struct ath_hw *ah = sc->sc_ah; struct ath_hw *ah = sc->sc_ah;
struct ath_common *common = ath9k_hw_common(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; struct ath9k_channel *init_channel;
int r; int r;
@ -1184,7 +1184,9 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
} }
if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) { 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 pos = curchan->hw_value;
int old_pos = -1; int old_pos = -1;
unsigned long flags; unsigned long flags;
@ -1193,7 +1195,7 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
old_pos = ah->curchan - &ah->channels[0]; old_pos = ah->curchan - &ah->channels[0];
ath_dbg(common, CONFIG, "Set channel: %d MHz type: %d\n", 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 */ /* update survey stats for the old channel before switching */
spin_lock_irqsave(&common->cc_lock, flags); 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_hw_getnf(ah, ah->curchan);
ath9k_cmn_update_ichannel(&sc->sc_ah->channels[pos], 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 * If the operating channel changes, change the survey in-use flags

View 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 * So, set fourth rate in series to be same as third one for
* above conditions. * 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))) { (conf_is_ht(&sc->hw->conf))) {
u8 dot11rate = rate_table->info[rix].dot11rate; u8 dot11rate = rate_table->info[rix].dot11rate;
u8 phy = rate_table->info[rix].phy; 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, ath_dbg(ath9k_hw_common(sc->sc_ah), CONFIG,
"Operating HT Bandwidth changed to: %d\n", "Operating HT Bandwidth changed to: %d\n",
sc->hw->conf.channel_type); cfg80211_get_chandef_type(&sc->hw->conf.chandef));
} }
} }

View File

@ -859,7 +859,7 @@ static int ath9k_process_rate(struct ath_common *common,
unsigned int i = 0; unsigned int i = 0;
struct ath_softc __maybe_unused *sc = common->priv; struct ath_softc __maybe_unused *sc = common->priv;
band = hw->conf.channel->band; band = hw->conf.chandef.chan->band;
sband = hw->wiphy->bands[band]; sband = hw->wiphy->bands[band];
if (rx_stats->rs_rate & 0x80) { 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)) if (ath9k_process_rate(common, hw, rx_stats, rx_status))
return -EINVAL; return -EINVAL;
rx_status->band = hw->conf.channel->band; rx_status->band = hw->conf.chandef.chan->band;
rx_status->freq = hw->conf.channel->center_freq; rx_status->freq = hw->conf.chandef.chan->center_freq;
rx_status->signal = ah->noise + rx_stats->rs_rssi; rx_status->signal = ah->noise + rx_stats->rs_rssi;
rx_status->antenna = rx_stats->rs_antenna; rx_status->antenna = rx_stats->rs_antenna;
rx_status->flag |= RX_FLAG_MACTIME_END; rx_status->flag |= RX_FLAG_MACTIME_END;

View File

@ -654,8 +654,9 @@ static ssize_t carl9170_debugfs_bug_write(struct ar9170 *ar, const char *buf,
goto out; goto out;
case 'P': case 'P':
err = carl9170_set_channel(ar, ar->hw->conf.channel, err = carl9170_set_channel(ar, ar->hw->conf.chandef.chan,
ar->hw->conf.channel_type, CARL9170_RFI_COLD); cfg80211_get_chandef_type(&ar->hw->conf.chandef),
CARL9170_RFI_COLD);
if (err < 0) if (err < 0)
count = err; count = err;

View File

@ -48,7 +48,7 @@ int carl9170_set_dyn_sifs_ack(struct ar9170 *ar)
if (conf_is_ht40(&ar->hw->conf)) if (conf_is_ht40(&ar->hw->conf))
val = 0x010a; val = 0x010a;
else { else {
if (ar->hw->conf.channel->band == IEEE80211_BAND_2GHZ) if (ar->hw->conf.chandef.chan->band == IEEE80211_BAND_2GHZ)
val = 0x105; val = 0x105;
else else
val = 0x104; val = 0x104;
@ -66,7 +66,7 @@ int carl9170_set_rts_cts_rate(struct ar9170 *ar)
rts_rate = 0x1da; rts_rate = 0x1da;
cts_rate = 0x10a; cts_rate = 0x10a;
} else { } else {
if (ar->hw->conf.channel->band == IEEE80211_BAND_2GHZ) { if (ar->hw->conf.chandef.chan->band == IEEE80211_BAND_2GHZ) {
/* 11 mbit CCK */ /* 11 mbit CCK */
rts_rate = 033; rts_rate = 033;
cts_rate = 003; cts_rate = 003;
@ -93,7 +93,7 @@ int carl9170_set_slot_time(struct ar9170 *ar)
return 0; 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) vif->bss_conf.use_short_slot)
slottime = 9; slottime = 9;
@ -120,7 +120,7 @@ int carl9170_set_mac_rates(struct ar9170 *ar)
basic |= (vif->bss_conf.basic_rates & 0xff0) << 4; basic |= (vif->bss_conf.basic_rates & 0xff0) << 4;
rcu_read_unlock(); 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 */ mandatory = 0xff00; /* OFDM 6/9/12/18/24/36/48/54 */
else else
mandatory = 0xff0f; /* OFDM (6/9../54) + CCK (1/2/5.5/11) */ mandatory = 0xff0f; /* OFDM (6/9../54) + CCK (1/2/5.5/11) */

View File

@ -929,6 +929,9 @@ static int carl9170_op_config(struct ieee80211_hw *hw, u32 changed)
} }
if (changed & IEEE80211_CONF_CHANGE_CHANNEL) { 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 */ /* adjust slot time for 5 GHz */
err = carl9170_set_slot_time(ar); err = carl9170_set_slot_time(ar);
if (err) if (err)
@ -938,8 +941,8 @@ static int carl9170_op_config(struct ieee80211_hw *hw, u32 changed)
if (err) if (err)
goto out; goto out;
err = carl9170_set_channel(ar, hw->conf.channel, err = carl9170_set_channel(ar, hw->conf.chandef.chan,
hw->conf.channel_type, CARL9170_RFI_NONE); channel_type, CARL9170_RFI_NONE);
if (err) if (err)
goto out; goto out;
@ -957,7 +960,7 @@ static int carl9170_op_config(struct ieee80211_hw *hw, u32 changed)
} }
if (changed & IEEE80211_CONF_CHANGE_POWER) { 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) if (err)
goto out; goto out;
} }

View 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_ETSI for 2GHz and CTL_FCC for 5GHz.
*/ */
ctl_grp = ath_regd_get_band_ctl(&ar->common.regulatory, 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 */ /* ctl group not found - either invalid band (NO_CTL) or ww roaming */
if (ctl_grp == NO_CTL || ctl_grp == SD_NO_CTL) 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 */ /* skip CTL and heavy clip for CTL_MKK and CTL_ETSI */
return; return;
if (ar->hw->conf.channel->band == IEEE80211_BAND_2GHZ) { if (ar->hw->conf.chandef.chan->band == IEEE80211_BAND_2GHZ) {
modes = mode_list_2ghz; modes = mode_list_2ghz;
nr_modes = ARRAY_SIZE(mode_list_2ghz); nr_modes = ARRAY_SIZE(mode_list_2ghz);
} else { } else {

View 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) 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) static inline int b43_bus_may_powerdown(struct b43_wldev *wldev)

View File

@ -3848,7 +3848,7 @@ static int b43_op_config(struct ieee80211_hw *hw, u32 changed)
dev = wl->current_dev; dev = wl->current_dev;
/* Switch the band (if necessary). This might change the active core. */ /* 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) if (err)
goto out_unlock_mutex; goto out_unlock_mutex;
@ -3878,8 +3878,8 @@ static int b43_op_config(struct ieee80211_hw *hw, u32 changed)
/* Switch to the requested channel. /* Switch to the requested channel.
* The firmware takes care of races with the TX handler. */ * The firmware takes care of races with the TX handler. */
if (conf->channel->hw_value != phy->channel) if (conf->chandef.chan->hw_value != phy->channel)
b43_switch_channel(dev, conf->channel->hw_value); b43_switch_channel(dev, conf->chandef.chan->hw_value);
dev->wl->radiotap_enabled = !!(conf->flags & IEEE80211_CONF_MONITOR); 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) if (idx != 0)
return -ENOENT; return -ENOENT;
survey->channel = conf->channel; survey->channel = conf->chandef.chan;
survey->filled = SURVEY_INFO_NOISE_DBM; survey->filled = SURVEY_INFO_NOISE_DBM;
survey->noise = dev->stats.link_noise; survey->noise = dev->stats.link_noise;

View 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, static int b43_phy_ht_op_switch_channel(struct b43_wldev *dev,
unsigned int new_channel) unsigned int new_channel)
{ {
struct ieee80211_channel *channel = dev->wl->hw->conf.channel; struct ieee80211_channel *channel = dev->wl->hw->conf.chandef.chan;
enum nl80211_channel_type channel_type = dev->wl->hw->conf.channel_type; 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 (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) {
if ((new_channel < 1) || (new_channel > 14)) if ((new_channel < 1) || (new_channel > 14))

View 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, static int b43_phy_lcn_op_switch_channel(struct b43_wldev *dev,
unsigned int new_channel) unsigned int new_channel)
{ {
struct ieee80211_channel *channel = dev->wl->hw->conf.channel; struct ieee80211_channel *channel = dev->wl->hw->conf.chandef.chan;
enum nl80211_channel_type channel_type = dev->wl->hw->conf.channel_type; 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 (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) {
if ((new_channel < 1) || (new_channel > 14)) if ((new_channel < 1) || (new_channel > 14))

View 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, static int b43_nphy_op_switch_channel(struct b43_wldev *dev,
unsigned int new_channel) unsigned int new_channel)
{ {
struct ieee80211_channel *channel = dev->wl->hw->conf.channel; struct ieee80211_channel *channel = dev->wl->hw->conf.chandef.chan;
enum nl80211_channel_type channel_type = dev->wl->hw->conf.channel_type; 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 (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) {
if ((new_channel < 1) || (new_channel > 14)) if ((new_channel < 1) || (new_channel > 14))

View File

@ -2720,7 +2720,7 @@ static int b43legacy_op_dev_config(struct ieee80211_hw *hw,
goto out_unlock_mutex; goto out_unlock_mutex;
/* Switch the PHY mode (if necessary). */ /* Switch the PHY mode (if necessary). */
switch (conf->channel->band) { switch (conf->chandef.chan->band) {
case IEEE80211_BAND_2GHZ: case IEEE80211_BAND_2GHZ:
if (phy->type == B43legacy_PHYTYPE_B) if (phy->type == B43legacy_PHYTYPE_B)
new_phymode = B43legacy_PHYMODE_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. /* Switch to the requested channel.
* The firmware takes care of races with the TX handler. */ * The firmware takes care of races with the TX handler. */
if (conf->channel->hw_value != phy->channel) if (conf->chandef.chan->hw_value != phy->channel)
b43legacy_radio_selectchannel(dev, conf->channel->hw_value, 0); b43legacy_radio_selectchannel(dev, conf->chandef.chan->hw_value,
0);
dev->wl->radiotap_enabled = !!(conf->flags & IEEE80211_CONF_MONITOR); 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) if (idx != 0)
return -ENOENT; return -ENOENT;
survey->channel = conf->channel; survey->channel = conf->chandef.chan;
survey->filled = SURVEY_INFO_NOISE_DBM; survey->filled = SURVEY_INFO_NOISE_DBM;
survey->noise = dev->stats.link_noise; survey->noise = dev->stats.link_noise;

View File

@ -379,7 +379,7 @@ brcms_c_channel_set_chanspec(struct brcms_cm_info *wlc_cm, u16 chanspec,
u8 local_constraint_qdbm) u8 local_constraint_qdbm)
{ {
struct brcms_c_info *wlc = wlc_cm->wlc; 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; struct txpwr_limits txpwr;
brcms_c_channel_reg_limits(wlc_cm, chanspec, &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 txpwr_limits *txpwr)
{ {
struct brcms_c_info *wlc = wlc_cm->wlc; 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 i;
uint chan; uint chan;
int maxpwr; int maxpwr;

View File

@ -414,10 +414,10 @@ static int brcms_ops_config(struct ieee80211_hw *hw, u32 changed)
new_int); new_int);
} }
if (changed & IEEE80211_CONF_CHANGE_CHANNEL) { if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
if (conf->channel_type == NL80211_CHAN_HT20 || if (conf->chandef.width == NL80211_CHAN_WIDTH_20 ||
conf->channel_type == NL80211_CHAN_NO_HT) conf->chandef.width == NL80211_CHAN_WIDTH_20_NOHT)
err = brcms_c_set_channel(wl->wlc, err = brcms_c_set_channel(wl->wlc,
conf->channel->hw_value); conf->chandef.chan->hw_value);
else else
err = -ENOTSUPP; err = -ENOTSUPP;
} }

View File

@ -5099,7 +5099,7 @@ int brcms_c_up(struct brcms_c_info *wlc)
wlc->pub->up = true; wlc->pub->up = true;
if (wlc->bandinit_pending) { 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_suspend_mac_and_wait(wlc);
brcms_c_set_chanspec(wlc, ch20mhz_chspec(ch->hw_value)); brcms_c_set_chanspec(wlc, ch20mhz_chspec(ch->hw_value));
wlc->bandinit_pending = false; 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) void brcms_c_init(struct brcms_c_info *wlc, bool mute_tx)
{ {
struct bcma_device *core = wlc->hw->d11core; 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; u16 chanspec;
brcms_dbg_info(core, "wl%d\n", wlc->pub->unit); brcms_dbg_info(core, "wl%d\n", wlc->pub->unit);

View 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; psta = (struct il3945_sta_priv *)sta->drv_priv;
rs_sta = &psta->rs_sta; rs_sta = &psta->rs_sta;
sband = hw->wiphy->bands[conf->channel->band]; sband = hw->wiphy->bands[conf->chandef.chan->band];
rs_sta->il = il; rs_sta->il = il;

View 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; sta_priv = (struct il_station_priv *)sta->drv_priv;
lq_sta = &sta_priv->lq_sta; 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; lq_sta->lq.sta_id = sta_id;

View File

@ -4974,7 +4974,7 @@ il_mac_config(struct ieee80211_hw *hw, u32 changed)
struct il_priv *il = hw->priv; struct il_priv *il = hw->priv;
const struct il_channel_info *ch_info; const struct il_channel_info *ch_info;
struct ieee80211_conf *conf = &hw->conf; 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; struct il_ht_config *ht_conf = &il->current_ht_config;
unsigned long flags = 0; unsigned long flags = 0;
int ret = 0; int ret = 0;

View 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; sta_priv = (struct iwl_station_priv *) sta->drv_priv;
lq_sta = &sta_priv->lq_sta; 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; lq_sta->lq.sta_id = sta_id;

View File

@ -78,8 +78,9 @@ void iwl_connection_init_rx_config(struct iwl_priv *priv,
ctx->staging.flags |= RXON_FLG_SHORT_PREAMBLE_MSK; ctx->staging.flags |= RXON_FLG_SHORT_PREAMBLE_MSK;
#endif #endif
ctx->staging.channel = cpu_to_le16(priv->hw->conf.channel->hw_value); ctx->staging.channel =
priv->band = priv->hw->conf.channel->band; 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); 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; unsigned long basic = ctx->vif->bss_conf.basic_rates;
int i; 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) { for_each_set_bit(i, &basic, BITS_PER_LONG) {
int hw = sband->bitrates[i].hw_value; 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_priv *priv = IWL_MAC80211_GET_DVM(hw);
struct iwl_rxon_context *ctx; struct iwl_rxon_context *ctx;
struct ieee80211_conf *conf = &hw->conf; struct ieee80211_conf *conf = &hw->conf;
struct ieee80211_channel *channel = conf->channel; struct ieee80211_channel *channel = conf->chandef.chan;
int ret = 0; int ret = 0;
IWL_DEBUG_MAC80211(priv, "enter: changed %#x\n", changed); IWL_DEBUG_MAC80211(priv, "enter: changed %#x\n", changed);

View File

@ -412,9 +412,9 @@ static int lbtf_op_config(struct ieee80211_hw *hw, u32 changed)
struct ieee80211_conf *conf = &hw->conf; struct ieee80211_conf *conf = &hw->conf;
lbtf_deb_enter(LBTF_DEB_MACOPS); lbtf_deb_enter(LBTF_DEB_MACOPS);
if (conf->channel->center_freq != priv->cur_freq) { if (conf->chandef.chan->center_freq != priv->cur_freq) {
priv->cur_freq = conf->channel->center_freq; priv->cur_freq = conf->chandef.chan->center_freq;
lbtf_set_channel(priv, conf->channel->hw_value); lbtf_set_channel(priv, conf->chandef.chan->hw_value);
} }
lbtf_deb_leave(LBTF_DEB_MACOPS); lbtf_deb_leave(LBTF_DEB_MACOPS);
return 0; return 0;
@ -537,7 +537,7 @@ static int lbtf_op_get_survey(struct ieee80211_hw *hw, int idx,
if (idx != 0) if (idx != 0)
return -ENOENT; return -ENOENT;
survey->channel = conf->channel; survey->channel = conf->chandef.chan;
survey->filled = SURVEY_INFO_NOISE_DBM; survey->filled = SURVEY_INFO_NOISE_DBM;
survey->noise = priv->noise; survey->noise = priv->noise;

View File

@ -1062,11 +1062,13 @@ mac80211_hwsim_beacon(struct hrtimer *timer)
return HRTIMER_NORESTART; return HRTIMER_NORESTART;
} }
static const char *hwsim_chantypes[] = { static const char * const hwsim_chanwidths[] = {
[NL80211_CHAN_NO_HT] = "noht", [NL80211_CHAN_WIDTH_20_NOHT] = "noht",
[NL80211_CHAN_HT20] = "ht20", [NL80211_CHAN_WIDTH_20] = "ht20",
[NL80211_CHAN_HT40MINUS] = "ht40-", [NL80211_CHAN_WIDTH_40] = "ht40",
[NL80211_CHAN_HT40PLUS] = "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) 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", [IEEE80211_SMPS_DYNAMIC] = "dynamic",
}; };
wiphy_debug(hw->wiphy, if (conf->chandef.chan)
"%s (freq=%d/%s idle=%d ps=%d smps=%s)\n", wiphy_debug(hw->wiphy,
__func__, "%s (freq=%d(%d - %d)/%s idle=%d ps=%d smps=%s)\n",
conf->channel ? conf->channel->center_freq : 0, __func__,
hwsim_chantypes[conf->channel_type], conf->chandef.chan->center_freq,
!!(conf->flags & IEEE80211_CONF_IDLE), conf->chandef.center_freq1,
!!(conf->flags & IEEE80211_CONF_PS), conf->chandef.center_freq2,
smps_modes[conf->smps_mode]); 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->idle = !!(conf->flags & IEEE80211_CONF_IDLE);
data->channel = conf->channel; data->channel = conf->chandef.chan;
WARN_ON(data->channel && channels > 1); WARN_ON(data->channel && channels > 1);
@ -1277,7 +1289,7 @@ static int mac80211_hwsim_get_survey(
return -ENOENT; return -ENOENT;
/* Current channel */ /* Current channel */
survey->channel = conf->channel; survey->channel = conf->chandef.chan;
/* /*
* Magically conjured noise level --- this is only ok for simulated hardware. * Magically conjured noise level --- this is only ok for simulated hardware.

View File

@ -2837,7 +2837,9 @@ static int mwl8k_cmd_tx_power(struct ieee80211_hw *hw,
struct ieee80211_conf *conf, struct ieee80211_conf *conf,
unsigned short pwr) 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; struct mwl8k_cmd_tx_power *cmd;
int rc; int rc;
int i; int i;
@ -2857,14 +2859,14 @@ static int mwl8k_cmd_tx_power(struct ieee80211_hw *hw,
cmd->channel = cpu_to_le16(channel->hw_value); cmd->channel = cpu_to_le16(channel->hw_value);
if (conf->channel_type == NL80211_CHAN_NO_HT || if (channel_type == NL80211_CHAN_NO_HT ||
conf->channel_type == NL80211_CHAN_HT20) { channel_type == NL80211_CHAN_HT20) {
cmd->bw = cpu_to_le16(0x2); cmd->bw = cpu_to_le16(0x2);
} else { } else {
cmd->bw = cpu_to_le16(0x4); 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); 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); 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, static int mwl8k_cmd_set_rf_channel(struct ieee80211_hw *hw,
struct ieee80211_conf *conf) 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; struct mwl8k_cmd_set_rf_channel *cmd;
int rc; int rc;
@ -3026,12 +3030,12 @@ static int mwl8k_cmd_set_rf_channel(struct ieee80211_hw *hw,
else if (channel->band == IEEE80211_BAND_5GHZ) else if (channel->band == IEEE80211_BAND_5GHZ)
cmd->channel_flags |= cpu_to_le32(0x00000004); cmd->channel_flags |= cpu_to_le32(0x00000004);
if (conf->channel_type == NL80211_CHAN_NO_HT || if (channel_type == NL80211_CHAN_NO_HT ||
conf->channel_type == NL80211_CHAN_HT20) channel_type == NL80211_CHAN_HT20)
cmd->channel_flags |= cpu_to_le32(0x00000080); 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); 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); cmd->channel_flags |= cpu_to_le32(0x000000900);
rc = mwl8k_post_cmd(hw, &cmd->header); 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); memcpy(cmd->mac_addr, sta->addr, ETH_ALEN);
cmd->stn_id = cpu_to_le16(sta->aid); cmd->stn_id = cpu_to_le16(sta->aid);
cmd->action = cpu_to_le16(MWL8K_STA_ACTION_ADD); 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]; rates = sta->supp_rates[IEEE80211_BAND_2GHZ];
else else
rates = sta->supp_rates[IEEE80211_BAND_5GHZ] << 5; 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->ht_caps = cpu_to_le16(sta->ht_cap.cap);
p->extended_ht_caps = (sta->ht_cap.ampdu_factor & 3) | p->extended_ht_caps = (sta->ht_cap.ampdu_factor & 3) |
((sta->ht_cap.ampdu_density & 7) << 2); ((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]; rates = sta->supp_rates[IEEE80211_BAND_2GHZ];
else else
rates = sta->supp_rates[IEEE80211_BAND_5GHZ] << 5; 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; 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]; ap_legacy_rates = ap->supp_rates[IEEE80211_BAND_2GHZ];
} else { } else {
ap_legacy_rates = ap_legacy_rates =
@ -4900,7 +4904,7 @@ mwl8k_bss_info_changed_sta(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
if (idx) if (idx)
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; rate = mwl8k_rates_24[idx].hw_value;
else else
rate = mwl8k_rates_50[idx].hw_value; 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) if (idx)
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; rate = mwl8k_rates_24[idx].hw_value;
else else
rate = mwl8k_rates_50[idx].hw_value; 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) if (idx != 0)
return -ENOENT; return -ENOENT;
survey->channel = conf->channel; survey->channel = conf->chandef.chan;
survey->filled = SURVEY_INFO_NOISE_DBM; survey->filled = SURVEY_INFO_NOISE_DBM;
survey->noise = priv->noise; survey->noise = priv->noise;

View File

@ -402,7 +402,7 @@ int p54_scan(struct p54_common *priv, u16 mode, u16 dwell)
struct p54_rssi_db_entry *rssi_data; struct p54_rssi_db_entry *rssi_data;
unsigned int i; unsigned int i;
void *entry; 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) + skb = p54_alloc_skb(priv, P54_HDR_FLAG_CONTROL_OPSET, sizeof(*head) +
2 + sizeof(*iq_autocal) + sizeof(*body) + 2 + sizeof(*iq_autocal) + sizeof(*body) +
@ -532,7 +532,7 @@ int p54_scan(struct p54_common *priv, u16 mode, u16 dwell)
err: err:
wiphy_err(priv->hw->wiphy, "frequency change to channel %d failed.\n", wiphy_err(priv->hw->wiphy, "frequency change to channel %d failed.\n",
ieee80211_frequency_to_channel( ieee80211_frequency_to_channel(
priv->hw->conf.channel->center_freq)); priv->hw->conf.chandef.chan->center_freq));
dev_kfree_skb_any(skb); dev_kfree_skb_any(skb);
return -EINVAL; return -EINVAL;

View 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 * TODO: Use the LM_SCAN_TRAP to determine the current
* operating channel. * operating channel.
*/ */
priv->curchan = priv->hw->conf.channel; priv->curchan = priv->hw->conf.chandef.chan;
p54_reset_stats(priv); p54_reset_stats(priv);
WARN_ON(p54_fetch_statistics(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); p54_set_edcf(priv);
} }
if (changed & BSS_CHANGED_BASIC_RATES) { 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); priv->basic_rate_mask = (info->basic_rates << 4);
else else
priv->basic_rate_mask = info->basic_rates; priv->basic_rate_mask = info->basic_rates;

View 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); rx_status->signal = p54_rssi_to_dbm(priv, hdr->rssi);
if (hdr->rate & 0x10) if (hdr->rate & 0x10)
rx_status->flag |= RX_FLAG_SHORTPRE; 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; rx_status->rate_idx = (rate < 4) ? 0 : rate - 4;
else else
rx_status->rate_idx = rate; rx_status->rate_idx = rate;
rx_status->freq = freq; 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; rx_status->antenna = hdr->antenna;
tsf32 = le32_to_cpu(hdr->tsf32); tsf32 = le32_to_cpu(hdr->tsf32);

View File

@ -2763,7 +2763,7 @@ static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
void rt2800_gain_calibration(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); rt2x00dev->tx_power);
} }
EXPORT_SYMBOL_GPL(rt2800_gain_calibration); EXPORT_SYMBOL_GPL(rt2800_gain_calibration);
@ -2898,11 +2898,11 @@ void rt2800_config(struct rt2x00_dev *rt2x00dev,
if (flags & IEEE80211_CONF_CHANGE_CHANNEL) { if (flags & IEEE80211_CONF_CHANGE_CHANNEL) {
rt2800_config_channel(rt2x00dev, libconf->conf, rt2800_config_channel(rt2x00dev, libconf->conf,
&libconf->rf, &libconf->channel); &libconf->rf, &libconf->channel);
rt2800_config_txpower(rt2x00dev, libconf->conf->channel, rt2800_config_txpower(rt2x00dev, libconf->conf->chandef.chan,
libconf->conf->power_level); libconf->conf->power_level);
} }
if (flags & IEEE80211_CONF_CHANGE_POWER) 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); libconf->conf->power_level);
if (flags & IEEE80211_CONF_CHANGE_RETRY_LIMITS) if (flags & IEEE80211_CONF_CHANGE_RETRY_LIMITS)
rt2800_config_retry_limit(rt2x00dev, libconf); rt2800_config_retry_limit(rt2x00dev, libconf);
@ -5563,7 +5563,7 @@ int rt2800_get_survey(struct ieee80211_hw *hw, int idx,
if (idx != 0) if (idx != 0)
return -ENOENT; return -ENOENT;
survey->channel = conf->channel; survey->channel = conf->chandef.chan;
rt2800_register_read(rt2x00dev, CH_IDLE_STA, &idle); rt2800_register_read(rt2x00dev, CH_IDLE_STA, &idle);
rt2800_register_read(rt2x00dev, CH_BUSY_STA, &busy); rt2800_register_read(rt2x00dev, CH_BUSY_STA, &busy);

View File

@ -184,7 +184,7 @@ static u16 rt2x00ht_center_channel(struct rt2x00_dev *rt2x00dev,
/* /*
* Initialize center channel to current channel. * 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. * Adjust center channel to HT40+ and HT40- operation.
@ -199,7 +199,7 @@ static u16 rt2x00ht_center_channel(struct rt2x00_dev *rt2x00dev,
return i; return i;
WARN_ON(1); WARN_ON(1);
return conf->channel->hw_value; return conf->chandef.chan->hw_value;
} }
void rt2x00lib_config(struct rt2x00_dev *rt2x00dev, 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); hw_value = rt2x00ht_center_channel(rt2x00dev, conf);
} else { } else {
clear_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags); clear_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags);
hw_value = conf->channel->hw_value; hw_value = conf->chandef.chan->hw_value;
} }
memcpy(&libconf.rf, memcpy(&libconf.rf,
@ -279,8 +279,8 @@ void rt2x00lib_config(struct rt2x00_dev *rt2x00dev,
else else
clear_bit(CONFIG_POWERSAVING, &rt2x00dev->flags); clear_bit(CONFIG_POWERSAVING, &rt2x00dev->flags);
rt2x00dev->curr_band = conf->channel->band; rt2x00dev->curr_band = conf->chandef.chan->band;
rt2x00dev->curr_freq = conf->channel->center_freq; rt2x00dev->curr_freq = conf->chandef.chan->center_freq;
rt2x00dev->tx_power = conf->power_level; rt2x00dev->tx_power = conf->power_level;
rt2x00dev->short_retry = conf->short_frame_max_tx_count; rt2x00dev->short_retry = conf->short_frame_max_tx_count;
rt2x00dev->long_retry = conf->long_frame_max_tx_count; rt2x00dev->long_retry = conf->long_frame_max_tx_count;

View File

@ -847,7 +847,7 @@ static void rt61pci_config_lna_gain(struct rt2x00_dev *rt2x00dev,
u16 eeprom; u16 eeprom;
short lna_gain = 0; 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)) if (test_bit(CAPABILITY_EXTERNAL_LNA_BG, &rt2x00dev->cap_flags))
lna_gain += 14; lna_gain += 14;

View File

@ -739,7 +739,7 @@ static void rt73usb_config_lna_gain(struct rt2x00_dev *rt2x00dev,
u16 eeprom; u16 eeprom;
short lna_gain = 0; 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)) if (test_bit(CAPABILITY_EXTERNAL_LNA_BG, &rt2x00dev->cap_flags))
lna_gain += 14; lna_gain += 14;

View File

@ -147,8 +147,8 @@ static void rtl8180_handle_rx(struct ieee80211_hw *dev)
signal = priv->rf->calc_rssi(agc, sq); signal = priv->rf->calc_rssi(agc, sq);
} }
rx_status.signal = signal; rx_status.signal = signal;
rx_status.freq = dev->conf.channel->center_freq; rx_status.freq = dev->conf.chandef.chan->center_freq;
rx_status.band = dev->conf.channel->band; rx_status.band = dev->conf.chandef.chan->band;
rx_status.mactime = le64_to_cpu(entry->tsft); rx_status.mactime = le64_to_cpu(entry->tsft);
rx_status.flag |= RX_FLAG_MACTIME_START; rx_status.flag |= RX_FLAG_MACTIME_START;
if (flags & RTL818X_RX_DESC_FLAG_CRC32_ERR) if (flags & RTL818X_RX_DESC_FLAG_CRC32_ERR)

View File

@ -82,7 +82,8 @@ static void grf5101_rf_set_channel(struct ieee80211_hw *dev,
struct ieee80211_conf *conf) struct ieee80211_conf *conf)
{ {
struct rtl8180_priv *priv = dev->priv; 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 txpw = priv->channels[channel - 1].hw_value & 0xFF;
u32 chan = channel - 1; u32 chan = channel - 1;

View File

@ -95,7 +95,7 @@ static void max2820_rf_set_channel(struct ieee80211_hw *dev,
{ {
struct rtl8180_priv *priv = dev->priv; struct rtl8180_priv *priv = dev->priv;
int channel = conf ? 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; unsigned int chan_idx = channel - 1;
u32 txpw = priv->channels[chan_idx].hw_value & 0xFF; u32 txpw = priv->channels[chan_idx].hw_value & 0xFF;
u32 chan = max2820_chan[chan_idx]; u32 chan = max2820_chan[chan_idx];

View File

@ -719,7 +719,8 @@ static void rtl8225_rf_set_channel(struct ieee80211_hw *dev,
struct ieee80211_conf *conf) struct ieee80211_conf *conf)
{ {
struct rtl8180_priv *priv = dev->priv; 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) if (priv->rf->init == rtl8225_rf_init)
rtl8225_rf_set_tx_power(dev, chan); rtl8225_rf_set_tx_power(dev, chan);

View File

@ -105,7 +105,8 @@ static void sa2400_rf_set_channel(struct ieee80211_hw *dev,
struct ieee80211_conf *conf) struct ieee80211_conf *conf)
{ {
struct rtl8180_priv *priv = dev->priv; 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 txpw = priv->channels[channel - 1].hw_value & 0xFF;
u32 chan = sa2400_chan[channel - 1]; u32 chan = sa2400_chan[channel - 1];

View File

@ -379,8 +379,8 @@ static void rtl8187_rx_cb(struct urb *urb)
rate = (flags >> 20) & 0xF; rate = (flags >> 20) & 0xF;
skb_trim(skb, flags & 0x0FFF); skb_trim(skb, flags & 0x0FFF);
rx_status.rate_idx = rate; rx_status.rate_idx = rate;
rx_status.freq = dev->conf.channel->center_freq; rx_status.freq = dev->conf.chandef.chan->center_freq;
rx_status.band = dev->conf.channel->band; rx_status.band = dev->conf.chandef.chan->band;
rx_status.flag |= RX_FLAG_MACTIME_START; rx_status.flag |= RX_FLAG_MACTIME_START;
if (flags & RTL818X_RX_DESC_FLAG_CRC32_ERR) if (flags & RTL818X_RX_DESC_FLAG_CRC32_ERR)
rx_status.flag |= RX_FLAG_FAILED_FCS_CRC; rx_status.flag |= RX_FLAG_FAILED_FCS_CRC;

View File

@ -905,7 +905,8 @@ static void rtl8225_rf_set_channel(struct ieee80211_hw *dev,
struct ieee80211_conf *conf) struct ieee80211_conf *conf)
{ {
struct rtl8187_priv *priv = dev->priv; 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) if (priv->rf->init == rtl8225_rf_init)
rtl8225_rf_set_tx_power(dev, chan); rtl8225_rf_set_tx_power(dev, chan);

View File

@ -691,7 +691,7 @@ int rtlwifi_rate_mapping(struct ieee80211_hw *hw,
int rate_idx; int rate_idx;
if (false == isht) { if (false == isht) {
if (IEEE80211_BAND_2GHZ == hw->conf.channel->band) { if (IEEE80211_BAND_2GHZ == hw->conf.chandef.chan->band) {
switch (desc_rate) { switch (desc_rate) {
case DESC92_RATE1M: case DESC92_RATE1M:
rate_idx = 0; 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); rtlpriv->cfg->ops->update_rate_tbl(hw, sta, 0);
info->control.rates[0].idx = 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); rtlpriv->intf_ops->adapter_tx(hw, sta, skb, &tcb_desc);
} }
err_free: err_free:

View File

@ -320,7 +320,7 @@ static int rtl_op_config(struct ieee80211_hw *hw, u32 changed)
} }
if (changed & IEEE80211_CONF_CHANGE_CHANNEL) { 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; 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 *info for cisco1253 bw20, so we modify
*it here based on UPPER & LOWER *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_HT20:
case NL80211_CHAN_NO_HT: case NL80211_CHAN_NO_HT:
/* SC */ /* 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->switch_channel(hw);
rtlpriv->cfg->ops->set_channel_access(hw); rtlpriv->cfg->ops->set_channel_access(hw);
rtlpriv->cfg->ops->set_bw_mode(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); mutex_unlock(&rtlpriv->locks.conf_mutex);

View File

@ -544,8 +544,8 @@ bool rtl92ce_rx_query_desc(struct ieee80211_hw *hw,
stats->timestamp_low = GET_RX_DESC_TSFL(pdesc); stats->timestamp_low = GET_RX_DESC_TSFL(pdesc);
stats->rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(pdesc); stats->rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(pdesc);
rx_status->freq = hw->conf.channel->center_freq; rx_status->freq = hw->conf.chandef.chan->center_freq;
rx_status->band = hw->conf.channel->band; rx_status->band = hw->conf.chandef.chan->band;
if (GET_RX_DESC_CRC32(pdesc)) if (GET_RX_DESC_CRC32(pdesc))
rx_status->flag |= RX_FLAG_FAILED_FCS_CRC; rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;

View File

@ -324,8 +324,8 @@ bool rtl92cu_rx_query_desc(struct ieee80211_hw *hw,
&& (GET_RX_DESC_FAGGR(pdesc) == 1)); && (GET_RX_DESC_FAGGR(pdesc) == 1));
stats->timestamp_low = GET_RX_DESC_TSFL(pdesc); stats->timestamp_low = GET_RX_DESC_TSFL(pdesc);
stats->rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(pdesc); stats->rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(pdesc);
rx_status->freq = hw->conf.channel->center_freq; rx_status->freq = hw->conf.chandef.chan->center_freq;
rx_status->band = hw->conf.channel->band; rx_status->band = hw->conf.chandef.chan->band;
if (GET_RX_DESC_CRC32(pdesc)) if (GET_RX_DESC_CRC32(pdesc))
rx_status->flag |= RX_FLAG_FAILED_FCS_CRC; rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;
if (!GET_RX_DESC_SWDEC(pdesc)) 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); stats.rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(rxdesc);
/* TODO: is center_freq changed when doing scan? */ /* TODO: is center_freq changed when doing scan? */
/* TODO: Shall we add protection or just skip those two step? */ /* TODO: Shall we add protection or just skip those two step? */
rx_status->freq = hw->conf.channel->center_freq; rx_status->freq = hw->conf.chandef.chan->center_freq;
rx_status->band = hw->conf.channel->band; rx_status->band = hw->conf.chandef.chan->band;
if (GET_RX_DESC_CRC32(rxdesc)) if (GET_RX_DESC_CRC32(rxdesc))
rx_status->flag |= RX_FLAG_FAILED_FCS_CRC; rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;
if (!GET_RX_DESC_SWDEC(rxdesc)) if (!GET_RX_DESC_SWDEC(rxdesc))

View File

@ -499,8 +499,8 @@ bool rtl92de_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats,
&& (GET_RX_DESC_FAGGR(pdesc) == 1)); && (GET_RX_DESC_FAGGR(pdesc) == 1));
stats->timestamp_low = GET_RX_DESC_TSFL(pdesc); stats->timestamp_low = GET_RX_DESC_TSFL(pdesc);
stats->rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(pdesc); stats->rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(pdesc);
rx_status->freq = hw->conf.channel->center_freq; rx_status->freq = hw->conf.chandef.chan->center_freq;
rx_status->band = hw->conf.channel->band; rx_status->band = hw->conf.chandef.chan->band;
if (GET_RX_DESC_CRC32(pdesc)) if (GET_RX_DESC_CRC32(pdesc))
rx_status->flag |= RX_FLAG_FAILED_FCS_CRC; rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;
if (!GET_RX_DESC_SWDEC(pdesc)) if (!GET_RX_DESC_SWDEC(pdesc))

View File

@ -538,8 +538,8 @@ bool rtl92se_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats,
if (stats->hwerror) if (stats->hwerror)
return false; return false;
rx_status->freq = hw->conf.channel->center_freq; rx_status->freq = hw->conf.chandef.chan->center_freq;
rx_status->band = hw->conf.channel->band; rx_status->band = hw->conf.chandef.chan->band;
hdr = (struct ieee80211_hdr *)(skb->data + stats->rx_drvinfo_size hdr = (struct ieee80211_hdr *)(skb->data + stats->rx_drvinfo_size
+ stats->rx_bufshift); + stats->rx_bufshift);

View 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); status->is_cck = RTL8723E_RX_HAL_IS_CCK_RATE(status->rate);
rx_status->freq = hw->conf.channel->center_freq; rx_status->freq = hw->conf.chandef.chan->center_freq;
rx_status->band = hw->conf.channel->band; rx_status->band = hw->conf.chandef.chan->band;
hdr = (struct ieee80211_hdr *)(skb->data + status->rx_drvinfo_size hdr = (struct ieee80211_hdr *)(skb->data + status->rx_drvinfo_size
+ status->rx_bufshift); + status->rx_bufshift);

View File

@ -572,7 +572,8 @@ static int wl1251_op_config(struct ieee80211_hw *hw, u32 changed)
struct ieee80211_conf *conf = &hw->conf; struct ieee80211_conf *conf = &hw->conf;
int channel, ret = 0; 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", wl1251_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d",
channel, channel,
@ -1223,7 +1224,7 @@ static int wl1251_op_get_survey(struct ieee80211_hw *hw, int idx,
if (idx != 0) if (idx != 0)
return -ENOENT; return -ENOENT;
survey->channel = conf->channel; survey->channel = conf->chandef.chan;
survey->filled = SURVEY_INFO_NOISE_DBM; survey->filled = SURVEY_INFO_NOISE_DBM;
survey->noise = wl->noise; survey->noise = wl->noise;

View File

@ -4474,7 +4474,7 @@ static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
if (idx != 0) if (idx != 0)
return -ENOENT; return -ENOENT;
survey->channel = conf->channel; survey->channel = conf->chandef.chan;
survey->filled = 0; survey->filled = 0;
return 0; return 0;
} }

View File

@ -1156,10 +1156,10 @@ static int zd_op_config(struct ieee80211_hw *hw, u32 changed)
struct ieee80211_conf *conf = &hw->conf; struct ieee80211_conf *conf = &hw->conf;
spin_lock_irq(&mac->lock); spin_lock_irq(&mac->lock);
mac->channel = conf->channel->hw_value; mac->channel = conf->chandef.chan->hw_value;
spin_unlock_irq(&mac->lock); 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) static void zd_beacon_done(struct zd_mac *mac)

View File

@ -974,8 +974,7 @@ enum ieee80211_smps_mode {
* @power_level: requested transmit power (in dBm), backward compatibility * @power_level: requested transmit power (in dBm), backward compatibility
* value only that is set to the minimum of all interfaces * value only that is set to the minimum of all interfaces
* *
* @channel: the channel to tune to * @chandef: the channel definition to tune to
* @channel_type: the channel (HT) type
* @radar_enabled: whether radar detection is enabled * @radar_enabled: whether radar detection is enabled
* *
* @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame * @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; u8 long_frame_max_tx_count, short_frame_max_tx_count;
struct ieee80211_channel *channel; struct cfg80211_chan_def chandef;
enum nl80211_channel_type channel_type;
bool radar_enabled; bool radar_enabled;
enum ieee80211_smps_mode smps_mode; enum ieee80211_smps_mode smps_mode;
}; };
@ -4216,31 +4214,33 @@ void ieee80211_rate_control_unregister(struct rate_control_ops *ops);
static inline bool static inline bool
conf_is_ht20(struct ieee80211_conf *conf) 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 static inline bool
conf_is_ht40_minus(struct ieee80211_conf *conf) 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 static inline bool
conf_is_ht40_plus(struct ieee80211_conf *conf) 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 static inline bool
conf_is_ht40(struct ieee80211_conf *conf) 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 static inline bool
conf_is_ht(struct ieee80211_conf *conf) 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 static inline enum nl80211_iftype

View File

@ -805,8 +805,7 @@ static int ieee80211_set_monitor_channel(struct wiphy *wiphy,
IEEE80211_CHANCTX_EXCLUSIVE); IEEE80211_CHANCTX_EXCLUSIVE);
} }
} else if (local->open_count == local->monitors) { } else if (local->open_count == local->monitors) {
local->_oper_channel = chandef->chan; local->_oper_chandef = *chandef;
local->_oper_channel_type = cfg80211_get_chandef_type(chandef);
ieee80211_hw_config(local, 0); ieee80211_hw_config(local, 0);
} }
@ -3373,9 +3372,7 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy,
if (local->use_chanctx) if (local->use_chanctx)
*chandef = local->monitor_chandef; *chandef = local->monitor_chandef;
else else
cfg80211_chandef_create(chandef, *chandef = local->_oper_chandef;
local->_oper_channel,
local->_oper_channel_type);
ret = 0; ret = 0;
} }
rcu_read_unlock(); rcu_read_unlock();

View File

@ -22,7 +22,7 @@ static void ieee80211_change_chanctx(struct ieee80211_local *local,
drv_change_chanctx(local, ctx, IEEE80211_CHANCTX_CHANGE_WIDTH); drv_change_chanctx(local, ctx, IEEE80211_CHANCTX_CHANGE_WIDTH);
if (!local->use_chanctx) { if (!local->use_chanctx) {
local->_oper_channel_type = cfg80211_get_chandef_type(chandef); local->_oper_chandef = *chandef;
ieee80211_hw_config(local, 0); ieee80211_hw_config(local, 0);
} }
} }
@ -77,9 +77,7 @@ ieee80211_new_chanctx(struct ieee80211_local *local,
ctx->mode = mode; ctx->mode = mode;
if (!local->use_chanctx) { if (!local->use_chanctx) {
local->_oper_channel_type = local->_oper_chandef = *chandef;
cfg80211_get_chandef_type(chandef);
local->_oper_channel = chandef->chan;
ieee80211_hw_config(local, 0); ieee80211_hw_config(local, 0);
} else { } else {
err = drv_add_chanctx(local, ctx); 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); WARN_ON_ONCE(ctx->refcount != 0);
if (!local->use_chanctx) { 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); ieee80211_hw_config(local, 0);
} else { } else {
drv_remove_chanctx(local, ctx); drv_remove_chanctx(local, ctx);

View File

@ -1021,8 +1021,7 @@ struct ieee80211_local {
struct ieee80211_sub_if_data __rcu *scan_sdata; struct ieee80211_sub_if_data __rcu *scan_sdata;
struct ieee80211_channel *csa_channel; struct ieee80211_channel *csa_channel;
/* For backward compatibility only -- do not use */ /* For backward compatibility only -- do not use */
struct ieee80211_channel *_oper_channel; struct cfg80211_chan_def _oper_chandef;
enum nl80211_channel_type _oper_channel_type;
/* Temporary remain-on-channel for off-channel operations */ /* Temporary remain-on-channel for off-channel operations */
struct ieee80211_channel *tmp_channel; struct ieee80211_channel *tmp_channel;

View File

@ -95,42 +95,47 @@ static void ieee80211_reconfig_filter(struct work_struct *work)
static u32 ieee80211_hw_conf_chan(struct ieee80211_local *local) static u32 ieee80211_hw_conf_chan(struct ieee80211_local *local)
{ {
struct ieee80211_sub_if_data *sdata; struct ieee80211_sub_if_data *sdata;
struct ieee80211_channel *chan; struct cfg80211_chan_def chandef = {};
u32 changed = 0; u32 changed = 0;
int power; int power;
enum nl80211_channel_type channel_type;
u32 offchannel_flag; u32 offchannel_flag;
offchannel_flag = local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL; offchannel_flag = local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL;
if (local->scan_channel) { if (local->scan_channel) {
chan = local->scan_channel; chandef.chan = local->scan_channel;
/* If scanning on oper channel, use whatever channel-type /* If scanning on oper channel, use whatever channel-type
* is currently in use. * is currently in use.
*/ */
if (chan == local->_oper_channel) if (chandef.chan == local->_oper_chandef.chan) {
channel_type = local->_oper_channel_type; chandef = local->_oper_chandef;
else } else {
channel_type = NL80211_CHAN_NO_HT; chandef.width = NL80211_CHAN_WIDTH_20_NOHT;
chandef.center_freq1 = chandef.chan->center_freq;
}
} else if (local->tmp_channel) { } else if (local->tmp_channel) {
chan = local->tmp_channel; chandef.chan = local->tmp_channel;
channel_type = NL80211_CHAN_NO_HT; chandef.width = NL80211_CHAN_WIDTH_20_NOHT;
} else { chandef.center_freq1 = chandef.chan->center_freq;
chan = local->_oper_channel; } else
channel_type = local->_oper_channel_type; chandef = local->_oper_chandef;
}
if (chan != local->_oper_channel || WARN(!cfg80211_chandef_valid(&chandef),
channel_type != local->_oper_channel_type) "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; local->hw.conf.flags |= IEEE80211_CONF_OFFCHANNEL;
else else
local->hw.conf.flags &= ~IEEE80211_CONF_OFFCHANNEL; local->hw.conf.flags &= ~IEEE80211_CONF_OFFCHANNEL;
offchannel_flag ^= local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL; offchannel_flag ^= local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL;
if (offchannel_flag || chan != local->hw.conf.channel || if (offchannel_flag ||
channel_type != local->hw.conf.channel_type) { !cfg80211_chandef_identical(&local->hw.conf.chandef,
local->hw.conf.channel = chan; &local->_oper_chandef)) {
local->hw.conf.channel_type = channel_type; local->hw.conf.chandef = chandef;
changed |= IEEE80211_CONF_CHANGE_CHANNEL; changed |= IEEE80211_CONF_CHANGE_CHANNEL;
} }
@ -146,7 +151,7 @@ static u32 ieee80211_hw_conf_chan(struct ieee80211_local *local)
changed |= IEEE80211_CONF_CHANGE_SMPS; changed |= IEEE80211_CONF_CHANGE_SMPS;
} }
power = chan->max_power; power = chandef.chan->max_power;
rcu_read_lock(); rcu_read_lock();
list_for_each_entry_rcu(sdata, &local->interfaces, list) { 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]; sband = local->hw.wiphy->bands[band];
if (!sband) if (!sband)
continue; continue;
if (!local->use_chanctx && !local->_oper_channel) { if (!local->use_chanctx && !local->_oper_chandef.chan) {
/* init channel we're on */ /* init channel we're on */
local->hw.conf.channel = struct cfg80211_chan_def chandef = {
local->_oper_channel = &sband->channels[0]; .chan = &sband->channels[0],
local->hw.conf.channel_type = NL80211_CHAN_NO_HT; .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, cfg80211_chandef_create(&local->monitor_chandef,
&sband->channels[0], &sband->channels[0],

View File

@ -988,6 +988,7 @@ static void ieee80211_chswitch_work(struct work_struct *work)
{ {
struct ieee80211_sub_if_data *sdata = struct ieee80211_sub_if_data *sdata =
container_of(work, struct ieee80211_sub_if_data, u.mgd.chswitch_work); 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; struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
if (!ieee80211_sdata_running(sdata)) if (!ieee80211_sdata_running(sdata))
@ -997,21 +998,30 @@ static void ieee80211_chswitch_work(struct work_struct *work)
if (!ifmgd->associated) if (!ifmgd->associated)
goto out; 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 */ /* call "hw_config" only if doing sw channel switch */
ieee80211_hw_config(sdata->local, ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
IEEE80211_CONF_CHANGE_CHANNEL);
} else { } else {
/* update the device channel directly */ /* 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! */ /* 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? */ /* 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_MAX_QUEUE_MAP,
IEEE80211_QUEUE_STOP_REASON_CSA); IEEE80211_QUEUE_STOP_REASON_CSA);
out: out:

View File

@ -384,7 +384,7 @@ static void ieee80211_scan_state_send_probe(struct ieee80211_local *local,
{ {
int i; int i;
struct ieee80211_sub_if_data *sdata; 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; u32 tx_flags;
tx_flags = IEEE80211_TX_INTFL_OFFCHAN_TX_OK; 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->ssids[i].ssid_len,
local->scan_req->ie, local->scan_req->ie_len, local->scan_req->ie, local->scan_req->ie_len,
local->scan_req->rates[band], false, 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 * 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) { if (local->ops->hw_scan) {
__set_bit(SCAN_HW_SCANNING, &local->scanning); __set_bit(SCAN_HW_SCANNING, &local->scanning);
} else if ((req->n_channels == 1) && } 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 * If we are scanning only on the operating channel
* then we do not need to stop normal activities * then we do not need to stop normal activities

View File

@ -28,27 +28,27 @@
#define VIF_PR_FMT " vif:%s(%d%s)" #define VIF_PR_FMT " vif:%s(%d%s)"
#define VIF_PR_ARG __get_str(vif_name), __entry->vif_type, __entry->p2p ? "/p2p" : "" #define VIF_PR_ARG __get_str(vif_name), __entry->vif_type, __entry->p2p ? "/p2p" : ""
#define CHANDEF_ENTRY __field(u32, control_freq) \ #define CHANDEF_ENTRY __field(u32, control_freq) \
__field(u32, chan_width) \ __field(u32, chan_width) \
__field(u32, center_freq1) \ __field(u32, center_freq1) \
__field(u32, center_freq2) __field(u32, center_freq2)
#define CHANDEF_ASSIGN(c) \ #define CHANDEF_ASSIGN(c) \
__entry->control_freq = (c)->chan->center_freq; \ __entry->control_freq = (c)->chan ? (c)->chan->center_freq : 0; \
__entry->chan_width = (c)->width; \ __entry->chan_width = (c)->width; \
__entry->center_freq1 = (c)->center_freq1; \ __entry->center_freq1 = (c)->center_freq1; \
__entry->center_freq2 = (c)->center_freq2; __entry->center_freq2 = (c)->center_freq2;
#define CHANDEF_PR_FMT " control:%d MHz width:%d center: %d/%d MHz" #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 __entry->center_freq1, __entry->center_freq2
#define CHANCTX_ENTRY CHANDEF_ENTRY \ #define CHANCTX_ENTRY CHANDEF_ENTRY \
__field(u8, rx_chains_static) \ __field(u8, rx_chains_static) \
__field(u8, rx_chains_dynamic) __field(u8, rx_chains_dynamic)
#define CHANCTX_ASSIGN CHANDEF_ASSIGN(&ctx->conf.def) \ #define CHANCTX_ASSIGN CHANDEF_ASSIGN(&ctx->conf.def) \
__entry->rx_chains_static = ctx->conf.rx_chains_static; \ __entry->rx_chains_static = ctx->conf.rx_chains_static; \
__entry->rx_chains_dynamic = ctx->conf.rx_chains_dynamic __entry->rx_chains_dynamic = ctx->conf.rx_chains_dynamic
#define CHANCTX_PR_FMT CHANDEF_PR_FMT " chains:%d/%d" #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 __entry->rx_chains_static, __entry->rx_chains_dynamic
@ -286,8 +286,7 @@ TRACE_EVENT(drv_config,
__field(u16, listen_interval) __field(u16, listen_interval)
__field(u8, long_frame_max_tx_count) __field(u8, long_frame_max_tx_count)
__field(u8, short_frame_max_tx_count) __field(u8, short_frame_max_tx_count)
__field(int, center_freq) CHANDEF_ENTRY
__field(int, channel_type)
__field(int, smps) __field(int, smps)
), ),
@ -303,15 +302,13 @@ TRACE_EVENT(drv_config,
local->hw.conf.long_frame_max_tx_count; local->hw.conf.long_frame_max_tx_count;
__entry->short_frame_max_tx_count = __entry->short_frame_max_tx_count =
local->hw.conf.short_frame_max_tx_count; local->hw.conf.short_frame_max_tx_count;
__entry->center_freq = local->hw.conf.channel ? CHANDEF_ASSIGN(&local->hw.conf.chandef)
local->hw.conf.channel->center_freq : 0;
__entry->channel_type = local->hw.conf.channel_type;
__entry->smps = local->hw.conf.smps_mode; __entry->smps = local->hw.conf.smps_mode;
), ),
TP_printk( TP_printk(
LOCAL_PR_FMT " ch:%#x freq:%d", LOCAL_PR_FMT " ch:%#x" CHANDEF_PR_FMT,
LOCAL_PR_ARG, __entry->changed, __entry->center_freq LOCAL_PR_ARG, __entry->changed, CHANDEF_PR_ARG
) )
); );

View File

@ -1709,7 +1709,7 @@ netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb,
if (chanctx_conf) if (chanctx_conf)
chan = chanctx_conf->def.chan; chan = chanctx_conf->def.chan;
else if (!local->use_chanctx) else if (!local->use_chanctx)
chan = local->_oper_channel; chan = local->_oper_chandef.chan;
else else
goto fail_rcu; 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 * This is the exception! WDS style interfaces are prohibited
* when channel contexts are in used so this must be valid * 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; break;
#ifdef CONFIG_MAC80211_MESH #ifdef CONFIG_MAC80211_MESH
case NL80211_IFTYPE_MESH_POINT: case NL80211_IFTYPE_MESH_POINT:

View File

@ -2171,8 +2171,7 @@ void ieee80211_dfs_radar_detected_work(struct work_struct *work)
/* currently not handled */ /* currently not handled */
WARN_ON(1); WARN_ON(1);
else { else {
cfg80211_chandef_create(&chandef, local->hw.conf.channel, chandef = local->hw.conf.chandef;
local->hw.conf.channel_type);
cfg80211_radar_event(local->hw.wiphy, &chandef, GFP_KERNEL); cfg80211_radar_event(local->hw.wiphy, &chandef, GFP_KERNEL);
} }
} }