|
@@ -1269,21 +1269,47 @@ static int util_scan_scm_calc_nss_supported_by_ap(
|
|
{
|
|
{
|
|
struct htcap_cmn_ie *htcap;
|
|
struct htcap_cmn_ie *htcap;
|
|
struct wlan_ie_vhtcaps *vhtcaps;
|
|
struct wlan_ie_vhtcaps *vhtcaps;
|
|
- uint8_t rx_mcs_map;
|
|
|
|
|
|
+ struct wlan_ie_hecaps *hecaps;
|
|
|
|
+ uint16_t rx_mcs_map = 0;
|
|
|
|
|
|
htcap = (struct htcap_cmn_ie *)
|
|
htcap = (struct htcap_cmn_ie *)
|
|
util_scan_entry_htcap(scan_params);
|
|
util_scan_entry_htcap(scan_params);
|
|
vhtcaps = (struct wlan_ie_vhtcaps *)
|
|
vhtcaps = (struct wlan_ie_vhtcaps *)
|
|
util_scan_entry_vhtcap(scan_params);
|
|
util_scan_entry_vhtcap(scan_params);
|
|
- if (vhtcaps) {
|
|
|
|
|
|
+ hecaps = (struct wlan_ie_hecaps *)
|
|
|
|
+ util_scan_entry_hecap(scan_params);
|
|
|
|
+
|
|
|
|
+ if (hecaps) {
|
|
|
|
+ /* Using rx mcs map related to 80MHz or lower as in some
|
|
|
|
+ * cases higher mcs may suuport lesser NSS than that
|
|
|
|
+ * of lowe mcs. Thus giving max NSS capability.
|
|
|
|
+ */
|
|
|
|
+ rx_mcs_map =
|
|
|
|
+ qdf_cpu_to_le16(hecaps->mcs_bw_map[0].rx_mcs_map);
|
|
|
|
+ } else if (vhtcaps) {
|
|
rx_mcs_map = vhtcaps->rx_mcs_map;
|
|
rx_mcs_map = vhtcaps->rx_mcs_map;
|
|
- if ((rx_mcs_map & 0xC0) != 0xC0)
|
|
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (hecaps || vhtcaps) {
|
|
|
|
+ if ((rx_mcs_map & 0xC000) != 0xC000)
|
|
|
|
+ return 8;
|
|
|
|
+
|
|
|
|
+ if ((rx_mcs_map & 0x3000) != 0x3000)
|
|
|
|
+ return 7;
|
|
|
|
+
|
|
|
|
+ if ((rx_mcs_map & 0x0C00) != 0x0C00)
|
|
|
|
+ return 6;
|
|
|
|
+
|
|
|
|
+ if ((rx_mcs_map & 0x0300) != 0x0300)
|
|
|
|
+ return 5;
|
|
|
|
+
|
|
|
|
+ if ((rx_mcs_map & 0x00C0) != 0x00C0)
|
|
return 4;
|
|
return 4;
|
|
|
|
|
|
- if ((rx_mcs_map & 0x30) != 0x30)
|
|
|
|
|
|
+ if ((rx_mcs_map & 0x0030) != 0x0030)
|
|
return 3;
|
|
return 3;
|
|
|
|
|
|
- if ((rx_mcs_map & 0x0C) != 0x0C)
|
|
|
|
|
|
+ if ((rx_mcs_map & 0x000C) != 0x000C)
|
|
return 2;
|
|
return 2;
|
|
} else if (htcap) {
|
|
} else if (htcap) {
|
|
if (htcap->mcsset[3])
|
|
if (htcap->mcsset[3])
|