[PATCH v2] ath10k: fix the MAC address of peer statistic

Michal Kazior michal.kazior at tieto.com
Fri Jan 17 08:18:43 EST 2014


On 10 January 2014 10:19, Chun-Yeow Yeoh <yeohchunyeow at gmail.com> wrote:
> Fix the MAC address of wmi_peer_stats so that it is
> printed correctly. This is tested and verified using
> firmware version 999.999.0.636.
>
> Based on the verification, maximum only 3 peer statistics including
> self STA able to be printed out.
>
> Signed-off-by: Chun-Yeow Yeoh <yeohchunyeow at gmail.com>
> ---
> v2: offset the stats to ignore the first peer (Chun-Yeow)
>
>  drivers/net/wireless/ath/ath10k/debug.c |    4 ++++
>  drivers/net/wireless/ath/ath10k/wmi.h   |   14 +++++++-------
>  2 files changed, 11 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath10k/debug.c b/drivers/net/wireless/ath/ath10k/debug.c
> index 6bdfad3..b39bad8 100644
> --- a/drivers/net/wireless/ath/ath10k/debug.c
> +++ b/drivers/net/wireless/ath/ath10k/debug.c
> @@ -242,6 +242,10 @@ void ath10k_debug_read_target_stats(struct ath10k *ar,
>                 }
>         }
>
> +       /* The first peer is self MAC address, ignore this */
> +       num_peer_stats--;
> +       tmp += sizeof(struct wmi_peer_stats);
> +
>         if (num_peer_stats) {
>                 struct wmi_peer_stats *peer_stats;
>                 struct ath10k_peer_stat *s;
> diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h
> index 0087d69..106a23e 100644
> --- a/drivers/net/wireless/ath/ath10k/wmi.h
> +++ b/drivers/net/wireless/ath/ath10k/wmi.h
> @@ -200,12 +200,12 @@ struct wmi_mac_addr {
>
>  /* macro to convert MAC address from WMI word format to char array */
>  #define WMI_MAC_ADDR_TO_CHAR_ARRAY(pwmi_mac_addr, c_macaddr) do { \
> -       (c_macaddr)[0] =  ((pwmi_mac_addr)->word0) & 0xff; \
> -       (c_macaddr)[1] = (((pwmi_mac_addr)->word0) >> 8) & 0xff; \
> -       (c_macaddr)[2] = (((pwmi_mac_addr)->word0) >> 16) & 0xff; \
> -       (c_macaddr)[3] = (((pwmi_mac_addr)->word0) >> 24) & 0xff; \
> -       (c_macaddr)[4] =  ((pwmi_mac_addr)->word1) & 0xff; \
> -       (c_macaddr)[5] = (((pwmi_mac_addr)->word1) >> 8) & 0xff; \
> +       (c_macaddr)[0] = (((pwmi_mac_addr)->word0) >> 24) & 0xff; \
> +       (c_macaddr)[1] = (((pwmi_mac_addr)->word0) >> 16) & 0xff; \
> +       (c_macaddr)[2] = (((pwmi_mac_addr)->word0) >> 8) & 0xff; \
> +       (c_macaddr)[3] =  ((pwmi_mac_addr)->word0) & 0xff; \
> +       (c_macaddr)[4] = (((pwmi_mac_addr)->word1) >> 24) & 0xff; \
> +       (c_macaddr)[5] = (((pwmi_mac_addr)->word1) >> 16) & 0xff; \
>         } while (0)

This is totally wrong. This macro shouldn't be used anymore. It
shouldn't even be here. There's no hardware byte-swapping anymore.
This means mac addresses received from firmware should be treated
as-is, e.g. with memcpy(). See wmi_mac_addr definition - it has
`addr[6]` field which should be used.


Michał



More information about the ath10k mailing list