qcacmn: Add support to RNR and multi link IE parsing for ML scoring

Add support to parse RNS and ML IE and fill ml info in the scan
cache entry.

Change-Id: Ia5fdd0310e20d4435343f0535c071ea3d8510ef8
CRs-Fixed: 2961893
此提交包含在:
Bapiraju Alla
2021-06-02 19:48:44 +05:30
提交者 Madan Koyyalamudi
父節點 a390375589
當前提交 561025df10
共有 4 個檔案被更改,包括 237 行新增2 行删除

查看文件

@@ -184,6 +184,7 @@ struct channel_info {
* @rsnxe: Pointer to rsnxe IE
* @ehtcap: pointer to ehtcap ie
* @ehtop: pointer to eht op ie
* @multi_link: pointer to multi lik IE
*/
struct ie_list {
uint8_t *tim;
@@ -242,6 +243,9 @@ struct ie_list {
uint8_t *ehtcap;
uint8_t *ehtop;
#endif
#ifdef WLAN_FEATURE_11BE_MLO
uint8_t *multi_link;
#endif
};
enum scan_entry_connection_state {
@@ -373,6 +377,20 @@ struct non_inheritance_ie {
bool non_inh_ie_found;
};
#ifdef WLAN_FEATURE_11BE_MLO
/**
* struct rnr_mld_info - Reduced Neighbor Report MLD information
* @mld_id: MLD ID
* @link_id: Link ID
* @bss_param_change_cnt: BSS parameters change count
*/
struct rnr_mld_info {
uint8_t mld_id;
uint16_t link_id: 4,
bss_param_change_cnt: 8,
reserved: 4;
};
#endif
/**
* struct rnr_bss_info - Reduced Neighbor Report BSS information
* @neighbor_ap_tbtt_offset: Neighbor AP TBTT offset
@@ -382,6 +400,7 @@ struct non_inheritance_ie {
* @short_ssid: short ssid
* @bss_params: BSS parameters
* @psd_20mhz: 20MHz power spectral density
* @mld_info: MLD information
*/
struct rnr_bss_info {
uint8_t neighbor_ap_tbtt_offset;
@@ -391,6 +410,9 @@ struct rnr_bss_info {
uint32_t short_ssid;
uint8_t bss_params;
uint8_t psd_20mhz;
#ifdef WLAN_FEATURE_11BE_MLO
struct rnr_mld_info mld_info;
#endif
};
/**
@@ -424,29 +446,36 @@ struct neighbor_ap_info_field {
* enum tbtt_information_field - TBTT information field
* @TBTT_NEIGHBOR_AP_OFFSET_ONLY: TBTT information field type
* @TBTT_NEIGHBOR_AP_BSS_PARAM: neighbor AP and bss param
* @TBTT_NEIGHBOR_AP_MLD_PARAM: neighbor AP and MLD param
* @TBTT_NEIGHBOR_AP_SHORTSSID: neighbor AP and Short ssid
* @TBTT_NEIGHBOR_AP_S_SSID_BSS_PARAM: neighbor AP, short ssid and bss param
* @TBTT_NEIGHBOR_AP_BSSID: neighbor AP and bssid
* @TBTT_NEIGHBOR_AP_BSSID_BSS_PARAM: neighbor AP, bssid and bss param
* @TBTT_NEIGHBOR_AP_BSSID_BSS_PARAM_20MHZ_PSD: neighbor AP, bssid and bss
* param and 20MHz PSD
* @TBTT_NEIGHBOR_AP_BSSID_MLD_PARAM: neighbor AP, bssid and MLD param
* @TBTT_NEIGHBOR_AP_BSSSID_S_SSID: neighbor AP, bssid and short ssid
* @TBTT_NEIGHBOR_AP_BSSID_S_SSID_BSS_PARAM: neighbor AP, bssid, short ssid
* and bss params
* @TBTT_NEIGHBOR_AP_BSSID_S_SSID_BSS_PARAM_20MHZ_PSD: neighbor AP, bssid,
* short ssid, bss params and 20MHz PSD
* @TBTT_NEIGHBOR_AP_BSSID_S_SSID_BSS_PARAM_20MHZ_PSD_MLD_PARAM: neighbor AP,
* bssid, short ssid, bss params, 20MHz PSD and MLD param
*/
enum tbtt_information_field {
TBTT_NEIGHBOR_AP_OFFSET_ONLY = 1,
TBTT_NEIGHBOR_AP_BSS_PARAM = 2,
TBTT_NEIGHBOR_AP_MLD_PARAM = 4,
TBTT_NEIGHBOR_AP_SHORTSSID = 5,
TBTT_NEIGHBOR_AP_S_SSID_BSS_PARAM = 6,
TBTT_NEIGHBOR_AP_BSSID = 7,
TBTT_NEIGHBOR_AP_BSSID_BSS_PARAM = 8,
TBTT_NEIGHBOR_AP_BSSID_BSS_PARAM_20MHZ_PSD = 9,
TBTT_NEIGHBOR_AP_BSSID_MLD_PARAM = 10,
TBTT_NEIGHBOR_AP_BSSSID_S_SSID = 11,
TBTT_NEIGHBOR_AP_BSSID_S_SSID_BSS_PARAM = 12,
TBTT_NEIGHBOR_AP_BSSID_S_SSID_BSS_PARAM_20MHZ_PSD = 13
TBTT_NEIGHBOR_AP_BSSID_S_SSID_BSS_PARAM_20MHZ_PSD = 13,
TBTT_NEIGHBOR_AP_BSSID_S_SSID_BSS_PARAM_20MHZ_PSD_MLD_PARAM = 16
};
/**

查看文件

@@ -615,6 +615,18 @@ util_scan_entry_copy_ie_data(struct scan_cache_entry *scan_entry,
return QDF_STATUS_E_NOMEM;
}
#ifdef WLAN_FEATURE_11BE_MLO
static inline void util_scan_free_ml_info(struct scan_cache_entry *scan_entry)
{
if (scan_entry->ml_info)
qdf_mem_free(scan_entry->ml_info);
}
#else
static inline void util_scan_free_ml_info(struct scan_cache_entry *scan_entry)
{
}
#endif
/**
* util_scan_free_cache_entry() - function to free scan
* cache entry
@@ -633,6 +645,8 @@ util_scan_free_cache_entry(struct scan_cache_entry *scan_entry)
qdf_mem_free(scan_entry->alt_wcn_ie.ptr);
if (scan_entry->raw_frame.ptr)
qdf_mem_free(scan_entry->raw_frame.ptr);
util_scan_free_ml_info(scan_entry);
qdf_mem_free(scan_entry);
}