linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Zefir Kurtisi <zefir.kurtisi@neratec.com>
To: linux-wireless@vger.kernel.org
Cc: mickflemm@gmail.com, ath9k-devel@venema.h4ckr.net
Subject: Re: [PATCH v2] ath9k: spectral - simplify max_index calculation
Date: Thu, 18 Jun 2015 17:16:31 +0200	[thread overview]
Message-ID: <5582E0CF.1050804@neratec.com> (raw)
In-Reply-To: <1434626241-1334-1-git-send-email-zefir.kurtisi@neratec.com>

After further discussion with Nick, we better leave spectral as is.

Please ignore / drop this one.


On 06/18/2015 01:17 PM, Zefir Kurtisi wrote:
> The max_index value provided in the spectral data set
> has to be interpreted differently for HT20 and HT40.
> In HT40, the value is given as unsigned index and
> shall be taken as is, while in HT20 it is a signed
> value around bin index 28 and needs to be converted
> to an unsigned index.
> 
> This patch simplifies the previous correction and
> prepares the related functions to be shared with
> the DFS module.
> 
> Signed-off-by: Zefir Kurtisi <zefir.kurtisi@neratec.com>
> ---
> 
> v2: fix conversion offset as reported by Nick Kossifidis
> 
>  drivers/net/wireless/ath/ath9k/common-spectral.c | 20 ++++++-------
>  drivers/net/wireless/ath/ath9k/common-spectral.h | 36 +++++++-----------------
>  2 files changed, 18 insertions(+), 38 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath9k/common-spectral.c b/drivers/net/wireless/ath/ath9k/common-spectral.c
> index a876271..175193d 100644
> --- a/drivers/net/wireless/ath/ath9k/common-spectral.c
> +++ b/drivers/net/wireless/ath/ath9k/common-spectral.c
> @@ -59,8 +59,8 @@ ath_cmn_max_idx_verify_ht20_fft(u8 *sample_end, int bytes_read)
>  
>  	sample = sample_end - SPECTRAL_HT20_SAMPLE_LEN + 1;
>  
> -	max_index = spectral_max_index(mag_info->all_bins,
> -				       SPECTRAL_HT20_NUM_BINS);
> +	/* in ht20, this is a 6-bit signed number => shift it to 0 */
> +	max_index = (spectral_max_index(mag_info->all_bins) ^ 0x20) - 4;
>  	max_magnitude = spectral_max_magnitude(mag_info->all_bins);
>  
>  	max_exp = mag_info->max_exp & 0xf;
> @@ -100,12 +100,10 @@ ath_cmn_max_idx_verify_ht20_40_fft(u8 *sample_end, int bytes_read)
>  	sample = sample_end - SPECTRAL_HT20_40_SAMPLE_LEN + 1;
>  
>  	lower_mag = spectral_max_magnitude(mag_info->lower_bins);
> -	lower_max_index = spectral_max_index(mag_info->lower_bins,
> -					     SPECTRAL_HT20_40_NUM_BINS);
> +	lower_max_index = spectral_max_index(mag_info->lower_bins);
>  
>  	upper_mag = spectral_max_magnitude(mag_info->upper_bins);
> -	upper_max_index = spectral_max_index(mag_info->upper_bins,
> -					     SPECTRAL_HT20_40_NUM_BINS);
> +	upper_max_index = spectral_max_index(mag_info->upper_bins);
>  
>  	max_exp = mag_info->max_exp & 0xf;
>  
> @@ -169,8 +167,8 @@ ath_cmn_process_ht20_fft(struct ath_rx_status *rs,
>  	magnitude = spectral_max_magnitude(mag_info->all_bins);
>  	fft_sample_20.max_magnitude = __cpu_to_be16(magnitude);
>  
> -	max_index = spectral_max_index(mag_info->all_bins,
> -					SPECTRAL_HT20_NUM_BINS);
> +	/* in ht20, this is a 6-bit signed number => shift it to 0 */
> +	max_index = (spectral_max_index(mag_info->all_bins) ^ 0x20) - 4;
>  	fft_sample_20.max_index = max_index;
>  
>  	bitmap_w = spectral_bitmap_weight(mag_info->all_bins);
> @@ -302,12 +300,10 @@ ath_cmn_process_ht20_40_fft(struct ath_rx_status *rs,
>  	upper_mag = spectral_max_magnitude(mag_info->upper_bins);
>  	fft_sample_40.upper_max_magnitude = __cpu_to_be16(upper_mag);
>  
> -	lower_max_index = spectral_max_index(mag_info->lower_bins,
> -					SPECTRAL_HT20_40_NUM_BINS);
> +	lower_max_index = spectral_max_index(mag_info->lower_bins);
>  	fft_sample_40.lower_max_index = lower_max_index;
>  
> -	upper_max_index = spectral_max_index(mag_info->upper_bins,
> -					SPECTRAL_HT20_40_NUM_BINS);
> +	upper_max_index = spectral_max_index(mag_info->upper_bins);
>  	fft_sample_40.upper_max_index = upper_max_index;
>  
>  	lower_bitmap_w = spectral_bitmap_weight(mag_info->lower_bins);
> diff --git a/drivers/net/wireless/ath/ath9k/common-spectral.h b/drivers/net/wireless/ath/ath9k/common-spectral.h
> index 998743b..7540835 100644
> --- a/drivers/net/wireless/ath/ath9k/common-spectral.h
> +++ b/drivers/net/wireless/ath/ath9k/common-spectral.h
> @@ -116,33 +116,17 @@ static inline u16 spectral_max_magnitude(u8 *bins)
>  	       (bins[2] & 0x03) << 10;
>  }
>  
> -/* return the max magnitude from the all/upper/lower bins */
> -static inline u8 spectral_max_index(u8 *bins, int num_bins)
> +/* return the max index from the all/upper/lower bins
> + *
> + * in HT20: 6-bit signed number of range -28 to +27
> + * in HT40: 6-bit unsigned number of range 0 to +63
> + *          (upper sub-channel index 0 is DC)
> + *
> + * Correct interpretation of the value has to be done at caller
> + */
> +static inline u8 spectral_max_index(u8 *bins)
>  {
> -	s8 m = (bins[2] & 0xfc) >> 2;
> -	u8 zero_idx = num_bins / 2;
> -
> -	/* It's a 5 bit signed int, remove its sign and use one's
> -	 * complement interpretation to add the sign back to the 8
> -	 * bit int
> -	 */
> -	if (m & 0x20) {
> -		m &= ~0x20;
> -		m |= 0xe0;
> -	}
> -
> -	/* Bring the zero point to the beginning
> -	 * instead of the middle so that we can use
> -	 * it for array lookup and that we don't deal
> -	 * with negative values later
> -	 */
> -	m += zero_idx;
> -
> -	/* Sanity check to make sure index is within bounds */
> -	if (m < 0 || m > num_bins - 1)
> -		m = 0;
> -
> -	return m;
> +	return (bins[2] & 0xfc) >> 2;
>  }
>  
>  /* return the bitmap weight from the all/upper/lower bins */
> 


  reply	other threads:[~2015-06-18 15:16 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-18 11:17 [PATCH v2] ath9k: spectral - simplify max_index calculation Zefir Kurtisi
2015-06-18 15:16 ` Zefir Kurtisi [this message]
2015-07-20 15:48   ` Kalle Valo

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=5582E0CF.1050804@neratec.com \
    --to=zefir.kurtisi@neratec.com \
    --cc=ath9k-devel@venema.h4ckr.net \
    --cc=linux-wireless@vger.kernel.org \
    --cc=mickflemm@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).