summaryrefslogtreecommitdiff
path: root/qcwcn/wifi_hal/wifi_hal.cpp
diff options
context:
space:
mode:
authorSubhani Shaik <subhanis@codeaurora.org>2016-10-16 17:18:32 +0530
committerRandy Pan <zpan@google.com>2016-12-12 14:45:51 -0800
commit127a19b9711189fdee49643f035787c6ba59a8c3 (patch)
tree30755984739c5c14582e77aaadef014e066f129e /qcwcn/wifi_hal/wifi_hal.cpp
parent96cba44a19d233e56e5f3452ac841edb3eb3d017 (diff)
downloadwlan-127a19b9711189fdee49643f035787c6ba59a8c3.tar.gz
WiFiHAL: Get wifi capabilities during initialization
Get wifi driver capabilities during wifiHAL initialization and save it locally. When framework queries for capabilities, these are populated from wifiHAL itself instead of sending command to driver Change-Id: If0f7a0e5dd49135f1adc58f3047f385ef352eff9 Merged-In: If0f7a0e5dd49135f1adc58f3047f385ef352eff9
Diffstat (limited to 'qcwcn/wifi_hal/wifi_hal.cpp')
-rw-r--r--qcwcn/wifi_hal/wifi_hal.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/qcwcn/wifi_hal/wifi_hal.cpp b/qcwcn/wifi_hal/wifi_hal.cpp
index 400078d..3a9f7c5 100644
--- a/qcwcn/wifi_hal/wifi_hal.cpp
+++ b/qcwcn/wifi_hal/wifi_hal.cpp
@@ -183,6 +183,40 @@ cleanup:
return (wifi_error)ret;
}
+static wifi_error wifi_get_capabilities(wifi_interface_handle handle)
+{
+ wifi_error ret;
+ int requestId;
+ WifihalGeneric *wifihalGeneric;
+ wifi_handle wifiHandle = getWifiHandle(handle);
+ hal_info *info = getHalInfo(wifiHandle);
+
+ if (!(info->supported_feature_set & WIFI_FEATURE_GSCAN)) {
+ ALOGE("%s: GSCAN is not supported by driver", __FUNCTION__);
+ return WIFI_ERROR_NOT_SUPPORTED;
+ }
+
+ /* No request id from caller, so generate one and pass it on to the driver.
+ * Generate it randomly.
+ */
+ requestId = get_requestid();
+
+ wifihalGeneric = new WifihalGeneric(
+ wifiHandle,
+ requestId,
+ OUI_QCA,
+ QCA_NL80211_VENDOR_SUBCMD_GSCAN_GET_CAPABILITIES);
+ if (!wifihalGeneric) {
+ ALOGE("%s: Failed to create object of WifihalGeneric class", __FUNCTION__);
+ return WIFI_ERROR_UNKNOWN;
+ }
+
+ ret = wifihalGeneric->wifiGetCapabilities(handle);
+
+ delete wifihalGeneric;
+ return ret;
+}
+
static wifi_error get_firmware_bus_max_size_supported(
wifi_interface_handle iface)
{
@@ -511,6 +545,10 @@ wifi_error wifi_initialize(wifi_handle *handle)
goto unload;
}
+ ret = wifi_get_capabilities(iface_handle);
+ if (ret != WIFI_SUCCESS)
+ ALOGE("Failed to get wifi Capabilities, error: %d", ret);
+
info->pkt_stats = (struct pkt_stats_s *)malloc(sizeof(struct pkt_stats_s));
if (!info->pkt_stats) {
ALOGE("%s: malloc Failed for size: %zu",