summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-04-28 16:02:27 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-04-28 16:02:27 +0000
commit8cf5c880b74223ccef2ce0047634c58bbc636bde (patch)
tree75048644db30ed9838e6957aa20255a77c4745c7
parentcb6493ef7c2e21b44ed7e4b865a15f815b8003d6 (diff)
parent65e80a967d40e1bee4be7a9a88da13c0e80f56f1 (diff)
downloadwlan-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.cpp70
-rw-r--r--qcwcn/wifi_hal/wificonfig.cpp2
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");