summaryrefslogtreecommitdiffstats
path: root/linux-2.6-zd1211rw-fix-invalid-signal-values-from-device.patch
diff options
context:
space:
mode:
Diffstat (limited to 'linux-2.6-zd1211rw-fix-invalid-signal-values-from-device.patch')
-rw-r--r--linux-2.6-zd1211rw-fix-invalid-signal-values-from-device.patch82
1 files changed, 0 insertions, 82 deletions
diff --git a/linux-2.6-zd1211rw-fix-invalid-signal-values-from-device.patch b/linux-2.6-zd1211rw-fix-invalid-signal-values-from-device.patch
deleted file mode 100644
index f91ceb808..000000000
--- a/linux-2.6-zd1211rw-fix-invalid-signal-values-from-device.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-commit 7a1d6564a15183cb5994656040966df09af8390f
-Author: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
-Date: Mon Jun 20 14:42:28 2011 +0300
-
- zd1211rw: fix invalid signal values from device
-
- Driver uses IEEE80211_HW_SIGNAL_UNSPEC and so signal values reported to
- mac80211 should be in range 0..100. Sometimes device return out of range
- values. These out of range values can then trigger warning in
- cfg80211_inform_bss_frame.
-
- This patch adds checks to enforce range returned from driver to
- mac80211 be in 0..100 range.
-
- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
- Signed-off-by: John W. Linville <linville@tuxdriver.com>
-
-diff --git a/drivers/net/wireless/zd1211rw/zd_def.h b/drivers/net/wireless/zd1211rw/zd_def.h
-index 5463ca9..9a1b013 100644
---- a/drivers/net/wireless/zd1211rw/zd_def.h
-+++ b/drivers/net/wireless/zd1211rw/zd_def.h
-@@ -37,9 +37,15 @@ typedef u16 __nocast zd_addr_t;
- if (net_ratelimit()) \
- dev_printk_f(KERN_DEBUG, dev, fmt, ## args); \
- } while (0)
-+# define dev_dbg_f_cond(dev, cond, fmt, args...) ({ \
-+ bool __cond = !!(cond); \
-+ if (unlikely(__cond)) \
-+ dev_printk_f(KERN_DEBUG, dev, fmt, ## args); \
-+})
- #else
- # define dev_dbg_f(dev, fmt, args...) do { (void)(dev); } while (0)
- # define dev_dbg_f_limit(dev, fmt, args...) do { (void)(dev); } while (0)
-+# define dev_dbg_f_cond(dev, cond, fmt, args...) do { (void)(dev); } while (0)
- #endif /* DEBUG */
-
- #ifdef DEBUG
-diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
-index 5037c8b..5de28bf 100644
---- a/drivers/net/wireless/zd1211rw/zd_mac.c
-+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
-@@ -160,6 +160,22 @@ static int zd_reg2alpha2(u8 regdomain, char *alpha2)
- return 1;
- }
-
-+static int zd_check_signal(struct ieee80211_hw *hw, int signal)
-+{
-+ struct zd_mac *mac = zd_hw_mac(hw);
-+
-+ dev_dbg_f_cond(zd_mac_dev(mac), signal < 0 || signal > 100,
-+ "%s: signal value from device not in range 0..100, "
-+ "but %d.\n", __func__, signal);
-+
-+ if (signal < 0)
-+ signal = 0;
-+ else if (signal > 100)
-+ signal = 100;
-+
-+ return signal;
-+}
-+
- int zd_mac_preinit_hw(struct ieee80211_hw *hw)
- {
- int r;
-@@ -461,7 +477,7 @@ static void zd_mac_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb,
- if (i<IEEE80211_TX_MAX_RATES)
- info->status.rates[i].idx = -1; /* terminate */
-
-- info->status.ack_signal = ackssi;
-+ info->status.ack_signal = zd_check_signal(hw, ackssi);
- ieee80211_tx_status_irqsafe(hw, skb);
- }
-
-@@ -982,7 +998,7 @@ int zd_mac_rx(struct ieee80211_hw *hw, const u8 *buffer, unsigned int length)
-
- stats.freq = zd_channels[_zd_chip_get_channel(&mac->chip) - 1].center_freq;
- stats.band = IEEE80211_BAND_2GHZ;
-- stats.signal = status->signal_strength;
-+ stats.signal = zd_check_signal(hw, status->signal_strength);
-
- rate = zd_rx_rate(buffer, status);
-