diff options
author | sanfran <sanfran.shen@broadcom.corp-partner.google.com> | 2020-04-29 19:20:39 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-04-29 19:20:39 +0000 |
commit | eb253795803ad45d9d4f8f3f5858f71066c786fb (patch) | |
tree | ec2eb5d2567ce244f7bb11db33cf3a311c4147b0 | |
parent | a5141cf4f364f0e3712031a930071082460d855a (diff) | |
parent | 717a5b0329e0185ed7bd12403cbe76cafaa45fdc (diff) | |
download | wlan-eb253795803ad45d9d4f8f3f5858f71066c786fb.tar.gz |
Add Support Set Roaming State am: 98a8aa1cb4 am: 717a5b0329
Change-Id: I3aef21f107489481d6b9de9288e9c6e6b03747eb
-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; |