diff options
author | Peng Xu <pxu@codeaurora.org> | 2018-03-14 14:11:37 -0700 |
---|---|---|
committer | Ahmed ElArabawy <arabawy@google.com> | 2019-02-06 10:03:30 -0800 |
commit | 1abf1675d4bb7f595d48de1f56aaee435c604279 (patch) | |
tree | 3b0ee65e0896aaa0e01649ea1a2428f8aa6a386d /qcwcn/wifi_hal/wifi_hal.cpp | |
parent | 4333c0e76d0c8427e308d866ef0349753d2c984d (diff) | |
download | wlan-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.cpp | 48 |
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); |