diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-04-28 16:02:27 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-04-28 16:02:27 +0000 |
commit | 8cf5c880b74223ccef2ce0047634c58bbc636bde (patch) | |
tree | 75048644db30ed9838e6957aa20255a77c4745c7 | |
parent | cb6493ef7c2e21b44ed7e4b865a15f815b8003d6 (diff) | |
parent | 65e80a967d40e1bee4be7a9a88da13c0e80f56f1 (diff) | |
download | wlan-android13-frc-media-release.tar.gz |
Snap for 8512216 from 65e80a967d40e1bee4be7a9a88da13c0e80f56f1 to tm-frc-media-releaset_frc_med_330443030android13-frc-media-release
Change-Id: I122787718abfd94b68b69e3e72ceda1943bb664d
-rw-r--r-- | qcwcn/wifi_hal/wifi_hal.cpp | 70 | ||||
-rw-r--r-- | qcwcn/wifi_hal/wificonfig.cpp | 2 |
2 files changed, 71 insertions, 1 deletions
diff --git a/qcwcn/wifi_hal/wifi_hal.cpp b/qcwcn/wifi_hal/wifi_hal.cpp index f071dfc..372d9e1 100644 --- a/qcwcn/wifi_hal/wifi_hal.cpp +++ b/qcwcn/wifi_hal/wifi_hal.cpp @@ -473,6 +473,75 @@ static wifi_error wifi_init_cld80211_sock_cb(hal_info *info) return WIFI_SUCCESS; } +wifi_error wifi_set_dtim_config(wifi_interface_handle handle, u32 multiplier) +{ + wifi_error ret = WIFI_ERROR_INVALID_ARGS; + WifihalGeneric *cmd = NULL; + struct nlattr *nlData = NULL; + interface_info *ifaceInfo = NULL; + wifi_handle wifiHandle = NULL; + + if (!handle) { + ALOGE("%s: Error, wifi_interface_handle NULL", __FUNCTION__); + goto cleanup; + } + ALOGD("%s: multiplier:%d", __FUNCTION__, multiplier); + wifiHandle = getWifiHandle(handle); + cmd = new WifihalGeneric(wifiHandle, get_requestid(), OUI_QCA, + QCA_NL80211_VENDOR_SUBCMD_SET_WIFI_CONFIGURATION); + if (cmd == NULL) { + ALOGE("%s: Error WifihalGeneric NULL", __FUNCTION__); + ret = WIFI_ERROR_OUT_OF_MEMORY; + goto cleanup; + } + + /* Create the NL message. */ + ret = cmd->create(); + if (ret != WIFI_SUCCESS) { + ALOGE("%s: failed to create NL msg. Error:%d", __FUNCTION__, ret); + goto cleanup; + } + ifaceInfo = getIfaceInfo(handle); + if (!ifaceInfo) { + ALOGE("%s: getIfaceInfo is NULL", __FUNCTION__); + ret = WIFI_ERROR_OUT_OF_MEMORY; + goto cleanup; + } + + /* Set the interface Id of the message. */ + ret = cmd->set_iface_id(ifaceInfo->name); + if (ret != WIFI_SUCCESS) { + ALOGE("%s: failed to set iface id. Error:%d", __FUNCTION__, ret); + goto cleanup; + } + + /* Add the vendor specific attributes for the NL command. */ + nlData = cmd->attr_start(NL80211_ATTR_VENDOR_DATA); + if (!nlData) { + ALOGE("%s: failed attr_start for VENDOR_DATA", __FUNCTION__); + ret = WIFI_ERROR_OUT_OF_MEMORY; + goto cleanup; + } + + ret = cmd->put_u32(QCA_WLAN_VENDOR_ATTR_CONFIG_DYNAMIC_DTIM, multiplier); + if (ret != WIFI_SUCCESS) { + ALOGE("%s: failed to put vendor data. Error:%d", __FUNCTION__, ret); + goto cleanup; + } + cmd->attr_end(nlData); + + /* Send the NL msg. */ + ret = cmd->requestResponse(); + if (ret != WIFI_SUCCESS) { + ALOGE("%s: requestResponse Error:%d", __FUNCTION__, ret); + goto cleanup; + } + +cleanup: + if (cmd) + delete cmd; + return ret; +} /*initialize function pointer table with Qualcomm HAL API*/ wifi_error init_wifi_vendor_hal_func_table(wifi_hal_fn *fn) { @@ -575,6 +644,7 @@ wifi_error init_wifi_vendor_hal_func_table(wifi_hal_fn *fn) { fn->wifi_virtual_interface_delete = wifi_virtual_interface_delete; fn->wifi_set_latency_mode = wifi_set_latency_mode; fn->wifi_set_thermal_mitigation_mode = wifi_set_thermal_mitigation_mode; + fn->wifi_set_dtim_config = wifi_set_dtim_config; return WIFI_SUCCESS; } diff --git a/qcwcn/wifi_hal/wificonfig.cpp b/qcwcn/wifi_hal/wificonfig.cpp index c6ceb9d..7ff323c 100644 --- a/qcwcn/wifi_hal/wificonfig.cpp +++ b/qcwcn/wifi_hal/wificonfig.cpp @@ -534,7 +534,7 @@ wifi_error wifi_set_latency_mode(wifi_interface_handle handle, goto cleanup; } - if (wifiConfigCommand->put_u32( + if (wifiConfigCommand->put_u16( QCA_WLAN_VENDOR_ATTR_CONFIG_LATENCY_LEVEL, latency_mode)) { ALOGE("wifi_set_latency_mode: failed to put latency mode"); |