diff options
| author | gaurank kathpalia <gkathpal@codeaurora.org> | 2019-12-05 14:37:11 +0530 |
|---|---|---|
| committer | nshrivas <nshrivas@codeaurora.org> | 2019-12-12 04:26:24 -0800 |
| commit | 35e0ae41c368c9f8ec341cfee7ab28a381ff3da6 (patch) | |
| tree | c18da8e5b9cd123b66cc0d368140f806311cb388 | |
| parent | b4b993ecd53146dac34bd297e1e84c63caf1a46d (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.h | 24 | ||||
| -rw-r--r-- | wmi/src/wmi_unified_tlv.c | 3 |
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); |
