diff options
author | Mohammad Asaad Akram <asadkrm@codeaurora.org> | 2021-07-05 09:42:56 +0530 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2021-07-06 01:45:53 -0700 |
commit | 1bc3622f56fb2ee03b0d72262cd5ec0a7d16dbf7 (patch) | |
tree | 5cb0fbde114a86f93897fde4e814562734188fee | |
parent | a051a18d5646e9a7b7708c5e4509a35f2b37962f (diff) |
wpa_supplicant_8_lib: Retrigger CSI Start during Roaming
CSI Capture is expected to continue even after roaming. This
commit retriggers CSI START, and resuses earlier CSI parameters.
Change-Id: Id7c6d2b009368a4be8a03ee0db9085a5836c74f3
CRs-Fixed: 2966804
-rw-r--r-- | qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c b/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c index 0f17cc4..bb0ff98 100644 --- a/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c +++ b/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c @@ -40,6 +40,7 @@ #define UNUSED(x) (void)(x) #define NL80211_ATTR_MAX_INTERNAL 256 #define CSI_STATUS_REJECTED -1 +#define CSI_STATUS_SUCCESS 0 #define ENHANCED_CFR_VER 2 #define CSI_GROUP_BITMAP 1 #define CSI_DEFAULT_GROUP_ID 0 @@ -56,6 +57,7 @@ struct csi_global_params { struct i802_bss *bss; enum csi_state current_state; char connected_bssid[MAC_ADDR_LEN]; + int transport_mode; }; static struct csi_global_params g_csi_param = {0}; @@ -671,16 +673,33 @@ int wpa_driver_nl80211_oem_event(struct wpa_driver_nl80211_data *drv, return ret; } +static int wpa_driver_restart_csi(struct i802_bss *bss, int *status); + int wpa_driver_nl80211_driver_event(struct wpa_driver_nl80211_data *drv, u32 vendor_id, u32 subcmd, u8 *data, size_t len) { int ret = -1; + int status = -1; + struct i802_bss *bss; switch(subcmd) { case QCA_NL80211_VENDOR_SUBCMD_CONFIG_TWT: ret = wpa_driver_nl80211_oem_event(drv, vendor_id, subcmd, data, len); break; + case QCA_NL80211_VENDOR_SUBCMD_KEY_MGMT_ROAM_AUTH: + if(g_csi_param.current_state == CSI_STATE_START) { + bss = get_bss_ifindex(drv, drv->ifindex); + if(bss == NULL) { + wpa_printf(MSG_DEBUG, "%s: bss is NULL", + __func__); + break; + } + if(wpa_driver_restart_csi(bss, &status)) + wpa_printf(MSG_DEBUG, "csi_restart failed %d", + status); + } + break; default: break; } @@ -2247,8 +2266,8 @@ static int wpa_driver_handle_csi_cmd(struct i802_bss *bss, char *cmd, if (transport_mode == 1 || transport_mode == -1) transport_mode = 1; - else if (transport_mode == 0) - transport_mode = 0; + g_csi_param.transport_mode = transport_mode; + wpa_driver_start_csi_capture(bss, status, transport_mode); if (*status == 0 && csi_duration > 0) { signal(SIGALRM, stop_csi_callback); @@ -2271,6 +2290,28 @@ static int wpa_driver_handle_csi_cmd(struct i802_bss *bss, char *cmd, return WPA_DRIVER_OEM_STATUS_SUCCESS; } +static int wpa_driver_restart_csi(struct i802_bss *bss, int *status) +{ + wpa_driver_send_get_scan_cmd(bss, status); + if (g_csi_param.connected_bssid[0] == 0xff) { + wpa_printf(MSG_DEBUG, "%s: Not connected", __func__); + *status = CSI_STATUS_REJECTED; + return WPA_DRIVER_OEM_STATUS_FAILURE; + } + /* Stop CSI capture on previous bss */ + if(wpa_driver_stop_csi_capture(g_csi_param.bss, status)) { + wpa_printf(MSG_DEBUG, "%s: csi stop failed", __func__); + } + g_csi_param.bss = bss; + if(wpa_driver_start_csi_capture(g_csi_param.bss, status, + g_csi_param.transport_mode)) { + *status = CSI_STATUS_REJECTED; + return WPA_DRIVER_OEM_STATUS_FAILURE; + } + *status = CSI_STATUS_SUCCESS; + return WPA_DRIVER_OEM_STATUS_SUCCESS; +} + int wpa_driver_nl80211_driver_cmd(void *priv, char *cmd, char *buf, size_t buf_len ) { |