aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/zd1211rw
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/zd1211rw')
-rw-r--r--drivers/net/wireless/zd1211rw/zd_def.h6
-rw-r--r--drivers/net/wireless/zd1211rw/zd_mac.c20
2 files changed, 24 insertions, 2 deletions
diff --git a/drivers/net/wireless/zd1211rw/zd_def.h b/drivers/net/wireless/zd1211rw/zd_def.h
index 5463ca9ebc01..9a1b013f81be 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;
37 if (net_ratelimit()) \ 37 if (net_ratelimit()) \
38 dev_printk_f(KERN_DEBUG, dev, fmt, ## args); \ 38 dev_printk_f(KERN_DEBUG, dev, fmt, ## args); \
39} while (0) 39} while (0)
40# define dev_dbg_f_cond(dev, cond, fmt, args...) ({ \
41 bool __cond = !!(cond); \
42 if (unlikely(__cond)) \
43 dev_printk_f(KERN_DEBUG, dev, fmt, ## args); \
44})
40#else 45#else
41# define dev_dbg_f(dev, fmt, args...) do { (void)(dev); } while (0) 46# define dev_dbg_f(dev, fmt, args...) do { (void)(dev); } while (0)
42# define dev_dbg_f_limit(dev, fmt, args...) do { (void)(dev); } while (0) 47# define dev_dbg_f_limit(dev, fmt, args...) do { (void)(dev); } while (0)
48# define dev_dbg_f_cond(dev, cond, fmt, args...) do { (void)(dev); } while (0)
43#endif /* DEBUG */ 49#endif /* DEBUG */
44 50
45#ifdef DEBUG 51#ifdef DEBUG
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 5037c8b2b415..5de28bf6fa5f 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)
160 return 1; 160 return 1;
161} 161}
162 162
163static int zd_check_signal(struct ieee80211_hw *hw, int signal)
164{
165 struct zd_mac *mac = zd_hw_mac(hw);
166
167 dev_dbg_f_cond(zd_mac_dev(mac), signal < 0 || signal > 100,
168 "%s: signal value from device not in range 0..100, "
169 "but %d.\n", __func__, signal);
170
171 if (signal < 0)
172 signal = 0;
173 else if (signal > 100)
174 signal = 100;
175
176 return signal;
177}
178
163int zd_mac_preinit_hw(struct ieee80211_hw *hw) 179int zd_mac_preinit_hw(struct ieee80211_hw *hw)
164{ 180{
165 int r; 181 int r;
@@ -461,7 +477,7 @@ static void zd_mac_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb,
461 if (i<IEEE80211_TX_MAX_RATES) 477 if (i<IEEE80211_TX_MAX_RATES)
462 info->status.rates[i].idx = -1; /* terminate */ 478 info->status.rates[i].idx = -1; /* terminate */
463 479
464 info->status.ack_signal = ackssi; 480 info->status.ack_signal = zd_check_signal(hw, ackssi);
465 ieee80211_tx_status_irqsafe(hw, skb); 481 ieee80211_tx_status_irqsafe(hw, skb);
466} 482}
467 483
@@ -982,7 +998,7 @@ int zd_mac_rx(struct ieee80211_hw *hw, const u8 *buffer, unsigned int length)
982 998
983 stats.freq = zd_channels[_zd_chip_get_channel(&mac->chip) - 1].center_freq; 999 stats.freq = zd_channels[_zd_chip_get_channel(&mac->chip) - 1].center_freq;
984 stats.band = IEEE80211_BAND_2GHZ; 1000 stats.band = IEEE80211_BAND_2GHZ;
985 stats.signal = status->signal_strength; 1001 stats.signal = zd_check_signal(hw, status->signal_strength);
986 1002
987 rate = zd_rx_rate(buffer, status); 1003 rate = zd_rx_rate(buffer, status);
988 1004