diff options
Diffstat (limited to 'drivers/net/wireless/libertas/wext.c')
-rw-r--r-- | drivers/net/wireless/libertas/wext.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c index cded4bb69164..5ccb4e0c8d64 100644 --- a/drivers/net/wireless/libertas/wext.c +++ b/drivers/net/wireless/libertas/wext.c | |||
@@ -820,6 +820,7 @@ static struct iw_statistics *lbs_get_wireless_stats(struct net_device *dev) | |||
820 | int stats_valid = 0; | 820 | int stats_valid = 0; |
821 | u8 rssi; | 821 | u8 rssi; |
822 | u32 tx_retries; | 822 | u32 tx_retries; |
823 | struct cmd_ds_802_11_get_log log; | ||
823 | 824 | ||
824 | lbs_deb_enter(LBS_DEB_WEXT); | 825 | lbs_deb_enter(LBS_DEB_WEXT); |
825 | 826 | ||
@@ -863,7 +864,11 @@ static struct iw_statistics *lbs_get_wireless_stats(struct net_device *dev) | |||
863 | /* Quality by TX errors */ | 864 | /* Quality by TX errors */ |
864 | priv->wstats.discard.retries = priv->stats.tx_errors; | 865 | priv->wstats.discard.retries = priv->stats.tx_errors; |
865 | 866 | ||
866 | tx_retries = le32_to_cpu(priv->logmsg.retry); | 867 | memset(&log, 0, sizeof(log)); |
868 | log.hdr.size = cpu_to_le16(sizeof(log)); | ||
869 | lbs_cmd_with_response(priv, CMD_802_11_GET_LOG, &log); | ||
870 | |||
871 | tx_retries = le32_to_cpu(log.retry); | ||
867 | 872 | ||
868 | if (tx_retries > 75) | 873 | if (tx_retries > 75) |
869 | tx_qual = (90 - tx_retries) * POOR / 15; | 874 | tx_qual = (90 - tx_retries) * POOR / 15; |
@@ -879,10 +884,9 @@ static struct iw_statistics *lbs_get_wireless_stats(struct net_device *dev) | |||
879 | (PERFECT - VERY_GOOD) / 50 + VERY_GOOD; | 884 | (PERFECT - VERY_GOOD) / 50 + VERY_GOOD; |
880 | quality = min(quality, tx_qual); | 885 | quality = min(quality, tx_qual); |
881 | 886 | ||
882 | priv->wstats.discard.code = le32_to_cpu(priv->logmsg.wepundecryptable); | 887 | priv->wstats.discard.code = le32_to_cpu(log.wepundecryptable); |
883 | priv->wstats.discard.fragment = le32_to_cpu(priv->logmsg.rxfrag); | ||
884 | priv->wstats.discard.retries = tx_retries; | 888 | priv->wstats.discard.retries = tx_retries; |
885 | priv->wstats.discard.misc = le32_to_cpu(priv->logmsg.ackfailure); | 889 | priv->wstats.discard.misc = le32_to_cpu(log.ackfailure); |
886 | 890 | ||
887 | /* Calculate quality */ | 891 | /* Calculate quality */ |
888 | priv->wstats.qual.qual = min_t(u8, quality, 100); | 892 | priv->wstats.qual.qual = min_t(u8, quality, 100); |
@@ -892,8 +896,6 @@ static struct iw_statistics *lbs_get_wireless_stats(struct net_device *dev) | |||
892 | /* update stats asynchronously for future calls */ | 896 | /* update stats asynchronously for future calls */ |
893 | lbs_prepare_and_send_command(priv, CMD_802_11_RSSI, 0, | 897 | lbs_prepare_and_send_command(priv, CMD_802_11_RSSI, 0, |
894 | 0, 0, NULL); | 898 | 0, 0, NULL); |
895 | lbs_prepare_and_send_command(priv, CMD_802_11_GET_LOG, 0, | ||
896 | 0, 0, NULL); | ||
897 | out: | 899 | out: |
898 | if (!stats_valid) { | 900 | if (!stats_valid) { |
899 | priv->wstats.miss.beacon = 0; | 901 | priv->wstats.miss.beacon = 0; |