Correctly detect the maxssi settings from the EEPROM
where available, and correct the dummy values that
had been added in the initial patch to support
noise and signal measurement.
MAX_RX_SSI is a value that is different on each chipset,
so it should be a driver specific define.

Signed-off-by Ivo van Doorn <[EMAIL PROTECTED]>

---

diff -rU3 wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt2400pci.c 
wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt2400pci.c
--- wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt2400pci.c     
2006-12-03 12:38:28.000000000 +0100
+++ wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt2400pci.c    
2006-12-03 12:46:41.000000000 +0100
@@ -1550,13 +1550,15 @@
                        rt2x00dev->rx_params.ssi =
                                rt2x00_get_field32(word2, RXD_W2_RSSI);
 
-/* FIXME: The following set of assignments supply additional data for wireless 
statistics. The
-          necessary quantities are (1) the "noise" value in dBm, and (2) the 
"signal" value in dBm.
-          The present code supplies dummy values for these quantities. */
-
-                       rt2x00dev->rx_params.noise = -85;   /* FIXME */
-                       rt2x00dev->rx_params.signal =
-                               rt2x00dev->rx_params.ssi - RT2X00_RX_MAX_SSI; 
/* FIXME */
+                       /*
+                        * The following set of assignments supply
+                        * additional data for wireless statistics. The
+                        * necessary quantities are (1) the "noise" value
+                        * in dBm, and (2) the "signal" value in dBm.
+                        */
+                       rt2x00dev->rx_params.noise = 0;
+                       rt2x00dev->rx_params.signal = rt2x00dev->rx_params.ssi
+                               - rt2x00dev->hw->maxssi;
 
                        __ieee80211_rx(rt2x00dev->hw,
                                skb, &rt2x00dev->rx_params);
diff -rU3 wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt2400pci.h 
wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt2400pci.h
--- wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt2400pci.h     
2006-12-02 23:22:43.000000000 +0100
+++ wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt2400pci.h    
2006-12-03 12:49:55.000000000 +0100
@@ -39,6 +39,11 @@
 #define RF2421                         0x0001
 
 /*
+ * Max RSSI value, required for RSSI <-> dBm conversion.
+ */
+#define MAX_RX_SSI                     100
+
+/*
  * Register layout information.
  */
 #define CSR_REG_BASE                   0x0000
diff -rU3 wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt2500pci.c 
wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt2500pci.c
--- wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt2500pci.c     
2006-12-03 12:34:39.000000000 +0100
+++ wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt2500pci.c    
2006-12-03 12:47:36.000000000 +0100
@@ -1707,13 +1707,16 @@
                        rt2x00dev->rx_params.ssi =
                                rt2x00_get_field32(word2, RXD_W2_RSSI);
 
-/* FIXME: The following set of assignments supply additional data for wireless 
statistics. The
-          necessary quantities are (1) the "noise" value in dBm, and (2) the 
"signal" value in dBm.
-          The present code supplies dummy values for these quantities. */
-
-                       rt2x00dev->rx_params.noise = -85;   /* FIXME */
-                       rt2x00dev->rx_params.signal =
-                               rt2x00dev->rx_params.ssi - RT2X00_RX_MAX_SSI; 
/* FIXME */
+                       /*
+                        * The following set of assignments supply
+                        * additional data for wireless statistics. The
+                        * necessary quantities are (1) the "noise" value
+                        * in dBm, and (2) the "signal" value in dBm.
+                        */
+                       rt2x00dev->rx_params.noise =
+                               rt2x00_get_link_noise(&rt2x00dev->link);
+                       rt2x00dev->rx_params.signal = rt2x00dev->rx_params.ssi
+                               - rt2x00dev->hw->maxssi;
 
                        __ieee80211_rx(rt2x00dev->hw,
                                skb, &rt2x00dev->rx_params);
@@ -2588,6 +2591,15 @@
        if (rt2x00_get_field16(eeprom, EEPROM_NIC_DYN_BBP_TUNE))
                SET_FLAG(rt2x00dev, CONFIG_DISABLE_LINK_TUNING);
 
+       /*
+        * Read the RSSI <-> dBm offset information.
+        */
+       rt2x00_eeprom_read(rt2x00dev, EEPROM_CALIBRATE_OFFSET, &eeprom);
+       rt2x00dev->hw->maxssi =
+               rt2x00_get_field16(eeprom, EEPROM_CALIBRATE_OFFSET_RSSI);
+       if (rt2x00dev->hw->maxssi == 0x00 || rt2x00dev->hw->maxssi == 0xff)
+               rt2x00dev->hw->maxssi = MAX_RX_SSI;
+
        return 0;
 }
 
diff -rU3 wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt2500pci.h 
wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt2500pci.h
--- wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt2500pci.h     
2006-12-02 23:22:56.000000000 +0100
+++ wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt2500pci.h    
2006-12-03 12:50:28.000000000 +0100
@@ -50,6 +50,11 @@
 #define RT2560_VERSION_D               4
 
 /*
+ * Max RSSI value, required for RSSI <-> dBm conversion.
+ */
+#define MAX_RX_SSI                     120
+
+/*
  * Register layout information.
  */
 #define CSR_REG_BASE                   0x0000
@@ -1001,6 +1006,12 @@
 #define EEPROM_TXPOWER_2               FIELD16(0xff00)
 
 /*
+ * RSSI <-> dBm offset calibration
+ */
+#define EEPROM_CALIBRATE_OFFSET                0x3e
+#define EEPROM_CALIBRATE_OFFSET_RSSI   FIELD16(0x00ff)
+
+/*
  * DMA descriptor defines.
  */
 #define TXD_DESC_SIZE                  ( 11 * sizeof(struct data_desc) )
diff -rU3 wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt2500usb.c 
wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt2500usb.c
--- wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt2500usb.c     
2006-12-03 12:35:13.000000000 +0100
+++ wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt2500usb.c    
2006-12-03 12:48:18.000000000 +0100
@@ -1657,13 +1657,16 @@
                        rt2x00dev->rx_params.ssi =
                                rt2x00_get_field32(word1, RXD_W1_RSSI);
 
-/* FIXME: The following set of assignments supply additional data for wireless 
statistics. The
-         necessary quantities are (1) the "noise" value in dBm, and (2) the 
"signal" value in dBm.
-         The present code supplies dummy values for these quantities. */
-
-                       rt2x00dev->rx_params.noise = -85;   /* FIXME */
-                       rt2x00dev->rx_params.signal =
-                               rt2x00dev->rx_params.ssi - RT2X00_RX_MAX_SSI; 
/* FIXME */
+                       /*
+                        * The following set of assignments supply
+                        * additional data for wireless statistics. The
+                        * necessary quantities are (1) the "noise" value
+                        * in dBm, and (2) the "signal" value in dBm.
+                        */
+                       rt2x00dev->rx_params.noise =
+                               rt2x00_get_link_noise(&rt2x00dev->link);
+                       rt2x00dev->rx_params.signal = rt2x00dev->rx_params.ssi
+                               - rt2x00dev->hw->maxssi;
 
                        __ieee80211_rx(rt2x00dev->hw,
                                skb, &rt2x00dev->rx_params);
@@ -2397,6 +2400,15 @@
        if (rt2x00_get_field16(eeprom, EEPROM_NIC_DYN_BBP_TUNE))
                SET_FLAG(rt2x00dev, CONFIG_DISABLE_LINK_TUNING);
 
+       /*
+        * Read the RSSI <-> dBm offset information.
+        */
+       rt2x00_eeprom_read(rt2x00dev, EEPROM_CALIBRATE_OFFSET, &eeprom);
+       rt2x00dev->hw->maxssi =
+               rt2x00_get_field16(eeprom, EEPROM_CALIBRATE_OFFSET_RSSI);
+       if (rt2x00dev->hw->maxssi == 0x00 || rt2x00dev->hw->maxssi == 0xff)
+               rt2x00dev->hw->maxssi = MAX_RX_SSI;
+
        return 0;
 }
 
diff -rU3 wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt2500usb.h 
wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt2500usb.h
--- wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt2500usb.h     
2006-12-02 23:23:08.000000000 +0100
+++ wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt2500usb.h    
2006-12-03 12:51:02.000000000 +0100
@@ -43,6 +43,11 @@
 #define RF5222                         0x0010
 
 /*
+ * Max RSSI value, required for RSSI <-> dBm conversion.
+ */
+#define MAX_RX_SSI                     120
+
+/*
  * Register layout information.
  */
 #define CSR_REG_BASE                   0x0400
@@ -556,6 +561,12 @@
 #define EEPROM_TXPOWER_2               FIELD16(0xff00)
 
 /*
+ * RSSI <-> dBm offset calibration
+ */
+#define EEPROM_CALIBRATE_OFFSET                0x36
+#define EEPROM_CALIBRATE_OFFSET_RSSI   FIELD16(0x00ff)
+
+/*
  * DMA descriptor defines.
  */
 #define TXD_DESC_SIZE                  ( 5 * sizeof(struct data_desc) )
diff -rU3 wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt2x00.h 
wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt2x00.h
--- wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt2x00.h        
2006-12-03 00:03:07.000000000 +0100
+++ wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt2x00.h       
2006-12-03 12:56:07.000000000 +0100
@@ -851,8 +851,6 @@
 #define CONFIG_DOUBLE_ANTENNA          0x00010000
 #define CONFIG_DISABLE_BBP_TUNING      0x00020000
 
-#define RT2X00_RX_MAX_SSI              100
-
        /*
         * Chipset identification.
         */
diff -rU3 wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt61pci.c 
wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt61pci.c
--- wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt61pci.c       
2006-12-03 12:35:34.000000000 +0100
+++ wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt61pci.c      
2006-12-03 12:48:43.000000000 +0100
@@ -2158,13 +2158,16 @@
                        rt2x00dev->rx_params.ssi =
                                rt2x00_get_field32(word1, RXD_W1_RSSI);
 
-/* FIXME: The following set of assignments supply additional data for wireless 
statistics. The
-         necessary quantities are (1) the "noise" value in dBm, and (2) the 
"signal" value in dBm.
-         The present code supplies dummy values for these quantities. */
-
-                       rt2x00dev->rx_params.noise = -85;   /* FIXME */
-                       rt2x00dev->rx_params.signal =
-                               rt2x00dev->rx_params.ssi - RT2X00_RX_MAX_SSI; 
/* FIXME */
+                       /*
+                        * The following set of assignments supply
+                        * additional data for wireless statistics. The
+                        * necessary quantities are (1) the "noise" value
+                        * in dBm, and (2) the "signal" value in dBm.
+                        */
+                       rt2x00dev->rx_params.noise =
+                               rt2x00_get_link_noise(&rt2x00dev->link);
+                       rt2x00dev->rx_params.signal = rt2x00dev->rx_params.ssi
+                               - rt2x00dev->hw->maxssi;
 
                        __ieee80211_rx(rt2x00dev->hw,
                                skb, &rt2x00dev->rx_params);
diff -rU3 wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt61pci.h 
wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt61pci.h
--- wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt61pci.h       
2006-12-02 23:23:20.000000000 +0100
+++ wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt61pci.h      
2006-12-03 12:51:17.000000000 +0100
@@ -43,6 +43,11 @@
 #define RF2529                         0x0004
 
 /*
+ * Max RSSI value, required for RSSI <-> dBm conversion.
+ */
+#define MAX_RX_SSI                     120
+
+/*
  * Register layout information.
  */
 #define CSR_REG_BASE                   0x3000
diff -rU3 wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt73usb.c 
wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt73usb.c
--- wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt73usb.c       
2006-12-03 12:35:52.000000000 +0100
+++ wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt73usb.c      
2006-12-03 12:48:57.000000000 +0100
@@ -1932,13 +1932,16 @@
                        rt2x00dev->rx_params.ssi =
                                rt2x00_get_field32(word1, RXD_W1_RSSI);
 
-/* FIXME: The following set of assignments supply additional data for wireless 
statistics. The
-         necessary quantities are (1) the "noise" value in dBm, and (2) the 
"signal" value in dBm.
-         The present code supplies dummy values for these quantities. */
-
-                       rt2x00dev->rx_params.noise = -85;   /* FIXME */
-                       rt2x00dev->rx_params.signal =
-                               rt2x00dev->rx_params.ssi - RT2X00_RX_MAX_SSI; 
/* FIXME */
+                       /*
+                        * The following set of assignments supply
+                        * additional data for wireless statistics. The
+                        * necessary quantities are (1) the "noise" value
+                        * in dBm, and (2) the "signal" value in dBm.
+                        */
+                       rt2x00dev->rx_params.noise =
+                               rt2x00_get_link_noise(&rt2x00dev->link);
+                       rt2x00dev->rx_params.signal = rt2x00dev->rx_params.ssi
+                               - rt2x00dev->hw->maxssi;
 
                        __ieee80211_rx(rt2x00dev->hw,
                                skb, &rt2x00dev->rx_params);
diff -rU3 wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt73usb.h 
wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt73usb.h
--- wireless-dev-bbp/drivers/net/wireless/d80211/rt2x00/rt73usb.h       
2006-12-02 23:23:31.000000000 +0100
+++ wireless-dev-rssi/drivers/net/wireless/d80211/rt2x00/rt73usb.h      
2006-12-03 12:51:34.000000000 +0100
@@ -41,6 +41,11 @@
 #define RF2527                         0x0004
 
 /*
+ * Max RSSI value, required for RSSI <-> dBm conversion.
+ */
+#define MAX_RX_SSI                     120
+
+/*
  * Register layout information.
  */
 #define CSR_REG_BASE                   0x3000
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to