summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomson Kang <thomson.kang@broadcom.com>2021-01-11 05:23:30 -0800
committerAhmed ElArabawy <arabawy@google.com>2021-01-28 00:24:14 +0000
commit14295c01689f4e9942e6a14d0bddc4655cce50c6 (patch)
tree4533ca6307b87082a2f0cb5c37ae9573c44bea64
parentc0c1633870dd7fa70c66844696e2fb40c4bce194 (diff)
downloadwlan-14295c01689f4e9942e6a14d0bddc4655cce50c6.tar.gz
hal: Adding wifi_set_dtim_config (DTIM config with IPv6 and IPv4 networks when the screen is off)
issue) 1. This issue happened due to bcn_li_dtim set to 9 after screen off. 2. Disconnected the network because STA missed RA by the large bcn_li_dtim in IPv6 only networks. Conclusion of this issue) Added the DTIM multiplier config code for setting the different dtim config between IPv4 and IPv6 network. Bug: 170678227 Test: Verified with halutil command Change-Id: I8625d2448e64ceaedeb42aa2aa18c98b724dd3e9
-rwxr-xr-xbcmdhd/wifi_hal/common.h2
-rwxr-xr-xbcmdhd/wifi_hal/wifi_hal.cpp41
2 files changed, 43 insertions, 0 deletions
diff --git a/bcmdhd/wifi_hal/common.h b/bcmdhd/wifi_hal/common.h
index c7f86a2..e83f6be 100755
--- a/bcmdhd/wifi_hal/common.h
+++ b/bcmdhd/wifi_hal/common.h
@@ -175,6 +175,7 @@ typedef enum {
WIFI_SUBCMD_SET_LATENCY_MODE, /* 0x101b */
WIFI_SUBCMD_SET_MULTISTA_PRIMARY_CONNECTION, /* 0x101c */
WIFI_SUBCMD_SET_MULTISTA_USE_CASE, /* 0x101d */
+ WIFI_SUBCMD_SET_DTIM_CONFIG, /* 0x101e */
GSCAN_SUBCMD_MAX,
@@ -442,6 +443,7 @@ wifi_error wifi_virtual_interface_delete(wifi_handle handle, const char* ifname)
wifi_error wifi_set_coex_unsafe_channels(wifi_handle handle, u32 num_channels,
wifi_coex_unsafe_channel channels[], u32 restrictions);
wifi_error wifi_set_voip_mode(wifi_interface_handle handle, wifi_voip_mode mode);
+wifi_error wifi_set_dtim_config(wifi_interface_handle handle, u32 multiplier);
void set_hautil_mode(bool halutil_mode);
bool get_halutil_mode();
diff --git a/bcmdhd/wifi_hal/wifi_hal.cpp b/bcmdhd/wifi_hal/wifi_hal.cpp
index 54ed37e..5cf0fcc 100755
--- a/bcmdhd/wifi_hal/wifi_hal.cpp
+++ b/bcmdhd/wifi_hal/wifi_hal.cpp
@@ -108,6 +108,7 @@ typedef enum wifi_attr {
ANDR_WIFI_ATTRIBUTE_THERMAL_MITIGATION = 11,
ANDR_WIFI_ATTRIBUTE_THERMAL_COMPLETION_WINDOW = 12,
ANDR_WIFI_ATTRIBUTE_VOIP_MODE = 13,
+ ANDR_WIFI_ATTRIBUTE_DTIM_MULTIPLIER = 14,
// Add more attribute here
ANDR_WIFI_ATTRIBUTE_MAX
} wifi_attr_t;
@@ -313,6 +314,7 @@ wifi_error init_wifi_vendor_hal_func_table(wifi_hal_fn *fn)
fn->wifi_multi_sta_set_primary_connection = wifi_multi_sta_set_primary_connection;
fn->wifi_multi_sta_set_use_case = wifi_multi_sta_set_use_case;
fn->wifi_set_voip_mode = wifi_set_voip_mode;
+ fn->wifi_set_dtim_config = wifi_set_dtim_config;
return WIFI_SUCCESS;
}
@@ -2667,3 +2669,42 @@ wifi_error wifi_set_voip_mode(wifi_interface_handle handle, wifi_voip_mode mode)
SetVoipModeCommand command(handle, mode);
return (wifi_error) command.requestResponse();
}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////
+class SetDtimConfigCommand : public WifiCommand {
+
+private:
+ uint32_t multiplier;
+public:
+ SetDtimConfigCommand(wifi_interface_handle handle, u32 dtim_multiplier)
+ : WifiCommand("SetDtimConfigCommand", handle, 0) {
+ multiplier = dtim_multiplier;
+ }
+ virtual int create() {
+ int ret;
+
+ ret = mMsg.create(GOOGLE_OUI, WIFI_SUBCMD_SET_DTIM_CONFIG);
+ if (ret < 0) {
+ ALOGE("Can't create message to send to driver - %d", ret);
+ return ret;
+ }
+
+ nlattr *data = mMsg.attr_start(NL80211_ATTR_VENDOR_DATA);
+ ret = mMsg.put_u32(ANDR_WIFI_ATTRIBUTE_DTIM_MULTIPLIER, multiplier);
+ if (ret < 0) {
+ ALOGE("Failed to set dtim mutiplier %d\n", multiplier);
+ return ret;
+ }
+
+ ALOGI("Successfully configured dtim multiplier %d\n", multiplier);
+ mMsg.attr_end(data);
+ return WIFI_SUCCESS;
+ }
+};
+
+wifi_error wifi_set_dtim_config(wifi_interface_handle handle, u32 multiplier)
+{
+ ALOGD("Setting DTIM config , halHandle = %p Multiplier = %d\n", handle, multiplier);
+ SetDtimConfigCommand command(handle, multiplier);
+ return (wifi_error) command.requestResponse();
+}