All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Berg <johannes@sipsolutions.net>
To: Michal Kazior <michal.kazior@tieto.com>
Cc: linux-wireless@vger.kernel.org
Subject: Re: [PATCH] mac80211: remove hw.conf.channel usage where possible
Date: Thu, 29 Mar 2012 09:07:55 +0200	[thread overview]
Message-ID: <1333004875.3611.3.camel@jlt3.sipsolutions.net> (raw)
In-Reply-To: <1333004518-12068-1-git-send-email-michal.kazior@tieto.com>

On Thu, 2012-03-29 at 09:01 +0200, Michal Kazior wrote:
> Removes hw.conf.channel usage from the following functions:
>  * ieee80211_mandatory_rates
>  * ieee80211_sta_get_rates
>  * ieee80211_frame_duration
>  * ieee80211_rts_duration
>  * ieee80211_ctstoself_duration
> 
> This is in preparation for multi-channel operation.

Thanks!

Reviewed-by: Johannes Berg <johannes@sipsolutions.net>

> Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
> ---
>  drivers/net/wireless/ath/ath5k/ath5k.h |    2 +-
>  drivers/net/wireless/ath/ath5k/pcu.c   |    9 ++++---
>  drivers/net/wireless/ath/ath5k/qcu.c   |    8 ++++--
>  include/net/mac80211.h                 |    1 +
>  net/mac80211/ieee80211_i.h             |    2 +-
>  net/mac80211/rc80211_minstrel.c        |   13 ++++++-----
>  net/mac80211/rc80211_minstrel_ht.c     |    5 +--
>  net/mac80211/tx.c                      |    4 +-
>  net/mac80211/util.c                    |   34 ++++++++++++++-----------------
>  9 files changed, 39 insertions(+), 39 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath5k/ath5k.h b/drivers/net/wireless/ath/ath5k/ath5k.h
> index 8d434b8..727f2e5 100644
> --- a/drivers/net/wireless/ath/ath5k/ath5k.h
> +++ b/drivers/net/wireless/ath/ath5k/ath5k.h
> @@ -1524,7 +1524,7 @@ void ath5k_eeprom_detach(struct ath5k_hw *ah);
>  
>  /* Protocol Control Unit Functions */
>  /* Helpers */
> -int ath5k_hw_get_frame_duration(struct ath5k_hw *ah,
> +int ath5k_hw_get_frame_duration(struct ath5k_hw *ah, enum ieee80211_band band,
>  		int len, struct ieee80211_rate *rate, bool shortpre);
>  unsigned int ath5k_hw_get_default_slottime(struct ath5k_hw *ah);
>  unsigned int ath5k_hw_get_default_sifs(struct ath5k_hw *ah);
> diff --git a/drivers/net/wireless/ath/ath5k/pcu.c b/drivers/net/wireless/ath/ath5k/pcu.c
> index cebfd6f..1f16b42 100644
> --- a/drivers/net/wireless/ath/ath5k/pcu.c
> +++ b/drivers/net/wireless/ath/ath5k/pcu.c
> @@ -110,7 +110,7 @@ static const unsigned int ack_rates_high[] =
>   * bwmodes.
>   */
>  int
> -ath5k_hw_get_frame_duration(struct ath5k_hw *ah,
> +ath5k_hw_get_frame_duration(struct ath5k_hw *ah, enum ieee80211_band band,
>  		int len, struct ieee80211_rate *rate, bool shortpre)
>  {
>  	int sifs, preamble, plcp_bits, sym_time;
> @@ -120,7 +120,7 @@ ath5k_hw_get_frame_duration(struct ath5k_hw *ah,
>  	/* Fallback */
>  	if (!ah->ah_bwmode) {
>  		__le16 raw_dur = ieee80211_generic_frame_duration(ah->hw,
> -					NULL, len, rate);
> +					NULL, band, len, rate);
>  
>  		/* subtract difference between long and short preamble */
>  		dur = le16_to_cpu(raw_dur);
> @@ -302,14 +302,15 @@ ath5k_hw_write_rate_duration(struct ath5k_hw *ah)
>  		 * actual rate for this rate. See mac80211 tx.c
>  		 * ieee80211_duration() for a brief description of
>  		 * what rate we should choose to TX ACKs. */
> -		tx_time = ath5k_hw_get_frame_duration(ah, 10, rate, false);
> +		tx_time = ath5k_hw_get_frame_duration(ah, band, 10,
> +					rate, false);
>  
>  		ath5k_hw_reg_write(ah, tx_time, reg);
>  
>  		if (!(rate->flags & IEEE80211_RATE_SHORT_PREAMBLE))
>  			continue;
>  
> -		tx_time = ath5k_hw_get_frame_duration(ah, 10, rate, true);
> +		tx_time = ath5k_hw_get_frame_duration(ah, band, 10, rate, true);
>  		ath5k_hw_reg_write(ah, tx_time,
>  			reg + (AR5K_SET_SHORT_PREAMBLE << 2));
>  	}
> diff --git a/drivers/net/wireless/ath/ath5k/qcu.c b/drivers/net/wireless/ath/ath5k/qcu.c
> index 30b50f9..1f9677a 100644
> --- a/drivers/net/wireless/ath/ath5k/qcu.c
> +++ b/drivers/net/wireless/ath/ath5k/qcu.c
> @@ -563,6 +563,7 @@ ath5k_hw_reset_tx_queue(struct ath5k_hw *ah, unsigned int queue)
>  int ath5k_hw_set_ifs_intervals(struct ath5k_hw *ah, unsigned int slot_time)
>  {
>  	struct ieee80211_channel *channel = ah->ah_current_channel;
> +	enum ieee80211_band band;
>  	struct ieee80211_rate *rate;
>  	u32 ack_tx_time, eifs, eifs_clock, sifs, sifs_clock;
>  	u32 slot_time_clock = ath5k_hw_htoclock(ah, slot_time);
> @@ -598,11 +599,12 @@ int ath5k_hw_set_ifs_intervals(struct ath5k_hw *ah, unsigned int slot_time)
>  	 * Also we have different lowest rate for 802.11a
>  	 */
>  	if (channel->band == IEEE80211_BAND_5GHZ)
> -		rate = &ah->sbands[IEEE80211_BAND_5GHZ].bitrates[0];
> +		band = IEEE80211_BAND_5GHZ;
>  	else
> -		rate = &ah->sbands[IEEE80211_BAND_2GHZ].bitrates[0];
> +		band = IEEE80211_BAND_2GHZ;
>  
> -	ack_tx_time = ath5k_hw_get_frame_duration(ah, 10, rate, false);
> +	rate = &ah->sbands[band].bitrates[0];
> +	ack_tx_time = ath5k_hw_get_frame_duration(ah, band, 10, rate, false);
>  
>  	/* ack_tx_time includes an SIFS already */
>  	eifs = ack_tx_time + sifs + 2 * slot_time;
> diff --git a/include/net/mac80211.h b/include/net/mac80211.h
> index 9a012be..ee7a38b 100644
> --- a/include/net/mac80211.h
> +++ b/include/net/mac80211.h
> @@ -2842,6 +2842,7 @@ __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw,
>   */
>  __le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw,
>  					struct ieee80211_vif *vif,
> +					enum ieee80211_band band,
>  					size_t frame_len,
>  					struct ieee80211_rate *rate);
>  
> diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
> index d9798a3..c5c6ab0 100644
> --- a/net/mac80211/ieee80211_i.h
> +++ b/net/mac80211/ieee80211_i.h
> @@ -1383,7 +1383,7 @@ static inline int __ieee80211_resume(struct ieee80211_hw *hw)
>  extern void *mac80211_wiphy_privid; /* for wiphy privid */
>  u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len,
>  			enum nl80211_iftype type);
> -int ieee80211_frame_duration(struct ieee80211_local *local, size_t len,
> +int ieee80211_frame_duration(enum ieee80211_band band, size_t len,
>  			     int rate, int erp, int short_preamble);
>  void mac80211_ev_michael_mic_failure(struct ieee80211_sub_if_data *sdata, int keyidx,
>  				     struct ieee80211_hdr *hdr, const u8 *tsc,
> diff --git a/net/mac80211/rc80211_minstrel.c b/net/mac80211/rc80211_minstrel.c
> index b39dda5..79633ae 100644
> --- a/net/mac80211/rc80211_minstrel.c
> +++ b/net/mac80211/rc80211_minstrel.c
> @@ -334,14 +334,15 @@ minstrel_get_rate(void *priv, struct ieee80211_sta *sta,
>  
> 
>  static void
> -calc_rate_durations(struct ieee80211_local *local, struct minstrel_rate *d,
> +calc_rate_durations(enum ieee80211_band band,
> +		    struct minstrel_rate *d,
>  		    struct ieee80211_rate *rate)
>  {
>  	int erp = !!(rate->flags & IEEE80211_RATE_ERP_G);
>  
> -	d->perfect_tx_time = ieee80211_frame_duration(local, 1200,
> +	d->perfect_tx_time = ieee80211_frame_duration(band, 1200,
>  			rate->bitrate, erp, 1);
> -	d->ack_time = ieee80211_frame_duration(local, 10,
> +	d->ack_time = ieee80211_frame_duration(band, 10,
>  			rate->bitrate, erp, 1);
>  }
>  
> @@ -379,14 +380,14 @@ minstrel_rate_init(void *priv, struct ieee80211_supported_band *sband,
>  {
>  	struct minstrel_sta_info *mi = priv_sta;
>  	struct minstrel_priv *mp = priv;
> -	struct ieee80211_local *local = hw_to_local(mp->hw);
>  	struct ieee80211_rate *ctl_rate;
>  	unsigned int i, n = 0;
>  	unsigned int t_slot = 9; /* FIXME: get real slot time */
>  
>  	mi->lowest_rix = rate_lowest_index(sband, sta);
>  	ctl_rate = &sband->bitrates[mi->lowest_rix];
> -	mi->sp_ack_dur = ieee80211_frame_duration(local, 10, ctl_rate->bitrate,
> +	mi->sp_ack_dur = ieee80211_frame_duration(sband->band, 10,
> +				ctl_rate->bitrate,
>  				!!(ctl_rate->flags & IEEE80211_RATE_ERP_G), 1);
>  
>  	for (i = 0; i < sband->n_bitrates; i++) {
> @@ -402,7 +403,7 @@ minstrel_rate_init(void *priv, struct ieee80211_supported_band *sband,
>  
>  		mr->rix = i;
>  		mr->bitrate = sband->bitrates[i].bitrate / 5;
> -		calc_rate_durations(local, mr, &sband->bitrates[i]);
> +		calc_rate_durations(sband->band, mr, &sband->bitrates[i]);
>  
>  		/* calculate maximum number of retransmissions before
>  		 * fallback (based on maximum segment size) */
> diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c
> index 16e0b27..08048fc 100644
> --- a/net/mac80211/rc80211_minstrel_ht.c
> +++ b/net/mac80211/rc80211_minstrel_ht.c
> @@ -693,7 +693,6 @@ minstrel_ht_update_caps(void *priv, struct ieee80211_supported_band *sband,
>  	struct minstrel_ht_sta_priv *msp = priv_sta;
>  	struct minstrel_ht_sta *mi = &msp->ht;
>  	struct ieee80211_mcs_info *mcs = &sta->ht_cap.mcs;
> -	struct ieee80211_local *local = hw_to_local(mp->hw);
>  	u16 sta_cap = sta->ht_cap.cap;
>  	int n_supported = 0;
>  	int ack_dur;
> @@ -712,8 +711,8 @@ minstrel_ht_update_caps(void *priv, struct ieee80211_supported_band *sband,
>  	memset(mi, 0, sizeof(*mi));
>  	mi->stats_update = jiffies;
>  
> -	ack_dur = ieee80211_frame_duration(local, 10, 60, 1, 1);
> -	mi->overhead = ieee80211_frame_duration(local, 0, 60, 1, 1) + ack_dur;
> +	ack_dur = ieee80211_frame_duration(sband->band, 10, 60, 1, 1);
> +	mi->overhead = ieee80211_frame_duration(sband->band, 0, 60, 1, 1) + ack_dur;
>  	mi->overhead_rtscts = mi->overhead + 2 * ack_dur;
>  
>  	mi->avg_ampdu_len = MINSTREL_FRAC(1, 1);
> diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
> index 782a601..1a0732d 100644
> --- a/net/mac80211/tx.c
> +++ b/net/mac80211/tx.c
> @@ -159,7 +159,7 @@ static __le16 ieee80211_duration(struct ieee80211_tx_data *tx,
>  		/* Time needed to transmit ACK
>  		 * (10 bytes + 4-byte FCS = 112 bits) plus SIFS; rounded up
>  		 * to closest integer */
> -		dur = ieee80211_frame_duration(local, 10, rate, erp,
> +		dur = ieee80211_frame_duration(sband->band, 10, rate, erp,
>  				tx->sdata->vif.bss_conf.use_short_preamble);
>  
>  	if (next_frag_len) {
> @@ -167,7 +167,7 @@ static __le16 ieee80211_duration(struct ieee80211_tx_data *tx,
>  		 * transmit next fragment plus ACK and 2 x SIFS. */
>  		dur *= 2; /* ACK + SIFS */
>  		/* next fragment */
> -		dur += ieee80211_frame_duration(local, next_frag_len,
> +		dur += ieee80211_frame_duration(sband->band, next_frag_len,
>  				txrate->bitrate, erp,
>  				tx->sdata->vif.bss_conf.use_short_preamble);
>  	}
> diff --git a/net/mac80211/util.c b/net/mac80211/util.c
> index 32f7a3b..cae3dc4 100644
> --- a/net/mac80211/util.c
> +++ b/net/mac80211/util.c
> @@ -106,7 +106,7 @@ void ieee80211_tx_set_protected(struct ieee80211_tx_data *tx)
>  	}
>  }
>  
> -int ieee80211_frame_duration(struct ieee80211_local *local, size_t len,
> +int ieee80211_frame_duration(enum ieee80211_band band, size_t len,
>  			     int rate, int erp, int short_preamble)
>  {
>  	int dur;
> @@ -120,7 +120,7 @@ int ieee80211_frame_duration(struct ieee80211_local *local, size_t len,
>  	 * DIV_ROUND_UP() operations.
>  	 */
>  
> -	if (local->hw.conf.channel->band == IEEE80211_BAND_5GHZ || erp) {
> +	if (band == IEEE80211_BAND_5GHZ || erp) {
>  		/*
>  		 * OFDM:
>  		 *
> @@ -162,10 +162,10 @@ int ieee80211_frame_duration(struct ieee80211_local *local, size_t len,
>  /* Exported duration function for driver use */
>  __le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw,
>  					struct ieee80211_vif *vif,
> +					enum ieee80211_band band,
>  					size_t frame_len,
>  					struct ieee80211_rate *rate)
>  {
> -	struct ieee80211_local *local = hw_to_local(hw);
>  	struct ieee80211_sub_if_data *sdata;
>  	u16 dur;
>  	int erp;
> @@ -179,7 +179,7 @@ __le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw,
>  			erp = rate->flags & IEEE80211_RATE_ERP_G;
>  	}
>  
> -	dur = ieee80211_frame_duration(local, frame_len, rate->bitrate, erp,
> +	dur = ieee80211_frame_duration(band, frame_len, rate->bitrate, erp,
>  				       short_preamble);
>  
>  	return cpu_to_le16(dur);
> @@ -198,7 +198,7 @@ __le16 ieee80211_rts_duration(struct ieee80211_hw *hw,
>  	u16 dur;
>  	struct ieee80211_supported_band *sband;
>  
> -	sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
> +	sband = local->hw.wiphy->bands[frame_txctl->band];
>  
>  	short_preamble = false;
>  
> @@ -213,13 +213,13 @@ __le16 ieee80211_rts_duration(struct ieee80211_hw *hw,
>  	}
>  
>  	/* CTS duration */
> -	dur = ieee80211_frame_duration(local, 10, rate->bitrate,
> +	dur = ieee80211_frame_duration(sband->band, 10, rate->bitrate,
>  				       erp, short_preamble);
>  	/* Data frame duration */
> -	dur += ieee80211_frame_duration(local, frame_len, rate->bitrate,
> +	dur += ieee80211_frame_duration(sband->band, frame_len, rate->bitrate,
>  					erp, short_preamble);
>  	/* ACK duration */
> -	dur += ieee80211_frame_duration(local, 10, rate->bitrate,
> +	dur += ieee80211_frame_duration(sband->band, 10, rate->bitrate,
>  					erp, short_preamble);
>  
>  	return cpu_to_le16(dur);
> @@ -239,7 +239,7 @@ __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw,
>  	u16 dur;
>  	struct ieee80211_supported_band *sband;
>  
> -	sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
> +	sband = local->hw.wiphy->bands[frame_txctl->band];
>  
>  	short_preamble = false;
>  
> @@ -253,11 +253,11 @@ __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw,
>  	}
>  
>  	/* Data frame duration */
> -	dur = ieee80211_frame_duration(local, frame_len, rate->bitrate,
> +	dur = ieee80211_frame_duration(sband->band, frame_len, rate->bitrate,
>  				       erp, short_preamble);
>  	if (!(frame_txctl->flags & IEEE80211_TX_CTL_NO_ACK)) {
>  		/* ACK duration */
> -		dur += ieee80211_frame_duration(local, 10, rate->bitrate,
> +		dur += ieee80211_frame_duration(sband->band, 10, rate->bitrate,
>  						erp, short_preamble);
>  	}
>  
> @@ -878,10 +878,8 @@ u32 ieee80211_mandatory_rates(struct ieee80211_local *local,
>  	int i;
>  
>  	sband = local->hw.wiphy->bands[band];
> -	if (!sband) {
> -		WARN_ON(1);
> -		sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
> -	}
> +	if (WARN_ON(!sband))
> +		return 1;
>  
>  	if (band == IEEE80211_BAND_2GHZ)
>  		mandatory_flag = IEEE80211_RATE_MANDATORY_B;
> @@ -1115,10 +1113,8 @@ u32 ieee80211_sta_get_rates(struct ieee80211_local *local,
>  	int i, j;
>  	sband = local->hw.wiphy->bands[band];
>  
> -	if (!sband) {
> -		WARN_ON(1);
> -		sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
> -	}
> +	if (WARN_ON(!sband))
> +		return 1;
>  
>  	bitrates = sband->bitrates;
>  	num_rates = sband->n_bitrates;



  reply	other threads:[~2012-03-29  7:07 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-29  7:01 [PATCH] mac80211: remove hw.conf.channel usage where possible Michal Kazior
2012-03-29  7:07 ` Johannes Berg [this message]
2012-04-10 19:20 ` John W. Linville
2012-04-11  6:22   ` Michal Kazior
  -- strict thread matches above, loose matches on Subject: below --
2012-03-28 10:54 Michal Kazior
2012-03-28 11:17 ` Johannes Berg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1333004875.3611.3.camel@jlt3.sipsolutions.net \
    --to=johannes@sipsolutions.net \
    --cc=linux-wireless@vger.kernel.org \
    --cc=michal.kazior@tieto.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.