nexmon – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 From: Larry Finger <Larry.Finger@lwfinger.net>
2 Date: Thu, 4 Dec 2008 04:21:20 +0000 (-0600)
3 Subject: rtl8187: Improve wireless statistics for RTL8187
4 X-Git-Tag: master-2009-01-05~191
5 X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Flinville%2Fwireless-testing.git;a=commitdiff_plain;h=cd2865552927d616be4a0da7c24$
6  
7 rtl8187: Improve wireless statistics for RTL8187
8  
9 The current wireless statistics for the RTL8187 poorly indicate the signal
10 strength and quality. With testing, I found that the AGC value is inversely
11 correlated with the strength as in the RTL8187B. By implementing a similar
12 calculation, much more code becomes common to the two devices.
13  
14 Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
15 Tested by: Martín Ernesto Barreyro <barreyromartin@gmail.com>
16 Acked-by: Hin-Tak Leung <htl10@users.sourceforge.net>
17 Signed-off-by: John W. Linville <linville@tuxdriver.com>
18 Crudely-backported-by: Zero_Chaos <zero_chaos@pentoo.ch>
19 ---
20  
21 diff -Naur linux-2.6.28-orig/drivers/net/wireless/rtl8187_dev.c linux-2.6.28/drivers/net/wireless/rtl8187_dev.c
22 --- linux-2.6.28-orig/drivers/net/wireless/rtl8187_dev.c 2009-02-09 16:52:51.000000000 -0500
23 +++ linux-2.6.28/drivers/net/wireless/rtl8187_dev.c 2009-02-09 17:22:50.000000000 -0500
24 @@ -303,29 +303,14 @@
25 struct rtl8187_rx_hdr *hdr =
26 (typeof(hdr))(skb_tail_pointer(skb) - sizeof(*hdr));
27 flags = le32_to_cpu(hdr->flags);
28 - signal = hdr->signal & 0x7f;
29 + /* As with the RTL8187B below, the AGC is used to calculate
30 + * signal strength and quality. In this case, the scaling
31 + * constants are derived from the output of p54usb.
32 + */
33 + quality = 130 - ((41 * hdr->agc) >> 6);
34 + signal = -4 - ((27 * hdr->agc) >> 6);
35 rx_status.antenna = (hdr->signal >> 7) & 1;
36 - rx_status.noise = hdr->noise;
37 rx_status.mactime = le64_to_cpu(hdr->mac_time);
38 - priv->quality = signal;
39 - rx_status.qual = priv->quality;
40 - priv->noise = hdr->noise;
41 - rate = (flags >> 20) & 0xF;
42 - if (rate > 3) { /* OFDM rate */
43 - if (signal > 90)
44 - signal = 90;
45 - else if (signal < 25)
46 - signal = 25;
47 - signal = 90 - signal;
48 - } else { /* CCK rate */
49 - if (signal > 95)
50 - signal = 95;
51 - else if (signal < 30)
52 - signal = 30;
53 - signal = 95 - signal;
54 - }
55 - rx_status.signal = signal;
56 - priv->signal = signal;
57 } else {
58 struct rtl8187b_rx_hdr *hdr =
59 (typeof(hdr))(skb_tail_pointer(skb) - sizeof(*hdr));
60 @@ -343,18 +328,18 @@
61 */
62 flags = le32_to_cpu(hdr->flags);
63 quality = 170 - hdr->agc;
64 - if (quality > 100)
65 - quality = 100;
66 signal = 14 - hdr->agc / 2;
67 - rx_status.qual = quality;
68 - priv->quality = quality;
69 - rx_status.signal = signal;
70 - priv->signal = signal;
71 rx_status.antenna = (hdr->rssi >> 7) & 1;
72 rx_status.mactime = le64_to_cpu(hdr->mac_time);
73 - rate = (flags >> 20) & 0xF;
74 }
75  
76 + if (quality > 100)
77 + quality = 100;
78 + rx_status.qual = quality;
79 + priv->quality = quality;
80 + rx_status.signal = signal;
81 + priv->signal = signal;
82 + rate = (flags >> 20) & 0xF;
83 skb_trim(skb, flags & 0x0FFF);
84 rx_status.rate_idx = rate;
85 rx_status.freq = dev->conf.channel->center_freq;
86 @@ -1065,6 +1050,7 @@
87  
88 priv->mode = NL80211_IFTYPE_MONITOR;
89 dev->flags = IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
90 + IEEE80211_HW_SIGNAL_DBM |
91 IEEE80211_HW_RX_INCLUDES_FCS;
92  
93 eeprom.data = dev;
94 @@ -1184,10 +1170,6 @@
95 printk(KERN_WARNING "rtl8187: 8187B chip detected. Support "
96 "is EXPERIMENTAL, and could damage your\n"
97 " hardware, use at your own risk\n");
98 - dev->flags |= IEEE80211_HW_SIGNAL_DBM;
99 - } else {
100 - dev->flags |= IEEE80211_HW_SIGNAL_UNSPEC;
101 - dev->max_signal = 65;
102 }
103  
104 dev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION);