diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2007-12-19 19:20:12 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 15:08:50 -0800 |
commit | 851b3e5e3de0feea7bfee634f99a940648de58c8 (patch) | |
tree | 032fb6cc78ea998127aa9cd81acd718dad8ac81f | |
parent | 977b143c13e685081625704ac356b741d71c6a73 (diff) | |
download | op-kernel-dev-851b3e5e3de0feea7bfee634f99a940648de58c8.zip op-kernel-dev-851b3e5e3de0feea7bfee634f99a940648de58c8.tar.gz |
airo: fix endianness bug in ->dBm handling
airo_translate_scan() reads BSSListRid directly, does _not_ byteswap
and uses ->dBm (__le16) as host-endian.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/airo.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c index 24fa0d6..6d4cc68 100644 --- a/drivers/net/wireless/airo.c +++ b/drivers/net/wireless/airo.c @@ -7239,6 +7239,7 @@ static inline char *airo_translate_scan(struct net_device *dev, char * current_val; /* For rates */ int i; char * buf; + u16 dBm; /* First entry *MUST* be the AP MAC address */ iwe.cmd = SIOCGIWAP; @@ -7277,16 +7278,18 @@ static inline char *airo_translate_scan(struct net_device *dev, iwe.u.freq.e = 1; current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, IW_EV_FREQ_LEN); + dBm = le16_to_cpu(bss->dBm); + /* Add quality statistics */ iwe.cmd = IWEVQUAL; if (ai->rssi) { - iwe.u.qual.level = 0x100 - bss->dBm; - iwe.u.qual.qual = airo_dbm_to_pct( ai->rssi, bss->dBm ); + iwe.u.qual.level = 0x100 - dBm; + iwe.u.qual.qual = airo_dbm_to_pct(ai->rssi, dBm); iwe.u.qual.updated = IW_QUAL_QUAL_UPDATED | IW_QUAL_LEVEL_UPDATED | IW_QUAL_DBM; } else { - iwe.u.qual.level = (bss->dBm + 321) / 2; + iwe.u.qual.level = (dBm + 321) / 2; iwe.u.qual.qual = 0; iwe.u.qual.updated = IW_QUAL_QUAL_INVALID | IW_QUAL_LEVEL_UPDATED |