diff options
author | sanfran <sanfran.shen@broadcom.corp-partner.google.com> | 2020-04-12 02:41:28 +0800 |
---|---|---|
committer | Ahmed ElArabawy <arabawy@google.com> | 2020-04-29 17:57:46 +0000 |
commit | 98a8aa1cb4457414bf76bf590acf1395052a20eb (patch) | |
tree | ec2eb5d2567ce244f7bb11db33cf3a311c4147b0 | |
parent | 26c49a560fe93db62f9afaa370b7796fc33be60b (diff) | |
download | wlan-98a8aa1cb4457414bf76bf590acf1395052a20eb.tar.gz |
Add Support Set Roaming State
Add function wifi_enable_firmware_roaming to enable/disable roaming
Bug: 152577756
Test: halutil -set_fw_roaming_state <value>
Signed-off-by: sanfran <sanfran.shen@broadcom.corp-partner.google.com>
Change-Id: I116f4ca350bef8be03c5fb53d0fe3bfc7f4bac20
Merged-In: I116f4ca350bef8be03c5fb53d0fe3bfc7f4bac20
(cherry picked from commit 8e5479c1a33783171f7e63bf5b6aa6798837179e)
-rwxr-xr-x | bcmdhd/wifi_hal/common.h | 1 | ||||
-rwxr-xr-x | bcmdhd/wifi_hal/gscan.cpp | 63 | ||||
-rwxr-xr-x | bcmdhd/wifi_hal/wifi_hal.cpp | 1 |
3 files changed, 65 insertions, 0 deletions
diff --git a/bcmdhd/wifi_hal/common.h b/bcmdhd/wifi_hal/common.h index e728b54..4deab8a 100755 --- a/bcmdhd/wifi_hal/common.h +++ b/bcmdhd/wifi_hal/common.h @@ -131,6 +131,7 @@ typedef enum { WIFI_SUBCMD_SET_RSSI_MONITOR, /* 0x1016 */ WIFI_SUBCMD_CONFIG_ND_OFFLOAD, /* 0x1017 */ /* Add more sub commands here */ + WIFI_SUBCMD_FW_ROAM_POLICY = 0x1019, /* 0x1019 */ WIFI_SUBCMD_ROAM_CAPABILITY = 0x101a, /* 0x101a*/ GSCAN_SUBCMD_MAX, diff --git a/bcmdhd/wifi_hal/gscan.cpp b/bcmdhd/wifi_hal/gscan.cpp index 2a811c3..f5722f2 100755 --- a/bcmdhd/wifi_hal/gscan.cpp +++ b/bcmdhd/wifi_hal/gscan.cpp @@ -159,6 +159,8 @@ typedef enum { GSCAN_ATTRIBUTE_EPNO_SECURE_BONUS, GSCAN_ATTRIBUTE_EPNO_5G_BONUS, + /* Roaming features */ + GSCAN_ATTRIBUTE_ROAM_STATE_SET = 140, GSCAN_ATTRIBUTE_MAX } GSCAN_ATTRIBUTE; @@ -1800,6 +1802,67 @@ wifi_error wifi_configure_roaming(wifi_interface_handle iface, return ret; } + +class FirmwareRoamingStateCommand : public WifiCommand +{ + private: + fw_roaming_state_t roam_state; + public: + FirmwareRoamingStateCommand(wifi_interface_handle handle, + fw_roaming_state_t state) + : WifiCommand("FirmwareRoamingStateCommand", handle, -1), roam_state(state) + { } + int createRequest(WifiRequest& request) { + int result = request.create(GOOGLE_OUI, WIFI_SUBCMD_FW_ROAM_POLICY); + if (result < 0) { + return result; + } + + nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); + result = request.put_u32(GSCAN_ATTRIBUTE_ROAM_STATE_SET, roam_state); + if (result < 0) { + return result; + } + request.attr_end(data); + return result; + } + + int start() { + ALOGV("Executing firmware roam state set, state = %d", roam_state); + WifiRequest request(familyId(), ifaceId()); + int result = createRequest(request); + if (result < 0) { + return result; + } + + result = requestResponse(request); + if (result < 0) { + ALOGE("Failed to execute firmware roam state set, result = %d", result); + return result; + } + + ALOGI("Successfully set firmware roam state - %d", roam_state); + return result; + } + + virtual int handleResponse(WifiEvent& reply) { + /* Nothing to do on response! */ + return NL_SKIP; + } +}; + +wifi_error wifi_enable_firmware_roaming(wifi_interface_handle iface, + fw_roaming_state_t state) +{ + /* Set firmware roaming state */ + FirmwareRoamingStateCommand *cmd = new FirmwareRoamingStateCommand(iface, state); + NULL_CHECK_RETURN(cmd, "memory allocation failure", WIFI_ERROR_OUT_OF_MEMORY); + wifi_error result = (wifi_error)cmd->start(); + //release the reference of command as well + cmd->releaseRef(); + return result; +} + //////////////////////////////////////////////////////////////////////////////// class AnqpoConfigureCommand : public WifiCommand diff --git a/bcmdhd/wifi_hal/wifi_hal.cpp b/bcmdhd/wifi_hal/wifi_hal.cpp index 4012af9..6ecd32a 100755 --- a/bcmdhd/wifi_hal/wifi_hal.cpp +++ b/bcmdhd/wifi_hal/wifi_hal.cpp @@ -212,6 +212,7 @@ wifi_error init_wifi_vendor_hal_func_table(wifi_hal_fn *fn) fn->wifi_get_rx_pkt_fates = wifi_get_rx_pkt_fates; fn->wifi_get_packet_filter_capabilities = wifi_get_packet_filter_capabilities; fn->wifi_set_packet_filter = wifi_set_packet_filter; + fn->wifi_enable_firmware_roaming = wifi_enable_firmware_roaming; fn->wifi_get_roaming_capabilities = wifi_get_roaming_capabilities; fn->wifi_configure_roaming = wifi_configure_roaming; return WIFI_SUCCESS; |