summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuanyuan Liu <yuanliu@qca.qualcomm.com>2014-07-16 16:16:51 -0700
committerPitani Venkata Rajesh Kumar <c_vpitan@qti.qualcomm.com>2014-08-06 13:37:07 +0530
commit904069e2162e52dfc49fa40e2c3c8d685a57217e (patch)
treeddd00c3ec719ada3f03497b0a35e799341892dde
parent974bf54ed4ae8a4b66514ec51130df2f3708adad (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.h8
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c36
-rw-r--r--CORE/HDD/src/wlan_hdd_early_suspend.c2
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c36
-rw-r--r--CORE/SVC/external/wlan_nlink_common.h1
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;