PERFORCE change 114055 for review

Sepherosa Ziehau sephe at FreeBSD.org
Mon Feb 5 15:30:05 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=114055

Change 114055 by sephe at sephe_zealot:sam_wifi on 2007/02/05 15:29:03

	For ral(4) rt2560 part:
	- Convert RSSI to receive signal strength(dbm)
	- Add noise floor
	
	zealot:ral# ifconfig ral0 up scan
	SSID            BSSID              CHAN RATE   S:N     INT CAPS
	sephewifi-test  00:16:b6:2b:cd:38    1   54M -52:-95  100 ES  
	sephewifi       00:90:4c:7e:00:64   13   54M -55:-95  100 EP   WPA
	
	zealot:ral# ifconfig ath0 up scan
	SSID            BSSID              CHAN RATE   S:N     INT CAPS
	sephewifi-test  00:16:b6:2b:cd:38    1   54M -55:-96  100 ES  
	sephewifi       00:90:4c:7e:00:64   13   54M -55:-91  100 EP   WPA
	
	Obtained-from: Dragonfly

Affected files ...

.. //depot/projects/wifi/sys/dev/ral/rt2560.c#13 edit
.. //depot/projects/wifi/sys/dev/ral/rt2560reg.h#2 edit
.. //depot/projects/wifi/sys/dev/ral/rt2560var.h#7 edit

Differences ...

==== //depot/projects/wifi/sys/dev/ral/rt2560.c#13 (text) ====

@@ -65,6 +65,9 @@
 #include <dev/ral/rt2560reg.h>
 #include <dev/ral/rt2560var.h>
 
+#define RT2560_RSSI(sc, rssi)					\
+	((rssi) > (RT2560_NOISE_FLOOR + (sc)->rssi_corr) ?	\
+	 ((rssi) - RT2560_NOISE_FLOOR - (sc)->rssi_corr) : 0)
 
 #ifdef RAL_DEBUG
 #define DPRINTF(x)	do { if (ral_debug > 0) printf x; } while (0)
@@ -1166,7 +1169,7 @@
 			tap->wr_chan_freq = htole16(ic->ic_curchan->ic_freq);
 			tap->wr_chan_flags = htole16(ic->ic_curchan->ic_flags);
 			tap->wr_antenna = sc->rx_ant;
-			tap->wr_antsignal = desc->rssi;
+			tap->wr_antsignal = RT2560_RSSI(sc, desc->rssi);
 
 			bpf_mtap2(sc->sc_drvbpf, tap, sc->sc_rxtap_len, m);
 		}
@@ -1178,11 +1181,13 @@
 		    (struct ieee80211_frame_min *)wh);
 
 		/* send the frame to the 802.11 layer */
-		ieee80211_input(ic, m, ni, desc->rssi, 0, 0);
+		ieee80211_input(ic, m, ni, RT2560_RSSI(sc, desc->rssi),
+				RT2560_NOISE_FLOOR, 0);
 
 		/* give rssi to the rate adatation algorithm */
 		rn = (struct rt2560_node *)ni;
-		ral_rssadapt_input(ic, ni, &rn->rssadapt, desc->rssi);
+		ral_rssadapt_input(ic, ni, &rn->rssadapt,
+				   RT2560_RSSI(sc, desc->rssi));
 
 		/* node is no longer needed */
 		ieee80211_free_node(ni);
@@ -2540,6 +2545,14 @@
 		sc->txpow[i * 2] = val >> 8;
 		sc->txpow[i * 2 + 1] = val & 0xff;
 	}
+
+	val = rt2560_eeprom_read(sc, RT2560_EEPROM_CALIBRATE);
+	if ((val & 0xff00) == 0xff00)
+		sc->rssi_corr = RT2560_DEFAULT_RSSI_CORR;
+	else
+		sc->rssi_corr = val >> 8;
+	DPRINTF(("rssi correction %d, calibrate 0x%02x\n",
+		 sc->rssi_corr, val));
 }
 
 

==== //depot/projects/wifi/sys/dev/ral/rt2560reg.h#2 (text) ====

@@ -17,6 +17,9 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
+#define RT2560_DEFAULT_RSSI_CORR	0x79
+#define RT2560_NOISE_FLOOR		-95
+
 #define RT2560_TX_RING_COUNT		48
 #define RT2560_ATIM_RING_COUNT		4
 #define RT2560_PRIO_RING_COUNT		16
@@ -296,6 +299,7 @@
 #define RT2560_EEPROM_CONFIG0	16
 #define RT2560_EEPROM_BBP_BASE	19
 #define RT2560_EEPROM_TXPOWER	35
+#define RT2560_EEPROM_CALIBRATE	62
 
 /*
  * control and status registers access macros

==== //depot/projects/wifi/sys/dev/ral/rt2560var.h#7 (text) ====

@@ -120,6 +120,7 @@
 	uint32_t		asic_rev;
 	uint32_t		eeprom_rev;
 	uint8_t			rf_rev;
+	uint8_t			rssi_corr;
 
 	struct rt2560_tx_ring	txq;
 	struct rt2560_tx_ring	prioq;


More information about the p4-projects mailing list