Em Domingo 12 Abril 2009, às 21:39:59, Larry Finger escreveu: > Now that mac80211 does the link quality calculation, that code can be > removed from this driver. In addition, the signal noise calculation > used by the vendor driver has been implemented for RYL8187B. The value > for RTL8187L is fictional. > > Signed-off-by: Larry Finger <Larry.Finger@xxxxxxxxxxxx> > --- > > Index: wireless-testing/drivers/net/wireless/rtl818x/rtl8187.h > =================================================================== > --- wireless-testing.orig/drivers/net/wireless/rtl818x/rtl8187.h > +++ wireless-testing/drivers/net/wireless/rtl818x/rtl8187.h > @@ -37,8 +37,8 @@ struct rtl8187_rx_info { > > struct rtl8187_rx_hdr { > __le32 flags; > - u8 noise; > - u8 signal; > + u8 sq; > + u8 rssi; > u8 agc; > u8 reserved; > __le64 mac_time; > Index: wireless-testing/drivers/net/wireless/rtl818x/rtl8187_dev.c > =================================================================== > --- wireless-testing.orig/drivers/net/wireless/rtl818x/rtl8187_dev.c > +++ wireless-testing/drivers/net/wireless/rtl818x/rtl8187_dev.c > @@ -315,7 +315,6 @@ static void rtl8187_rx_cb(struct urb *ur > struct ieee80211_rx_status rx_status = { 0 }; > int rate, signal; > u32 flags; > - u32 quality; > unsigned long f; > > spin_lock_irqsave(&priv->rx_queue.lock, f); > @@ -338,13 +337,13 @@ static void rtl8187_rx_cb(struct urb *ur > (typeof(hdr))(skb_tail_pointer(skb) - sizeof(*hdr)); > flags = le32_to_cpu(hdr->flags); > /* As with the RTL8187B below, the AGC is used to calculate > - * signal strength and quality. In this case, the scaling > - * constants are derived from the output of p54usb. > + * signal strength. In this case, the scaling constants are > + * derived from the output of p54usb. > */ > - quality = 130 - ((41 * hdr->agc) >> 6); > signal = -4 - ((27 * hdr->agc) >> 6); > - rx_status.antenna = (hdr->signal >> 7) & 1; > + rx_status.antenna = (hdr->rssi >> 7) & 1; > rx_status.mactime = le64_to_cpu(hdr->mac_time); > + rx_status.noise = hdr->sq - 100; > } else { > struct rtl8187b_rx_hdr *hdr = > (typeof(hdr))(skb_tail_pointer(skb) - sizeof(*hdr)); > @@ -354,23 +353,18 @@ static void rtl8187_rx_cb(struct urb *ur > * In testing, none of these quantities show qualitative > * agreement with AP signal strength, except for the AGC, > * which is inversely proportional to the strength of the > - * signal. In the following, the quality and signal strength > - * are derived from the AGC. The arbitrary scaling constants > - * are chosen to make the results close to the values obtained > - * for a BCM4312 using b43 as the driver. The noise is ignored > - * for now. > + * signal. In the following, the signal strength is derived > + * from the AGC. The arbitrary scaling constants are chosen > + * to make the results close to the values obtained for a > + * BCM4312 using b43 as the driver. > */ > flags = le32_to_cpu(hdr->flags); > - quality = 170 - hdr->agc; > signal = 14 - hdr->agc / 2; > rx_status.antenna = (hdr->rssi >> 7) & 1; > rx_status.mactime = le64_to_cpu(hdr->mac_time); > + rx_status.noise = hdr->snr_long2end; While testing here I get on a 8187B what looks like a way of noise value, ranging from -140/-160 dBm. It looks like to not be noise, but real SNR, so may be we should do signal - snr? (I tested hdr->sq - hdr->snr_long2end and it looked a bit closer to an expected noise level, -80/-120dBm, but I don't know much about this stuff). > } > > - if (quality > 100) > - quality = 100; > - rx_status.qual = quality; > - priv->quality = quality; > rx_status.signal = signal; > priv->signal = signal; > rate = (flags >> 20) & 0xF; > @@ -1357,6 +1351,7 @@ static int __devinit rtl8187_probe(struc > priv->mode = NL80211_IFTYPE_MONITOR; > dev->flags = IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING | > IEEE80211_HW_SIGNAL_DBM | > + IEEE80211_HW_NOISE_DBM | > IEEE80211_HW_RX_INCLUDES_FCS; > > eeprom.data = dev; -- []'s Herton -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html