From a76abc45d7210c8087a9a98d97296c8a48aa0060 Mon Sep 17 00:00:00 2001 From: Venkateswara Swamy Bandaru Date: Thu, 16 Aug 2018 14:39:19 +0530 Subject: [PATCH] qcacmn: Add supporting functions for extended capabilities IE Add structures and supporting function get bit field value of extended capabilities IE bit field. Change-Id: Iff915320d71473310e2cbc0188508061b14a40f1 CRs-Fixed: 2296592 --- .../cmn_defs/inc/wlan_cmn_ieee80211.h | 12 +++++++ .../dispatcher/inc/wlan_scan_public_structs.h | 12 +++++++ .../scan/dispatcher/inc/wlan_scan_utils_api.h | 36 +++++++++++++++++++ 3 files changed, 60 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 6cf58421779e..a9147169cd72 100644 --- a/umac/cmn_services/cmn_defs/inc/wlan_cmn_ieee80211.h +++ b/umac/cmn_services/cmn_defs/inc/wlan_cmn_ieee80211.h @@ -1088,6 +1088,18 @@ struct wlan_esp_ie { struct wlan_esp_info esp_info_AC_VO; } qdf_packed; +/** + * struct wlan_ext_cap_ie - struct for extended capabilities information + * @ext_cap_id: Extended capabilities id + * @ext_cap_len: Extended capabilities IE len + * @ext_caps: Variable length extended capabilities information + */ +struct wlan_ext_cap_ie { + uint8_t ext_cap_id; + uint8_t ext_cap_len; + uint8_t ext_caps[]; +} qdf_packed; + /** * struct oce_reduced_wan_metrics: struct for oce wan metrics * @downlink_av_cap: Download available capacity diff --git a/umac/scan/dispatcher/inc/wlan_scan_public_structs.h b/umac/scan/dispatcher/inc/wlan_scan_public_structs.h index 84251fc31773..12bfc9ae0d2a 100644 --- a/umac/scan/dispatcher/inc/wlan_scan_public_structs.h +++ b/umac/scan/dispatcher/inc/wlan_scan_public_structs.h @@ -1376,4 +1376,16 @@ enum scan_config { SCAN_CFG_DISABLE_SCAN_COMMAND_TIMEOUT, SCAN_CFG_DROP_BCN_ON_CHANNEL_MISMATCH, }; + +/** + * enum ext_cap_bit_field - Extended capabilities bit field + * @BSS_2040_COEX_MGMT_SUPPORT: 20/40 BSS Coexistence Management Support field + * @OBSS_NARROW_BW_RU_IN_ULOFDMA_TOLERENT_SUPPORT: OBSS Narrow Bandwidth RU + * in UL OFDMA Tolerance Support + */ +enum ext_cap_bit_field { + BSS_2040_COEX_MGMT_SUPPORT = 0, + OBSS_NARROW_BW_RU_IN_ULOFDMA_TOLERENT_SUPPORT = 79, +}; + #endif diff --git a/umac/scan/dispatcher/inc/wlan_scan_utils_api.h b/umac/scan/dispatcher/inc/wlan_scan_utils_api.h index d68246669f4e..e45f15adf7f2 100644 --- a/umac/scan/dispatcher/inc/wlan_scan_utils_api.h +++ b/umac/scan/dispatcher/inc/wlan_scan_utils_api.h @@ -1308,6 +1308,42 @@ util_scan_entry_extcaps(struct scan_cache_entry *scan_entry) return scan_entry->ie_list.extcaps; } +/** + * util_scan_entry_get_extcap() - function to read extended capability field ie + * @scan_entry: scan entry + * @extcap_bit_field: extended capability bit field + * @extcap_value: pointer to fill extended capability field value + * + * API, function to read extended capability field + * + * Return: QDF_STATUS_SUCCESS if extended capability field is found + * QDF_STATUS_E_NOMEM if extended capability field is not found + */ +static inline QDF_STATUS +util_scan_entry_get_extcap(struct scan_cache_entry *scan_entry, + enum ext_cap_bit_field extcap_bit_field, + uint8_t *extcap_value) +{ + struct wlan_ext_cap_ie *ext_cap = + (struct wlan_ext_cap_ie *)util_scan_entry_extcaps(scan_entry); + + uint8_t ext_caps_byte = (extcap_bit_field >> 3); + uint8_t ext_caps_bit_pos = extcap_bit_field & 0x7; + + *extcap_value = 0; + + if (!ext_cap) + return QDF_STATUS_E_NULL_VALUE; + + if (ext_cap->ext_cap_len < ext_caps_byte) + return QDF_STATUS_E_NULL_VALUE; + + *extcap_value = + ((ext_cap->ext_caps[ext_caps_byte] >> ext_caps_bit_pos) & 0x1); + + return QDF_STATUS_SUCCESS; +} + /** * util_scan_entry_athcaps() - function to read ath caps vendor ie * @scan_entry: scan entry