From: Ivo van Doorn <ivdoorn@gmail.com>
To: "John W. Linville" <linville@tuxdriver.com>
Cc: netdev@vger.kernel.org
Subject: [PATCH 08/26] rt2x00: Rssi detection
Date: Sun, 3 Dec 2006 19:19:03 +0100 [thread overview]
Message-ID: <200612031919.03866.IvDoorn@gmail.com> (raw)
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 <IvDoorn@gmail.com>
---
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
reply other threads:[~2006-12-03 18:19 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200612031919.03866.IvDoorn@gmail.com \
--to=ivdoorn@gmail.com \
--cc=linville@tuxdriver.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.