summaryrefslogtreecommitdiff
path: root/qcwcn
diff options
context:
space:
mode:
authorSubhani Shaik <subhanis@codeaurora.org>2016-10-27 16:45:21 +0530
committerRandy Pan <zpan@google.com>2016-12-12 14:46:40 -0800
commit3f2e1858bc47159058040bbdf3b5b2dfff1acf99 (patch)
treeea1343b55d3af1282a0fbfa1c32aa7e38ec8b628 /qcwcn
parent3561d2cc0bc4beeca22723dd7488f8af0c1211f4 (diff)
downloadwlan-3f2e1858bc47159058040bbdf3b5b2dfff1acf99.tar.gz
WiFiHAL: Get Roaming capabilities
Get maximum number of blacklist bssids and maximum number of whitelist ssids supported by driver Change-Id: I0abfdd6f9c1c8d77ce5d16bd78a51483de72c947 Merged-In: I0abfdd6f9c1c8d77ce5d16bd78a51483de72c947
Diffstat (limited to 'qcwcn')
-rw-r--r--qcwcn/wifi_hal/common.h1
-rw-r--r--qcwcn/wifi_hal/gscan.cpp21
-rw-r--r--qcwcn/wifi_hal/ifaceeventhandler.cpp17
-rw-r--r--qcwcn/wifi_hal/vendor_definitions.h3
-rw-r--r--qcwcn/wifi_hal/wifi_hal.cpp1
5 files changed, 43 insertions, 0 deletions
diff --git a/qcwcn/wifi_hal/common.h b/qcwcn/wifi_hal/common.h
index 950b9af..579eb5b 100644
--- a/qcwcn/wifi_hal/common.h
+++ b/qcwcn/wifi_hal/common.h
@@ -86,6 +86,7 @@ typedef struct {
typedef struct {
wifi_gscan_capabilities gscan_capa;
+ wifi_roaming_capabilities roaming_capa;
} wifi_capa;
struct gscan_event_handlers_s;
diff --git a/qcwcn/wifi_hal/gscan.cpp b/qcwcn/wifi_hal/gscan.cpp
index c13598c..f8d32a4 100644
--- a/qcwcn/wifi_hal/gscan.cpp
+++ b/qcwcn/wifi_hal/gscan.cpp
@@ -2498,3 +2498,24 @@ cleanup:
return (wifi_error)ret;
}
+
+wifi_error wifi_get_roaming_capabilities(wifi_interface_handle iface,
+ wifi_roaming_capabilities *caps)
+{
+ wifi_handle wifiHandle = getWifiHandle(iface);
+ hal_info *info = getHalInfo(wifiHandle);
+
+ if (!caps) {
+ ALOGE("%s: Invalid Buffer provided. Exit", __FUNCTION__);
+ return WIFI_ERROR_INVALID_ARGS;
+ }
+
+ if (!info) {
+ ALOGE("%s: hal_info is NULL", __FUNCTION__);
+ return WIFI_ERROR_INVALID_ARGS;
+ }
+
+ memcpy(caps, &info->capa.roaming_capa, sizeof(wifi_roaming_capabilities));
+
+ return WIFI_SUCCESS;
+}
diff --git a/qcwcn/wifi_hal/ifaceeventhandler.cpp b/qcwcn/wifi_hal/ifaceeventhandler.cpp
index ffb4174..fd959ac 100644
--- a/qcwcn/wifi_hal/ifaceeventhandler.cpp
+++ b/qcwcn/wifi_hal/ifaceeventhandler.cpp
@@ -367,6 +367,12 @@ int WifihalGeneric::handleResponse(WifiEvent &reply)
mCapa->gscan_capa.max_number_epno_networks,
mCapa->gscan_capa.max_number_epno_networks_by_ssid,
mCapa->gscan_capa.max_number_of_white_listed_ssid);
+
+ ALOGV("%s: Roaming Capabilities:\n"
+ " max_blacklist_size: %d\n"
+ " max_whitelist_size: %d\n",
+ __FUNCTION__, mCapa->roaming_capa.max_blacklist_size,
+ mCapa->roaming_capa.max_whitelist_size);
}
}
break;
@@ -476,9 +482,20 @@ wifi_error WifihalGeneric::wifiParseCapabilities(struct nlattr **tbVendor)
ALOGE("%s: QCA_WLAN_VENDOR_ATTR_GSCAN_RESULTS_CAPABILITIES_MAX_NUM_WHITELISTED_SSID not "
"found. Set to 0.", __FUNCTION__);
mCapa->gscan_capa.max_number_of_white_listed_ssid = 0;
+ mCapa->roaming_capa.max_whitelist_size = 0;
} else {
mCapa->gscan_capa.max_number_of_white_listed_ssid = nla_get_u32(tbVendor[
QCA_WLAN_VENDOR_ATTR_GSCAN_RESULTS_CAPABILITIES_MAX_NUM_WHITELISTED_SSID]);
+ mCapa->roaming_capa.max_whitelist_size = mCapa->gscan_capa.max_number_of_white_listed_ssid;
+ }
+
+ if (!tbVendor[QCA_WLAN_VENDOR_ATTR_CAPABILITIES_MAX_NUM_BLACKLISTED_BSSID]) {
+ ALOGE("%s: QCA_WLAN_VENDOR_ATTR_GSCAN_RESULTS_CAPABILITIES_MAX"
+ "_NUM_BLACKLIST_BSSID not found. Set to 0.", __FUNCTION__);
+ mCapa->roaming_capa.max_blacklist_size = 0;
+ } else {
+ mCapa->roaming_capa.max_blacklist_size = nla_get_u32(tbVendor[
+ QCA_WLAN_VENDOR_ATTR_CAPABILITIES_MAX_NUM_BLACKLISTED_BSSID]);
}
return WIFI_SUCCESS;
}
diff --git a/qcwcn/wifi_hal/vendor_definitions.h b/qcwcn/wifi_hal/vendor_definitions.h
index b6f8a8e..54c4ad5 100644
--- a/qcwcn/wifi_hal/vendor_definitions.h
+++ b/qcwcn/wifi_hal/vendor_definitions.h
@@ -452,6 +452,9 @@ enum qca_wlan_vendor_attr_gscan_results
QCA_WLAN_VENDOR_ATTR_GSCAN_RESULTS_CAPABILITIES_MAX_NUM_WHITELISTED_SSID,
QCA_WLAN_VENDOR_ATTR_GSCAN_RESULTS_BUCKETS_SCANNED,
+ /* Unsigned 32bit value; a GSCAN Capabilities attribute. */
+ QCA_WLAN_VENDOR_ATTR_CAPABILITIES_MAX_NUM_BLACKLISTED_BSSID,
+
/* keep last */
QCA_WLAN_VENDOR_ATTR_GSCAN_RESULTS_AFTER_LAST,
QCA_WLAN_VENDOR_ATTR_GSCAN_RESULTS_MAX =
diff --git a/qcwcn/wifi_hal/wifi_hal.cpp b/qcwcn/wifi_hal/wifi_hal.cpp
index b298454..7ebd3bd 100644
--- a/qcwcn/wifi_hal/wifi_hal.cpp
+++ b/qcwcn/wifi_hal/wifi_hal.cpp
@@ -383,6 +383,7 @@ wifi_error init_wifi_vendor_hal_func_table(wifi_hal_fn *fn) {
fn->wifi_start_pkt_fate_monitoring = wifi_start_pkt_fate_monitoring;
fn->wifi_get_tx_pkt_fates = wifi_get_tx_pkt_fates;
fn->wifi_get_rx_pkt_fates = wifi_get_rx_pkt_fates;
+ fn->wifi_get_roaming_capabilities = wifi_get_roaming_capabilities;
return WIFI_SUCCESS;
}