From 7232cb187ee69fa849ba0c4044a2bc78fc121b26 Mon Sep 17 00:00:00 2001 From: Rhythm Patwa Date: Mon, 23 Sep 2019 22:09:00 -0700 Subject: [PATCH] qcacmn: Add support to parse 6GHz specific IEs Add support to scan for the 6GHz band capabilities IE and parse the IE. Added peer assoc param for updating the minimum data rate advertised by the peer in 6GHz Opration information. Change-Id: Iebb4379d321832f3ed2bcd3174a54843fa2d497c --- umac/cmn_services/cmn_defs/inc/wlan_cmn_ieee80211.h | 2 ++ umac/scan/dispatcher/inc/wlan_scan_public_structs.h | 3 +++ umac/scan/dispatcher/inc/wlan_scan_utils_api.h | 13 +++++++++++++ umac/scan/dispatcher/src/wlan_scan_utils_api.c | 3 +++ wmi/inc/wmi_unified_param.h | 2 ++ wmi/src/wmi_unified_tlv.c | 1 + 6 files changed, 24 insertions(+) diff --git a/umac/cmn_services/cmn_defs/inc/wlan_cmn_ieee80211.h b/umac/cmn_services/cmn_defs/inc/wlan_cmn_ieee80211.h index 8e0ce7c36348..2db8c0ebe179 100644 --- a/umac/cmn_services/cmn_defs/inc/wlan_cmn_ieee80211.h +++ b/umac/cmn_services/cmn_defs/inc/wlan_cmn_ieee80211.h @@ -376,6 +376,7 @@ enum element_ie { * @WLAN_EXTN_ELEMID_HECAP: HE capabilities IE * @WLAN_EXTN_ELEMID_HEOP: HE Operation IE * @WLAN_EXTN_ELEMID_MUEDCA: MU-EDCA IE + * @WLAN_EXTN_ELEMID_HE_6G_CAP: HE 6GHz Band Capabilities IE * @WLAN_EXTN_ELEMID_SRP: spatial reuse parameter IE */ enum extn_element_ie { @@ -384,6 +385,7 @@ enum extn_element_ie { WLAN_EXTN_ELEMID_HEOP = 36, WLAN_EXTN_ELEMID_MUEDCA = 38, WLAN_EXTN_ELEMID_SRP = 39, + WLAN_EXTN_ELEMID_HE_6G_CAP = 59, WLAN_EXTN_ELEMID_ESP = 11, }; diff --git a/umac/scan/dispatcher/inc/wlan_scan_public_structs.h b/umac/scan/dispatcher/inc/wlan_scan_public_structs.h index 41ca37625ba0..45095c5b1520 100644 --- a/umac/scan/dispatcher/inc/wlan_scan_public_structs.h +++ b/umac/scan/dispatcher/inc/wlan_scan_public_structs.h @@ -148,6 +148,8 @@ struct element_info { * @cswrp: pointer to channel switch announcement wrapper ie * @widebw: pointer to wide band channel switch sub ie * @txpwrenvlp: pointer to tx power envelop sub ie + * @hecap: pointer to hecap ie + * @hecap_6g: pointer to he 6ghz cap ie * @srp: pointer to spatial reuse parameter sub extended ie * @fils_indication: pointer to FILS indication ie * @esp: pointer to ESP indication ie @@ -194,6 +196,7 @@ struct ie_list { uint8_t *secchanoff; uint8_t *mdie; uint8_t *hecap; + uint8_t *hecap_6g; uint8_t *heop; uint8_t *srp; uint8_t *fils_indication; diff --git a/umac/scan/dispatcher/inc/wlan_scan_utils_api.h b/umac/scan/dispatcher/inc/wlan_scan_utils_api.h index 579ec76bf0d0..f2ab5d307441 100644 --- a/umac/scan/dispatcher/inc/wlan_scan_utils_api.h +++ b/umac/scan/dispatcher/inc/wlan_scan_utils_api.h @@ -1400,6 +1400,19 @@ util_scan_entry_hecap(struct scan_cache_entry *scan_entry) return scan_entry->ie_list.hecap; } +/** + * util_scan_entry_he_6g_cap() - function to read he 6GHz caps vendor ie + * @scan_entry: scan entry + * + * API, function to read he 6GHz caps vendor ie + * + * Return: he caps vendorie or NULL if ie is not present + */ +static inline uint8_t* +util_scan_entry_he_6g_cap(struct scan_cache_entry *scan_entry) +{ + return scan_entry->ie_list.hecap_6g; +} /** * util_scan_entry_heop() - function to read heop vendor ie diff --git a/umac/scan/dispatcher/src/wlan_scan_utils_api.c b/umac/scan/dispatcher/src/wlan_scan_utils_api.c index d949717ec45d..fbeec7590e1c 100644 --- a/umac/scan/dispatcher/src/wlan_scan_utils_api.c +++ b/umac/scan/dispatcher/src/wlan_scan_utils_api.c @@ -390,6 +390,9 @@ util_scan_parse_extn_ie(struct scan_cache_entry *scan_params, case WLAN_EXTN_ELEMID_MUEDCA: scan_params->ie_list.muedca = (uint8_t *)ie; break; + case WLAN_EXTN_ELEMID_HE_6G_CAP: + scan_params->ie_list.hecap_6g = (uint8_t *)ie; + break; default: break; } diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index 51889d1e5b7d..da4cda4d0ab3 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -991,6 +991,7 @@ typedef struct { * @tx_max_rate: max tx rates * @tx_mcs_set: tx mcs * @vht_capable: VHT capabalities + * @min_data_rate: Peer minimum rate * @tx_max_mcs_nss: max tx MCS and NSS * @peer_bw_rxnss_override: Peer BW RX NSS overridden or not. * @is_pmf_enabled: PMF enabled @@ -1047,6 +1048,7 @@ struct peer_assoc_params { uint32_t tx_max_rate; uint32_t tx_mcs_set; uint8_t vht_capable; + uint8_t min_data_rate; uint32_t peer_bw_rxnss_override; uint32_t tx_max_mcs_nss; uint32_t is_pmf_enabled:1, diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 247840e07aae..27c7d3fa8b8b 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -2523,6 +2523,7 @@ static QDF_STATUS send_peer_assoc_cmd_tlv(wmi_unified_t wmi_handle, } /* HE Rates */ + cmd->min_data_rate = param->min_data_rate; cmd->peer_he_mcs = param->peer_he_mcs_count; buf_ptr += sizeof(wmi_vht_rate_set); WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,