summaryrefslogtreecommitdiff
path: root/qcwcn/wifi_hal/wifi_hal.cpp
diff options
context:
space:
mode:
authorPeng Xu <pxu@codeaurora.org>2018-03-14 14:11:37 -0700
committerAhmed ElArabawy <arabawy@google.com>2019-02-06 10:03:30 -0800
commit1abf1675d4bb7f595d48de1f56aaee435c604279 (patch)
tree3b0ee65e0896aaa0e01649ea1a2428f8aa6a386d /qcwcn/wifi_hal/wifi_hal.cpp
parent4333c0e76d0c8427e308d866ef0349753d2c984d (diff)
downloadwlan-1abf1675d4bb7f595d48de1f56aaee435c604279.tar.gz
WiFi-HAL: Add user hint sub-type to set country code commmand
Add new user hint sub-type NL80211_USER_REG_HINT_CELL_BASE to wifi_set_country_code command if the feature is supported by host driver. Bug: 121154896 Test: Regression test Change-Id: Ie1c0da1cc75aba02809ffd0f5d76bdb4f2ec680c CRs-fixed: 2205885
Diffstat (limited to 'qcwcn/wifi_hal/wifi_hal.cpp')
-rw-r--r--qcwcn/wifi_hal/wifi_hal.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/qcwcn/wifi_hal/wifi_hal.cpp b/qcwcn/wifi_hal/wifi_hal.cpp
index 315c814..8e8367c 100644
--- a/qcwcn/wifi_hal/wifi_hal.cpp
+++ b/qcwcn/wifi_hal/wifi_hal.cpp
@@ -195,6 +195,38 @@ cleanup:
return ret;
}
+static wifi_error acquire_driver_supported_features(wifi_interface_handle iface,
+ features_info *driver_features)
+{
+ wifi_error ret;
+ interface_info *iinfo = getIfaceInfo(iface);
+ wifi_handle handle = getWifiHandle(iface);
+
+ WifihalGeneric driverFeatures(handle, 0,
+ OUI_QCA,
+ QCA_NL80211_VENDOR_SUBCMD_GET_FEATURES);
+
+ /* create the message */
+ ret = driverFeatures.create();
+ if (ret != WIFI_SUCCESS)
+ goto cleanup;
+
+ ret = driverFeatures.set_iface_id(iinfo->name);
+ if (ret != WIFI_SUCCESS)
+ goto cleanup;
+
+ ret = driverFeatures.requestResponse();
+ if (ret != WIFI_SUCCESS) {
+ ALOGE("%s: requestResponse Error:%d",__func__, ret);
+ goto cleanup;
+ }
+
+ driverFeatures.getDriverFeatures(driver_features);
+
+cleanup:
+ return mapKernelErrortoWifiHalError(ret);
+}
+
static wifi_error wifi_get_capabilities(wifi_interface_handle handle)
{
wifi_error ret;
@@ -626,6 +658,13 @@ wifi_error wifi_initialize(wifi_handle *handle)
ret = WIFI_SUCCESS;
}
+ ret = acquire_driver_supported_features(iface_handle,
+ &info->driver_supported_features);
+ if (ret != WIFI_SUCCESS) {
+ ALOGI("Failed to get vendor feature set : %d", ret);
+ ret = WIFI_SUCCESS;
+ }
+
ret = wifi_get_logger_supported_feature_set(iface_handle,
&info->supported_logger_feature_set);
if (ret != WIFI_SUCCESS)
@@ -715,6 +754,10 @@ unload:
cleanupGscanHandlers(info);
cleanupRSSIMonitorHandler(info);
free(info->event_cb);
+ if (info->driver_supported_features.flags) {
+ free(info->driver_supported_features.flags);
+ info->driver_supported_features.flags = NULL;
+ }
free(info);
}
}
@@ -812,6 +855,11 @@ static void internal_cleaned_up_handler(wifi_handle handle)
info->pkt_fate_stats = NULL;
}
+ if (info->driver_supported_features.flags) {
+ free(info->driver_supported_features.flags);
+ info->driver_supported_features.flags = NULL;
+ }
+
(*cleaned_up_handler)(handle);
pthread_mutex_destroy(&info->cb_lock);
pthread_mutex_destroy(&info->pkt_fate_stats_lock);