From f1d97b4ff4bdadff2c28ba9a58322d4b0d865c1c Mon Sep 17 00:00:00 2001 From: Aleti Nageshwar Reddy Date: Thu, 27 Jan 2022 11:18:16 +0530 Subject: WifiHal: Add support to send modulated dtim configuration Implement wifi_set_dtim_config API to send DTIM configuration to driver/firmware. Bug: 215653020 Test: DTIM configuration supported Change-Id: I553447181c69e90d0f69134792ac9fc7c7ad7d8e CRs-Fixed: 3118522 --- qcwcn/wifi_hal/wifi_hal.cpp | 70 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) 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; } -- cgit v1.2.3 From 65e80a967d40e1bee4be7a9a88da13c0e80f56f1 Mon Sep 17 00:00:00 2001 From: Hsiu-Chang Chen Date: Fri, 18 Mar 2022 14:02:52 +0800 Subject: WifiHal: Consider LATENCY_LEVEL attributes as u16. QCA_WLAN_VENDOR_ATTR_CONFIG_LATENCY_LEVEL is supposed to carry u16 value in the request. Modify their type accordingly. Bug: 222044962 Test: VTS tests Change-Id: I7f5da5be31845ce214ef283279ec74d41474433b --- qcwcn/wifi_hal/wificonfig.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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"); -- cgit v1.2.3