Samuel/Kristen: I have applied the three patches delivered by Samuel@Atheros. And do some basic test. It works fine, I did not found any side effect.
> -----Original Message----- > From: meego-kernel-boun...@lists.meego.com > [mailto:meego-kernel-boun...@lists.meego.com] On Behalf Of Chang, Samuel > Sent: Wednesday, July 06, 2011 11:44 AM > To: Samuel Ortiz > Cc: Wu, Ricky; Huang, Maggie; meego-kernel@lists.meego.com; Yang, Jack; > Accardi, Kristen C > Subject: Re: [Meego-kernel] [PATCH] ar6003 : fix cfg80211 bss signal format > > Hi Samuel, > > This patch should be related to below BOO # > > Bug 10219 > Bug 10011 > > Best regatds, > > Samuel Chang > Engineer > Qualcomm Atheros, Inc. > > -----Original Message----- > From: Samuel Ortiz [mailto:sa...@linux.intel.com] > Sent: Thursday, July 07, 2011 2:17 AM > To: Chang, Samuel > Cc: meego-kernel@lists.meego.com; kristen.c.acca...@intel.com; Wu, Ricky; > Huang, Maggie; Yang, Jack > Subject: Re: [Meego-kernel] [PATCH] ar6003 : fix cfg80211 bss signal format > > Hi Samuel > > On Wed, Jul 06, 2011 at 07:49:57AM +0000, Chang, Samuel wrote: > > Subject: Correct the cfg80211 bss signal strenth format > > > > BOO # 10279 - Strength in list-service is always 100, which is wrong > > > > ar6003_cfg80211_rssi_signal_fix.patch is based on an accepted patch - > > kernel-adaptation-mrst-2.6.37.6-92.2 and ar6003_cfg_syncup_v2.patch. > > > > Signed-off-by: Samuel Chang <samu...@qca.qualcomm.com> > Acked-by: Samuel Ortiz <sa...@linux.intel.com> > > Kristen, would you mind pushing that one (i.e. > ar6003_cfg80211_rssi_signal_fix.patch) forward ? > > Cheers, > Samuel. > > > > diff -ruN > kernel-2.6.37.6-24.3_cfg80211_fix_patch_1/drivers/staging/ar6003/os/linux/cf > g80211.c > kernel-2.6.37.6-24.3_cfg80211_rssi_patch_1.1/drivers/staging/ar6003/os/linu > x/cfg80211.c > > --- > kernel-2.6.37.6-24.3_cfg80211_fix_patch_1/drivers/staging/ar6003/os/linux/cf > g80211.c 2011-06-29 11:09:42.519414000 +0800 > > +++ > kernel-2.6.37.6-24.3_cfg80211_rssi_patch_1.1/drivers/staging/ar6003/os/linu > x/cfg80211.c 2011-07-06 14:58:11.257184423 +0800 > > @@ -804,7 +804,7 @@ > > > > freq = cie->ie_chan; > > channel = ieee80211_get_channel(wiphy, freq); > > - signal = ni->ni_snr * 100; > > + signal = ni->ni_snr * 100 - 9500; > > > > AR_DEBUG_PRINTF(ATH_DEBUG_INFO, > > ("%s: bssid %02x:%02x:%02x:%02x:%02x:%02x > channel > > %d freq %d size %d\n", > > > diff -ruN kernel-2.6.37.6-92.2/drivers/staging/ar6003/include/common/wmi.h > kernel-2.6.37.6-92.2_cfg80211_fix_patch/drivers/staging/ar6003/include/com > mon/wmi.h > > --- kernel-2.6.37.6-92.2/drivers/staging/ar6003/include/common/wmi.h > 2011-06-15 02:06:12.863498128 +0800 > > +++ > kernel-2.6.37.6-92.2_cfg80211_fix_patch/drivers/staging/ar6003/include/com > mon/wmi.h 2011-06-29 08:31:52.440455388 +0800 > > @@ -552,6 +552,11 @@ > > LEAP_AUTH = 0x04, /* different from > IEEE_AUTH_MODE definitions */ > > } DOT11_AUTH_MODE; > > > > +enum { > > + AUTH_IDLE, > > + AUTH_OPEN_IN_PROGRESS, > > +}; > > + > > typedef enum { > > NONE_AUTH = 0x01, > > WPA_AUTH = 0x02, > > diff -ruN kernel-2.6.37.6-92.2/drivers/staging/ar6003/os/linux/ar6000_drv.c > kernel-2.6.37.6-92.2_cfg80211_fix_patch/drivers/staging/ar6003/os/linux/ar60 > 00_drv.c > > --- kernel-2.6.37.6-92.2/drivers/staging/ar6003/os/linux/ar6000_drv.c > 2011-06-15 02:06:12.859498118 +0800 > > +++ > kernel-2.6.37.6-92.2_cfg80211_fix_patch/drivers/staging/ar6003/os/linux/ar60 > 00_drv.c 2011-06-29 09:34:20.847042734 +0800 > > @@ -1946,6 +1946,8 @@ > > SET_NETDEV_DEV(dev, wiphy_dev(wdev->wiphy)); > > wdev->netdev = dev; > > arPriv->arNetworkType = INFRA_NETWORK; > > + ar->smeState = SME_DISCONNECTED; > > + arPriv->arAutoAuthStage = AUTH_IDLE; > > #endif /* ATH6K_CONFIG_CFG80211 */ > > > > #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) diff -ruN > > kernel-2.6.37.6-92.2/drivers/staging/ar6003/os/linux/cfg80211.c > kernel-2.6.37.6-92.2_cfg80211_fix_patch/drivers/staging/ar6003/os/linux/cfg8 > 0211.c > > --- kernel-2.6.37.6-92.2/drivers/staging/ar6003/os/linux/cfg80211.c > 2011-06-28 20:57:34.000000000 +0800 > > +++ > kernel-2.6.37.6-92.2_cfg80211_fix_patch/drivers/staging/ar6003/os/linux/cfg8 > 0211.c 2011-06-29 11:09:42.519414972 +0800 > > @@ -169,6 +169,10 @@ > > case NL80211_AUTHTYPE_NETWORK_EAP: > > arPriv->arDot11AuthMode = LEAP_AUTH; > > break; > > + case NL80211_AUTHTYPE_AUTOMATIC: > > + arPriv->arDot11AuthMode = OPEN_AUTH; > > + arPriv->arAutoAuthStage = AUTH_OPEN_IN_PROGRESS; > > + break; > > default: > > arPriv->arDot11AuthMode = OPEN_AUTH; > > AR_DEBUG_PRINTF(ATH_DEBUG_INFO, @@ -249,6 +253,7 @@ > > unsigned char *ie = sme->ie; > > > > AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("%s: \n", __func__)); > > + ar->smeState = SME_CONNECTING; > > > > if(ar->arWmiReady == FALSE) { > > AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: Wmi not ready > yet\n", > > __func__)); @@ -302,12 +307,6 @@ > > return -EINTR; > > } > > } > > - up(&arPriv->arPrivSem); > > - > > - if(down_interruptible(&arPriv->arPrivSem)) { > > - AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: busy, couldn't get > access\n", __func__)); > > - return -ERESTARTSYS; > > - } > > > > if(arPriv->arConnected == TRUE && > > arPriv->arSsidLen == sme->ssid_len && @@ -316,7 +315,9 @@ > > status = wmi_reconnect_cmd(arPriv->arWmi, > > arSta->arReqBssid, > > arPriv->arChannelHint); > > - > > + > > + up(&arPriv->arPrivSem); > > + > > if (status != A_OK) { > > AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: > wmi_reconnect_cmd failed\n", __func__)); > > return -EIO; > > @@ -461,6 +462,7 @@ > > unsigned char *ptr_ie_buf = ie_buf; > > unsigned char *ieeemgmtbuf = NULL; > > A_UINT8 source_mac[ATH_MAC_LEN]; > > + AR_SOFTC_T *ar = arPriv->arSoftc; > > > > A_UINT8 assocReqIeOffset = sizeof(A_UINT16) + /* capinfo*/ > > sizeof(A_UINT16); /* listen > interval */ > > @@ -474,6 +476,7 @@ > > > > assocReqLen -= assocReqIeOffset; > > assocRespLen -= assocRespIeOffset; > > + arPriv->arAutoAuthStage = AUTH_IDLE; > > > > if((ADHOC_NETWORK & networkType)) { > > if(NL80211_IFTYPE_ADHOC != arPriv->wdev->iftype) { @@ -502,7 > > +505,15 @@ > > ((ADHOC_NETWORK & networkType) ? > WLAN_CAPABILITY_IBSS : WLAN_CAPABILITY_ESS), > > ((ADHOC_NETWORK & networkType) ? > > WLAN_CAPABILITY_IBSS : WLAN_CAPABILITY_ESS)); > > > > - if(!bss) { > > + /* > > + * Earlier we were updating the cfg about bss by making a beacon frame > > + * only if the entry for bss is not there. This can have some issue if > > + * ROAM event is generated and a heavy traffic is ongoing. The ROAM > > + * event is handled through a work queue and by the time it really gets > > + * handled, BSS would have been aged out. So it is better to update the > > + * cfg about BSS irrespective of its entry being present right now or > > + * not. > > + */ > > if (ADHOC_NETWORK & networkType) { > > /* construct 802.11 mgmt beacon */ > > if(ptr_ie_buf) { > > @@ -543,6 +554,7 @@ > > if(!ieeemgmtbuf) { > > AR_DEBUG_PRINTF(ATH_DEBUG_ERR, > > ("%s: ieeeMgmtbuf alloc error\n", > > __func__)); > > + cfg80211_put_bss(bss); > > return; > > } > > > > @@ -572,7 +584,6 @@ > > signal, GFP_ATOMIC); > > A_FREE(ieeemgmtbuf); > > cfg80211_put_bss(bss); > > - } > > > > if((ADHOC_NETWORK & networkType)) { > > cfg80211_ibss_joined(arPriv->arNetDev, bssid, GFP_ATOMIC); > @@ > > -581,6 +592,7 @@ > > > > if (FALSE == arPriv->arConnected) { > > /* inform connect result to cfg80211 */ > > + ar->smeState = SME_DISCONNECTED; > > cfg80211_connect_result(arPriv->arNetDev, bssid, > > assocReqIe, assocReqLen, > > assocRespIe, assocRespLen, @@ > -642,6 > > +654,14 @@ > > A_UINT8 *bssid, A_UINT8 > assocRespLen, > > A_UINT8 *assocInfo, A_UINT16 > > protocolReasonStatus) { > > + A_UINT16 status; > > + AR_SOFTC_STA_T *arSta = &arPriv->arSta; > > + AR_SOFTC_T *ar = (AR_SOFTC_T *)arPriv->arSoftc; > > + > > + if (arPriv->scan_request) { > > + cfg80211_scan_done(arPriv->scan_request, true); > > + arPriv->scan_request = NULL; > > + } > > > > AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("%s: reason=%u\n", > __func__, > > reason)); > > > > @@ -664,18 +684,74 @@ > > } > > } > > > > - if(FALSE == arPriv->arConnected) { > > + if(true == arSta->arConnectPending) { > > if(NO_NETWORK_AVAIL == reason) { > > /* connect cmd failed */ > > - cfg80211_connect_result(arPriv->arNetDev, bssid, > > - NULL, 0, > > - NULL, 0, > > - > WLAN_STATUS_UNSPECIFIED_FAILURE, > > - GFP_ATOMIC); > > - } > > + wmi_disconnect_cmd(arPriv->arWmi); > > + } else if (reason == DISCONNECT_CMD) { > > + if (arPriv->arAutoAuthStage) { > > + /* > > + * If the current auth algorithm is open try shared > > + * and make autoAuthStage idle. We do not make it > > + * leap for now being. > > + */ > > + if (arPriv->arDot11AuthMode == OPEN_AUTH) { > > + struct ar_key *key = NULL; > > + key = &arPriv->keys[arPriv->arDefTxKeyIndex]; > > + if (down_interruptible(&ar->arSem)) { > > + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: > > busy, > couldn't get access\n", __func__)); > > + return; > > + } > > + > > + arPriv->arDot11AuthMode = SHARED_AUTH; > > + arPriv->arAutoAuthStage = AUTH_IDLE; > > + > > + wmi_addKey_cmd(arPriv->arWmi, > arPriv->arDefTxKeyIndex, > > + arPriv->arPairwiseCrypto, > > + GROUP_USAGE | TX_USAGE, > > + key->key_len, > > + NULL, > > + key->key, KEY_OP_INIT_VAL, NULL, > > + NO_SYNC_WMIFLAG); > > + > > + status = wmi_connect_cmd(arPriv->arWmi, > > + arPriv->arNetworkType, > > + > > arPriv->arDot11AuthMode, > > + arPriv->arAuthMode, > > + > > arPriv->arPairwiseCrypto, > > + > > arPriv->arPairwiseCryptoLen, > > + arPriv->arGroupCrypto, > > + > > arPriv->arGroupCryptoLen, > > + arPriv->arSsidLen, > > + arPriv->arSsid, > > + arSta->arReqBssid, > > + arPriv->arChannelHint, > > + > > arSta->arConnectCtrlFlags); > > + up(&ar->arSem); > > + > > + } else if (arPriv->arDot11AuthMode == SHARED_AUTH) { > > + /* should not reach here */ > > + } > > + } else { > > + arSta->arConnectPending = false; > > + if (ar->smeState == SME_CONNECTING) { > > + cfg80211_connect_result(arPriv->arNetDev, bssid, > > + NULL, 0, > > + NULL, 0, > > + > > WLAN_STATUS_UNSPECIFIED_FAILURE, > > + GFP_ATOMIC); > > + } else { > > + cfg80211_disconnected(arPriv->arNetDev, > > + reason, > > + NULL, 0, > > + GFP_ATOMIC); > > + } > > + ar->smeState = SME_DISCONNECTED; > > + } > > + } > > } else { > > - /* connection loss due to disconnect cmd or low rssi */ > > - cfg80211_disconnected(arPriv->arNetDev, reason, NULL, 0, > GFP_ATOMIC); > > + if (reason != DISCONNECT_CMD) > > + wmi_disconnect_cmd(arPriv->arWmi); > > } > > } > > > > @@ -812,10 +888,11 @@ > > if(arPriv->scan_request) > > { > > /* Translate data to cfg80211 mgmt format */ > > + if (arPriv->arWmi) > > wmi_iterate_nodes(arPriv->arWmi, ar6k_cfg80211_scan_node, > > arPriv->wdev->wiphy); > > > > - cfg80211_scan_done(arPriv->scan_request, > > - (status & A_ECANCELED) ? true : false); > > + cfg80211_scan_done(arPriv->scan_request, > > + ((status & A_ECANCELED) || (status & A_EBUSY)) ? true : > > +false); > > > > if(arPriv->scan_request->n_ssids && > > arPriv->scan_request->ssids[0].ssid_len) { @@ -1026,6 > > +1103,7 @@ > > AR_SOFTC_T *ar = arPriv->arSoftc; > > struct ar_key *key = NULL; > > A_STATUS status = A_OK; > > + u8 key_usage; > > > > AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("%s: index %d\n", __func__, > > key_index)); > > > > @@ -1052,17 +1130,20 @@ > > return -EINVAL; > > } > > > > - if (arPriv->arAuthMode < WPA_AUTH) { > > - arPriv->arDefTxKeyIndex = key_index; > > - key = &arPriv->keys[arPriv->arDefTxKeyIndex]; > > - status = wmi_addKey_cmd(arPriv->arWmi, arPriv->arDefTxKeyIndex, > > - arPriv->arPairwiseCrypto, GROUP_USAGE > | TX_USAGE, > > + key_usage = GROUP_USAGE; > > + if (WEP_CRYPT == arPriv->arPairwiseCrypto) { > > + key_usage |= TX_USAGE; > > + } > > + > > + arPriv->arDefTxKeyIndex = key_index; > > + key = &arPriv->keys[arPriv->arDefTxKeyIndex]; > > + status = wmi_addKey_cmd(arPriv->arWmi, arPriv->arDefTxKeyIndex, > > + arPriv->arPairwiseCrypto, key_usage, > > key->key_len, key->seq, key->key, > KEY_OP_INIT_VAL, > > NULL, SYNC_BOTH_WMIFLAG); > > - if (status != A_OK) { > > - return -EIO; > > - } > > - } > > + if (status != A_OK) { > > + return -EIO; > > + } > > return 0; > > } > > > > @@ -1469,6 +1550,152 @@ > > WLAN_CIPHER_SUITE_CCMP, > > }; > > > > +bool is_rate_legacy(s32 rate) > > +{ > > + static const s32 legacy[] = { 1000, 2000, 5500, 11000, > > + 6000, 9000, 12000, 18000, 24000, > > + 36000, 48000, 54000 }; > > + u8 i; > > + > > + for (i = 0; i < ARRAY_SIZE(legacy); i++) { > > + if (rate == legacy[i]) > > + return true; > > + } > > + > > + return false; > > +} > > + > > +bool is_rate_ht20(s32 rate, u8 *mcs, bool *sgi) { > > + static const s32 ht20[] = { 6500, 13000, 19500, 26000, 39000, > > + 52000, 58500, 65000, 72200 }; > > + u8 i; > > + > > + for (i = 0; i < ARRAY_SIZE(ht20); i++) { > > + if (rate == ht20[i]) { > > + if (i == ARRAY_SIZE(ht20) - 1) > > + /* last rate uses sgi */ > > + *sgi = true; > > + else > > + *sgi = false; > > + > > + *mcs = i; > > + return true; > > + } > > + } > > + return false; > > +} > > + > > +bool is_rate_ht40(s32 rate, u8 *mcs, bool *sgi) { > > + static const s32 ht40[] = { 13500, 27000, 40500, 54000, > > + 81000, 108000, 121500, 135000, > > + 150000 }; > > + u8 i; > > + > > + for (i = 0; i < ARRAY_SIZE(ht40); i++) { > > + if (rate == ht40[i]) { > > + if (i == ARRAY_SIZE(ht40) - 1) > > + /* last rate uses sgi */ > > + *sgi = true; > > + else > > + *sgi = false; > > + > > + *mcs = i; > > + return true; > > + } > > + } > > + > > + return false; > > +} > > + > > +static int ar6k_get_station(struct wiphy *wiphy, struct net_device *dev, > > + u8 *mac, struct station_info *sinfo) { > > + AR_SOFTC_DEV_T *arPriv = (AR_SOFTC_DEV_T *)ar6k_priv(dev); > > + AR_SOFTC_T *ar = arPriv->arSoftc; > > + long left; > > + bool sgi; > > + s32 rate; > > + int ret; > > + u8 mcs; > > + > > + if (memcmp(mac, arPriv->arBssid, ETH_ALEN) != 0) > > + return -ENOENT; > > + > > + if (down_interruptible(&ar->arSem)) > > + return -EBUSY; > > + > > + arPriv->statsUpdatePending = true; > > + > > + ret = wmi_get_stats_cmd(arPriv->arWmi); > > + > > + if (ret != 0) { > > + up(&ar->arSem); > > + return -EIO; > > + } > > + > > + left = wait_event_interruptible_timeout(arPriv->arEvent, > > + arPriv->statsUpdatePending == > > false, > > + wmitimeout * HZ); > > + > > + up(&ar->arSem); > > + > > + if (left == 0) > > + return -ETIMEDOUT; > > + else if (left < 0) > > + return left; > > + > > + if (arPriv->arTargetStats.rx_bytes) { > > + sinfo->rx_bytes = arPriv->arTargetStats.rx_bytes; > > + sinfo->filled |= STATION_INFO_RX_BYTES; > > + sinfo->rx_packets = arPriv->arTargetStats.rx_packets; > > + sinfo->filled |= STATION_INFO_RX_PACKETS; > > + } > > + > > + if (arPriv->arTargetStats.tx_bytes) { > > + sinfo->tx_bytes = arPriv->arTargetStats.tx_bytes; > > + sinfo->filled |= STATION_INFO_TX_BYTES; > > + sinfo->tx_packets = arPriv->arTargetStats.tx_packets; > > + sinfo->filled |= STATION_INFO_TX_PACKETS; > > + } > > + > > + sinfo->signal = arPriv->arTargetStats.cs_rssi; > > + sinfo->filled |= STATION_INFO_SIGNAL; > > + > > + rate = arPriv->arTargetStats.tx_unicast_rate; > > + > > + if (is_rate_legacy(rate)) { > > + sinfo->txrate.legacy = rate / 100; > > + } else if (is_rate_ht20(rate, &mcs, &sgi)) { > > + if (sgi) { > > + sinfo->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI; > > + sinfo->txrate.mcs = mcs - 1; > > + } else { > > + sinfo->txrate.mcs = mcs; > > + } > > + > > + sinfo->txrate.flags |= RATE_INFO_FLAGS_MCS; > > + } else if (is_rate_ht40(rate, &mcs, &sgi)) { > > + if (sgi) { > > + sinfo->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI; > > + sinfo->txrate.mcs = mcs - 1; > > + } else { > > + sinfo->txrate.mcs = mcs; > > + } > > + > > + sinfo->txrate.flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH; > > + sinfo->txrate.flags |= RATE_INFO_FLAGS_MCS; > > + } else { > > + WARN(1, "invalid rate: %d", rate); > > + return 0; > > + } > > + > > + sinfo->filled |= STATION_INFO_TX_BITRATE; > > + > > + return 0; > > +} > > + > > static struct > > cfg80211_ops ar6k_cfg80211_ops = { > > .change_virtual_intf = ar6k_cfg80211_change_iface, @@ -1489,6 > > +1716,7 @@ > > .set_power_mgmt = ar6k_cfg80211_set_power_mgmt, > > .join_ibss = ar6k_cfg80211_join_ibss, > > .leave_ibss = ar6k_cfg80211_leave_ibss, > > + .get_station = ar6k_get_station, > > }; > > > > struct wireless_dev * > > diff -ruN > kernel-2.6.37.6-92.2/drivers/staging/ar6003/os/linux/include/ar6000_drv.h > kernel-2.6.37.6-92.2_cfg80211_fix_patch/drivers/staging/ar6003/os/linux/inclu > de/ar6000_drv.h > > --- > kernel-2.6.37.6-92.2/drivers/staging/ar6003/os/linux/include/ar6000_drv.h > 2011-06-15 02:06:12.863498128 +0800 > > +++ > kernel-2.6.37.6-92.2_cfg80211_fix_patch/drivers/staging/ar6003/os/linux/inclu > de/ar6000_drv.h 2011-06-29 08:32:44.112711621 +0800 > > @@ -427,6 +427,13 @@ > > A_UINT8 seq_len; > > A_UINT32 cipher; > > }; > > + > > +enum { > > + SME_DISCONNECTED, > > + SME_CONNECTING, > > + SME_CONNECTED > > +}; > > + > > #endif /* ATH6K_CONFIG_CFG80211 */ > > > > > > @@ -574,6 +581,7 @@ > > A_UINT8 rxMetaVersion; > > A_INT32 (*exitCallback)(void *config); /* > generic callback at AR6K exit */ > > HIF_DEVICE_OS_DEVICE_INFO osDevInfo; > > + A_UINT32 smeState; > > A_UINT16 arWlanPowerState; > > A_BOOL arPlatPowerOff; > > USER_RSSI_CPENSATION rssi_compensation_param; > > @@ -729,6 +737,7 @@ > > AR_SOFTC_T *arSoftc; > > A_UINT8 arHoldConnection; > > A_UINT8 num_sta; > > + A_UINT8 arAutoAuthStage; > > }AR_SOFTC_DEV_T; > > > > #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) > > > > > Subject: Correct the cfg80211 bss signal strenth format > > > > Signed-off-by: Samuel Chang <samu...@qca.qualcomm.com> > > > > diff -ruN > kernel-2.6.37.6-24.3_cfg80211_fix_patch_1/drivers/staging/ar6003/os/linux/cf > g80211.c > kernel-2.6.37.6-24.3_cfg80211_rssi_patch_1.1/drivers/staging/ar6003/os/linu > x/cfg80211.c > > --- > kernel-2.6.37.6-24.3_cfg80211_fix_patch_1/drivers/staging/ar6003/os/linux/cf > g80211.c 2011-06-29 11:09:42.519414000 +0800 > > +++ > kernel-2.6.37.6-24.3_cfg80211_rssi_patch_1.1/drivers/staging/ar6003/os/linu > x/cfg80211.c 2011-07-06 14:58:11.257184423 +0800 > > @@ -804,7 +804,7 @@ > > > > freq = cie->ie_chan; > > channel = ieee80211_get_channel(wiphy, freq); > > - signal = ni->ni_snr * 100; > > + signal = ni->ni_snr * 100 - 9500; > > > > AR_DEBUG_PRINTF(ATH_DEBUG_INFO, > > ("%s: bssid %02x:%02x:%02x:%02x:%02x:%02x > channel > > %d freq %d size %d\n", > > > -- > Intel Open Source Technology Centre > http://oss.intel.com/ > _______________________________________________ > MeeGo-kernel mailing list > MeeGo-kernel@lists.meego.com > http://lists.meego.com/listinfo/meego-kernel _______________________________________________ MeeGo-kernel mailing list MeeGo-kernel@lists.meego.com http://lists.meego.com/listinfo/meego-kernel