diff options
| author | Yuanyuan Liu <yuanliu@qca.qualcomm.com> | 2014-07-16 16:16:51 -0700 |
|---|---|---|
| committer | Pitani Venkata Rajesh Kumar <c_vpitan@qti.qualcomm.com> | 2014-08-06 13:37:07 +0530 |
| commit | 904069e2162e52dfc49fa40e2c3c8d685a57217e (patch) | |
| tree | ddd00c3ec719ada3f03497b0a35e799341892dde | |
| parent | 974bf54ed4ae8a4b66514ec51130df2f3708adad (diff) | |
qcacld: Implement two new requirements for LPSS
Implement two requirement for LPSS:
1. Report all scanable interface to LPSS
2. Add rssi in wlan status information
Change-Id: Ie0d9c569a2993a4789c0c28e05615869df53af30
CRs-Fixed: 695572
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_main.h | 8 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 36 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_early_suspend.c | 2 | ||||
| -rwxr-xr-x | CORE/HDD/src/wlan_hdd_main.c | 36 | ||||
| -rw-r--r-- | CORE/SVC/external/wlan_nlink_common.h | 1 |
5 files changed, 61 insertions, 22 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h index 2522285a0aa8..4f71219bcbb1 100644 --- a/CORE/HDD/inc/wlan_hdd_main.h +++ b/CORE/HDD/inc/wlan_hdd_main.h @@ -227,6 +227,10 @@ #define HDD_MIN_TX_POWER (-100) // minimum tx power #define HDD_MAX_TX_POWER (+100) // maximum tx power +#ifdef WLAN_FEATURE_LPSS +#define HDD_RSSI_THRESHOLD 10 /* RSSI threshold set to 10 for temp */ +#endif + typedef v_U8_t tWlanHddMacAddr[HDD_MAC_ADDR_LEN]; /* @@ -1009,6 +1013,9 @@ struct hdd_adapter_s #endif v_S7_t rssi; +#ifdef WLAN_FEATURE_LPSS + v_S7_t last_rssi_send; +#endif tANI_U8 snr; @@ -1670,6 +1677,7 @@ void wlan_hdd_send_status_pkg(hdd_adapter_t *pAdapter, void wlan_hdd_send_version_pkg(v_U32_t fw_version, v_U32_t chip_id, const char *chip_name); +void wlan_hdd_send_all_scan_intf_info(hdd_context_t *pHddCtx); #endif void wlan_hdd_send_svc_nlink_msg(int type, void *data, int len); #ifdef FEATURE_WLAN_AUTO_SHUTDOWN diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index b120375b1b04..2f4415602681 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -5951,10 +5951,6 @@ static int __wlan_hdd_cfg80211_change_iface(struct wiphy *wiphy, eCsrRoamBssType LastBSSType; hdd_config_t *pConfig = NULL; eMib_dot11DesiredBssType connectedBssType; -#ifdef WLAN_FEATURE_LPSS - hdd_adapter_t *pDataAdapter = NULL; - hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; -#endif unsigned long rc; VOS_STATUS vstatus; eHalStatus hstatus; @@ -6275,22 +6271,7 @@ done: #endif /* WLAN_BTAMP_FEATURE */ #ifdef WLAN_FEATURE_LPSS - vstatus = hdd_get_front_adapter(pHddCtx, &pAdapterNode); - while (NULL != pAdapterNode && VOS_STATUS_SUCCESS == vstatus) { - pDataAdapter = pAdapterNode->pAdapter; - if (pDataAdapter) { - if (pDataAdapter->device_mode == WLAN_HDD_INFRA_STATION) - break; - if (pDataAdapter->device_mode == WLAN_HDD_P2P_CLIENT) - break; - if (pDataAdapter->device_mode == WLAN_HDD_P2P_DEVICE) - break; - } - vstatus = hdd_get_next_adapter (pHddCtx, pAdapterNode, &pNext); - pAdapterNode = pNext; - } - - wlan_hdd_send_status_pkg(pDataAdapter, NULL, 1, 0); + wlan_hdd_send_all_scan_intf_info(pHddCtx); #endif EXIT(); @@ -10511,6 +10492,10 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, eDataRate11ACMaxMcs vhtMaxMcs; #endif /* WLAN_FEATURE_11AC */ +#ifdef WLAN_FEATURE_LPSS + v_S7_t last_rssi_send; +#endif /* WLAN_FEATURE_LPSS */ + ENTER(); if ((eConnectionState_Associated != pHddStaCtx->conn_info.connState) || @@ -10531,9 +10516,20 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, return status; } +#ifdef WLAN_FEATURE_LPSS + last_rssi_send = pAdapter->last_rssi_send; +#endif wlan_hdd_get_rssi(pAdapter, &sinfo->signal); sinfo->filled |= STATION_INFO_SIGNAL; +#ifdef WLAN_FEATURE_LPSS + if ((pAdapter->rssi >= last_rssi_send + HDD_RSSI_THRESHOLD) || + (pAdapter->rssi <= last_rssi_send - HDD_RSSI_THRESHOLD)) { + pAdapter->last_rssi_send = pAdapter->rssi; + wlan_hdd_send_status_pkg(pAdapter, pHddStaCtx, 1, 1); + } +#endif + wlan_hdd_get_station_stats(pAdapter); rate_flags = pAdapter->hdd_stats.ClassA_stat.tx_rate_flags; diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c index 4b9e0cae5c6d..f426b2f5158c 100644 --- a/CORE/HDD/src/wlan_hdd_early_suspend.c +++ b/CORE/HDD/src/wlan_hdd_early_suspend.c @@ -2204,7 +2204,7 @@ VOS_STATUS hdd_wlan_re_init(void *hif_sc) vos_set_reinit_in_progress(VOS_MODULE_ID_VOSS, FALSE); #ifdef WLAN_FEATURE_LPSS - wlan_hdd_send_status_pkg(pAdapter, NULL, 1, 0); + wlan_hdd_send_all_scan_intf_info(pHddCtx); wlan_hdd_send_version_pkg(pHddCtx->target_fw_version, pHddCtx->target_hw_version, pHddCtx->target_hw_name); diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index c2ad7262b1f1..5a9493e34914 100755 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -12089,7 +12089,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) #endif #ifdef WLAN_FEATURE_LPSS - wlan_hdd_send_status_pkg(pAdapter, NULL, 1, 0); + wlan_hdd_send_all_scan_intf_info(pHddCtx); wlan_hdd_send_version_pkg(pHddCtx->target_fw_version, pHddCtx->target_hw_version, pHddCtx->target_hw_name); @@ -13357,6 +13357,7 @@ int wlan_hdd_gen_wlan_status_pack(struct wlan_status_data *data, data->vdev_mode = pAdapter->device_mode; if (pHddStaCtx) { data->is_connected = is_connected; + data->rssi = pAdapter->rssi; data->freq = vos_chan_to_freq(pHddStaCtx->conn_info.operationChannel); if (WLAN_SVC_MAX_SSID_LEN >= pHddStaCtx->conn_info.SSID.SSID.length) { data->ssid_len = pHddStaCtx->conn_info.SSID.SSID.length; @@ -13620,6 +13621,39 @@ void wlan_hdd_send_version_pkg(v_U32_t fw_version, wlan_hdd_send_svc_nlink_msg(WLAN_SVC_WLAN_VERSION_IND, &data, sizeof(struct wlan_version_data)); } + +void wlan_hdd_send_all_scan_intf_info(hdd_context_t *pHddCtx) +{ + hdd_adapter_t *pDataAdapter = NULL; + hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; + v_BOOL_t scan_intf_found = VOS_FALSE; + VOS_STATUS status; + + if (!pHddCtx) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: NULL pointer for pHddCtx", + __func__); + return; + } + + status = hdd_get_front_adapter(pHddCtx, &pAdapterNode); + while (NULL != pAdapterNode && VOS_STATUS_SUCCESS == status) { + pDataAdapter = pAdapterNode->pAdapter; + if (pDataAdapter) { + if (pDataAdapter->device_mode == WLAN_HDD_INFRA_STATION || + pDataAdapter->device_mode == WLAN_HDD_P2P_CLIENT || + pDataAdapter->device_mode == WLAN_HDD_P2P_DEVICE) { + scan_intf_found = VOS_TRUE; + wlan_hdd_send_status_pkg(pDataAdapter, NULL, 1, 0); + } + } + status = hdd_get_next_adapter(pHddCtx, pAdapterNode, &pNext); + pAdapterNode = pNext; + } + + if (!scan_intf_found) + wlan_hdd_send_status_pkg(pDataAdapter, NULL, 1, 0); +} #endif #ifdef FEATURE_WLAN_AUTO_SHUTDOWN diff --git a/CORE/SVC/external/wlan_nlink_common.h b/CORE/SVC/external/wlan_nlink_common.h index ae7151e1c645..d3d38ecf6df9 100644 --- a/CORE/SVC/external/wlan_nlink_common.h +++ b/CORE/SVC/external/wlan_nlink_common.h @@ -132,6 +132,7 @@ struct wlan_status_data { uint8_t is_on; uint8_t vdev_id; uint8_t is_connected; + int8_t rssi; uint8_t ssid_len; uint8_t country_code[WLAN_SVC_COUNTRY_CODE_LEN]; uint32_t vdev_mode; |
