summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgaurank kathpalia <gkathpal@codeaurora.org>2019-12-05 14:37:11 +0530
committernshrivas <nshrivas@codeaurora.org>2019-12-12 04:26:24 -0800
commit35e0ae41c368c9f8ec341cfee7ab28a381ff3da6 (patch)
treec18da8e5b9cd123b66cc0d368140f806311cb388
parentb4b993ecd53146dac34bd297e1e84c63caf1a46d (diff)
qcacmn: Set max BW for each valid channel and send to FW
Configuration for Issue:- DUT configuration:- 1. Configure DUT's country as US where channel 165 does not support channel bandwidth of 40 mhz. AP Configuration:- 1 Configure the AP in a country where channel 165 supports channel bandwidth 40MHZ. Scenario of the issue:- 1.Connect to a diff AP on some channel x with same SSID, and then roam to this AP. Observation:- The DUT would connect in 40 mhz to this AP instead of 20Mhz, which violates the DUT's country reg rules. Expectation:- The DUT should re-connect only in 20Mhz on channel 165, or only in max BW supported by reg in that country. Issue:- The DUT does not consider the max bandwidth allowed for the channel in the country configured, and allow the re-association only in the respective bandwidth. Fix:- Send the max BW supported by the channels in the current reg domain to the FW so that it considers the max BW of the channel and AP capability and then roam in the respective BW only. Change-Id: I977090c58e378e83cb5a3ee84a72afd018e8c428 CRs-Fixed: 2508187
-rw-r--r--wmi/inc/wmi_unified_param.h24
-rw-r--r--wmi/src/wmi_unified_tlv.c3
2 files changed, 27 insertions, 0 deletions
diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h
index 7c2759210c8b..6963aba596f7 100644
--- a/wmi/inc/wmi_unified_param.h
+++ b/wmi/inc/wmi_unified_param.h
@@ -285,6 +285,28 @@ typedef enum {
WMI_HOST_MODE_MAX = 16
} WMI_HOST_WLAN_PHY_MODE;
+/**
+ * enum wmi_host_channel_width: Channel operating width. Maps to
+ * wmi_channel_width used in firmware header file(s).
+ * @WMI_HOST_CHAN_WIDTH_20: 20 MHz channel operating width
+ * @WMI_HOST_CHAN_WIDTH_40: 40 MHz channel operating width
+ * @WMI_HOST_CHAN_WIDTH_80: 80 MHz channel operating width
+ * @WMI_HOST_CHAN_WIDTH_160: 160 MHz channel operating width
+ * @WMI_HOST_CHAN_WIDTH_80P80: 80+80 MHz channel operating width
+ * @WMI_HOST_CHAN_WIDTH_5: 5 MHz channel operating width
+ * @WMI_HOST_CHAN_WIDTH_10: 10 MHz channel operating width
+ * @WMI_HOST_CHAN_WIDTH_165: 165 MHz channel operating width
+ */
+typedef enum {
+ WMI_HOST_CHAN_WIDTH_20 = 0,
+ WMI_HOST_CHAN_WIDTH_40 = 1,
+ WMI_HOST_CHAN_WIDTH_80 = 2,
+ WMI_HOST_CHAN_WIDTH_160 = 3,
+ WMI_HOST_CHAN_WIDTH_80P80 = 4,
+ WMI_HOST_CHAN_WIDTH_5 = 5,
+ WMI_HOST_CHAN_WIDTH_10 = 6,
+ WMI_HOST_CHAN_WIDTH_165 = 7,
+} wmi_host_channel_width;
/**
* enum wmi_dwelltime_adaptive_mode: dwelltime_mode
@@ -1126,6 +1148,7 @@ struct scan_stop_params {
/**
* struct scan_chan_list_params - scan channel list cmd parameter
* @num_scan_chans: no of scan channels
+ * @max_bw_support_present: max BW support present
* @chan_info: pointer to wmi channel info
*/
#ifdef CONFIG_MCL
@@ -1149,6 +1172,7 @@ typedef struct {
struct scan_chan_list_params {
uint8_t num_scan_chans;
+ bool max_bw_support_present;
wmi_channel_param *chan_info;
};
#else
diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c
index 687a2b23e57b..6ce7e3f2f2e9 100644
--- a/wmi/src/wmi_unified_tlv.c
+++ b/wmi/src/wmi_unified_tlv.c
@@ -1778,6 +1778,9 @@ QDF_STATUS send_scan_chan_list_cmd_tlv(wmi_unified_t wmi_handle,
WMI_LOGD("no of channels = %d, len = %d", chan_list->num_scan_chans, len);
cmd->num_scan_chans = chan_list->num_scan_chans;
+ if (chan_list->max_bw_support_present)
+ cmd->flags |= CHANNEL_MAX_BANDWIDTH_VALID;
+
WMITLV_SET_HDR((buf_ptr + sizeof(wmi_scan_chan_list_cmd_fixed_param)),
WMITLV_TAG_ARRAY_STRUC,
sizeof(wmi_channel) * chan_list->num_scan_chans);